SCD objekt skupa podataka. ACS i vanjski izvori podataka

U svom prošlom članku već sam napisao da je 1C paradoksalna platforma. Sustav sastavljanja podataka jedan je od tih paradoksa. SKD je dizajniran za dizajniranje složenih izvješća i uključuje zamjenu "ručnog" programiranja izvješća dizajnom u višenamjenskom alatu. Mogućnost korištenja sustava kontrole pristupa pojavila se u osmoj verziji, no trebalo je dosta vremena da se pojavi verzija 8.2 kako bi je 1C mogao koristiti u svojim standardnim proizvodima. S jedne strane, ACS je višenamjenski alat pomoću kojeg možete izraditi vrlo složena izvješća bez ijednog retka koda. Međutim, sustav kontrole pristupa ima prilično visoku barijeru za ulazak; naučiti i početi ga u potpunosti koristiti "u hodu" je vrlo teško, jer sučelje nije potpuno intuitivno, a najpotpuniji priručnici za korištenje dostupni su samo u oblik plaćene literature.

U procesu mog proučavanja SKD-a pojavio se problem. Potrebno je dobiti podatke iz tablice vrijednosti treće strane pomoću upitnog jezika i zatim upravljati tim podacima kao sa sličnim podacima iz tablica baze podataka (operacije redukcije, grupiranje i tako dalje). U klasičnom formatu, stvorili bismo upit koji prima informacije iz tablice proslijeđene upitu kao parametar.

Zahtjev = Novi zahtjev(
„IZABIRAJ
| Tablica.Nomenklatura,
| Stol.Skladište
|OD
| &TK AS tablica");
Request.SetParameter("TZ", TZ);

Ali sa SKD-om sve nije tako jednostavno. Nažalost, nemoguće je izvesti gore opisanu operaciju u sustavu za sastavljanje podataka. Međutim, sustav ima implementiranu mogućnost učitavanja vanjskih tablica vrijednosti.

Ovdje vrijedi napraviti kratku digresiju i govoriti o skupovima podataka. Skupovi podataka su izvori informacija iz kojih sustav za upravljanje podacima prima podatke koje kasnije objedinjuje u izvješće. Skupovi podataka podijeljeni su u vrste, uglavnom koristeći tip "Upit", u čijem tijelu programer piše upit prema bazi podataka. Tip "Object" koristi se za učitavanje podataka iz vanjskih objekata. U oba slučaja izlaz je određeni skup polja dobivenih kao rezultat izvršavanja zahtjeva ili učitavanja vanjskog objekta. Kasnije se ovim poljima može manipulirati na kartici "Postavke", zajedno s detaljnim postavkama za strukturu izvješća. Za međusobno povezivanje različitih skupova, ACS pruža mogućnost označavanja veza između skupova podataka u kartici istog naziva. Ove veze izravni su analog lijevog spajanja u klasičnom upitu. Međutim, treba uzeti u obzir da upiti u bilo kojem skupu podataka ne "znaju" za postojanje drugih skupova podataka, u konačnici će odnosi između skupova podataka utjecati na raspored podataka prema strukturi navedenoj u "; Postavke”.

Opišimo problem do detalja na primjeru. Postoji standardni izvještaj: Izvodi plaća za organizaciju konfiguracije ZiK 8. Potrebno je da vrste obračuna u izvještaju budu grupirane u određene skupine. Izračun View-Group korespondencije pohranjene su u vanjskoj tablici vrijednosti. Da bismo ga učitali u glavnu shemu rasporeda podataka, kreiramo "objekt skupa podataka" pod nazivom "Grupe" (Slika 2). Povezujemo sa “setom podataka upita” - “Pravo razgraničenja” po vrsti obračuna (slika 3). U “skupu podataka zahtjeva” - “Razgraničenja” nalaze se podaci 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šća nadopunjujemo učitavanje vanjskih podataka.

Funkcija GenerateReport(Rezultat = Nedefinirano, Podaci o dešifriranju = Nedefinirano, OutputInReportForm = True) Izvoz

//dobivanje ili formiranje tražene tablice vrijednosti “Grupe” i zapisivanje u istoimenu varijablu

ExternalData = New Structure();//stvorite i ispunite vanjsku strukturu podataka
VanjskiPodaci.Umetni(Grupe);

UserPanelValue = TypicalReports.GetUserPanelSettingValuesofObject(ThisObject);
Zadane postavke = SettingsComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
Vrati rezultat;

EndFunction

Da smo izrađivali izvješće od nule, kod za pokretanje generiranja izvješća izgledao bi ovako:

ExternalDataSets = nova struktura;
ExternalDataSets.Insert("Grupe", Grupe); //Grupe - željena tablica vrijednosti
Shemakompozicije podataka = GetLayout("Glavna shemakompozicijepodataka"); //naš izgled s dijagramom protoka podataka
Postavke = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = noviDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Novi tabularni dokument;
IzlazniProcesor = Novi IzlazniProcesorDataCompositionResultInTabularDocument;
Izlazni procesor.PostaviDokument(TabDoc);
IzlazniProcesor.Izlaz(ProcesorKompozicijePodataka);

Čitati 9660 jednom

Prilikom otvaranja novih podružnica tvrtke, da biste izračunali opterećenje poslužitelja 1C:Enterprise i druge zadatke, možda ćete morati pogledati dinamiku rada korisnika u informacijskoj bazi u obliku dijagrama.

Dinamika mora biti prikazana za razdoblje koje korisnik odabere. Prikazani podaci bit će broj radnji koje su ti korisnici poduzeli po satu. Podaci za takvo izvješće mogu se dobiti iz dnevnika.

Razmotrimo korak po korak stvaranje takvog izvješća i, koristeći vanjski skup podataka, izgradimo ga na sustavu za sastavljanje podataka.

Čitanje dnevnika registracije

I tako ćemo izraditi izvješće o sustavu kontrole pristupa. Podatke ćemo primati ne koristeći upit iz baze podataka, već iz dnevnika registracije. O načinu na koji platforma pohranjuje dnevnik pisao sam u prethodnom članku.

U skladu s navedenim razdobljem u izvješću, moramo dobiti sve radnje korisnika na podacima infobaze. Grupirajte dobivenu tablicu prema korisniku i prikažite je kao dijagram (pogledajte gornju snimku zaslona).

Za dobivanje informacija iz dnevnika registracije koristit ćemo metodu globalnog konteksta "UnloadRegistrationLog()". U događaju "On Result Layout" kreiranog izvješća dodajte sljedeći programski kod:

Procedura pri sastavljanju rezultata (Rezultat dokumenta, Podaci o dešifriranju, Standardna obrada) Standardna obrada = False ; // onemogući standardni izlaz izvješća - mi ćemo ga ispisati programski // Dobivanje postavki izvješća, uklj. razdoblje Postavke = Sastavljač postavki. GetSettings() ; // Dobivanje postavki izvješća ParameterPeriod = LinkerSettings. GetSettings() . Parametri podataka. Elementi. Pronađite ("Točka"). Značenje; ZhurTab = Nova tablica vrijednosti; LogSelection = Nova struktura; // Stvaranje strukture odabira dnevnika // Ispunite odabir po razdoblju Izbor časopisa. Insert("Početni datum", ParametarPeriod.Početni datum) ; Izbor časopisa. Insert("Završni datum", ParametarPeriod.Završni datum) ; // Postavi odabir za događaje EventArray = Novi niz; EventArray. Dodaj(" _$Podaci$_ . Izbrisati. Novi" ); Niz događaja. Add(" _$Data$_ . Post" ); Niz događaja. Add(" _$Data$_ . TotalsPeriodUpdate" ); Niz događaja. Add(" _$Data$_ . Poništi objavu" ); Niz događaja. Add(" _$Data$_ . Ažuriraj" ); Odabir dnevnika. Insert(" Event ", EventArray) ; // Učitaj dnevnik UnloadRegistrationLog(JourTab, EventArray) ; // Kreirajte i ispunite podatke za izlaz u izvješće ZhurTab. Stupci. Dodaj(" Vrijeme "); ZhurTab. Stupci. Dodati(" Broj događaja" ) ; Za svaku stranicu iz ciklusa časopisa Vrijeme stranice = sat (Datum stranice) ; Broj događaja na stranici = 1 ; Kraj ciklusa ; // Grupirajte rezultat ZhurTab. Kolaps(" Korisničko ime, vrijeme" , " Broj događaja" ) ; // ..............

Prvi parametar metode "UploadRegistrationLog" postavlja tablicu vrijednosti u koju će se učitati rezultat uzorkovanja iz dnevnika registracije. Drugi parametar je postavljanje filtra na odabrane zapise. Filtar je struktura čiji su ključevi polja po kojima se uspostavlja odabir. Koristimo polja "Datum početka" i "Datum završetka" za postavljanje razdoblja analize dnevnika, kao i polje "Događaj" u koje prosljeđujemo niz nizova (imena događaja). Događaji dodani nizu odgovaraju radnjama na podacima u bazi podataka.

Možete pročitati više o korištenju metode "UploadRegistrationLog" u pomoćniku za sintaksu.

Tablicu vrijednosti prenosimo u sustav kontrole pristupa

Kako bi ACS mogao raditi s rezultirajućom tablicom vrijednosti, morate učiniti sljedeće:

1) Napravite skup podataka u dijagramu izgleda i postavite njegova polja.
2) U programskom kodu modula "Prilikom sastavljanja rezultata" registrirajte prijenos tablice vrijednosti u sustav kontrole pristupa.

// Grupirajte rezultat ZhurTab. Kolaps(" Korisničko ime, vrijeme" , " Broj događaja" ) ;DecryptionData = NewDataCompositionDecryptionData; // Stvaranje podataka za dešifriranje LayoutLinker = newDataLayoutLayoutLinker; // Stvorite alat za izradu izgleda // Inicijaliziraj izgled izgleda pomoću sheme rasporeda podataka // i prethodno stvorene postavke i podaci za dešifriranje DataLayoutScheme = GetLayout(" Shema rasporeda osnovnih podataka" ) ; Layout Layout = Layout Linker. Izvrši (Shema rasporeda podataka, postavke, podaci za dešifriranje) ; // Sastavite rezultat ComppositionProcessor = newDataCompositionProcessor; ProcessorLayout. Inicijaliziraj(LayoutLayout, // !!! Tablicu "ZhurTab" prenosimo u procesor izgleda!!! Nova struktura (" Registracija časopisa" , JournalTab), Podaci o dešifriranju); Rezultat dokumenta. Očisti(); // Ispis rezultata u dokument proračunske tablice IzlazniProcesor = Novi IzlazniProcesorDataCompositionResultInTabularDocument; Izlazni procesor. PostaviDokument(DokumentRezultat) ; Izlazni procesor. Izlaz(LayoutProcessor) ; EndProcedure

3) Postavite resurse i strukturu izvješća (za više detalja pogledajte datoteku izvješća, poveznica na koju se nalazi na kraju članka).

U ovom trenutku, postavke izvješća su dovršene i možemo ga pokrenuti u poslovnom načinu rada.

Poanta

Vanjski izvor podataka u ACS-u omogućuje nam korištenje podataka iz gotovo svih izvora u izvješćima, uključujući one čije podatke ne možemo dobiti putem upita.

Korištenje ACS-a za takve izvore omogućuje vam stvaranje izvješća s fleksibilnim sustavom postavki, a također omogućuje korisniku promjenu izlaza izvješća i njegove strukture. Za takve izvore u potpunosti će se koristiti sve mogućnosti sustava za komponiranje podataka.

Izvješće možete preuzeti iz primjera na sljedećoj poveznici.

Zdravo!
Danas želim opisati temu koju ne možete razumjeti bez ronilačke opreme :) ;)

Ronjenje znači da je ronjenje dosta duboko. Malo je referenci na ovu temu u literaturi i nećete je moći razumjeti dok ne dobijete želju. Neće biti ni poruke za takvu akciju ;) Usput, dokumentacija o tome govori vrlo loše i nedosljedno; morate se obratiti literaturi trećih strana.

Na primjer, toplo preporučujem "Razvoj složenih izvješća u 1C:Enterprise 8.2". Sustav sastavljanja podataka", (konkretnije, pogledajte stranice 224, 267 i 473)

U ACS-u postoje 2 vrste izvora podataka: Upit, objekt i unija (ovo se ne računa, nije izvor podataka, već procesor postojećih podataka). Pogledajte sliku 1:


Dakle, ako više-manje razumijemo kako raditi s izvorom (skupom) podataka tipa "Upit", onda postoje poteškoće sa skupom podataka "Objekt".

Prvo ću opisati što želimo dobiti kao rezultat:

Prijavi, korisnik je kliknuo na " Oblik» i prikazao se popis stavki (vidi sl. 2):

Da, napravio sam jednu netočnost, naime: nema gumba " Oblik", ali postoji gumb " nova akcija"(Malo kasnije ću objasniti zašto se to dogodilo;)

Da da! Još jedna točka: cijeli ovaj popis izveden je iz skupa podataka "Objekt":

Riješenje:

  1. Napravite vanjsko izvješće;
  2. Dodajte raspored ACS-a, nazovimo ga “Glavna shema izgleda podataka”;
  3. Dodamo mu skup podataka "Objekt", dodijelimo mu naziv "Popis nomenklature" (trebao bi biti isti kao na slici 3);
  4. Ne eksperimentiramo previše s postavkama izvješća, neka sve bude jednostavno (vidi sliku 4)

Ok, pola posla obavljeno ;)

Generirajmo sada glavni obrazac izvješća (da, još jedna stvar! Moja konfiguracija radi na običnom sučelju, ali mislim da ćete pronaći rješenje na upravljanim obrascima;) Dakle, obrazac:

Tu nastaje problem! Ako kliknemo na gumb “generiraj” (slika 5.), vidjet ćemo grešku!


Ovaj sam članak posvetio rješavanju ovog problema!

Nije bilo moguće presresti događaj gumba "Generiraj", pa sam odlučio upotrijebiti štaku. Pokrenuo sam konfiguraciju u načinu za otklanjanje pogrešaka i pokušao pronaći gumb "generiraj".

Ubacio sam proceduru “Generiraj” u formu, ali u njoj nema unosa, morao sam redefinirati radnju gumba “forma” prije otvaranja forme:


Na sl. Osim promjene djelovanja obrasca, slika 8 prikazuje primjer zahtjeva, njegovu obradu i prijenos generiranih podataka u sustav kontrole pristupa. Proučimo to pažljivije:

  1. Generiramo ulazne podatke za sustav kontrole pristupa;
  2. Inicijaliziramo sustav kontrole pristupa;
  3. Rezultat prikazujemo NA OBRASCU (obratite pozornost i na ovo!).

Prisjetimo se dijagrama interakcije objekata sustava sastava podataka:

Shema rasporeda podataka u vanjskom izvješću dostupna je kao globalni objekt u metodi obrasca Shema sastavljanja podataka. Također mu možete pristupiti imenom tako da ga proslijedite metodi GetLayout(vidi sliku 8)

Glavni dio koda je ispod:

Zahtjev = Novi zahtjev; Query.Text = "SELECT | Nomenclature.Name as Nomenclature |FROM | Directory.Nomenclature AS Nomenclature"; NomenclatureList = Request.Run().Upload(); Skupovi podataka = Nova struktura ("Popis nomenklature", Popis nomenklature); //SKD = ​​​​GetLayout("MainData LayoutScheme"); SKD = ​​​​Shema sastavljanja podataka; LayoutComp = novi DataLayoutComposer; layoutComp = LayoutComp.Execute(SKD, SKD.DefaultSettings); CompDataProcessor = novi DataCompositionProcessor; ProcessorCompData.Initialize(layoutComp, DataSets); output = new DataCompositionResultOutputProcessorInTabularDocument; output.SetDocument(FormElements.Result); output.Output(ProcessorCompData, true);

Da! Evo još jednog lijepog trenutka!!!

U ovom primjeru, kao što vidite (vidi sliku 2), izlaz se izvodi u obliku, a ne u tablici. dokument! I to je jako dobro, jer možemo raditi s formom (programski presresti događaje elementa forme, izvoditi razne trikove s povlačenjem i ispuštanjem itd.;)

U tabličnom dokumentu možemo jednostavno prikazati obrađene podatke na ekranu i prenijeti kontrolu nad dokumentom na korisnika te ni na koji način ne možemo utjecati na daljnji proces uređivanja ovog sadržaja!

Pogledajte sustav pomoći " Polje dokumenta proračunske tablice “, a ja ću samo dati izvadak iz ugrađene dokumentacije sustava 1c Enterprise 8.2:

“Polje dokumenta proračunske tablice je dokument proračunske tablice postavljen na obrazac. Zajedno s različitim mogućnostima dizajna dokumenta proračunske tablice, to vam omogućuje organiziranje obrade događaja koji se događaju prilikom odabira ćelija, slika, kao i drugih kontrola postavljenih u polje dokumenta proračunske tablice.”

Ok, kako kažu, sretno u borbi;)

Ponekad se dogodi da podatke u izvješću nije moguće dobiti pomoću upita ili kombinacije upita. Za prikupljanje podataka morate koristiti neke postupke, a podaci se stavljaju u tablicu vrijednosti. Postavlja se pitanje - mogu li se ti podaci koristiti u shemi sastavljanja podataka? Uostalom, SKD alat je moćan i praktičan. Pokazalo se da je podatke iz tablice vrijednosti moguće koristiti kao izvor podataka za izvješće u sustavu kontrole pristupa i to nije nimalo teško napraviti. Ovaj će vam članak pokazati kako izraditi takvo izvješće za obične obrasce.
Dakle, kako izraditi ACS izvješće koristeći podatke iz tablice vrijednosti? Prvo najprije.
Prvo otvorite konfigurator i kreirajte novo vanjsko izvješće.

Otvorite objektni modul i izradite unaprijed definiranu proceduru prilikom sastavljanja rezultata (DocumentResult, Decryption Data, StandardProcessing)

Unutar ovog postupka prikupit ćemo podatke i generirati izvješće.
U postupku Prilikom sastavljanja rezultata onemogućujemo standardnu ​​obradu. Standardna obrada = False;
Zatim formiramo tablicu vrijednosti na proizvoljan način. Nazivi stupaca tablice vrijednosti moraju odgovarati budućim poljima skupa podataka u ACS-u:


Na primjer, dodajmo tri retka podataka. Zatim korak po korak stvaramo izlaz izvješća.

  • Iz dijagrama dobivamo zadane postavke.

  • Podatke za dešifriranje šaljemo odgovarajućoj varijabli.

  • Izgled stvaramo pomoću alata za izradu izgleda.

  • Dijagram, postavke i podatke o dekodiranju prenosimo u izgled izgleda.

  • Izgled izvodimo pomoću layout procesora. Da biste to učinili, izvršite metodu Initialize() procesora za komponiranje podataka. Kao parametre prosljeđujemo raspored sastava podataka, vanjske skupove podataka (tip: Struktura, ključ strukture mora odgovarati nazivu objekta u shemi sastava podataka, vrijednost je generirana tablica vrijednosti), podatke za dešifriranje.

  • Očistite polje dokumenta proračunske tablice.

  • Rezultat prikazujemo u dokumentu proračunske tablice.
Rezultat je sljedeći kod:
DataLayoutSchema = GetLayout( "MainDataCompositionSchema"); //Postavke = Shemakompozicije podataka.DefaultSettings; // - Ako to učinite kao što je gore prikazano (preporučeno na nekim resursima), tada kada promijenite postavke u načinu klijenta // nećete vidjeti te promjene, jer će postavke uvijek biti zadane. Kako to učiniti ispravno - opcija u nastavku Postavke = Sastavljač postavki. GetSettings(); DecryptionData = newDataCompositionDecryptionData; LayoutLinker = newDataLayoutLayoutLinker; LayoutLayout = LayoutLocker. Izvrši (Shema sastavljanja podataka, postavke, podaci za dešifriranje); ExternalDataSet = Nova struktura( "Primjer tablice vrijednosti", TZOizlaz); DataCompositionProcessor = noviDataCompositionProcessor; DataCompositionProcessor. Inicijaliziraj(LayoutLayout, ExternalDataSet, DecryptionData); DokumentRezultat. Čisto();

Stvaramo skup podataka. Da biste to učinili, dodajte novi skup podataka tipa Objekt. U polje Name objekta koji sadrži podatke postavljamo ime koje smo naveli kao ključ prilikom kreiranja strukture External DataSet. Zatim dodajemo polja. Nazivi moraju točno odgovarati nazivima stupaca u tablici vrijednosti. Zatim možemo odrediti prihvatljive vrijednosti, formate itd.

Dodajte resurse ako je potrebno. Na temelju njih će se izračunati rezultati. U našem slučaju to su polja Količina i Količina.

Na kartici Postavke pomoću dizajnera postavki stvaramo zadanu opciju izvješća

Spremamo naše izvješće. Pokrećemo ga u klijentu i kreiramo ga. Na slici je prikazan primjer izvođenja ACS izvješća korištenjem podataka iz tablice vrijednosti.


To je sve. Dovoljno jednostavno, zar ne?

Dobiveni primjer izvješća može se preuzeti

41
Nedavno sam napravio izvještaj s neodređenim brojem stupaca. Nisam htio petljati s kodom, pa sam odlučio to učiniti na sustavu kontrole pristupa. Tu nije bilo problema, bilo je potrebno razvući rezultat na proizvoljan layout (vlastito zaglavlje +... 27
Iako studenti CDS-a naiđu na ovo prvi ili drugi dan, to bi trebalo biti u odjeljku FAQ. Jednostavan primjer programskog ispisivanja izvješća o izgledu, korištenjem zadanih postavki. //Preuzmi dijagram od... 18
Kod generiranja izvještaja na sustavu kontrole pristupa standardno su sve grupacije proširene, no ponekad je potrebno odmah nakon generiranja prikazati izvještaj sa sažetim grupama! Ovaj kod u modulu izvješća omogućuje vam sažimanje... 10
Na ovoj kartici možete odrediti koje veze se uspostavljaju između dva ili više skupova podataka, prema kojim parametrima i uvjetima..png 1. “Izvor veze” - označava prvi skup podataka, od... 9
Ono što je potrebno kod izrade izvještaja je da se za korisnika s ograničenim pravima, izvještaj generira potpuno bez provjere prava! Osobito ako je RLS konfiguriran, postoji nekoliko načina za to: 1. Instalirajte...



Povezane publikacije