Korištenje odabira u SCD-u. Kreiranje dijagrama rasporeda podataka unutar izvještaja

U svom posljednjem članku već sam napisao da je 1C paradoksalna platforma. Sistem sastavljanja podataka je jedan od ovih paradoksa. SKD je dizajniran za dizajniranje složenih izvještaja i uključuje zamjenu “ručnog” programiranja izvještaja dizajnom u multifunkcionalnom kompletu alata. Prilika korištenje sistema kontrole pristupa pojavio se u osmoj verziji, ali je trebalo dosta vremena da se pojavi verzija 8.2 da bi je 1C mogao koristiti u svojim standardnim proizvodima. S jedne strane, ACS je višenamjenski alat, pomoću kojeg možete kreirati vrlo složene izvještaje bez ijednog reda koda. Međutim, sistem kontrole pristupa ima prilično visoku barijeru za ulazak, vrlo ga je teško naučiti i početi u potpunosti koristiti „odjednom“, jer sučelje nije sasvim intuitivno, ali najviše; kompletne priručnike korištenje su dostupne samo u obliku plaćene literature.

U procesu mog proučavanja SKD-a pojavio se problem. Potrebno je dobiti podatke iz tabele vrijednosti treće strane koristeći jezik upita, a zatim operirati ovim podacima kao sa sličnim podacima iz tablica baze podataka (operacije smanjenja, grupisanja i tako dalje). U klasičnom formatu, kreirali bismo upit koji prima informacije iz tabele prosleđene upitu kao parametar.

Zahtjev = Novi zahtjev(
„IZABIR
| Tabela.Nomenklatura,
| Sto.Skladište
|OD
| &TK AS Table");
Request.SetParameter("TZ", TZ);

Ali sa SKD-om nije sve tako jednostavno. Nažalost, nemoguće je izvršiti gore opisanu operaciju u sistemu za sastavljanje podataka. Međutim, sistem je implementirao mogućnost učitavanja vanjskih tablica vrijednosti.

Ovdje vrijedi napraviti kratku digresiju i govoriti o skupovima podataka. Skupovi podataka su izvori informacija iz kojih sistem za upravljanje podacima prima podatke koje kasnije sastavlja u izvještaj. Skupovi podataka se dijele na tipove, uglavnom koristeći tip "Upit", u čije tijelo programer upisuje upit bazi podataka. Tip "Object" se koristi za učitavanje podataka iz vanjskih objekata. U oba slučaja, izlaz je određeni skup polja dobijenih kao rezultat izvršavanja zahtjeva ili učitavanja vanjskog objekta. Kasnije se ovim poljima može upravljati na kartici "Postavke", zajedno sa detaljna podešavanja strukturu izvještaja. Za međusobno povezivanje različitih skupova, ACS pruža mogućnost označavanja veza između skupova podataka na kartici istog imena. Ove veze su direktni analog lijevog spoja u klasičnom upitu. Međutim, treba uzeti u obzir da upiti u bilo kojem skupu podataka ne “znaju” o postojanju drugih skupova podataka u konačnici, odnosi između skupova podataka će utjecati na izgled podataka prema strukturi navedenoj u “; Postavke”.

Hajde da detaljno objasnimo problem na primjer. Postoji standardni izvještaj: Platni obračuni za organizaciju konfiguracije ZiK 8. Potrebno je da se vrste obračuna u izvještaju grupišu u određene grupe. Korespondencije kalkulacije View-Group se pohranjuju u tablicu eksternih vrijednosti. Da bismo ga učitali u glavnu šemu rasporeda podataka, kreiramo „objekt skupa podataka“ sa imenom „Grupe“ (slika 2). Vršimo vezu sa „skupom podataka upita“ - „Obračuni“ po vrsti obračuna (slika 3). U “setu podataka zahtjeva” - “Obračuni” nalaze se informacije za grupe, brišemo sve unose. Nakon toga, na kartici “Postavke” možemo koristiti polje “Grupa” čija se vrijednost učitava iz vanjskog izvora podataka (slika 4). U funkciji generiranja izvještaja dopunjavamo učitavanje vanjskih podataka.

Funkcija GenerateReport(Rezultat = Nedefinirano, Podaci za dešifriranje = Nedefinirano, OutputInReportForm = Tačno) Izvoz

//dobijamo ili formiramo potrebnu tablicu vrijednosti "Grupe" i upisujemo je u varijablu istog imena

ExternalData = New Structure();//kreirajte i popunite eksternu strukturu podataka
ExternalData.Insert(Grupe);

UserPanelValue = TypicalReports.GetUserPanelSettingValuesofObject(ThisObject);
DefaultSettings = SettingsComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
Return Result;

EndFunction

Da smo pravili izvještaj od nule, kod za pokretanje generiranja izvještaja bi izgledao ovako:

ExternalDataSets = nova struktura;
ExternalDataSets.Insert("Grupe", Grupe); //Grupe - željena tablica vrijednosti
DataCompositionSchema = GetLayout("MainDataCompositionSchema"); //naš izgled sa dijagramom toka podataka
Postavke = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = New TabularDocument;
OutputProcessor = Novi OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Čitaj 9660 jednom

Ekstenzija jezika upita za sistem sastavljanja podataka

Proširenje jezika upita za sistem sastavljanja podataka vrši se pomoću posebnih sintaksičkih instrukcija zatvorenih u vitičaste zagrade i direktno postavljene u tekst upita.

Sintaksički elementi proširenja jezika upita sistema za sastav podataka

ODABIRATI

Ova rečenica opisuje polja koja će korisnik moći odabrati za izlaz. Nakon ovoga ključna riječ Odvojeni zarezima, navedeni su pseudonimi polja sa glavne liste za odabir zahtjeva koja će biti dostupna za konfiguraciju.

na primjer:

(ODABIR artikla, skladište)

Iza aliasa polja može biti kombinacija znakova “.*”, što ukazuje na mogućnost korištenja podređenih polja iz ovog polja.

Na primjer, unos Nomenklatura.* ukazuje na mogućnost korištenja podređenih polja polja “Nomenklatura” (na primjer, polje “Nomenklatura.Šifra”). Element SELECT se može pojaviti samo u prvom upitu za spajanje.

GDJE

Opisana su polja na koja korisnik može primijeniti selekciju. Ovaj prijedlog koristi polja tabele. Upotreba pseudonima polja liste za izbor nije dozvoljena. Svaki dio unije može sadržavati vlastiti WHERE element.

(WHERE nomenklatura.*, skladište)

Jednostavan primjer

Potrebno je dobiti rasprodaje za period + prikazati cijeli artikl, bez obzira da li je bilo rasprodaja ili ne. Odnosno, potrebno je odabrati podatke iz prometne tablice registra prodaje, podatke iz imenika nomenklature. Hajde da preskočimo pitanje zašto nam je potrebna sva nomenklatura.

Da biste riješili problem, možete kreirati upit koji povezuje stavku i tabelu prometa sa lijevim spojem, kao rezultat toga, za artikl koji nije prodat u odabranom periodu, dobićemo vrijednosti polja Counterparty, Sporazum, Količina, Sum= Null. Ovaj zahtjev:

SELECT ReferenceNomenclature.Link AS Nomenklatura, SalesPromet.Counterparty, SalesPromet.Counterparty Agree, SalesTurnover.QuantityPromet AS Količina, SalesTurnover.CostPromet AS Trošak FROM Reference.Nomenclature AScul.Nomenclature AS referenca.Nomenclature AScul.Referentni broj.Ne SalesTurnover Software SprNomenclature.Link = SalesTurnover. Nomenklatura

Evo rezultata:

Counterparty Sporazum Nomenklatura Količina Sum
null null _Test1 null null
DOO "Horns and Hooves" Sporazum1 Papuče 10 1200
OJSC "Gasprom" Cool ugovor Čizme 5 13000
null null Galoše null null
null null Slates null null

U ovom primjeru nije bilo prodaje artikala: “Čapelice” i “Papuče”

I sve bi bilo u redu, ako grupišemo uzorak po ugovornoj strani, onda će svi neprodati artikli pasti u posebnu grupu, gdje je Counterparty = Null, ali klijent želi da ima slučajni odabir u izvještaju po polju druge ugovorne strane (naravno, ovo znači druga strana iz registra prodaje). Šta da radim? Na kraju krajeva, u stvari, samo treba da filtriramo tabelu Prodaja. Ako koristimo autodovršavanje u ACS konstruktoru, tada će dostupna polja za izbor uključivati ​​polje Counterparty, čini se da je sve u redu, ali pri izvršavanju izvještaja sa odabirom po ugovornoj strani gubimo sve zapise iz veze sa artiklom. Na primjer, postavimo odabir: Counterparty = LLC "Rogovi i kopita". Rezultat će izgledati ovako:

Uopšte nije ono što nam treba, zar ne?

Da biste riješili problem, možete, naravno, dodati parametar upitu, na primjer, parametrima virtualne tablice SalesTurnover, ali se u isto vrijeme gubi fleksibilnost postavljanja vrste poređenja.

Postoji rješenje: za ovo u query builder na kartici Sastav podataka => Stolovi dodajte polje uslova uslovima virtuelne tabele SalesTurnover i promijeni mu nadimak u CounterpartySelection

Kako ne bismo zbunili korisnika sa izbornim poljima, onemogućit ćemo polje uvjeta Counterparty i promijenite naslov polja CounterpartySelection


Kao rezultat izvršavanja ove šeme sa odabirom omogućenim u polju druge strane, rezultirajući upit će poprimiti oblik:

SELECT Referentna nomenklatura.Link AS Nomenklatura, SalesPromet.Counterparty AS Counterparty, SalesPromet.Counterparty Agree AS Ugovor o drugoj strani, SalesTurnover.QuantityTurnover AS >Količina, SalesTurnover.Cost.Cost.Surnepart ) AS ContractController agentUvod, REPRESENTATIONLINK(Promet prodaje. Counterparty) AS CounterpartyIntroduction, SprNomenclature.Presentation AS NomenclaturePresentation FROM Directory.Nomenclature AS SprNomenclature LEFT CONNECTION Registrirajte Akumulacije.Prodaja.Promet(&P , , , Counterparty = &P3Turnover Sales.Spr. Nomenklatura

I shodno tome rezultat:

Counterparty Sporazum Nomenklatura Količina Sum
null null _Test1 null null
DOO "Horns and Hooves" Sporazum1 Papuče 10 1200
null null Čizme null null
null null Galoše null null
null null Slates null null

Test1 je grupa u imeniku Nomenklature u kojoj se sve nalazi

U prilogu publikacije je XML šema izvještaja koji se koristi u publikaciji. Napravio sam krug u Integrated Automation, ali mislim da će sve raditi dobro i u UPP iu UT 10

Sumiranje

Ovaj primjer pokazuje kako kreirati vlastite postavke odabira u sistemu kontrole pristupa i onemogućiti one automatski kreirane ako dizajnirate kolo sa omogućenom zastavicom Autofill.

Ako imate dovoljno iskustva da kreirate kola bez upotrebe Autofill- onda ovaj savjet nema smisla.

Korišćen softver

  • Program za snimanje ekranaSnimOK!
  • XML File Editor

Pažnja! Ovo je uvodna verzija lekcije, čiji materijali mogu biti nepotpuni.

Prijavite se na stranicu kao student

Prijavite se kao učenik za pristup školskim materijalima

Sistem sastavljanja podataka 1C 8.3 za početnike: povezivanje skupova podataka

  • Napišite izvještaj koji prikazuje kupce i njihove omiljene proizvode. Svaki klijent ima omiljenu boju, a svaki proizvod ima svoju boju - na osnovu ovih boja morate odrediti "omiljeniku" proizvoda. Na primjer, ako je Andreyjeva omiljena boja crvena, onda će jedna od njegovih omiljenih namirnica biti paradajz (crveni su).
  • Primijenite dva skupa podataka u izvještaj. Prvi skup su podaci iz tablice direktorija "Klijentsi". Drugi su podaci iz tabele imenika „Hrana“.
  • Implementirati vezu između ova dva skupa, tako da izvještaj sadrži samo omiljene proizvode za svakog klijenta.

Kreirajte novi izvještaj

Otvorite bazu podataka "Gastronom" u konfiguratoru i kreirajte novi izvještaj kroz glavni meni:

Vrsta dokumenta - "Spoljni izvještaj":

U obliku novog izvještaja navedite naziv „Lekcija 6“ i kliknite na dugme „Otvori dijagram sastava podataka“:

Ostavite zadani naziv šeme:

Dodavanje prvog skupa podataka

U dijagramu koji se otvori idite na karticu "Skupovi podataka" i odaberite "Dodaj skup podataka - upit" koristeći zeleni znak plus:

Pozovite konstruktora zahtjeva:

Navodimo tabelu "Kupci" i polja koja treba dobiti iz zahtjeva:

Dodavanje drugog skupa podataka

Dodajte drugi skup podataka:

Odaberite ga (DataSet2) i ponovo pozovite konstruktor upita:

Navodimo tablicu imenika "Hrana" i polja koja je potrebno dobiti iz zahtjeva:

Rezultirajući tekst zahtjeva je bio:

Imajte na umu da trenutno imamo dva skupa podataka u izvještaju: skup podataka1 i skup podataka2. Svaki od njih ima svoj tekst i podatke.

Učinite imena opisnijima

Radi jasnoće, preimenujmo DataSet1 u Customers i DataSet2 u Food.

Učinite to dvostrukim klikom na svaki od skupova:

Podatke iz svakog skupa možemo koristiti u našem izvještaju. Ovim podacima ćemo pristupiti putem polja.

IN trenutno Set “Klijentsi” ima sljedeća polja: “Ime” i “FavoriteColor”, a set “Hrana” ima: “Naziv” i “Boja”.

Vidimo da se imena preklapaju i lako se možemo zbuniti. Zato promijenimo nazive polja da budu opisniji.

Odaberite skup "Klijentsi" i promijenite nazive polja na sljedeći način:

Zatim odaberite set “Hrana” i promijenite nazive polja na sljedeći način:

Pozivanje konstruktora postavki

Na kraju, idite na karticu "Postavke" i kliknite na čarobni štapić da biste otvorili dizajner postavki:

Vrsta izvještaja - "Lista...":

Odaberite polja za izvještaj iz oba skupa:

Vidite zašto je bilo toliko važno promijeniti nazive polja? U fazi podešavanja kompozicije podataka ne vidimo iz kojih skupova su ova polja. Vidimo samo njihova imena.

Provjeravam izvještaj

Spremamo izvještaj i generiramo ga u korisničkom načinu rada:

Da. U redu, ali ne baš. Došlo je do takozvanog unakrsnog spajanja dva skupa (trebalo bi biti dobro upoznati s tim iz spojeva u upitima koje smo proučavali u prethodnim modulima). Svaki zapis iz tabele Kupci ima odgovarajući zapis iz tabele Hrana.

Ali od svih ovih zapisa, moramo ostaviti samo one čije je polje „Client’s FavoriteColor” jednako polju „FoodColor”:

Povezujemo dva skupa podataka

Da bismo to učinili, spojit ćemo dva skupa podataka (Kupci i Hrana) koristeći polja Customer's FavoriteColor i FoodColor.

Idite na karticu "Veze skupa podataka" i kliknite na dugme plus da dodate novu vezu:

Konfigurišemo parametre kao na slici ispod:

Daću objašnjenje.

Izvor i prijemnik komunikacije. Pa, ovde je sve jasno. Označavamo prvi skup (Kupci) i drugi skup (Hrana) podataka. Posebno bih skrenuo pažnju na to da će se komunikacija odvijati po principu vanjski lijevi spoj(o tome smo govorili u temi zahtjeva u prethodnim modulima). Na osnovu toga morate odabrati koji će set biti izvor, a koji prijemnik.

Izvor izraza. Ovdje ukazujemo na izraz ili jednostavno polje iz izvornog skupa podataka (naveli smo polje ClientFavoriteColor iz Client skupa ovdje).

Izraz prijemnika. Ovdje označavamo izraz ili jednostavno polje iz skupa podataka prijemnika (ovdje smo naznačili polje ColorFood iz skupa hrane).

Dakle ovu vezuće sa prethodne liste ostaviti samo one redove za koje je polje FavoriteColor Kupca jednako polju FoodColor.

Sačuvajmo izvještaj i pokrenimo ga u korisničkom modu:

Odlično!

Daću objašnjenje o terenu" Stanje komunikacije“, o čemu programeri početnici tako često udaraju u koplja.

Uvjet veze je pomoćno polje. Tu možete napisati izraze koji uključuju polja samo iz skupa podataka specificiranog u izvoru veze.

U ovom slučaju, za sve redove iz izvora veze, ovaj izraz (uvjet veze) će se provjeriti prije nego što se poveže. A ako je ovaj izraz TRUE, tada će se pokušati uspostaviti veze između ovog reda i redova iz prijemnika veze. Ako je izraz FALSE, tada neće biti učinjeni takvi pokušaji.

Kako raditi