1s 8 töltse fel az ACS-t az értéktáblázatba. ACS és külső adatforrások

Egy vállalat új fiókjainak megnyitásakor az 1C:Enterprise szerver terhelésének és egyéb feladatok kiszámításához előfordulhat, hogy diagram formájában meg kell néznie a felhasználói munka dinamikáját az információs bázisban.

A dinamikát a felhasználó által kiválasztott időszakra kell megjeleníteni. A megjelenített adatok a felhasználók által végrehajtott műveletek száma lesz óránként. Az ilyen jelentéshez szükséges információk a naplóból szerezhetők be.

Tekintsük egy ilyen jelentés lépésről lépésre történő létrehozását, és külső adatkészlet segítségével építsük fel egy adatösszeállítási rendszerre.

A regisztrációs napló olvasása

Így a jelentést a beléptető rendszerre építjük. Az adatokat nem lekérdezéssel az adatbázisból, hanem a regisztrációs naplóból kapjuk. Egy korábbi cikkben írtam arról, hogy a platform hogyan tárolja a naplót.

A jelentésben megadott időszaknak megfelelően minden felhasználói műveletet meg kell kapnunk az infobázis adatokkal kapcsolatban. Csoportosítsa az eredményül kapott táblázatot felhasználó szerint, és jelenítse meg diagramként (lásd a fenti képernyőképet).

A regisztrációs naplóból való információszerzéshez az "UnloadRegistrationLog()" globális kontextusmódszert használjuk. A létrehozott jelentés "Eredményelrendezés" eseményében adja hozzá a következő programkódot:

Eljárás az eredmény összeállításánál (DocumentResult, Decryption Data, StandardProcessing) StandardProcessing = False ; // letiltja a szabványos jelentéskimenetet - programozottan fogjuk kiadni // A jelentésbeállítások lekérése, beleértve a időszak Beállítások = Beállítások Zeneszerző. GetSettings() ; // Jelentésbeállítások lekérése ParameterPeriod = LinkerSettings. GetSettings() . Adatparaméterek. Elemek. Find("Időpont"). Jelentés; ZhurTab = új értéktábla; LogSelection = Új struktúra; // Naplókiválasztási struktúra létrehozása // A kijelölést pont szerint töltse ki Folyóirat kiválasztása. Insert("Kezdődátum", ParaméterPeriod.Kezdődátum) ; Folyóirat kiválasztása. Insert("EndDate", ParameterPeriod.EndDate) ; // Események kijelölésének beállítása EventArray = Új tömb; EventArray. Add(" _$Data$_ . Töröl. Új" ); Eseménytömb. Add(" _$Data$_ . Hozzászólás" ); Eseménytömb. Add(" _$Data$_ . TotalsPeriodUpdate" ); Eseménytömb. Add(" _$Data$_ . Feladás visszavonása" ); Eseménytömb. Add(" _$Data$_ . Frissítés" ); Napló kijelölése. Insert(" Event ", EventArray) ; // Töltsd fel a naplót UnloadRegistrationLog(JourTab, EventArray) ; // Létrehozza és töltse ki az adatokat a jelentéshez ZhurTab. Oszlopok. Add(" Idő "); ZhurTab. Oszlopok. Add(" Események száma" ) ; A naplóciklus minden oldalához Oldalidő = óra (oldaldátum); Események oldalszáma = 1; Ciklus vége ; // Csoportosítsa az eredményt ZhurTab. Összeomlás(" Felhasználónév, idő" , " Események száma" ) ; // ..............

Az "UploadRegistrationLog" metódus első paramétere beállít egy értéktáblázatot, amelybe a regisztrációs naplóból származó mintavétel eredménye feltöltésre kerül. A második paraméter egy szűrő beállítása a kiválasztott rekordokon. A szűrő egy struktúra, amelynek kulcsai azok a mezők, amelyekkel a kiválasztás létrejön. A "Kezdő dátum" és a "Befejezés dátuma" mezőket használjuk a naplóelemzési időszak beállítására, valamint az "Esemény" mezőt, amelybe karakterláncokat (események neveit) adunk át. A tömbhöz hozzáadott események az adatbázisban lévő adatokkal kapcsolatos műveleteknek felelnek meg.

Az "UploadRegistrationLog" metódus használatáról a szintaktikai asszisztensben olvashat bővebben.

Az értéktáblázatot átvisszük a beléptető rendszerbe

Ahhoz, hogy az ACS működni tudjon a kapott értéktáblázattal, a következőket kell tennie:

1) Hozzon létre egy adatkészletet az elrendezési diagramon, és állítsa be a mezőit.
2) Az "Eredmény összeállításakor" modul programkódjában regisztrálja az értéktáblázat átvitelét a beléptető rendszerbe.

// Csoportosítsa az eredményt ZhurTab. Összeomlás(" Felhasználónév, idő" , " Események száma" ) ;DecryptionData = NewDataCompositionDecryptionData; // Dekódolási adatok létrehozása LayoutLinker = newDataLayoutLayoutLinker; // Elrendezéskészítő létrehozása // Az elrendezés elrendezésének inicializálása az adatelrendezési séma használatával // és a korábban létrehozott beállításokat és visszafejtési adatokat DataLayoutScheme = GetLayout(" MainData elrendezési séma" ) ; Layout Layout = Layout Linker. Végrehajtás (adatelrendezési séma, beállítások, visszafejtési adatok) ; // Állítsa össze az eredményt CompositionProcessor = newDataCompositionProcessor; ProcesszorElrendezés. Inicializál(LayoutLayout, // !!! A "ZhurTab" táblát átvisszük a layout processzorba!!!Új szerkezet(" JournalRegistration" , JournalTab), Decryption Data); DocumentResult. Clear(); // Az eredményt egy táblázatkezelő dokumentumba írja ki OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument; Kimeneti processzor. SetDocument(DocumentResult) ; Kimeneti processzor. Output(LayoutProcessor) ; Az eljárás vége

3) Állítsa be a jelentés forrásait és struktúráját (további részletekért lásd a jelentésfájlt, amelynek hivatkozása a cikk végén található).

Ekkor a jelentésbeállítások elkészültek, és vállalati módban futtathatjuk.

A lényeg

Az ACS-ben található külső adatforrás lehetővé teszi, hogy szinte bármilyen forrásból származó adatokat felhasználjunk a jelentésekben, beleértve azokat is, amelyek adatait lekérdezésekkel nem tudjuk megszerezni.

Az ACS használata az ilyen forrásokhoz lehetővé teszi a jelentések készítését rugalmas beállítási rendszerrel, valamint lehetővé teszi a felhasználó számára a jelentés kimenetének és szerkezetének megváltoztatását. Az adatösszeállítási rendszer minden képessége teljes mértékben ki lesz használva az ilyen forrásokhoz.

A jelentést letöltheti a példából az alábbi linken.

Legutóbbi cikkemben már írtam, hogy az 1C egy paradox platform. Az adatösszeállítási rendszer az egyik ilyen paradoxon. Az SKD komplex jelentések tervezésére készült, és magában foglalja a „kézi” jelentésprogramozást a tervezéssel egy többfunkciós eszközkészletben. A beléptetőrendszerek használatának lehetősége a nyolcadik verzióban jelent meg, de sokáig tartott a 8.2-es verzió megjelenése, hogy az 1C használni tudja a szabványos termékeiben. Az ACS egyrészt egy többfunkciós eszköztár, amellyel nagyon összetett riportok készíthetők egyetlen kódsor nélkül. A beléptető rendszernek azonban meglehetősen magas a belépési korlátja, nagyon nehéz megtanulni és „menet közben” teljesen használni, mert a felület nem teljesen intuitív, és a legteljesebb használati útmutatók csak a fizetett irodalom formája.

Az SKD vizsgálata során probléma merült fel. Adatokat kell beszerezni egy harmadik féltől származó értéktáblázatból egy lekérdezési nyelv segítségével, majd ezeket az adatokat úgy kell kezelni, mint az adatbázistáblák hasonló adatait (redukciós műveletek, csoportosítás stb.). A klasszikus formátumban létrehoznánk egy lekérdezést, amely a lekérdezésnek paraméterként átadott táblából kap információkat.

Request = Új kérés(
"VÁLASZT
| táblázat.Nómenklatúra,
| Asztal.Raktár
|FROM
| &TK AS táblázat");
Request.SetParameter("TZ", TZ);

De az SKD-vel nem minden olyan egyszerű. Sajnos az adatösszeállítási rendszerben nem lehet végrehajtani a fent leírt műveletet. A rendszer azonban megvalósította a külső értéktáblázatok betöltésének lehetőségét.

Itt érdemes egy rövid kitérőt tenni, és beszélni az adatkészletekről. Az adatkészletek olyan információforrások, amelyekből az adatkezelő rendszer adatokat kap, amelyeket később jelentésbe állít össze. Az adatkészleteket típusokra osztják, főként a „Query” típus használatával, amelyek törzsében a programozó lekérdezést ír az adatbázisba. Az "Object" típust külső objektumokból származó adatok betöltésére használják. Mindkét esetben a kimenet egy kérés végrehajtása vagy egy külső objektum betöltése eredményeként kapott mezők bizonyos halmaza. Később ezek a mezők a „Beállítások” lapon módosíthatók, a jelentésszerkezet részletes beállításaival együtt. A különböző készletek összekapcsolásához az ACS lehetőséget biztosít az adatkészletek közötti kapcsolatok jelzésére az azonos nevű lapon. Ezek a kapcsolatok a bal oldali csatlakozás közvetlen analógjai egy klasszikus lekérdezésben. Figyelembe kell azonban venni, hogy egy adathalmazban a lekérdezések nem „tudnak” más adatsorok létezéséről, végső soron az adatsorok közötti kapcsolatok befolyásolják az adatok elrendezését a „Pontosában meghatározott struktúra szerint”. Beállítások” fülre.

Részletezzük a problémát egy példán keresztül. Van egy szabványos jelentés: Bérszámfejtések a konfiguráció szervezéséhez ZiK 8. Szükséges, hogy a jelentésben szereplő számítási típusokat bizonyos csoportokba csoportosítsák. A számítási nézet-csoport megfelelések egy külső értéktáblázatban tárolódnak. A fő adatelrendezési sémába való betöltéséhez létrehozunk egy „adatkészlet objektumot” „Csoportok” néven (2. ábra). Számítási mód szerint hozzuk létre a kapcsolatot a „lekérdezési adatkészlettel” - „Accruals” (3. ábra). Az „Adatkérés kérése” - „Elhatárolások” részben a csoportokra vonatkozó információk találhatók, minden bejegyzést törölünk. Ezt követően a „Beállítások” fülön használhatjuk a „Csoport” mezőt, melynek értéke külső adatforrásból töltődik be (4. ábra). A jelentéskészítés funkcióban kiegészítjük a külső adatok betöltését.

Funkció GenerateReport(Eredmény = Nem definiált, Dekódolási adatok = Nincs definiálva, OutputInReportForm = Igaz) Export

//a szükséges „Csoportok” értéktáblázat beszerzése vagy létrehozása és beírása az azonos nevű változóba

ExternalData = New Structure();//a külső adatstruktúra létrehozása és kitöltése
ExternalData.Insert(Csoportok);

UserPanelValue = Tipikus jelentések.GetUserPanelSettingsValuesofObject(ThisObject);
DefaultSettings = BeállításokComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
Eredmény visszaküldése;

EndFunction

Ha a semmiből készítenénk a jelentést, akkor a jelentésgenerálás indítókódja így nézne ki:

ExternalDataSets = új struktúra;
ExternalDataSets.Insert("Csoportok", Csoportok); //Csoportok - a kívánt értéktáblázat
DataCompositionSchema = GetLayout("MainDataCompositionSchema"); //elrendezésünk adatfolyam diagrammal
Beállítások = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Új táblázatos dokumentum;
OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Olvas 9660 egyszer

Helló!
Ma egy olyan témát szeretnék leírni, amit búvárfelszerelés nélkül nem lehet megérteni :) ;)

A búvárkodás azt jelenti, hogy a merülés meglehetősen mély. A szakirodalomban kevés utalás található erre a témára, és nem fogod megérteni, amíg nem kapsz kedvet. Nem is lesz üzenet egy ilyen akcióhoz ;) Egyébként a dokumentáció nagyon rosszul és következetlenül beszél erről, kell fordulni külső szakirodalomhoz.

Például nagyon ajánlom az „Összetett jelentések fejlesztése az 1C:Enterprise 8.2-ben” című részt. Adatösszetételi rendszer", (pontosabban lásd a 224., 267. és 473. oldalt)

Az ACS-ben 2 féle adatforrás létezik: Query, object és union (ez a dolog nem számít, nem adatforrás, hanem meglévő adatok feldolgozója). Lásd 1. ábra:


Tehát, ha többé-kevésbé értjük, hogyan kell dolgozni a „Lekérdezés” típusú adatforrással (készlettel), akkor az „Objektum” adatkészlettel nehézségek adódnak.

Először leírom, hogy mit szeretnénk kimenetként kapni:

Jelentés, a felhasználó rákattintott a " Forma» és az elemek listája jelenik meg (lásd: 2. ábra):

Igen, elkövettem egy pontatlanságot, nevezetesen: nincs gomb " Forma"de van egy gomb" új akció"(Kicsit később elmagyarázom, miért történt ez;)

Igen igen! Egy másik pont: ez a teljes lista az „Object” adatkészletből származik:

Megoldás:

  1. Hozzon létre egy külső jelentést;
  2. Adjon hozzá egy SDS-elrendezést, nevezzük „Fő adatelrendezési sémának”;
  3. Hozzáadjuk az „Object” adatsort, hozzárendeljük a „Nómenklatúra Lista” nevet (ugyanaz legyen, mint a 3. ábrán);
  4. Nem kísérletezünk túl sokat a jelentésbeállításokkal, legyen minden egyszerű (lásd 4. ábra)

Oké, a munka fele kész ;)

Most generáljuk a fő jelentési űrlapot (igen, még egy dolog! A konfigurációm normál felületen működik, de szerintem a kezelt űrlapokon találsz megoldást;) Tehát az űrlap:

Itt jön elő a probléma! Ha a „generálás” gombra kattintunk (5. ábra), hibát fogunk látni!


Ezt a cikket ennek a probléma megoldásának szenteltem!

A „Generate” gomb eseményét nem lehetett lehallgatni, ezért úgy döntöttem, hogy egy mankót használok. Elindítottam a konfigurációt hibakeresési módban, és megpróbáltam megtalálni a „generálás” gombot.

Az űrlapba beszúrtam a „Generate” eljárást, de nincsenek benne bejegyzések, az űrlap megnyitása előtt újra kellett definiálnom az „űrlap” gomb műveletét:


ábrán. Az űrlap műveletének megváltoztatása mellett a 8. ábra példát mutat egy kérésre, annak feldolgozására és a generált adatok továbbítására a beléptető rendszerbe. Tanulmányozzuk alaposabban:

  1. Bemeneti adatokat generálunk a beléptető rendszer számára;
  2. Inicializáljuk a beléptető rendszert;
  3. Az eredményt megjelenítjük AZ ŰRLAPON (erre is figyelj!).

Emlékezzünk vissza az adatösszetétel rendszerobjektumok interakciós diagramjára:

A külső jelentésben lévő adatelrendezési séma globális objektumként érhető el egy űrlapmetódusban DataComposition séma. Név szerint is elérheti, ha átadja a metódusnak GetLayout(lásd 8. ábra)

A kód fő része alább található:

Request = Új kérés; Query.Text = "SELECT | Nomenclature.Name as Nomenclature |FROM | Directory.Nomenclature AS Nomenclature"; NomenclatureList = Request.Run().Feltöltés(); DataSets = New Structure("NómenklatúraLista", NomenklatúraLista); //SKD = ​​GetLayout("MainData LayoutScheme"); SKD = ​​DataCompositionScheme; LayoutComp = új DataLayoutComposer; layoutComp = LayoutComp.Run(SKD, SKD.DefaultSettings); CompDataProcessor = új DataCompositionProcessor; ProcessorCompData.Initialize(layoutComp, DataSets); output = new DataCompositionResultOutputProcessorInTabularDocument; output.SetDocument(FormElements.Result); output.Output(ProcessorCompData, true);

Igen! Itt egy újabb szép pillanat!!!

Ebben a példában, amint láthatja (lásd a 2. ábrát), a kimenet űrlapon, és nem táblázatban történik. dokumentum! Ez pedig nagyon jó, mert tudunk dolgozni a formával (programozottan elkapni a form elem eseményeit, mindenféle trükköt csinálni fogd és vidd stb.;)

Egy táblázatos dokumentumban egyszerűen megjeleníthetjük a képernyőn a feldolgozott adatokat és átadhatjuk a dokumentum irányítását a felhasználónak, és ennek a tartalomnak a további szerkesztését semmilyen módon nem tudjuk befolyásolni!

Lásd a súgórendszert" Táblázat dokumentummező “, és csak egy kivonatot adok az 1c Enterprise 8.2 rendszer beépített dokumentációjából:

„A táblázatos dokumentummező egy űrlapon elhelyezett táblázatos dokumentum. A táblázatkezelő dokumentumok sokféle tervezési képessége mellett ez lehetővé teszi a cellák, képek és más vezérlőelemek kijelölése során előforduló események feldolgozását a táblázatkezelő dokumentum mezőjében.

Oké, ahogy mondani szokás, sok sikert a csatához ;)

41
Nemrég készítettem egy jelentést határozatlan számú rovattal. Nem akartam trükközni a kóddal, ezért úgy döntöttem, hogy a beléptető rendszeren teszem meg. Ezzel nem volt gond, tetszőleges elrendezésre kellett kifeszíteni az eredményt (saját fejléc +... 27
Annak ellenére, hogy a CDS-hallgatók már az első vagy a második napon találkoznak ezzel, ennek szerepelnie kell a GYIK részben. Egy egyszerű példa egy jelentés programozott kimenetére egy elrendezésen, az alapértelmezett beállításokkal. //A diagram beszerzése innen... 18
A beléptető rendszer riportjainak generálásakor alapértelmezés szerint minden csoportosítás kibővül, de előfordul, hogy generálás után azonnal meg kell jeleníteni egy jelentést összeomlott csoportosításokkal! Ez a kód a jelentés modulban lehetővé teszi az összecsukását... 10
Ezen a lapon adhatja meg, hogy két vagy több adathalmaz között milyen kapcsolatok jöjjenek létre, milyen paraméterek és feltételek szerint..png 1. „Kapcsolat forrása” - az első adathalmazt jelöli, a... 9
A riportok készítésekor az kell, hogy a korlátozott jogosultságokkal rendelkező felhasználó számára a jelentés teljesen jogellenőrzés nélkül készüljön el! Különösen, ha az RLS be van állítva.. Ennek többféle módja van: 1. Telepítse...

Néha előfordul, hogy a jelentés adatait nem lehet lekérdezéssel vagy lekérdezések kombinációjával megszerezni. Az adatgyűjtéshez bizonyos eljárásokat kell alkalmaznia, és az adatok egy értéktáblázatba kerülnek. Felmerül a kérdés – felhasználhatók-e ezek az adatok egy adatösszetételi sémában? Végül is az SKD eszköz erőteljes és kényelmes. Kiderült, hogy az értéktáblázatból származó adatokat lehet használni a jelentés adatforrásaként a beléptető rendszerben, és ez egyáltalán nem nehéz. Ez a cikk bemutatja, hogyan hozhat létre ilyen jelentést a normál űrlapokhoz.
Tehát hogyan hozhat létre ACS-jelentést egy értéktáblázatból származó adatok felhasználásával? Először is.
Először nyissa meg a konfigurátort, és hozzon létre egy új külső jelentést.

Nyissa meg az objektummodult, és hozzon létre egy előre meghatározott eljárást az eredmény összeállításakor (DocumentResult, Decryption Data, Standard Processing)

Ezen az eljáráson belül adatokat gyűjtünk és jelentést készítünk.
Az Eredmény összeállításakor eljárásban letiltjuk a szabványos feldolgozást. StandardProcessing = False;
Ezután tetszőleges módon értéktáblázatot készítünk. Az értéktábla oszlopainak nevének meg kell egyeznie az ACS-ben lévő adatkészlet jövőbeli mezőivel:


Például adjunk hozzá három adatsort. Ezután lépésről lépésre elkészítjük a jelentés kimenetét.

  • A diagramból megkapjuk az alapértelmezett beállításokat.

  • A visszafejtési adatokat a megfelelő változóhoz küldjük.

  • Az elrendezést az elrendezéskészítő segítségével készítjük el.

  • A diagramot, a beállításokat és a dekódolási adatokat átvisszük az elrendezési elrendezésbe.

  • Az elrendezést a layout processzor segítségével végezzük. Ehhez hajtsa végre az adatösszetétel-feldolgozó Initialize() metódusát. Paraméterként átadjuk az adatösszetétel elrendezést, külső adatkészleteket (típus: Struktúra, a struktúrakulcsnak meg kell egyeznie az adatösszeállítási sémában szereplő objektum nevével, az érték a generált értéktáblázat), visszafejtési adatokat.

  • Törölje a táblázatos dokumentum mezőjét.

  • Az eredményt táblázatos dokumentumban jelenítjük meg.
Az eredmény a következő kód:
DataLayoutSchema = GetLayout( "MainDataCompositionSchema"); //Beállítások = DataCompositionScheme.DefaultSettings; // - Ha a fentiek szerint csinálod (egyes erőforrásoknál ajánlott), akkor a beállítások módosításakor kliens módban // nem fogod látni ezeket a változtatásokat, mert alapértelmezés szerint mindig a beállítások lesznek. Hogyan kell helyesen csinálni - az alábbi lehetőség Beállítások = Beállítások Zeneszerző. GetSettings(); DecryptionData = newDataCompositionDecryptionData; LayoutLinker = newDataLayoutLayoutLinker; LayoutLayout = LayoutLocker. Execute(DataCompositionScheme, Settings, DecryptionData); ExternalDataSet = New Structure( "Értéktáblázat példa", TZOutput); DataCompositionProcessor = newDataCompositionProcessor; DataCompositionProcessor. Initialize(LayoutLayout, ExternalDataSet, DecryptionData); DocumentResult. Egyértelmű(); OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument; Kimeneti processzor. SetDocument(DocumentResult); Kimeneti processzor. Output(DataCompositionProcessor); Elrendezési diagram elrendezés hozzáadása. Meghagyhatjuk a nevet alapértelmezettként.

Adatkészletet készítünk. Ehhez adjon hozzá egy új objektum típusú adatkészletet. Az adatokat tartalmazó objektum Név mezőjében azt a nevet helyezzük el, amelyet az External DataSet struktúra létrehozásakor kulcsként adtunk meg. Ezután adunk hozzá mezőket. A neveknek pontosan meg kell egyeznie az értéktáblázat oszlopainak nevével. Ezután megadhatjuk az elfogadható értékeket, formátumokat stb.

Adjon hozzá erőforrásokat, ha szükséges. Ezek alapján számítják ki az eredményeket. Esetünkben ezek a Mennyiség és Összeg mezők.

A Beállítások lapon a beállítástervező segítségével létrehozunk egy alapértelmezett jelentés opciót

Mentjük a jelentésünket. Elindítjuk a kliensben és létrehozzuk. A képen látható egy példa egy ACS-jelentés futtatására az értéktáblázatból származó adatok felhasználásával.


Ez minden. Elég egyszerű, igaz?

Az így kapott példajelentés letölthető