Izdelava in delo z zahtevami (za začetnike). Ustvarjanje in delo z zahtevami (za začetnike) 1s 8.3 če je v zahtevi

Programiranje 1C je sestavljeno iz več kot le pisanja programa. 1C je ingot uporabniških dejanj in podatkov, s katerimi dela.

Podatki so shranjeni v bazi podatkov. Poizvedbe 1C so način pridobivanja podatkov iz podatkovne baze, da bi jih prikazali uporabniku v obliki ali obdelali.

Temeljni del poročila je zahteva 1C. V primeru poročila je ACS največji del poročila.

Sedi. Zajemite sapo. Pomiri se. Zdaj vam bom povedal novico.

Za programiranje v 1C ni dovolj poznati programski jezik 1C. Prav tako morate poznati jezik poizvedb 1C.

Poizvedovalni jezik 1C je popolnoma ločen jezik, ki nam omogoča, da določimo, katere podatke moramo pridobiti iz baze podatkov.

Je tudi dvojezičen - to pomeni, da lahko pišete v ruščini ali angleščini. Je izjemno podoben poizvedovalnemu jeziku SQL in tisti, ki ga poznajo, si lahko oddahnejo.

Kako se uporabljajo zahteve 1C

Ko uporabnik zažene 1C v načinu Enterprise, v delujočem odjemalcu ni niti enega grama podatkov. Zato, ko morate odpreti imenik, 1C zahteva podatke iz baze podatkov, to pomeni, da naredi zahtevo 1C.

Poizvedbe 1C so:

  • Samodejne poizvedbe 1C
    Ustvari samodejno sistem. Ustvarili ste obrazec s seznamom dokumentov. Dodan stolpec. To pomeni, da ko odprete ta obrazec v načinu podjetja, bo prikazana poizvedba in zahtevani bodo podatki za ta stolpec.
  • Polsamodejne poizvedbe 1C
    V jeziku 1C je veliko metod (funkcij), pri dostopu do katerih se izvede poizvedba v bazi podatkov. Na primer.GetObject()
  • Ročne poizvedbe 1C (napiše jih programer posebej kot poizvedbo)
    Zahtevo 1C lahko sami napišete v kodi in jo izvedete.

Ustvarjanje in izvajanje poizvedb 1C

Zahteva 1C je dejansko besedilo zahteve v jeziku zahteve 1C.
Besedilo je mogoče napisati s peresi. Se pravi, vzemi in napiši (če znaš ta jezik).

Ker 1C spodbuja koncept vizualnega programiranja, kjer je veliko ali skoraj vse mogoče narediti brez ročnega pisanja kode, obstaja poseben objekt Query Constructor, ki vam omogoča, da narišete besedilo poizvedbe, ne da bi poznali poizvedbeni jezik. Vendar se čudeži ne dogajajo - za to morate vedeti, kako delati s konstruktorjem.

Ko je besedilo zahteve 1C pripravljeno, ga je treba izvesti. V ta namen obstaja predmet v kodi 1C Request(). Tukaj je primer:

Zahteva = Nova zahteva();
Query.Text = "IZBERI
| Nomenklatura.Povezava
|OD
| Imenik.Nomenklatura AS Nomenklatura
|KJE
| Nomenklatura. Storitev";
Izberite = Query.Run().Select();

Poročilo(Izbor.Povezava);
EndCycle;

Kot lahko vidite v primeru, po izvedbi zahteve 1C rezultat pride k nam in ga moramo obdelati. Rezultat je ena ali več vrstic tabele (v posebni obliki).

Rezultat lahko naložite v običajno tabelo:
Fetch = Query.Run().Unload(); //Rezultat – tabela vrednosti

Ali pa samo pojdite naokrog vrstico za vrstico.
Izberite = Query.Run().Select();
Medtem ko Select.Next() Loop
//Naredi nekaj z rezultati poizvedbe
EndCycle;

Delo z zahtevami 1C

Osnovna načela poizvedb 1C

Osnovna načela izdelave zahteve 1C -
IZBERITE Seznam polj IZ Naslova tabele WHERE Pogoji

Primer sestave takšne zahteve 1C:

IZBERI
//seznam polj za izbiro
povezava,
Ime,
Koda
OD
//ime tabele iz katere izbiramo podatke
//seznam tabel je seznam objektov v oknu konfiguratorja
Imenik.Nomenklatura
KJE
//označuje izbiro
Vrsta izdelka = &Storitev //izbira po zunanji vrednosti
Ali Storitev // Atribut »Storitev« tipa Boolean, izbor po vrednosti True
RAZVRSTI PO
//Razvrščanje
Ime

Seznam tabel 1C

Imena tabel si lahko ogledate v oknu konfiguratorja. Namesto »Imeniki« morate napisati samo »Imenik«, na primer »Imenik.Nomenklatura« ali »Dokument.Prodaja blaga in storitev« ali »Register akumulacije.Prodaja«.

Obstajajo dodatne tabele (virtualne) za registre, ki vam omogočajo, da dobite končne številke.

Register informacij.RegisterName.Last Slice(&Date) – Zahteva 1C iz registra informacij, če je periodična, za določen datum

Register akumulacije. Ime registra. Stanja (&Datum) – 1C zahteva iz registra stanj za določen datum

Register akumulacije. Ime registra. Promet (&Začetni datum, &Končni datum) – 1C zahteva iz prometnega registra za obdobje od začetnega do končnega datuma.

Dodatna načela

Ko zahtevamo seznam nekaterih podatkov, osnovna načela delujejo. Lahko pa zahtevamo tudi številke in zahteva nam jih lahko prešteje (na primer doda).

IZBERI
//Količina(FieldName) – šteje količino
//Polje AS OtherName – preimenuje polje
Količina (povezava) AS Količina objavljenih dokumentov
OD

KJE
Dirigirano

Ta zahteva 1C nam bo vrnila skupno število dokumentov. Vendar ima vsak dokument polje Organizacija. Recimo, da želimo prešteti število dokumentov za vsako organizacijo s pomočjo poizvedbe 1C.

IZBERI
//samo polje dokumenta
organizacija,
//preštejte količino
Količina (povezava) AS Količina po organizacijah
OD
Dokument Prodaja blaga in storitev
KJE
Dirigirano
ZDRUŽI PO

Organizacija

Ta zahteva 1C nam bo vrnila število dokumentov za vsako organizacijo (imenovano tudi »po organizaciji«).

Z zahtevo 1C dodatno izračunamo količino teh dokumentov:

IZBERI
//samo polje dokumenta
organizacija,
//preštejte količino

//preštejte znesek

OD
Dokument Prodaja blaga in storitev
KJE
Dirigirano
ZDRUŽI PO
//uporabiti ga je treba, če ima seznam polj funkcijo count() in eno ali več polj hkrati - potem se morate združiti po teh poljih
Organizacija

Ta zahteva 1C nam bo vrnila tudi količino dokumentov.

IZBERI
//samo polje dokumenta
organizacija,
//preštejte količino
Količina (povezava) AS Količina po organizacijah,
//preštejte znesek
Znesek(DocumentAmount) KOT Znesek
OD
Dokument Prodaja blaga in storitev
KJE
Dirigirano
ZDRUŽI PO
//uporabiti ga je treba, če ima seznam polj funkcijo count() in eno ali več polj hkrati - potem se morate združiti po teh poljih
Organizacija
PO REZULTATI Splošno

Jezik poizvedb 1C je obsežen in zapleten, zato ne bomo upoštevali vseh njegovih zmogljivosti v eni lekciji - preberite naše naslednje lekcije.

Na kratko o dodatnih funkcijah poizvedovalnega jezika 1C:

  • Združevanje podatkov iz več tabel
  • Ugnezdene poizvedbe
  • Paketna zahteva
  • Ustvarjanje lastnih virtualnih tabel
  • Poizvedba iz tabele vrednosti
  • Uporaba vgrajenih funkcij za pridobivanje in manipuliranje vrednosti.

1C Query Builder

Da ne bi pisali besedila zahteve ročno, obstaja oblikovalec zahtev 1C. Z desno miškino tipko kliknite kjer koli v modulu in izberite 1C Query Designer.

Izberite želeno tabelo na levi v oblikovalniku poizvedb 1C in jo povlecite v desno.

Izberite zahtevana polja iz tabele v oblikovalniku poizvedb 1C in povlecite v desno. Če ne želite samo izbrati polja, ampak zanj uporabiti neko funkcijo seštevanja, po vlečenju dvakrat kliknite na polje z miško. Na zavihku Združevanje boste nato morali izbrati (povleči) zahtevana polja za združevanje.

Na zavihku Pogoji v oblikovalniku poizvedb 1C lahko na enak način izberete potrebne izbire (z vlečenjem polj, po katerih boste izbirali). Pazite, da izberete pravilno stanje.

Na zavihku Naročilo je prikazano razvrščanje. Na zavihku Rezultati – seštevek rezultatov.

Z oblikovalcem poizvedb 1C lahko preučite katero koli obstoječo poizvedbo. Če želite to narediti, z desno miškino tipko kliknite besedilo obstoječe zahteve in izberite tudi oblikovalec poizvedb 1C - in zahteva se bo odprla v oblikovalniku poizvedb 1C.

Poizvedovalni jezik 1C 8 je nepogrešljivo orodje za programerja 1C; omogoča pisanje bolj jedrnate, preproste, razumljive kode in pri delu s podatki porabi manj sistemskih virov. Ta članek odpira niz lekcij, posvečenih poizvedovalnemu jeziku 1C 8. V prvi lekciji si bomo ogledali strukturo glavnega operaterja tega jezika - IZBERI. S tem operatorjem lahko ustvarite izbore iz tabel baze podatkov. Izbrane podatke tabele je mogoče razvrščati, ji postavljati pogoje, jih povezovati in kombinirati s podatki iz drugih tabel, grupirati po različnih poljih in še mnogo več.

Poizvedovalni jezik 1C podjetje 8 - struktura operaterja SELECT

Oglejmo si strukturo operatorja SELECT (neobvezni deli operatorja so navedeni v oglatih oklepajih). Poizvedbeni jezik 1C ponuja široko paleto orodij za ustvarjanje vzorcev podatkov.

IZBERI [DOVOLJENO] [DRUGAČNO] [PRVI A] [Polje1] [AS Vzdevek1], [Polje2] [AS Vzdevek2], ... [PoljeM] [AS VzdevekB] [PUST TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEVO PRIDRUŽIVANJE][POLNO PRIDRUŽIVANJE] Tabela2 KOT Vzdevek Tabela2 [[NOTRANJE ZDRUŽIVANJE][LEVO PRIDRUŽIVANJE][POLNO PRIDRUŽIVANJE] TabelaC KOT Vzdevek TabeleC BY Izraz1 [In Izraz2]...[In IzrazD]] .. ... BY Izraz1 [In Izraz2]...[In IzrazE]] ... [TabelaF AS Vzdevek TabeleF] ... ] [SKUPINA PO ZdruževalnemPolju1[,] ... [ZdruževalnemPoljuG]] [WHERE Izraz1 [AND Izraz2] ... [IN IzrazH]] [ZDRUŽITI VSE...] [; ...] [KAZALO PO Alias1 ... AliasB] [SKUPAJ [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Ključne besede in bloki za delo s polji

  • IZBERI— ključna beseda, ki označuje začetek operatorja;
  • DOVOLJENO označuje, da mora izbor vključevati zapise tabele, ki imajo dostop za branje za danega uporabnika;
  • RAZLIČNO označuje, da mora vzorec vključevati samo različne (po vseh poljih) tokove. Z drugimi besedami, podvojene vrstice bodo izključene iz vzorca;
  • PRVI Ače podate to ključno besedo, bo v izbor vključena samo prva A od vrstic, izbranih s poizvedbo, kjer je A naravno število;
  • Polje blok— ta blok označuje polja, ki jih je treba vključiti v izbor. Ta polja bodo izbrani stolpci. V najpreprostejšem primeru je polje videti takole: vzdevek tabele.imepolja tabele AS vzdevek polja

    Tako navedemo, iz katere tabele vzamemo to polje. Poizvedbeni jezik 1C vam omogoča, da določite poljubne vzdevke, vendar se ne smejo ponavljati v istem stavku SELECT. Polje je lahko bolj zapleteno, sestavljeno iz različnih kombinacij polj tabele, funkcij poizvedovalnega jezika in agregatnih funkcij, vendar teh primerov v tej vadnici ne bomo obravnavali;

Ključne besede in bloki za delo s tabelami

  • PUT TemporaryTableName- ključna beseda KRAJ je namenjen ustvarjanju začasne tabele z določenim imenom, ki bo shranjena v RAM v dani seji 1C 8, dokler se ne konča ali dokler začasna tabela ni uničena. Upoštevati je treba, da se imena začasnih tabel v eni seji 1C 8 ne smejo ponoviti;
  • Blok tabel in odnosov— blok označuje vse tabele, uporabljene v tej poizvedbi, kot tudi razmerja med njimi. Blok se začne s ključno besedo OD, sledita ime in vzdevek prve tabele. Če je ta tabela povezana z drugimi tabelami, so razmerja navedena. Poizvedbeni jezik 1C vsebuje naslednji niz vrst povezav:
    • NOTRANJI SPOJ— zapis iz leve tabele bo vključen v izbor samo, če bo izpolnjen pogoj povezave, zapis iz desne tabele bo vključen v izbor le, če bo izpolnjen pogoj povezave;
    • LEVI PRIKLJUČEK— zapis iz leve tabele bo vključen v izbor v vsakem primeru, zapis iz desne tabele bo vključen v izbor le, če bo izpolnjen pogoj povezave;
    • POPOLNA POVEZAVA— v izbor bo v vsakem primeru najprej vključen zapis iz leve tabele, nato le ob izpolnjenem pogoju povezave, zapis iz desne tabele bo v vsakem primeru prvi v izboru, šele nato le v primeru pogoja povezave je izpolnjeno. V tem primeru so nastale podvojene vrstice izključene iz vzorca.

    Za vrsto povezave sta prikazana ime in vzdevek druge tabele. Sledi ključna beseda BY, ki jim sledijo komunikacijski pogoji, ki so med seboj povezani z logičnimi operatorji IN, ALI. Vsak izraz v pogoju mora vrniti logično vrednost (True, False). Če je prva tabela povezana z nekaterimi tabelami, ki niso druga, je vrsta povezave ponovno navedena in tako naprej. Vsako od tabel, ki sodelujejo v povezavi, je mogoče povezati z drugimi tabelami, kar je prikazano v diagramu strukture poizvedbe. Če tabela ni povezana s prvo, je navedena brez vrste povezave, potem lahko sledijo njene povezave in tako naprej;

Ključne besede in bloki za pretvorbo podatkov

  • Skupinski blok— ta blok se uporablja za združevanje vrstic tabele. Vrstice so združene v eno, če so vrednosti polj, podane za ključno besedo ZDRUŽI PO se izkaže za enako. V tem primeru se vsa druga polja seštejejo, povprečijo, maksimizirajo ali minimizirajo z uporabo agregatnih funkcij. Združevalne funkcije se uporabljajo v bloku polja. Primer: Maximum(TableAlias.TableFieldName) AS FieldAlias
  • Pogojni blok- v tem bloku za ključno besedo KJE označeni so pogojni izrazi, ločeni z logičnimi operatorji IN, ALI, da bi bila katera od izbranih vrstic vključena v vzorec, morajo imeti vsi pogoji v agregatu vrednost Prav.
  • ZDRUŽI VSE— ta ključna beseda se uporablja za združevanje poizvedb (operatorjev IZBERI). Poizvedbeni jezik 1C vam omogoča združevanje več poizvedb v eno. Da se poizvedbe združijo, morajo imeti enak nabor polj;
  • «;» - podpičja se uporabljajo za ločevanje stavkov, ki so neodvisni drug od drugega IZBERI;
  • INDEKS PO— ključna beseda se uporablja za indeksiranje polj, navedenih za njo;
  • Blok povzetka— uporablja se za izdelavo drevesnih vzorcev. Za vsako od polj združevanja, določenih za ključno besedo BY, v izboru bo ustvarjena ločena vrstica. V tej vrstici bodo z uporabo agregatnih funkcij izračunane skupne vrednosti polj, določenih za ključno besedo REZULTATI.

Ali želite nadaljevati z učenjem poizvedovalnega jezika 1C 8? Potem preberite naslednji članek.

Prošnja . Besedilo = "IZBERI | StorageUnits.Link |OD | Directory.usStorageUnits KAKO uporabljati StorageUnits // Primer 1: primerjava s prazno logično vrednostjo: |KJE | StorageUnits.AllowSelectionFromReserveZone = False // Primer 2. če pa je ta logična vrednost definirana, potem je bolje takole: // pogoj za negativno logično vrednost: |KJE | NI Shranjevalne enote. Dovoli izbiro iz rezervnega območja // Primer 3. izbira na podlagi pogoja praznega polja, ki ima tip "imenik določenega tipa" |KJE | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // Primer 3a. izbor na podlagi pogoja praznega polja tipa »dokument določene vrste« |KJE | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // Primer 3b. izbor na podlagi pogoja praznega polja tipa "dokumenti različnih vrst" ( sestavljeno polje) |KJE | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | ALI OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | ALI ... (itd. - zaporedno navajamo pogoje za vse možne vrste tega sestavljenega polja) ) // Primer 4. ali obratno, če morate izbrati izpolnjeno vrednost tipa "niz", bo pogoj pomagal: |KJE | Ime pomnilniške enote > """" // Primer 5. če morate izbrati dokumente določene vrste, s sestavljenim tipom podatkov, na primer v registru "RunningTasks", ima vir "Opravilo" sestavljen tip, med vrednostmi katerega je dokument "Izbira" je možen |KJE | EXPRESS(Register informacij.Izvedena opravila.Opravilo AS Dokument.Izbor) POVEZAVA Dokument.Izbor // Primer 5a. Še en podoben primer, ko morate izbrati dokumente določene vrste | IZBIRA | KDAJ EXPRESS (ag Ustreznost dokumentov. Dokument BU AS. Prejem blaga in storitev) POVEZAVA Dokument. Prejem blaga in storitev | POTEM ""Prejem blaga in storitev"" | KDAJ EXPRESS (ag Ustreznost dokumentov. Dokument BU AS. Prodaja blaga in storitev) POVEZAVA Dokument. Prodaja blaga in storitev | POTEM ""Prodaja blaga in storitev"" | ALSE """" | KONEC KOT Pogled dokumenta // Primer 6. izbira po pogoju nedefinirane vrednosti: |KJE | SavedSettings.User = UNDEFINED // Primer 7. izbor po vrsti gibanja "Vhod" registra akumulacije, "Izdatek" - podobno): |KJE | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Primer 8. Kako v zahtevi navesti, da zahteve ni treba izvršiti (na primer, morate programsko, odvisno od nekega pogoja, vrniti prazen rezultat zahteve - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "WHERE IS THE LIE");). Če želite to narediti, preprosto dodajte pogoj »Kje je False«. Mimogrede, ne glede na količino podatkov, zahtevanih v vzorcu, bo taka zahteva izvršena takoj. |KJE JE LAŽ // Primer 9. Preverjanje, ali rezultat poizvedbe vsebuje podatke: Če neProšnja.Izvedi().Prazno() Potem // Primer 10. izbor na podlagi praznega datuma: |KJE | tbStrings.CancellationDate = DATETIME(1, 1, 1)

V tem članku želimo z vami razpravljati o vsem Funkcije poizvedovalnega jezika 1C, in konstrukcije poizvedovalnega jezika. Kakšna je razlika med funkcijo in dizajnom? Funkcijo pokličemo z oklepaji in možnimi parametri v njih, konstrukcijo pa zapišemo brez oklepajev. Nedvomno vse strukture in funkcije poizvedovalnega jezika 1C narediti postopek pridobivanja podatkov prilagodljiv in večnamenski. Te funkcije in konstrukcije veljajo za polja zahtev, nekatere pa tudi za pogoje.

Funkcije poizvedovalnega jezika 1C

Ker jasen opis Funkcije poizvedovalnega jezika 1C je veliko manj pogost kot opisi struktur, smo se odločili, da začnemo preučevati funkcije. Zdaj pa si oglejmo vsakega posebej, z opisom njegovega namena, sintakse in primera uporabe, torej:

1. funkcija DATUM ČAS- ta funkcija ustvari konstantno polje s tipom "Datum".

Sintaksa: DATUM ČAS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Primer uporabe:

2. Funkcija DATE DIFFERENCE- vrne razliko med dvema datumoma v eni od dimenzij (leto, mesec, dan, ura, minuta, sekunda). Meritev se posreduje kot parameter.

Sintaksa: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Primer uporabe:

Query.Text = "IZBERI | RAZLIČNI DATUM(DATUMČAS(2015, 4, 17), DATUMČAS(2015, 2, 1), DAN) | AS Kol.dni";

3. Funkcija VALUE- nastavi konstantno polje z vnaprej določenim zapisom iz baze podatkov, lahko pa dobite tudi prazno povezavo katerekoli vrste.

Sintaksa: VALUE(<Имя>)

Primer uporabe:

Request.Text = "SELECT //predefiniran element | VALUE(Directory.Currencies.Dollar) AS Dollar, //prazna povezava | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Potrdilo, //transfer value | VALUE(Transfer . Pravna oseba. Posameznik) AS Posameznik, //predefiniran račun | VREDNOST(Kontni načrt. Samonosni. Materiali) AS Račun_10" ;

4. SELECT funkcijo- pred nami je analog konstrukcije IF, ki se uporablja v kodi, le ta se uporablja v poizvedbah 1C.

Sintaksa: IZBIRA KDAJ<Выражение>POTEM<Выражение>DRUGAČE<Выражение>KONEC

Primer uporabe:

Request.Text = //če je znesek večji od 7500, bi moral biti popust 300 rubljev, //torej, če je pogoj sprožen, potem funkcija //vrne Sum - 300 //v nasprotnem primeru bo zahteva vrnila preprosto Sum "IZBERI | IZBERI | KO TCReceipts.Amount > 7500 | THEN TCreceipts.Amount - 300 | ALSE TCreceipts.Amount | END AS AmountWithDiscount |FROM | Document.Receipts of GoodsServices.Goods AS TCreipts";

5. funkcija EXPRESS- omogoča izražanje konstantnega polja z določeno vrsto.

Sintaksa: EXPRESS(Ime polja AS Ime vrste)

Primer uporabe:

Query.Text = "IZBERI RAZLIČNO | Številka.prodajnega.registrarja, | IZBERI | KO POVEZAVA prodajnega.registrarja Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ALSE SELECT | WHEN Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | RegisterAccumulations.Purchases AS Purchases";

Ali obstaja še kakšna možnost za uporabo funkcije EXPRESS v poljih mešanih tipov, kje se pojavljajo? Najenostavnejši primer je "Registrar" za kateri koli register. Zakaj bi torej morda morali kvalificirati vrsto v registrarju? Poglejmo situacijo, ko v registrarju izberemo polje "Številka", iz katere tabele bo izbrana številka? Pravilen odgovor vseh! Da bi torej naša poizvedba delovala hitro, bi morali podati eksplicitno vrsto s funkcijo EXPRESS

Primer uporabe:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. Funkcija ISNULL(alternativno črkovanje ISNULL) - če je polje tipa NULL, se nadomesti z drugim parametrom funkcije.

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

Primer uporabe:

Upoštevajte tudi, da je priporočljivo VEDNO zamenjati tip NULL z neko vrednostjo, ker primerjava s tipom NULL vedno vrne FALSE, tudi če primerjate NULL z NULL. Najpogosteje se vrednosti NULL oblikujejo kot rezultat združevanja tabel (vse vrste združevanj, razen notranjih).

Query.Text = //Izberi celotno postavko in njena stanja //če v neki postavki ni stanja, potem bo polje //NULL, ki bo nadomeščeno z vrednostjo 0 "IZBERI | Št. Povezava, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Preostanek | OD | Imenik.Nomenklatura AS Št. | LEVA POVEZAVA Register Kopičenja. Blago V Skladiščih. Ostanki AS Blago V SkladiščihOstanki | VKLOP (GoodsInWarehousesRemains. Nomenklatura = Št. Povezava)";

7. REPRESENTATION funkcija- vam omogoča, da dobite predstavitev polja zahteve.

Sintaksa: IZVEDBA(<НаименованиеПоля>)

Primer uporabe:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Register kopičenja.FreeRemaining.Remaining AS FreeRemainingRemain ing";

Konstrukcije v poizvedovalnem jeziku 1C

Zgoraj smo razpravljali z vami Funkcije poizvedovalnega jezika 1C, zdaj je čas za razmislek konstrukcije v poizvedovalnem jeziku 1C, niso nič manj pomembni in uporabni, začnimo.

1. Gradnja LINK- je logični operator za preverjanje referenčnega tipa. Najpogosteje se pojavi pri preverjanju polja kompleksne vrste glede na določeno vrsto. Sintaksa: POVEZAVA<Имя таблицы>

Primer uporabe:

Request.Text = //če je vrsta vrednosti zapisovalnika dokument Prejem, //potem bo poizvedba vrnila "Prejem blaga", v nasprotnem primeru "Prodaja blaga" "IZBERI | IZBERI | KO Ostanki.Registrar LINK Dokument.Prejem blaga in Storitve | THEN ""Potrdilo"" | ALSE ""Potrošnja"" | END AS Vrsta gibanja | OD | Register akumulacije. Preostali izdelki v skladiščih AS Remains" ;

2. Design BETWEEN- ta operater preveri, ali je vrednost znotraj podanega območja.

Sintaksa: MED<Выражение>IN<Выражение>

Primer uporabe:

Request.Text = //pridobite celotno nomenklaturo, katere koda je v območju od 1 do 100 "SELECT | Nomenclature.Link |FROM | Imenik.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. Konstrukcija B in B HIERARHIJA- preverimo, ali je vrednost v prenesenem seznamu (matrike, tabele vrednosti itd. lahko prenesemo kot seznam). Operator V HIERARHIJI omogoča vpogled v hierarhijo (primer uporabe kontnega načrta).

Sintaksa: IN(<СписокЗначений>), V HIERARHIJI(<СписокЗначений>)

Primer uporabe:

Request.Text = //izberite vse podračune računa "IZBERI | Samonosno. Poveži AS Račun | OD | Kontni načrt. Samonosno AS Samonosno | KJE | Samonosno. Povezava V HIERARHIJI VREDNOST (Tabela Računi. Samonosni. Blago)«;

4. Oblikovanje PODOBNO- Ta funkcija nam omogoča primerjavo niza z vzorcem niza.

Sintaksa: VŠEČ "<ТекстШаблона>"

Možnosti vzorca vrstic:

% - zaporedje, ki vsebuje poljubno število poljubnih znakov.

En poljuben znak.

[...] - vsak posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih. Oštevilčenje lahko določa obsege, na primer a–z, kar pomeni poljuben znak, vključen v obseg, vključno s konci obsega.

[^...] - vsak posamezen znak ali zaporedje znakov, navedenih v oglatih oklepajih, razen tistih, navedenih za znakom za negiranje.

Primer uporabe:

Query.Text = //poiščite celotno nomenklaturo, ki vsebuje koren TABUR in se začne //bodisi z malo ali veliko črko t "SELECT | Nomenklatura. Povezava | FROM | Imenik. Nomenklatura KOT Nomenklatura | WHERE | Izdelki. Ime LIKE "" [Tt ]abur%""" ;

5. Dizajn DOVOLJEN- ta operater omogoča izbiro samo tistih zapisov iz baze podatkov, za katere ima klicatelj dovoljenje za branje. Te pravice so konfigurirane na ravni zapisa (RLS).

Sintaksa: DOVOLJENO je zapisano za ključno besedo IZBERI

Primer uporabe:

Request.Text = "IZBERI DOVOLJENO | Nasprotne stranke. Povezava | IZ | Imenik. Nasprotne stranke KOT Nasprotne stranke";

6. Oblikovanje RAZLIČNO- omogoča izbiro zapisov, v katerih ni podvojenih zapisov.

Sintaksa: VARIOUS je zapisano za ključno besedo SELECT

Primer uporabe:

Request.Text = //izbere zapise, do katerih ima bralec pravice "SELECT VARIOUS | Counterparties.Name |FROM | Imenik. Counterparties AS Counterparties" ;

Tudi konstrukcijo VARIOUS je mogoče uporabiti z operatorjem ALLOWED in drugimi operatorji.

Primer uporabe:

Request.Text = //izbere različne zapise, do katerih ima bralec pravice "IZBERI DOVOLJENE RAZLIČNE | Nasprotne stranke.Ime |FROM | Imenik. Nasprotne stranke KOT Nasprotne stranke";

7. Design FIRST- iz rezultata poizvedbe izbere število zapisov, navedenih v parametru.

Sintaksa: FIRST<число>

Primer uporabe:

Request.Text = //izberi prve 4 številke CCD iz imenika "IZBERI PRVE 4 | Številke CCD. Povezava | FROM | Imenik. Številke CCD KOT številke CCD";

8. Dizajn ZA SPREMEMBE- omogoča zaklepanje tabele, deluje samo v transakcijah (relevantno samo za avtomatske ključavnice).

Sintaksa: ZA SPREMEMBO<НаименованиеТаблицы>

Primer uporabe:

Query.Text = "IZBERI | Brezplačni preostanki Preostanki. Nomenklatura, | Brezplačni preostanki Preostanki. Skladišče, | Brezplačni preostanki Preostanki. Na zalogi Preostali | OD | Register akumulacij. Brezplačni preostanki. Ostanki KOT Prosti preostanki Preostanki | ZA SPREMEMBO | Register akumulacij . Brezplačni preostanki. Preostanki";

9. Dizajn ORDER BY- ureja podatke po določenem polju. Če je polje povezava, potem pri nastavitvi zastavice AVTO NAROČILO Razvrščanje bo potekalo po predstavitvi povezave; če je zastavica izklopljena, so povezave razvrščene po starosti naslova povezave v pomnilniku.

Sintaksa: RAZVRSTI PO<НаименованиеПоля>AVTO NAROČILO

Primer uporabe:

Query.Text = "IZBERI | Brezplačni preostali preostanki. Nomenklatura KOT Nomenklatura, | Brezplačni preostanki Preostanki. Skladišče KOT Skladišče, | Brezplačni preostanki Preostanki. Na zalogi Preostali | OD | Registrirajte akumulacije. Brezplačni preostanki. Preostali KOT Brezplačni preostali preostanki | | NAROČI PO | Nomenklatura | SAMODEJNA OBNOVA NAROČIL";

10. Oblikovanje GROUP BY- uporablja se za združevanje nizov poizvedb po določenih poljih. Številska polja je treba uporabiti s katero koli agregatno funkcijo.

Sintaksa: ZDRUŽI PO<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Primer uporabe:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS STOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GROUP BY | ProductsInWarehouses.Nomenclature, | ProductsIn Warehouse s.Skladišče" ;

11. Oblikovanje HAVING- omogoča uporabo agregatne funkcije za pogoj izbire podatkov, podobno konstrukciji WHERE.

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

Primer uporabe:

Query.Text = //izbere združene zapise, kjer je polje InStock večje od 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | ZGRUPI PO | IzdelkiV Skladiščih.Nomenklatura, | IzdelkiVSkladiščih.Skladišče | |NA VOLJO | ZNESEK(IzdelkiVSkladiščih.Na Zalogi) > 3" ;

12. Gradnja INDEX BY- uporablja se za indeksiranje poizvedbenega polja. Poizvedba z indeksiranjem traja dlje, vendar pospeši iskanje po indeksiranih poljih. Lahko se uporablja samo v virtualnih tabelah.

Sintaksa: INDEKS PO<Поле1, ... , ПолеN>

Primer uporabe:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Oblikovanje KJE- omogoča, da določite pogoj za poljubna izbirna polja. Rezultat bo vseboval le zapise, ki bodo izpolnjevali pogoj.

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

Primer uporabe:

Query.Text = //izbrani so vsi zapisi s CompensationRemaining<>0 in //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Place DataTz |FROM | Register kopičenja.CompensationRP.Remains AS Comp ensationRPOstat ki |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | In CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. REZULTATI oblikovanja... SPLOŠNO- uporablja se za izračun vsot; zasnova določa polja, po katerih bodo izračunane vsote, in agregatne funkcije, uporabljene za polja vsot. Pri uporabi vsot za vsako polje, ki sledi konstrukciji TOTAL, so podatki združeni. Obstaja neobvezen konstrukt GENERAL; njegova uporaba omogoča tudi dodatno združevanje. Spodaj boste videli primer rezultata zahteve.

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

Primer uporabe:

Request.Text = "IZBERI | Izračuni. Pogodba nasprotne stranke. Vrsta pogodbe AS Vrsta pogodbe, | Izračuni. Pogodba nasprotne stranke AS Pogodba, | Izračuni. Nasprotna stranka, | Izračuni. Znesek stanja medsebojne poravnave AS stanja | OD | Register akumulacij. Vzajemna Poravnava Z nasprotnimi strankami. Stanja AS Izračuni | SKUPAJ | ZNESEK (Stanje) | Programska oprema | SPLOŠNO, | Vrsta pogodbe";

Na sliki so prikazane skupine, ki so se oblikovale med izvajanjem zahteve, zgornja se nanaša na razdelek SPLOŠNO, druga pa na polje Counterparty AgreementAgreement Type.

V tem članku bomo preučili temo ugnezdenih tabel v poizvedovalnem jeziku 1C.

V poljih za izbiro poizvedbe lahko uporabite ugnezdeno izvorno tabelo poizvedbe. Na primer, dokument »Opravljanje storitev« ima tabelarični del Storitve, tako da je ta tabelarični del lahko prikazan tudi v izbirnem polju. Zdaj boste videli, kako je to mogoče izvesti.

V svoji bazi podatkov za usposabljanje bom zagnal konzolo za poizvedbe, odprl oblikovalec poizvedb in izbral tabelo »Zagotavljanje storitev«.

Razširimo to tabelo

In v njem vidimo tabelarični del »Storitve«.

Izberimo ta celoten del tabele.

Kot lahko vidite, je celoten tabelarični del storitve v celoti prešel v polja.

Upoštevajte, da je tabelarni del dejansko ločeno polje z imenom »Storitve« in katerega vrsta bo »Rezultat zahteve«. Naučimo se uporabljati ugnezdeno tabelo v poizvedbi.

Pustimo tri polja ugnezdene tabele in dodamo nekaj polj iz glave dokumenta.

V oblikovalcu kliknimo OK in poglejmo, kako bo izgledala naša zahteva.

Kot lahko vidite, je v zahtevku za poljem »Storitve« pika, izbrana polja pa so navedena v oklepaju za njo.

Izpolnimo zahtevo.

Na sliki vidimo, da so v polju »Storitve« vsa izbrana polja v tabelarnem delu dokumenta navedena ločena z vejicami. Vse poizvedovalne konzole nimajo zaslona, ​​kot je prikazan na zgornji sliki; včasih lahko piše le » «.

Še ena zanimiva točka: v ugnezdeni tabeli lahko namesto polj postavite zvezdico, potem se bodo prikazala vsa polja tabelarnega dela. Tega ni mogoče storiti v konstruktorju, ampak samo ročno v zahtevi. Zahteva bo v naslednji obliki:

Poglejmo, kako bo taka zahteva izvedena.

Edina stvar je, da se ta zvezdica ne bo shranila, če odpremo konstruktor poizvedbe.

Naučili smo se, kako narediti poizvedbo z ugnezdeno tabelo v konzoli, zdaj se bomo naučili, kako uporabiti ugnezdeno tabelo v izboru

V resnici pri obdelavi poizvedbe ni tako težko dostopati do ugnezdene tabele. Preprosto dostopate do izbire z imenom vaše tabele in dobite spremenljivko z vrsto »Rezultat poizvedbe«. In potem to obdelate kot običajen rezultat zahteve: če želite, dobite vzorec, če želite, naredite nalaganje.

Spodaj je majhen primer kode, ki deluje z ugnezdeno tabelo:


&Na strežniku
Postopek FillOnServer()
Zahteva = Nova zahteva;
Prošnja. Besedilo = "IZBERI
| Prodaja izdelka Povezava,
| Prodaja izdelka.Izdelki.(
| izdelek,
| Količina
|OD
| Dokument Prodaja izdelkov KAKO Prodajati izdelke"
;
Fetch = poizvedba. Zaženi(). Izberite ();
Adijo Izbor. Zanka Next().
TopLine of the Tree = Prodaja izdelkov. GetItems();
Nova Vrstica = Zgornja Vrstica Drevesa. Dodaj();
Nova linija. Povezava = Izbira. Povezava;
TableProducts = Izbor. blago;
SelectionProducts = TableProducts. Izberite ();
Med izborom izdelkov. Zanka Next().
TreeChildRow = Nova vrstica. GetItems();
ProductRow = ChildTreeRow. Dodaj();
ProductString. Povezava = Izbira izdelkov. izdelek;
ProductString. Količina = vzorčni predmeti. Količina ;
EndCycle;
EndCycle;
Konec postopka

Naj pojasnim zgornjo kodo.

Najprej smo dobili linearni izbor, skozi ta izbor gremo v zanki, v kateri ustvarimo zgornjo vrstico drevesa vrednosti (je na obrazcu), vanjo pa zapišemo povezavo do našega dokumenta.

In potem je najbolj zanimiva stvar, kasneje si jo lahko ogledate tudi sami v razhroščevalniku, obrnemo se na polje za izbiro izdelkov in za udobje zapišemo to polje v ločeno spremenljivko v tabeli Izdelki. Ta spremenljivka je tipa "Rezultat poizvedbe". In zlahka dobite vzorec tega rezultata. To počnemo. Ostaja, da to izbiro zaobidemo s funkcijo next in zanko while.

In znotraj te zanke se bomo izbirna polja sklicevali na polja ugnezdene tabele in jih zapisali v podrejene vrstice drevesa iz obrazca.

To je rezultat, ki ga bo vrnila ta koda

Imate še vprašanja?

Nanje boste odgovorili sami, ko boste preučevali moj tečaj "Poizvedbe v 1C za začetnike". Kjer so ta in številna druga vprašanja podrobneje obravnavana. Vse informacije so podane v preprosti in dostopni obliki in so razumljive tudi tistim, ki niso posebej seznanjeni s programiranjem v 1C.

Promocijska koda za 20% popust: hrW0rl9Nnx

Podprite moj projekt z donacijo poljubnega zneska

Pridružite se mojim skupinam.