Krijimi dhe puna me kërkesat (për fillestarët). Krijimi dhe puna me kërkesat (për fillestarët) 1s 8.3 nëse është në një kërkesë

Programimi 1C përbëhet nga më shumë sesa thjesht shkrimi i një programi. 1C është një shufër e veprimeve dhe të dhënave të përdoruesit me të cilat ai punon.

Të dhënat ruhen në një bazë të dhënash. Pyetjet 1C janë një mënyrë për të tërhequr të dhënat nga një bazë të dhënash në mënyrë që t'i tregohen përdoruesit në një formë ose për t'i përpunuar ato.

Pjesa themelore e raportit është kërkesa 1C. Në rastin e një raporti, ACS është pjesa më e madhe e raportit.

Uluni. Merr frymë. Qetësohu. Tani do t'ju tregoj lajmin.

Për të programuar në 1C, nuk mjafton të njohësh gjuhën e programimit 1C. Ju gjithashtu duhet të dini gjuhën e pyetjes 1C.

Gjuha e pyetjeve 1C është një gjuhë krejtësisht e veçantë që na lejon të specifikojmë se çfarë të dhënash duhet të marrim nga baza e të dhënave.

Ai është gjithashtu dygjuhësh - domethënë, ju mund të shkruani në rusisht ose anglisht. Është jashtëzakonisht e ngjashme me gjuhën e pyetjeve SQL dhe ata që e njohin mund të pushojnë.

Si përdoren kërkesat 1C

Kur një përdorues lëshon 1C në modalitetin Enterprise, nuk ka asnjë gram të vetëm të të dhënave në klientin që funksionon. Prandaj, kur duhet të hapni një drejtori, 1C kërkon të dhëna nga baza e të dhënave, domethënë bën një kërkesë 1C.

Pyetjet 1C janë:

  • Pyetje automatike 1C
    Gjenerohet automatikisht nga sistemi. Ju keni krijuar një formular të listës së dokumenteve. U shtua një kolonë. Kjo do të thotë që kur hapni këtë formular në modalitetin e ndërmarrjes, do të ketë një pyetje dhe do të kërkohen të dhënat për këtë kolonë.
  • Pyetje gjysmë automatike 1C
    Ka shumë metoda (funksione) në gjuhën 1C, kur aksesohet, bëhet një pyetje në bazën e të dhënave. Për shembull.GetObject()
  • Pyetje manuale 1C (të shkruara nga programuesi posaçërisht si pyetje)
    Ju mund të shkruani një kërkesë 1C vetë në kod dhe ta ekzekutoni atë.

Krijimi dhe ekzekutimi i pyetjeve 1C

Një kërkesë 1C është teksti aktual i kërkesës në gjuhën e kërkesës 1C.
Teksti mund të shkruhet me stilolapsa. Domethënë, merre dhe shkruaje (nëse e di këtë gjuhë).

Meqenëse 1C promovon konceptin e programimit vizual, ku shumë ose pothuajse gjithçka mund të bëhet pa shkruar kod me dorë, ekziston një objekt i veçantë Query Constructor që ju lejon të vizatoni tekstin e një pyetjeje pa e ditur gjuhën e pyetjes. Sidoqoftë, mrekullitë nuk ndodhin - për këtë ju duhet të dini se si të punoni me konstruktorin.

Pasi teksti i kërkesës 1C të jetë gati, ai duhet të ekzekutohet. Për këtë qëllim ekziston një objekt në kodin 1C Request(). Ja një shembull:

Kërkesë = Kërkesë e re();
Query.Text = "ZGJEDH
| Nomenklatura.Lidhja
|NGA
| Drejtoria.Nomenklatura AS Nomenklatura
| KU
| Nomenklatura.Shërbimi";
Zgjidh = Query.Run().Select();

Raporti(Përzgjedhja.Lidhja);
Cikli i Fundit;

Siç mund ta shihni në shembull, pas ekzekutimit të kërkesës 1C, rezultati na vjen dhe ne duhet ta përpunojmë atë. Rezultati është një ose disa rreshta të tabelës (në një formë të veçantë).

Rezultati mund të ngarkohet në një tabelë të rregullt:
Fetch = Query.Run().Shkarko(); //Rezultati – tabela e vlerave

Ose thjesht shkoni rrotull rresht pas rreshti.
Zgjidh = Query.Run().Select();
Ndërsa Select.Next() Loop
//Bëni diçka me rezultatet e pyetjes
Cikli i Fundit;

Puna me kërkesat 1C

Parimet themelore të pyetjeve 1C

Parimet themelore të ndërtimit të një kërkese 1C -
ZGJIDH listën e fushave NGA Titulli i tabelës WHERE Kushtet

Një shembull i ndërtimit të një kërkese të tillë 1C:

ZGJIDHNI
//lista e fushave për të zgjedhur
Lidhje,
Emri,
Kodi
NGA
//emri i tabelës nga e cila zgjedhim të dhënat
//lista e tabelave është një listë e objekteve në dritaren e konfiguruesit
Drejtoria.Nomenklatura
KU
//trego përzgjedhjen
Lloji i produktit = &Shërbimi //zgjedhja sipas vlerës së jashtme
Ose Shërbimi // Atributi "Shërbimi" i llojit Boolean, përzgjedhja sipas vlerës True
NDAJ SIPAS
//Renditja
Emri

Lista e tabelave 1C

Ju mund të shihni emrat e tabelave në dritaren e konfiguruesit. Thjesht duhet të shkruani "Directory" në vend të "Directories", për shembull "Directory.Nomenklature" ose "Document.Sales of Mallra and Services" ose "Register of Acumulation.Sales".

Ka tabela shtesë (virtuale) për regjistra që ju lejojnë të merrni numrat përfundimtarë.

Regjistri i informacionit.Emri i regjistrimit.Feta e fundit(&Data) – Kërkesë 1C nga regjistri i informacionit, nëse është periodik, për një datë specifike

Regjistri i Akumulimit. Emri i Regjistrit. Balancat(&Data) – Kërkesë 1C nga regjistri i bilanceve për një datë specifike

Regjistri i Akumulimit. Emri i Regjistrit. Qarkullimi (&Data e Fillimit, &Data e Përfundimit) – Kërkesë 1C nga regjistri i qarkullimit për periudhën nga data e fillimit deri në datën e përfundimit.

Parime shtesë

Kur kërkojmë një listë të disa të dhënave, parimet bazë funksionojnë. Por ne gjithashtu mund të kërkojmë numra dhe kërkesa mund t'i numërojë ato për ne (për shembull, t'i shtojmë).

ZGJIDHNI
//Sasia(FieldName) – numëron sasinë
//Fusha AS OtherName – riemëron fushën
Sasia (Lidhja) AS Sasia e Dokumenteve të Postuara
NGA

KU
Drejtuar

Kjo kërkesë 1C do të na kthejë numrin total të dokumenteve. Sidoqoftë, çdo dokument ka një fushë Organizimi. Le të themi se duam të numërojmë numrin e dokumenteve për secilën organizatë duke përdorur një pyetje 1C.

ZGJIDHNI
//vetëm një fushë dokumenti
Organizimi,
//numëro sasinë
Sasia(Lidhja) AS Sasia Sipas organizatave
NGA
Shitjet e mallrave dhe shërbimeve
KU
Drejtuar
GRUP NGA

Organizimi

Kjo kërkesë 1C do të na kthejë numrin e dokumenteve për secilën organizatë (të quajtur edhe "nga organizata").

Le të llogarisim gjithashtu sasinë e këtyre dokumenteve duke përdorur një kërkesë 1C:

ZGJIDHNI
//vetëm një fushë dokumenti
Organizimi,
//numëro sasinë

//llogaritni shumën

NGA
Shitjet e mallrave dhe shërbimeve
KU
Drejtuar
GRUP NGA
//duhet të përdoret nëse lista e fushave ka një funksion count() dhe një ose më shumë fusha në të njëjtën kohë - atëherë duhet të gruponi sipas këtyre fushave
Organizimi

Kjo kërkesë 1C do të na kthejë gjithashtu shumën e dokumenteve.

ZGJIDHNI
//vetëm një fushë dokumenti
Organizimi,
//numëro sasinë
Sasia (Lidhja) AS Sasi Sipas organizatave,
//llogaritni shumën
Shuma (DokumentiShuma) AS Shuma
NGA
Shitjet e mallrave dhe shërbimeve
KU
Drejtuar
GRUP NGA
//duhet të përdoret nëse lista e fushave ka një funksion count() dhe një ose më shumë fusha në të njëjtën kohë - atëherë duhet të gruponi sipas këtyre fushave
Organizimi
REZULTATET PO Të përgjithshme

Gjuha e pyetjeve 1C është e gjerë dhe komplekse, dhe ne nuk do t'i shqyrtojmë të gjitha aftësitë e saj në një mësim - lexoni mësimet tona të ardhshme.

Shkurtimisht në lidhje me veçoritë shtesë të gjuhës së pyetjeve 1C:

  • Bashkimi i të dhënave nga tabela të shumta
  • Pyetjet e mbivendosura
  • Kërkesa për grupe
  • Krijimi i tabelave tuaja virtuale
  • Pyetje nga tabela e vlerave
  • Përdorimi i funksioneve të integruara për marrjen dhe manipulimin e vlerave.

Ndërtuesi i pyetjeve 1C

Për të mos shkruar tekstin e kërkesës me dorë, ekziston një projektues i kërkesës 1C. Thjesht klikoni me të djathtën kudo në modul dhe zgjidhni 1C Query Designer.

Zgjidhni tabelën e dëshiruar në të majtë në projektuesin e pyetjeve 1C dhe tërhiqeni atë në të djathtë.

Zgjidhni fushat e kërkuara nga tabela në projektuesin e pyetjeve 1C dhe tërhiqeni djathtas. Nëse dëshironi që jo vetëm të zgjidhni një fushë, por të aplikoni një lloj funksioni përmbledhës në të, pasi ta zvarritni, klikoni në fushë dy herë me miun. Në skedën "Grupimi", më pas do t'ju duhet të zgjidhni (tërhiqni) fushat e kërkuara për grupim.

Në skedën Kushtet në projektuesin e pyetjeve 1C, mund të zgjidhni zgjedhjet e nevojshme në të njëjtën mënyrë (duke zvarritur fushat me të cilat do të bëni zgjedhjen). Sigurohuni që të zgjidhni gjendjen e duhur.

Në skedën Rendit, tregohet renditja. Në skedën Rezultatet - përmbledhja e rezultateve.

Duke përdorur projektuesin e pyetjeve 1C, mund të studioni çdo pyetje ekzistuese. Për ta bërë këtë, klikoni me të djathtën mbi tekstin e një kërkese ekzistuese dhe gjithashtu zgjidhni projektuesin e pyetjeve 1C - dhe kërkesa do të hapet në projektuesin e pyetjeve 1C.

Gjuha e pyetjeve 1C 8 është një mjet i domosdoshëm për një programues 1C; ju lejon të shkruani kode më koncize, të thjeshtë, të kuptueshme dhe të përdorni më pak burime të sistemit kur punoni me të dhëna. Ky artikull hap një seri mësimesh kushtuar gjuhës së pyetjeve 1C 8. Në mësimin e parë do të shikojmë strukturën e operatorit kryesor të kësaj gjuhe - ZGJIDHNI. Duke përdorur këtë operator, ju mund të krijoni zgjedhje nga tabelat e bazës së të dhënave. Të dhënat e përzgjedhura të tabelës mund të renditen, kushtet të vendosen në të, të lidhen dhe të kombinohen me të dhëna nga tabela të tjera, të grupuara sipas fushave të ndryshme dhe shumë më tepër.

Gjuha e pyetjes 1C ndërmarrje 8 - Struktura e operatorit SELECT

Le të shohim strukturën e operatorit SELECT (pjesë opsionale të operatorit tregohen në kllapa katrore). Gjuha e pyetjeve 1C ofron një gamë të gjerë mjetesh për krijimin e mostrave të të dhënave.

ZGJIDH [LEJOHET] [DIFERENT] [FIRST A] [Field1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Tabela1 AS AliasTableTable1 [[BENDE JOIN ][LEFT JOIN][FULL JOIN] Tabela2 AS Pseudonim Tabela 2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS pseudonim TabelatC BY Expression1 [Dhe Expression2]...[Dhe ExpressionD]] .. ... SIPAS Shprehjes1 [Dhe Shprehja2]...[Dhe ShprehjaE]] ... [TableF AS TableF alias] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [AND Shprehja2] ... [DHE ShprehjaH]] [BASHKONI TË GJITHA...] [; ...] [INDEKSI NGA pseudonimi1 ... AliasB] [TOTALS [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] NGA [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Fjalë kyçe dhe blloqe për të punuar me fusha

  • ZGJIDHNI— një fjalë kyçe që tregon fillimin e operatorit;
  • LEJOHET tregon se zgjedhja duhet të përfshijë të dhënat e tabelës që kanë akses për lexim për përdoruesin e caktuar;
  • TË NDRYSHME tregon se kampioni duhet të përfshijë vetëm flukse të ndryshme (në të gjitha fushat). Me fjalë të tjera, rreshtat e kopjuar do të përjashtohen nga kampioni;
  • E PARA A nëse specifikoni këtë fjalë kyçe, atëherë vetëm A-ja e parë e rreshtave të zgjedhur nga pyetësori do të përfshihet në përzgjedhje, ku A është një numër natyror;
  • Blloku i fushës— ky bllok tregon fushat që duhet të përfshihen në përzgjedhje. Këto fusha do të jenë kolona të zgjedhura. Në rastin më të thjeshtë, fusha duket si kjo: Table Alias.TableFieldName AS Field Alias

    Në këtë mënyrë tregojmë se nga cila tabelë po e marrim këtë fushë. Gjuha e pyetjeve 1C ju lejon të specifikoni ndonjë pseudonim, por ato nuk duhet të përsëriten në të njëjtën deklaratë SELECT. Një fushë mund të jetë më komplekse, e përbërë nga kombinime të ndryshme të fushave të tabelës, funksioneve të gjuhës së pyetjes dhe funksioneve të përgjithshme, por ne nuk do t'i mbulojmë ato raste në këtë tutorial;

Fjalë kyçe dhe blloqe për të punuar me tabela

  • PUT Emri i përkohshëm i tabelës- fjalë kyçe VENDI synohet të krijojë një tabelë të përkohshme me një emër specifik, i cili do të ruhet në RAM në një sesion të caktuar 1C 8 derisa të përfundojë ose derisa tabela e përkohshme të shkatërrohet. Duhet të theksohet se emrat e tabelave të përkohshme në një seancë 1C 8 nuk duhet të përsëriten;
  • Blloku i tabelave dhe marrëdhënieve— blloku tregon të gjitha tabelat e përdorura në këtë pyetje, si dhe marrëdhëniet ndërmjet tyre. Blloku fillon me një fjalë kyçe NGA, e ndjekur nga emri dhe pseudonimi i tabelës së parë. Nëse kjo tabelë lidhet me tabela të tjera, atëherë tregohen marrëdhëniet. Gjuha e pyetjeve 1C përmban grupin e mëposhtëm të llojeve të lidhjeve:
    • BASHKIMI I BRENDSHËM— një rekord nga tabela e majtë do të përfshihet në përzgjedhje vetëm nëse plotësohet kushti i lidhjes, një rekord nga tabela e djathtë do të përfshihet në përzgjedhje vetëm nëse plotësohet kushti i lidhjes;
    • LIDHJA E MIRË— një rekord nga tabela e majtë do të përfshihet në përzgjedhje në çdo rast, një rekord nga tabela e djathtë do të përfshihet në përzgjedhje vetëm nëse plotësohet kushti i lidhjes;
    • LIDHJE E PLOTË- një rekord nga tabela e majtë do të përfshihet së pari në përzgjedhje në çdo rast, pastaj vetëm nëse plotësohet kushti i lidhjes, një rekord nga tabela e djathtë do të përfshihet së pari në përzgjedhje në çdo rast, pastaj vetëm nëse kushti i lidhjes plotësohet. Në këtë rast, rreshtat e kopjuar që rezultojnë përjashtohen nga kampioni.

    Pas llojit të lidhjes, tregohet emri dhe pseudonimi i tabelës së dytë. Më pas vjen fjala kyçe NGA, të ndjekura nga kushtet e komunikimit të lidhura me njëri-tjetrin nga operatorët logjikë DHE, OSE.Çdo shprehje në kusht duhet të kthejë një vlerë Boolean (True, False). Nëse tabela e parë është e lidhur me disa tabela të tjera nga e dyta, atëherë tregohet përsëri lloji i lidhjes, e kështu me radhë. Secila nga tabelat që marrin pjesë në lidhje, nga ana tjetër, mund të lidhet me tabela të tjera, kjo tregohet në diagramin e strukturës së pyetjes. Nëse tabela nuk ka lidhje me të parën, atëherë tregohet pa një lloj lidhjeje, atëherë lidhjet e saj mund të pasojnë, e kështu me radhë;

Fjalë kyçe dhe blloqe të konvertimit të të dhënave

  • Blloku i grupit— ky bllok përdoret për të grupuar rreshtat e tabelës. Rreshtat kombinohen në një nëse vlerat e fushave të specifikuara pas fjalës kyçe GRUP NGA rezultojnë të jenë të njëjta. Në këtë rast, të gjitha fushat e tjera përmblidhen, mesatarizohen, maksimizohen ose minimizohen duke përdorur funksionet agregate. Funksionet agregate përdoren në një bllok të fushës. Shembull: Maximum(TableAlias.TableFieldName) AS FieldAlias
  • Blloku i gjendjes- në këtë bllok pas fjalës kyçe KU tregohen shprehjet e kushtëzuara të ndara me operatorë logjikë DHE, OSE, në mënyrë që ndonjë nga rreshtat e zgjedhur të përfshihet në mostër, është e nevojshme që të gjitha kushtet në agregat të kenë një vlerë E vërtetë.
  • KOMBINON GJITHÇKA— kjo fjalë kyçe përdoret për të kombinuar pyetjet (operatorët ZGJIDH). Gjuha e pyetjeve 1C ju lejon të kombinoni disa pyetje në një. Në mënyrë që pyetjet të bashkohen, ato duhet të kenë të njëjtin grup fushash;
  • «;» - pikëpresje përdoren për të ndarë pohimet që janë të pavarura nga njëra-tjetra ZGJIDHJE;
  • INDEKSI NGA— fjala kyçe përdoret për të indeksuar fushat e specifikuara pas saj;
  • Blloku përmbledhës— përdoret për të ndërtuar mostra të ngjashme me pemët. Për secilën nga fushat e grupimit të specifikuara pas fjalës kyçe NGA, në përzgjedhje do të krijohet një rresht i veçantë. Në këtë rresht, duke përdorur funksionet agregate, do të llogariten vlerat totale të fushave të specifikuara pas fjalës kyçe. REZULTATET.

Dëshiron të vazhdosh të mësosh gjuhën e pyetjeve 1C 8? Pastaj lexoni artikullin vijues.

Kërkesë . Teksti = "ZGJIDH | Storage Units.Link |NGA | Directory.usStorageUnits SI të përdorëStorageUnits // Shembulli 1: krahasimi me një vlerë boolean të zbrazët: | KU | StorageUnits.AllowSelectionFromReserveZone = False // Shembulli 2. por nëse ky Boolean është i përcaktuar, atëherë është më mirë kështu: // kushti për një Boolean negativ: | KU | JO njësi ruajtjeje. Lejo zgjedhjen nga zona rezervë // Shembulli 3. përzgjedhja e bazuar në gjendjen e një fushe boshe që ka llojin "direktoria e një lloji specifik" | KU | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // Shembulli 3a. përzgjedhja e bazuar në gjendjen e një fushe boshe që ka llojin "dokument i një lloji specifik" | KU | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // Shembulli 3b. përzgjedhja e bazuar në gjendjen e një fushe boshe që ka llojin "dokumente të llojeve të ndryshme" ( fushë e përbërë) | KU | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | OSE OurInformationRegister.Document = VLERA(Document.OurDocument2.EmptyLink) | OSE... (etj. - ne renditim në mënyrë sekuenciale kushtet për të gjitha llojet e mundshme të kësaj fushe) ) // Shembulli 4. ose anasjelltas, nëse duhet të zgjidhni një vlerë të mbushur të llojit "string", atëherë kushti do të ndihmojë: |KU | Njësia e ruajtjes. Emri > """" // Shembulli 5. nëse keni nevojë të zgjidhni dokumente të një lloji specifik, me një lloj të dhënash të përbërë, për shembull, në regjistrin "RunningTasks", burimi "Task" ka një lloj të përbërë, midis vlerave të të cilit dokumenti "Përzgjedhja" është e mundur | KU | EXPRESS(Information RegisterExecutedTasks.Task AS Document.Selection) LINK Document.Selection // Shembulli 5a. Një shembull tjetër i ngjashëm kur duhet të zgjidhni dokumente të një lloji specifik | ZGJEDHJA | KUR TË SHPREHET (ag Korrespondenca e Dokumenteve. DocumentBU AS Document. Marrja e Mallrave dhe Shërbimeve) LINK Dokumenti. Pranimi i Mallrave dhe Shërbimeve | PASTAJ ""Marrja e Mallrave dhe Shërbimeve"" | KUR TË SHPREHET (ag Korrespondenca e Dokumenteve. DocumentBU AS Document. Shitjet e Mallrave dhe Shërbimeve) Dokumenti LINK. Shitjet e Mallrave dhe Shërbimeve | PASTAJ ""Shitjet e mallrave dhe shërbimeve"" | TJETER """" | FUND AS Pamje dokumenti // Shembulli 6. përzgjedhja sipas kushtit të një vlere të pacaktuar: | KU | SavedSettings.Përdoruesi = I PADAFINUAR // Shembulli 7. përzgjedhja sipas llojit të lëvizjes "Incoming" e regjistrit të akumulimit, "Shpenzime" - në mënyrë të ngjashme): | KU | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Shembulli 8. Si të tregoni në një kërkesë që nuk ka nevojë të ekzekutoni kërkesën (për shembull, ju duhet të ktheni në mënyrë programore, në varësi të disa kushteve, një rezultat të kërkesës bosh - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "KU ËSHTË GËNJESHTA");). Për ta bërë këtë, thjesht shtoni kushtin "Ku është e rreme". Nga rruga, pavarësisht nga vëllimi i të dhënave të kërkuara në mostër, një kërkesë e tillë do të ekzekutohet në çast. |KU ËSHTË GËNJESHTA // Shembulli 9. Kontrollimi që rezultati i pyetjes përmban të dhëna: Nese joKërkesë.Ekzekutoni().Bosh() Pastaj // Shembulli 10. përzgjedhja e bazuar në një datë boshe: | KU | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Në këtë artikull ne duam të diskutojmë gjithçka me ju Funksionet e gjuhës së pyetjeve 1C, dhe konstruktet e gjuhës pyetëse. Cili është ndryshimi midis funksionit dhe dizajnit? Funksioni thirret me kllapa dhe parametra të mundshëm në to, dhe konstrukti shkruhet pa kllapa. Pa dyshim të gjitha strukturat dhe funksionet e gjuhës së pyetjeve 1C e bëjnë procesin e marrjes së të dhënave fleksibël dhe shumëfunksional. Këto funksione dhe konstruksione zbatohen për fushat e kërkesave, dhe disa zbatohen gjithashtu për kushtet.

1C Funksionet e gjuhës së pyetjes

Sepse një përshkrim i qartë Funksionet e gjuhës së pyetjeve 1Cështë shumë më pak e zakonshme sesa përshkrimet e strukturave, vendosëm të fillojmë të shikojmë funksionet. Tani le të shohim secilën veç e veç, duke përshkruar qëllimin, sintaksën dhe shembullin e përdorimit, kështu:

1. Funksioni DATA KOHA- ky funksion krijon një fushë konstante me tipin "Date".

Sintaksë: DATA KOHA (<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Shembull përdorimi:

2. Funksioni DATE DIFFERENCE- kthen diferencën midis dy datave në një nga dimensionet (viti, muaji, ditë, orë, minutë, sekondë). Matja kalohet si parametër.

Sintaksë: NDRYSHIM(<Дата1>, <Дата2>, <Тип>)

Shembull përdorimi:

Query.Text = "ZGJIDH | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funksioni VALUE- vendos një fushë konstante me një rekord të paracaktuar nga baza e të dhënave; gjithashtu mund të merrni një lidhje boshe të çdo lloji.

Sintaksa: VALUE(<Имя>)

Shembull përdorimi:

Request.Text = "ZGJEDH //element të paracaktuar | VLERË(Direktori. Monedhat.Dollar) AS Dollar, //lidhje bosh | VLERË(Dokument. Pranimi i Mallrave dhe Shërbimeve. EmptyLink) SI Faturë, //Vlera e transferimit | VLERË(Transferim . Individ ligjor. Individual) AS Individual, //llogari e paracaktuar | VLERA(Skema e llogarive. Vetë-mbështetëse. Materialet) AS Llogaria_10" ;

4. Funksioni SELECT- ne kemi para nesh një analog të konstruksionit IF, i cili përdoret në kod, vetëm ky përdoret në pyetjet 1C.

Sintaksë: ZGJEDHJE KUR<Выражение>PASTAJ<Выражение>PER Ndryshe<Выражение>FUND

Shembull përdorimi:

Kërkesë.Text = //nëse shuma është më shumë se 7500, atëherë duhet të ketë një zbritje prej 300 rubla, //kështu që nëse kushti aktivizohet atëherë funksioni //kthehet Shuma - 300 //përndryshe kërkesa do të kthehet thjesht Shuma "ZGJIDH | ZGJIDH | KUR TCReceipts.Shuma > 7500 | PASTAJ TCReceipts.Shuma - 300 | TJETER TCReceipts.Shuma | FUND AS ShumaMe Zbritje |NGA | Dokumenti. Pranimi i MallraveShërbimet.TCReceipts.

5. Funksioni EXPRESS- ju lejon të shprehni një fushë konstante me një lloj specifik.

Sintaksë: EXPRESS (Emri i fushës AS Lloji Emri)

Shembull përdorimi:

Query.Text = "ZGJIDH TË NDRYSHME | Sales.Registrar.Number, | ZGJEDH | WHEN Sales.Regjistrues LINK Document.Consumable | TEN EXPRESS(Sales.Registrar AS Document.Consumable) | TJETER ZGJEDHJE | WHEN Sales.Registrar LINK Dokumentacioni | PASTAJ EXPRESS(Shitjet.Regjistruesi AS Dokument.Implementimi) | FUND | ... | FUND SI Numër | NGA | Regjistro Akumulimet. Blerjet AS Blerjet";

A ka një mundësi tjetër për përdorimin e funksionit EXPRESS në fushat e llojeve të përziera, ku ndodhin ato? Shembulli më i thjeshtë është "Regjistruesi" për çdo regjistër. Pra, pse mund të na duhet të kualifikojmë llojin në regjistrues? Le të shqyrtojmë situatën kur zgjedhim fushën "Numër" nga regjistruesi, nga cila tabelë do të zgjidhet numri? Përgjigja e saktë e të gjithëve! Prandaj, që pyetja jonë të funksionojë shpejt, duhet të specifikojmë një lloj të qartë duke përdorur funksionin EXPRESS

Shembull përdorimi:

Query.Text = "ZGJIDH | EXPRESS(Nomenklatura.Komenti AS Rreshti(300)) AS Koment, | EXPRESS(Nomenklatura.Shuma AS Numër(15,2)) AS Shuma |NGA | Drejtoria.Nomenklatura SI Nomenklaturë";

6. Funksioni ISNULL(drejtshkrimi alternativ ISNULL) - nëse fusha është e tipit NULL, atëherë ajo zëvendësohet me parametrin e dytë të funksionit.

Sintaksë: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Shembull përdorimi:

Gjithashtu vini re se është e këshillueshme që GJITHMONË të zëvendësohet lloji NULL me ndonjë vlerë, sepse krahasimi me tipin NULL kthen gjithmonë FALSE edhe nëse krahasoni NULL me NULL. Më shpesh, vlerat NULL formohen si rezultat i bashkimit të tabelave (të gjitha llojet e lidhjeve përveç atyre të brendshme).

Query.Text = //Zgjidh të gjithë artikullin dhe bilancet e tij //nëse nuk ka bilanc në ndonjë artikull, atëherë do të ketë një fushë //NULL e cila do të zëvendësohet me vlerën 0 "SELECT | Nr. Link, | ISNULL (ProduktetInStockRemains.InStockRemaining, 0) AS Remainder | NGA | Drejtoria.Nomenklatura AS Nr.

7. Funksioni PËRFAQËSIMI- ju lejon të merrni një paraqitje të fushës së kërkesës.

Sintaksë: PERFORMANCA (<НаименованиеПоля>)

Shembull përdorimi:

Query.text = "Zgjidhni | Përfaqësimi (freerEmainingRemains.NomenCLature) si nomenklatura, | Përfaqësimi (freerEmainingRemaining.warehouse) si depo, | freerEmainingRemaining.InstockRemaining | Nga | Regjistri i Akumulimit.freeremaing.Remaining si freerEmainingRemening";

Ndërton në gjuhën e pyetjeve 1C

Ne diskutuam me ju më lart Funksionet e gjuhës së pyetjeve 1C, tani është koha për të marrë në konsideratë ndërton në gjuhën e pyetjeve 1C, ato nuk janë më pak të rëndësishme dhe të dobishme, le të fillojmë.

1. LINK për ndërtim- është një operator logjik për kontrollimin e një lloji referimi. Më shpesh haset kur kontrolloni një fushë të një lloji kompleks kundrejt një lloji specifik. Sintaksë: LIDHJE<Имя таблицы>

Shembull përdorimi:

Kërkesë.Text = //nëse lloji i vlerës së regjistruesit është Dokumenti Marrja, //atëherë pyetësori do të kthejë "Pranimin e mallrave", përndryshe "Shitjet e mallrave" "ZGJEDH | ZGJIDH | KUR të mbeten. Regjistruesi LINK Dokumenti. Pranimi i Mallrave dhe Shërbimet | MË POSHTË ""Faturim" | TJETER ""Konsum" | FUND SI Lloji i Lëvizjes | NGA | Regjistri i akumulimit. Produktet e mbetura në magazina AS Mbetet" ;

2. Dizajni MES- ky operator kontrollon nëse vlera është brenda intervalit të caktuar.

Sintaksë: NDËRMJET<Выражение>DHE<Выражение>

Shembull përdorimi:

Kërkesë.Text = //merr të gjithë nomenklaturën, kodi i së cilës është në intervalin nga 1 deri në 100 "ZGJEDHJE | Nomenklatura.Lidhja |FROM | Drejtoria.Nomenklatura AS Nomenklaturë | WHERE | Nomenklatura.Kodi MES 1 DHE 100" ;

3. Ndërtimi B dhe B HIERARKI- kontrolloni nëse vlera është në listën e transferuar (vargjet, tabelat e vlerave, etj. mund të transferohen si listë). Operatori IN HIERARCHY ju lejon të shikoni hierarkinë (një shembull i përdorimit të Grafikut të Llogarive).

Sintaksë: NË(<СписокЗначений>), NË HIERARKI (<СписокЗначений>)

Shembull përdorimi:

Kërkesë.Tekst = //zgjidh të gjitha nënllogaritë e llogarisë "ZGJIDH | Vetë-mbështetës. Lidh AS Llogari | NGA | Grafik i llogarive. Vetë-mbështetës AS Vetëmbështetës | KU | Vetëmbështetës. Lidhja NË VLERËN E HIERARKISË (Grafik i Llogaritë. Vetëmbështetëse. Mallrat)";

4. Dizajni I ngjashem- Ky funksion na lejon të krahasojmë një varg me një model vargu.

Sintaksë: LIKE "<ТекстШаблона>"

Opsionet e modelit të rreshtit:

% - një sekuencë që përmban çdo numër karakteresh arbitrare.

Një personazh arbitrar.

[...] - çdo karakter i vetëm ose sekuencë karakteresh të listuara brenda kllapave katrore. Numërimi mund të specifikojë vargjet, për shembull a-z, që do të thotë një karakter arbitrar i përfshirë në interval, duke përfshirë skajet e diapazonit.

[^...] - çdo karakter i vetëm ose sekuencë karakteresh të listuara brenda kllapave katrore, përveç atyre të listuara pas shenjës së mohimit.

Shembull përdorimi:

Pyetje.Teksti = //gjeni të gjithë nomenklaturën që përmban rrënjën TABUR dhe fillon //ose me një shkronjë të vogël ose të madhe t "ZGJEDHJE | Nomenklatura. Lidhje | NGA | Drejtoria. Nomenklatura AS Nomenklaturë | WHERE | Produkte. Emri LIKE "" [Tt ]abur%""" ;

5. Dizajni LEJOHET- ky operator ju lejon të zgjidhni vetëm ato regjistrime nga baza e të dhënave për të cilat thirrësi ka leje leximi. Këto të drejta janë konfiguruar në nivelin e regjistrimit (RLS).

Sintaksë: LEJOHET shkruhet pas fjalës kyç SELECT

Shembull përdorimi:

Request.Text = "ZGJIDHET E LEJUARA | Kundërpalët. Lidhje | NGA | Drejtoria. Kundërpalët AS Kundërpalët";

6. Dizajni I NDRYSHEM- ju lejon të zgjidhni regjistrime në të cilat nuk ka regjistrime të kopjuara.

Sintaksë: NDRYSHME shkruhet pas fjalës kyç SELECT

Shembull përdorimi:

Request.Text = //zgjedh regjistrimet për të cilat lexuesi ka të drejta "ZGJEDHJE TË NDRYSHME | Kundërpalët. Emri | NGA | Drejtoria. Kundërpalët AS Kundërpalët" ;

Gjithashtu, ndërtimi i NDRYSHËM mund të përdoret me operatorin LEJUAR dhe operatorë të tjerë.

Shembull përdorimi:

Request.Text = //zgjedh rekorde të ndryshme për të cilat lexuesi ka të drejta "ZGJIDHNI TË LEJUARA TË NDRYSHME | Kundërpalët. Emri | NGA | Drejtoria. Kundërpalët AS Kundërpalët";

7. Dizajni i PARË- zgjedh numrin e rekordeve të specifikuara në parametër nga rezultati i pyetjes.

Sintaksa: E PARA<число>

Shembull përdorimi:

Kërkesë.Text = //zgjidhni 4 numrat e parë CCD nga direktoria "SELECT FIRST 4 | Numrat CCD. Lidhja | NGA | Drejtoria. Numrat CCD AS Numrat CCD";

8. Dizajni PËR NDRYSHIM- ju lejon të kyçni një tabelë, funksionon vetëm në transaksione (e rëndësishme vetëm për bravat automatike).

Sintaksë: PËR NDRYSHIM<НаименованиеТаблицы>

Shembull përdorimi:

Query.Text = "ZGJIDH | Mbetjet e lira. Nomenklatura, | Mbetjet e lira. Magazina, | Mbetjet e lira. Mbeten në magazinë | NGA | Regjistri i akumulimeve. Mbetjet e lira. Mbetjet AS Mbetjet e lira Regjistrimi i akumulimit | PËR NDRYSHIM | Mbetjet e lira. Mbetjet";

9. Dizajni me porosi- organizon të dhënat sipas një fushe të caktuar. Nëse fusha është një lidhje, atëherë kur vendosni flamurin AUTO POROSI Renditja do të ndodhë sipas paraqitjes së lidhjes; nëse flamuri është i fikur, atëherë lidhjet renditen sipas vjetërsisë së adresës së lidhjes në memorie.

Sintaksë: NDAJ SIPAS<НаименованиеПоля>AUTO POROSI

Shembull përdorimi:

Query.Text = "ZGJIDH | Mbetjet e lira. Nomenklatura AS Nomenklaturë, | Mbetjet e lira. Mbetjet AS Magazine, | Mbetjet e lira. Në magazinë të mbetura | NGA | Regjistro akumulimet. Mbetjet e lira. Mbetjet AS të mbetura të lira BORDERY | | Nomenklatura | RIKURTIMI AUTO ORDER";

10. Dizajn GRUPI NGA- përdoret për të grupuar vargjet e pyetjeve sipas fushave specifike. Fushat numerike duhet të përdoren me çdo funksion agregat.

Sintaksë: GRUP NGA<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Shembull përdorimi:

Query.Text = "ZGJIDH | ProdukteNë magazinat.Nomenklatura AS Nomenklaturë, | ProdukteNë Magazina.Depo, | SUM(MallratNë magazina.Në magazinë) SI DOBËZË |NGA | Regjistro akumulimet.ProduktetNë magazina AS ProdukteNë magazina AS ProdukteNë magazina. s.Depo" ;

11. Design HAVING- ju lejon të aplikoni një funksion agregat në një kusht të përzgjedhjes së të dhënave, të ngjashme me ndërtimin WHERE.

Sintaksë: DUKE<агрегатная функция с условием>

Shembull përdorimi:

Query.Text = //zgjedh rekorde të grupuara ku fusha InStock është më e madhe se 3 "ZGJIDH | ItemsInStocks.Nomenklatura AS Nomenklaturë, | ItemsInStocks.Magazina, | SUM(ItemsInStocks.InStock) AS INSTOCK GRUPI SIPAS | ProduktetNë magazina.Nomenklatura, | ProduktetNë magazina.Magazina | |E DISPONUESHME | SHUMA(ProduktetNë magazina.Në magazinë) > 3" ;

12. Ndërtimi INDEKSI NGA- përdoret për indeksimin e fushës së pyetjes. Një pyetje me indeksim kërkon më shumë kohë për t'u përfunduar, por shpejton kërkimin nëpër fushat e indeksuara. Mund të përdoret vetëm në tabela virtuale.

Sintaksë: INDEKSI NGA<Поле1, ... , ПолеN>

Shembull përdorimi:

Query.Text = "ZGJIDH | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | VEND të DhënatT | FROM | &Ts AS Ts | | INDEKSI NGA | Ts.NameOS, | Ts .CodeOS";

13. Dizajn KU- ju lejon të vendosni një kusht në çdo fushë përzgjedhjeje. Rezultati do të përfshijë vetëm regjistrime që plotësojnë kushtin.

Sintaksë: KU<Условие1 ОператорЛогСоединения УсловиеN>

Shembull përdorimi:

Query.Text = //zgjidhen të gjitha rekordet me CompensationRemaining<>0 dhe //ShumaPërKombinimin e Mbetur > 100 "ZGJIDH | KompensimiRPOREmbetet.Kontraparti, |KompensimiRPPermbetjet.Fëmija, | KompensimiRPËmbetjet. KompensimiRPËmbetjet, | KompensimiRPOE mbetura.ShumaPër KompensiminRPOEmbetjet.ShumaPër KompensiminRPOE mbetët.ShumaPër KompensiminRPOEmbetjet.ShumaPër KompensiminRPOEmbetjet.ShumaPër KompensiminRPOEmbetjet.ShumaPër KompensiminRPOEmbetet. ensationRPOstat ki |KU | KompensimiRPPOE mbetur. Kompensimi i mbetur<>0 | Dhe CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. REZULTATET E projektimit... TË PËRGJITHSHME- përdoret për të llogaritur totalet; dizajni specifikon fushat me të cilat do të llogariten totalet dhe do të aplikohen funksionet agregate në fushat totale. Kur përdorni totalet për secilën fushë pas ndërtimit TOTAL, të dhënat grupohen. Ekziston një konstrukt opsional i PËRGJITHSHËM; përdorimi i tij siguron gjithashtu grupim shtesë. Ju do të shihni një shembull të rezultatit të kërkesës më poshtë.

Sintaksë: REZULTATET<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>NGA<ОБЩИЕ> <Поле1, ... , ПолеN>

Shembull përdorimi:

Kërkesë.Text = "ZGJIDH | Llogaritjet. Marrëveshja e kundërpalës. Lloji i marrëveshjes SI Lloji i kontratës, | Llogaritjet. Marrëveshja e kundërpalës AS Kontratë, | Llogaritjet. Kundërpala, | Llogaritjet. Shuma e bilancit të shlyerjes së ndërsjellë SI Bilanci | NGA | Regjistri i akumulimeve. reciproke Shlyerje ME Kundërpalët. Gjendjet SI Llogaritje | TOTALI | SHUMË (Balanca) | Softuer | E PËRGJITHSHME, | Lloji i Marrëveshjes";

Figura përshkruan grupimet që u formuan gjatë ekzekutimit të kërkesës, pjesa e sipërme i referohet seksionit TË PËRGJITHSHËM dhe e dyta në fushën Lloji i marrëveshjes së marrëveshjes së palës.

Në këtë artikull do të shqyrtojmë temën e tabelave të mbivendosura në gjuhën e pyetjeve 1C.

Ju mund të përdorni një tabelë të mbivendosur të burimit të pyetjeve në fushat e përzgjedhjes së pyetjeve. Për shembull, dokumenti "Ofrimi i shërbimeve" ka një pjesë tabelare të Shërbimeve, dhe kështu, kjo pjesë tabelare mund të shfaqet edhe në fushën e përzgjedhjes. Tani do të shihni se si mund të zbatohet kjo.

Në bazën time të të dhënave të trajnimit, unë do të hap konsolën e pyetjeve, do të hap projektuesin e pyetjeve dhe do të zgjedh tabelën "Ofrimi i Shërbimeve".

Le ta zgjerojmë këtë tabelë

Dhe në të shohim pjesën tabelare "Shërbimet".

Le të zgjedhim të gjithë këtë pjesë të tabelës.

Siç mund ta shihni, e gjithë pjesa tabelare e shërbimit është futur plotësisht në fusha.

Ju lutemi vini re se pjesa tabelare, në fakt, vjen si një fushë e veçantë e quajtur "Shërbime" dhe lloji i së cilës do të jetë "Rezultati i kërkesës". Le të mësojmë se si të përdorim një tabelë të mbivendosur në një pyetje.

Le të lëmë tre fusha të tabelës së mbivendosur dhe të shtojmë disa fusha nga kreu i dokumentit.

Le të klikojmë OK në projektues dhe të shohim se si do të duket kërkesa jonë.

Siç mund ta shihni, në kërkesë ka një pikë pas fushës "Shërbime", dhe fushat e zgjedhura renditen në kllapa pas saj.

Të plotësojmë kërkesën.

Në figurë shohim se të gjitha fushat e zgjedhura në pjesën tabelare të dokumentit janë të renditura të ndara me presje në fushën "Shërbimet". Jo të gjitha konzolat e pyetjeve kanë një ekran si ai në figurën e mësipërme; ndonjëherë mund të thotë thjesht " ".

Një pikë tjetër interesante: në një tabelë të mbivendosur mund të vendosni një yll në vend të fushave, atëherë do të shfaqen të gjitha fushat e pjesës tabelare. Kjo nuk mund të bëhet në konstruktor, vetëm manualisht në kërkesë. Kërkesa do të marrë formën e mëposhtme:

Le të shohim se si do të ekzekutohet një kërkesë e tillë.

E vetmja gjë është se ky yll nuk do të ruhet nëse hapim konstruktorin e pyetjeve.

Ne kemi mësuar se si të bëjmë një pyetje me një tabelë të mbivendosur në tastierë, tani do të mësojmë se si të përdorim një tabelë të mbivendosur në një përzgjedhje

Në realitet, nuk është aq e vështirë për të hyrë në një tabelë të ndërthurur kur përpunohet një pyetje. Ju thjesht aksesoni përzgjedhjen me emrin e tabelës suaj dhe merrni një variabël me llojin "Rezultati i pyetjes". Dhe pastaj e përpunoni si rezultat normal të kërkesës: nëse dëshironi, merrni një mostër, nëse dëshironi, bëni një ngarkim.

Më poshtë është një shembull i vogël i kodit që funksionon me një tabelë të mbivendosur:


&Në server
Procedura FillOnServer()
Kërkesë = Kërkesë e re;
Kërkesë. Teksti = "ZGJIDH
| Shitja e produktit. Link,
| Shitja e produktit.produkteve.(
| Produkt,
| sasi
|NGA
| Dokument. Shitja e produkteve SI TË SHITEN Produktet"
;
Merr = Pyetje. Run(). Zgjidhni ();
Mirupafshim Përzgjedhja. Hapi tjetër ()
Top Line of the Tree = Shitja e produkteve. GetItems();
NewRow = TopRowTree. Add();
Linja e re. Lidhja = Përzgjedhja. Lidhje;
TabelaProduktet = Përzgjedhja. Mallra;
SelectionProducts = TabelaProdukte. Zgjidhni ();
Ndërsa Përzgjedhja e Produkteve. Hapi tjetër ()
TreeChildRow = Rreshti i ri. GetItems();
ProductRow = ChildTreeRow. Add();
ProductString. Lidhja = Zgjedhja e produktit. Produkt;
ProductString. Sasia = Artikujt e mostrës. sasi ;
Cikli i Fundit;
Cikli i Fundit;
Fundi i procedurës

Më lejoni të shpjegoj kodin e mësipërm.

Para së gjithash, ne morëm një përzgjedhje lineare dhe kalojmë nëpër këtë përzgjedhje në një lak, në të cilin krijojmë vijën e sipërme të pemës së vlerës (është në formë) dhe shkruajmë një lidhje me dokumentin tonë në të.

Dhe pastaj gjëja më interesante, madje mund ta shikoni më vonë në korrigjuesin vetë, ne i drejtohemi fushës së përzgjedhjes së produkteve dhe për lehtësi, shkruajeni këtë fushë në një ndryshore të veçantë në TabelaProduktet. Kjo variabël është e llojit "Rezultati i pyetjes". Dhe ju lehtë mund të merrni një mostër të këtij rezultati. Kjo është ajo që ne bëjmë. Mbetet për të anashkaluar këtë përzgjedhje duke përdorur funksionin tjetër dhe ciklin while.

Dhe brenda këtij cikli do t'i referohemi fushave të përzgjedhjes si fusha të një tabele të ndërthurur dhe do t'i shkruajmë ato në rreshtat fëmijë të pemës nga forma.

Ky është rezultati që ky kod do të kthehet

Ende keni pyetje?

Ju do t'u përgjigjeni atyre vetë kur të studioni kursin tim "Pyetjet në 1C për fillestarët". Ku këto dhe shumë çështje të tjera diskutohen më në detaje. I gjithë informacioni jepet në një formë të thjeshtë dhe të arritshme dhe është i kuptueshëm edhe për ata që nuk janë veçanërisht të njohur me programimin në 1C.

Kodi promovues për 20% zbritje: hrW0rl9Nnx

Mbështetni projektin tim duke dhuruar çdo shumë

Bashkohuni me grupet e mia.