Form 1c detaljer. Grundläggande information om formuläret. Datatyper tillgängliga i en hanterad form

Hur man lägger till ytterligare information till ett katalogelement i 1C Accounting 8.3 (revision 3.0)

2016-12-07T18:20:33+00:00

Det händer att vi saknar de funktioner som redan finns tillgängliga i 1C. Och du behöver inte alltid kontakta en programmerare. Jag kommer att berätta om ett av dessa fall i förhållande till nya 1C: Accounting 8.3 (utgåva 3.0).

Låt oss inte ha tillräckligt med fält för att ange information om våra motparter. Och vi vill lägga till ett nytt fält, som kommer att kallas "Status" och har ett av tre värden - "Hög", "Medium" och "Låg". Jag kommer att berätta nedan steg för steg hur du lägger till ett sådant fält utan att gå in i konfiguratorn.

1. Gå till avsnittet "Administration" och välj " Allmänna Inställningar" ():

2. Hitta och markera kryssrutan "Ytterligare detaljer och information" om den inte redan är markerad. Klicka på länken "Ytterligare detaljer":

3. I den vänstra delen av inställningsfönstret som öppnas, välj "Konto". Klicka på knappen Ny i verktygsfältet.

4. Ett fönster för att skapa nya detaljer för delar av katalogen "Motparter" har öppnats. Ange "Status" i fältet Namn. Lämna "Tilläggsvärde" som värdetyp, även om du i framtiden kan tänka på att andra värdetyper är möjliga (sträng, nummer, datum, etc.). Men vad vi behöver nu är mervärdet, eftersom vi vill ge användaren ett begränsat urval av tre alternativ.

5. För att skapa varje alternativ, gå till fliken "Värden", klicka på knappen "Skapa" där, ange namnet på värdet (till exempel "Hög") och klicka på knappen "Spara och stäng".

6. Och så vidare tills alla tre värden skapas med namnen "Hög", "Medium" och "Låg" som visas i figuren nedan. Klicka på knappen "Spara och stäng".

7. Som du kan se har motparten nu attributet Status i listan med ytterligare detaljer.

8. Om vi ​​nu går till någon del av motpartskatalogen kommer vi att se ett nytt statusfält längst ner i formuläret ( Om du inte ser det utökar du gruppen "Ytterligare detaljer" som komprimeras i formuläret.):

9. I det här fältet kan vi ersätta ett av de tre värdena vi skapade. Du kan göra ett urval med hjälp av detta fält i form av en lista, det kan visas i rapporter osv.

Nedan listas de viktigaste 1C-objekten som används när man arbetar med hanterade formulär. Korta kodexempel ges som visar den traditionella användningen av dessa objekt vid skrivning av 1C-konfigurationer.

Detta formulär

Används i formulärmodulen, i procedurer&På klienten och &På servern.

Ger dig tillgång till både formulärelement och detaljer.

Formelementet nås via ett objekt Element och ser ut så här:

ThisForm.Elements.VersionNumber.Header = "v."+ProgramVersion;

Åtkomst till attribut som finns på formuläret sker så här:

ThisForm.Advertisement Text="Hej, kamrater!";

Förenklad tillgång till formulärelement och detaljer

I princip behöver du inte ange ett nyckelord i en formulärmodul Detta formulär . Du kan komma åt formulärelement och detaljer på ett förenklat sätt:

// Formelement

Elements.VersionNumber.Title = "v."+ProgramVersion;

// Formulärdetaljer

Annons Text="Hej, kamrater!";

Funktioner för att få formulärdetaljer (viktigt!)

Om formattributet har en enkel typ - Sträng, nummer, datum ... då kan du få (ställa in) värdet på attributet helt enkelt genom namn:

Text=Produktnamn; // Produktnamn är ett formattribut

Men på detta sätt är det omöjligt att få detaljer av en "komplex" typ -Värdetabell, Värdeträdet . När du försöker få ett attribut med denna typ efter namn, kommer ett objekt av typen att returnerasDataFormsCollection.

För att få värdet av ett attribut med en "komplex" typ måste du använda funktionenFormAttributesValue():

CurrentTable=FormAttributesValue("SelectedConstructionObjects");

För att ställa in värdet på ett "komplext" attribut kan du använda funktionenValueInFormAttributes(<Значение>, <ИмяРеквизита>) , båda parametrarna krävs.

Funktioner FormAttributesValue() Och ValueInFormAttributes()endast tillgänglig på servern.

Ett objekt

Strängt taget det här nyckelord inom blankett nr. Helt enkelt, när ett formulär skapas, till exempel en elementform, skapar 1C automatiskt ett attribut på formuläret med namnet Ett objekt . Genom denna prop egenskaperna för det aktuella objektet som redigeras i formuläret är tillgängliga.

eller mer komplett notation:

Detta Objekt

Innehåller själva objektet. Avsedd för att få ett objekt i en objektmodul eller en formulärmodul.

Användning: Endast läsning.

Tillgänglighet: Server, tjock klient, extern anslutning.

Användarens arbete med referensböcker och dokument i 1C består av att fylla i fält på formuläret.

1C-detaljer är katalog- och dokumentfält som visas på formuläret för användaren att fylla i.

Låt oss ta en närmare titt på ämnet detaljer i 1C.

Vad är 1C-detaljer

Varje katalog och 1C-dokument består av en uppsättning fält. Sådana fält kallas 1C-detaljer (för en 1C-programmerare).

I konfiguratorn, i 1C-konfigurationsträdet, öppna valfri katalog eller dokument och du kommer att se grenen Detaljer. Detta är en lista med katalogdetaljer (fält).

Se hur samma 1C-detaljer ser ut på 1C-katalogformuläret.

Varje 1C-attribut har egenskaper som indikerar vilken typ av värde som lagras i attributet (sträng, nummer, etc.) och hur användaren kommer att arbeta med det.

Högerklicka på valfritt 1C-attribut och klicka på Egenskaper. En lista med egenskaper för det valda attributet öppnas i fönstret till höger.

Huvudegenskaper för 1C-detaljer:

Standard 1C detaljer

Som du märkte finns det på katalogformuläret 1C-detaljer som inte är listade i konfiguratorn: grupp, namn, BIC.

Kataloglistformuläret innehåller också 1C-detaljer som inte finns i listan: raderingsmärke.

Dessa är standard 1C detaljer. Vad det är? Alla har en standarduppsättning med 1C-detaljer. För kataloger är detta till exempel kod och namn. För dokument är detta datum och nummer.

Standard 1C-detaljer kan ses enligt följande:

  • Gå till redigeraren för 1C-objektet (katalog eller dokument) genom att dubbelklicka på det med musen
  • Välj fliken Data i redigeraren som öppnas
  • Här kan du konfigurera standarddetaljerna Kod och Namn på katalogen
  • Klicka på knappen 1C Standard Details för att se hela listan.

Allmänna 1C-detaljer

Från och med version 1C 8.2.14 har ett nytt 1C-objekt dykt upp i 1C - Allmänna 1C-detaljer. Med den kan du lägga till en egenskap (fält) som kommer att finnas i många kataloger och dokument samtidigt.

Egenskaper för allmänna 1C-attribut:

  • Autoanvändning – lägger till allmänna 1C-detaljer till alla kataloger och dokument på en gång
  • Komposition - låter dig lägga till allmänna 1C-detaljer endast i de nödvändiga katalogerna och dokumenten (automatisk användning är då inställd på Använd inte).

Hur man lägger till 1C-detaljer

Högerklicka på grenen 1C Details i önskad katalog och välj Lägg till.

Vi måste ange namnet på 1C-attributet, till exempel "Kontorsadress" och synonymen "Kontorsadress". Lämna standardtypen som String, men markera kryssrutan Obegränsad längd.

Låt oss lägga till ytterligare ett 1C-attribut på samma sätt, bara vi väljer den booleska typen och kallar den "Arbetar på helger".

Hur man visar detaljer på ett 1C-formulär (1C tjock klient)

Låt oss utöka grenen Formulär i samma katalog. För att öppna formuläret, välj elementformuläret och dubbelklicka på det med musen.

Dra kanten på formen med musen och sträck ut den (valfritt).

Klicka på knappen "Dataplacering" i konfiguratorpanelen. Du kan också använda menyn Formulär/Dataplacering.

Du ser att våra uppgifter inte visas i formuläret. Kolla dem. Och även kryssrutorna Infoga etiketter och Placera automatiskt.

Hur man visar detaljer på formulär 1C ( tunn klient 1C)

Låt oss utöka grenen Formulär i samma katalog. Välj formen på elementet och dubbelklicka på det med musen.

Expandera objektraden på fliken Detaljer. Du kommer att se en lista med detaljer som tidigare lagts till i katalogen.

Dra nu bara det önskade attributet från det högra fönstret till det vänstra och det kommer att visas i formuläret.

Form 1C detaljer

I den tjocka klienten har formuläret sina egna detaljer. De finns på fliken Detaljer.

Dessa uppgifter sparas inte i databasen, men de kan användas på formuläret för de fält som behövs för att arbeta med formuläret.

Du har till exempel lagt till en bock i formuläret. När du klickar på det händer något på formuläret. Innebörden av kryssrutan spelar ingen roll för dig (du behöver inte skriva ner den) - den används bara för att byta form när du arbetar med den. I det här fallet använder du inte katalogattributet som data, utan formattributet.

Periodiska uppgifter 1C

I 1C version 7.7 fanns det periodiska detaljer. Deras betydelse är denna: betydelsen av rekvisita är olika vid olika datum. Till exempel är värdet den 1 september ett och den 1 oktober ett annat. Samma rekvisita.

I 1C 8 finns inga periodiska detaljer. Detta implementeras enligt följande:

Formulärdetaljer

En uppsättning formulärdetaljer beskriver sammansättningen av data som visas, redigeras eller lagras i formuläret. Samtidigt ger själva formulärinformationen inte möjlighet att visa och redigera data. Formulärelement (se avsnittet "Formulärelement" i det här kapitlet) associerade med formulärdetaljer används för visning och redigering. Uppsättningen av alla formulärdetaljer kommer att kallas formulärdata.

Viktig! Man måste komma ihåg att, till skillnad från konventionella former, alla data kontrollerad form måste beskrivas i form av detaljer. Det är inte tillåtet att använda formulärmodulvariabler som datakällor för formulärelement.

Det går att tilldela Grundläggande formulärdetaljer, d.v.s. attribut som bestämmer standardfunktionaliteten för formuläret (formulärtillägg). Man bör komma ihåg att en form bara kan ha ett huvudattribut.

Formulärförlängning– det här är ytterligare egenskaper, metoder och formulärparametrar för ManagedForm-objektet, karaktäristiska för objektet som är formulärets huvudelement.

Under formulärutvecklingsprocessen kan du uttryckligen ställa in möjligheten att visa och redigera specifika formulärdetaljer, i termer av roller, med hjälp av egenskaperna Visa och Redigera (för mer information, se avsnittet "Rollbaserade formulärinställningar" i "Redaktörer" ” kapitel). Dessutom kan tillgängligheten för ett visst attribut i själva formuläret konfigureras med hjälp av funktionella alternativ (mer information om funktionella alternativ finns i kapitlet "Konfigurationsgränssnittshantering").

Form attribut egenskap Sparad dataär en indikation på att interaktiv ändring av detaljerna kommer att resultera i ett försök att låsa formulärdata för redigering, samt automatisk installation ett tecken på modifierad form.

Datatyper tillgängliga i en hanterad form

Ett hanterat formulär skiljer sig också från ett vanligt formulär i vilken typ av data den arbetar med. Om vanlig form fungerar med de flesta av de typer som 1C:Enterprise tillhandahåller (inklusive typerna DirectoryObject, DocumentObject, etc.), sedan i en hanterad form kan följande kategorier av typer urskiljas:

  • typer som används direkt i formuläret är de typer som finns på sidan av den tunna klienten och webbklienten (till exempel Number, DirectoryLink.Products, GraphicScheme, TabularDocument);
  • typer som kommer att konverteras till speciella datatyper – hanterade formulärdatatyper. Sådana typer visas i listan med formulärdetaljer inom parentes, till exempel (DirectoryObject.Products);
  • dynamisk lista (för mer information, se avsnittet "Dynamisk lista" i det här kapitlet).

Konvertera applikationsobjekt till formulärdata

Vissa applikationstyper (som DirectoryObject, etc.) finns inte på den tunna klientsidan och webbklienten (se kapitlet Managed Application Concept för mer information). Därför, för att representera sådana applikationstyper i formuläret, har plattformen introducerat speciella datatyper utformade för att fungera i hanterade formulär. Denna funktion i en hanterad applikation gör det nödvändigt att konvertera applikationsobjekt till formulärdata (och vice versa).

Följande datatyper används:

  • Form DataStructure – innehåller en uppsättning egenskaper av en godtycklig typ. Egenskaper kan vara andra strukturer, samlingar eller strukturer med samlingar. Denna typ representeras till exempel i formen DirectoryObject.
  • En FormDataCollection är en lista med inskrivna värden, liknande en array. Ett samlingselement nås med index eller identifierare. Åtkomst med ID kanske inte är tillgänglig i vissa fall. Detta beror på typen av applikationsobjekt som representeras av denna samling. Identifieraren kan vara vilket heltal som helst. Denna typ representeras till exempel i formen tabellformad del.
  • Form DataStructureWithCollection är ett objekt som representeras som en struktur och en samling samtidigt. Det kan behandlas som vilken som helst av dessa enheter. Denna typ representerar till exempel en uppsättning poster i ett formulär.
  • Form DataTree – ett objekt utformat för att lagra hierarkisk data.

Ett applikationsobjekt representeras av antingen ett eller flera formulärdataelement. I allmän syn Hierarkin och sammansättningen av formulärdata beror på komplexiteten och sammankopplingen av applikationsobjekten i det hanterade formuläret.

Till exempel kommer ett dokument som innehåller en tabelldel att representeras av ett objekt av typen FormDataStructure (själva dokumentet), till vilket ett objekt av typen FormDataCollection (tabelldelen av dokumentet) är underordnat.

Viktig! När du utvecklar en konfiguration är det viktigt att komma ihåg att applikationsobjekt endast är tillgängliga på servern, medan formulärdataobjekt kan användas på både servern och klienten.

Skicka data mellan klient- och serverdelar av ett hanterat formulär

I själva verket kan vi säga att formulärdata är en enhetlig representation av data från olika applikationsobjekt med vilka formuläret fungerar enhetligt och som finns på både servern och klienten. Det vill säga att formuläret innehåller en viss "projektion" av applikationsobjektdata i form av sina egna datatyper och utför konvertering mellan dem vid behov. Men om konfigurationsutvecklaren implementerar sin egen databehandlingsalgoritm, måste han utföra datakonvertering (från specialiserade typer till applikationstyper och vice versa) oberoende.

När du redigerar formulärdetaljer i en specialiserad redigerare (för mer information, se avsnittet "Formulardetaljer" i kapitlet "Redaktörer") är det möjligt att påverka överföringen av data mellan klienten och servern medan formuläret körs. Informationsredigerarens kolumn används för detta. Använd alltid. Effekten av den här egenskapen skiljer sig för tre typer av attribut:

  • För attribut som är underordnade en dynamisk lista (kolumn dynamisk lista):
    • egenskapen aktiverad – attributet läses alltid från databasen och inkluderas i formulärdata;
    • egenskapen är inaktiverad - attributet läses från databasen och inkluderas i formulärdata endast när det är synligt i det här ögonblicket ett formelement associerat med ett attribut eller dess underordnade attribut.
  • För rekvisita som är underordnad rörelsesamlingen:
    • egenskapen är aktiverad – dokumentrörelser läses från databasen och kommer att finnas i formulärdata;
    • egenskapen är inaktiverad - dokumentrörelser kommer inte att läsas från databasen och inkluderas inte i formulärdata (om det inte finns något formulärelement som refererar till dokumentrörelser).
  • Övriga formulärdetaljer:
    • egenskapen är aktiverad – attributet kommer att finnas i formulärdata, oavsett om det finns minst ett formulärelement som är associerat med attributet eller dess underordnade attribut;
    • egenskapen är inaktiverad - attributet kommer endast att finnas i formulärdata om det finns ett formulärelement kopplat till attributet eller dess underordnade attribut. Till skillnad från dynamiska listattribut spelar inte synligheten för elementet som är kopplat till attributet någon roll här.

Notera. Man bör komma ihåg att egenskapen som ställs in på det överordnade attributet påverkar alla underordnade attribut. Till exempel, om egenskapen Använd alltid rensas för den tabellformade delen av dokumentet, anser systemet att denna egenskap också rensas för alla underordnade detaljer (trots fastighetens faktiska tillstånd).

Metoder för att konvertera applikationsobjektdata till formulärdata

För att konvertera applikationsobjekt till formulärdata och tillbaka finns det en uppsättning globala metoder:

  • ValueInFormData(),
  • FormDataInValue(),
  • CopyFormData().

Viktig! Metoder som fungerar med applikationsobjekt är endast tillgängliga i serverprocedurer. Metoden för att kopiera värden mellan formulärdata är tillgänglig på servern och på klienten, eftersom den inte kräver applikationsobjekt som parametrar.

När du konverterar formulärdata till ett applikationsobjekt måste du ta hänsyn till deras kompatibilitet.

  • ValueInFormData() – konverterar ett applikationsobjekt till formulärdata;
  • FormDataInValue() – konverterar formulärdata till ett objekt av applikationstyp;
  • CopyFormData() – kopierar formulärdata som har en kompatibel struktur. Returnerar True om kopieringen lyckades, eller False om objektstrukturen är inkompatibel.

Notera. När du utför standardåtgärder (öppnar ett formulär, utför ett standardskrivkommando, etc.) av ett formulär med huvuddetaljerna, utförs konverteringen automatiskt.

Låt oss ge ett exempel på hur du använder datatransformation i dina egna algoritmer.

&OnServerProcedure When CreateOnServer(Failure, StandardProcessing)

ObjectProduct = Directories.Products.FindByName("Kaffekanna").GetObject(); ValueInFormData(ObjectItem, Object);

Slut på förfarandet

&OnClient Procedur Write()

WriteOnServer();

Slut på förfarandet

&OnServer-procedur WriteOnServer()

ObjectProduct = FormDataValue(Object, Type("DirectoryObject.Products")); ObjectItem.Write();

Slut på förfarandet

ManagedForm-objektet har också metoder tillgängliga på servern:

  • ValueВFormAttribute() – konverterar ett applikationstypobjekt till det angivna formattributet.
  • FormAttributeVValue() – konverterar ett formulärdataattribut till ett objekt av en applikationstyp.

Att använda dessa metoder är vanligtvis bekvämare, eftersom de har till exempel information om typen av formulärdetaljer. Dessutom ställer metoden Form AttributesValue() in överensstämmelsen mellan formulärdata och objektet, som används när meddelanden genereras. Du kan läsa mer om detta i kapitlet "Servicenavigeringsfunktioner".

Låt oss ge ett exempel på hur du använder dessa metoder.

&OnServer Procedur RecalculateOnServer()

// Konverterar objektattributet till ett applikationsobjekt. Document = Form AttributesValue("Objekt"); // Utför omräkning med den metod som definieras i dokumentmodulen. Document.Recalculate(); // Konverterar applikationsobjektet tillbaka till en prop. ValueВFormAttributes(Dokument, "Objekt");

Slut på förfarandet

Mjukvarugränssnitt

FormDataTree

  • FindById
  • GetItems

Beskrivning:

Designad för att modellera ett träd i hanterade formulärdata.

Detta objekt kan serialiseras till/från XDTO. XDTO-typ motsvarande detta objekt definieras i namnområdet. XDTO-typnamn:

GetItems

Syntax:

GetItems()

Returvärde:

Typ: Formulär DataInsamling av trädelement.

Beskrivning:

Får en samling av trädelement på toppnivå.

Tillgänglighet: klient, server, tunn klient, webbklient.

FindById

Syntax:

FindById(<Идентификатор>)

Alternativ:

<Идентификатор>(nödvändig)

Typ: Antal. Trädelementidentifierare.

Returvärde:

Typ: FormDataTreeElement.

Beskrivning:

Får ett samlingselement efter ID.

Tillgänglighet: klient, server, tunn klient, webbklient.

FormDataTreeItem

Egenskaper:

<Имя свойства> (<Имя свойства>)

  • GetId (GetId)
  • GetParent
  • GetItems
  • Fast egendom

Beskrivning:

Formulärdataträdelement.

FormDataTreeItemCollection

Samlingselement: DataFormTreeElement

För ett objekt är det möjligt att gå igenom samlingen med operatorn För varje... Från... Slinga. Genomgången väljer elementen i samlingen. Det är möjligt att komma åt ett insamlingselement med [...]-operatören. Indexet för elementet skickas som ett argument.

  • Föra in
  • Lägg till
  • Index (IndexOf)
  • Räkna
  • Klar
  • Skaffa sig
  • Flytta
  • Radera

Beskrivning:

Samling av träelement.

Tillgänglighet: klient, server, tunn klient, webbklient.

Se även:

  • FormDataTreeElement, GetElements-metoden
  • DataFormTree, metoden GetItems

Funktioner av att arbeta med ett värdeträd

Uppdatering av träd

Det finns ett problem faller plattformar när du uppdaterar trädet.

Om någon nod i trädet har utökats och en underordnad nod har valts, då när du uppdaterar trädet med funktionen ValueInFormData plattformen faller.

Lösning: Du måste rensa trädet innan du uppdaterar.

Till exempel:

&Om servern Procedur ClearTree(elements) För varje element från elementen Loop ClearTree(element.GetElements()); EndCycle; elements.Clear(); Slut på förfarandet

&På serverproceduren Fill Concept Tree() dConcepts = srProperties.Build Concept Tree(OnDate, Meta.CurrentIB()); ClearTree(ConceptTree.GetItems()); ValueInFormData(dConcepts, ConceptTree); Slut på förfarandet

&OnClient Procedur OnDateOnChange(Element) Fill ConceptTree(); Slut på förfarandet

Allmänna detaljer i 1C 8.3 är ett plattformsmetadataobjekt som låter dig använda ett attribut för många konfigurationsobjekt (kataloger, dokument, kontoplaner, etc.). Objektet skapades främst för att underlätta utvecklarens arbete och för att separera data.

Allmänna detaljer implementerades initialt i version 1C 7.7, men utvecklarna inkluderade det inte omedelbart i plattformsversion 8. Mekanismen för allmänna detaljer introducerades av 1C-utvecklare endast i release 8.2.14.

Det är väldigt bekvämt att lägga till allmänna detaljer för att inte ändra standardobjekt i konfigurationen; jag använder dem ofta tillsammans med .

Efter att ha lagt till ett allmänt attribut kan det användas i frågor och visas på objektformuläret - Utåt sett skiljer det sig inte från vanlig rekvisita.

Den enda begränsningen för allmänna detaljer är oförmågan att använda dem i .

Låt oss titta på de grundläggande inställningarna och egenskaperna för allmänna detaljer som skiljer sig från andra konfigurationsobjekt:

Förening— En lista över objekt för vilka de allmänna detaljerna kommer att användas; inställningen påminner om att upprätta en utbytesplan.

Få 267 videolektioner på 1C gratis:

Automatisk användning— inställningen avgör om allmänna rekvisita kommer att användas för de objekt som har angett "Automatisk" användningsläge.

Dataseparation— Vi kommer att överväga denna inställning separat.

Separering av data i 1C med hjälp av vanliga detaljer

Dataseparation- en mekanism som liknar mekanismen. Men prestandan för denna mekanism är mer effektiv och den är lättare att konfigurera.

Mekanismen låter dig konfigurera visningen av endast element som användaren kan se. Du kan till exempel skilja på alla objekt (dokument, kataloger etc.) där en viss organisation är installerad.

Ställa in dataseparation med hjälp av allmänna 1C-detaljer

För att konfigurera de allmänna detaljerna måste du ange dataseparationen - Dela upp. Omedelbart efter att ha klickat, kommer systemet att erbjuda att skapa standardredovisningsparametrar:

I det här fallet kommer det att vara nödvändigt att ange sessionsparametrarna när du startar systemet; hur man gör detta beskrevs med ett exempel i artikeln.

Detta slutför installationen - användaren kommer endast att ha tillgång till informationen som anges i de valda sessionsparametrarna.

Exempel på användning av vanliga rekvisita

Låt oss titta på att ställa in allmänna rekvisita i 1C 8.3 med hjälp av exemplet på en ramkonfiguration och rekvisita Organisation:

Det finns 3 dokument i systemet där det är nödvändigt att ange organisationens detaljer: dessa är kvittofakturan, utgiftsfakturan och lönelistan.

Inställningen är enkel:

  1. Vi skapar ett nytt Allmänt attribut, ange typen - DirectoryLink.Organization.
  2. I sammansättningen ordnar vi våra dokument - Använda sig av.

Det var allt, installationen är klar!

Låt oss se resultatet:

Systemet visar allmänna detaljer "som om de vore dina egna": i förfrågningar, i formulärdetaljer och på andra ställen. Det här är så magi! 🙂

Allmänna krav 1C 8.3 är inte tillagda