Automatische vervanging van gegevens uit een 1C-document. Automatisch prijzen in documenten invoegen bij het selecteren van artikelen

Laten we het volgende probleem oplossen. Het is noodzakelijk dat bij het aanmaken of wijzigen van een Dienstverleningsdocument en bij het toevoegen van een reeks diensten aan het tabelgedeelte, de huidige prijs, verkregen uit het informatieregister en overeenkomend met de datum van het document, onmiddellijk wordt ingevoegd.

Om dit te doen heb je nodig:

    schrijf een RetailPrice-functie die de huidige prijs retourneert;

    roep de functie aan wanneer een nieuw item aan het document wordt toegevoegd.

Omdat een dergelijke functie in de toekomst nodig kan zijn, zullen we deze op een "publiek toegankelijke" plaats schrijven - in een gemeenschappelijke module.

1. Maak een functie Verkoopprijs in de afdeling Algemeen – Algemene modules met de naam Werken met mappen. Zet vlag Serveroproep(zodat exportprocedures en functies van deze module vanaf de client kunnen worden opgeroepen) (Fig. 71a).

Rijst. 71a. Algemene module-eigenschappen

2. Plaats de volgende tekst in de module.

Functie RetailPrice(HuidigeDatum,ServiceNomenclatuurElement)Exporteren

//Maak een hulpobject Selectie

Selectie = Nieuwe structuur("Servicenomenclatuur",Servicenomenclatuurelement);

// Haal de huidige registerbronwaarden op

ResourceValues=InformationRegisters.Prices.GetLast(HuidigeDatum, Selectie);

ReturnResourceValue.Prijs;

Eindfunctie

Laten we de functie uitleggen.

Om de verkoopprijs te krijgen, moet u twee parameters aan de functie doorgeven:

    Huidige datum– een parameter van het type Datum definieert het punt op de tijdas waarop we geïnteresseerd zijn in de waarde van de verkoopprijs.

Deze structuur bevat Selectie volgens registermetingen. Met zijn hulp wordt de vereiste dimensie van het register van de nomenclatuur van diensten bepaald, die gelijk is aan de verwijzing naar het directory-element dat aan de functie wordt doorgegeven.

Naam structuursleutel ("H Nomenclatuur van diensten") moet overeenkomen met de naam van de registerdimensie die is opgegeven in de configurator, en met de waarde van het structuurelement ( Element van de nomenclatuur van diensten) specificeert de waarde die voor deze dimensie is geselecteerd.

De tweede regel bevat een oproep naar de informatieregisterbeheerder Prijzen ( Registers van prijzen) en uitvoering van de methode UitvoerenLaatste(), die de bronwaarde retourneert van de meest recente registerinvoer die overeenkomt met de datum die aan de functie is doorgegeven ( Huidige datum) en meetwaarden registreren Selectie.

Methode Krijg laatste retourneert een structuur met bronwaarden, die is opgeslagen in een variabele Bronwaarden.

In de volgende regel krijgen we de vereiste verkoopprijs door de naam van de vereiste registerbron aan te geven, gescheiden door een punt ( WaardeResources.Prijs) en retourneer het wanneer de functie wordt uitgevoerd.

Dat. deze functie kan op een bepaald moment worden aangeroepen.

Moet openen Documentformulier Uitvoering van diensten(het is eerder gemaakt). IN Formuliermodule nodig procedure toevoegen bij wijzigen.

Dubbelklik hiervoor op het formulierelement Lijst met artikelen en diensten (Afb. 71b).

Rijst. 71b. Elementen van het Serviceprestatiedocument

In het eigenschappenvenster van de gebeurtenis Wanneer het verandert maak een gebeurtenishandler met de volgende tekst:

&OnClient

Procedure Lijst met nomenclaturen Service bij wijziging (element)

// Haal de volgende rij van de tabelsectie op

TabularPart Row = Elements.Lijst met nomenclatuur.CurrentData;

//Prijs instellen

TabularPart Row.Price = Werken met Directories.RetailPrice(Object.Date, TabularPartLine.Service);

Einde procedure

Laten we de functie uitleggen.

De eerste regel is al bekend: eerst krijgen we de huidige regel van het tabelgedeelte van het document, omdat we hebben het later nodig en slaan het op in een variabele RijTabelOnderdeel.

Vervolgens roepen we de functie aan Verkoopprijs() van een gemeenschappelijke module Werken met mappen.

De eerste parameter voor de functie geeft de datum door van het document waarvoor u de prijs wilt weten. We halen de documentdatum uit de belangrijkste details van het formulier - Object.Datum.

De functie retourneert de laatste prijswaarde en deze waarde wordt toegewezen aan het veld Prijs in de huidige rij van het tabelgedeelte van het document ( RijTabelOnderdeel.Prijs).

Houd er rekening mee dat de procedure Lijst met nomenclaturenServiceWhenChanged() begint te werken in de formuliermodule aan de clientzijde, omdat Dit is de interactieve gebeurtenishandler van het formulier. Bij het maken van een sjabloon voor deze procedure plaatst het platform automatisch een compilatierichtlijn vóór de procedurebeschrijving &OnClient.

Vervolgens roepen we de functie aan Verkoopprijs(). Omdat deze functie zal niet aan de clientzijde gevonden worden, de uitvoering zal dan overgebracht worden naar de algemene module Werken met mappen, dat op de server draait. Nadat de functie is voltooid, wordt de programmacode verder uitgevoerd op de client.

Laten we de bovenstaande stappen controleren en de applicatie starten in 1C: Enterprise-modus. Laten we werken met de ontwikkelde configuratie.

GEGEVENS INVOEREN IN DE DB

1. Voer minimaal 8 documenten Dienstverlening in de applicatie in.

Heel vaak moet u tijdens het werken in het 1C-programma snel meerdere documenten invoeren of nieuwe objecten aan mappen toevoegen (type artikel, organisatie, magazijn, kassa, enz.). Tegelijkertijd heeft niet iedereen inzicht in hoe de invoer van basiswaarden kan worden geautomatiseerd, zodat bij het maken ervan de vereiste waarden onmiddellijk in de velden worden vervangen. Hoe je dit doet, vertel ik je in dit artikel.
Het 1C-programma beschikt over mechanismen waarmee u snel de waarden van details in documenten en naslagwerken kunt invullen. Op basis van hun actie kunnen ze worden onderverdeeld in de volgende typen:

  • Vervanging van één waarde
  • Een waarde vervangen door selectie
  • Statistische details invullen
  • Vervanging van eerder ingevoerde gegevens
  • Waarden vervangen met behulp van een patroon
  • Een nieuw document invoeren door te kopiëren

Vervanging van een enkele waarde waarvoor de gebruiker rechten heeft.

Stel dat uw organisatie drie magazijnen heeft. Deze worden in de database ingevoerd. Tegelijkertijd mag de manager slechts goederen van één persoon verkopen. Bij het aanmaken van een nieuw document wordt dit magazijn automatisch ingevoegd. Dit werkt op basis van de ingestelde rechten van de gebruiker. Dat wil zeggen, door de rechten uit te schakelen op objecten waarmee de gebruiker niet werkt, kunt u de gegevensinvoer automatiseren.

Een waarde vervangen op basis van de selectie die is opgegeven in het lijstformulier.

Als de lijst is ingesteld op selectie op een bepaald detail (kassa, bankrekening, magazijn), wordt dit detail automatisch ingevuld in het nieuwe document. U stelt bijvoorbeeld de selectie per kassa in in de vorm van een lijst met kassadocumenten. Wanneer u een nieuw betaaldocument afgeeft, wordt informatie over de geselecteerde kassa automatisch uit de lijst gehaald. En omdat er voor de kassa een organisatie is opgegeven, worden gegevens over de organisatie automatisch ingevuld. U kunt selecties gebruiken in elke lijst met documenten.

Statistische details invullen.

Het 1C-programma houdt statistieken bij over de invoer van basiswaarden voor elke gebruiker. Als u bij het aanmaken van een nieuw document twee keer dezelfde organisatie, divisie, magazijn, zakelijke transactie, etc. hebt ingevoerd, analyseert het programma de laatst ingevoerde waarden. Het statistische vulalgoritme ‘past’ zich dus automatisch aan elke gebruiker aan.
Als de gebruiker deze keten in een nieuw document schendt, zal het programma dit begrijpen en na een tijdje nieuwe waarden gaan vervangen, maar in het eerste dergelijke document zullen de waarden niet worden vervangen.
Het invullen van eerder ingevoerde gegevens bij het selecteren van de waarde van een ander detail is mogelijk als u bijvoorbeeld een handelsovereenkomst of contract selecteert waarbij alle hoofdvelden zijn ingevuld (magazijn, betalingsschema, prijzen, etc.). Bij het vastleggen van een overeenkomst of contract in een document worden de gegevens ingevuld volgens de volgende regels:

alle gegevens die in de overeenkomst of het contract zijn vermeld, worden ingevuld;

als een waarde (bijvoorbeeld verdeling) niet in de overeenkomst of het contract is gespecificeerd, wordt deze waarde ingevuld volgens de statistieken. Als bij het invoeren van een nieuw document de waarden zijn ingevuld in overeenstemming met de statistieken, worden ze opnieuw gevuld als ze in de overeenkomst of het contract zijn gedefinieerd.

Vervanging van waarden met behulp van een sjabloon.

Houd er rekening mee dat wanneer een nieuw type item wordt gemaakt, u standaardwaarden kunt opgeven die in nieuwe objecten worden vervangen. Bij het registreren van een nieuw artikel voor dit type artikel worden deze waarden automatisch ingevuld. Een ander voorbeeld is de automatische vervanging van informatie over een afdeling in een document als de gebruiker die het document opstelt, informatie heeft over de afdeling die op de gebruikerskaart is gedefinieerd.

Een nieuw document invoeren door te kopiëren.

Alles is hier eenvoudig. Als de gebruiker al een soortgelijk document heeft ingevoerd, kan dit worden gekopieerd en kunnen de gewijzigde gegevens worden gecorrigeerd. Controleer alle details en let vooral op details zoals de datum.

Hier volgen vijf belangrijke manieren om het invoeren van vergelijkbare documenten en naslagwerken eenvoudiger te maken. Zorg ervoor dat u ze in uw dagelijkse werk gebruikt

Hoe voer je snel de waarde van details in 1C in?

/
Boekhouding voor Oekraïne /
Werken met documenten, naslagwerken en rapporten

Hoe u de hoofdorganisatie voor vervanging in documenten instelt

In deze sectie wordt beschreven hoe u een primaire organisatie instelt voor automatische vervanging in nieuwe documenten.

Installatie vanuit de map

In de directory met organisaties (menu "Enterprise" - "Organisaties") is de hoofdorganisatie vetgedrukt. Dit betekent dat bij het aanmaken van nieuwe documenten deze automatisch worden ingevoegd.

Om van een andere organisatie de hoofdorganisatie te maken, moet u deze organisatie in de lijst selecteren en op de knop klikken Hoofd instellen in het commandopaneel.

Connect Code Preoix Naam l w 00000001 tot Dobro 000000001 DB Do5ro5ut 00000006 DU Do st eka en installatie 00000005 NF National S0000001 nsho Onze organisatie" width="757" height="216" border="0">

OPMERKING
De primaire organisatie wordt opgeslagen in de gebruikersinstellingen. Voor elke gebruiker wordt de hoofdorganisatie individueel aangegeven.

Selectie van documenten per hoofdorganisatie

In de gebruikersinstellingen (menu "Service" - "Gebruikersinstellingen") kunt u de modus instellen voor automatische selectie van documenten voor de hoofdorganisatie. Dit betekent dat alle tijdschriften en documentenlijsten alleen documenten van de primaire organisatie tonen.

De selectie van documenten in dagboeken wordt geregeld door de vlag Boekhouding voor alle organisaties. Wanneer het is geïnstalleerd, tonen de dagboeken documenten voor alle organisaties. Wanneer de vlag uitgeschakeld is, worden in de dagboeken alleen documenten van de hoofdorganisatie weergegeven.

Indien nodig kan de hoofdorganisatie rechtstreeks worden gewijzigd in de gebruikersinstellingen in de groep "Basiswaarden voor vervanging in documenten en mappen".

Taak 1. Een vervolgkeuzelijst maken

1. Open het bestand Ex03_1.xlsx.

2. Op een vel Prijs Er is een goederentabel met prijzen.

3. Geef de bereiken een naam met de productnaam ( Product) en prijstabel ( Tafel) (foto 1). Bereiknamen zijn gespecificeerd voor verder gebruik in formules en om het werken met bereiken eenvoudiger te maken. De bereiknaam kan worden ingesteld via het celnaamveld of door de opdracht in het contextmenu te selecteren Wijs een naam toe(uiteraard moet in een of ander geval vooraf een cellenbereik worden geselecteerd, zoals weergegeven in figuur 1).

Foto 1

4. Op het verkoopblad in de kolom Naam van het product maak een vervolgkeuzelijst en vul deze met gegevens.

Om een ​​vervolgkeuzelijst te maken, moet u de cellen selecteren (u kunt er meerdere tegelijk hebben) waarin u een vervolgkeuzelijst wilt krijgen en op het tabblad selecteren Gegevens knop Gegevenscontrole (Figuur 2).

Figuur 2

Op het eerste tabblad Opties uit de vervolgkeuzelijst Data type kies een optie Lijst en voer de regel in Bron= en de naam van het bereik met de vereiste gegevens (d.w.z. =Product) (Figuur 3). Klik OK.

Het resultaat van het maken van een vervolgkeuzelijst wordt weergegeven in Figuur 4.

Als de reeks waarden in de bron kan veranderen, is het beter om gegevens in het midden van de lijst in te voegen of te verwijderen.

figuur 3

Figuur 4

Introductie van de MATCH- en INDEX-functies

De functies MATCH en INDEX worden voornamelijk gebruikt om gegevens uit een bepaald bereik automatisch in een tabel te vervangen.

Functiesyntaxis

VERGELIJKEN(opzoekwaarde, matrix, overeenkomsttype)

Array is een blok dat bestaat uit één kolom of één rij.

Match_type is het getal -1, 0 of 1.

Als match_type gelijk is aan 1, dan is de functie ZOEKOPDRACHT vindt de grootste waarde die kleiner is dan opzoekwaarde of gelijk daaraan. Bekeken reeks moet in oplopende volgorde besteld worden.

Als match_type gelijk aan 0, Dat MATCH-functie vindt de eerste waarde die exact gelijk is aan het argument zoek_waarde. Bekeken reeks kan verstoord zijn.

Als match_type gelijk is aan -1, dan is de functie ZOEKOPDRACHT vindt de kleinste waarde die groter is dan zoek_waarde, of gelijk daaraan. Bekijk_matrix moeten in aflopende volgorde besteld worden.

Als match_type wordt weggelaten, wordt aangenomen dat deze gelijk is aan 1 .

Functie ZOEKOPDRACHT retourneert de positie van de gezochte waarde in de array, niet de waarde zelf.

Functie INHOUDSOPGAVE kent twee vormen. We zullen er slechts één overwegen.

INDEX(tabel; rijnummer; kolomnummer)

Deze functie selecteert uit een rechthoekig blok (tabel) een element dat wordt gespecificeerd door rij- en kolomnummers, en deze getallen worden geteld vanaf het element linksboven van het blok.

Laten we eens kijken hoe deze functies werken aan de hand van specifieke voorbeelden.

Taak 2. Inleiding tot de MATCH-functie

Bepaal met behulp van de functie MATCH() de positie van het product met de naam “Yoghurt” in het assortiment Product. Voor deze:

1. in een e-boek Ex03_1.xlsx ga naar blad Prijs en plaats de bladcursor in een vrije cel;

2. voer de formule =MATCH("Yoghurt";Product;0) in deze cel in, d.w.z. Met deze functie geven we aan dat we het element “Yoghurt” (de tekstwaarde in functies wordt altijd tussen aanhalingstekens aangegeven) in het bereik moeten vinden Product, matchingtype 0 – exacte match;

3. Druk op Enter. Als resultaat zou u het getal 7 moeten krijgen (Figuur 5).

Figuur 5

Zeker als je naar het bereik kijkt Product, dan komt de positie van de yoghurt overeen met dit cijfer. Het is de moeite waard eraan te denken dat de positie van de waarde in de array, d.w.z. binnen een bepaald bereik, geteld vanaf het begin van het bereik. Het blijkt dat als we een nieuwe rij toevoegen aan het begin van de gegevenstabel, de waarde “Yoghurt” verschuift naar rij nummer 8, maar het bereik Product begint met de waarde “Melk”, dus vanaf het begin van het bereik zal de positie van yoghurt in ieder geval overeenkomen met het getal 7 (Figuur 6).

Figuur 6

Houd er rekening mee dat de waarde voor de functie MATCH() kan worden opgegeven door de waarde zelf of door de naam van de cel waarin deze waarde zich bevindt. De invoer =MATCH(A7;Product;0) levert bijvoorbeeld hetzelfde resultaat op als wanneer u de invoer =MATCH("Yoghurt";Product;0) gebruikt.

Taak 3. Inleiding tot de INDEX-functie

Laten we ons herinneren dat de functie INDEX() uit een rechthoekig blok (tabel) een element selecteert dat wordt gespecificeerd door de rij- en kolomnummers, en deze getallen worden geteld vanaf het element linksboven van het blok.

Gebruik de functie INDEX() om in een bereik te zoeken Product element op de vijfde positie. Voor deze:

1. in een e-boek Ex03_1.xlsx op een blad Prijs plaats de bladcursor in een vrije cel;

2. Voer de volgende functie in deze cel in =INDEX(Product;5). Druk op Enter. Het resultaat wordt weergegeven in Figuur 7.

Figuur 7

Houd er rekening mee dat we alleen de bereikwaarden en het rijnummer voor de INDEX-functie hebben opgegeven. We hebben het kolomnummer niet aangegeven. Deze parameter is optioneel als we op zoek zijn naar een waarde in een tabel (bereik) die uit één kolom bestaat. Als we een waarde moeten vinden in een tabel (bereik) die uit meerdere kolommen bestaat, dan is het in de formule voor een nauwkeuriger zoeken naar de waarde noodzakelijk om het kolomnummer aan te geven.

Voer in de nieuwe cel de formule =INDEX(Tabel;8;2) in. Als resultaat vindt u de kosten van ham (Figuur 8).

Figuur 8

Automatische gegevensvervanging

Wanneer u met een vervolgkeuzelijst werkt, kunt u de gegevensinvoer in de tabel automatiseren. Er is bijvoorbeeld een prijslijst met de namen van goederen en hun prijzen. U kunt de selectie van de productnaam uit de lijst en automatische vervanging van de productprijs in de finaletabel organiseren.

Automatische vervanging van gegevens uit een opzoektabel is gebaseerd op het gecombineerde gebruik van de INDEX- en MATCH-functies.

Taak 4. Combineren van de MATCH- en INDEX-functies

In e-boek Ex03_1.xlsx op een blad verkoop in een kolom Prijs, met behulp van MS Excel-functies, zorgen voor automatische vervanging van de goederenkosten van het blad Prijs, afhankelijk van de waarde die is geselecteerd in de vervolgkeuzelijst op het blad verkoop.

1. Plaats de werkbladcursor in cel C2 en voer daarin de volgende formule in:

2. Druk op Enter. Als gevolg hiervan ontvangt u in cel C2 de kosten van het product waarvan de naam is aangegeven in de kolom hiernaast (Figuur 9). Wanneer u een andere productnaam uit de vervolgkeuzelijst selecteert, verandert de prijswaarde dienovereenkomstig.

Figuur 9

3. Dupliceer deze formule met behulp van de autocomplete-markering naar het einde van de tabel (Afbeelding 10).

Figuur 10

Laten we deze formule ontcijferen. Deze formule begint met de functie MATCH, waarmee we de positie van de waarde uit cel B2 op het werkblad kunnen vinden verkoop binnen bereik Product uit het zicht Prijs en precisietype 0. Als u bijvoorbeeld de lijst met producten gebruikt die wordt weergegeven in Figuur 10, zoekt de functie ZOEK naar de positie van brood, waarvan de naam wordt aangegeven in cel B2 uit de kolom Naam van het product binnen bereik Product op een blad Prijs. Deze positie is gelijk aan 3. Daarom is de formule die we hebben ingevoerd in het computergeheugen

=INDEX(Tabel, VERGELIJKEN(B2, Product, 0), 2)

zal de vorm aannemen

=INDEX(Tabel,3,2)

Parameter “3” is het resultaat van de SEARCH-functie.

Vervolgens komt de INDEX-functie in actie, die in het bereik gaat zoeken Tafel op een blad Prijs de waarde op het snijpunt van de derde rij en de tweede kolom. (Houd er rekening mee dat het bereik Tafel bestaat uit twee kolommen). Deze waarde is de kostprijs van het product, in dit geval brood = 27.

Taak 5. Ontwerp van de finaletafel

Op een blad verkoop in een kolom Hoeveelheid willekeurige waarden invoeren. Bereken de waarden in een kolom Totaal.

Taak 6. Zelfstandige taak

Open het bestand Frames.xls . Het is vereist om wijzigingen in salarissen op een blad te automatiseren Personeel .

Zo is het bijvoorbeeld nodig om een ​​deel van de managers over te plaatsen en senior managers of consultants over te plaatsen naar laders. U dient deze handeling uit te voeren voor vier medewerkers. Naast de functie moet ook het salaris veranderen.

Maak een nieuw blad en geef het een naam Staat .

Kopieer naar blad Staat kolommen Functietitel En Salaris.

Verwijder dubbele medewerkers. Voor deze:

1. Selecteer de positie- en salariskolommen.

2. Op het tabblad Gegevens Klik op de knop Verwijder duplicaten .

3. Verwijder het vinkje uit de kolom Salaris.

4. Klik op de knop OK.

Om van positie te kunnen wisselen, op het blad Personeel Maak in de positiekolom een ​​vervolgkeuzelijst. In dit geval zul je ook het officiële salaris moeten wijzigen, wij zullen dit proces automatiseren zodat wanneer je van functie verandert, Excel zelf het salaris wijzigt. Hiervoor gebruiken we de functies: ZOEKEN en INDEX.

Richtlijnen

1. Selecteer op het blad Staat scala aan posities. Geef het geselecteerde bereik een naam functietitel.

2. Selecteer op het blad Staat salaris schaal. Geef het geselecteerde bereik een naam salaris.

3. Op een vel Medewerkers in kolom Salaris voer de formule in waarnaar op het werkblad wordt gezocht Staat binnen bereik functietitel positie die overeenkomt met de positie van de werknemer, en vervolgens uit het bereik salaris laken Staat een salaris ingevoegd dat overeenkomt met de gevonden functie.

4. Zorg er na het invoeren van de formule voor dat het resulterende salaris daadwerkelijk overeenkomt met het salaris van de functie van de werknemer op het blad Staat.

5. Wijzig het salaris van Ch. accountant op blad Staat. Controleer op het blad of het bijbehorende salaris is gewijzigd Medewerkers.

Onze taak is de volgende. De prijs van een artikel slaan wij nu op in een apart informatieregister. Wanneer we een Dienstverleningsdocument aanmaken of wijzigen en een artikel aan het tabelgedeelte toevoegen, willen we dat de huidige prijs van dit artikel, verkregen uit het informatieregister en overeenkomend met de datum van het document, onmiddellijk in het document wordt ingevoegd.

Om dit te doen moeten we twee dingen doen.

Schrijf eerst een bepaalde functie die de huidige prijs van het artikel retourneert, en roep vervolgens deze functie aan op het moment dat het artikel aan het document wordt toegevoegd, en vervang de prijs van het artikel dat deze functie in het document retourneert.

Omdat we een dergelijke "service" hoogstwaarschijnlijk niet alleen in dit document nodig zullen hebben, maar ook in andere documenten die de nomenclatuur in het tabelgedeelte bevatten, zullen we de functie op een "openbaar toegankelijke" plaats plaatsen - in een gemeenschappelijke module.

In de configuratormodus

Functie die de prijs van een artikel retourneert

Eerst zullen we de functie RetailPrice() maken, die ons de huidige verkoopprijs van het artikel retourneert, en deze in de algemene configuratiemodule plaatsen.

Laten we de configurator openen, in de vertakking Algemeen Algemene modules, een nieuw configuratieobject Module toevoegen en dit WorkWithDirectories noemen.

We zien dat in de module het selectievakje Server standaard is geselecteerd. Dit betekent dat instances van deze module alleen aan de serverzijde worden gecompileerd.

Laten we het selectievakje Call server aanvinken, zodat de exportprocedures en functies van deze module vanaf de client kunnen worden aangeroepen (Fig. 9.9).

Laten we de volgende tekst erin plaatsen (Listing 9.1).

Laten we deze functie uitleggen.

Om de verkoopprijs te krijgen, geven we twee parameters door aan de functie:

CurrentDate is een datumtypeparameter die het punt op de tijdas definieert waarop we geïnteresseerd zijn in de verkoopprijswaarde.

In de hoofdtekst van de functie maken we eerst een Selectiehulpobject.

Dit is een structuur met selectie op registerdimensies. Met zijn hulp bepalen we dat we geïnteresseerd zullen zijn in registerinvoeren waarin de dimensie van het nomenclatuurregister gelijk is aan de verwijzing naar het directory-element dat aan de functie wordt doorgegeven.

De naam van de structuursleutel ("Nomenclatuur") moet overeenkomen met de naam van de registerdimensie die is opgegeven in de configurator, en de waarde van het structuurelement (Nomenclatuurelement) specificeert de waarde die voor deze dimensie is geselecteerd.

In de tweede regel nemen we contact op met de manager van het prijzeninformatieregister (Information Registers.Prices) en voeren we de GetLast() -methode uit, die ons de bronwaarden retourneert van het laatste registerrecord dat overeenkomt met de datum die aan de functie is doorgegeven ( CurrentDate) en de waarden van de registerdimensies (Selectie).

De GetLast-methode retourneert een structuur met resourcewaarden, die is opgeslagen in de ResourceValues-variabele. Over het algemeen kan een register meerdere bronnen hebben. Er is slechts één resource in ons register, maar een structuur die één enkel element bevat, wordt nog steeds geretourneerd.

Daarom krijgen we in de volgende regel de verkoopprijs waarnaar we op zoek zijn door simpelweg de naam van de registerbron die we nodig hebben op te geven via een punt (ResourceValues.Price) en deze terug te geven wanneer de functie wordt uitgevoerd.

Nu moet deze functie op een bepaald punt tijdens de uitvoering van het document worden aangeroepen.

Een functie oproepen bij het selecteren van een artikel en het invullen van de prijs in het document

De taak waarvoor wij staan ​​is dus de volgende. Bij het bewerken van het Dienstverleningsdocument moeten we ervoor zorgen dat het veld Prijs automatisch wordt ingevuld nadat de gebruiker een dienst heeft geselecteerd. Bovendien moet de prijs van de dienst worden bepaald op basis van de datum waarop het document is gemaakt.


Laten we het Dienstverleningsdocument in de configurator zoeken en het formulier Documentformulier openen.

Dubbelklik op het formulierelement List of ItemsNomenclature of klik met de rechtermuisknop om het eigenschappenpalet ervoor te openen (contextmenu-item Eigenschappen). Als we naar het einde van de lijst scrollen, vinden we de OnChange-gebeurtenis, die plaatsvindt nadat een veldwaarde is gewijzigd.

Klik op de openknop B met het vergrootglaspictogram in het invoerveld.

Het systeem maakt een sjabloon voor de afhandelingsprocedure voor deze gebeurtenis in onze formuliermodule en opent het tabblad Form Editor Module.

Laten we de volgende tekst eraan toevoegen (Listing 9.2).

Laten we commentaar geven op de inhoud van de handler.

De eerste regel van de handler kent u al uit de procedures Artikellijst Aantal bij wissel en Artikellijst Prijs bij wissel. Eerst halen we de huidige rij van het tabelgedeelte van het document op, omdat we deze later nodig zullen hebben, en slaan we deze op in de tabellarische rijvariabele.

Vervolgens roepen we onze functie RetailPrice() aan vanuit de algemene module Werken met mappen.

Als eerste parameter geven we aan deze functie de datum door van het document waarvoor we de prijs moeten krijgen. We halen de documentdatum uit het hoofdformulierattribuut - Object.Date.



De functie retourneert de laatste prijswaarde en we wijzen deze waarde toe aan het veld Prijs in de huidige rij van het tabelgedeelte van het document (TabularPartRow.Price).

Houd er rekening mee dat de procedure Item List NomenclatureOnChange() zelf begint te werken in de formuliermodule aan de clientzijde, aangezien deze een handler is voor de interactieve gebeurtenis van het formulier. Bij het maken van een sjabloon voor deze procedure plaatste het platform automatisch de compilatierichtlijn &OnClient vóór de beschrijving van de procedure.

Vervolgens wordt de functie RetailPrice() aangeroepen. Omdat deze functie niet aan de clientzijde te vinden is, wordt de uitvoering overgebracht naar de gemeenschappelijke module Werken met Directories, die op de server draait. Nadat de functie is voltooid, wordt de programmacode verder uitgevoerd op de client.

Waarom werd in dit geval zo’n ‘truc’ gebruikt? Waarom was het nodig om de uitvoering van de code naar de server over te dragen?

Feit is dat elk werk met de database (gegevens lezen, schrijven) alleen op de server mogelijk is. In dit geval moesten we voor een bepaald item de meest recente gegevens uit het informatieregister lezen.

Dergelijke acties kunnen alleen op de server worden uitgevoerd, en als je in de syntaxisassistent zoekt naar de beschrijving van de GetLast()-methode van het informatieregister, zul je merken dat deze methode alleen beschikbaar is op de server, in de dikke client en in de externe verbinding.

De dikke client en externe verbinding zijn oudere platformclientapplicaties die bestaan ​​voor compatibiliteit met oudere applicatieoplossingen.

We ontwikkelen een compleet nieuwe applicatieoplossing die werkt in een thin client of een webclient. Daarom moeten we in ons geval, om gegevens uit de database te verkrijgen, de uitvoering van de code naar de server overbrengen, daar de benodigde gegevens ontvangen en deze gegevens terugsturen naar de client. Dat is wat wij deden.

In 1C:Enterprise-modus

Laten we eens kijken hoe ons document nu werkt.

Laten we 1C:Enterprise in de foutopsporingsmodus starten en het prijzeninformatieregister openen.

Laten we voor de Philips-transistor een nieuwe prijs toevoegen met een ander nummer (Fig. 9.10).

Laten we nu het document Provision of Service No. 1 openen. Zoals u zich herinnert, hebben we met dit document zojuist zo'n transistor "opgebruikt".

Laten we de datum van het document ongewijzigd laten en de selectie van de transistor in de kolom Nomenclatuur van het tabelgedeelte van het document herhalen. De transistorprijs wordt automatisch ingesteld op 01-07-2009. Dit is de laatste prijswaarde op de documentdatum (Fig. 9.11).

Laten we nu de datum van het document wijzigen in 13-07-2009 en de selectie van de transistor opnieuw herhalen. Er wordt een nieuwe prijswaarde ingesteld, de laatste voor deze datum (Fig. 9.12).

Zo verschijnt de prijs van de dienst die actueel is op het moment dat het document is gemaakt, in het document.


Controlevragen

1. Wat is het doel van het configuratieobject Informatieregister?

2. Welke functies heeft het configuratieobject Informatieregister?

3. Wat zijn de belangrijkste verschillen tussen het informatieregister en het accumulatieregister.

4. Welke velden bepalen de uniciteitssleutel van het accumulatieregister.

5. Wat is een periodiek informatieregister en wat is een onafhankelijk informatieregister.

6. Hoe u een periodiek informatieregister aanmaakt.

7. Wat is de leidende dimensie van een register.

8. Hoe u de bronwaarden van de meest recente registervermeldingen kunt verkrijgen met behulp van de ingebouwde taal.