Procedura za rad sa ugrađenim objektom zahtjeva jezika. Koja je svrha konfiguracijskog objekta "Jezik"?

Razvoj aplikativnog rješenja u sistemu 1C: Enterprise sastoji se od dvije glavne radnje: vizualnog dizajna konfiguracijskih objekata i opisa specifičnog ponašanja sistema pomoću ugrađenog jezika i jezika upita.

Ugrađeni jezik sistema 1C: Enterprise ima mnogo sličnosti sa drugim programskim jezicima, ali nije direktan analog nijednom od njih. Njegove najznačajnije karakteristike:

· meko kucanje (tip varijable je određen tipom vrijednosti koju sadrži i može se mijenjati tokom rada);

· nedostatak softverskog opisa tipova aplikacija (nastaju prilikom dodavanja konfiguracionih objekata);

· ugrađeni jezik orijentiran na događaje;

· svi operateri imaju i ruski i engleski pravopis, koji se mogu koristiti istovremeno.

Konfiguracijski moduli

Moduli aplikativnog rješenja dizajnirani su tako da tekst programa smjeste na ugrađeni jezik. Ovi moduli se nalaze na različitim mjestima u konfiguraciji i imaju različite namjene. Većina modula je “vezana” za određene konfiguracijske objekte ili za samo aplikativno rješenje.

Razlikuju se sljedeće vrste softverskih modula:

· Zajednički moduli. Konfiguracija može imati proizvoljan broj modula, uključujući nijedan. Zajednički moduli sami po sebi se ne pozivaju tokom procesa konfiguracije. Oni služe samo da sadrže tekstove procedura i funkcija koje se mogu pozvati iz drugih modula aplikativnog rješenja. Stoga im nedostaje odjeljak opisa varijable i glavni programski dio. To. Uobičajeni moduli sadrže samo procedure i funkcije.

· Aplikacioni modul. U konfiguraciji uvijek postoji jedan modul aplikacije. Izvršava se kada se sistem pokrene u 1C: Enterprise modu i namijenjen je razradi radnji koje se odnose na radnu sesiju krajnjeg korisnika. Glavni događaji koji se mogu obraditi u modulu aplikacije su početni i završni događaji aplikacije. Slijed iz poziva je prikazan u pirinač. 1. Događaj Prije pokretanja sistema Pojavljuje se kada se sistem pokrene prije otvaranja glavnog prozora. Rukovanjem ovim događajem, programer, na primjer, ima priliku odbiti pokretanje ako bilo koji uvjet nije ispunjen. Događaj Prilikom pokretanja sistema javlja se nakon otvaranja glavnog prozora. U rukovaocu ovog događaja možete, na primjer, prikazati informacije o rođendanskim osobama itd.

· Eksterni priključni modul. U konfiguraciji uvijek postoji jedan vanjski modul za povezivanje. Izvršava se kada se aplikaciji pristupa kao COM serveru (u načinu eksterne veze). U načinu eksternog povezivanja nije pokrenuta punopravna aplikacija 1C: Enterprise, već "lagana verzija" u kojoj nisu dostupne sve funkcije koje su na ovaj ili onaj način povezane s organizacijom korisničkog sučelja.

· Aplikacijski objektni moduli. Svaki objekat konfiguracije aplikacije (na primjer, softverski dokument ili direktorij), čiji se podaci mogu mijenjati u načinu 1C: Enterprise, ima svoj modul. Pored opisa varijabli i glavnog programa, objektni modul može sadržavati opis procedura – rukovatelja događajima koji su povezani sa datim konfiguracijskim objektom. Postoje dva događaja koja se podižu na svim objektima - Prije snimanja I WhenRecording.

· Moduli obrazaca. Svaki obrazac ima svoj modul, koji definira ponašanje obrasca i radnje koje se iz njega izvode, na primjer, otvaranje drugih oblika. Događaji se otvaraju za sve oblike Prije otvaranja, za vrijeme otvaranja, prije zatvaranja I Na zatvaranju.

Kontekst

U sistemu 1C: Enterprise kontekst označava okruženje modula, tj. varijable, objekti, svojstva, metode i događaji koji su mu dostupni. Možemo razlikovati sljedeće tipove konteksta i, shodno tome, pravila za vidljivost izvezenih varijabli, procedura i funkcija:

· Globalni kontekst, dostupan u svim drugim kontekstima, sastoji se od sljedećih dijelova:

§ svojstva, metode i događaji globalnog konteksta (na primjer, svojstvo Radni datum);

§ sistemske enumeracije i skupovi sistemskih vrijednosti (na primjer, Return CodeDialog I Simboli).

· Zajednički kontekst modula formiran od globalnog konteksta i lokalnog konteksta samog općeg modula (tj. procedura i funkcija definiranih unutar općeg modula). U kontekstu zajedničkog modula, dostupne su izvezene procedure i funkcije drugih zajedničkih modula. Izvezene varijable, procedure i funkcije modula aplikacije nisu dostupne.

· U kontekstu modula aplikacije ili modula za eksternu vezu Dostupne su izvezene procedure i funkcije zajedničkih modula.

· U kontekstu modula objekta aplikacije postoji pristup detaljima i tabelarnim delovima objekta, kao i njegovim metodama i događajima. Izvezene varijable, procedure i funkcije aplikativnog modula (modula eksternog povezivanja) i zajedničkih modula dostupni su ovdje.

· U kontekstu modula obrasca detalji obrasca su dostupni, kao i svojstva obrasca, metode i događaji. Ako obrascu ima dodijeljen glavni atribut, tada svojstva i metode aplikacijskog objekta koji se koristi kao glavni atribut postaju dostupni u modulu obrasca.

Odnos između konteksta je shematski prikazan u pirinač. 2. On pirinač. 3 prikazuje moguću interakciju modula obrasca dnevnika i modula dokumenta.


Procedure i funkcije

Procedure i funkcije su programski blokovi koji se mogu pozvati po imenu s druge lokacije, kao što je druga procedura. Funkcije se razlikuju od procedura samo po tome što imaju povratnu vrijednost. U verziji 8, redoslijed procedura i funkcija nije važan. To znači da se procedura može nalaziti ispod mjesta gdje je pozvana.

Procedure i funkcije mogu imati parametre koji definiraju koje radnje treba raditi s kojim objektima. Parametri procedure ili funkcije se po defaultu prosljeđuju kao referenca. To znači da će promjena formalnog parametra unutar procedure ili funkcije promijeniti stvarni parametar na mjestu gdje je pozvan. Da biste jamčili da se parametar prosljeđuje po vrijednosti, morate umetnuti ključnu riječ prije naziva parametra Značenje.

Primjer 1:

Izračunaj postupak()

Količina=Cijena*Količina;

Kraj procedure

Izračun(); // Pozovite proceduru

Primjer 2:

Perem Glob;

// Opis postupka

Izračunavanje procedure(Par1, Par2, ParZ) Izvoz

Glob = Glob + Par1 + Par2 + ParZ;

Kraj procedure

Izračun(5, 6, 7); // Pozovite proceduru

Primjer 3:

Perem Glob;

// Opis funkcije

Izračun funkcije (Par1, Par2, ParZ) Izvoz

Lok = Glob + Par1 + Par2 + ParZ;

Return Lock;

EndFunction

Res = Calc(5, 6, 7); // Poziv funkcije

Tipovi podataka

Broj, String, Datum, Boolean, Undefined, Null (za nespecificirane vrijednosti u tablicama baze podataka)

Tip. Vrijednosti posebnog tipa "Type" su potrebne za predstavljanje i poređenje tipova podataka, na primjer:

Deklarisanje varijabli

Varijable se pojavljuju u programu u sljedećim slučajevima:

· nakon što su deklarisani pomoću operatora Variable.

Perem<Имя_переменной>[Izvoz];

Varijabla A, B;

· nakon prvog postavljanja imena varijable na lijevoj strani operatora dodjele.

primjer:

· prilikom određivanja naziva identifikatora uređivanih dijaloških elemenata;

· prilikom postavljanja formalnih parametara procedura.

Cast

Određivanje tipa može biti eksplicitno ili implicitno.

Za eksplicitno uvođenje, postoje sljedeće funkcije: Broj, String, Datum, Boolean. Implicitno uvođenje tipova se izvodi automatski od strane sistema prilikom evaluacije izraza.

Primjer: Vrijednost numeričke varijable MonthNumber se implicitno pretvara u niz i dodaje drugom nizu:

A = “Mjesec” + Broj mjeseca;

Imenici

Rad sa direktorijumima se izvodi pomoću sledećih objekata:

· DirectoriesManager. Omogućava pristup svim referentnim knjigama za konfiguraciju. Svojstva ovog objekta podudaraju se s imenima direktorija i sadrže objekte tipa DirectoryManager.

· DirectoryManager. Omogućuje pristup operacijama u direktoriju kao skupu elemenata. Koristeći metode ovog objekta, možete pretraživati, dobiti selekciju, kreirati nove elemente i pristupiti obrascima i izgledima direktorija.

· DirectoryLink. Nedvosmisleno identificira element (grupu) direktorija i omogućava vam da mu pristupite u načinu samo za čitanje. Kroz svojstva i metode ovog objekta možete pročitati detalje elementa (grupe) i pristupiti njegovim tabelarnim dijelovima. Vrijednost ovog tipa je pohranjena u atributima koji se odnose na elemente ovog direktorija, na primjer, u atributu Zaposleni dokument Regrutacija sprema se veza do određenog elementa direktorija Zaposleni.

· DirectoryObject. Pruža pristup elementu koji se može pisati. Ovaj objekt sadrži metode koje utječu na element u bazi podataka, na primjer, metode Zapiši I Izbriši.

· DirectorySelection. Pruža mogućnost ponavljanja kroz elemente direktorija. Uzorkovanje može biti direktno ili hijerarhijsko.

· DirectoryList. Objekt za upravljanje listom elemenata u polju tabele. Omogućava vam upravljanje kolonama, odabirom i sortiranjem na listi.

U sistemu 1C:Enterprise?

1. Tekstovi konfiguracije i baze podataka pohranjeni su u formatuUNICODE

3. Ne postoji pravi odgovor

6.75 U koju svrhu se tekstovi konfiguracije i baze podataka pohranjuju u formatuUNICODE?

1. UNICODE format osigurava nepromjenjivost (nezavisnost od softverske platforme operativnog sistema) prezentacije informacija

2. FormatUNICODE omogućava vam podršku za različite jezike u sistemu 1C:Enterprise

3. Ne postoji pravi odgovor

6.76 Utvrđeni mehanizmi internacionalizacije. ..

1. tehnološka platforma 1C:Enterprise

2. primijenjena rješenja

3. Odgovori 1 i 2 su tačni

4. nema pravog odgovora

6.77 Što je lokalizacijski kod?

1. Niz koji se sastoji od koda jezika i koda zemlje koji identifikuje neki region sveta

2. Šifra softverskog proizvoda (navedena na obrascu za registraciju, dokumentacija uključena u komplet za isporuku)

3. Format string opcija za konverziju

4. Njen odgovor je tačan

6.78 Da li je tačno da u 1C:Enterprise 8 bilo koja tekstualna informacija može istovremeno sadržavati znakove sa različitih jezika?

1. Da, pošto su svi tekstovi konfiguracije i baze podataka pohranjeni u formatuUNICODE

2. Ovisno o postavkama navedenim prilikom kreiranja infobaze

3. Samo ako je to predviđeno konfiguracijom

6.79 Koja je svrha konfiguracijskog objekta "Jezik"?

1. Za kreiranje programskog interfejsa na različitim jezicima

2. Za kreiranje tekstualnih dokumenata na različitim jezicima

3. Takav objekat ne postoji u 1C: Enterprise 8

6.80 Kako mogu promijeniti jezik za pregled (uređivanje) konfiguracije?

1. Korišćenjem dugmeta za izbor jezika koji se nalazi na statusnoj traci desno od dugmeta "NUM".

2. Preko stavke menija "Konfiguracija - Jezik za uređivanje konfiguracije"

3. U 1 C: Enterprise ova mogućnost ne postoji

4. Verpa odgovara na 1 i 2

6.81 Kako se pišu operatori ugrađenog jezika?

1. Samo rusko pismo

3.

6.82 Da li je moguće koristiti ugrađene jezičke operatore na ruskom i engleskom pisanju u jednom izvornom tekstu?

1. Samo sa posebnim postavkama konfiguratora

2. Da, ovo ne zahtijeva promjenu postavki konfiguratora

3. Ne, pošto je opcija ugrađenog jezika postavljena u svojstvima konfiguracije

6.83 Koja je svrha ugrađenog jezika?

1. Odrediti podrazumevani programski interfejs

2. Opisati (u fazi razvoja konfiguracije) algoritme za funkcionisanje primijenjenog zadatka

3. Ne postoji pravi odgovor

6.84 Kako se pišu funkcije ugrađenog jezika?

1. Samo rusko pismo

2. Samo engleski pravopis

3. Rusko i englesko pisanje

4. Ovisno o postavkama konfiguratora

6.85 Šta znači parametar L?(L) u nizu formata funkcije za formatiranje NumberInWriting()?

1. Potpišite “iznesite razlomak u brojevima/riječima”

2. Broj decimalnih mjesta

3. Kôd za lokalizaciju

7. Tabelarni model aplikativnog rješenja

7.1 Prilikom postavljanja ograničenja pristupa podacima, možete postaviti nekoliko (na osnovu broja polja) ograničenja:

1. Za "Čitaj" desno

2. Za pravu "Promenu"

3. Za desno "Dodaj".

4. Za desno "Izbriši".

5. Za sva gore navedena prava

6. Za sva moguća prava

7.2 Prilikom postavljanja ograničenja pristupa podacima, sljedeće se mogu koristiti kao vrijednosti prema kojima se ograničavaju pristup podacima:

1. Samo vrijednosti parametara sesije

2. Samo podaci iz tabela (upita)

3. Vrijednosti parametara sesije i podaci iz tabela (upita)

4. Samo vrijednosti sa tipovima: Broj, String, Boolean, Datum

7.3 Koja od gore navedenih metoda se može koristiti tako da se kod i naziv direktorija pojavljuju u odeljku „Polja“ dizajnera upita?

1. Prvo popunite odjeljak „Tabele“, a zatim, odabirom željenih objekata iz ovog odjeljka, premjestite ih u odjeljak „Polja“ pomoću dvostrukog klika lijevom tipkom miša

2. Bez popunjavanja odeljka „Tabele“, odmah izaberite potrebne objekte iz tabela - izvora podataka sekcije „Baza podataka“, prebacujući ih u odeljak „Polja“ koristeći Drag & Drop tehnologiju. Odjeljak "Tabele" se popunjava automatski

3. Prvo popunite odjeljak "Tabele", a zatim, odabirom potrebnih objekata iz ovog odjeljka, prenesite ih u odjeljak "Polja" pomoću dugmadi na obrascu ">" """

4. Odgovori I i 3 su tačni

5. Odgovori I, 2 i 3 su tačni

7.4 Da biste povećali brzinu izvršenja zahtjeva, morate:

1. Postavite parametre za većinu stvarnih tablica

2. Postavite parametre za većinu virtualnih tablica

3. Umjesto specificiranja parametara za stvarnu ili virtuelnu tablicu, koristite odabir naveden u konstrukciji jezika upita “WHERE”

4. Odgovori I i 2 su tačni

7.5 Da li je moguće dodijeliti mu novo ime (alias) prilikom odabira izvorne tablice u odjeljku „Tabele“ dizajnera upita?

1. da, možeš

2. Da, možete, ali samo ako je izvor podataka ugniježđeni upit

3. Da, možete, ali samo ako je izvor podataka virtualna tablica

4. Odgovori 1 i 2 su tačni

5. Odgovori 1 i 3 su tačni

7.6 Ugniježđeni upit se može koristiti:

1. Kao tabela izvora podataka

2. Kao operand operacija poređenja “B” ili “NOT B” prilikom postavljanja parametara virtuelne tabele

3. Kao operand operacija poređenja “B” ili “NOT B” kada se specificira konstrukcija jezika upita “WHERE”

4. Verpa odgovara na 1, 2 i 3

7.7 Da li je moguće dobiti ukupne vrijednosti po hijerarhiji pomoću dizajnera upita?

1. Moguće je ako navedete ukupan tip “Elementi i hijerarhija” za polje grupisanja

2. Moguće je ako navedete ukupan tip „Samo hijerarhija“ za polje grupisanja

3. Verpa odgovara na 1 i 2

7.8 Na kartici „Uslovi“ dizajnera upita može se generisati poseban red liste uslova:

1. Dvaput kliknite levim tasterom miša na željeno polje u listi dostupnih polja

2. Premještanjem željenog polja na listu koristeći Drag & Drop tehnologiju

3. Kliknite na dugme "Dodaj". Ako je uslov proizvoljan, onda se tekst uvjeta može unijeti "ručno"

4. Pozovite kontekstni meni i izaberite „Dodaj“ iz njega. Moguće je koristiti proizvoljan izraz

5. Svi gore navedeni odgovori su tačni

7.9 Na kartici “Veze” dizajnera upita možete definirati:

1. Povezivanje tabela izvora podataka i relacija između njih

2. Kombiniranje tabela izvora podataka i veza između njih

3. Relacije između polja tabele dobijene kao rezultat upita

4. Odnosi između polja tabele izvora podataka i tabele dobijene kao rezultat upita

7.10 Prilikom spajanja tabela izvora podataka u dizajneru upita, možete:

1. Dodijelite vezu bez specificiranja uvjeta veze

2. Dodijelite vezu koja označava uvjet veze, a ovaj uvjet može biti samo jedan

3. Dodijelite vezu koja označava uvjet veze, a ovaj uvjet može biti samo jednostavan

4. Dodijelite potreban broj veza navodeći potreban broj komunikacijskih uvjeta, a ti uvjeti mogu biti jednostavni ili proizvoljni

7.11 Kreiranje veze između tabela izvora podataka u dizajneru upita omogućava:

1. Spajanje samo dvije tabele izvora podataka

2. Povezivanje potrebnog broja tabela izvora podataka

3. Povezivanje samo dvije tabele izvora podataka, a polje za potvrdu “Sve” mora biti označeno za najmanje jednu od tabela

Basic, što početnicima olakšava učenje. Međutim, nije direktan analog nijednom od navedenih jezika.

Evo samo nekih od najznačajnijih karakteristika ugrađenog jezika:

  • pre-kompilacija; pre izvršenja, moduli koji sadrže tekst na ugrađenom jeziku se konvertuju u interni kod;
  • keširanje kompajliranih modula u memoriji;
  • meko kucanje - tip varijable je određen tipom vrijednosti koju sadrži i može se promijeniti tokom rada;
  • nedostatak softverskog opisa konfiguracijskih objekata; programer može koristiti ili objekte ugrađene u platformu ili objekte kreirane od strane sistema kao rezultat vizualnog dizajna aplikativnog rješenja.

Ugrađeni jezik orijentiran na događaje. Namjena ugrađenog jezika u sistemu 1C:Enterprise određena je ideologijom kreiranja aplikativnih rješenja. Aplikaciona rješenja u 1C:Enterprise 8.0 nisu u potpunosti kodirana. Većinu aplikativnog rješenja kreira programer kroz vizualni dizajn – kreiranje novih konfiguracijskih objekata, postavljanje njihovih svojstava, oblika prezentacije, odnosa itd. Ugrađeni jezik se koristi samo za određivanje ponašanja objekata aplikativnog rješenja koje se razlikuje od standardni, te da kreiraju vlastite algoritme za obradu podataka.

Iz tog razloga, module koji sadrže tekst na ugrađenom jeziku sistem koristi u specifičnim, ranije poznatim situacijama koje mogu nastati tokom rada aplikativnog rješenja. Takve situacije se nazivaju događaji. Događaji se mogu povezati s funkcioniranjem objekata aplikativnog rješenja ili sa samim aplikativnim rješenjem, kao takvim.

Na primjer, brojni događaji su povezani s funkcioniranjem objekta rješenja aplikacije Direktorij, među kojima je događaj BeforeWrite. Ovaj događaj se događa neposredno prije nego što se podaci stavke direktorija zapisuju u bazu podataka. Programer, koristeći ugrađeni jezik, može opisati algoritam koji će, na primjer, provjeriti ispravnost podataka koje je unio korisnik. Postavljanjem ovog algoritma u odgovarajući modul, programer će osigurati da svaki put kada korisnik snimi stavku direktorija, sistem će izvršiti algoritam koji je kreirao programer i provjeriti da li je korisnik zaboravio popuniti tražene detalje direktorija.

Dakle, možemo reći da je ugrađeni jezik skriptni jezik za programiranje poslovne logike, a korištenje modula u ugrađenom jeziku zavisi od događaja, tj. moduli se izvršavaju kada se tokom rada aplikativnog rješenja dogode određeni događaji.

Unaprijed definirani tipovi podataka

Platforma 1C:Enterprise 8.0 omogućava programeru da koristi različite vrste podataka.

Postoji veliki broj tipova podataka koji su definisani na nivou same platforme. Na primjer ovo primitivni tipovi podataka, kao što su string, broj, datum, itd.


Opis primitivni tipovi podataka:

  • NULL- nedostaje vrijednost. Koristi se, na primjer, u upitima.
  • Nedefinisano- prazna, nedefinisana vrednost. Koristi se, na primjer, kada se procjenjuje prosljeđivanje parametara ako je ovaj parametar izostavljen pri pozivanju procedure ili funkcije. Detalji koji imaju složeni tip podataka su po defaultu tipa "Nedefinirano".
  • Boolean- sadrži dvije vrijednosti: Tačno ili Netačno. Koristi se, na primjer, u logičkim izrazima - logički izraz je tipa "Boolean".
  • datum- sadrži datum i vrijeme. Zadana vrijednost je 01/01/01 00:00:00 datum početka naše ere. Vrijeme se mjeri od početka dana. Izraz koji ima literalni tip "datum" piše se na sljedeći način - "00010101000000". Prvo se zapisuje godina, zatim mjesec, zatim datum i vrijeme. Moguć je sljedeći unos: "20041031". Zadano vrijeme je početak dana.
  • Linija- može biti promjenjiva, fiksna ili neograničena dužina. Općenito, preporučuje se korištenje nizova promjenjive dužine.
  • Broj- dubina bita broja je povećana na 38 bita.
  • Tip- služi za određivanje vrsta vrijednosti. Koristi se, na primjer, za poređenje tipova podataka. Nema literale i vraća ga funkcija Type(<Имя типа>) ili TypeValue(<Значение>).

Takođe, ima ih više složeni tipovi podataka. Na primjer, platforma podržava brojne tipove koji su univerzalne kolekcije vrijednosti: niz, struktura, lista vrijednosti, stablo vrijednosti itd.


Tipovi podataka "Univerzalne kolekcije" - lista (skup) objekata podataka bilo koje vrste, čijim se vrijednostima može pristupiti grubom silom ili određenim indeksom (ključem). Numeracija elemenata kolekcije počinje od 0. Svi navedeni tipovi podataka kreiraju se samo programski.

Niz. Predstavlja numeriranu kolekciju vrijednosti proizvoljnog tipa. Elementu niza može se pristupiti preko njegovog indeksa. Elementi niza mogu biti, posebno, drugi nizovi. Ovo vam omogućava da kreirate višedimenzionalne nizove.

Struktura. Predstavlja imenovanu kolekciju koja se sastoji od parova ključ/vrijednost. Ključ može biti samo niz, vrijednost može biti proizvoljnog tipa. Elementu strukture može se pristupiti po vrijednosti njegovog ključa, tj. po imenu. Obično se koristi za pohranjivanje malog broja vrijednosti, od kojih svaka ima jedinstveno ime.

Prepiska. Baš kao i struktura, to je kolekcija parova ključ/vrijednost. Međutim, za razliku od strukture, ključ može biti gotovo bilo kojeg tipa.

Lista vrijednosti. Obično se koristi za rješavanje problema sa interfejsom. Omogućuje vam da izgradite dinamičke skupove vrijednosti i manipulirate njima (dodavanje, uređivanje, brisanje elemenata, sortiranje). Može sadržavati vrijednosti bilo koje vrste; osim toga, tipovi pohranjenih vrijednosti na jednoj listi mogu biti različiti.

Tabela vrijednosti. Tabela vrijednosti vam omogućava da izgradite i manipulirate dinamičkim skupovima vrijednosti. Može se popuniti vrijednostima bilo koje vrste, a u jednoj tabeli tipovi pohranjenih vrijednosti mogu biti različiti.

Drvo vrijednosti. Stablo vrijednosti je dinamički generirani skup vrijednosti bilo kojeg tipa, sličan tablici vrijednosti. Za razliku od tablice vrijednosti, redovi stabla vrijednosti mogu formirati hijerarhijske strukture: svaki red u stablu može imati skup podređenih redova, svaki od podređenih redova može zauzvrat također imati skup podređenih redova, itd. U ovom slučaju, traženje vrijednosti, sortiranje i dobijanje rezultata može se izvršiti ili prema trenutnom nivou hijerarhije, ili uključiti sve podređene.

COMSafeArray. Predstavlja omotač objekta preko višedimenzionalnog SAFEARRAY niza

Procedura SelectFromFileClick(Element) // Odabir datoteke sa viewingFileSelectionDialog = NewFileSelectionDialog(FileSelectionDialogMode.Open); FileSelectionDialog.Directory = ""; FileSelectDialog.Preview = Tačno; FileSelectionDialog.FilterIndex = 0; Ako FileSelectDialog.Select() onda je datoteka = Nova datoteka(FileSelectDialog.FullFileName); Slika = NewValueStorage(NewImage(FileSelectionDialog.FullFileName)); DisplayImage(); endIf; Kraj procedure

THIS_KEYWORD
<Это конструкция языка>,
<Это конструкция языка>
THIS_FUNCTION(<Это конструкция языка>)

U pravilima koja opisuju jezik upita, jezičke konstrukcije su naznačene u uglatim zagradama. Ključne riječi i nazivi funkcija opisani su velikim slovima.

Jezičke konstrukcije mogu sadržavati opcione elemente - ključne riječi itd. U pravilima koja opisuju jezik upita, neobavezni elementi su zatvoreni u uglastim zagradama "[" i "]":

[OVO JE NEOBAVEZNA RIJEČ] [<Это необязательная конструкция>]

U nekim slučajevima, dizajn jezika može koristiti jedan od nekoliko alternativnih elemenata. Takvi elementi u pravilima su navedeni kroz okomitu traku “|”:

EITHER_THIS_WORD | ILI OVA_RIJEČ
<Либо эта конструкция> | <Либо эта конструкция>

Opisi svih konstrukcija su popraćeni primjerima koji objašnjavaju kako se koriste u jeziku upita.

Komentari u jeziku upita

Tijelo zahtjeva može uključiti komentare. Komentar se smatra dijelom reda koji počinje nizom znakova // i nastavlja se do kraja reda:

// Ovo je komentar.

Komentari se zanemaruju kada se zahtjev izvrši.

Dvojezično predstavljanje ključnih riječi

Jedna od značajnih karakteristika jezika upita 1C: Enterprise je da, kao iu ugrađenom jeziku, sve ključne riječi imaju dva pravopisa: na ruskom i engleskom. Kasnije u ovom poglavlju, navedeni su ruski pravopisi ključnih riječi. Ispod je tabela koja prikazuje korespondenciju između ruskog i engleskog i opcije pravopisa za ključne riječi u jeziku upita...... (izostavljeno)

Glavni dijelovi teksta zahtjeva

Tekst zahtjeva se može opisati sljedećim pravilom:

<Описание запроса>
[<Объединение запросов>]
[<Упорядочивание результатов>]
[AUTO NARUDŽBA]
[<Описание итогов>]

Kao što se može vidjeti iz ovog pravila, tekst zahtjeva sastoji se od nekoliko dijelova, odnosno sekcija:

U sekciji<Упорядочивание результатов>Možete definirati uvjete redosleda za redove u rezultatu upita. Redoslijed rezultata upita razmatra se na stranici 324.

AUTO ORDER vam omogućava da omogućite automatsko sređivanje redova u rezultatu upita. Ovaj način rada je opisan na stranici 331.

U sekciji<Описание итогов>Možete odrediti koje ukupne vrijednosti treba izračunati u upitu. Ovaj odjeljak je opisan na stranici 332.

Zahtjev za opis

Kao što je već spomenuto, tekst zahtjeva mora nužno sadržavati odjeljak opisa zahtjeva, koji definira:

Polja koja će biti sadržana u rezultatu zahtjeva;

Izvori podataka upita - izvorne tabele;

Uslovi koji utiču na odabir podataka u zahtjevu;

Redoslijed kojim se grupišu rezultati upita.

Odjeljak opisa zahtjeva sastoji se od nekoliko međusobno povezanih rečenica:

SELECT [DIFFERENT] [PRVI<Количество>]
<Список полей выборки>
[OD<Список источников>]
[GDJE<Условие отбора>]
[GROUP BY<Поля группировки>]
[IMATI<Условие отбора>]
[ZA PROMJENU [<Список таблиц верхнего уровня>]]

Opis zahtjeva počinje potrebnom ključnom riječi ODABIR.

Ponuda GDJE<Условие отбора> omogućava filtriranje rezultata upita. Rezultat uključuje samo one zapise za koje je navedeni uvjet istinit. Pravila za opisivanje uslova odabira razmatrana su na stranici 315.

Ponuda ZA PROMJENU namijenjen je da ukaže na potrebu blokiranja podataka koji se čitaju u transakciji.

Ponuda GRUPA omogućava vam da opišete redoslijed u kojem su grupisani rezultati upita. Grupisanje je detaljno razmotreno na stranici 316.

Ponuda HAVING omogućava vam da nametnete uslove grupisanju rezultata. Opisano na strani 318.

Svi primjeri upita u ovom poglavlju daju tekst upita i rezultat upita. Pretpostavlja se da se tekst zahtjeva prosljeđuje kao parametar metodi Execute objekta Request.

Dajemo primjer prilično jednostavnog upita koji se sastoji od jedne SELECT naredbe i liste polja za odabir.

//Morate prikazati listu faktura u izvještaju.

Rezultat upita:

Upotreba riječi DRUGAČIJE

U mnogim situacijama poželjno je da se isti redovi u izvještaju ne ponavljaju.

// Potrebno je saznati koje su ugovorne strane općenito
// roba je isporučena za period.
Odaberite Document.Faktura.Counterparty

Rezultat upita:

Može se vidjeti da rezultat upita sadrži mnogo redova koji se ponavljaju, što smanjuje njegovu jasnoću. Da bi se izbjeglo ponavljanje, ključnu riječ DIFFERENT treba navesti u opisu upita.

Odaberite Različiti dokument.Faktura.Counterparty

Rezultat upita:

Upotreba riječi PRVI

U nekim slučajevima potrebno je prikazati ograničen broj redova u izvještaju. Da biste to učinili, u opisu upita navedite ključnu riječ FIRST, a nakon nje - potreban broj redova.

// Potrebno je odabrati pet najskupljih roba.
// Odabir treba izvršiti u opadajućem redoslijedu cijene proizvoda.
Odaberite Prvo 5
Imenik.Nomenklatura.Naziv,
Directory.Nomenclature.PurchasingPrice
Sortiraj po imeniku.Nomenklaturi.PurchasePrice padajuće

Rezultat upita:

Opis polja za izbor

Nakon obavezne ključne riječi SELECT (i kvalifikacionih riječi DIFFERENT i FIRST), u tekstu zahtjeva navedena je lista polja za odabir. Ova polja će se obraditi prilikom preuzimanja podataka u zahtjevu. Rezultat upita će također imati skup polja definiranih na ovoj listi. Polja za odabir su opisana prema sljedećim pravilima:

<Описание поля>[ [KAKO]<Псевдоним поля>]

<Выражение>[.<Группа полей>]

Lista polja za izbor sastoji se od jednog ili više elemenata odvojenih zarezima. Svaki<Поле выборки>sastoji se od opisa polja za odabir i opcionalnog pseudonima polja.

Umjesto da navedete polja u listi izbora, možete navesti zvjezdicu “*”. To će značiti da rezultat upita mora sadržavati sva polja koja se nalaze u izvornim tabelama - izvori podataka upita opisani u listi izvora.

Komentiraj! Kada navedete zvjezdicu “*” u popisu polja za odabir, virtuelna polja izvornih tabela nisu uključena u rezultat.

<Описание поля>definira kako se vrijednosti polja trebaju generirati. U najjednostavnijem slučaju, polje za odabir je veza do polja u izvornoj tabeli. Veza se može specificirati specificiranjem tabele koja sadrži ovo polje ili bez navođenja same tabele. Dereferenciranje polja se raspravlja na.

Općenito, polje za odabir može biti ne samo veza do polja u izvornoj tabeli, već i neka<Выражение>. Izrazi su detaljno razmotreni na stranici 344.

Rezultati upita mogu se grupirati pomoću agregatnih funkcija navedenih kao izraza u odabranim poljima. Grupiranje rezultata upita razmatra se na stranici 316. Funkcije agregata opisane su na stranici 345.

Svakom polju za odabir može se dodijeliti pseudonim. U budućnosti se može koristiti za lakši pristup ovom polju. Upotreba pseudonima polja je razmotrena u nastavku.

<Группа полей>može se specificirati samo kada polje za odabir pokazuje na ugniježđenu tablicu. U ovom slučaju možete odrediti koja polja treba obraditi u odabiru ugniježđene tablice. Ako grupa polja nije navedena, sva polja ugniježđene tablice će biti obrađena u odabiru. Pristup ugniježđenim tablicama opisan je u .

Pseudonimi polja u listi izbora

Ako dodijelite pseudonim nekom polju za odabir, kasnije se možete pozvati na ovo polje koristeći njegov pseudonim u klauzulama ORDER BY i TOTAL, kao i kada radite s rezultatom upita. Takav tretman može biti praktičniji i vizualniji, au nekim slučajevima i jedini mogući.

Ključna riječ HOW može prethoditi aliasu polja. Ova riječ možda uopće nije navedena, ali ako je navedena, povećava se vidljivost i čitljivost teksta zahtjeva.

Alijasi polja se postavljaju u skladu sa pravilima za dodeljivanje identifikatora varijabli. Alijasi u zahtjevu ne mogu biti isti.

Dodjeljivanje pseudonima poljima samo po sebi ne utječe na odabir podataka u upitu.

// Mora biti odabrano iz direktorija proizvoda
// nazivi robe i nazivi grupa.
Izaberi
Imenik. Nomenklatura Naziv kao proizvod,
Imenik. Nomenklatura.Parent.Name As Group
od
Imenik.Nomenklatura

Rezultat upita:

Imajte na umu da se polja u rezultatu upita polja nazivaju "Stavka" i "Grupa". Ako pseudonimi polja nisu navedeni, polja u rezultatu upita bi se zvala "Ime" i "Name1" (nazivi polja u rezultatu upita ne mogu se podudarati, tako da se "1" automatski dodaje imenu drugog polja), što je mnogo manje jasno.

Ugniježđene tabele u listi polja za izbor

Polje na listi za odabir može referencirati na ugniježđenu tablicu u izvoru podataka upita. U ovom slučaju, polje rezultata upita će biti tipa Query Result, odnosno sadržavat će ugniježđeni rezultat upita generiran na osnovu ugniježđene izvorne tablice.

Prema zadanim postavkama, sva polja ugniježđene tablice - izvora podataka - su uključena u ugniježđeni rezultat. Moguće je eksplicitno definirati grupu polja koja bi trebala biti sadržana u ugniježđenom rezultatu upita. Grupa ugniježđenih polja rezultata opisuje se prema sljedećem pravilu:

(<Список вложенных полей>) | *

<Вложенное поле [, <Вложенное поле>[, ...] ]

<Список вложенных полей>sastoji se od jednog ili više elemenata odvojenih zarezima. Ako se lista sastoji od jednog elementa, ne mora biti stavljena u zagrade.

Umjesto navođenja ugniježđenih polja, možete navesti zvjezdicu “*”; to će značiti da rezultat ugniježđenog upita mora sadržavati sva polja koja se nalaze u ugniježđenoj tabeli.

<Выражение>[[KAKO]<Псевдоним поля>]

<Вложенное поле>može predstavljati neki izraz. U najjednostavnijem slučaju<Выражение>je referenca na polje u ugniježđenoj tabeli. Izrazi su detaljno razmotreni na stranici 344.

Svakom ugniježđenom polju može se dodijeliti pseudonim. Dalje<Псевдоним поля>može se koristiti za praktičniji pristup ovom polju, slično pseudonimima za polja u listi za odabir - pogledajte odjeljak “Pseudonim za polja u listi za odabir” na

Alijasi se mogu dodijeliti ugniježđenim poljima bez obzira na to da li je pseudonim dodijeljen samoj ugniježđenoj tablici.

//U izvještaju je potrebno prikazati specifikaciju računa,
// sam dokument, nomenklatura i količina.
Izaberi

Dokument.Račun.Sastav.(Nomenklatura kao proizvod, količina)

Rezultat upita:

Veza Compound
Proizvod Količina
Traperice za žene 4
Traperice za žene 5
Majica "Kaubojka" 5
Faktura 00005 od 24.02.2002 0:00:00 Traperice za žene 1
Traperice za žene 1
Mojdodir "Akvarijum" 5
Sudoper "Lily" 8
Mikser "Ultra" 10

Imajte na umu da je polje “Sastav” rezultata upita ugniježđena tabela koja ima polja “Nomenklatura” i “Količina”.

//Prikaži sva polja tabelarnog dijela računa u izvještaj.
Izaberi
Dokument.Račun.Link,
Dokument.Račun.Sastav.*

Svrha IZ klauzule je da odredi listu izvornih tabela - izvora podataka koji se koriste u datom SELECT izrazu.

Treba napomenuti da je IZ klauzula u jeziku upita opciona. Može se izostaviti ako su izvori podataka u potpunosti kvalificirani u opisu liste polja za odabir sadržan u klauzuli SELECT. Imajte na umu da određeni broj primjera u prethodnim odjeljcima nije sadržavao IZ klauzulu.

Nakon ključne riječi IZ, navodi se lista izvora. Općenito, lista izvora je opisana sljedećim skupom pravila:

<Источник>[, <Источник>[, ...]]

Izvori podataka upita navedeni su u listi izvora, odvojeni zarezima. Svaki<Источник>lista izvora mora sadržavati opis izvora; osim toga, može se specificirati<Перечень соединений>- pravila za povezivanje izvora sa drugim izvorima. Opisane su specifikacije povezivanja.

<Описание источника> [ <Перечень соединений> ]

Ako je izvor podataka tablica baze podataka,<Описание источника>sadrži<Имя таблицы>.

<Таблица>[ [KAKO]<Псевдоним источника>]

Ako je izvorna tabela virtuelna, možete odrediti<Параметры>njegovo formiranje. Parametri virtuelne tabele su detaljno opisani u odeljku „Izvori podataka upita“.

<Имя таблицы> [(<Параметры>)] | <Описание запроса>

Potupit također može djelovati kao izvor podataka upita; u ovom slučaju izvorni opis sadrži<Описание запроса>. Upotreba ugniježđenih upita je opisana na.

Opis izvora podataka također može dodijeliti njegov alias. Dalje<Псевдоним источника>može se koristiti za lakši pristup ovom izvoru. Korištenje pseudonima izvora podataka raspravlja se na.

Specifikacije veze

Prilikom definiranja više izvora u izvornoj listi, za svaki zapis iz prve izvorne tablice, vrši se odabir iz druge izvorne tablice i tako dalje. Dakle, upit rezultira svim mogućim kombinacijama svih zapisa iz svih specificiranih izvora.

Rezultat upita:

Counterparty Banka
Dobavljači JSCB InvestBank
Dobavljači JSCB PromStroyBank
Fabrika pletiva "Zarya" JSCB InvestBank
Fabrika pletiva "Zarya" JSCB PromStroyBank
Fabrika teksas odeće JSCB InvestBank
Fabrika teksas odeće JSCB PromStroyBank
Kupci JSCB InvestBank
Kupci JSCB PromStroyBank
Sajam odeće JSCB InvestBank
Sajam odeće JSCB PromStroyBank
Trgovačka kuća "Budenovski" JSCB InvestBank
Trgovačka kuća "Budenovski" JSCB PromStroyBank
Paviljon 45 na veletržnici JSCB InvestBank
Paviljon 45 na veletržnici JSCB PromStroyBank
Bavarska - porculan JSCB InvestBank
Bavarska - porculan JSCB PromStroyBank
Fabrika teksas odeće JSCB InvestBank
Fabrika teksas odeće JSCB PromStroyBank
JSCB PromStroyBank JSCB InvestBank
JSCB PromStroyBank JSCB PromStroyBank

Rezultat upita sadrži kombinacije svih ugovornih strana sa svim bankama. Takav rezultat po pravilu sam po sebi nema smisla. Tipično, kombinacije zapisa iz različitih izvornih tabela moraju biti ograničene nekim uslovima. Moguće je u jeziku upita opisati takvu kombinaciju izvora specificiranjem samih izvora i definisanjem uslova pod kojima kombinacije zapisa iz ovih izvora treba da budu uključene u rezultat upita.

Postoji nekoliko vrsta veza, koje se opisuju sljedećim pravilima:

<Соединение> [<Перечень соединений>]

Uglavnom<Перечень соединений>može sadržavati i opisati ne samo jednu vezu (dva izvora), već i nekoliko veza više izvora odjednom.

[INTERNO] PRIDRUŽI SE<Описание источника>BY<Условие отбора> |

LIJEVO [VANJSKO] PRIDRUŽENJE<Описание источника>BY<Условие отбора> |

DESNO [VANJSKO] PRIDRUŽENJE<Описание источника>BY<Условие отбора> |

FULL (OUTER) JOIN<Описание источника>BY<Условие отбора>

<Условие отбора>sadrži uslove prema kojima selekcija mora kombinovati podatke iz originalnih tabela - izvora upita. Pravila za opisivanje uslova u jeziku upita razmatrana su na stranici 357.

Ključne riječi LIJEVO, DESNO i FULL pojašnjavaju prirodu veze. Riječi INTERNAL ili EXTERNAL možda uopće nisu specificirane; one povećavaju jasnoću i čitljivost teksta zahtjeva.

Izvori koji se pridružuju nisu ekvivalentni jedan drugom, au nekim slučajevima rezultat zavisi od toga koja je tabela navedena prva, prije JOIN ključne riječi (lijevo od nje) i koja je tabela druga (desno).

[INTERNALNO] PRIDRUŽIVANJE znači da iz obje izvorne tablice – izvora podataka, samo one kombinacije zapisa koje ispunjavaju specificirani uvjet moraju biti uključene u rezultat upita. Preostali zapisi nisu uključeni u rezultat.

// Treba saznati koje banke su u isto vrijeme
// druge strane (prisutna su ista imena
//i u imeniku Counterparties iu imeniku Banke).
Izaberi

Banks.Link Kako do banke
Od

Inner Join
Imenik.Banke Kako Banke
By

Rezultat upita:

Counterparty Banka
JSCB PromStroyBank JSCB PromStroyBank

LEFT [OUTER] JOIN znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Ali, za razliku od internog spajanja, rezultat upita mora uključiti i zapise iz prvog izvora (označenih lijevo od riječi JOIN) za koje nisu pronađeni zapisi iz drugog izvora koji odgovaraju uvjetu.

Na ovaj način, rezultat upita će uključiti sve zapise iz prvog izvora; oni će biti spojeni sa zapisima iz drugog izvora ako je ispunjen specificirani uslov. Linije rezultata upita za koje nisu pronađeni zapisi iz drugog izvora koji odgovaraju uvjetu sadržavat će NULL u poljima generiranim na osnovu zapisa iz ovog izvora.

//U izvještaju je potrebno prikazati sve ugovorne strane, i za njih
// koji je ujedno i banka - navedite link do banke.
Izaberi
Counterparties.Link As Counterparty,
Banks.Link Kako do banke
Od
Imenik.Counterparties Kako Counterparties
Lijevo vanjsko spajanje
Imenik.Banke Kako Banke
By
Counterparties.Name = Banke.Name

Rezultat upita:

PRAVI [VANJSKI] JOIN znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Osim toga, rezultat upita mora uključiti i zapise iz drugog izvora (označeno desno od riječi CONNECTION) za koje nisu pronađeni zapisi iz prvog izvora koji odgovaraju uvjetu.

Dakle, rezultat upita će uključiti sve zapise iz drugog izvora; oni će biti spojeni sa zapisima iz prvog izvora ako je ispunjen specificirani uslov. Linije rezultata upita za koje nisu pronađeni zapisi iz prvog izvora koji odgovaraju uvjetu sadržavat će NULL u poljima generiranim na osnovu zapisa iz ovog izvora.

//U izvještaju je potrebno prikazati sve banke i za njih
// ko je ujedno i druga ugovorna strana - naznači vezu do druge ugovorne strane.
ODABIR
Counterparties.Link As Counterparty,
Banke. Link Like Bank
OD
Imenik.Counterparties Kako Counterparties
Desni vanjski spoj
Imenik.Banke Kako Banke
By
Counterparties.Name = Banke.Name

Rezultat upita:

Counterparty Banka
NULL JSCB InvestBank
JSCB PromStroyBank JSCB PromStroyBank

FULL [OUTER] JOIN znači da rezultat upita mora uključivati ​​kombinacije zapisa iz obje izvorne tablice koje ispunjavaju specificirani uvjet. Osim toga, rezultat upita mora uključiti i one zapise iz oba izvora za koje nisu pronađena podudaranja.

Na ovaj način, rezultat upita će uključiti sve zapise iz oba izvora; oni će biti povezani jedni s drugima kada se ispuni navedeni uvjet. Linije rezultata upita za koje nisu pronađeni zapisi iz bilo kojeg izvora koji odgovaraju uvjetu sadržavat će NULL u poljima generiranim na osnovu zapisa iz tog izvora.

// U izvještaju je potrebno prikazati sve ugovorne strane i sve banke,
// a oni koji su oboje - ispisati u jednom redu.
Izaberi
Counterparties.Link As Counterparty,
Banks.Link Kako do banke
Od
Imenik.Counterparties Kako Counterparties
Full Outer Join
Imenik.Banke Kako Banke
By
Counterparties.Name = Banke.Name

Rezultat upita:

Alijasi izvora podataka

Ako dodijelite pseudonim izvoru podataka, tada se u budućnosti ovom izvoru može pristupiti pomoću ovog pseudonima (i više mu se ne može pristupiti navođenjem imena tablice). Takav tretman može biti praktičniji i vizualniji, au nekim slučajevima i jedini mogući.

Alias ​​se postavlja u skladu s pravilima za dodjelu identifikatora varijabli. Alijasi u zahtjevu ne mogu biti isti.

Ključna riječ HOW može prethoditi izvornom aliasu. Ova riječ možda uopće nije navedena, ali ako je navedena, povećava se vidljivost i čitljivost teksta zahtjeva.

Dodjeljivanje aliasa izvorima samo po sebi ne utječe na odabir podataka u upitu.

// Ovaj primjer pokazuje upotrebu
// u popisu polja za odabir alias proizvoda,
// dodijeljen izvornoj tablici Directory.Nomenclature
Izaberi
Ime proizvoda,
Proizvod.Roditelj
Od
Imenik.Nomenklatura.Proizvod

Ugniježđene tabele u izvornoj listi

Lista izvora može uključivati ​​i ugniježđene tabele – tabelarne dijelove priručnika i dokumenata.

//U izvještaju je potrebno prikazati specifikaciju računa -
// prikazuje sam dokument, nomenklaturu i količinu.
//Popis izvora sadrži ugniježđenu tablicu “Sastav” -
// tabelarni dio računa.
// Izbor je ograničen na osam zapisa kako se primjer ne bi preopteretio.
Odaberite Prvi 8
Veza, nomenklatura, količina
Od
Dokument.Račun.Sastav

Rezultat upita:

Veza Nomenklatura Količina
Faktura 00007 od 25.02.2002 21:03:21 Traperice za žene 4
Faktura 00006 od 25.02.2002 0:00:00 Traperice za žene 5
Faktura 00006 od 25.02.2002 0:00:00 Majica "Kaubojka" 5
Račun 00005 od 03.01.2002 20:58:28 Traperice za žene 1
Faktura 00004 od 03/01/2002 20:50:40 Traperice za žene 1
Faktura 00003 od 23.02.2002 0:00:00 Mojdodir "Akvarijum" 5
Faktura 00003 od 23.02.2002 0:00:00 Sudoper "Lily" 8
Faktura 00003 od 23.02.2002 0:00:00 Mikser "Ultra" 10

Imajte na umu da kada navedete ugniježđenu tablicu u listi izvora, moguće je pristupiti i poljima same ugniježđene tablice i poljima tabele najviše razine (one koja sadrži ugniježđenu tablicu). U tom slučaju se pristupa polju “Link” samog dokumenta.

Potupiti u izvornoj listi

Na listi izvora upita, potupit se može koristiti kao izvorna tabela. U ovom slučaju, izvorni opis sadrži opis potupita. Opis ugniježđenog upita se kompajlira na potpuno isti način kao i običan: vidi

Upotreba ugniježđenog upita kao izvora podataka ne razlikuje se od korištenja tabele baze podataka. Sva polja opisana u listi polja za izbor podupita dostupna su kao polja takvog izvora.

Rezultat će biti potpuno isti kao u prethodnom primjeru.

Generisanje izveštaja

Rad sa zahtjevima

Za rad sa upitima koristi se ugrađeni objekt jezika Zahtjev . Omogućava vam da dobijete informacije pohranjene u poljima baze podataka u obliku uzorka formiranog prema određenim pravilima.

Izvori podataka upita

Upit prima početne informacije iz skupa tabela. Ove tabele predstavljaju podatke iz stvarnih tabela baze podataka u obliku koji se lako analizira. Mogu se podijeliti u dvije velike grupe: stvarne i virtualne.

Prave tabele, zauzvrat, mogu biti objektne (reference) ili neobjektne (nereference):

Posebnost stvarnih tabela je da sadrže podatke iz jedne stvarne tabele pohranjene u bazi podataka. Na primjer, stvarne tablice su tablica “Directory.Clients” koja odgovara direktoriju “Klijentsi” ili tablica “Registar akumulacije. Preostali materijal” koja odgovara registru akumulacije “Preostali materijal”.

Virtuelne tabele se formiraju prvenstveno od podataka iz više tabela baze podataka. Na primjer, virtuelna tabela je tabela "Registar akumulacije. Ostaci materijala. Stanja i promet", formirana iz nekoliko tabela registra akumulacije "Ostaci materijala". Ponekad se virtuelne tabele mogu formirati iz jedne realne tabele (na primer, virtuelna tabela “Prices.SliceLast” se formira na osnovu tabele registra informacija “Cijene”). Međutim, ono što je zajedničko svim virtualnim tablicama je da im se može dati niz parametara koji će odrediti koji podaci su uključeni u te virtualne tablice. Skup takvih parametara može biti različit za različite virtualne tablice, a određen je podacima pohranjenim u izvornim tablicama baze podataka.

Prave tablice se dijele na objektne (referentne) i neobjektne (nereferentne) tablice.

Tabele objekata (referentnih) pružaju informacije o tipovima referentnih podataka (direktoriji, dokumenti, planovi za tipove karakteristika, itd.). A u ne-objektnom (nereferentnom) - svi ostali tipovi podataka (konstante, registri, itd.).

Karakteristična karakteristika tabela objekata (referentnih) je da sadrže polje “Link” koje sadrži vezu do trenutnog zapisa. Osim toga, za takve tabele moguće je dobiti prilagođeni prikaz objekta, te tabele mogu biti hijerarhijske i polja takvih tabela mogu sadržati ugnežđene tabele (delove tabele).

Jezik upita

Algoritam po kojem će se podaci birati iz izvornih tabela zahtjeva opisan je u tekstu zahtjeva na posebnom jeziku - jezik upita. Tekst zahtjeva sastoji se iz nekoliko dijelova:

    opis zahtjeva,

    spajanje upita

    naručivanje rezultata,

    auto naručivanje,

    opis rezultata.

Jedini obavezan dio zahtjeva je prvi - opis zahtjeva. Svi ostali su prisutni po potrebi.

Zahtjev za opis definira izvore podataka, polja za odabir, grupisanje, itd.

Spajanje upita određuje kako će se kombinirati rezultati višestrukih upita.

Organiziranje rezultata definira uvjete za redoslijed za redove rezultata upita.

Auto-order omogućava vam da omogućite automatsko poređanje redova rezultata upita.

Opis rezultata određuje koje zbrojeve treba izračunati u upitu i kako grupirati rezultate.

Izvještaj Registar dokumenata Pružanje usluga

Prvi izveštaj na osnovu kojeg ćemo početi da se upoznajemo sa jezikom upita biće izveštaj „Registar dokumenata za pružanje usluga“. Ovaj izvještaj će jednostavno prikazati listu dokumenata „Pružanje usluga“ koji postoje u bazi podataka po redoslijedu njihovih datuma i brojeva.

Kreirajmo novi objekat konfiguracije u konfiguratoru: Izveštaj „Registar dokumenata pružanja usluga“. Idemo na karticu "Layout" i pokrenimo dizajner izlaznog obrasca.

Kao izvor podataka za zahtjev, izabraćemo objektnu (referentnu) tabelu dokumenata „Pružanje usluge“. Iz ove tabele biramo sledeća polja:

  • "majstor",

    "Klijent":

Imajte na umu da kada odaberete polja “Skladište”, “Master” i “Kupac”, polja “Skladište.Pregled”, “Master.Prikaz” i “Pregled kupca” također se biraju na listi odabranih polja. Činjenica je da se u opštem slučaju pretpostavlja da će ova polja biti prikazana u ćelijama dokumenta tabele. Budući da su odgovarajuća polja “Skladište”, “Master” i “Kupac” referentna polja, ako se referentna vrijednost preda kao vrijednost parametra za izlaz, sistem će izvršiti dodatni zahtjev za dobijanje reprezentacije ovog polja (koja će biti prikazano u dokumentu), što rezultira sporijim izlazom izvještaja. Stoga, prilikom odabira referentnih polja, sistem nudi da se reprezentacije referentnih polja odmah uvrste u listu odabranih polja, u očekivanju da će se ona koristiti za izlaz u dokument.

Nakon toga, idemo na karticu "Narudžba" i naznačimo da se rezultat zahtjeva prvo mora poredati po vrijednosti polja "Datum", a zatim po vrijednosti polja "Pružanje usluge. Link":

Idemo na karticu "Izvještaj" i poništimo oznaku "Koristi alat za izradu izvještaja":

Poništimo oznaku "Koristi alat za izradu izvještaja"...

Kliknite na "OK". Dizajner će generirati obrazac izvještaja i izgled. Otvorimo modul obrasca i u njemu pronađemo proceduru „Registar dokumenata pružanja usluga“. U ovoj proceduri, kako će se generisati tekst zahteva koji će se koristiti za dobijanje podataka koji nas zanimaju:

Query.Text = “ODABIR

Pružanje usluga. Datum AS Datum,

Pružanje usluga Broj AS Broj,

Pružanje usluga.Skladište,

Pružanje usluga. Skladište. Prezentacija,

Pružanje usluga. Master,

Pružanje usluga Master Prezentacija,

Pružanje usluga Klijent,

Pružanje usluga Klijent, zastupanje

Dokument.Pružanje usluga KAKO PružitiUsluge

SORT BY

Tekst zahtjeva počinje, kao što smo već rekli, dijelom opisa zahtjeva:

I Pružanje usluge Datum AS Datum,

I Pružanje usluga Broj AS Broj,

I Pružanje usluga Skladište,

I Pružanje usluga Skladište Prezentacija,

I Pružanje usluga. Master,

I Pružanje usluga Master Prezentacija,

I Pružanje usluga Klijent,

1 Pružanje usluga Klijenti Zastupanje

I Dokument Pružanje usluga KAKO pružati usluge

Opis zahtjeva počinje potrebnom ključnom riječi ODABIR. Nakon toga slijedi lista odabranih polja koja opisuje polja koja bi trebala biti sadržana u rezultatu upita. Ova lista može sadržavati i sama polja i neke izraze izračunate na osnovu vrijednosti polja.

Nakon ključne riječi IZ, naznačeni su izvori podataka - originalne tabele upita, čiji se sadržaj obrađuje u upitu. U ovom slučaju, ovo je objektna (referentna) tabela “Dokument.Pružanje usluge”. Nakon ključne riječi KAKO naznačeno pseudonim izvor podataka. U našem slučaju, ovo je „Pružanje usluga“. U budućnosti, ovom izvoru podataka može se pristupiti u tijelu zahtjeva koristeći pseudonim.

Ovaj poziv vidimo u opisu polja za odabir:

| Pružanje usluga. Datum AS Datum,

| Pružanje usluga Broj AS Broj,

| Pružanje usluga.Skladište,

| Pružanje usluga. Skladište. Prezentacija,

| Pružanje usluga. Master,

| Pružanje usluga Master Prezentacija,

| Pružanje usluga Klijent,

| Pružanje usluga Klijent, zastupanje

Polja za odabir također mogu imati pseudonime, koji se mogu koristiti za upućivanje na ovo polje kasnije u tekstu zahtjeva. U našem slučaju, to su pseudonimi „Datum“ i „Broj“.

Nakon opisnog dijela upita u našem primjeru dolazi dio za naručivanje rezultata:

|ORDER BY

| Datum, | Broj";

Ponuda SORT BY omogućava vam da sortirate redove u rezultatu upita. Nakon ove ključne klauzule nalazi se izraz za naručivanje, koji je, općenito, lista polja (izraza) i izlazni redoslijed. U našem slučaju, redosled će se prvo izvršiti preko polja za izbor, kojem se pristupa preko aliasa – “Šifra”, a zatim preko polja – “Broj”. U oba slučaja redoslijed sortiranja će biti rastući, što je zadani redoslijed sortiranja.

Sada obratimo pažnju na to kako se rezultat upita prikazuje u dokumentu proračunske tablice.

Postupak Registar dokumenata pružanja usluga (TabDoc) Izvoz

//((CONSTRUCTOR_OUTPUT_FORM(Registar dokumenata pružanja usluga)// Ovaj fragment je izgradio konstruktor.// Prilikom ponovne upotrebe konstruktora,// uveden ručno promjene biće izgubljen!!!

Layout = GetLayout("Registar usluga pružanja dokumenata"); Zahtjev = Novi zahtjev;

Rezultat = Query.Run();

HeaderArea = Layout.GetArea("Header"); PovršinaPodrum =

Layout.GetArea("TableFooter"); DetailRecordsArea =

TabDoc.Output(TableHeadArea); TabDoc.StartAutogruttingRows();

SelectDetails = Result.Select();

Dok SelectDetails.NextFunctions() petlja

AreaDetailRecords.Parameters.Fill(SelectionDetails);

TabDoc.Output(RecordsDetailsArea,DetailsSelection.Level()); EndCycle;

/L)CONSTRUCTOR_OUTPUT_FORM EndProcedure

Obrazac izvještaja sadrži kontrolni element TabularDocumentField sa nazivom “TabDoc”, koji je ispunjen podacima na osnovu izgleda koji je generisao dizajner.

Na početku postupka dobijamo izgled izveštaja, iz kojeg zatim dobijamo oblasti koje postoje u njemu u odgovarajuće varijable:

HeaderArea = Layout.GetArea("Header"); PovršinaPodrum =

Layout.GetArea("Podrum"); TableHeaderArea =

Layout.GetArea("TableHeader"); TableFooterArea =

Layout.GetArea("TableFooter"");DetailRecordsArea =

Layout.GetArea("Detalji");

Zatim brišemo dokument proračunske tablice i prikazujemo ona područja koja ne sadrže podatke dobivene iz rezultata upita:

TabDoc.Clear(); TabDoc.Output(AreaHeader);

TabDoc.Output(TableHeadArea); TabDoc.StartAutoGroupingRows();

U posljednjoj liniji dizajner je dodao početak automatskog grupisanja redova. U ovom primjeru nemamo redove koje treba grupisati, ali dizajner po defaultu uvijek predlaže grupiranje redova u dokumentu proračunske tablice. Ovaj poziv neće uticati na brzinu izlaza izveštaja, tako da ćemo tekst konstruktora ostaviti nepromenjenim.

Nakon ovoga, dobijamo izbor iz rezultata upita, kroz koji prolazimo u petlji:

U svakoj iteraciji petlje popunjavamo parametre prethodno dobivenog područja izgleda vrijednostima dobijenim iz sljedećeg uzorka rezultata upita i prikazujemo ovo područje u dokumentu proračunske tablice.

Na kraju postupka, prikazujemo konačna područja izgleda u dokumentu proračunske tablice:

TabDoc.FinishAutoGroupingRows();

TabDoc.Output(TableFooterArea);

TabDoc.Output(AreaFooter);

Sada pokrenimo 1C:Enterprise u načinu za otklanjanje grešaka i pogledajmo rezultat našeg izvještaja:

Stoga smo, koristeći primjer ovog izvještaja, demonstrirali kako se koristi dizajner izlaznog oblika i upoznali se s nekim osnovnim konstrukcijama jezika upita.

Izvještaj “Ocjena usluge” će sadržati informacije o tome koje su usluge donijele Master of All Trades LLC najveći profit u navedenom periodu. Na primjeru izvještaja “Ocjena usluge” ilustrovaćemo kako odabrati podatke u određenom periodu, kako postaviti parametre upita i kako koristiti podatke iz više tabela u upitu i uključiti sve podatke iz jednog od izvora u rezultat upita.

Kreirajmo novi izvještaj konfiguracijskog objekta "Ocjena usluge". Idemo na karticu "Layouts" i pozovimo konstruktor izlaznog obrasca.

Odaberimo objektnu (referentnu) tabelu imenika „Nomenklatura“ i virtuelnu tabelu registra akumulacije „Prodaja.Promet“. Da bismo eliminisali dvosmislenost imena u upitu, preimenujemo tabelu “Nomenklatura” u “SprNomenclature” (kontekstni meni desnim klikom).

Zatim postavite kursor na tabelu „Promet prodaje“ i pozovite dijalog za unos parametara virtuelne tabele:

Otvorite dijalog za unos parametara virtuelne tabele

Naznačimo da će početak i kraj perioda biti proslijeđeni odgovarajućim parametrima “StartDate” i “EndDate” (simbol “&” ispred imena označava da je ovo parametar zahtjeva):

Zatim iz tabela odaberite polja “SprNomenclature.Link” i “Promet od prodaje.Prihodak”:

SprNomenclature.Presentation

SalesTurnoverRevenueTurnover

Idemo na karticu "Veze" i vidimo da je dizajner već napravio vezu između dvije odabrane tabele - vrijednost promjene registra "Nomenklatura" treba da bude jednaka referenci na element direktorija "Nomenklatura".

Jedino što nam preostaje je da resetujemo oznaku “Sve” za tablicu registara i postavimo je za tabelu direktorija.

Odabrat ćemo sve elemente iz direktorija “Nomenklatura”.

Postavljanje oznake “Sve” na tablici imenika će značiti da će svi elementi biti odabrani iz imenika i tim elementima će biti dodijeljena vrijednost prometa prihoda iz registra. Tako će kao rezultat zahtjeva biti prisutne sve usluge, a za neke od njih će biti prikazan i promet prihoda. Za one usluge koje nisu pružene u odabranom periodu, ništa neće biti naznačeno.

Idemo na karticu "Uvjeti" i postavimo uvjete za odabir elemenata iz direktorija "Nomenklatura". Prilikom postavljanja uslova odabira, ponovo ćemo koristiti parametre upita. Prvi uslov mora biti da odabrani element nije grupa (da biste to učinili, prebacite se na način rada „Prilagođeni uvjeti“).

Drugi uslov mora biti da je odabrana stavka usluga (ovo je “Jednostavan uvjet”):

Ubuduće, prije izvršavanja zahtjeva, proći ćemo odgovarajuću vrijednost nabrajanja u parametar „Tip nomenklature“.

Idemo na karticu “Asocijacije/pseudonim” i odredimo da će prikaz stavke direktorija imati pseudonim “Usluga”, a polje registra imati pseudonim “Prihod”:

Idemo na karticu "Narudžba" i naznačimo da rezultat upita treba sortirati u opadajućem redoslijedu u odnosu na vrijednost polja "Prihod".

Na kartici "Ukupni podaci" utvrđujemo da trebamo prikazati opće zbrojeve, a oni bi trebali biti zbroj vrijednosti u polju "Prihodi":

Na kartici „Izveštaj“ uklonite oznaku „Koristi alatku za pravljenje izveštaja“.

Sada idemo na karticu "Izlazni obrazac". Naznačimo da će se parametri „Datum završetka“ i „Datum početka“ uređivati ​​u obrascu u poljima za unos tipa „Datum“. Za parametar "Vrsta nomenklature", naprotiv, uklonit ćemo oznaku za uređivanje u obliku:

Kliknite na "OK". Platforma će generisati izgled i obrazac za izvještaj.Otvorite modul obrasca i u njemu pronađite proceduru “Ocjena usluge”.

U ovoj proceduri, u dijelu gdje se postavljaju parametri upita, odredit ćemo vrijednost parametra „Vrsta nomenklature“ (ispravke su podebljane):

| LIJEVA KONEKCIJA Registar Akumulacija.Promet,Promet(&Datum početka,

| &Rok trajanja,)

| KAKO PRODAJEM promet

|ORDER BY | Prihod DOWN

|REZULTATI IZNOS (Prihod) PO | Zajednički su";

RequestSetParameterC"Vrsta nomenklature",

Transferi.Vrste nomenklature.Usluga);

Query.SetParameter("Datum početka",Datum početka); Request.SetParameterC"EndDate", EndDate);

Sada pogledajmo tekst zahtjeva koji je generirao konstruktor:

| SprNomenclature.Representation AS Zastupanje,

|SalesTurnover.RevenueTurnover AS Prihod

| Imenik.Nomenklatura AS RefNomenklatura

LIJEVA VEZA Registar Akumulacije.Prodaja.Promet(&Datum početka,

| KAKO PRODAJEM promet

| Softver SalesTurnover.Nomenclature = SprNomenclature.Link

| (RefNomenclature.ThisGroup = False) I

| SprNomenclature.Type of Nomenclature = &Type of Nomenclature

|ORDER BY

| Prihod DOWN

|REZULTATI IZNOS (Prihod) PO

Prvo, kao i obično, dolazi dio opisa zahtjeva i sadrži konstrukcije koje su za nas nove.

Prilikom opisa izvora zahtjeva (nakon ključne riječi IZ) korištena je mogućnost definiranja nekoliko izvora zahtjeva:

| Imenik.Nomenklatura AS RefNomenklatura

|&EndDate,)

| KAKO PRODAJEM promet

| Softver SalesTurnover.Nomenclature = SprNomenclature.Link

U ovom slučaju, evidencija se bira iz dva izvora: “SprNomenklatura” i “Promet prodaje”, sa ključnom rečenicom LIJEVA KONEKCIJA... BY opisuje način na koji će zapisi iz ova dva izvora biti kombinovani.

LIJEVA KONEKCIJA znači da rezultat upita mora uključivati ​​kombinacije zapisa iz oba izvora koji odgovaraju uvjetu specificiranom iza ključne riječi BY. Osim toga, rezultat upita mora uključivati ​​i zapise iz prvog (označenog lijevo od riječi JEDINJENJE) izvor za koji nisu pronađeni zapisi koji odgovaraju uslovu iz drugog izvora.

Za nas nema ništa novo u opisu prvog izvora i uslova veze, ali kada opisujemo drugi izvor koristimo mogućnost postavljanja parametara virtuelne tabele upita:

| RegisterAkumulacije.Prodaja.Promet(&Datum početka, &Završni datum,)

Prvi parametar je početak perioda za izračunavanje zbroja, drugi je kraj perioda. Kao rezultat toga, izvorna tabela će sadržavati samo promet izračunat u prenesenom periodu. Ovdje uvijek treba imati na umu da ako prođemo datum kao ove parametre (a u našem slučaju će to biti slučaj), onda datum također sadrži vrijeme tačno do sekunde.

Ako je unaprijed poznato da korisnika neće zanimati rezultati izvještaja u periodima navedenim s tačnošću od sekundi, tada treba uzeti u obzir sljedeću osobinu: prema zadanim postavkama, vrijeme u datumu je postavljeno na 00 :00:00. Dakle, ako ne preduzmete posebne mere, ispada da kada korisnik podesi period izveštavanja od 01.03.2004. do 31.03.2004. godine, ukupni registri će se računati od početka dana 01.03. 2004 00:00:00 do početka dana 31.03.2004 00:00:00. Dakle, podaci za 31. dan, osim za početak dana, neće biti uključeni u izračun, što će korisnika jako iznenaditi.

Da bi se ova situacija eliminisala, treba uraditi dve stvari.

Prvo, u obrascu izvještaja, ograničite mogućnost korisnika da unese početni i završni datum postavljanjem sastava datuma za odgovarajuća polja za unos kao "Datum":

Odredimo sastav datuma...

Drugo, kada prosljeđujete parametre, koristite ugrađenu funkciju Kraj dana(). Da biste to učinili, vratite se na modul obrasca izvještaja i izvršite potrebne izmjene (dodaci su istaknuti podebljanim):

ProcedureFormActionsRatingServicesGenerate(Button) //((CONSTRUCTOR_WEEKEND_FORM_PROCEDURE_CALL(RatingServices) //Ovaj fragment je izgradio konstruktor. // Prilikom ponovne upotrebe konstruktora, // ručno napravljene promjene će biti izgubljene!!!

TabDoc = FormElements.TableField;

//))CONSTRUCTOR_OUTPUT_FORM_CALL_PROCEDURE

Co. netProcedures

Nastavimo gledati tekst zahtjeva. Kao dio opisa upita, postoji još jedna konstrukcija koja je nova za nas - postavljanje uslova za odabir podataka iz izvornih tabela:

| SprNomenclature.Representation AS Zastupanje,

| SalesTurnover.RevenueTurnover AS Prihod

| Imenik.Nomenklatura AS RefNomenklatura

| LIJEVA VEZA Registar Akumulacije.Prodaja.Promet(&Datum početka,

| &Datum isteka,

| KAKO PRODAJEM promet

| Software SalesTurnover.Nomenclature = SprNomenclature.Ssshka

| SprNomenclature.ThisGroup = False AND

| SprNomenclature.Type of Nomenclature = &Type of Nomenclature

Uslovu odabira uvijek prethodi ključna riječ GDJE. Nakon toga je opisano samo stanje. Imajte na umu da polja izvornih tabela na koje je uslov primenjen možda neće biti uključena u listu izbora (kao u našem slučaju). Osim toga, naš uvjet koristi parametar upita „Tip nomenklature“.

REZULTATI IZNOS (Prihod) PO

Uvijek počinje ključnom riječi REZULTATI, nakon čega slijedi opis koji će iznosi biti prisutni u rezultatu upita. Odmah nakon riječi REZULTATI opisuje agregatne funkcije koje je potrebno izračunati u rezultatima. U našem slučaju će se izračunati iznos u polju „Prihod“. Nakon toga slijedi ključna riječ PO, nakon čega su opisane grupe u kojima se zbrojevi izračunavaju. U našem slučaju ih nema i koristi se samo ključna riječ ČESTI SU,što ukazuje da će se ukupni iznosi izračunati za cijelu tabelu kao cjelinu.

Sada kada smo završili s upoznavanjem s tekstom zahtjeva, pokrenimo 1C:Enterprise u načinu za otklanjanje grešaka i vidimo kako funkcionira naš izvještaj.

Postavimo izvještajni period od 01.03.2004. do 30.04.2004. Rezultat će izgledati ovako:

Sada promijenimo datum završetka u 31.03.2004. i uvjerimo se da su podaci za 31. mart uključeni u izvještaj: