Stanje u virtualnoj tablici 1c. Gumb "Upit" u dizajneru upita

Prilikom organiziranja uzoraka u stvarnim problemima, u velikoj većini slučajeva odabir podataka organiziran je prema određenim kriterijima.

U slučaju kada se odabir vrši iz stvarne tablice, nema poteškoća. Podaci se obrađuju potpuno trivijalno:

U slučaju kada je izvor u upitu virtualna tablica, situacija postaje nešto kompliciranija.


Upitni jezik vam omogućuje da nametnete uvjet za odabir iz virtualnih tablica na dva načina: u klauzuli WHERE i korištenjem parametara virtualne tablice. Obje metode će dovesti do istog rezultata (s iznimkom nekih specifičnih slučajeva), ali, unatoč tome, daleko su od ekvivalenta.

Već znamo da se virtualne tablice nazivaju virtualnim jer se zapravo ne nalaze u bazi podataka. Formiraju se tek u trenutku kada im se uputi zahtjev. Unatoč tome, nama (odnosno onima koji pišu upit) zgodno je virtualne tablice smatrati stvarnim. Što će se dogoditi u sustavu 1C Enterprise 8 kada upit koji smo sastavili i dalje pristupa virtualnoj tablici?

U prvom koraku sustav će izgraditi virtualnu tablicu. U drugom koraku, zapisi će biti odabrani iz rezultirajuće tablice koji zadovoljavaju uvjet naveden u klauzuli WHERE:
Jasno je vidljivo da konačni uzorak neće uključivati ​​sve zapise iz virtualne tablice (a samim tim i iz baze podataka), već samo one koji zadovoljavaju zadani uvjet. A preostali zapisi jednostavno će biti isključeni iz rezultata.

Dakle, sustav neće raditi samo beskoristan posao, već dvostruko beskoristan posao! Najprije će se resursi potrošiti na izradu virtualne tablice na temelju nepotrebnih podataka (na slici su označeni kao “područja podataka A i B”), a zatim će se raditi na filtriranju tih podataka iz konačnog rezultata.

Je li moguće odmah, u fazi konstruiranja virtualne tablice, prestati koristiti nepotrebne podatke? Ispostavilo se da je to moguće. To je upravo ono za što su dizajnirani parametri virtualne tablice:

Parametriranjem virtualne tablice odmah ograničavamo količinu podataka koja će biti obrađena upitom.

Koja je razlika između vrijednosti parametra virtualne tablice "Metoda dodavanja"?
Kada je Metoda zbrajanja postavljena na "kretanja", vraćaju se samo ona razdoblja u kojima je bilo kretanja. Kada se postave "Kretanja i granice razdoblja", tada će se gornjim kretanjima dodati 2 zapisa: kretanja na početku i kraju razdoblja navedenog u parametrima VT. Polje "Matičar" bit će prazno za ova 2 zapisa.

Informacije preuzete sa stranice

Jezik upita u 1C 8 je pojednostavljeni analog dobro poznatog "strukturiranog programskog jezika" (kako se češće naziva, SQL). Ali u 1C se koristi samo za čitanje podataka; objektni model podataka koristi se za promjenu podataka.

Još jedna zanimljiva razlika je ruska sintaksa. Iako zapravo možete koristiti konstrukcije na engleskom jeziku.

Primjer zahtjeva:

BIRAJTE
Ime banke,
Banke.CorrAccount
IZ
Imenik.Banke KAKO Banke

Ovaj zahtjev će nam omogućiti da vidimo informacije o nazivu i korespondentnom računu svih banaka koje postoje u bazi podataka.

Upitni jezik je najjednostavniji i učinkovita metoda dobivanje informacija. Kao što se može vidjeti iz gornjeg primjera, u upitnom jeziku trebate koristiti nazive metapodataka (ovo je popis objekata sustava koji čine konfiguraciju, tj. imenici, dokumenti, registri itd.).

Opis konstrukcija upitnog jezika

Struktura upita

Za dobivanje podataka dovoljno je koristiti konstrukcije “SELECT” i “FROM”. Najjednostavniji zahtjev izgleda ovako:

SELECT * FROM Imenici.Nomenklatura

Pri čemu “*” označava odabir svih polja tablice, a Imenici.Nomenklatura – naziv tablice u bazi podataka.

Pogledajmo složeniji i općenitiji primjer:

BIRAJTE
<ИмяПоля1>KAKO<ПредставлениеПоля1>,
Iznos(<ИмяПоля2>) KAKO<ПредставлениеПоля2>
IZ
<ИмяТаблицы1>KAKO<ПредставлениеТаблицы1>
<ТипСоединения>SPOJ<ИмяТаблицы2>KAKO<ПредставлениеТаблицы2>
PO<УсловиеСоединениеТаблиц>

GDJE
<УсловиеОтбораДанных>

GRUPIRAJ PO
<ИмяПоля1>

SORTIRAJ PO
<ИмяПоля1>

REZULTATI
<ИмяПоля2>
PO
<ИмяПоля1>

U ovaj zahtjev odabiremo podatke polja “FieldName1” i “FieldName1” iz tablica “TableName1” i “TableName”, dodjeljujemo sinonime poljima pomoću operatora “HOW” i povezujemo ih pomoću određenog uvjeta “TableConnectionCondition”.

Od primljenih podataka odabiremo samo podatke koji zadovoljavaju uvjet iz “WHERE” “Uvjet odabira podataka”. Zatim grupiramo zahtjev po polju “Field Name1”, dok zbrajamo “Field Name2”. Stvaramo ukupne vrijednosti za polje “Naziv polja1” i konačno polje “Naziv polja2”.

Zadnji korak je sortiranje zahtjeva pomoću konstrukcije ORDER BY.

Generalni nacrti

Pogledajmo općenite strukture jezika upita 1C 8.2.

PRVIn

Pomoću ovog operatera možete dobiti n broj prvih zapisa. Redoslijed zapisa određen je redoslijedom u upitu.

ODABERITE PRVIH 100
Ime banke,
Banke.Kod AS BIC
IZ
Imenik.Banke KAKO Banke
SORTIRAJ PO
Banke.Ime

Zahtjev će primiti prvih 100 unosa direktorija "Banke", poredanih po abecedi.

DOZVOLJENO

Ovaj dizajn je relevantan za rad s mehanizmom. Bit mehanizma je ograničiti čitanje (i druge radnje) korisnicima za određene zapise u tablici baze podataka, a ne tablici kao cjelini.

Ako korisnik pokuša upotrijebiti upit za čitanje zapisa koji su mu nedostupni, dobit će poruku o pogrešci. Da biste to izbjegli, trebali biste koristiti konstrukciju "ALOWED", tj. zahtjev će čitati samo zapise koji su mu dopušteni.

ODABERITE DOZVOLJENO
Repozitorij dodatnih informacija. Link
IZ
Imenik.Repozitorij dodatnih informacija

RAZNO

Korištenje "DIFFERENT" spriječit će duplikate redaka da uđu u rezultat 1C upita. Dupliciranje znači da se sva polja zahtjeva podudaraju.

ODABERITE PRVIH 100
Ime banke,
Banke.Kod AS BIC
IZ
Imenik.Banke KAKO Banke

EmptyTable

Ova se konstrukcija vrlo rijetko koristi za kombiniranje upita. Prilikom pridruživanja, možda ćete morati navesti praznu ugniježđenu tablicu u jednoj od tablica. Operator “EmptyTable” je pravi za ovo.

Primjer iz 1C 8 pomoći:

SELECT Link.Number, EMPTY TABLE.(Br., Artikal, Količina) AS Composition
IZ Dokumenta.Troškovnica
SVE SPOJITI
SELECT Link.Number, Contents.(LineNumber, Product, Quantity)
FROM Dokument.Dokument.Račun.Dokument.Račun.Sastav.*

NIJE NULL

Vrlo korisna značajka koja vam omogućuje da izbjegnete mnoge pogreške. YesNULL() omogućuje zamjenu NULL vrijednosti sa željenom. Vrlo često se koristi u provjeri prisutnosti vrijednosti u spojenim tablicama, na primjer:

BIRAJTE
Veza za ref. nomenklaturu,
IsNULL(Preostala stavka.Preostala količina,0) AS Preostala količina
IZ


Može se koristiti i na druge načine. Na primjer, ako za svaki redak nije poznato u kojoj tablici postoji vrijednost:

ISNULL(Datum.fakture, Datum.izdavanja fakture)

HOW je operator koji nam omogućuje da tablici ili polju dodijelimo naziv (sinonim). Gore smo vidjeli primjer korištenja.

Ove su konstrukcije vrlo slične - omogućuju vam da dobijete prikaz niza željene vrijednosti. Jedina razlika je u tome što REPRESENTATION pretvara sve vrijednosti u vrsta niza, i REPRESENTATIONLINKS su samo referenca. REFERENTNI PRIKAZ preporučuje se koristiti u upitima sustava za komponiranje podataka za optimizaciju, osim ako se, naravno, polje referentnih podataka ne planira koristiti u odabirima.

BIRAJTE
View(Link), //string, npr. “Avansno izvješće br. 123 od 10.10.2015.
View(DeletionMark) AS DeleteMarkText, //niz, “Da” ili “Ne”
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True ili False
IZ
Document.Advance Report

IZRAZITI

Express vam omogućuje pretvaranje vrijednosti polja u pravi tip podaci. Možete pretvoriti vrijednost ili u primitivni tip ili u referentni tip.

Express za referentni tip koristi se za ograničavanje traženih tipova podataka u poljima složenog tipa, često se koristi za optimizaciju performansi sustava. Primjer:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Stavke).Type of ActivityForTaxAccountingCosts

Za primitivne tipove ova se funkcija često koristi za ograničavanje broja znakova u poljima neograničene duljine (s takvim se poljima ne može usporediti). Da biste izbjegli pogrešku " Nevažeći parametri u operaciji usporedbe. Ne možete uspoređivati ​​polja
neograničene duljine i polja nekompatibilnih tipova
", trebate izraziti takva polja na sljedeći način:

EXPRESS(Komentar KAO redak(150))

DATUM RAZLIKE

Besplatno nabavite 267 video lekcija o 1C:

Primjer korištenja IS NULL u 1C zahtjevu:

ODABRATI OD
Ref
LIJEVA VEZA RegistarAkumulacije.ProizvodiUSkladištima.Preostalo KAO Preostalo proizvoda
Software NomenclatureRef.Link = Prodana robaKomitetiOstaci.Nomenklatura
WHERE NOT Preostali proizvodi. QuantityRemaining JE NULL

Tip podataka u upitu može se odrediti na sljedeći način: pomoću funkcija TYPE() i VALUETYPE() ili pomoću logički operator VEZA. Dvije su funkcije slične.

Unaprijed definirane vrijednosti

Osim korištenja proslijeđenih parametara u upitima u jeziku upita 1C, možete koristiti unaprijed definirane vrijednosti ili . Na primjer, prijenosi, unaprijed definirani imenici, kontni planovi itd. Za to se koristi konstrukcija "Value()".

Primjer upotrebe:

WHERE Nomenklatura.Tip nomenklature = Vrijednost(Imenik.Vrste nomenklature.Proizvod)

WHERE Druge strane. Vrsta podataka za kontakt = Vrijednost (nabrajanje. Vrste podataka za kontakt. Telefon)

WHERE Stanja računa. Računovodstveni račun = vrijednost (Kontni plan. Dobit. Dobit Gubitak)

Veze

Postoje 4 vrste veza: LIJEVO, PRAVO, KOMPLETAN, INTERNI.

LIJEVI i DESNI SPOJ

Spojevi se koriste za povezivanje dviju tablica na temelju određenog uvjeta. Značajka kada LIJEVO PRIDRUŽI je da prvu navedenu tablicu uzmemo u cijelosti i uvjetno vežemo drugu tablicu. Polja druge tablice koja se ne mogu vezati uvjetom popunjavaju se vrijednošću NULL.

Na primjer:

Vratit će cijelu tablicu Counterparties i popuniti polje “Bank” samo na onim mjestima gdje će biti ispunjen uvjet “Counterparties.Name = Banks.Name”. Ako uvjet nije ispunjen, polje Banka bit će postavljeno na NULL.

RIGHT JOIN na 1C jeziku apsolutno sličan LIJEVI priključak, s izuzetkom jedne razlike - u PRAVO PRIKLJUČKA"Glavni" stol je drugi, a ne prvi.

POTPUNA POVEZANOST

POTPUNA POVEZANOST razlikuje se od lijeve i desne po tome što prikazuje sve zapise iz dvije tablice i povezuje samo one koje može povezati po uvjetu.

Na primjer:

IZ

POTPUNA POVEZANOST
Imenik.Banke KAKO Banke

PO

Upitni jezik će u potpunosti vratiti obje tablice samo ako je ispunjen uvjet za spajanje zapisa. Za razliku od spajanja lijevo/desno, moguće je da se NULL pojavi u dva polja.

UNUTARNJI SPOJ

UNUTARNJI SPOJ razlikuje se od punog po tome što prikazuje samo one zapise koji se mogu povezati prema danom uvjetu.

Na primjer:

IZ
Imenik.Druge strane AS Klijenti

UNUTARNJI SPOJ
Imenik.Banke KAKO Banke

PO
Klijenti.Naziv = Banke.Naziv

Ovaj će upit vratiti samo retke u kojima banka i druga ugovorna strana imaju isto ime.

Udruge

Konstrukti JOIN i JOIN ALL kombiniraju dva rezultata u jedan. Oni. rezultat izvođenja dva bit će "spojen" u jedan, zajednički.

Odnosno, sustav radi potpuno isto kao i obični, samo za privremenu tablicu.

Kako koristiti INDEX BY

Međutim, treba uzeti u obzir jednu točku. Izgradnja indeksa na privremenoj tablici također zahtijeva vrijeme. Stoga je preporučljivo koristiti konstrukciju “ ” samo ako se pouzdano zna da će u privremenoj tablici biti više od 1-2 zapisa. U suprotnom, učinak može biti suprotan - performanse indeksiranih polja ne kompenziraju vrijeme potrebno za izgradnju indeksa.

BIRAJTE
Tečajevi valuta Najnoviji presjek Valuta KAO Valuta,
Tečajna lista Najnoviji presjek.
PUT tečajevi valuta
IZ
Registar informacija. Tečajevi valuta. Zadnji odsječak (&Razdoblje,) AS Tečajovi valuta Zadnji odsječak
INDEX BY
Valuta
;
BIRAJTE
Nomenklatura cijena.Nomenklatura,
CijeneNomenklature.Cijena,
CijeneNomenklature. Valuta,
Tečajevi valuta.Tečaj
IZ
Registar informacija. Cijene nomenklature. Zadnji odsječak (&razdoblje,
Nomenklatura B (&Nomenklatura) I PriceType = &PriceType) KAO Nomenklatura cijena
LIJEVO PRIDRUŽITE tečajeve valuta KAO tečajeve valuta
Nomenklature cijena softvera.Valuta = Tečajevi valuta.Valuta

Grupiranje

Jezik upita 1C omogućuje vam korištenje posebnih agregatne funkcije prilikom grupiranja rezultata upita. Grupiranje se također može koristiti bez agregatnih funkcija za "eliminiranje" duplikata.

Postoje sljedeće funkcije:

Iznos, Količina, Broj različitih, Maksimum, Minimum, Prosjek.

Primjer #1:

BIRAJTE
Prodaja roba i usluga Roba Nomenklatura,
SUM(Sales of GoodsServicesGoods.Quantity) AS Količina,
SUM(Prodaja RobaUslugaRoba.Iznos) AS Iznos
IZ

GRUPIRAJ PO
Prodaja roba i usluga Roba Nomenklatura

Zahtjev prima sve retke s robom i sažima ih po količini i iznosima po stavkama.

Primjer br. 2

BIRAJTE
Banke.Kod,
QUANTITY(DIFFERENT Banks.Link) AS Broj duplikata
IZ
Imenik.Banke KAKO Banke
GRUPIRAJ PO
Banke.Šifra

Ovaj će primjer prikazati popis BIC-ova u imeniku "Banke" i pokazati koliko duplikata postoji za svaki od njih.

Rezultati

Rezultati - način dobivanja podataka iz sustava sa hijerarhijska struktura. Skupne funkcije mogu se koristiti za polja sažetka, baš kao i za grupiranje.

Jedan od najpopularnijih načina korištenja rezultata u praksi je skupni otpis robe.

BIRAJTE




IZ
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORTIRAJ PO

REZULTATI
SUM(količina),
SUM(Zbroj)
PO
Nomenklatura

Rezultat upita bit će sljedeća hijerarhija:

Opći rezultati

Ako trebate dobiti ukupne iznose za sve “ukupne iznose”, koristite operator “GENERAL”.

BIRAJTE
Prodaja roba i usluga Roba Nomenklatura AS Nomenklatura,
Prodaja roba i usluga Roba Link AS Dokument,
Prodaja roba i usluga Roba. Količina KAO Količina,
Prodaja roba i usluga Roba Iznos KAO Iznos
IZ
Dokument Prodaja robe i usluga Roba KAKO Prodaja robe i usluga Roba
SORTIRAJ PO
Prodaja roba i usluga Roba Veza Datum Datum
REZULTATI
SUM(količina),
SUM(Zbroj)
PO
SU ČESTI,
Nomenklatura

Kao rezultat izvršenja zahtjeva dobivamo sljedeći rezultat:

U kojoj je 1 razini grupiranja agregacija svih potrebnih polja.

Aranžiranje

Operator ORDER BY koristi se za sortiranje rezultata upita.

Sortiranje za primitivne tipove (string, broj, boolean) slijedi uobičajena pravila. Za polja referentnog tipa sortiranje se odvija prema internom prikazu veze (jedinstveni identifikator), a ne prema kodu ili prikazu reference.

BIRAJTE

IZ
Imenik.Nomenklatura AS Nomenklatura
SORTIRAJ PO
Ime

Zahtjev će prikazati popis imena u imeniku nomenklature, poredan po abecedi.

Automatska narudžba

Rezultat upita bez sortiranja je kaotično prikazan skup redaka. Programeri 1C platforme ne jamče da će retci biti ispisani u istom nizu prilikom izvršavanja identičnih upita.

Ako trebate prikazati zapise tablice stalnim redoslijedom, morate koristiti konstrukciju Auto-Order.

BIRAJTE
Nomenklatura. Ime KAO Ime
IZ
Imenik.Nomenklatura AS Nomenklatura
AUTO NARUDŽBA

Virtualni stolovi

Virtualne tablice u 1C jedinstvena su značajka 1C upitnog jezika koja se ne nalazi u drugim sličnim sintaksama. Virtualni stol – brz način dobivanje podataka o profilu iz registara.

Svaki tip registra ima vlastiti skup virtualnih tablica, koje se mogu razlikovati ovisno o postavkama registra.

  • rez prvoga;
  • rez potonjeg.
  • ostaci;
  • revolucije;
  • stanja i prometa.
  • pokreti iz subkonta;
  • revolucije;
  • brzina Dt Kt;
  • ostaci;
  • stanja i prometa
  • subconto.
  • baza;
  • podaci grafikona;
  • stvarni rok valjanosti.

Za programera rješenja, podaci se uzimaju iz jedne (virtualne) tablice, ali zapravo 1C platforma uzima iz mnogih tablica, pretvarajući ih u traženi oblik.

BIRAJTE
Proizvodi u skladištima Ostaci i promet Nomenklatura,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProizvodiUSkladištimaOstaciIPromet.KoličinaPromet,
Roba U Skladištima Ostaci I Promet. Količina Ulaz,
Proizvodi U Skladištima Ostaci I Promet. Količina Potrošnja,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
IZ
Registar Akumulacije.RobaUSkladištima.OstaciIPromet KAO RobaUSkladištimaOstaciIPromet

Ovaj vam upit omogućuje brzo dohvaćanje velike količine podataka.

Mogućnosti virtualnog stola

Vrlo važan aspekt rada s virtualnim tablicama je korištenje parametara. Parametri virtualne tablice su specijalizirani parametri za odabir i konfiguraciju.

Za takve se tablice smatra neispravnim koristiti odabir u konstrukciji "WHERE". Osim što upit postaje neoptimalan, moguće je dobiti netočne podatke.

Primjer korištenja ovih parametara:

Registar akumulacija.Roba u skladištima.Stanja i obrti (& Početak razdoblja, & Kraj razdoblja, Mjesec, Kretanja i granice razdoblja, Nomenklatura = & Potrebna nomenklatura)

Algoritam za virtualne tablice

Primjerice, najčešće korištena virtualna tablica tipa “Remains” pohranjuje podatke iz dvije fizičke tablice – stanja i kretanja.

Kada koristite virtualnu tablicu, sustav izvodi sljedeće manipulacije:

  1. Dobivamo najbližu izračunatu vrijednost u smislu datuma i mjerenja u tablici ukupnih iznosa.
  2. Iznosu iz tablice kretanja “dodajemo” iznos iz tablice ukupnih iznosa.


Takve jednostavne akcije mogu značajno poboljšati performanse sustava u cjelini.

Korištenje Query Buildera

Query Builder– alat ugrađen u sustav 1C Enterprise koji uvelike olakšava razvoj upita baze podataka.

Alat za izradu upita ima prilično jednostavno, intuitivno sučelje. Ipak, pogledajmo detaljnije korištenje konstruktora upita.

Konstruktor teksta upita pokreće se iz kontekstnog izbornika (desna tipka miša) na željenom mjestu u programskom kodu.

Opis konstruktora zahtjeva 1C

Pogledajmo detaljnije svaku karticu dizajnera. Izuzetak je kartica Builder, koja je tema za drugu raspravu.

Tablice i polja

Ova kartica navodi izvor podataka i polja koja se trebaju prikazati u izvješću. Ovdje su u biti opisane konstrukcije SELECT.. FROM.

Izvor može biti fizička tablica baze podataka, virtualna registarska tablica, privremene tablice, ugniježđeni upiti itd.

U kontekstnom izborniku virtualnih tablica možete postaviti parametre virtualne tablice:

Kartica Veze

Kartica služi za opis povezivanja više tablica i stvara konstrukcije s riječju VEZA.

Kartica grupiranja

Na ovoj kartici sustav vam omogućuje grupiranje i sažimanje potrebnih polja rezultata tablice. Opisuje upotrebu konstrukcija GRUPIRAJ PO, ZBROJ, MINIMUM, PROSJEK, MAKSIMAL, KOLIČINA, BROJ RAZLIČITIH.

Kartica uvjeta

Odgovoran za sve što u tekstu zahtjeva dolazi nakon konstrukcije WHERE, odnosno za sve uvjete koji se postavljaju na primljene podatke.

Kartica Napredno

tab Dodatno prepuno svakakvih parametara koji su vrlo važni. Pogledajmo svako od svojstava.

Grupiranje Odabir zapisa:

  • Prvi N– parametar koji upitu vraća samo N zapisa (operator FIRST)
  • Nema duplikata– osigurava jedinstvenost primljenih zapisa (operator DIFFERENT)
  • Dopušteno– omogućuje odabir samo onih zapisa koje sustav dopušta odabir uzimajući u obzir (DOPUŠTENA konstrukcija)

Grupiranje Vrsta zahtjeva određuje koja će vrsta zahtjeva biti: dohvaćanje podataka, stvaranje privremene tablice ili uništavanje privremene tablice.

Ispod je zastava Zaključajte primljene podatke za kasniju izmjenu. Omogućuje vam da omogućite mogućnost postavljanja zaključavanja podataka, što osigurava sigurnost podataka od trenutka čitanja do promjene (relevantno samo za Automatski način rada blokade, dizajn ZA PROMJENU).

Kartica Spojevi/pseudonimi

Na ovoj kartici dizajnera upita možete postaviti mogućnost spajanja različitih tablica i aliasa (konstrukcija HOW). Tablice su naznačene na lijevoj strani. Ako postavite zastavice nasuprot tablici, koristit će se UNITE konstrukcija, u protivnom - UNITE ALL (razlike između dvije metode). Na desnoj strani prikazana je korespondencija polja u različitim tablicama; ako korespondencija nije navedena, upit će vratiti NULL.

Kartica narudžbe

Ovo određuje redoslijed kojim su vrijednosti poredane (ORDER BY) - silazno (DESC) ili uzlazno (ASC).

Tu je i jedna zanimljiva zastava - Automatska narudžba(u upitu - AUTO NARUDŽBA). Prema zadanim postavkama, 1C sustav prikazuje podatke u "kaotičnom" redoslijedu. Ako postavite ovu zastavicu, sustav će sortirati podatke prema internim podacima.

Kartica Skupina upita

Na kartici dizajnera upita možete kreirati nove, a možete je koristiti i kao navigaciju. U tekstu zahtjeva paketi su odvojeni simbolom “;” (zarez).

Gumb "Upit" u dizajneru upita

U donjem lijevom kutu dizajnera zahtjeva nalazi se gumb Zahtjev, s kojim u svakom trenutku možete pogledati tekst zahtjeva:

U ovom prozoru možete prilagoditi zahtjev i izvršiti ga.


Korištenje Query Console

Query Console je jednostavan i praktičan način za otklanjanje pogrešaka u složenim upitima i brzo dobivanje informacija. U ovom ću članku pokušati opisati kako koristiti Query Console i pružiti poveznicu za preuzimanje Query Consolea.

Pogledajmo pobliže ovaj alat.

Preuzmite 1C konzolu za upite

Prije svega, da biste počeli raditi s konzolom za upite, morate je preuzeti odnekud. Tretmani se obično dijele na dvije vrste - kontrolirani oblici i obični (ili ponekad zvani 8.1 i 8.2/8.3).

Pokušao sam spojiti ove dvije vrste u jednom tretmanu - in željeni način rada rada, otvara se željeni obrazac (u upravljanom načinu rada, konzola radi samo u debelom načinu).

Opis 1C konzole za upite

Počnimo gledati konzolu upita s opisom glavne ploče za obradu:

U zaglavlju konzole upita možete vidjeti vrijeme izvršenja zadnjeg upita s točnošću do milisekunde, što vam omogućuje usporedbu različitih dizajna u smislu izvedbe.

Prva grupa gumba u naredbenoj traci odgovorna je za spremanje trenutnih upita u vanjsku datoteku. Ovo je vrlo zgodno; uvijek se možete vratiti na pisanje složenog zahtjeva. Ili, na primjer, pohranite popis tipičnih primjera određenih dizajna.

S lijeve strane u polju “Zahtjev” možete kreirati nove zahtjeve i spremiti ih u strukturu stabla. Druga grupa gumba je odgovorna za upravljanje popisom zahtjeva. Pomoću njega možete stvoriti, kopirati, izbrisati, premjestiti zahtjev.

  • Izvršitizahtjev– jednostavna izvedba i rezultati
  • Izvrši paket– omogućuje pregled svih posrednih upita u skupini upita
  • Pregled privremenih tablica– omogućuje vam da vidite rezultate koje privremeni upiti vraćaju na tablici

Parametri zahtjeva:

Omogućuje vam da postavite trenutne parametre za zahtjev.

U prozoru parametara upita zanimljivo je sljedeće:

  • Dugme Dobiti od zahtjeva automatski pronalazi sve parametre u zahtjevu radi praktičnosti programera.
  • Zastava Zajednički parametri za sve zahtjeve– kada je instaliran, njegova obrada ne briše parametre prilikom prelaska sa zahtjeva na zahtjev na općem popisu zahtjeva.

Postavite parametar s popisom vrijednosti Vrlo je jednostavno, samo kada birate vrijednost parametra, kliknite na gumb za brisanje vrijednosti (križić), sustav će od vas zatražiti da odaberete vrstu podataka, gdje trebate odabrati "Popis vrijednosti":

Također na gornjoj ploči nalazi se gumb za pozivanje postavki konzole upita:

Ovdje možete odrediti parametre za automatsko spremanje upita i parametre izvršenja upita.

Tekst zahtjeva unosi se u polje zahtjeva konzole. To se može učiniti jednostavnim upisivanjem testa upita ili pozivanjem posebnog alata - dizajnera upita.

Dizajner upita 1C 8 poziva se iz kontekstnog izbornika (desna tipka miša) kada kliknete na polje za unos:

I u ovom izborniku postoje takvi korisne značajke, poput brisanja ili dodavanja prijeloma retka (“|”) zahtjevu ili dobivanja koda zahtjeva u ovom prikladnom obliku:

Zahtjev = Novi zahtjev;
Request.Text = ”
|ODABIR
| Valute.Link
|OD
| Imenik.Valute KAO Valute”;
RequestResult = Request.Execute();

Donje polje konzole upita prikazuje polje rezultata upita, zbog čega je kreirana ova obrada:



Također, konzola za upite, osim liste, može prikazati podatke u obliku stabla – za upite koji sadrže totale.

Optimizacija upita

Jedna od najvažnijih točaka u povećanju produktivnosti 1C poduzeća 8.3 je optimizacijazahtjevi. Ova je točka također vrlo važna kada polaganje certifikacije. U nastavku ćemo govoriti o tipični razlozi ne optimalan rad upita i metoda optimizacije.

Odabiri u virtualnoj tablici pomoću konstrukcije WHERE

Potrebno je primijeniti filtere na detalje virtualne tablice samo kroz VT parametre. Ni pod kojim okolnostima ne biste trebali koristiti konstrukciju WHERE za odabir u virtualnoj tablici; to je ozbiljna pogreška s gledišta optimizacije. U slučaju odabira pomoću WHERE, sustav će zapravo primiti SVE zapise i tek onda odabrati one potrebne.

PRAVO:

BIRAJTE

IZ
Registar akumulacija. Međusobni obračuni sa sudionicima organizacija. Stanja (
,
Organizacija = &Organizacija
I Pojedinac = &Individualno) KAKO Međusobna obračuna sa sudionicima organizacija Stanja

POGREŠNO:

BIRAJTE
Međusobna poravnanja sa sudionicima organizacija Stanja Iznos Stanje
IZ
Registar akumulacija Međusobni obračuni sa sudionicima organizacija Stanja (,) KAKO Međusobni obračuni sa sudionicima organizacija Stanja
GDJE
Međusobna obračuna sa sudionicima Organizacija Stanja Organizacija = & Organizacija
I Međusobna poravnanja sa sudionicima organizacija Stanja. Pojedinac = & Pojedinac

Dobivanje vrijednosti polja složenog tipa pomoću točke

Prilikom primanja podataka složenog tipa u upitu preko točke, sustav povezuje lijevim spojem točno onoliko tablica koliko je tipova moguće u polju složenog tipa.

Na primjer, krajnje je nepoželjno da optimizacija pristupa polju zapisa registra – matičar. Upisnik ima složeni tip podataka, među kojima su sve moguće vrste dokumenata koji mogu upisivati ​​podatke u registar.

POGREŠNO:

BIRAJTE
Record Set.Recorder.Date,
RecordSet.Quantity
IZ
RegisterAccumulations.ProductsOrganizations AS SetRecords

To jest, zapravo, takav upit neće pristupiti jednoj tablici, već 22 tablice baze podataka (ovaj registar ima 21 vrstu registratora).

PRAVO:

BIRAJTE
IZBOR
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Datum
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Recip of GoodsServices).Datum
ZAVRŠI KAO DATUM,
ProductsOrg.Quantity
IZ
RegisterAccumulations.GoodsOrganizations AS GoodsOrganization

Ili je druga opcija dodavanje takvih informacija detaljima, na primjer, u našem slučaju, dodavanje datuma.

PRAVO:

BIRAJTE
ProizvodiOrganizacije.Datum,
Proizvodi Organizacije. Količina
IZ
Registar akumulacija Dobra organizacija AS Dobra organizacija

Podupiti u uvjetima spajanja

Za optimizaciju je neprihvatljivo koristiti podupit u uvjetima spajanja; to značajno usporava upit. Preporučljivo je koristiti VT u takvim slučajevima. Za povezivanje trebate koristiti samo metapodatke i VT objekte, nakon što ste ih prethodno indeksirali po poljima veze.

POGREŠNO:

ODABERITE…

LIJEVO PRIDRUŽIVANJE (
SELECT FROM RegisterInformation.Limits
GDJE …
GRUPIRAJ PO...
) OD...

PRAVO:

ODABERITE…
PUT Ograničenja
IZ Informacijskog registra.Ograničenja
GDJE …
GRUPIRAJ PO...
KAZALO PO...;

ODABERITE…
IZ dokumenta.Prodaja roba i usluga
Ograničenja LIJEVOG PRIDRUŽIVANJA
OD …;

Spajanje zapisa s virtualnim tablicama

Postoje situacije kada pri povezivanju virtualnog stola s drugima sustav ne radi optimalno. U ovom slučaju, kako biste optimizirali izvedbu upita, možete pokušati smjestiti virtualnu tablicu u privremenu tablicu, ne zaboravljajući indeksirati spojena polja u upitu privremene tablice. To je zbog činjenice da su VT-ovi često sadržani u nekoliko fizičkih DBMS tablica; kao rezultat toga, podupit se sastavlja za njihov odabir, a problem se ispostavlja sličnim prethodnoj točki.

Korištenje odabira na temelju neindeksiranih polja

Jedna od najčešćih pogrešaka pri pisanju upita je korištenje uvjeta na neindeksiranim poljima, što je u suprotnosti pravila optimizacije upita. DBMS ne može izvršiti upit optimalno ako upit uključuje izbor u poljima koja se ne mogu indeksirati. Ako uzmete privremenu tablicu, također trebate indeksirati polja povezivanja.

Za svaki uvjet mora postojati odgovarajući indeks. Prikladan indeks je onaj koji zadovoljava sljedeće zahtjeve:

  1. Indeks sadrži sva polja navedena u uvjetu.
  2. Ta se polja nalaze na samom početku indeksa.
  3. Ovi odabiri su uzastopni, to jest vrijednosti koje nisu uključene u uvjet upita nisu "uglavljene" između njih.

Ako DBMS ne odabere ispravne indekse, skenirat će se cijela tablica - to će imati vrlo negativan utjecaj na performanse i može dovesti do dugotrajnog blokiranja cijelog skupa zapisa.

Korištenje logičkog ILI u uvjetima

To je sve, ovaj članak pokriva osnovne aspekte optimizacije upita koje bi svaki stručnjak za 1C trebao znati.

Vrlo koristan besplatni video tečaj o razvoju i optimizaciji upita, Toplo preporučam za početnike i više!

Ako vam je moja publikacija korisna, ne zaboravite je ocijeniti plusom :-)

Ovdje je rubrikator za sve zadatke u zbirci(stranica koja sadrži veze na teme foruma za svaki zadatak)
http://chistov.spb.ru/forum/16-969-1

Pa, sada moj razvoj i bilješke koje sam napravio tijekom procesa pripreme.
Pokušat ću se što manje ponavljati sa spomenutom dvojicom posljednji publikacije.

Pa počnimo:


Ako ga polažete na daljinu, na kraju ispita trebali biste imati dva objekta na radnoj površini:

1. Završni istovar informacijska baza(dt datoteka)
2. Objašnjenje

Ne bi trebalo postojati ništa drugo, nikakve međukopije itd.

Obavezno napišite objašnjenje!
U slučaju nejasno formuliranog zadatka, svakako napišite da ste odabrali upravo takvu i takvu opciju rješenja.
Također, na ključnim mjestima u kodu, bolje je ostaviti kratke komentare, bez fanatizma, ali tamo gdje ispitivač može imati pitanja, bolje je napisati.

No, o tome će vam biti rečeno u uputama koje ćete dobiti na čitanje prije ispita.
Samo je bolje znati unaprijed)


Korištenje znaka ampersand u upitima.

Ponekad je brže tipkati s dodatne tipkovnice nego mijenjati raspored naprijed-natrag, čime se štedi vrijeme
& = Alt+38

*************************************************************************************************
Korištenje TimePoint() u upitima

U upitima akumulacijskim i knjigovodstvenim registrima potrebno je koristiti ne datum dokumenta kao parametar virtualne tablice (perioda), već parametar Moment koji je definiran u kodu na sljedeći način:

Trenutak = ?(Način prolaza = Način knjiženja dokumenta. Operativno, Nedefinirano, Trenutak vremena());

*************************************************************************************************
Kod generiranja kretanja dokumenta po registru, na samom početku postupka obrade knjiženja, potrebno je izvršiti brisanje kretanja tekućeg dokumenta po registru.

Šifra je:

Movement.RegisterName.Write = True; Pokreti.Nazivregistra.Očisti();

Moguće je da će tijekom procesa biti potrebno analizirati zapise iz ovog registra.
Dakle, da pri analizi sadašnjih zapisa (starih, prije promjene dokumenta) sigurno ne budu uključeni u uzorak, možete dodati još jedan red u navedena dva retka:

Kretanje.Imeregistra.Pisanje();

Ili, kada analizirate zapise, eksplicitno označite granicu koja ne uključuje trenutnu točku u vremenu trenutnog dokumenta.

Ali posvuda sam jednostavno naznačio konstrukciju ova tri reda:

Movement.RegisterName.Write = True; Pokreti.Nazivregistra.Očisti(); Kretanje.Imeregistra.Pisanje();

*************************************************************************************************
Postoje dva načina blokiranja podataka, izbor između njih ovisi o korištenoj metodi - staroj ili novoj:

1) Redovno kontrolirano blokiranje, stari način obrade dokumenata (Data Blocking object)

Postavite hoće li se stanja prvo provjeriti, a zatim otpisati.
U slučaju kada nam je za formiranje pokreta potreban neki podatak iz registra.


Primjer:

U dokumentu - količina, u registru - količina i iznos (trošak)
Dakle, znamo količinu robe iz dokumenta - koliko otpisujemo, ali trošak - ne.
To možemo saznati samo iz očevidnika, ali kako bismo bili sigurni da nitko ne mijenja registar između trenutka zaprimanja stanja i trenutka evidentiranja kretanja, moramo zaključati registar i prije očitavanja stanja.
Dakle, u ovom slučaju koristi se objekt zaključavanja podataka. A kada ga kreirate, ispravnije je naznačiti kojim dimenzijama blokiramo registar (na primjer, u našem slučaju - samo stavkom navedenom u dokumentu) - tako da nema nepotrebnih zaključavanja i drugi korisnik može prodati drugi artikal.


1. Postavite zaključavanje pomoću objekta Data Lock
2. Pročitajte ostatak
3. Provjeravamo mogućnost otpisa
4. Kreiramo kretanja, na primjer, otpisujemo robu
5. Nakon knjiženja dokumenta blokada se automatski uklanja (blokada vrijedi kao dio transakcije knjiženja i sustav je automatski uklanja). Odnosno, nema potrebe za posebnim otključavanjem objekta.

2) Nova metodologija obrade dokumenata (upotrebom svojstva LockForChange = True)

Koristi se ako nam podaci iz matičnih knjiga nisu potrebni za formiranje kretanja, a jesmo li kod otpisa otišli u minus možemo provjeriti ako nakon evidentiranja pogledamo stanja u očevidniku i vidimo da su negativna. . U tom slučaju shvatit ćemo da smo previše otpisali i otkazat ćemo operaciju otpisa.

Primjer:
Razmotrimo operaciju prodaje proizvoda.
U dokumentu - količina, u registru - samo količina
Dakle, znamo količinu robe iz dokumenta.
Kretanja formiramo s količinom navedenom u dokumentu i evidentiramo ih. Zatim čitamo registar, gledamo stanja i analiziramo ima li negativnih. Ako postoji, prikažite pogrešku i postavite Refusal = True.

Odnosno, slijed je ovakav:
1. Za kretanje kroz registar postavite svojstvo BlockForChange = True
2. Kreiramo kretanja - otpisujemo robu
3. Zabilježite pokrete
4. Pročitajte registar i uvjerite se da nema negativnih stanja. Ako ima, onda su otpisali višak, ako ne, onda je sve u redu.

Dakle, u ovom slučaju nema potrebe naznačiti kojim dimenzijama moramo blokirati registar.
Jednostavno postavimo svojstvo BlockForChange na True prije snimanja naših pokreta, formiramo pokrete i snimamo.
Sustav će sam blokirati registar u trenutku snimanja prema mjerenjima koja su potrebna, analizirajući ono što smo snimili.
Nakon dovršetka, blokada će biti uklonjena.

Ova opcija (druga) je jednostavnija, zove se “nova metodologija obrade dokumenata” i 1C preporuča korištenje nje ako je moguće i oduzima bodove ako se koristi prva opcija, ali u nekim slučajevima se jednostavno ne može primijeniti i prva opcija s koristi se objekt zaključavanja podataka (vidi gornji primjer).

Također napominjem da bez obzira na odabranu metodu, pokrete je potrebno očistiti prije rada s njima (vidi prethodni savjet)

*************************************************************************************************
Blokiranje podataka (metoda blokiranja br. 1 iz gornjeg opisa)

Kontrolirano zaključavanje je potrebno tamo gdje se podaci čitaju i na temelju tih podataka izvode pokreti
Najbrži način da dobijete upravljani kod za zaključavanje je da unesete "Data Locking", pozovete Syntax Assistant i jednostavno kopirate primjer koda od tamo. Zatim ga jednostavno promijenite u naziv svog registra i dimenzije.

Izgleda otprilike ovako:

Zaključaj = NewDataLock; Element zaključavanja = Zaključavanje.Dodaj("Registar akumulacije.RobaUSkladištima"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; Zaključavanje elementa.UseFromDataSource("Nomenklatura", "Nomenklatura"); Zaključaj.Zaključaj();

*************************************************************************************************
Tablični dio dokumenata bolje je nazvati jednostavno "TC"

U 99% dokumenata postoji samo jedan tabularni dio. Takav unificirani naziv tablični dijelovi To će vam pomoći da uštedite mnogo vremena jer:
1) Vrlo kratko - pišite brzo
2) Isto za sve dokumente, ne morate zapamtiti kako se zove kada pišete kod

*************************************************************************************************
Rezultat upita treba provjeriti je li prazan prije dohvaćanja ili učitavanja u tehničku specifikaciju.

Općenito, koristio sam uzorkovanje u svim zadacima.

Uzorkovanje je optimalnije za sustav u smislu performansi, jer je "izoštreno" samo za čitanje podataka (za razliku od TK).

Ali u svakom slučaju, prije metode Select(), bolje je provjeriti rezultat upita za prazninu, to će dodatno smanjiti opterećenje sustava.

Rezultat = Query.Run(); If Not Result.Empty() Then Select = Result.Select(TravelQueryResult.ByGrouping); ... Završi ako;

I u slučaju da trebamo dobiti samo jednu vrijednost iz zahtjeva
(npr. samo način otpisa sukladno računovodstvenoj politici utvrđenoj za ovu godinu):

Rezultat = Query.Run(); If Not Result.Empty() Then Select = Result.Select(); Odabir.Dalje(); Metoda otpisa troškova = Sample.Cost Write-Off Method; završi ako;

*************************************************************************************************
Dokument "Operacija" za knjigovodstveni zadatak

Za knjigovodstvene poslove potrebno je izraditi Poslovni dokument.

Njoj potpuno onemogućujemo knjiženje (u svojstvima “Knjiženje = Odbij”), označavamo da radi kretanja u knjigovodstvenom registru i povlačimo kretanja na obrazac.

*************************************************************************************************
Brza obrada dokumenata:

Mora biti uključeno:
U operativnom i računovodstvenom. računovodstvo za dokumente mora biti omogućeno (osim za dokument "Operacija", vidi dolje).

Mora biti ugašen:
u računskim zadacima nema smisla za ispravu plaće.

Za dokument "Pogon" knjiženje treba u potpunosti onemogućiti (u svojstvima dokumenta "Knjiženje = Zabraniti"),
budući da on piše jednostavno upisuje podatke izravno u registar prilikom pisanja.

*************************************************************************************************
Uvjet u zahtjevu oblika "Ili navedena nomenklatura ili bilo koja, ako nije navedena"

U upitima se susreće sljedeći zadatak: na primjer, trebate odabrati dokumente s navedenom nomenklaturom ili sve dokumente ako nomenklatura nije navedena.
Rješava se sljedećim uvjetom u samom zahtjevu:

Nomenklatura = &Nomenklatura ILI &Nomenklatura = Vrijednost(Imenik.Nomenklatura.Prazna veza)

Ali bilo bi optimalnije i ispravnije transformirati ovo stanje (hvala yukon):


Request.Text = Request.Text + "WHERE Nomenclature = &Nomenclature";

završi ako;

S pojavom modela objekta upita u 8.3.5, bit će moguće sigurnije dodati uvjet:

If ValueFilled(Nomenclature) Then
Query1.Selection.Add("Stavka = &Nomenklatura");
Request.SetParameter("Nomenklatura", Nomenklatura);
završi ako;

*************************************************************************************************
Spajanje tablica u upitima:

Broj ukupnih zapisa ne ovisi o tome je li prikazano polje spojene tablice, ovisi samo o konfiguriranim odnosima.
Odnosno, polje priložene tablice možda neće biti prikazano.

Ako želite priložiti tablicu bez ikakvih uvjeta, tada na kartici uvjeta jednostavno napišite uvjet "TRUE".
U ovom slučaju, tablica će biti točno spojena.

*************************************************************************************************
Korištenje plana tipova karakteristika (PVC):

1. Koristiti kao mehanizam za opisivanje karakteristika objekata.

1.1. Izrađujemo PVC. To će biti vrste karakteristika (na primjer, boja, veličina, maks. brzina, itd.). U postavkama odaberite sve moguće vrste karakterističnih vrijednosti i po potrebi kreirajte objekt iz točke 1.2 te ga također navedite u postavkama.

1.2. Za dodatne vrijednosti PVC-a stvaramo podređeni direktorij AdditionalValues ​​​​of Characteristics (ili jednostavno Values ​​​​of Characteristics).
Pohranit će karakteristike ako ih nema u postojećim imenicima. Možda ga nećemo stvoriti ako se sve karakteristike koje su nam potrebne nalaze u postojećim imenicima ili se te vrijednosti mogu predstaviti elementarnim tipovima podataka. U PVC postavkama označavamo da će se ovaj imenik koristiti u dodatne svrhe. vrijednosti karakteristika.

1.3. Izrađujemo informacijski registar koji zapravo povezuje tri objekta:
- Objekt za koji povezujemo mehanizam karakteristika
- TipKarakteristike (PVC tip)
- Vrijednost karakteristike (tip - karakteristika, ovo je novi tip koji se pojavio u sustavu nakon stvaranja PVC-a
te opisivanje svih mogućih tipova podataka koje karakteristična vrijednost može poprimiti).
U informacijskom registru označavamo da je Tip obilježja vlasnik za Vrijednost obilježja (link na izborni parametar), kao i tipsku vezu za Vrijednost obilježja, opet iz Tipa obilježja.

Još jedna značajka je da za svaki kreirani tip obilježja možete odrediti vrstu vrijednosti obilježja, ako vam nisu potrebni svi mogući tipovi za opis vrijednosti tog obilježja.

2. Korištenje PVC-a za izradu sub-conto mehanizma za računovodstveni registar .

2.1. Izrađujemo PVC TypesSubconto.

2.2. Stvaramo podređeni imenik ValuesSubConto (kao i kod karakteristika, on će sadržavati vrijednosti podkontoa ako ih nema u drugim imenicima).

2.3. Komunikacija se ostvaruje korištenjem kontnog plana.

*************************************************************************************************
Resursi računovodstvenog registra:

Iznos - bilanca stanja,
Količina - izvanbilančna i povezana s računovodstvenim obilježjem Kvantitativna

*************************************************************************************************
Tablice virtualnog računovodstvenog registra:

Promet: promet po jednom računu
TurnoverDtKt: promet između bilo koja dva računa, odnosno sve iste transakcije za razdoblje.

*************************************************************************************************
Valutno računovodstvo na knjigovodstvenim registrima - kako implementirati:

U kontnom planu kreiramo računovodstveni atribut “valuta”.
U knjigovodstvenom registru dodatno kreiramo:
- Valutna dimenzija (zabrana praznih vrijednosti, izvanbilančni, računovodstveni atribut - valuta)
- resurs CurrencyAmount (izvanbilančni, računovodstveni atribut - valuta, pohranit će iznos u valuti, npr. 100 USD)
Svi.

Dakle, struktura registra je:

Mjere:
- Valuta
Resursi
- Količina
- Iznos (iznos u rubljima)
- CurrencyAmount (iznos u valuti)

Dakle, valutno računovodstvo samo je usavršavanje konvencionalnog računovodstva u Republici Bjelorusiji; ono ne mijenja bit, na primjer, resursa Iznos
(tamo je, kao i obično, iznos u rubljima, bez obzira je li račun u stranoj valuti ili ne).
A ako je značajka Valutno računovodstvo isključena za račun, onda je to uobičajena struktura Republike Bjelorusije (resursi - samo količina i iznos).

*************************************************************************************************
Prilikom postavljanja parametara virtualne tablice za dobivanje isječka potonje, postavljamo uvjete na dimenzije, a ne na resurse.

Inače nećemo dobiti dio potonjeg, već posljednji unos s navedenom vrijednošću resursa - možda nije zadnji u skupu dimenzija

*************************************************************************************************
Značenje izvora i pojedinosti u obračunskom registru

U registrima obračuna stvaranje resursa omogućuje njegovo primanje prilikom izračuna osnovice pomoću ovog registra.
Čak iu odnosu na zadano razdoblje, vrijednost resursa će se ponovno izračunati (ako se bazno razdoblje ne poklapa s periodičnošću registra).

A vrijednost atributa dostupna je samo u stvarnoj tablici registra izračuna; nije dostupna u virtualnim tablicama.

*************************************************************************************************
Potvrdni okvir "Osnovno" u svojstvima dimenzije registra izračuna
Znači da će se ovo mjerenje koristiti za dobivanje baze u budućnosti i koristi se za dodatno indeksiranje vrijednosti za ovo polje.

*************************************************************************************************
Raspored razdoblja važenja godišnjeg odmora po mjesecima pri evidentiranju skupova upisa u matične knjige,
ako je godišnji odmor naveden u dokumentu u jednom retku za nekoliko mjeseci odjednom u jednom retku:

Datum početka tekućeg mjeseca = početak mjeseca(TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); CurrentMonth = Datum; WhileDateStartCurrentMonth<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
Izrada gantograma:

Na formu postavimo element tipa “Gantogram”, nazovemo ga DG, zatim kreiramo naredbu “Generiraj” i upišemo sljedeće u modul forme:

&OnClient postupak Generate(Command) GenerateOnServer(); Kraj postupka &Na poslužitelju Postupak GenerateOn Server() DG.Clear(); DG.Update = False; Zahtjev = Novi zahtjev("SELECT |BasicAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |BasicAccrualsActualActionPeriod.ActionPeriodStart AS ActionPeriodStart, |BasicAccrualsActualActionPeriod.Period ActionsEnd AS PeriodActionsE nd |FROM |Registar obračuna.BasicAccruals.ActualPeriodActions AS BasicAccrualsActualPeriodActions |WHERE |BasicAccrualsActualPeriodActions.PeriodActions BETWEEN &Datum početka I &datum završetka "); Query.SetParameter("StartDate", Period.StartDate); Request.SetParameter("EndDate", Period.EndDate); Odaberite = Query.Run().Select(); Dok Selection.Next() Loop Point = DG.SetPoint(Selection.Employee); Niz = DG.SetSeries(Selection.CalculationType); Vrijednost = DG.GetValue(Point, Series); Interval = Vrijednost.Dodaj(); Interval.Start = Sample.PeriodActionStart; Interval.End = Sample.ActionPeriodEnd; EndCycle; DG.Update = Istina; Kraj postupka

Zapravo, ovdje nam je bitan samo kod u petlji, ostalo je pomoćno, samo sam dao cijelu implementaciju ovog podzadatka.
U zahtjevu nam je bitno da postoji zaposlenik, vrsta isplate, datum početka i datum završetka razdoblja.
Kod je zapravo vrlo jednostavan, lako ga je zapamtiti, nemojte se uznemiriti ako vam se čini nezgrapnim

*************************************************************************************************
Obrada unosa "storniranja" u računskim zadacima:

U proceduri obrade transakcije (modul objekta) formiramo sva kretanja, a onda ako postoje zapisi u drugim razdobljima, dobivamo ih ovako
(sustav ih automatski generira - pomaže nam):

Zapisi o zbrajanju = Kretanja.GlavniAcruals.GetAddition(); // Nema potrebe za snimanjem pokreta da bi se dobio dodatak

Za svaku tehničku liniju iz ciklusa dodavanja zapisa
Evidencija = Kretanja.Glavne Akumulacije.Dodaj();
FillPropertyValues(Record, TechString);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
Kraj ciklusa

A kada izračunavate zapise, umetnite provjere:

Ako TechMotion.Reversal Onda
CurrentMovement.Sum = - CurrentMovement.Amount;
završi ako;

*************************************************************************************************
Kako u računskim zadacima utvrditi što ulazi u glavna, a što u dopunska vremenska razgraničenja.

Ali to nije uvijek 100% jasno, postoje i kompliciraniji slučajevi, iako ih ima podosta
(npr. bonus koji ovisi o broju radnih dana u mjesecu - ovo je ON).

Osnovne naknade:
Ako je vrsta obračuna ovisna o rasporedu (što znači registar podataka s kalendarskim datumima), tada se odnosi na glavne troškove.

Primjer OH:
- Plaća
- Nešto što se izračunava iz broja radnih dana (a za to morate koristiti raspored): ili u razdoblju valjanosti (poput plaće) ili u osnovnom razdoblju

Dodatni troškovi:
Ono što se smatra bilo obračunatim iznosom, bilo RADNIM vremenom (a ne normom!), Ili uopće ne ovisi - to je dodatno. razgraničenja.

Odnosno: vremensko razgraničenje za čiji se obračun koristi vremenski standard (može i činjenica) je OH, a za koje nisu potrebni stvarni podaci ili ništa je DN.

Ili drugim riječima:

Ako VR koristi vremenski standard, tada za VR mora biti uključeno razdoblje valjanosti.

*************************************************************************************************
Dodajte mogućnost otvaranja ugrađenog odjeljka pomoći "Rad s referentnim knjigama" u obliku popisa direktorija "Nomenklatura".

Pokrenite naredbu na obrascu:

&NaKlijentu
Pomoć za postupak (naredba)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
Kraj postupka

Crtu presjeka definiramo na sljedeći način:
Idite na informacije o pomoći konfiguracijskog objekta (u konfiguratoru), napišite riječ, odaberite je, idite na izbornik Elementi/Veza i odaberite željeni odjeljak 1C pomoći, nakon čega se veza automatski ubacuje. Izgleda komplicirano, ali u praksi je jednostavno.

*************************************************************************************************
Implementacija interakcije između obrazaca, na primjer, odabir:

1. Iz trenutnog obrasca otvorite željeni pomoću metode “OpenForm()”, prosljeđujući strukturu s parametrima kao drugi parametar (ako je potrebno). Treći parametar može proslijediti vezu na ovaj obrazac - ThisForm.

2. U otvorenom obrascu, u rukovatelju “When CreatedOnServer()”, možemo uhvatiti parametre proslijeđene u koraku 1 kroz “Parameters.[ParameterName]”. Obrazac koji je pokrenuo otvaranje ovog obrasca bit će dostupan preko identifikatora “Vlasnik” (ako je, naravno, naveden u koraku 1).

I što je najvažnije, bit će dostupne funkcije izvoza vlasničkog obrasca. To jest, možemo pozvati funkciju izvoza izvornog obrasca i proslijediti nešto tamo kao parametar za obradu odabira. I ova funkcija će već ispuniti ono što je potrebno u izvornom obliku. Postoji samo jedno upozorenje - ne možete proslijediti tablicu vrijednosti između procedura klijenta, ali je možemo smjestiti u privremenu pohranu i jednostavno proslijediti VX adresu, a zatim je izdvojiti iz VX-a.

*************************************************************************************************
Životni ciklus parametara obrasca

Svi parametri preneseni na obrazac u trenutku njegovog otvaranja vidljivi su samo u proceduri “When CreateOnServer”.
Nakon kreiranja, svi parametri se uništavaju i više nisu dostupni na obrascu.
Izuzetak su parametri koji su deklarirani u uređivaču obrazaca s atributom "Ključni parametar".
Oni određuju jedinstvenost forme.
Ovaj parametar će postojati sve dok postoji sam obrazac.

*************************************************************************************************
Korištenje Taxi sučelja

Tijekom razvoja možete postaviti uobičajeno upravljano sučelje 8.2 u svojstvima konfiguracije - to sve čini osjetno kompaktnijim i poznatijim.
To je osobito istinito ako iznajmljujete na daljinu - razlučivost zaslona je vrlo mala i nemoguće je učiniti bilo što s "taksi" sučeljem.
Samo ne zaboravite ponovno staviti "Taxi" kada završite!U suprotnom će ispitivač oduzeti bodove!

*************************************************************************************************

PS: E Postoje zasebni standardni podzadaci koji se koriste u svim zadacima, a to su oni koje morate znati riješiti (na primjer, otpisivanje po serijama, korištenje PVC-a (dobro, ovo je stvarno rijetko) i drugi). I u svim zadacima se jednostavno ponavljaju (negdje su neki podzadaci, negdje drugdje, samo u različitim kombinacijama). Štoviše, odavno su obećali izdati novu kolekciju (ako već nisu), u kojoj bi trebalo biti puno više problema, odnosno nema smisla učiti napamet rješenja pojedinačnih problema, ima smisla naučiti kako riješite pojedinačne standardne podzadatke, tada ćete riješiti svaki problem.

PSS: Kolege, ako netko ima još kakve korisne informacije o pripremi ispita i polaganju, neka napiše u komentarima pa ćemo dopuniti članak.

Registri akumulacije u sustavu 1C:Enterprise dijele se na dvije vrste: akumulacijski registri ostaci i akumulacijskim registrima broj okretaja u minuti.

Vrsta registra odabire se prilikom kreiranja u konfiguratoru

Kao što naziv govori, jedni su namijenjeni dobivanju stanja na određeni datum, a drugi su namijenjeni dobivanju prometa za odabrano razdoblje. Ovisno o vrsti akumulacijskog registra, platforma 1C:Enterprise generira različit skup virtualnih tablica. U ovom ćemo članku pogledati rad s virtualnim tablicama akumulacijskih registara. Da bismo to učinili, napravit ćemo registar za akumuliranje stanja - Proizvodi Ostaci i registar akumulacije okretaja - Promet proizvoda.

Sada pogledajmo koje virtualne tablice platforma nudi za svaki od ovih registara.

Registar akumulacije okretaja

Radi jasnoće, otvorimo i vidimo koje su tablice dostupne za registar Promet proizvoda. Ovo je tablica samog registra - Promet proizvoda, koja fizički postoji u bazi podataka, i jedna virtualna tablica - ProizvodiPromet.Promet

Sa standardnom tablicom sve je jasno. Pogledajmo pobliže onaj virtualni.

Virtualni stol Promet

Ova tablica vam omogućuje da dobijete promet resursa u smislu dimenzija. U našem slučaju imamo dvije dimenzije: Zaliha I Proizvod. I jedan izvor - Količina

Neka naš registar ima sljedeće unose

Vratimo se dizajneru upita i započnimo jednostavnim odabirom iz tablice ProizvodiPromet.Promet Sva polja

U skladu s tim, zahtjev će izgledati ovako:

SELECT ProizvodiPrometPromet.Skladište, ProizvodiPrometPromet.Proizvod, ProizvodiPrometPromet.KoličinaPromet FROM RegistarAkumulacija.ProizvodiPromet.Promet(,) AS ProizvodiPrometPromet

Rezultat upita izgleda ovako:

Odnosno, dobili smo promet u robi i skladištu za cijelo vrijeme. Pretpostavimo da nas skladišta ne zanimaju i da želimo ostvariti promet samo u smislu robe.

Da bismo to učinili, isključujemo dimenziju iz zahtjeva Zaliha

SELECT ProductsTurnoverTurnover.Product, ProductTurnoverTurnover.QuantityTurnover FROM RegisterAccumulation.ProductsTurnover.Turnover(,) AS ProizvodiTurnoverTurnover

i kao rezultat ostat ćemo samo dvije linije

Ali u pravilu nema potrebe dobivati ​​promet za cijelo vrijeme postojanja registra. Uglavnom, potrebni su za određeno razdoblje: mjesec, kvartal, godinu itd. Osim toga, obično su potrebni odabiri po dimenzijama (Proizvod, Skladište). To se postiže korištenjem parametri virtualne tablice. Praktično je ispuniti parametre iz konstruktora. Po gumbu Mogućnosti virtualnog stola Otvara se dijaloški okvir u koji možemo unijeti sve što nam je potrebno:

Nakon toga, naš originalni zahtjev će imati sljedeći oblik

SELECT RobaPrometPromet.Skladište, RobaPrometPromet.Proizvod, RobaPrometPromet.KoličinaPromet FROM RegistarAkumulacija.RobaPromet.Promet(&Početak razdoblja, &Kraj razdoblja, Skladište = &Skladište) AS RobaPrometPromet

Kao što vidimo, razlika je u tome što se u zagradi iza naziva virtualne tablice nalaze parametri koje je potrebno ispuniti prije izvršenja upita.

Oni koji tek počinju raditi s virtualnim tablicama često su u iskušenju da odabir postave na uobičajeni način umjesto pomoću parametara:

FROM RegisterAccumulations.ProductsTurnover.Turnover(,) HOW ProizvodiTurnoverTurnover WHERE ProizvodiTurnoverTurnover.Warehouse = &Warehouse

Prilikom ispunjavanja parametara koji su nam promakli Periodičnost. Otvorimo popis i izaberimo iz mase mogućih opcija Mjesec. Sve ostale parametre ćemo ukloniti kako ne bi došlo do zabune.

Nakon toga primjećujemo da se polje pojavljuje u poljima tablice Razdoblje.

Dodavanjem u odabrana polja dobivamo sljedeći tekst zahtjeva:

SELECT ProizvodiPrometPromet.Razdoblje, ProizvodiPrometPromet.Skladište, ProizvodiPrometPromet.Proizvod, ProizvodiPrometPromet.KoličinaPromet FROM RegistarAkumulacija.ProizvodiPromet.Promet(, Mjesec,) AS ProizvodiPrometPromet

Izvršavamo zahtjev:

Tako unutar odabranog vremenskog intervala okretaje možemo podijeliti na manje intervale sukladno odabranoj frekvenciji.

Registar akumulacije stanja

Baš kao i s obrnutim registrom, pogledajmo u dizajneru upita koje su virtualne tablice dostupne za registar akumulacije stanja

Kao što vidite, tri virtualne tablice dostupne su za registar akumulacije stanja: Revolucije, Ostaci hrane, Ostaci i obrti. Razmotrimo svaki od njih zasebno.

Virtualni stol Promet

Unatoč tome što je tip registra Ostaci hrane, ipak možemo ostvariti promet od njega. Osim toga, ovdje imamo dva dodatna izvora: Dolazak I Potrošnja

Podsjećam da se prilikom upisa u bilančni registar iskazuje vrsta akumulacijskog kretanja (prihodi ili rashodi), dok se za prometni registar ne iskazuje vrsta kretanja. Stoga ovdje imamo dodatni bonus u obliku mogućnosti primanja ne samo ukupnog prometa za razdoblje, već i prihoda i troškova zasebno. No, naravno, ako metapodaci sadrže obrnuti registar sa sličnim skupom mjerenja, onda ga je bolje koristiti za dobivanje prometa. Općenito, rad s ovom virtualnom tablicom sličan je radu s virtualnom tablicom Revolucije pregovarački registar o kojem je gore bilo riječi.

Stanja virtualne tablice

Ova se tablica koristi za dobivanje stanja resursa po dimenzijama. U parametrima tablice možemo odrediti datum za koji primamo stanja i postaviti odabire:

Pogledajmo mali primjer. Imamo sljedeće unose u registar:

Odaberimo sva dostupna polja i postavimo kraj lipnja kao datum primanja stanja. Nećemo birati na temelju mjera. Tada će tekst zahtjeva izgledati ovako:

SELECT ProductsRemainingsRemainings.Warehouse, ProductsRemainingsRemainings.Product, ProductsRemainingsRemainings.QuantityRemaining FROM RegisterAccumulations.ProductsRemainings.Remainings(&DateRemainings,) AS ProductsRemainingRemainings

I nakon što ga izvršimo dobivamo ovaj rezultat

Stanja i promet virtualnog stola

Ova tablica kombinira dvije prethodno spomenute i omogućuje vam da dobijete promet za odabrano vremensko razdoblje, kao i stanja na početku i na kraju razdoblja. Također možete postaviti odabir.

Korištenje ove tablice može biti opravdano kada u jednom izvješću trebate istovremeno dobiti i promet i stanja na početku i na kraju razdoblja. U drugim slučajevima ne biste trebali zlorabiti njegovu upotrebu.