1s SKD polje agregatnih funkcija. Funkcije izraznog jezika sustava za kompoziciju podataka. Promjena redoslijeda stupaca

U ovoj kratkoj bilješci želim pokazati kako možete sažeti vrijednosti na različitim razinama grupiranja u izvješću pomoću sustava za sastavljanje podataka.
Kao što je prikazano na slici, samo na razini grupiranja "Grupe artikala", izračunava se resurs "Narudžba", prikazuje koliko je potrebno naručiti za trenutnu grupu artikala na temelju određenih uvjeta:


Ova se vrijednost može izračunati samo za ovoj razini grupiranja jer, iznad ili ispod, nema vrijednosti za izračunavanje. Primjerice, na razini detaljne evidencije ne postoji podatak o maksimalnoj količini u skupini, jer taj podatak vrijedi samo za skupinu u cjelini, a ne za njezine pojedine sastavnice.

Sukladno tome, sada je potrebno izračunati ukupne iznose za gornje grupe (“Skladišta”, “Vrste skladišta”) i ukupni zbroj.
Da biste to učinili, upotrijebite funkciju CalculateExpressionWithGroupArray:
PROCJENI IZRAZ SA GRUPNIM NIZOM (EVALEXPRESSIONWITHGROUPARRAY)
Sintaksa:
EvaluateExpressionWithGroupArray(,)
Opis:
Funkcija vraća polje čiji svaki element sadrži rezultat procjene izraza za grupiranje prema navedenom polju.
Sastavljač izgleda, prilikom generiranja izgleda, pretvara parametre funkcije u termine polja izgleda sastava podataka. Na primjer, polje Account će se pretvoriti u DataSet.Account.
Alat za izradu izgleda, kada generira izraze za izlaz prilagođenog polja čiji izraz sadrži samo funkciju CalculateArrayWithGroupArray(), generira izlazni izraz tako da su izlazne informacije poredane. Na primjer, za prilagođeno polje s izrazom:

CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana")
Alat za izradu izgleda će generirati sljedeći izraz za izlaz:

ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))

Mogućnosti:

Tip: Žica. Izraz koji se procjenjuje. String, na primjer, Iznos(IznosPrometa).

Tip: Žica. Izrazi polja grupiranja – izrazi polja grupiranja, odvojeni zarezima. Na primjer, izvođač, strana.

Tip: Žica. Izraz koji opisuje odabir primijenjen na detaljne zapise. Izraz ne podržava korištenje agregatnih funkcija. Na primjer, DeletionFlag = False.

Tip: Žica. Izraz koji opisuje odabir primijenjen na grupne zapise. Na primjer, Iznos(IznosPrometa) > &Parametar1.
Primjer:

Maximum(CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana"));

Detaljan opis sintakse funkcije može se pronaći na http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Sada, za izračun, dupliciramo polje "Redoslijed", s različitim vrijednostima "Izračunaj do...", koristeći sljedeće izraze, imajte na umu da se u svakoj višoj razini koriste vrijednosti razina ispod grupiranja .

Kao rezultat, dobivamo sljedeću konstrukciju:

U ovu metoduČini mi se da ima minusa, ali radi, ali je minus veliki. Pogledajmo primjer: u konfiguraciji postoji dokument "Primitak robe" s tablični dio“Proizvodi”, potrebno je u izvješću prikazati dokumente i nazive primljene robe za svaki dokument.

Kreirajmo izvješće, dodamo osnovnu shemu izgleda podataka, dodamo skup podataka tipa "upit" u sustav kontrole pristupa i generiramo jednostavan zahtjev (vidi sliku 1).

Slika 1. Upit za skup podataka
Na kartici "Izračunata polja" dodajte izračunato polje pod nazivom TabularPart i navedite prazan niz u stupcu Izraz (pogledajte sliku 2).
Naše izračunato polje koristit će se kao resurs, pa na kartici "Resursi" postavljamo izraz za grupiranje: ConnectRows(Array(Products.Nomenclature),""). Također ukazujemo da se ovaj resurs mora izračunati pomoću polja Link (vidi sliku 3).
Rezultat izvješća:
Loša strana je korištenje grupiranja; u našem slučaju grupiranje se izvodi atributom Link, inače neće raditi. Prisutnost grupiranja nameće neka ograničenja za postavljanje izlaza podataka (vidi sliku 4).

2) Pozivanje vlastite funkcije iz zajedničkog modula.

Jednostavan i jasan način, jedina poteškoća je pronaći odgovarajući zajednički modul ili stvoriti novi za pisanje vlastite funkcije :). Preko proslijeđene poveznice na dokument „Primka robe“ funkcija će zaprimiti retke iz tabelarnog dijela dokumenta i generirati red s podacima o primljenoj robi. Krenimo s implementacijom.

Kreirajmo izvješće, dodamo osnovnu shemu izgleda podataka, dodamo skup podataka tipa "upit" u sustav kontrole pristupa i generiramo jednostavan zahtjev (vidi sliku 6).


Slika 6. Upit za skup podataka
Kreirajmo zajednički modul _Demo Rad s izvješćima i napišimo funkciju izvoza Get List of Products for Report(). Programski kod funkcije vidi dolje.
Na kartici "Izračunata polja" dodajte izračunato polje pod nazivom TabularPart i u stupcu Izraz označimo poziv funkcije iz općeg modula (vidi sliku 2):
_DemoRad s izvješćima. Dobijte popis proizvoda za izvješće (link)

Idemo na karticu "Postavke" i stvorimo postavku za izlaz podataka - to će biti detaljan zapis (vidi sliku 8).
Rezultat izvješća:

Preuzmite uzorak izvješća

Što trebate znati kada koristite ovu metodu:
1) Izraz mehanizma za sastav podataka može sadržavati pozive funkcija globalnih zajedničkih konfiguracijskih modula. Na primjer:
Skraćeni naziv (veza, datum, broj)
2) Kod programskog generiranja izvješća korištenje funkcija zajedničkih modula dopušteno je samo ako je naveden odgovarajući parametar procesora za komponiranje podataka (4. parametar):
ComppositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) Funkcije uobičajenih modula ne mogu se koristiti u prilagođenim izrazima polja.
4) Ako se pojavi iznimka prilikom generiranja izvješća koje ukazuje na funkciju zajedničkog modula, provjerite kontekst izvršavanja modula (vidi sliku 9).

Opis korištenih funkcija

ConnectRows(vrijednost, razdjelnik stavki, razdjelnik stupaca)- dizajniran za kombiniranje žica u jednu liniju.
  • Vrijednost - izrazi koje je potrebno kombinirati u jedan redak. Ako je niz, tada će se elementi niza kombinirati u niz. Ako je to ValueTable, tada će svi stupci i retci tablice biti kombinirani u red;
  • Razdjelnik elemenata - niz koji sadrži tekst koji se koristi kao razdjelnik između elemenata niza i redaka tablice vrijednosti. Zadano – znak za novi redak;
  • Razdjelnici stupaca - niz koji sadrži tekst koji se koristi kao razdjelnik između stupaca tablice vrijednosti. Zadano "; ".
Niz ([Razni] izraz)- možete koristiti tablicu vrijednosti kao parametar. U ovom slučaju, rezultat funkcije bit će niz koji sadrži vrijednosti prvog stupca tablice vrijednosti proslijeđene kao parametar. Ako izraz sadrži funkciju Array, tada se izraz smatra agregatnim izrazom. Ako je navedeno ključna riječ Različito, tada rezultirajuće polje neće sadržavati duplicirane vrijednosti.

Dohvatite popis proizvoda za izvješće (DocumentLink)- funkcija generira liniju s popisom ulazne robe.
// Opcije:
// DocumentLink - DocumentLink.Potvrda o prijemu robe - Dokument "Potvrda o prijemu robe".
// Povratna vrijednost:
// String - niz s popisom proizvoda.
Funkcija Get List of Products for Report (DocumentLink) Export

Popis proizvoda = "";

Za svaki redak PM iz DocumentLink.Proizvodni ciklus
Popis proizvoda = Popis proizvoda + linija TC.Nomenklatura;
Popis proizvoda = Popis proizvoda + Simboli.PS;
EndCycle;

Povratak popisa proizvoda;

EndFunction // Dobivanje popisa proizvoda za Report()

1. Izračunaj (Eval)- namijenjen je procjeni izraza u kontekstu nekog grupiranja. Ova se funkcija koristi za kompatibilnost s prethodne verzije platforme. Umjesto toga preporuča se koristiti funkciju CalculateExpression.

Sintaksa:
Izračunaj (izraz, grupiranje, tip izračuna)

opcije:

  • Izraz(Crta). Sadrži izračunati izraz;
  • Grupiranje(Crta). Sadrži naziv grupiranja u čijem kontekstu se izraz treba procijeniti. Ako se koristi naziv grupe prazna linija, izračun će se izvršiti u kontekstu trenutnog grupiranja. Ako se niz GrandTotal koristi kao naziv grupe, izračun će se izvršiti u kontekstu ukupnog zbroja. Inače će se izračun izvršiti u kontekstu nadređene grupe s istim imenom.
    Na primjer:
    Zbroj(Prodaja.UkupniPromet) / Izračunaj("Zbroj(Prodaja.UkupniPromet)", "Ukupno").
    U u ovom primjeru rezultat će biti omjer iznosa za polje “Sales.SumTurnover” zapisa grupiranja i iznosa istog polja u cijelom izgledu.
  • Vrsta izračuna(Crta). Ako je ovaj parametar postavljen na "TotalTotal", izraz će se izračunati za sve zapise grupiranja. Ako je vrijednost parametra "Grupiranje", vrijednosti će se izračunati za trenutni zapis grupe grupiranja.
2. Procijenite izraz (EvalExpression) - namijenjen je procjeni izraza u kontekstu nekog grupiranja. Funkcija uzima u obzir odabir grupiranja, ali ne uzima u obzir hijerarhijske odabire. Funkcija se ne može primijeniti na grupiranje u odabiru grupe tog grupiranja.

Sintaksa:
CalculateExpression(Expression, Grouping, CalculationType, Start, End, Sort, HierarchicalSort, ProcessingIdenticalOrderValues)

opcije:

  • Izraz(Crta). Sadrži izračunati izraz;
  • Grupiranje(Crta). Sadrži naziv grupiranja u čijem kontekstu se izraz treba procijeniti. Ako se kao naziv grupiranja koristi prazan niz, izračun će se izvesti u kontekstu trenutnog grupiranja. Ako se niz GrandTotal koristi kao naziv grupe, izračun će se izvršiti u kontekstu ukupnog zbroja. Inače će se izračun izvršiti u kontekstu nadređene grupe s tim nazivom;
  • Vrsta izračuna(Crta). Ako je ovaj parametar postavljen na "TotalTotal", izraz će se izračunati za sve zapise grupiranja. Ako je vrijednost parametra "Grupiranje", vrijednosti će se izračunati za trenutni zapis grupe grupiranja. Ako je parametar postavljen na "Grupiranje bez resursa", tada će se pri izračunavanju funkcije za grupni zapis prema resursu, izraz procijeniti za prvi grupni zapis izvornog grupiranja. Pri procjeni funkcije CalculateExpression s vrijednošću "GroupingNonResource" za grupne zapise koji nisu grupiranja prema resursu, funkcija se procjenjuje na isti način kao što bi se procjenjivala s vrijednošću parametra "Grouping". Alat za sastavljanje izgleda sastava podataka, prilikom generiranja izgleda sastava podataka prilikom ispisa polja - resursa po kojem se vrši grupiranje, na izgled, ispisuje u izgled izraz izračunat pomoću funkcije CalculateExpression s navedenim parametrom "GroupingNon-Resource". Za ostale resurse grupirane po resursu vraćaju se normalni izrazi resursa. Ako je parametar postavljen na "Hijerarhija", tada se izraz mora procijeniti za nadređeni hijerarhijski zapis, ako postoji, i za cijelo grupiranje, ako ne postoji nadređeni hijerarhijski zapis. Izrađivač izgleda, kada generira izraz za % u polju Hierarchy Group, generira izraz koji sadrži odnos izraza resursa s funkcijom CalculateExpression za izraz resursa koji se izračunava za trenutno grupiranje s vrstom izračuna Hijerarhija.
  • Početak. Označava od kojeg bi zapisa trebao započeti fragment, u kojem bi se funkcije agregatnog izraza trebale izračunati i iz kojeg bi se zapisa dobile vrijednosti polja izvan agregatnih funkcija. Niz koji sadrži jedno od:
    • "Prvi" Potrebno je pribaviti prvi zapis grupiranja. Nakon riječi u zagradama možete navesti izraz čiji će se rezultat koristiti kao pomak od početka grupiranja. Rezultirajuća vrijednost mora biti cijeli broj veći od nule. Na primjer, First(3) – primanje trećeg zapisa od početka grupiranja. Ako je prvi zapis izvan grupiranja, smatra se da zapisa nema. Na primjer, ako postoje 3 zapisa, a želite dobiti First(4), tada se smatra da nema zapisa.
    • "Posljednji" Morate dobiti zadnji zapis grupiranja. Nakon riječi u zagradama možete navesti izraz čiji će se rezultat koristiti kao pomak od kraja grupiranja. Rezultirajuća vrijednost mora biti cijeli broj veći od nule. Na primjer, Last(3) – prima treći zapis s kraja grupe. Ako posljednji zapis prelazi grupiranje, smatra se da nema evidencije. Na primjer, ako postoje 3 zapisa, a želite dobiti Last(4), tada se smatra da nema zapisa.
    • "Prethodni" Morate dobiti prethodni zapis grupiranja. Nakon riječi u zagradama možete navesti izraz čiji će se rezultat koristiti kao pomak u odnosu na trenutni zapis grupiranja. Na primjer, Previous(2) – dobivanje prethodnog iz prethodnog zapisa. Ako je prethodni zapis izvan grupiranja (na primjer, drugi zapis grupiranja zahtijeva dobivanje Previous(3)), tada se dobiva prvi zapis grupiranja. Prilikom primanja prethodnog zapisa za zbroj grupiranja dobiva se prvi zapis.
    • "Sljedeći" Morate dobiti sljedeći zapis grupiranja. Nakon riječi u zagradama možete navesti izraz čiji će se rezultat koristiti kao pomak naprijed od trenutnog unosa grupiranja. Na primjer, Next(2) – dobivanje sljedećeg iz sljedećeg zapisa. Ako sljedeći zapis izlazi izvan grupiranja, smatra se da zapisa nema. Na primjer, ako postoje 3 unosa i treći unos dobije Dalje, tada se smatra da nema unosa. Kada se primi sljedeći zapis za zbroj grupiranja, smatra se da zapisa nema.
    • "Trenutno". Morate dobiti trenutni rekord. Prilikom dohvaćanja zbroja grupiranja dobiva se prvi zapis.
    • "Granična vrijednost". Potreba za dobivanjem zapisa prema navedenoj vrijednosti. Nakon riječi LimitingValue u zagradi potrebno je označiti izraz čijom vrijednošću želite započeti fragment, prvo polje za narudžbu. Prvi zapis čija je vrijednost polja za narudžbu veća ili jednaka navedenoj vrijednosti bit će vraćen kao zapis. Na primjer, ako se polje Period koristi kao polje za naručivanje i ima vrijednosti 01/01/2010, 02/01/2010, 03/01/2010, a želite dobiti LimitingValue(DateTime(2010 , 1, 15)), tada će se dobiti zapis s datumom 02/01. 2010.
  • Kraj. Označava na koji zapis treba nastaviti fragment, u kojem treba izračunati agregatni izraz. Niz koji sadrži jedno od:
    • "Prvi"
    • "Posljednji"
    • "Prethodni"
    • "Sljedeći"
    • "Trenutno".
    • "Granična vrijednost".
  • Sortiranje. Niz koji ispisuje izraze, odvojene zarezima, u smjeru u kojem treba poredati niz. Ako nije navedeno, tada se poredak izvodi na isti način kao i za grupiranje za koje se izraz procjenjuje. Nakon svakog izraza možete navesti ključnu riječ Ascending, za poredak uzlaznim redoslijedom, Descending, za poredak silaznim redoslijedom, Auto-Ordering, za poredak referentnih polja prema poljima prema kojima želite poredati objekt na koji se upućuje. Riječ Auto Order može se koristiti i uz riječ Uzlazno i ​​uz riječ Silazno.
  • Hijerarhijsko razvrstavanje. Slično sortiranju. Koristi se za organiziranje hijerarhijskih zapisa. Ako nije navedeno, sastavljač izgleda generira poredak prema redoslijedu navedenom u parametru Sortiraj.
  • Obrada istih vrijednosti narudžbe. Niz koji sadrži jedno od:
    • "Zajedno" znači da se niz poredanih zapisa koristi za određivanje prethodnog i sljedećeg zapisa;
    • "Odvojeno" znači da se prethodni i sljedeći zapisi određuju na temelju vrijednosti izraza za naručivanje;
    Na primjer, ako je rezultirajući niz poredan po datumu:
    1. 1. siječnja 2001. Ivanov M. 10
    2. 02. siječnja 2001. Petrov S. 20
    3. 2. siječnja 2001. Sidorov R. 30
    4. 03. siječnja 2001. Petrov S. 40
    Kada koristite obradu identičnih vrijednosti naloga "Odvojeno", prethodni za zapis 3 bit će zapis 2, a kada koristite "Zajedno" - zapis 1. I fragment za trenutni zapis za zapis 2 za "Odvojeno" bit će zapis 2, a za "Zajedno" - zapisi 2 i 3. Dakle, ukupan broj za trenutni zapis za "Odvojeno" bit će 20, a za "Zajedno" - 50. Kada je "Zajedno" navedeno u Start i Završni parametri, ne možete odrediti pomak za pozicije "Prvi", "Zadnji", "Prethodni", "Sljedeći". Zadana vrijednost je "Odvojeno".
Primjer:
Dobivanje omjera iznosa za polje "Sales.AmountTurnover" zapisa grupiranja i iznosa istog polja u cijelom izgledu:
Zbroj(Prodaja.UkupniPromet) / IzračunajIzraz("Zbroj(Prodaja.UkupniPromet)", "Ukupno").

Ovaj primjer izračunava vrijednost trenutne hijerarhije:
Izbor
Kada je Level() > 0
Zatim EvaluateExpression("Referenca", "Hijerarhija")
Inače Null
Kraj

Bilješke:
Funkcija uzima u obzir odabir grupiranja, ali ne uzima u obzir hijerarhijske odabire. Funkcija se ne može primijeniti na grupiranje u odabiru grupe tog grupiranja. Na primjer, pri odabiru grupiranja Nomenklature ne možete koristiti izraz CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Ali takav se izraz može koristiti u hijerarhijskoj selekciji. Ako krajnji zapis prethodi početnom, smatra se da nema zapisa za izračun detaljnih podataka i izračun agregatnih funkcija. Prilikom izračunavanja intervalnih izraza za ukupni zbroj (parametar Grupiranje je postavljen na "BrutoUkupno"), pretpostavlja se da ne postoje zapisi za izračun detaljnih podataka i izračun agregatnih funkcija. Prilikom generiranja izraza za funkciju CalculateExpression, sastavljač izgleda, ako izraz za naručivanje sadrži polja koja se ne mogu koristiti u grupiranju, zamjenjuje funkciju CalculateExpression s NULL.

3. Procijenite izraz s grupnim nizom (EvalExpression s grupnim nizom) - funkcija vraća polje čiji svaki element sadrži rezultat izračuna izraza za grupiranje prema navedenom polju.

Sintaksa:
CalculateExpressionWithGroupArray (Expression, GroupFieldExpressions, SelectRecords, SelectGroups)

opcije:

  • Izraz(String) - izraz koji treba procijeniti. Na primjer, "Iznos(IznosPrometa)";
  • FieldExpressionsGroups
  • Odabir zapisa
  • Odabir grupiranja- odabir primijenjen na grupne zapise. Na primjer: "Iznos(IznosPrometa) > &Parametar1".
Primjer:
Maximum(CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana"));


Alat za izradu izgleda, kada generira izraze za prikaz prilagođenog polja čiji izraz sadrži samo funkciju CalculateArrayWithGroup, generira izlazni izraz na takav način da su podaci za prikaz i podaci poredani.
Na primjer, za prilagođeno polje s izrazom:
CalculateExpressionWithGroupArray("Iznos(IznosPrometa)", "Protustrana strana")
Alat za izradu izgleda će generirati sljedeći izraz za izlaz:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

4. Izračunajte izraz s tablicom vrijednosti grupe (EvalExpressionWithGroupValueTable) - funkcija vraća tablicu vrijednosti, čiji svaki element sadrži rezultat izračuna izraza za grupiranje prema navedenom polju.

Sintaksa:
CalculateExpressionWithGroupValueTable (Expression, GroupField Expressions, Records Selection, Group Selection)

opcije:

  • Izraz(String) - izraz koji treba procijeniti. Redak može sadržavati više izraza odvojenih zarezima. Nakon svakog izraza može postojati izborna ključna riječ AS i naziv stupca tablice vrijednosti. Na primjer: "Druga strana, iznos (AmountTurnover) kao obujam prodaje."
  • FieldExpressionsGroups- izrazi grupiranja polja, odvojeni zarezima. Na primjer, "Protustrana strana, strana";
  • Odabir zapisa- izraz primijenjen na detaljne zapise. Na primjer, "Oznaka brisanja = False." Ako u ovaj parametar koristi se agregatna funkcija, pojavit će se pogreška prilikom sastavljanja podataka;
  • Odabir grupiranja- odabir primijenjen na grupne zapise. Na primjer: "Iznos(IznosPrometa) > &Parametar1".
Primjer:
Izračunajte izraz s tablicom vrijednosti grupiranja ("Račun KAO Druga strana, Iznos (Iznos prometa) KAO Obujam prodaje", "Račun")

Rezultat ove funkcije bit će tablica vrijednosti sa stupcima Counterparty i Sales Volume, koja će sadržavati druge ugovorne strane s njihovim količinama prodaje.
Sastavljač izgleda, prilikom generiranja izgleda, pretvara parametre funkcije u termine polja izgleda sastava podataka. Na primjer, polje Account će se pretvoriti u DataSet.Account.
Na primjer, prilagođeno polje s izrazom:
CalculateExpressionWithGroupValueTable("Račun, Iznos(IznosPrometa)", "Račun")
Alat za izradu izgleda će generirati sljedeći izraz za izlaz:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupingValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

5. Razina - funkcija je dizajnirana za dobivanje trenutne razine snimanja.

Sintaksa:
Razina()

Primjer:
Razina()

6. Redni broj - dobiti sljedeći serijski broj.

Sintaksa:
Broj Po Redu()

Primjer:
Broj Po Redu()

7. SequenceNumberInGrouping - vraća sljedeći redni broj u trenutnom grupiranju.

Primjer:
BrojPoReduUGrupi()

8. Format - dobiti formatirani niz proslijeđene vrijednosti.

Sintaksa:
Format(Vrijednost, FormatString)

opcije:

  • Značenje- izraz koji treba oblikovati;
  • FormatString- niz formata postavljen je u skladu s formatni niz 1C:Poduzeće.
Primjer:
Format(Fakture.Iznos dokumenta, "NPV=2")

9. BeginOfPeriod

Sintaksa:
Početno razdoblje (datum, vrsta razdoblja)

opcije:

  • datum(Datum od). Navedeni datum;
  • Vrsta razdoblja
Primjer:
Početni period(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec")
Rezultat: 10/01/2002 0:00:00

10. Kraj Razdoblja - funkcija je dizajnirana za odabir određenog datuma od zadanog datuma.

Sintaksa:
EndPeriod(Datum, PeriodType)

opcije:

  • datum(Datum od). Navedeni datum;
  • Vrsta razdoblja(Crta). Sadrži jednu od sljedećih vrijednosti: Minuta; Sat; Dan; Tjedan; Mjesec; Četvrtina; Godina; Desetljeće; Pola godine.
Primjer:
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Tjedan")
Rezultat: 13.10.2002 23:59:59

11. AddKDate (DateAdd) - funkcija je dizajnirana za dodavanje određene vrijednosti datumu.

Sintaksa:
AddToDate(izraz, vrsta povećanja, veličina)

opcije:

  • Izraz(Datum od). Izvorni datum;
  • Povećanje tipa(Crta). Sadrži jednu od sljedećih vrijednosti: Minuta; Sat; Dan; Tjedan; Mjesec; Četvrtina; Godina; Desetljeće; Pola godine.
  • Veličina(Broj). Za koliko treba povećati datum, razlomak se zanemaruje.
Primjer:
DodajDatumu(DatumVrijeme(2002, 10, 12, 10, 15, 34), "Mjesec", 1)
Rezultat: 11/12/2002 10:15:34

12. DatumRazlika - funkcija je dizajnirana da dobije razliku između dva datuma.

Sintaksa:
DifferenceDate(Expression1, Expression2, DifferenceType)

opcije:

  • Izraz1(Datum od). Oduzeti datum;
  • Izraz2(Datum od). Izvorni datum;
  • Vrsta Razlika(Crta). Sadrži jednu od vrijednosti: Second; Minuta; Sat; Dan; Mjesec; Četvrtina; Godina.
Primjer:
DATEDIFFERENCE(DATUMVRIJEME(2002, 10, 12, 10, 15, 34),
DATUMVRIJEME(2002, 10, 14, 9, 18, 06), "DAN")
Rezultat: 2

13. Podniz - ovu funkciju namijenjen je izdvajanju podniza iz niza.

Sintaksa:
Podniz (niz, pozicija, duljina)

opcije:

  • Crta(Crta). Niz iz kojeg je izdvojen podniz;
  • Položaj(Broj). Položaj znaka od kojeg počinje podniz koji se izdvaja iz niza;
  • Duljina(Broj). Duljina dodijeljenog podniza.
Primjer:
PODNIZ(Računi.Adresa, 1, 4)

14. Duljina niza - funkcija je dizajnirana za određivanje duljine niza.

Sintaksa:
Duljina niza (niz)

Parametar:

  • Crta(Crta). Niz čija je duljina određena.
Primjer:
Redak (Druge strane. Adresa)

15. Godina- ova je funkcija dizajnirana za izdvajanje godine iz vrijednosti tipa Datum.

Sintaksa:
Godina (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se utvrđuje godina.
Primjer:
YEAR(Troškovi.Datum)

16. Četvrtina - ova je funkcija dizajnirana za izdvajanje broja kvartala iz vrijednosti tipa Datum. Broj četvrtine obično se kreće od 1 do 4.

Sintaksa:
Kvartal (datum)

Parametar:

  • datum(Datum od). Datum do kojeg se utvrđuje kvartal
Primjer:
QUARTER(Troškovi.Datum)

17. Mjesec - ova je funkcija dizajnirana za izdvajanje broja mjeseca iz vrijednosti tipa Datum. Broj mjeseca obično se kreće od 1 do 12.

Sintaksa:
Mjesec (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuje mjesec.
Primjer:
MONTH(Troškovi.Datum)

18. Dan u godini (DayOfYear) - ova je funkcija dizajnirana za dobivanje dana u godini iz vrijednosti tipa Datum. Dan u godini obično se kreće od 1 do 365 (366).

Sintaksa:
Dan u godini (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuje dan u godini.
Primjer:
DAYYEAR(Račun Troškova.Datum)

19. Dan- ova je funkcija dizajnirana za dobivanje dana u mjesecu iz vrijednosti tipa Datum. Dan u mjesecu obično se kreće od 1 do 31.

Sintaksa:
dan (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuje dan u mjesecu.
Primjer:
DAY(Troškovi.Datum)

20. Tjedan - ova je funkcija dizajnirana za dobivanje broja tjedna u godini iz vrijednosti tipa Datum. Tjedni u godini numerirani su počevši od 1.

Sintaksa:
Tjedan (datum)

Parametar:

  • datum(Datum od). Datum do kojeg se određuju brojevi tjedana.
Primjer:
TJEDAN(Troškovi.Datum)

21. Dan u tjednu - ova je funkcija dizajnirana za dobivanje dana u tjednu iz vrijednosti tipa Datum. Uobičajeni dan u tjednu kreće se od 1 (ponedjeljak) do 7 (nedjelja).

Sintaksa:
Dan u tjednu (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuje dan u tjednu.
Primjer:
DAN U TJEDNU (trošak. datum)

22. Sat- ova je funkcija dizajnirana za dobivanje sata u danu iz vrijednosti tipa Datum. Sat u danu kreće se od 0 do 23.

Sintaksa:
sat (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuje sat u danu.
Primjer:
SAT(Troškovi.Datum)

23. Minuta - ova je funkcija dizajnirana za dobivanje minute sata iz vrijednosti tipa datuma. Minuta sata kreće se od 0 do 59.

Sintaksa:
Minuta (datum)

Parametar:

  • datum(Datum od). Datum do kojeg se određuje minuta u satu.
Primjer:
MINUTE(Troškovi.Datum)

24. Drugo - ova je funkcija dizajnirana za dobivanje sekunde minute iz vrijednosti tipa datuma. Sekunda minute kreće se od 0 do 59.

Sintaksa:
Drugi (datum)

Parametar:

  • datum(Datum od). Datum prema kojem se određuju sekunde minute.
Primjer:
SECOND(Troškovi.Datum)

25. Glumi - ova je funkcija dizajnirana za izdvajanje tipa iz izraza koji može sadržavati složeni tip. Ako izraz sadrži tip koji nije traženi, vratit će se NULL.

Sintaksa:
Express(Izraz, Indikacija tipa)

opcije:

  • Izraz- izraz koji se pretvara;
  • Oznaka tipa(Crta). Sadrži niz tipa. Na primjer, "Broj", "Niz" itd. Osim primitivnih tipova zadana linija može sadržavati naziv tablice. U ovom slučaju, pokušat će se izraziti referenca na navedenu tablicu.
Primjer:
Express(Data.Props1, "Broj(10,3)")

26. IsNull (IsNull) - ova funkcija vraća vrijednost drugog parametra ako je vrijednost prvog parametra NULL. U suprotnom će se vratiti vrijednost prvog parametra.

Sintaksa:
IsNull(Izraz1, Izraz2)

opcije:

  • Izraz1- vrijednost koju treba provjeriti;
  • Izraz2- povratna vrijednost ako je Expression1 NULL.
Primjer:
YesNULL(Iznos(Prodaja.IznosPrometa), 0)

27.ACos- izračunava ark kosinus u radijanima.

Sintaksa:
ACos (izraz)

Parametar:

  • Izraz(Broj). Vrijednost kosinusa (u rasponu -1 ... 1) kojom se određuje kut.
28.ASin- izračunava arcsinus u radijanima.

Sintaksa:
ASin(izraz)

Parametar:

  • Izraz(Broj). Vrijednost sinusa (u rasponu -1 ... 1) kojom se određuje kut.
29. ATan- izračunava arktangens u radijanima.

Sintaksa:
ATan (izraz)

Parametar:

  • Izraz(Broj). Vrijednost tangensa kojom se određuje kut.
30.Cos- izračunava kosinus.

Sintaksa:
Cos (izraz)

Parametar:

  • Izraz
31. Eksp- dizanje broja e na potenciju.

Sintaksa:
Exp (izraz)

Parametar:

  • Izraz(Broj). Značenje diplome.
32.Zapisnik- izračunava prirodni logaritam.

Sintaksa:
Dnevnik (izraz)

Parametar:

  • Izraz
33.Zapisnik10- izračunava logaritam od X na bazu 10.

Sintaksa:
Log10 (izraz)

Parametar:

  • Izraz(Broj). Izvorni broj je veći od 0.
34. Pow- potenciranje.

Sintaksa:
Pow (baza, indikator)

opcije:

  • Baza(Broj). Osnova operacije potenciranja.
  • Indeks(Broj). Eksponent.
35. Grijeh- izračunava sinus.

Sintaksa:
Grijeh (izraz)

Parametar:

  • Izraz(Broj). Određeno u radijanima.
36. Sqrt- izračunava kvadratni korijen.

Sintaksa:
Sqrt (izraz)

Parametar:

  • Izraz(Broj). Nenegativan broj.
37. Tan- izračunava tangens.

Sintaksa:
Tan (izraz)

Parametar:

  • Izraz(Broj). Vrijednost sinusa kojom se određuje kut.
38. Okruglo- zaokružuje izvorni broj na potrebnu bitnu dubinu. Način zaokruživanja je standardni (1,5 kao 2).

Sintaksa:
Env (izraz, dubina bita)

opcije:

  • Izraz(Broj). Izvorni broj;
  • Bitna dubina(Broj). Broj decimalnih mjesta na koje treba zaokružiti.
39. Int- odsijeca razlomački dio broja.

Sintaksa:
Objekt (izraz)

Parametar:

  • Izraz(Broj). Razlomački broj.
40. Funkcije zajedničkih modula

Izraz stroja za sastavljanje podataka može sadržavati pozive funkcija globalnih zajedničkih konfiguracijskih modula. Za pozivanje takvih funkcija nije potrebna nikakva dodatna sintaksa.

Primjer:
Skraćeni naziv(Dokumenti.Veza, Dokumenti.Datum, Dokumenti.Broj)

U ovom primjeru, funkcija "AbbreviatedName" bit će pozvana iz općeg konfiguracijskog modula.
Imajte na umu da je korištenje uobičajenih funkcija modula dopušteno samo ako je naveden odgovarajući parametar procesora za sastav podataka.
Osim toga, funkcije zajedničkih modula ne mogu se koristiti u prilagođenim izrazima polja.

41. Zamjeranje - ova funkcija vraća prikaz niza proslijeđene vrijednosti neprimitivnog tipa. Za vrijednosti primitivnog tipa, vraća samu vrijednost.

<Пустое значение>".

Primjer:
Prezentacija (druga strana)

42. Žica - ova funkcija pretvara proslijeđenu vrijednost u niz.

Ako se niz ili tablica vrijednosti koristi kao parametar, funkcija vraća niz koji sadrži prikaz niza svih elemenata niza, odvojenih znakovima "; ". Ako bilo koji element ima praznu reprezentaciju niza, tada je niz "<Пустое значение>".

Primjer:
Redak (Datum prodaje)

43. ValueIsFilled

Za NULL vrijednosti, Nedefined uvijek vraća False.
Za Booleove vrijednosti uvijek vraća True.
Za druge tipove vraća True ako se vrijednost razlikuje od zadane vrijednosti za dati tip.

Primjer:
ValueFilled(DeliveryDate)

44. LevelInGroup - ova funkcija dobiva trenutnu razinu snimanja u odnosu na grupiranje.

Može se koristiti za dobivanje razine ugniježđenja zapisa u hijerarhijskom grupiranju.

Primjer:
LevelInGroup()

45. ValueType

Sintaksa:
ValueType(Expression)

Parametar:

  • Izraz(Crta). Tip vrijednosti niza.
Vraća vrijednost tipa Type koja sadrži tip vrijednosti parametra funkcije.

Pravilna upotreba sheme sastava podataka (DCS) omogućuje vam da:

  • značajno smanjiti vrijeme potrebno za izradu izvješća;
  • oslobodite se potrebe za stvaranjem kontrolirani oblik procesor;
  • dobiti prekrasan rezultat uz priliku dodatne postavke korisnik.

Ali ne iskorištavaju svi programeri najbolje mogućnosti sheme jer nisu sve njezine postavke očite i intuitivne. Konkretno, mnogi ljudi znaju da u 1C SKD postoje izračunata polja, međutim, ne razumiju u potpunosti opseg njihove upotrebe i metode rada s njima.

Što je izračunato polje

U većini slučajeva izvor podataka u dijagramu izgleda je upit. U principu, unutar samog upita već možete koristiti razne formule, konstrukcije i izraze. Postavlja se prirodno pitanje: zašto nam je potrebna dvostruka funkcionalnost?

Činjenica je da je sustav kontrole pristupa nešto više od samog prikaza rezultata upita, a to je jasno vidljivo iz forme za izradu dijagrama (slika 1).

Izračunata polja omogućuju izvođenje određenih radnji s generiranim skupom podataka:

  • Ispišite niz podataka primljenih zahtjevom u određenu ćeliju, kombinirajući nekoliko redaka u jedan;
  • Pristupite izvoznim funkcijama općeg modula;
  • Izvršite različite izraze dostupne za jezik izgleda i koristite posebne funkcije EvaluateExpression.

Prođimo kroz ovaj popis.

Niz vrijednosti u jednoj ćeliji

Simulirajmo situaciju u kojoj je potrebno primiti sve brojeve potvrda za drugu ugovornu stranu u zasebnoj ćeliji:


Stoga smo stvorili dodatno polje za izračun u našoj shemi;


Kao što možete vidjeti iz gornjeg primjera, nema poteškoća u dodavanju i obradi izračunatih polja. Koristili smo dvije funkcije: Array() i ConnectRows().

Nekoliko riječi o potonjem. Osim prvog parametra koji označava identifikator niza, vrijednosti ili vrijednosti, u njemu se mogu postaviti još dva:

  1. Razdjelnik elemenata – označava koji će znak odvojiti jedan element polja ili jedan redak tablice vrijednosti od drugog (u našem slučaju smo izostavili ovaj parametar i prijelom retka je dodijeljen prema zadanim postavkama);
  2. Razdjelnik stupaca – znak koji se koristi za odvajanje stupaca tablice vrijednosti (tačka-zarez se koristi prema zadanim postavkama).

Pristup funkcijama izvoza zajedničkog modula

Funkcije zajedničkog modula mogu djelovati kao izvor podataka za popunjavanje izračunatog polja.

Neki važne točke:

  • Funkcija mora biti izvozna;
  • Ako se funkcija nalazi u zajedničkom modulu s "Globalnim" skupom atributa, poziva se izravno imenom, inače se funkcija mora pozvati prema shemi "Zajednički naziv modula". "Naziv funkcije koju treba pozvati."

Kao primjer korištenja uzet ćemo isti zahtjev za dokumente o primitku i prikazati ga u posebnom stupcu. Nećemo opisivati ​​sam zahtjev; prijeđimo izravno na izračunata polja:


Dakle, vidimo da se gotovo svaki procesor podataka može inicijalizirati iz sustava kontrole pristupa, što značajno proširuje mogućnosti korištenja sheme.

Jezični izrazi rasporeda

Često se u radu programera javlja situacija kada je potrebno prikazati rezultat dijeljenja u ACS polju:

  1. Izračunajte prosječnu cijenu artikla;
  2. Sve vrste kamata;
  3. Izračuni prosječnih primanja i sl.

Da biste izbjegli probleme, u ovim slučajevima preporučljivo je unijeti test za dijeljenje s 0 u izračunato polje.

To se može učiniti korištenjem konstrukcije “Izbor kada….Onda… Inače… Kraj”.

Na kraju, nekoliko riječi o dosta nova značajka Izračunajizraz(). Uz njegovu pomoć, posebno, možete izračunati odstupanja u troškovima između trenutnih i prethodnih redaka, kumulativno stanje itd.

Recimo da možete dobiti zbroj dokumenta iz prethodnog retka našeg zahtjeva navođenjem vrijednosti Izračunaj izraz ("Zbroj dokumenta", "Prethodni zbroj") u polju "Izraz".

Dobar dan, dragi čitatelji našeg bloga! Danas vam na stvarnom primjeru želim reći kako
koristite ACS funkcije Array i JoinStrings. U članku o

malo se spominjalo kako raditi s
na knjižnoj oznaci
, također je već objašnjeno kao
pomoću kartice "Resursi". Danas ćemo još jednom obratiti pozornost na njih
oznake u svjetlu naše teme.

Izgled primjera 1C izvješća pomoću dvije ACS funkcije Niz I ConnectRows Sljedeći:

Izjava problema za korištenje ACS funkcija Array i JoinStrings

Zadatak: Sve prodajne brojeve za jedan proizvod trebate unijeti u jednu ćeliju.

Nešto poput: nomenklatura | količina | 001, 002 itd. |

Koristit ćemo zahtjev za akumulacijski registar “Realizacija TMZ”.

BIRAJTE
Implementacija TMZ-a. Zapisničar. Broj,
Implementacija TMZ-a. Nomenklatura,
Implementacija TMZ-a. Zapisničar,
Implementacija TMZ-a. KoličinaPromet
IZ
Registar akumulacije. Implementacija TMZ-a. Revolucije
(, , Registrar, ) KAKO Implementirati TMZ

Registar akumulacije “Realizacija TMZ” postoji iu konfiguraciji Računovodstvo iu konfiguraciji Upravljanje trgovačkim poduzećem (UTP). Saznajte kako konfigurirati USP u elementu imenika "Nomenklatura". Stoga, nakon preuzimanja, možete pokrenuti ovo izvješće u obje konfiguracije kako biste provjerili njegovu funkcionalnost.

Implementacija zadatka pomoću funkcija SKD Array i ConnectRows


Za izradu su korišteni isti koraci, ali s nekim dodacima
.

Opis funkcije JoinStrings

JoinStrings

Koristi se za spajanje nizova u jedan niz.

Sintaksa:

ConnectRows(vrijednost, razdjelnik stavki, razdjelnik stupaca)

Mogućnosti:

  1. Značenje— izraze koje je potrebno spojiti u jedan red.
    Ako je niz, tada će se elementi niza kombinirati u niz.
    Ako je to ValueTable, tada će svi stupci i retci tablice biti kombinirani u red;
  2. Razdjelnik elemenata- niz koji sadrži tekst koji će se koristiti kao
    separator između elemenata polja i redaka tablice vrijednosti. Zadano – znak za novi redak;
  3. Razdjelnici stupaca-string koji sadrži tekst koji će se koristiti kao graničnik
    između stupaca tablice vrijednosti. Zadano ";".