1s ckd datavärdetabell. ACS och externa datakällor. En datauppsättning är ett objekt. Vi läser registreringsloggen

När du öppnar nya filialer av företaget, för att beräkna belastningen på 1C: Enterprise-servern och andra uppgifter, kan du behöva se dynamiken i användararbetet i infobasen i form av ett diagram.

Dynamiken måste visas för den period som valts av användaren. Den visade informationen kommer att vara antalet åtgärder som utförs av dessa användare inom ramen för timmar. Information för en sådan anmälan kan hämtas från loggboken.

Låt oss överväga steg-för-steg-skapandet av en sådan rapport och, med hjälp av en extern datauppsättning, kommer vi att bygga den på datasammansättningssystemet.

Vi läser registreringsloggen

Och så kommer vi att bygga rapporten på SKD. Vi kommer att ta emot data inte med hjälp av en begäran från databasen, utan från registreringsloggen. Jag skrev om hur plattformen lagrar loggen i föregående artikel.

I enlighet med den angivna perioden i rapporten måste vi få alla användaråtgärder med infobasdata. Gruppera den resulterande tabellen efter användare och visa den i form av ett diagram (se skärmdumpen ovan).

För att få information från registreringsloggen använder vi den globala kontextmetoden "UnloadLogRegister ()". I händelsen "OnCompositionResult" i den genererade rapporten lägger du till följande programkod:

Procedur OnCompositionResult (ResultDocument, DecodeData, StandardProcessing) StandardProcessing = False; // inaktivera standardutdata för rapporten - vi kommer att mata ut programmatiskt // Hämta rapportinställningarna, inkl. period Settings = Settings Linker. GetSettings (); // Hämta rapportinställningarna ParameterPeriod = Inställningar Composer. GetSettings (). Dataparametrar. Element. Hitta ("Period"). Menande; ZhurTab = Ny värdetabell; Magasinval = Ny ram; // Skapa en struktur för att välja loggbok // Fyll i urvalet efter period Urval av tidskriften. Infoga ("StartDate", ParameterPeriod. StartDate); Urval av tidskriften. Infoga ("EndDate", ParameterPeriod. EndDate); // Ställ in val för händelser Array of Events = New Array; Utbud av evenemang. Lägg till ("_ $ Data $ _ ... Radera... Ny"); Array of Events. Lägg till (" _ $ Data $ _ ... Posta"); Array of Events. Lägg till (" _ $ Data $ _ ... TotalsPeriodUpdate"); Array of Events. Lägg till (" _ $ Data $ _ ... Ta bort posten"); Array of Events. Lägg till (" _ $ Data $ _ ... Uppdatering"); SelectLog. Insert ("Händelse", Array of Events); // Ladda ur loggen UnloadRegisterJournal (ZhurTab, Array of Events); // Skapa och fyll i data för utdata till rapporten ZhurTab. Kolumner. Lägg till ("Tid"); ZhurTab. Kolumner. Lägg till(" Antal händelser"); För varje sida från LogTabs Cycle Page Time = Timme (Sid Date); Page Number of Events = 1; End of Cycle; // Gruppera resultatet ZhurTab. Kollaps (" Användarnamn, Tid" , " Antal händelser" ) ; // ..............

Den första parametern i metoden "UnloadLogRegister" ställer in värdetabellen som resultatet av valet från loggboken kommer att dumpas i. Den andra parametern är att ställa in filtret på de valda posterna. Ett filter är en struktur, vars nycklar är de fält som filtret är satt till. Vi använder fälten "Startdatum" och "Slutdatum" för att ställa in analysperioden för loggen, samt fältet "Händelse", i vilket vi skickar en rad strängar (händelsenamn). Händelserna som läggs till i arrayen motsvarar åtgärder på data i databasen.

Du kan läsa mer om att använda metoden "UnloadLogRegister" i syntaxhjälpen.

Vi överför värdetabellen till ACS

För att ACS ska kunna arbeta med den resulterande värdetabellen måste du göra följande:

1) Skapa en datauppsättning i layoutschemat och ställ in dess fält.
2) I programkoden för modulen "AtCompositionResult" skriver du överföringen av värdetabellen till ACS.

// Gruppera resultatet ZhurTab. Kollaps (" Användarnamn, Tid" , " Antal händelser") ;DecryptionData = NewDataCompositionDecryptionData; // Skapa dekrypteringsdata Layout Composer = New DataComposition Layout Composer; // Skapa en layoutkomponist // Initiera layouten med hjälp av datasammansättningsschemat // och de tidigare skapade inställningarna och dekrypteringsdata DataCompositionSchema = GetLayout (" BasicData Layout"); LayoutComposer = LayoutComposer. Execute (DataCompositionSchema, Settings, DecodingData); // Bygg resultatet Composition Processor = Ny Data Composition Processor; Processor layouter. Initiera (Layout Layout, //!!! Vi överför tabellen "ZhurTab" till layoutprocessorn !!! Ny struktur (" Loggregistrering", ZhurTab), Dekrypteringsdata); DocumentResult. Rensa (); // Mata ut resultatet i ett kalkylarksdokument OutputProcessor = NewDataCompositionOutputResultProcessorI ett tabelldokument; Utgångsprocessor. SetDocument (DocumentResult); Utgångsprocessor. Utgång (layoutprocessor); Slut på procedur

3) Ställ in resurserna och strukturen för rapporten (för mer information, se rapportfilen, vars länk finns i slutet av artikeln).

Detta slutför rapportinställningarna och vi kan köra det i företagsläge.

Resultat

En extern datakälla i ACS tillåter oss att använda data i rapporter från nästan alla källor, inklusive de vars data vi inte kan ta emot genom frågor.

Genom att använda ACS för sådana källor kan du skapa rapporter med ett flexibelt system med inställningar, och låter också användaren ändra rapportens utdata, dess struktur. Alla funktioner i datasammansättningssystemet kommer att utnyttjas fullt ut för sådana källor.

Du kan ladda ner rapporten från exemplet via följande länk.

41
Jag gjorde nyligen en rapport med ett odefinierat antal kolumner. Jag var ovillig att bråka med koden, jag bestämde mig för att göra det på ACS. Det var inga problem med detta, det var nödvändigt att dra resultatet till en godtycklig layout (din egen titel + ... 27
Även om ACS-elever stöter på detta den första eller andra dagen, bör det finnas i FAQ-sektionen. Ett enkelt exempel på att programmera ut en rapport på en layout med standardinställningarna. // Hämta schemat från ... 18
Vid generering av rapporter på ACS utökas alla grupperingar som standard, men det händer att det är nödvändigt att visa en rapport med kollapsade grupper direkt efter generering! Denna kod i rapportmodulen låter dig kollapsa ... 10
På den här fliken kan du specificera vilka anslutningar som görs mellan två eller flera datamängder, enligt vilka parametrar och villkor..png 1. "Källa för kommunikation" - indikerar den första datamängden, från ... 9
Att vid utveckling av rapporter krävs att för en användare med begränsade rättigheter genereras rapporten helt utan kontroll av rättigheterna! Speciellt om RLS är konfigurerat. Det finns flera sätt att göra detta: 1. Installera ...

Ibland händer det att data i en rapport inte kan hämtas med hjälp av en fråga eller en kombination av frågor. Du måste använda någon form av procedur för att samla in data, och uppgifterna placeras i en värdetabell. Frågan uppstår - kan dessa data användas i datasammansättningsschemat? SKD är trots allt ett kraftfullt och bekvämt verktyg. Det visar sig att det är möjligt och inte alls svårt att använda data från värdetabellen som en datakälla för en rapport i ACS. Den här artikeln visar hur du skapar en sådan rapport för vanliga formulär.
Så hur skapar du en ACS-rapport med data från en värdetabell? Allt i ordning.
Öppna först konfiguratorn och skapa en ny extern rapport.

Öppna objektmodulen och skapa en fördefinierad procedur OnCompositionResult (ResultDocument, DecryptionData, StandardProcessing)

Inom denna procedur kommer vi att samla in data och generera en rapport.
Inaktivera standardbearbetning i OnCompositionResult-proceduren. StandardProcessing = Falskt;
Sedan bildar vi en värdetabell på ett godtyckligt sätt. Namnen på kolumnerna i värdetabellen måste matcha de framtida fälten i datamängden i ACS:en:


Låt oss lägga till tre rader med data som ett exempel. Skapa sedan en rapportutdata steg för steg.

  • Från diagrammet får vi standardinställningarna.

  • Vi skickar dekrypteringsdata till motsvarande variabel.

  • Vi formar layouten med hjälp av layoutkompositören.

  • Vi överför schemat, inställningarna och dekrypteringsdata till layoutlayouten.

  • Vi gör layouten med hjälp av layoutprocessorn. För att göra detta kör vi datakompositionsprocessorns Initialize ()-metod. Som parametrar passerar vi datasammansättningsmallen, externa datamängder (typ: Struktur, strukturnyckeln måste matcha objektets namn i datasammansättningsschemat, värdet är den genererade värdetabellen), dekrypteringsdata.

  • Vi rensar fältet för kalkylarksdokumentet.

  • Vi visar resultatet i ett kalkylbladsdokument.
Resultatet är följande kod:
DataCompositionSchema = GetLayout ( "BasicDataCompositionSchema"); // Settings = DataCompositionSchema.Default Settings; // - Om du gör som visas ovan (det rekommenderas på vissa resurser), när du ändrar inställningarna i klientläge // kommer du inte att se dessa ändringar, eftersom inställningarna alltid kommer att vara som standard. Hur man gör det rätt - alternativet nedan Settings = Settings Linker. GetSettings (); DecryptionData = NewDataCompositionDecryption Data; Layout Composer = New DataComposition Layout Composer; LayoutComposition = LayoutComposer. Execute (DataComposition Scheme, Settings, DecodingData); ExternalDataset = Ny struktur ( "Exempelvärdetabell", TZVyvod); DataCompositionProcessor = Ny DataCompositionProcessor; Datakompositionsprocessor. Initiera (Layout, ExternalDataSet, Dekrypteringsdata); Dokumentresultat. Klar (); OutputProcessor = NewDataCompositionOutputResultProcessorI ett tabelldokument; Utgångsprocessor. SetDocument (DocumentResult); Utgångsprocessor. Output (DataComposition Processor); Lägg till layouten för layoutdiagrammet. Vi kan lämna namnet som standard.

Vi skapar en datauppsättning. För att göra detta, lägg till en ny datauppsättning av typen Objekt. I fältet Namn för objektet som innehåller data, ange namnet som vi angav som en nyckel när vi skapade ExternalDataSet-strukturen. Sedan lägger vi till fälten. Namnen måste exakt matcha namnen på kolumnerna i värdetabellen. Därefter kan vi ange giltiga värden, format, etc.

Lägg till resurser om det behövs. Resultaten kommer att övervägas utifrån dem. I vårt fall är dessa fälten Kvantitet och Belopp.

På fliken Inställningar skapar vi standardversionen av rapporten med hjälp av inställningsdesignern

Vi sparar vår rapport. Vi lanserar det i klienten och formar det. Ett exempel på att köra ACS-rapporten med hjälp av data från värdetabellen visas på bilden.


Det är allt. Enkelt nog, eller hur?

Den resulterande rapporten för ett exempel kan laddas ner

I min förra artikel skrev jag redan att 1C är en paradoxal plattform. Dataarrangemangssystemet är en av sådana paradoxer. ACS är avsett för konstruktion av komplexa rapporter och innebär ersättning av "manuell" programmering av rapporter genom design i en multifunktionell verktygslåda. Möjligheten att använda ACS dök upp i den åttonde versionen, men det tog lång tid för version 8.2 att dyka upp så att 1C kunde använda den i sina standardprodukter. Å ena sidan är ACS en multifunktionell verktygslåda, med vilken du kan skapa mycket komplexa rapporter utan en enda kodrad. ACS har dock en ganska hög ingångströskel, det är mycket svårt att studera och börja använda det på ett ögonblick, eftersom gränssnittet inte är helt intuitivt, och de mest kompletta användningsguiderna är endast tillgängliga i form av betald litteratur.

Under min studie av ACS uppstod ett problem. Det är nödvändigt att hämta data från en tredje parts värdetabell med hjälp av frågespråket och sedan arbeta med dessa data som med analoga data från databastabeller (sammanfattningsoperationer, gruppering och så vidare). I det klassiska formatet skulle vi skapa en fråga som tar emot information från tabellen som skickas till frågan som en ide-parameter.

Request = Ny begäran (
"VÄLJ
| Tabell.Nomenklatur,
| Bord. Lager
| FRÅN
| & TK AS Tabell ");
Request.SetParameter ("TK", TK);

Men med ACS är inte allt så enkelt. Tyvärr, operationen som beskrivs ovan kan inte utföras i datalagringssystemet. Ändå är möjligheten att ladda externa värdetabeller i systemet implementerad.

Det är värt att göra en liten lyrisk utvikning här och prata om Dataset. Datauppsättningar är informationskällor från vilka ACS tar emot data, som den senare sammanställer till en rapport. Datauppsättningar är uppdelade i typer, huvudsakligen med hjälp av typen "Request", i vars kropp programmeraren skriver en fråga till databasen. Typen "Objekt" används för att ladda data från externa objekt. I båda fallen, vid utgången, har vi en viss uppsättning fält som erhålls som ett resultat av att exekvera en begäran eller ladda ett externt objekt. Senare kan dessa fält användas på fliken "Inställningar", tillsammans med en detaljerad inställning av rapportstrukturen. För relationen mellan olika uppsättningar i ACS är det möjligt att specificera länkarna för datamängder i fliken med samma namn. Dessa länkar är en direkt analog av den vänstra kopplingen i den klassiska frågan. Det bör dock noteras att frågor i någon datauppsättning inte "vet" om förekomsten av andra datauppsättningar; i slutändan kommer datauppsättningslänkar att påverka datasammansättningen enligt den struktur som anges på fliken "Inställningar".

Låt oss detaljera uppgiften ner till något exempel. Det finns en standardrapport Beräkningssatser för att organisera konfigurationen av ZiK 8. Det är nödvändigt att typerna av beräkningar i rapporten grupperas i några grupper. Avräkningstyp-gruppöverensstämmelser lagras i en extern värdetabell. För att ladda det i huvuddatasammansättningsschemat, skapa ett "datasetobjekt" med namnet "Grupper" (Figur 2). Vi gör en koppling med "query datamängden" - "Accruals" av typen av beräkning (Figur 3). I "query data set" - "Accruals" finns information om grupper, vi raderar alla förekomster. Sedan, på fliken "Inställningar", kan vi använda fältet "Grupp", vars värde laddas från en extern datakälla (Figur 4). I funktionen att generera rapporten kompletterar vi laddningen av extern data.

GenerateReport-funktion (Resultat = Odefinierat, Dekrypteringsdata = Odefinierat, OutputToReportForm = True) Exportera

// få eller bilda den obligatoriska tabellen med "Grupp"-värden och skriva den till variabeln med samma namn

ExternalData = New Structure (); // skapa och fyll den externa datastrukturen
ExternalData.Insert (Grupper);

UserPanelValue = Sample Reports.GetUserPanelSettingsValuesObject (ThisObject);
Standardinställning = Inställningar Composer.GetSettings ();
Typiska rapporter. Få AppliedSetting (ThisObject);
Typiska rapporter. Generera en typisk rapport (Detta objekt, resultat, avkodningsdata, utdata till rapportformulär, externa data);
Inställningar Linker.LoadSettings (Standardinställning);
Återbetalningsresultat;

EndFunction

Om vi ​​skulle skapa en rapport "från grunden" skulle koden för att starta rapportgenereringen se ut så här:

ExternalDatasets = Ny struktur;
ExternalDatasets.Insert ("Grupper", grupper); // Grupper - den önskade värdetabellen
DataCompositionSchema = GetLayout ("MainDataCompositionSchema"); // vår layout med datainställningsschema
Inställningar = DataComposition Scheme.Standardinställningar;
Layout Composer = New DataComposition Layout Composer;
LayoutComposer = LayoutComposer.Run (DataCompositionSchema, Settings);
DataCompositionProcessor = Ny DataCompositionProcessor;
DataCompositionProcessor.Initialize (LayoutDataSets);
TabDoc = Nytt TabularDocument;
OutputProcessor = NewDataCompositionOutputResultProcessorI ett tabelldokument;
Output Processor.SetDocument (TabDok);
OutputProcessor.Output (DataComposition Processor);

Läsa 9660 en gång

Hallå!
Idag vill jag beskriva ett ämne som man inte kan komma på utan dykutrustning :);)

Dykning innebär att dyket är ganska djupt. I litteraturen finns det få referenser till detta ämne och tills du "kliar" kommer du inte att förstå det. Det kommer inte ens ett budskap för en sådan åtgärd;) Förresten säger dokumentationen väldigt dåligt och inkonsekvent om detta, du måste vända dig till tredjepartslitteratur.

Till exempel rekommenderar jag starkt "Utveckling av komplexa rapporter i" 1C: Enterprise 8.2 ". Datasammansättningssystem ", (se mer specifikt sidorna 224, 267 och 473)

Det finns 2 typer av datakällor i ACS:en: Fråga, objekt och union (denna sak räknas inte, det är inte en datakälla, utan en hanterare för befintlig data). Se bild 1:


Så om vi mer eller mindre förstår hur man arbetar med en källa (uppsättning) av data av typen "Request", så finns det svårigheter med avseende på datauppsättningen "Objekt".

Först kommer jag att beskriva vad vi vill få till utgången:

Rapportera, användaren klickade på knappen " Att forma"Och en lista över nomenklaturen visades (se fig. 2):

Ja, jag gjorde en felaktighet, nämligen: det finns ingen knapp på bilden " Att forma"Men det finns en knapp" ny åtgärd"(Jag ska förklara lite senare varför detta hände;)

Jaja! En annan punkt: hela denna lista är härledd från datasetet "Objekt":

Lösning:

  1. Vi skapar en extern rapport;
  2. Lägg till ACS-layouten, låt oss döpa den till "MainData Layout Scheme";
  3. Lägg till "Objekt"-datauppsättningen till den, tilldela namnet "NomenclatureList" till den (det bör vara samma som i Fig. 3);
  4. Vi experimenterar inte mycket i rapportinställningarna, låt det vara enkelt (se fig. 4)

Ok, hälften av jobbet är klart ;)

Låt oss nu generera huvudrapportformuläret (ja, ett ögonblick till! Min konfiguration fungerar på ett vanligt gränssnitt, men jag tror att du kommer att hitta en lösning på hanterade formulär;) Så, formuläret:

Det är här problemet kommer in! Om vi ​​klickar på "generera"-knappen (Fig. 5.), så kommer vi att se ett fel!


Jag dedikerade den här artikeln till lösningen av detta problem!

Det var inte möjligt att avlyssna händelsen med "Form"-knappen, därför bestämde jag mig för att använda en krycka. Jag startade konfigurationen i felsökningsläge och försökte hitta samma "generera"-knapp.

Jag infogade "Generera" -proceduren i formuläret, men det finns inga poster i det, jag var tvungen att omdefiniera åtgärden för "generera" -knappen innan jag öppnade formuläret:


I fig. 8, förutom att ändra funktionen hos formuläret, ges ett exempel på en begäran, dess bearbetning och överföring av genererad data till ACS. Låt oss undersöka det mer noggrant:

  1. Vi genererar indata för ACS;
  2. Vi initierar ACS;
  3. Vi visar resultatet PÅ BLANKET (var också uppmärksam på detta!).

Låt oss komma ihåg schemat för interaktion mellan objekt i datasammansättningssystemet:

Datasammansättningsschema i en extern rapport är tillgängligt som ett globalt objekt i en formulärmetod Datasammansättningsschema. Du kan också hänvisa till den med namn, vidarebefordra den till metoden Skaffa layout(se fig. 8)

Huvudkoden visas nedan:

Request = Ny begäran; Request.Text = "SELECT | Nomenclature.Name as Nomenclature | FROM | Reference.Nomenclature AS Nomenclature"; NomenclatureList = Query.Run (). Unload (); Dataset = New Structure ("NomenclatureList", NomenclatureList); // ACS = GetLayout ("MainDataCompositionSchema"); ACS = DataComposition Scheme; LayoutComp = ny LayoutComposerDataComposition; layoutComp = LayoutComp.Run (SKD, SKD.Default Settings); DataCompositionProcessor = ny DataCompositionProcessor; ProcessorCompData.Initialize (layoutComp, datamängder); output = newDataCompositionOutputProcessorIn TabularDocument; output.SetDocument (FormElements.Result); output.Display (ProcessorCompData, true);

ja! Här är en annan trevlig stund!!!

I det här exemplet, som du kan se (se fig. 2), utförs utmatningen i formen och inte i tabellen. dokumentera! Och det här är väldigt bra, eftersom vi kan arbeta med formuläret (programmässigt avlyssna händelserna i formulärelementet, göra alla möjliga dra och släpp-trick, och så vidare;)

I ett kalkylarksdokument kan vi helt enkelt visa den bearbetade datan på skärmen och överföra kontrollen av dokumentet till användaren, och vi kan inte påverka den vidare processen att redigera detta innehåll på något sätt!

Se hjälpsystemet " Kalkylarksdokumentfält ", Men jag ska bara ge ett utdrag från den inbyggda dokumentationen av 1c Enterprise 8.2-systemet:

"Fältet för ett kalkylarksdokument är ett kalkylarksdokument som placeras i formuläret. Tillsammans med de olika designmöjligheterna för kalkylarksdokumentet låter detta dig organisera bearbetningen av händelser som inträffar när du väljer celler, bilder och andra kontroller placerade i fältet för kalkylarksdokumentet."

Okej, som man säger, framgång i strid;)