Funksionet e gjuhës shprehëse të sistemit të përbërjes së të dhënave. SKD

Në këtë shënim të shkurtër dua të tregoj se si mund të përmbledhni vlerat në nivele të ndryshme të grupimit në një raport duke përdorur një sistem të përbërjes së të dhënave.
Siç tregohet në imazh, vetëm në nivelin e grupimit "Grupet e artikujve", burimi "Porosi" llogaritet, ai tregon se sa duhet të porositet për grupin aktual të artikujve bazuar në kushte të caktuara:


Kjo vlerë mund të llogaritet vetëm në këtë nivel grupimi, pasi nuk ka vlera më lart ose më poshtë për t'u llogaritur. Për shembull, në nivelin e regjistrimeve të detajuara, nuk ka të dhëna për sasinë maksimale në një grup, sepse këto të dhëna janë të vlefshme vetëm për grupin në tërësi, dhe jo për përbërësit e tij individualë.

Prandaj, tani është e nevojshme të llogariten totalet për grupimet e mësipërme ("Depot", "Llojet e magazinës") dhe totali i përgjithshëm.
Për ta bërë këtë, përdorni funksionin CalculateExpressionWithGroupArray:
VLERËSO SHPREHJEN WITHGROUPARRAY (EVALEXPRESSIONWITHGROUPARRAY)
Sintaksë:
EvaluateExpressionWithGroupArray(,)
Përshkrim:
Funksioni kthen një grup, secili element i të cilit përmban rezultatin e vlerësimit të një shprehjeje për grupim sipas fushës së specifikuar.
Kompozitori i paraqitjes, kur gjeneron një paraqitje, i konverton parametrat e funksionit në fushat e paraqitjes së përbërjes së të dhënave. Për shembull, fusha Account do të konvertohet në DataSet.Account.
Ndërtuesi i layout, kur gjeneron shprehje për daljen e një fushe të personalizuar, shprehja e së cilës përmban vetëm funksionin CalculateArrayWithGroupArray(), gjeneron shprehjen dalëse në mënyrë që informacioni dalës të renditet. Për shembull, për një fushë të personalizuar me shprehjen:

CalculateExpressionWithGroupArray("Shuma(ShumaTurnover)", "Counterparty")
Ndërtuesi i paraqitjes do të gjenerojë shprehjen e mëposhtme për dalje:

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

Opsione:

Lloji: String. Shprehja që do të vlerësohet. Linja, për shembull, Sasia (Shuma e qarkullimit).

Lloji: String. Shprehjet e fushave të grupimit – shprehjet e fushave të grupimit, të ndara me presje. Për shembull, Kontraktori, Pala.

Lloji: String. Një shprehje që përshkruan përzgjedhjen e aplikuar për të dhënat e detajeve. Shprehja nuk mbështet përdorimin e funksioneve agregate. Për shembull, DeletionFlag = False.

Lloji: String. Një shprehje që përshkruan përzgjedhjen e aplikuar për të dhënat e grupit. Për shembull, Shuma (Shuma e qarkullimit) > &Parametri1.
Shembull:

Maksimumi(CalculateExpressionWithGroupArray("Shuma(ShumaTurnover)", "Kontraparta"));

Një përshkrim i hollësishëm i sintaksës së funksionit mund të gjendet në http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Tani, për llogaritjen, dublikojmë fushën "Order", me vlera të ndryshme "Llogarit nga...", duke përdorur shprehjet e mëposhtme, vini re se në çdo nivel më të lartë përdoren vlerat e niveleve nën grupimet. .

Si rezultat, marrim ndërtimin e mëposhtëm:

Në dritën e publikimit të ardhshëm të 8.2.14, do të përpiqem të përshkruaj disa funksione të reja të sistemit të përbërjes së të dhënave.

Hapni diagramin e paraqitjes së të dhënave, mundësisht në një raport të jashtëm, për ta bërë më të lehtë modifikimin.

Ne shtojmë një grup të dhënash të llojit të pyetjes dhe shkruajmë, me dorë ose duke përdorur projektuesin e pyetjeve, një pyetje të thjeshtë:

1. Vendosni një kërkesë në sistemin e kontrollit të aksesit.

2. Vendosni fushat e llogaritura në sistemin e kontrollit të aksesit

3. Konfiguroni paraqitjen e të dhënave në skedën e cilësimeve

4. Nisni 1C Enterprise 8.2.14. Hapni raportin. Ne formojmë, marrim.

Përshkrimi i vetë funksioneve të reja:

1. Data aktuale ()

Kthen datën e sistemit. Gjatë kompozimit të një faqosjeje, në të gjitha shprehjet që janë të pranishme në paraqitje, funksioni CurrentDate() zëvendësohet me vlerën e datës aktuale.

2. COMPUTEEXPRESSION()

Sintaksë:

CalculateExpression(,)

Përshkrim:

Funksioni është krijuar për të vlerësuar një shprehje në kontekstin e disa grupimeve.

Funksioni merr parasysh përzgjedhjen e grupimeve, por nuk merr parasysh zgjedhjet hierarkike.

Funksioni nuk mund të zbatohet për një grupim në përzgjedhjen e grupit të atij grupimi. Për shembull, në zgjedhjen e grupimit të Nomenklaturës, nuk mund të përdorni shprehjen CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000. Por një shprehje e tillë mund të përdoret në përzgjedhjen hierarkike.

Nëse rekordi i fundit i paraprin regjistrimit të fillimit, atëherë konsiderohet se nuk ka të dhëna për llogaritjen e të dhënave të detajuara dhe llogaritjen e funksioneve agregate.

Gjatë llogaritjes së shprehjeve të intervalit për një total total (parametri i grupimit vendoset në GrandTotal), supozohet se nuk ka të dhëna për llogaritjen e të dhënave të detajuara dhe llogaritjen e funksioneve të përgjithshme.

Lidhësi i paraqitjes kur gjeneron një shprehje funksioni CalculateExpression, nëse shprehja e renditjes përmban fusha që nuk mund të përdoren në grupim, zëvendëson funksionin CalculateExpressionI PAVLEFSHËM.

Opsione

Lloji: Linjë. Shprehja që do të vlerësohet.

Lloji: Linjë. Përmban emrin e grupimit në kontekstin e të cilit duhet të vlerësohet shprehja. Nëse një varg bosh përdoret si emër grupimi, llogaritja do të kryhet në kontekstin e grupimit aktual. Nëse vargu GeneralTotal përdoret si emër i grupit, llogaritja do të kryhet në kontekstin e totalit të përgjithshëm. Përndryshe, llogaritja do të kryhet në kontekstin e grupimit mëmë me të njëjtin emër.

Për shembull:

Shuma (Sales.SumTurnover)/Llogarit ("Sum(Sales.SumTurnover)", "Total")

Në këtë shembull, rezultati do të jetë raporti i shumës sipas fushës Shitjet.Shuma Qarkullim grupimi i të dhënave në shumën e së njëjtës fushë në të gjithë paraqitjen;

Lloji: Linjë. Parametri mund të marrë vlerat e mëposhtme:

· Total i madh— shprehja do të llogaritet për të gjitha regjistrimet e grupimit.

· Hierarkia— shprehja do të vlerësohet për rekordin hierarkik prind, nëse ka një të tillë, dhe për të gjithë grupimin, nëse nuk ka rekord hierarkik prind.

· Grupimi— shprehja do të vlerësohet për rekordin aktual të grupimit të grupit.

· Grupimi JoResurs— kur llogaritet një funksion për një rekord grup sipas burimeve, shprehja do të llogaritet për regjistrimin e grupit të parë të grupimit origjinal.

Gjatë llogaritjes së një funksioni CalculateExpression() me kuptim Grupimi JoResurs për regjistrimet e grupit që nuk janë grupuar sipas burimeve, funksioni llogaritet në të njëjtën mënyrë siç do të llogaritej nëse vlera e parametrit do të ishte e barabartë me vlerën Grupimi.

Ndërtuesi i paraqitjes së përbërjes së të dhënave, kur gjeneron një paraqitje të përbërjes së të dhënave kur nxjerr një fushë burimi me anë të së cilës kryhet grupimi në paraqitje, vendos një shprehje në paraqitjen që llogaritet duke përdorur funksionin CalculateExpression() , duke treguar parametrin Grupimi JoResurs. Për burimet e tjera, shprehjet e zakonshme të burimeve vendosen në grupimin e burimeve.

Lloji: Linjë. Tregon se nga cili regjistrim duhet të fillojë fragmenti, në të cilin duhet të llogariten funksionet e shprehjes agregate dhe nga cili rekorde të merren vlerat e fushës jashtë funksioneve të agregatit. Vlera mund të jetë një nga sa vijon:

· Së pari

· E fundit (e fundit)

· E mëparshme

· Tjetra (Tjetër)

· Aktuale

· Vlera Kufizuese(BoundaryValue) Vlera Kufizuese

Lloji: Linjë. Tregon se në cilin regjistrim duhet të vazhdohet fragmenti, në të cilin duhet të llogariten funksionet e përgjithshme të shprehjes. Vlera mund të jetë një nga sa vijon:

· Së pari. Është e nevojshme të merret rekordi i parë i grupimit. Pas fjalës në kllapa, mund të specifikoni një shprehje, rezultati i së cilës do të përdoret si kompensim që nga fillimi i grupimit. Vlera që rezulton duhet të jetë një numër i plotë më i madh se zero. Për shembull, First(3) - marrja e rekordit të tretë nga fillimi i grupimit.

Nëse rekordi i parë është jashtë grupimit, atëherë konsiderohet se nuk ka regjistrime. Për shembull, nëse ka 3 regjistrime, dhe ju dëshironi të merrni First(4), atëherë konsiderohet se nuk ka të dhëna.

· E fundit (e fundit). Ju duhet të merrni rekordin e fundit të grupimit. Pas fjalës në kllapa, mund të specifikoni një shprehje, rezultati i së cilës do të përdoret si një kompensim nga fundi i grupimit. Vlera që rezulton duhet të jetë një numër i plotë më i madh se zero. Për shembull, Last(3) - marrja e rekordit të tretë nga fundi i grupit.

Nëse rekordi i fundit është jashtë grupimit, atëherë konsiderohet se nuk ka të dhëna. Për shembull, nëse ka 3 regjistrime, dhe ju dëshironi të merrni Last(4), atëherë konsiderohet se nuk ka regjistrime.

· E mëparshme. Ju duhet të merrni rekordin e mëparshëm të grupimit. Pas fjalës në kllapa, mund të specifikoni një shprehje, rezultati i së cilës do të përdoret si një zhvendosje nga rekordi aktual i grupimit. Për shembull, Previous(2) - duke marrë të mëparshmen nga rekordi i mëparshëm.

Nëse rekordi i mëparshëm shkon përtej grupimit (për shembull, për rekordin e dytë të grupimit duhet të merrni Previous(3)), atëherë merret rekordi i parë i grupimit.

Kur merret rekordi i mëparshëm për një total grupimi, konsiderohet se është marrë rekordi i parë.

· Tjetra (Tjetër). Ju duhet të merrni rekordin tjetër të grupimit. Pas fjalës në kllapa, mund të specifikoni një shprehje, rezultati i së cilës do të përdoret si një zhvendosje përpara nga rekordi aktual i grupimit. Për shembull, Next(2) - marrja e radhës nga rekordi tjetër.

Nëse rekordi tjetër shkon përtej grupimit, atëherë konsiderohet se nuk ka regjistrime. Për shembull, nëse ka 3 hyrje dhe hyrja e tretë merr Next() , atëherë konsiderohet se nuk ka hyrje.

Kur merret rekordi i radhës për totalin e grupimit, konsiderohet se nuk ka regjistrim.

· Aktuale. Ju duhet të merrni rekordin aktual.

Kur merret për një total grupimi, merret rekordi i parë.

· Vlera Kufizuese(BoundaryValue). Nevoja për të marrë një rekord sipas vlerës së specifikuar. Pas fjalës Vlera Kufizuese në kllapa duhet të tregoni shprehjen me vlerën e së cilës dëshironi të filloni fragmentin, fushën e parë të renditjes.

Rekordi i parë vlera e fushës së renditjes së të cilit është më e madhe ose e barabartë me vlerën e specifikuar do të kthehet si rekord. Për shembull, nëse fusha Periudha përdoret si fushë e porositjes, dhe ajo ka vlerat 01/01/2010, 02/01/2010, 03/01/2010, dhe ju dëshironi të merrni LimitingValue(DataKoha (2010, 1, 15)), atëherë do të merret një procesverbal me datën 02/01/2010.

Lloji: Linjë. Liston shprehjet, të ndara me presje, që përshkruajnë rregullat e renditjes. Nëse nuk specifikohet, atëherë renditja kryhet në të njëjtën mënyrë si për grupimin për të cilin vlerësohet shprehja. Pas çdo shprehjeje mund të specifikoni një fjalë kyçe Mosha(për renditjen në rend rritës), Duke zbritur(për renditjen në rend zbritës) dhe Porosit automatik(për të renditur fushat e referencës sipas fushave me të cilat dëshironi të renditni objektin që referohet). fjalë Porosit automatik mund të përdoret si me fjalën Mosha, kështu me fjalën Duke zbritur.

Lloji: Linjë. Njësoj si parametri Renditja. Përdoret për të organizuar të dhënat hierarkike. Nëse nuk specifikohet, ndërtuesi i paraqitjes gjeneron renditjen sipas renditjes së specifikuar në parametrin Renditja.

Lloji: Linjë. Përcakton rregullin për përcaktimin e rekordit të mëparshëm ose të ardhshëm në rast se ka disa rekorde me të njëjtën vlerë renditjeje:

· Veçmas tregon se një sekuencë regjistrimesh të renditura përdoret për të përcaktuar regjistrimet e mëparshme dhe të ardhshme. Vlera e paracaktuar.

· Së bashku tregon se regjistrimet e mëparshme dhe të ardhshme përcaktohen në bazë të vlerave të shprehjeve të renditjes.

Për shembull, nëse sekuenca që rezulton renditet sipas datës:

datë Emri i plotë Kuptimi
1 01 janar 2001

Ivanov M.

10
2 02 janar 2001 Petrov S. 20
3 03 janar 2001 Sidorov R. 30
4 04 janar 2001 Petrov S. 40

Veçmas, Se:

§ hyrja e mëparshme në hyrjen 3 do të jetë hyrja 2.

Aktuale, Aktuale(në përputhje me rrethanat, parametrat Filloni Dhe fund), atëherë për rekordin 2 ky fragment do të përbëhet nga një rekord 2. Shprehja do të jetë e barabartë me 20.

Nëse vlera e parametrit është Së bashku, Se:

§ hyrja e mëparshme në hyrjen 3 do të jetë hyrja 1.

§ nëse fragmenti i llogaritjes përcaktohet si Aktuale, Aktuale(në përputhje me rrethanat, parametrat Filloni Dhe fund), atëherë për regjistrimin 2 ky fragment do të përbëhet nga regjistrimet 2 dhe 3. Shprehje CalculateExpression("Sum(Vlera)", Aktuale, Aktuale) do të jetë e barabartë me 50.

Kur specifikoni një vlerë parametri të barabartë me Së bashku, në parametra Filloni Dhe fund ju nuk mund të specifikoni një kompensim për pozicionet E para, e fundit, e mëparshme, e ardhshme.

CalculateExpression ("Sum(SumTurnover)", "First", "Current")

Nëse dëshironi të merrni vlerën e grupimit në rreshtin e mëparshëm, mund të përdorni shprehjen e mëposhtme:

CalculateExpression ("Rritja", "Previous")

Listë i ri funksione:

CalculateExpressionWithGroupArray(,) -

Funksioni kthen një grup, çdo element i të cilit përmban rezultatin e vlerësimit të një shprehjeje për grupim sipas fushës së specifikuar.

CalculateExpressionWithGroupValueTable(,) -

Funksioni kthen një tabelë vlerash, çdo rresht i së cilës përmban rezultatin e vlerësimit të shprehjeve për grupim sipas fushës së specifikuar

Vlera e Plotësuar() - Kthen "True" nëse vlera është e ndryshme nga vlera e paracaktuar e këtij lloji, përveç NULL, përveç një referencë boshe, përveç asaj të Padefinuar. Vlerat Boolean kontrollohen për vlera NULL. Vargjet kontrollohen për mungesë të karaktereve jo të hapësirës së bardhë

Formati(, ) - Merr një varg të formatuar të vlerës së kaluar. Vargu i formatit është vendosur në përputhje me vargun e formatit të sistemit 1C: Enterprise.

Nënstring(, , ) - Ky funksion është krijuar për të nxjerrë një nënvarg nga një varg.

Gjatësia e linjës() - Funksioni është krijuar për të përcaktuar gjatësinë e një vargu. Parametri është një shprehje vargu

Linjë() - Nëse një grup kalohet si parametër, funksioni kthen një varg që përmban paraqitje të vargut të të gjithë elementëve të grupit, të ndara me karaktere ";". Nëse një tabelë vlerash kalohet si parametër, funksioni kthen një varg që përmban përfaqësime të vargut të të gjitha rreshtave të tabelës së vlerave, me paraqitjet e qelizave të çdo rreshti të ndara me karaktere ";" dhe rreshtat me një rresht të ri karakter. Nëse paraqitja e vargut të një elementi është bosh, atëherë në vend të paraqitjes së tij shfaqet një varg.

Ditë të mbarë, të dashur lexues të blogut tonë! Sot dua t'ju tregoj, duke përdorur një shembull të vërtetë, se si
përdorni funksionet ACS Array dhe JoinStrings. Në një artikull rreth

u përmend pak se si të punohet me
në faqerojtësin
, gjithashtu është shpjeguar tashmë si
duke përdorur skedën "Burimet". Sot do t'u kushtojmë vëmendje edhe një herë këtyre
faqeshënuesit në dritën e temës sonë.

Shfaqja e një raporti shembull 1C duke përdorur dy funksione ACS Array Dhe ConnectRows tjetër:

Deklarata e problemit për përdorimin e funksioneve ACS Array dhe JoinStrings

Detyrë: Duhet të futni të gjithë numrat e shitjeve për një produkt në një qelizë.

Diçka si: nomenklatura | sasia | 001, 002, etj. |

Ne do të përdorim një kërkesë në regjistrin e akumulimit "Shitjet e TMZ".

ZGJIDHNI
Zbatimi i TMZ. Regjistrues. Numri,
Zbatimi i TMZ. Nomenklatura,
Zbatimi i TMZ. Regjistrues,
Zbatimi i TMZ. Sasia Qarkullimi
NGA
Regjistri i Akumulimit. Zbatimi i TMZ. Revolucionet
(, , Regjistruesi, ) SI TË Zbatoni TMZ

Regjistri i akumulimit "Realizimi i TMZ" ekziston si në konfigurimin e Kontabilitetit ashtu edhe në konfigurimin e Menaxhimit të Ndërmarrjeve Tregtare (UTP). Zbuloni se si të konfiguroni USP në elementin e drejtorisë "Nomenklature". Prandaj, pas shkarkimit, mund ta ekzekutoni këtë raport në të dy konfigurimet për të kontrolluar funksionalitetin e tij.

Zbatimi i detyrës duke përdorur funksionet SKD Array dhe ConnectRows


Të njëjtat hapa, por me disa shtesa, u përdorën për të krijuar
.

Përshkrimi i funksionit JoinStrings

JoinStrings

Përdoret për të lidhur vargjet në një varg.

Sintaksë:

ConnectRows (Vlera, Ndarësi i Artikujve, Ndarës i kolonave)

Opsione:

  1. Kuptimi— shprehjet që duhet të kombinohen në një rresht.
    Nëse është një varg, atëherë elementët e grupit do të kombinohen në një varg.
    Nëse është një Tabela me vlerë, atëherë të gjitha kolonat dhe rreshtat e tabelës do të kombinohen në një rresht;
  2. Ndarësi i elementeve- një varg që përmban tekstin që do të përdoret si
    ndarës ndërmjet elementeve të grupit dhe rreshtave të tabelës së vlerave. Default – karakteri i furnizimit të linjës;
  3. Ndarësit e kolonave-një varg që përmban tekstin që do të përdoret si kufizues
    ndërmjet kolonave të tabelës së vlerave. E paracaktuar ";".

Përdorimi i duhur i një skeme të përbërjes së të dhënave (DCS) ju lejon të:

  • të zvogëlojë ndjeshëm kohën e nevojshme për të zhvilluar një raport;
  • eliminoni nevojën për të krijuar një mbajtës të formës së menaxhuar;
  • merrni një rezultat të bukur me mundësinë e personalizimit shtesë nga përdoruesi.

Por jo të gjithë zhvilluesit shfrytëzojnë maksimalisht aftësitë e skemës, pasi jo të gjitha cilësimet e saj janë të dukshme dhe intuitive. Në veçanti, shumë njerëz e dinë që në 1C SKD ka fusha të llogaritura, megjithatë, ata nuk e kuptojnë plotësisht fushën e përdorimit të tyre dhe metodat e punës me to.

Çfarë është një fushë e llogaritur

Në shumicën e rasteve, burimi i të dhënave në diagramin e paraqitjes është një pyetje. Në parim, brenda vetë pyetjes tashmë mund të përdorni formula, ndërtime dhe shprehje të ndryshme. Shtrohet një pyetje e natyrshme: pse na nevojitet funksionaliteti i kopjuar?

Fakti është se sistemi i kontrollit të aksesit është diçka më shumë sesa thjesht shfaqja e rezultatit të një pyetjeje, dhe kjo duket qartë nga forma e krijimit të diagramit (Fig. 1).

Fushat e llogaritura ju lejojnë të kryeni veprime të caktuara me grupin e të dhënave të krijuara:

  • Nxjerr një grup të dhënash të marra nga një kërkesë në një qelizë specifike, duke kombinuar disa rreshta në një;
  • Qasja në funksionet e eksportit të modulit të përgjithshëm;
  • Ekzekutoni shprehjet e ndryshme të disponueshme për gjuhën e paraqitjes dhe përdorni funksionet speciale EvaluateExpression.

Le të kalojmë nëpër këtë listë.

Grup vlerash në një qelizë

Le të simulojmë një situatë ku është e nevojshme të merrni të gjithë numrat e dokumentit të marrjes për një palë në një qelizë të veçantë:


Kështu, ne kemi krijuar një fushë llogaritëse shtesë në skemën tonë;


Siç mund ta shihni nga shembulli i mësipërm, nuk ka vështirësi në shtimin dhe përpunimin e fushave të llogaritura. Ne përdorëm dy funksione: Array() dhe ConnectRows().

Disa fjalë për këtë të fundit. Përveç parametrit të parë që tregon identifikuesin e grupit, vlerave ose vlerave, dy të tjera mund të vendosen në të:

  1. Ndarësi i elementeve - tregon se cili karakter do të ndajë një element të grupit ose një rresht të tabelës së vlerave nga një tjetër (në rastin tonë, ne e hoqëm këtë parametër dhe një ndërprerje rreshti u caktua si parazgjedhje);
  2. Ndarësi i kolonave - një karakter që përdoret për të ndarë kolonat e një tabele vlerash (pikëpresje përdoret si parazgjedhje).

Qasja në funksionet e eksportit të një moduli të përbashkët

Funksionet e një moduli të përbashkët mund të veprojnë si një burim të dhënash për plotësimin e një fushe të llogaritur.

Disa pika të rëndësishme:

  • Funksioni duhet të jetë i eksportueshëm;
  • Nëse një funksion ndodhet në një modul të përbashkët me grupin e atributeve "Global", ai thirret drejtpërdrejt me emër, përndryshe funksioni duhet të thirret sipas skemës "Emri i modulit të përbashkët". "Emri i funksionit që do të thirret."

Si shembull përdorimi, ne do të marrim të njëjtën kërkesë për dokumentet e marrjes dhe do ta shfaqim atë në një kolonë të veçantë. Ne nuk do ta përshkruajmë vetë kërkesën, le të kalojmë drejtpërdrejt në fushat e llogaritura:


Kështu, shohim se pothuajse çdo procesor i të dhënave mund të inicializohet nga sistemi i kontrollit të aksesit, gjë që zgjeron ndjeshëm mundësitë e përdorimit të skemës.

Paraqitja e shprehjeve gjuhësore

Shumë shpesh në punën e një zhvilluesi lind një situatë kur është e nevojshme të shfaqet rezultati i ndarjes në fushën ACS:

  1. Llogaritni koston mesatare të artikullit;
  2. Të gjitha llojet e interesave;
  3. Llogaritjet e fitimeve mesatare, etj.

Për të shmangur problemet, në këto raste këshillohet që në fushën e llogaritur të futet një test për pjesëtimin me 0.

Kjo mund të bëhet duke përdorur konstruksionin “Zgjedhja kur….Pastaj… Ndryshe… Fund”.

Në fund, disa fjalë për funksionin mjaft të ri CalculateExpression(). Me ndihmën e tij, në veçanti, ju mund të llogaritni devijimet në kosto midis linjave aktuale dhe të mëparshme, bilancit kumulativ, etj.

Le të themi se mund të merrni shumën e dokumentit nga rreshti i mëparshëm i kërkesës sonë duke specifikuar vlerën Llogaritni shprehjen ("Shuma e dokumentit", "Shuma e mëparshme") në fushën "Shprehje".

Kjo metodë, më duket, ka një minus, por funksionon, por minusi është i madh. Le të shohim një shembull: në konfigurim ekziston një dokument "Pranimi i mallrave" me një pjesë tabelare "Mallrat", është e nevojshme të shfaqen në raport dokumentet dhe emrat e mallrave të pranuara për secilin dokument.

Le të krijojmë një raport, të shtojmë një skemë bazë të paraqitjes së të dhënave, të shtojmë një grup të dhënash të llojit "query" në sistemin e kontrollit të aksesit dhe të gjenerojmë një kërkesë të thjeshtë (shih Figurën 1).

Figura 1. Kërkesa e grupit të të dhënave
Në skedën "Fushat e llogaritura", shtoni një fushë të llogaritur të quajtur TabularPart dhe specifikoni një varg bosh në kolonën Expression (shih Figurën 2).
Fusha jonë e llogaritur do të përdoret si burim, kështu që në skedën "Resources" vendosim shprehjen e grupimit: ConnectRows(Array(Products.Nomenclature)""). Ne gjithashtu tregojmë se ky burim duhet të llogaritet duke përdorur fushën Link (shih Figurën 3).
Rezultati i raportit:
Ana negative është përdorimi i grupimit në rastin tonë, grupimi kryhet nga atributi Link, përndryshe nuk do të funksionojë. Prania e një grupimi imponon disa kufizime në vendosjen e prodhimit të të dhënave (shih Figurën 4).

2) Thirrja e funksionit tuaj nga një modul i përbashkët.

Një mënyrë e thjeshtë dhe e qartë, e vetmja vështirësi është të gjesh një modul të përbashkët të përshtatshëm ose të krijosh një të ri për të shkruar funksionin tënd :). Duke përdorur lidhjen e kaluar në dokumentin "Pranimi i mallrave", funksioni do të marrë rreshta nga pjesa tabelare e dokumentit dhe do të gjenerojë një rresht me informacione për mallrat e marra. Le të fillojmë zbatimin.

Le të krijojmë një raport, të shtojmë një skemë bazë të paraqitjes së të dhënave, të shtojmë një grup të dhënash të llojit "query" në sistemin e kontrollit të aksesit dhe të gjenerojmë një kërkesë të thjeshtë (shih Figurën 6).


Figura 6. Kërkesa e grupit të të dhënave
Le të krijojmë një modul të përbashkët _Demo Work WITH Reports dhe të shkruajmë funksionin e eksportit Get List of Products for Report(). Shihni kodin e funksionit më poshtë.
Në skedën "Fushat e llogaritura", shtoni një fushë të llogaritur të quajtur TabularPart dhe në kolonën Expression ne tregojmë një thirrje funksioni nga moduli i përgjithshëm (shih Figurën 2):
_DemoWorking WITH Reports.Merr listën e produkteve për raportin (Lidhja)

Le të shkojmë te skeda "Cilësimet" dhe të krijojmë një cilësim për daljen e të dhënave - ky do të jetë një regjistrim i detajuar (shih Figurën 8).
Rezultati i raportit:

Shkarko raportin mostër

Çfarë duhet të dini kur përdorni këtë metodë:
1) Shprehja e motorit të përbërjes së të dhënave mund të përmbajë thirrje për funksionet e moduleve të konfigurimit të përbashkët global. Për shembull:
Emri i shkurtuar (Lidhja, data, numri)
2) Kur krijoni një raport në mënyrë programore, përdorimi i funksioneve të moduleve të zakonshme lejohet vetëm nëse specifikohet parametri përkatës i përpunuesit të përbërjes së të dhënave (parametri i 4-të):
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout, DecryptionData, True);
3) Funksionet e moduleve të zakonshme nuk mund të përdoren në shprehjet e fushës me porosi.
4) Nëse bëhet një përjashtim kur gjenerohet një raport që tregon një funksion të një moduli të përbashkët, kontrolloni kontekstin e ekzekutimit të modulit (shih Figurën 9).

Përshkrimi i funksioneve të përdorura

ConnectRows (Vlera, Ndarësi i Artikujve, Ndarës i kolonave)- projektuar për të kombinuar vargjet në një rresht.
  • Vlera - shprehje që duhet të kombinohen në një rresht. Nëse është një varg, atëherë elementët e grupit do të kombinohen në një varg. Nëse është një Tabela me vlerë, atëherë të gjitha kolonat dhe rreshtat e tabelës do të kombinohen në një rresht;
  • Ndarësi i elementeve - Një varg që përmban tekst që do të përdoret si ndarës midis elementeve të grupit dhe rreshtave të tabelës së vlerave. Default – karakteri i furnizimit të linjës;
  • Ndarësit e kolonave - një varg që përmban tekst që do të përdoret si ndarës midis kolonave të tabelës së vlerave. E paracaktuar ";".
Array (Shprehje [e ndryshme])- mund të përdorni një tabelë vlerash si parametër. Në këtë rast, rezultati i funksionit do të jetë një grup që përmban vlerat e kolonës së parë të tabelës së vlerave, të kaluara si parametër. Nëse një shprehje përmban një funksion Array, atëherë shprehja konsiderohet të jetë një shprehje agregate. Nëse specifikohet fjala kyçe Various, grupi që rezulton nuk do të përmbajë vlera të dyfishta.

Merrni listën e produkteve për raport (DocumentLink)- funksioni gjeneron një linjë me një listë të mallrave në hyrje.
// Opsione:
// DocumentLink - DocumentLink.Faturimi i mallrave - Dokumenti "Faturimi i mallit".
// Vlera e kthimit:
// String - një varg me një listë produktesh.
Funksioni Merr listën e produkteve për eksport (DocumentLink).

Lista e Produkteve = "";

Për çdo linjë PM nga DocumentLink.Cikli i produkteve
Lista e Produkteve = Lista e Produkteve + Linja TC.Nomenklatura;
Lista e Produkteve = Lista e Produkteve + Simbolet.PS;
Cikli i Fundit;

Lista e Kthimit të Produkteve;

FundFunction // Merrni listën e produkteve për raport ()