Numri i renditur në kërkesë është 1c. Funksionet View dhe ViewLink

Le të shohim pjesën tjetër tani.

Funksionet për të punuar me vargje në pyetjet 1C

Ka pak funksione dhe operatorë për të punuar me të dhënat e vargut në pyetjet 1C.

Së pari, vargjet në pyetje mund të shtohen. Për ta bërë këtë, përdorni operatorin "+":

Kërkesë. Teksti = "ZGJIDH
" "Linjë: " " + Burimi.Emri
;

Së dyti, ju mund të zgjidhni një pjesë të linjës. Për ta bërë këtë, përdorni funksionin NËNSTRUKSIONI. Funksioni është i ngjashëm me gjuhën e integruar 1C. Ka tre parametra:

  1. Vargu burimor.
  2. Numri i karakterit me të cilin duhet të fillojë linja e zgjedhur.
  3. Personazhet.

Kërkesë. Teksti= "ZGJIDH
SUBSTRING ("
"Linjë: " ", 4, 3) SI Rezultat"; // Rezultati: ok

Funksioni ISNULL

NULL është një lloj i veçantë i të dhënave në platformën 1C: Enterprise. Është gjithashtu vlera e vetme e mundshme e këtij lloji. NULL mund të shfaqet në pyetje në disa raste: kur lidhni burimet e pyetjeve, nëse një vlerë përkatëse nuk u gjet në një nga tabelat; kur aksesoni detajet e një objekti që nuk ekziston; nëse NULL është specifikuar në listën e fushave të pyetjeve (për shembull, kur kombinohen rezultatet e përzgjedhjes nga disa tabela), etj.

Sepse NULL nuk është as null, as vargu bosh, as edhe një vlerë E pacaktuar, shpesh është e dobishme ta zëvendësoni atë me disa lloj të dhënash më të dobishme. Kjo është ajo për të cilën është krijuar funksioni. ISNULL.

Ka dy parametra:

  1. Vlera që kontrollohet.
  2. Vlera me të cilën do të zëvendësohet parametri i parë nëse rezulton të jetë NULL.

Kërkesë. Teksti= "ZGJIDH
ISNULL(Source.Remainder, 0) AS Remainder"
; // Nëse rezultati i kërkesës është pjesa e mbetur e fushës = NULL,
// atëherë do të zëvendësohet me 0 dhe ju mund të kryeni veprime matematikore me të

Funksione PERFORMANCA Dhe LIDHJE HYRJE

Këto funksione janë krijuar për të marrë paraqitje të vargjeve të vlerave të ndryshme. Kjo do të thotë, ata konvertojnë referencat, numrat, booleans, etj. në tekst të thjeshtë. Dallimi midis tyre është se funksioni PERFORMANCA konverton çdo lloj të dhënash në tekst (string) dhe funksion LIDHJE HYRJE- vetëm lidh, dhe kthen vlerat e mbetura siç janë, të pa konvertuara.

Kërkesë. Teksti= "ZGJIDH
PËRFAQËSIMI (E VËRTETË) SI Boolean,
PËRFAQËSIMI (4) SI Numër,
PËRFAQËSIMI (Burimi.Lidhja) AS Link,
PËRFAQËSIMI(DATETIME(2016,10,07)) SI Data"
;
// Boolean = "Po", Numri = "4", Lidhja = "Dokumenti i urdhrit të marrjes së parave të gatshme nr... nga..."
// Data="07.10.2016 0:00:00"

Kërkesë. Teksti= "ZGJIDH
REFERENCA E PËRFAQËSIMIT (E VËRTETË) SI Boolean,
PËRFAQËSIMI REFERENCA (4) SI NUMR
PRESENTINGLINK(Source.Link) AS Lidhje,
REFERENCA PËRFAQËSIMI(DATA TIME(2016,10,07)) AS Data"
;
// Boolean = E VËRTETË, Numri = 4, Lidhja = "Dokumenti i urdhrit të marrjes së parave të gatshme Nr.... nga..."
// Data=07.10.2016 0:00:00

Funksione LLOJI Dhe LLOJI VLERAT

Funksioni LLOJI kthen llojin e të dhënave të platformës 1C: Enterprise.

Kërkesë. Teksti= "ZGJIDH
LLOJI (Numri)
LLOJI (vargu),
LLOJI (Dokument. Urdhër shpenzimi në para)"
;

Funksioni LLOJI VLERAT kthen llojin e vlerës që i ka kaluar.

Kërkesë. Teksti= "ZGJIDH
LLOJI I VLERAVE (5) SI Numër,
LLOJI ("
"Linjë" ") AS String,
LLOJI (Burimi.Lidhja) AS Referenca
Nga Drejtoria.Burimi AS Burimi"
;
//Number=Numër, String=String, Directory = DirectoryLink.Burimi

Këto funksione janë të përshtatshme për t'u përdorur, për shembull, kur duhet të zbuloni nëse një fushë e marrë në një kërkesë është një vlerë e një lloji. Për shembull, le të marrim informacionin e kontaktit të palëve nga regjistri i informacionit të Informacionit të Kontaktit (kontaktet e jo vetëm palëve, por edhe organizatave, individëve, etj. ruhen atje):

Kërkesë. Teksti= "ZGJIDH

NGA

KU
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)"
;

Funksioni KUPTIMI

Funksioni Kuptimi ju lejon të përdorni objektet e konfigurimit 1C drejtpërdrejt në një kërkesë, pa përdorur .

Le t'i shtojmë edhe një kusht shembullit të mëparshëm. Ju duhet vetëm të merrni numrat e telefonit të palëve tuaja.

Kërkesë. Teksti= "ZGJIDH
KontaktInformacion.Hyrje
NGA
Regjistri i Informacionit Informacioni i Kontaktit
KU
VALUES TYPE(ContactInformation.Object) = TYPE (Directory.Counterparties)
AND ContactInfo.Type = VALUE (Enum.ContactInfoTypes.Phone)"
;

Duhet të theksohet se ky funksion mund të përdoret vetëm me vlera të paracaktuara, d.m.th. me vlera që mund të aksesohen drejtpërdrejt nga konfiguruesi. Kjo është, funksioni KUPTIMI nuk mund të përdoret me elemente direktorie të krijuara nga përdoruesit, por mund të punojë me numërime, me elementë të paracaktuar të drejtorisë, me vlera EmptyLink.

Operatori LIDHJE

Operatori LIDHJEështë krijuar për të kontrolluar vlerat e kthyera nga një kërkesë për të parë nëse ato i përkasin një lloji specifik referimi. E njëjta detyrë mund të realizohet duke përdorur funksionet LLOJI Dhe LLOJI VLERAT(të cilat kanë një shtrirje më të gjerë dhe u diskutuan më lart).

Për shembull, detyra e zgjedhjes së informacionit të kontaktit për palët mund të zgjidhet në këtë mënyrë:

Kërkesë. Teksti= "ZGJIDH
KontaktInformacion.Hyrje
NGA
Regjistri i Informacionit Informacioni i Kontaktit
KU
ContactInformation.Direktoria e lidhjes së objekteve.Counterparties"
;

Operatori EXPRESS

Operatori EXPRESS përdoret në pyetjet 1C në dy raste:

  • kur duhet të ndryshoni karakteristikat e një lloji primitiv;
  • kur duhet të ktheni një fushë me një lloj të dhënash të përbërë në një fushë me një lloj të vetëm.

Llojet primitive të të dhënave përfshijnë: numër, varg, datë, boolean. Disa nga këto lloje të të dhënave kanë karakteristika shtesë. Lloji Numri ka gjatësi dhe saktësi, tip Linjë - gjatësi ose të pakufizuar.

Operatori EXPRESS ju lejon të ndryshoni jo llojin e të dhënave, por karakteristikat shtesë. Për shembull, ai mund të kthejë një varg me gjatësi të pakufizuar në një varg me gjatësi të kufizuar. Kjo mund të jetë e dobishme nëse keni nevojë të gruponi rezultatet e pyetjeve sipas një fushe të tillë. Ju nuk mund të gruponi sipas fushave me një gjatësi të pakufizuar, kështu që ne e konvertojmë atë në një varg me gjatësi 200 karaktere.

Kërkesë. Teksti= "ZGJIDH
SASIA (Mbërritja e ndryshme e mallrave dhe shërbimeve. Lidhje) AS Lidhje
NGA
Dokumenti Pranimi i Mallrave dhe Shërbimeve SI Marrja e Mallrave dhe Shërbimeve
GRUP NGA
EXPRESS(Marrja e Mallrave dhe Shërbimeve. Komenti SI RRESHT (200))"
;

Në disa raste, pyetjet për fushat me një lloj të dhënash të përbërë mund të mos përpunohen në mënyrë optimale nga platforma 1C. Kjo rezulton në kohë më të gjata të ekzekutimit të pyetjeve, kështu që mund të jetë e dobishme të konvertohet paraprakisht lloji i përbërë në një lloj të vetëm.

Kërkesë. Teksti= "ZGJIDH
EXPRESS(Lëvizja e Qarkullimit të Mallrave. Porosi SI Dokument. Porosi Klienti).Data SI Data e porosisë,
Lëvizja e Qarkullimit të Mallrave.Nomenklatura
NGA
Regjistro Akumulimet.Lëvizja e Mallrave.Qirja AS Lëvizja e Mallrave Qarkullimi
KU
Lëvizja e Mallrave Qarkullim.Dokumenti LINK Porosit.Urdhri Klienti"
;

Operatorët ZGJEDHJA Dhe ËSHTË NULL

Operatori ZGJEDHJA të ngjashme me operatorin NËSE në gjuhën e integruar 1C, por ka funksionalitet disi të reduktuar.

Le të themi se duam të marrim informacionin e kontaktit nga regjistri i informacionit të Informacionit të Kontaktit dhe, në të njëjtën kohë, të tregojmë në një fushë të veçantë kërkese nëse ai i përket një pale apo një individi.

Kërkesë. Teksti= "ZGJIDH
Informacioni i Kontaktit. Hyrje,
ZGJEDHJA
WHEN VALUES TYPE (Informacioni i Kontaktit. Objekt) = TYPE (Direktori. Kundërpalët)
PASTAJ"
Kundërpartia "
ZGJEDHJE TJETËR
WHEN VALUES TYPE(Informacion Kontakti. Objekti) = TYPE (Direktori. Individët)
PASTAJ"
Individual"
TJETER "Dikush tjetër" "
FUND
FUND SI PRONAR
NGA
Regjistri i Informacionit AS Informacioni i Kontaktit"
;

Siç mund të shihet nga shembulli, në dizajn ZGJEDHJA ka gjithmonë një kusht pas fjalës KUR; vlera e aplikuar nëse kushti është i vërtetë pas fjalës PASTAJ dhe vlera e aplikuar nëse kushti nuk plotësohet, pas fjalës PER Ndryshe. Të tre elementët e dizajnit ZGJEDHJA janë të detyrueshme. Hiq elementin PER Ndryshe, në të njëjtën mënyrë si kur përdorni operatorin NËSE në gjuhën e integruar 1C, është e pamundur. Gjithashtu nga operatori ZGJEDHJA nuk ka asnjë analog të dizajnit TJETER NESE, por ju mund të investoni një ZGJEDHJA në një tjetër, siç u bë në shembullin tonë.

Operatori ËSHTË NULL përdoret në dizajn ZGJEDHJA për të krahasuar një fushë pyetëse me tipin NULL.

Kërkesë. Teksti= "ZGJIDH
ZGJEDHJA
KUR VLERA ËSHTË NULL atherë 0
TJETËR Kuptimi
FUND"
;

Përveç kësaj, operatori ËSHTË NULL mund të përdoret në kushtet e pyetjes, të tilla si në një fjali KU.

Në konfigurimin e testit në regjistrin e dokumenteve, është e nevojshme të zbatohet numërimi i rreshtave në një listë dinamike. Ditari përfshin tre dokumente: "Aplikim", "Urdhër hyrëse" dhe "Urdhër dalëse". Fillimisht, forma e listës së regjistrave të dokumenteve duket kështu:

Në parim, problemi do të zgjidhej lehtësisht nëse do të merrnim një listë të dokumenteve në raport. Por këtu gjërat janë ndryshe.

Raportet nuk janë problem!

Duke krijuar një raport mbi një sistem të përbërjes së të dhënave me një listë dokumentesh, detyra do të zgjidhej shumë thjesht. Thjesht do t'ju duhet të shtoni një fushë të veçantë "Numri i sekuencës" në fushat e raportit.

Si rezultat, përdoruesi do të shohë një rezultat të ngjashëm të gjenerimit të raportit:

Por, çfarë nëse ju duhet të merrni numërimin direkt në kërkesë? Për shembull, kjo mund të jetë e nevojshme për të marrë numrin e sekuencës së një hyrjeje në një listë dinamike.

Numërimi në kërkesë

Le të ndryshojmë kërkesën për listën dinamike të regjistrave të dokumenteve si më poshtë:

"ZGJIDH | T . NumriNë Rendit,| T . Lidhje,| T . Data e,| T . Shënimi i fshirjes,| T . Numri,| T . Drejtuar| T . Lloji |NGA | (ZGJIDH" + // Merrni numrin e lidhjeve të bashkangjitura në fushën "NumberByOrder"." SASI (DIVERENT Journal of DocumentsJournal of Documents. Link) AS NumërNë Rendit, | Ditari i Dokumentit. Lidhja AS Link, | Ditari i Dokumentit. Data AS Data, | Ditari i Dokumentit. MarkDeletion AS MarkDeletion, | Ditari i Dokumentit. Numri AS Numër, | Ditari i Dokumentit. E kryer AS U kryer, | Ditari i Dokumentit. Lloji AS Lloji | NGA | Ditari i Dokumentit. Ditari i Dokumentit AS Ditari i Dokumentit | LEFT JOINDocumentJournal. Ditari i Dokumentit AS Ditari i Dokumentit Ditari i Dokumentit" + // Lidhni tabelën e regjistrit të dokumenteve me vetveten përmes një lidhjeje dokumenti. Numri i lidhjeve // lidhjet janë numri serial " Softueri i Ditarit të Dokumentit. Link > = DocumentJournalDocumentJournal. Link / | | GRUP NGA | Ditari i Dokumentit. Lidhje, | Ditari i Dokumentit. Data e, | Ditari i Dokumentit. Shënimi i fshirjes, | Ditari i Dokumentit. Numri, | Ditari i Dokumentit. Drejtuar | Ditari i Dokumentit. Lloji) AS T"

Kur hapim një listë dinamike në modalitetin 1C: Enterprise, marrim rezultatin e mëposhtëm:

Shënim: shembulli tregon vetëm parimin e numërimit të rreshtave direkt në kërkesë. Nëse e keni vënë re, në pamjen e ekranit sipër dokumenteve në listë, të renditura sipas numrit të linjës, "shko" sipas rendit të llojit (në fillim porositë hyrëse, pastaj urdhrat dalëse, etj.). Kjo ndodh sepse kur përdorni një lidhje për t'u lidhur, ne nuk mund të garantojmë që GUID-të e lidhjeve do të jenë unike. Gjithashtu, nuk mund të krahasoni lidhjet e llojeve të ndryshme të dokumenteve - kjo do të çojë në rezultate të pasakta fusha të tjera që përcaktojnë vendndodhjen specifike të dokumentit nga lista e përgjithshme e revistës.

Sigurisht, duke përdorur një qasje të tillë, ne do ta komplikonim pyetjen në bazën e të dhënave, plus, disa veçori të listës dinamike që janë të rëndësishme për punën e përdoruesit do të bëheshin të padisponueshme (leximi dinamik i të dhënave, tabela kryesore, etj.), por shembulli u krijua vetëm për të demonstruar aftësinë për të numëruar rreshta në pyetje. Duke përdorur këtë parim për të zgjidhur probleme të tjera, për shembull për printimin e formularëve, probleme të tilla nuk do të lindin.

Kini parasysh se përdorimi i një tabele dokumenti ose tabela e historisë së dokumenteve në mënyrë të përsëritur mund të ketë një ndikim negativ në performancën. Zgjidhja optimale do të ishte krijimi i një tabele të përkohshme të të gjitha dokumenteve të përzgjedhura dhe më pas puna me të. Përsëri, gjithçka varet nga detyra specifike!


Fjalët kyçe: numërimi i linjave të pyetjeve, FIRST, numërimi i rreshtave në ndërtues, numri

Ndonjëherë ka nevojë për të shtuar një kolonë me numra rreshtash në një pyetje, për shembull, kur ju duhet të shfaqni numrat e rreshtave në një raport dhe jeni duke përdorur ndërtuesin e raporteve. Numërimi i rreshtave është gjithashtu i dobishëm kur është e nevojshme të shfaqet një numër i kufizuar linjash të dhënash për grupime të caktuara. Diçka si 5 dokumentet e PARË për secilën palë.

Pra, ekziston një kod që zgjedh artikujt, të renditur sipas emrit:
ZGJIDHNI
Nomenklatura.Lidhja
NGA

NDAJ SIPAS
Nomenklatura.Emri
kërkesë origjinale

Këtu duhet të shtoni një kolonë me numrat serialë të artikullit (brenda kornizës së këtij klasifikimi).
ZGJIDHNI

NGA
Drejtoria.Nomenklatura AS Nomenklatura
Softueri Nomenclature.Name >= Nomenclature_1.Emri // Kushti i renditjes për numërimin

NDAJ SIPAS
Nomenklatura.Emri
pyetje me numra rreshtash

Ne e lidhim tabelën me vetveten në një mënyrë mjaft të zgjuar. Duke përdorur tabelën e djathtë, ne numërojmë numrin e artikujve me një emër më të vogël se ai aktual në të majtë, duke përdorur grupimin.

Një teknikë e ngjashme mund të përdoret nëse duhet të specifikoni numërimin e rreshtave duke marrë parasysh grupimin sipas disa fushave.
ZGJIDHNI
Nomenklatura.Lidhja AS Nomenklatura,
Nomenklatura.Parent AS Prind,
QUANTITY(Nomenklatura_1.Lidhja) AS Numër
NGA
Drejtoria.Nomenklatura AS Nomenklatura
Drejtoria e BASHKIMIT INNER.Nomenklatura AS Nomenklature_1
Nomenklatura.Emri i softuerit >= Nomenklatura_1.Emri
Dhe Nomenclature.Parent = Nomenclature_1.Parent

GRUP NGA
Nomenklatura.Prindër,
Nomenklatura.Lidhja
pyetje me numra rreshtash brenda një grupimi

Kjo është e njëjta kërkesë, thjesht ka një grupim të shtuar nga fusha "Prind", numërimi është i ndryshëm për secilin prind.

Performanca:
Nëse flasim për performancën, atëherë pyetjet e këtij lloji janë natyrisht intensive me burime (matematikisht false në rendin e N^2). Për shumicën e detyrave të përditshme përdorimi i tyre është mjaft i pranueshëm.
Nga rruga, pyetja e dytë ekzekutohet disi më shpejt se e para, kjo është për shkak të madhësisë më të vogël të tabelave ndihmëse.

Shembull i përdorimit real:
Tani pak përse po bëhet e gjithë kjo, pra përfitimi që mund të nxirret nga numërimi i vargjeve të pyetjeve.

Për shembull, ne përballemi me detyrën që të marrim për secilën palë pesë dokumentet e fundit të marrjes së mallrave dhe shërbimeve:
ZGJIDHNI
Pranimi i Mallrave dhe Shërbimeve Kundërparti AS,
Marrja e Mallrave dhe Shërbimeve Link AS,
SASIA(Marrja e Mallrave dhe Shërbimeve_1.Lidhja) Numri AS
NGA
Dokumenti Pranimi i Mallrave dhe Shërbimeve SI Marrja e Mallrave dhe Shërbimeve
Dokumenti INTERNAL JOIN Pranimi i Mallrave dhe Shërbimeve SI Marrja e Mallrave dhe Shërbimeve_1
Data e pranimit të mallrave dhe shërbimeve<= ПоступлениеТоваровУслуг_1.Дата
Dhe Pranimi i Mallrave dhe Shërbimeve = Kundërpalë

GRUP NGA
Lidhja e pranimit të mallrave dhe shërbimeve,
Marrja e mallrave dhe shërbimeve

DUKE
QUANTITY (Marrja e mallrave dhe shërbimeve_1. Lidhje)<= 5

NDAJ SIPAS
Kundërpartia,
Numri
një kërkesë me numra rreshtash nëse ka dublikatë të fushës së interesit (ajo në lidhje me të cilën po ndërtohet sporteli)
ZGJIDHNI
QUANTITY (Individë_1. Emri) AS numër,
Individët Lidhni SI EMRI I PLOTË
NGA
Drejtoria.Individët AS Individë
Drejtoria e BASHKIMIT TË BRENDSHËM.Individët AS Individë_1
Software (Individuals.Name + Individuals.Code >= Individuals_1.Name + Individuals_1.Code)

NDAJ SIPAS
Numri
Në fakt, ideja është kjo: përdorni një "fushë të përbërë" për të marrë një total në rritje (në këtë rast, një fushë mund të përmbajë dublikatë, por e dyta në këtë shembull jo.)
Lindur në kokën e NEKRON