1c ställ in standardformulärinställningar. Urval i rapporter. Nyanserna i inställningsbyggaren. Att sätta upp formulär och arbeta med listor

Delsystem i 1C 8.3— ett metadataträdobjekt som är ansvarigt för att bygga konfigurationskommandogränssnittet.

Nedan i artikeln kommer vi att prata om delsystem från och med version 8.2.

Faktum är att version 8.1 (liksom en vanlig 8.2-applikation) också hade delsystem, men de tjänade helt andra syften, mer troligt för utvecklaren än för användaren. Med hjälp av delsystem i 8.1 separerades vanligtvis olika funktioner. Delsystemen hjälpte också till när man kombinerade olika 1C-konfigurationer - det var möjligt att specificera vilket system som skulle överföras.

1C-delsystem och programmeringsgränssnitt

I version 8.3 och 8.2 är delsystem huvudverktyget för att bygga ett kommandoanvändargränssnitt. Delsystems metadataobjekt har hierarkisk struktur För att konfigurera en "undermeny" i gränssnittet måste du lägga till ett underordnat undersystem:

Egenskaper och inställningar

Låt oss titta på inställningarna och egenskaperna för delsystemen i konfiguratorn:

Få 267 videolektioner på 1C gratis:

Inkludera i kommandogränssnittet— om du glömde att sätta denna flagga, delsystemet kommer inte att visas i gränssnittet.

Knappen öppnar panelen för gränssnittsinställning, där du kan konfigurera gränssnitt beroende på den aktuella användarens roll:

Bild— bilden som tilldelats delsystemet visas i företagsläge. Du kan välja en standardbild, eller så kan du lägga till din egen genom att först skapa den som ett konfigurationsobjekt Bild:

På fliken Funktionella alternativ indikerar en lista över funktionella alternativ där detta delsystem används.

Flik Förening definierar en uppsättning metadataobjekt som deltar i ett givet delsystem.

På fliken Övrig du kan beskriva hjälpen för delsystemet och ange inställningarna Inkludera i hjälpinnehållet— om denna hjälpsektion ska inkluderas i det allmänna bakgrundsinformation genom konfiguration.

Om du inte ser en rapport eller bearbetning i det hanterade gränssnittet

Detta problem uppstår mycket ofta bland nybörjare - det verkar som om en rapport eller bearbetning lades till i delsystemet, men det är inte synligt.

Den första anledningen till detta kan vara att objektet inte har en definierad kontrollerad form.

Det andra skälet är att kryssrutan "Använd standardkommandon" är markerad på objektets kommandoflik. Detta beror på det faktum att för att öppna bearbetning kan antingen din egen procedur beskrivas, eller en standard kan användas:

Artikeln fortsätter serien "Första stegen i 1C-utveckling."

I konfigurationen på 1C:Enterprise-plattformen, vid visning av information, används oftast tabeller som visar olika informationslistor. Att arbeta med sådana listor kan ske både i form av en lista och i form av ett element (bearbetning).

I den här artikeln kommer vi att bekanta oss med dessa alternativ för att anpassa listor, och även titta på andra funktioner för att anpassa formulär från användarens sida.

Tillämplighet

Artikeln diskuterar det hanterade gränssnittet i versionen "Version 8.2" av konfigurationen som utvecklats på plattformen 1C 8.3.4.482.

Om du arbetar med konfigurationer som stöder detta gränssnitt, då är informationen relevant för dig och nuvarande versioner plattformar.

Om du arbetar i det nya Taxi-gränssnittet kan namnen på vissa konfigurationskommandon, såväl som den allmänna sekvensen av åtgärder, vara något annorlunda.

Dessutom har den nuvarande versionen av plattformen lagt till nya sökmöjligheter i listor.

Att sätta upp formulär och arbeta med listor

För hanterade formulärelement är det möjligt att ändra synlighet och vissa andra egenskaper. För dessa ändamål i i en hanterbar form på menyn Alla åtgärder fungerar som föremål Ändra form.

Efter att ha klickat på det här kommandot visas fönstret "Formularinställningar".

I fönstret som visas kan du använda kryssrutor för att ändra synligheten för vissa detaljer. I det här fallet skalas formuläret automatiskt.

Du kan ändra ordningen på detaljer. Lägg till en ny grupp och placera några detaljer (element) i den, definiera alternativet för deras gruppering (horisontell, vertikal).

Detaljer som ingår i gruppen kommer att publiceras i enlighet med detta. Dessutom kan du konfigurera egenskaper som bredd, höjd och rubrikdata för element.

Du kan definiera attribut som ska aktiveras när formuläret öppnas.

En viktig funktion är möjligheten att lägga till nya fält i formuläret. Detta blir möjligt genom referenstypattribut.

Till exempel att ha ett referenstypattribut på formuläret Motpart, kan Adda Kontaktpersonen, Om denna prop finns i katalogen "Motparter".

Vid behov kan ytterligare fält tas bort. Fält skapade i konfiguratorn kan inte raderas. Alla inställningar som görs av användaren sparas.

För att återgå till standardinställningar i fönstret Formulärinställningar i menyn Alla åtgärder du bör välja objektet Installera standardinställningar .

Förutom att anpassa formulär i det hanterade gränssnittet är det möjligt att anpassa listor (katalogelement, dokument).

I form av en lista i menyn Alla åtgärder innehåller ett speciellt kommando Anpassa listan.

Fönstret "Listinställningar" öppnas. I det här fönstret kan du välja, sortera, definiera villkorlig formatering och gruppering.

Bilden visar ett formulär för redigering av urvalet.

Urval kan göras med hjälp av flera fält. I det här fallet kommer valet som standard att fungera enligt OCH-villkoret. Du kan också använda OR- och NOT-villkoren.

För att använda OR (NOT)-villkoret måste du lägga till lämplig grupp (OR Group, NOT Group) med kommandot Group Conditions.

Figuren visar ett formulär för att definiera sorteringsfält.

Gruppering kan konfigureras. I figuren är fältet för gruppering valt Motpart.

Nästa figur visar hur gruppering kommer att utföras.

Du kan fritt färglägga listan eller använda andra element av villkorlig design (typsnittsval, specifik formatering) enligt ett givet villkor, samt välja en lista med fält som ska formateras.

Figuren visar resultatet av villkorlig design av fältbakgrunden Belopp.
När beloppet är > 100 000.

Det bör noteras att det är möjligt att visa kataloger i hierarkiläge.

Hierarkisk visning av kataloger kan konfigureras genom objektet Visningsläge på menyn Alla åtgärder. Du kan välja ett av alternativen: Hierarkisk lista, Lista, Träd.

Det är också möjligt att konfigurera din egen gruppering av katalogelement med vissa detaljer.

Du kan till exempel gruppera artiklar efter leverantör. Exemplet liknar där vi tittade på att gruppera dokumenten "Försäljning av varor och tjänster" efter motparter.

En bekväm funktion är flera val i listor och efterföljande utförande av gruppåtgärder (lägga upp, avbryta, avmarkera borttagning).

Objekt i listan väljs genom att hålla ner tangenten Flytta eller Ctrl.

Att söka efter ett visst värde i en lista har sina egna egenskaper. Sökningen arbetar i urvalsläge. Endast de rader som uppfyller sökvillkoret finns kvar.

För att söka efter värde i den aktuella kolumnen, placera bara markören på önskad kolumn och klicka på knappen Hitta i kommandopanelen. Ett fönster kommer upp där du också ska klicka på knappen Hitta.

För att göra din sökning mer specifik kan du använda kryssrutan Sök i hittat.

När du söker efter en rad med data av en referenstyp (till exempel måttenheter), bör du välja lämpligt sökalternativ ...(efter rad).

Detta avslutas med listor och sätt att konfigurera dem. I nästa artikel kommer vi att fortsätta att bekanta oss med gränssnittet och titta på ett bekvämt verktyg för att informera användaren, som vi inte har pratat om tidigare. Vad är detta för instrument? :)

Jag tror att det inte finns något behov av att berätta vad ett passersystem är, en inställningskompositör och i allmänhet hela uppsättningen objekt som är utformade för att fungera med ett passersystem. De huvudsakliga användningsområdena, utan att räkna knepiga åtgärder i koden, är dynamiska listor och rapporter, och i båda fallen finns mycket betydande funktionalitet kvar bakom kulisserna. Vi tänker ofta inte ens på logiken i beteendet och relationerna för alla deltagare i processen, eftersom Vi brukar lösa ganska enkla problem eller lita på plattformens standardinställningar. Men där det finns tystnader finns det också en intern logik, en slags "otjänst" av 1C, vars frukter ibland är svåra och omöjliga att övervinna för att uppnå önskad effekt, och samtidigt räcker det bara att använda verktygen på rätt sätt.

Intresserade kan hoppa över del 1-4 och gå direkt till exemplen.

Jag ska försöka uppehålla mig lite mer i detalj om hur ACS-val fungerar när det gäller deras användning i rapporter. Jag tror beteendet i dynamiska listor, med ett antal reservationer, kommer att vara nära. Så, urval i rapporter, lite teori och sedan specifika exempel.

SP 8.3.6 och högre, avsnitt av ITS (klausul 10.3.7.5, etc.), boken "Professionell utveckling i 1C-Enterprise 8-systemet" (Kazan, 2012, andra volymen) används. I E. Khrustalevas bok fanns det inget begripligt om detta ämne alls.

Del 1

Inställningsbyggaren har, som du vet, samlingarna "Inställningar", "Fasta inställningar" (hädanefter "FN") och "Anpassade inställningar" (nedan "CU"). En rapport kan ha flera alternativ, och kopplingarna mellan alternativet, N, PN och FN är mycket unika. Låt oss inte heller glömma källan tillgängliga inställningar, och dess "förfader", som vanligtvis är själva kretsen, som också har sina egna standardinställningar.

* Inställningar – inställningar skapade i konfiguratorläge och ändrade i redigeringsläge för rapportversion;

* Användarinställningar – inställningar som användaren ändrar i läget "1C:Enterprise" enbart via gränssnittet;

* FixedSettings – de inställningar som ställs in från det inbyggda språket, inkl. är implicit inställda av systemet. Den här egenskapen innehåller urvalsvärden som överförs till formuläret med hjälp av dess parametrar (”Selektion”-strukturen).

Inställningar och FN:er liknar designen och har en "Selektion"-samling av typen "Datakompositionsval", tillgänglig för att ändra sammansättningen när som helst under rapportens existens. Samtidigt finns inställningar tillgängliga för gränssnittsändringar genom att redigera en variant, men FN:er är inte tillgängliga alls. PN är i sin tur en "gröt", där lika element kan vara både själva "Utvalet" och enskilda objekt av typen "Datakompositionsvalselement" (det så kallade kapslade objektet). Trots tillgången på lämpliga metoder är det omöjligt att programmatiskt ändra sammansättningen av en samling av PN-element om dessa är PN:n för själva rapporten och inte gjorts "från grunden" av designern - 1C kommer att rapportera att "Samlingen av användare inställningarna kan inte ändra dess sammansättning, eftersom den är associerad med layoutinställningarna." ITS säger: "Egendomen är inte skrivbar med det inbyggda språket.", men som vi kommer att se senare är det möjligt att påverka PN. Föremålens "gröt" har intern kommunikation– det kontrolleras för konsekventa villkor när rapporten genereras och när sammansättningen ändras. På ITS läser vi: ”Element som i sig är markerade som anpassade kommer inte att läggas till. Till exempel kommer ett anpassat urval inte att innehålla ett urvalselement som är markerat som anpassat. Element som innehåller anpassade element kommer inte att läggas till. Till exempel kommer en villkorsgrupp inte att läggas till om gruppen innehåller element markerade som anpassade. För kapslade element analyseras inte egenskapen DisplayMode. De läggs till eller inte läggs till tillsammans med överordnade element." Sålunda verkar objektens "senioritet" bakom kulisserna. I det här fallet kan du få en effekt när gränssnittet låter dig ange motstridiga val för en variant och dess PN, såväl som inom PN.

Det verkar som att "senior" är ett alternativ. Men att klicka på "Mer" / "Ändra alternativ" och bekräfta ändringar i det öppnade formuläret kallar formulärhändelsehanteraren , i det här fallet visas valet i panelen "Grundläggande" på formuläret som kallas från "Inställningar...", och visas på rapportformuläret, men visas INTE på fliken "Utval"; Dessutom visas den antingen direkt både på huvudrapportformuläret och på formuläret "Inställningar..." (om det finns en flagga "Inkludera i användarinställningar"), eller varken där eller där. Men i alla fall kommer det INTE att finnas på fliken "Val" i formuläret "Inställningar...". Skillnaden mellan fliken "Grundläggande", formuläret "Inställningar..." och huvudrapportformuläret bestäms av fältet "Redigeringsläge" (normalt - endast i "Inställningar", snabbt - även på själva rapportformuläret), men jag tror att alla vet detta. Förresten, värdena för "Val" och "Snabb" är inte synkroniserade på något sätt och kan motsäga varandra, men "Snabb" på rapportformuläret och på inställningsformuläret är strikt synkront. Så när du redigerar en variant ändras den själv (men dess ID och namn ändras inte), men PN:na förblir INTE modifierade (dvs även om vi pratar om dem, d.v.s. om flaggan för att inkludera detta eller det där element i PN ).

Genom att klicka på "Välj alternativ..." och bekräfta ändringar i formuläret som öppnas utlöses händelser i följande ordning:

När du laddar upp OptionOn Server

När du uppdaterar sammansättningen av användarinställningar på servern

I det här fallet ändras varken alternativet eller PN på något sätt. Härifrån är det tydligt att alternativet och inställningarna, om de är anslutna, inte på något sätt är direkt anslutna.

Att klicka på "Inställningar..." och bekräfta ändringar i det öppnade formuläret utlöser bara en händelse När du uppdaterar sammansättningen av användarinställningar på servern(i det här fallet ändras PN:na, men vyerna och nyckeln (om de inte fanns där) tas inte emot; om "Snabb" är aktiverat för elementen i objektet "Selection" i PN:n, utöver "Selection", dess faktiska element visas som fält, d.v.s. beter sig på samma sätt som kapslade element. Dessa inställningar sparas vid stängning och återställs nästa gång du anger formuläret. Det rör inte eller ändrar inte alternativet.

Om du klickar på "Mer"/"Ange standardinställningar" i inställningsformuläret (liksom alternativet "Standardinställningar" i alternativet redigera) utlöses bara händelsen När du uppdaterar sammansättningen av användarinställningar på servern. I det här fallet ändras alternativet, men PN ändras. Om alternativet har ändrats tidigare förblir det ändrat (varken den ändrade flaggan återställs eller de faktiska inställningarna återställs).

Genom att klicka på "Egenskaper för ett anpassat inställningselement" i strukturträdet i variantredigeringsformuläret läggs ett "Selection"-objekt till, och det blir tomt och synkroniseras inte på något sätt med det befintliga variantvalet och befintliga kapslade urvalselement. varianten ändras inte på något sätt.

Därav rekommendationen: om du behöver ställa in vissa val i "Konfigurator" -läget, för att inte mixtra med koden och så att de inte finns i alternativet, men skulle finnas i rapportgränssnittet, bör du inte manipulera valet element i alternativet, ändra deras egenskaper, men själva valet , med hjälp av knapparna "Elementegenskaper..." och "Anpassade inställningar".

Att lägga till något som visas i Inställningar till PN kräver åtgärder i koden eller gränssnittet, men att ta bort och rensa Inställningar påverkar PN direkt och utan några uppdateringar, till exempel:

Report.SettingsLitter.Settings.Selection.Items.Clear();

Innan anmälningsformuläret stängs frågar systemet endast om det har skett ändringar i varianten. Om det har skett ändringar i PN, kommer de att sparas automatiskt utan några frågor, och kommer också automatiskt att försöka tillämpas i nästa session för att arbeta med rapporten.

Anmärkningar:

I händelse av ett antal fel i tillämpningen av inställningar visas först ett meddelande om problemet, och sedan inträffar kompositionen fortfarande, händelsen anropas och rapportgenerering. I det här fallet ignoreras FN:er, även om de fanns, fortfarande, och endast Inställningar spelar en roll.

När du lägger till ett urval på formuläret "Ändra alternativ", görs det omedelbart med flaggan "Inkludera i PN", men jag upprepar, ur det inbyggda språkets synvinkel förblir PN oförändrad.

Att ställa in variationen för en variant och ställa in variationen av PN är inte direkt relaterade, det är två olika riktningar för förändringar.

PN har bland annat "Ytterligare inställningar". Jag har aldrig kunnat förstå vad och i vilket ögonblick de är fyllda. Även om rapporten innehåller inställningar "markerade i urvalet och villkorad design" som anpassade (enligt samriskföretaget), men ytterligare inställningar i samtliga fall var de tomma. Det finns inget om detta på ITS.

Trots uttalandet i det gemensamma företaget är PN:er perfekt serialiserade i xml.

Om både oberoende urvalselement och själva urvalet ingår för användning, är rapporten korrekt sammanställd, men när den visas dupliceras informationen om det etablerade urvalet i den slutliga layouten.

Standardformuläret för att redigera en rapportversion innehåller många intressanta saker, men ingenstans fungerar det med FN och PN, och även med grundinställningarna fungerar det mer för läsning (förutom att det rensar urval, ordning, konventioner).

Del 2

Att arbeta med Settings och FN genom deras samling är nästan alltid acceptabelt, men det är viktigt att komma ihåg att kärnan i den "tredje nivån" håller på att förändras. Den första nivån innehåller alltid standardinställningarna för själva åtkomstkontrollsystemet, de visas också implicit i källan för tillgängliga inställningar; på andra nivån – inställningar för det använda alternativet. Men här låter logiken dig antingen "skriva över" de underliggande instruktionerna eller ignorera dem. Men att arbeta med PN tillåter inte längre friheter, och subtila manipulationer måste göras med speciella metoder, och ibland tillfälliga mellanliggande hjälpobjekt, till exempel:

Comp=NewDataCompositionSettingsComposer; // du kan också starta // comp.Initialize(SomeSettingsComposer.GetSourceofAvailableSettings()); comp.LoadSettings(SomeSettingsComposer.Settings); SomeSettingsComposer.LoadCustomSettings(comp.CustomSettings);

Inställningsbyggaren har en metod (), som laddar användarinställningarna som skickas som en parameter till metoden. Metod GetSettings() låter dig få en kopia av de aktuella inställningarna (med hänsyn till användarinställningarna). Metod Ladda ner inställningar() laddar de godkända inställningarna i inställningsbyggaren (användarinställningarna fylls också på igen baserat på överförd data, med hänsyn till närvaron av nycklar, se exempel nedan).

Att tillämpa anpassade inställningar på huvudinställningarna görs i metoden GetSettings() inställningsverktyget. Följande åtgärder utförs:

* För DataCompositionSelectionElement-typer kopieras innehållet i elementen till motsvarande anpassade inställningselement.

* För datalayoutvalstyper förblir element som finns i huvudinställningarna och markerade som otillgängliga oförändrade. Element från PN överförs till de viktigaste. De läggs till i slutet av samlingen för urval.

* För DataCompositionSelectionElementGroup-typerna ställs egenskapen Usage in i motsvarande element i huvudinställningarna (baserat på tecknet på användningen av PN-elementet).

Del 3

När de slutliga inställningarna utformas, för att citera ITS, kombineras olika inställningar enligt följande:

* Om någon typ av inställningar är helt markerade som anpassade, inkluderar de resulterande inställningarna PN. I det här fallet, om några inställningselement är markerade som otillgängliga, kommer dessa inställningar att placeras i de resulterande inställningarna från egenskapen Settings Composer.Settings.

* Om någon typ av inställningar är markerade som anpassade inte helt, utan element för element, kommer de element som är markerade som anpassade att inkluderas i de resulterande inställningarna från egenskapen Settings Composer.CustomSettings, och de element som markerats som otillgängliga kommer att tas med i resulterande inställningar från egenskapen Settings Composer.Settings.

* Fasta inställningar läggs till i de resulterande inställningarna "i befintligt skick". Samtidigt är det oacceptabelt att FN och PN har inställningar med samma namn, till exempel val med samma vänstra värde i villkoret. Jag noterar att även en fullständig sammanträffande av alla egenskaper hos dessa villkor är förbjuden. För att vara ärlig så är det lite ologiskt.

Låt mig notera att om något fragment av inställningarna faller under åtgärden av ett funktionellt alternativ och måste begränsas, fungerar systemet "tyst" - det tar bort detta fragment från överallt, rapporterar ingenting och under programmanipulationer angående ett sådant fragment , den bearbetar "tomgångsfel". Den ger inga resultat, men koden har heller ingen effekt. Det är dock möjligt att olika utgåvor beter sig olika.

Del 4.

Rapportformulärtillägget ger oss parametrarna "FN" och "PN", men ingenstans rekommenderas att fylla i dem direkt genom att skicka dem till formuläret. Som experiment har visat, utan ytterligare danser med en tamburin, ignoreras innehållet i dessa parametrar - det skrivs över när länken initieras under öppningsprocessen och när tidigare sparade PN:n tas emot. Det rekommenderas att arbeta med PN-nycklar, genom vilka du kan hämta dem från inställningslagringen och sedan öppna och använda dem, och detta görs automatiskt på sidan av rapportformuläret, och inte på anropsformuläret.

Parametern "Källa till tillgängliga inställningar" översätts automatiskt till byggarinformationen när formuläret skapas på servern och kan inte åsidosättas. Eller snarare, det kan det, men detta kommer bara att ha effekt efter en fullständig omdefiniering av hela kedjan av relaterade objekt. Vart i GetSourceAvailableSettings() kommer att returnera Odefinierat till slutet av alla formuläröppningshändelser.

Låt mig notera att formparametrarna, som i huvudsak inte är nyckelparametrar, "sträcker ut" sin handling över flera händelser om formationsflaggan är inställd vid öppning. Ja, i händelse ProcessingCheckFillOnServer, anropad under öppning och bildning, kommer parametern "Val" att vara tillgänglig, men med den, men anropad genom att användaren klickar på knappen "Generera" kommer den inte längre att vara tillgänglig. Detta beror på det faktum att alla dessa händelser behandlas i ett "besök" på servern, om formationen vid öppning är aktiverad, och först i slutet av dem överförs kontrollen till klienten och anropas Vid öppning. I detta fall försvinner naturligt icke-nyckelparametrar.

Den allmänna ordningen för att utföra händelser när du öppnar ett formulär med en flagga för att generera en rapport vid öppning (något mer än vad som beskrivs i "Professionell utveckling"):

När CreatedOnServer

Innan du laddar upp alternativ på server

När du laddar upp OptionOn Server

Innan du laddar upp användarinställningar till servern

När du laddar användarinställningar på servern

När du uppdaterar sammansättningen av användarinställningar på servern

ProcessingCheckFillOnServer

Vid öppning

I detta fall ändras varken alternativet eller PN om inte särskilda ansträngningar har gjorts.

Del 5.

Låt oss nu titta mer i detalj på uppgiften att öppna ett rapportformulär med dess konstruktion och fördefinierade urval. Kort information det finns information om detta på ITS och i metodologiska rekommendationer, men bara själva principen täcks där och finesserna avslöjas inte. Så för att kontextuellt anropa en rapport måste du skicka parametern "GenerateOnOpen" till dess form, lika med True; och parametern Selection som innehåller strukturen. Strukturnycklarna är namnen på ACS-fält eller ACS-parametrar, och värdena är deras värden. Citerar SP, om det finns en ACS-parameter med ett namn som motsvarar namnet på strukturnyckeln, kommer värdet att ställas in på den. Om det inte finns någon parameter, men det finns ett fält, kommer ett urval att läggas till i detta fält. Samtidigt, om det finns en parameter och ett fält med samma namn, kommer systemet helt enkelt att ignorera det tyst och inte installera något.

"Professionell utveckling" ger ett exempel på att ändra (dvs. avlyssna och konfigurera om) PN "i farten" i en händelse Innan du laddar upp användarinställningar till servern, där argumentet som innehåller aktuell PN skickas. Faktum är att detta inte alltid är fallet - till exempel kan det finnas fall där ett fel i att spara PN i en tidigare session, eller inkonsekvenser mellan Inställningar, FN och PN kommer att leda till att argumentet "Inställningar" är tomt. Och det som är mest intressant är att det inte kommer att vara möjligt att helt omkonfigurera det i denna händelse; detta kan bara göras "i slutet" av händelseförloppet, nämligen i händelsen ProcessingCheckFillOnServer.

Låt oss se vad vi har innan vi laddar PN på servern.

För ett enkelt fall, när ingenting är förinställt i ACS och inga element ingår i PN, är situationen följande: Inställningar – tom; FN – innehåller korrekt urval; Mån innehåller ett tomt urval. Formningen fungerar korrekt, men ur användarens synvinkel motsäger gränssnittet det inre och är nedslående - urvalet fungerar, men syns inte. På liknande sätt, om du aktiverar Urval i PN i inställningarna för alternativstruktur, byggs rapporten också med hänsyn till urvalet, men användaren ser inte heller några val.

Låt oss ställa in förval (lika med tomma värden) i ACS-inställningarna i konfiguratorn och inkludera dem i PN. I teorin bör FN:erna fylla i inställningarna, och de ska fylla i PN:na, men i verkligheten har vi: i Inställningar - Urval med det nödvändiga elementet, men ett tomt högervärde, FN:erna innehåller det korrekta urvalet, och PN innehåller fortfarande ingenting. Dessutom, i det här fallet kommer rapporten inte att byggas, eftersom det högra urvalsvärdet är tomt, trots värdet som skickats i parametern Select.

Ett försök att arbeta med PN-element ger inte heller resultat. För PN-elementet kan du bara ändra flaggan "Använd" och deltagande i "Snabb". Valvärdet på gränssnittet kommer att vara tomt, systemet kommer inte att generera några fel. På samma sätt kommer ett försök att arbeta med PN Selection också att fungera, i debuggern kommer rätt värde att synas som korrekt ifyllt, men du kommer inte att se något på gränssnittet. Låt mig påminna dig om att det är omöjligt att ändra sammansättningen av PN. Därför krävs ytterligare knep. Till exempel:

&På serverproceduren SetPresetSelections(UserSettings) Om inte Parameters.Property("Selection") Returnera sedan EndIf; If Parameters.Selection.Quantity()=0 Returnera sedan EndIf; rTypeEO=Typ("DataComposition Selection Element"); För varje nyckel Från Parameters.Selection Loop pField=NewDataCompositionField(key.Key); // If (ValueType(kiz.Value)=Type("Array") orValueType(kiz.Value)=Type("ValueList")) och kiz.Value.Quantity()>1 Then pViewComparison=DataCompositionComparisonType.InList; Annars pComparisonType=DataCompositionComparisonType.Equals; endIf; // pNecessarySelection = Odefinierat; // se om det finns Selection i användarinställningarna pNecessaryEO=Odefinierat; // se om det finns ett separat DataComposition Selection Element i användarinställningarna För varje elnastr Från UserSettings.Elements Cycle If TypeValue(elnastr) = Type("DataComposition Selection") och pNecessarySelection=Odefinierat Då // kan det bara finnas en pNecessarySelection= elnastr; // detta skulle kunna göras utanför loopen, men det är nödvändigt att sortera igenom användarinställningarna för elementens skull... Annars, Om TypeZnch(elnastr) = pTypeEO Då // detta är ett urvalselement, kan det finnas många av dem, men vi är intresserade av de som inte är initierade eller med det obligatoriska fältet Om elstr.LeftValue=pField eller elstr.LeftValue=Odefinierat och rNeedEO=Odefinierat Då pNeedEO=elstr; endIf; endIf; EndCycle; // If prequiredSelection<>Undefined Då // går det som en prioritet pNecessaryEOFromSelection = Odefinierat; För varje elotb Från pNecessarySelection.Elements Cycle Om elotb.LeftValue=pField Då pNecessaryEOfromSelection=eloteb; Avbryt EndIf; EndCycle; Om pNecessary EO from Selection = Odefinierad Då pNecessary EO from Selection = pNecessary Selection.Elements.Add(pType of EO); pNeedEOFromSelection.LeftValue=pField; endIf; pNecessaryEOfromSelection.ComparisonType=pComparisonType; pNecessaryEOFromSelection.RightValue=kiz.Value; pNecessaryEOFromSelection.Use=Sant; // rNeededEO.Use=False; OtherwiseIf pNecessarySelection=Odefinierad och pNecessaryEO<>Undefined Sedan // sätt på elementet pNecessaryEO.LeftValue=pField; pNecessaryEO.ComparisonType=pComparisonType; pNeedEO.RightValue=kiz.Value; pNeedEO.Use=Sant; endIf; pNeed=Odefinierad; För varje elotb Från Report.ComposerSettings.Settings.Selection.Elements Loop // på ett vänskapligt sätt bör det finnas en rekursiv sökning! Om TypeValue(elotb)=pTypeEO och elotb.LeftValue=pField Då pNeed=elotb; Avbryt EndIf; EndCycle; Om pNeed = Odefinierat Då pNeed = Report.Settings Composer.Settings.Selection.Elements.Add(pEOType); pNeed.LeftValue=pMargin; endIf; pNecessary.ComparisonType=pComparisonType; pNeed.RightValue=kiz.Value; pNeed.Use=Sant; //EndCycle; Report.Settings Composer.FixedSettings.Selection.Items.Clear(); // annars kommer det att stå att elementen korsar/motsäger Procedurslut

Det mest korrekta sättet att kalla detta är:

&Om servern Procedur Bearbetning Fylla kontroller på servern (fel, kontrollerade detaljer) Ställ in fördefinierade val (Rapport. Inställningslänk. Användarinställningar); Slut på förfarandet

Sedan kommer ett sammanhangsanrop, till exempel från ett katalogformulär, att se ut så här:

&OnClient Procedur OpenReport(Command) If ValueFilled(Object.Link) Then ot=New Structure("LinkToDirectory",Object.Link); // så här heter fältet i SDS-rapporten Form Parameters = New Structure ("Selection, GenerateWhen Opening", välj, True); OpenForm("Report.Report1.Form.ReportForm",FormParameters,ThisForm); endIf; Slut på förfarandet

Del 6.

Ändra vid behov rapportinställningarna medan du arbetar med den, inkl. både vid uppstart och efter öppning är det mest korrekta sättet att byta ”från början”, d.v.s. från ACS-inställningarna. Ändring av ACS-schemat utförs endast med rapportobjektet (eller extern rapport), och inte med formulärdata, och i sig ändrar ingenting - i Inställningar och i PN förblir detsamma som det var, och FN kan förbli tömma. Därför, beroende på våra uppgifter:

Efter avrättning

Report.Settings Composer.LoadSettings(SKD.DefaultSettings)

Endast alternativet ändras, och inget mer;

Efter att ha utfört tekniken som anges i punkt 2 (med hjälp av "mellanhand" och metoden LoadCustomSettings()

fungerar bara om du återställer aktuell PN med hjälp av gränssnittet. Av sig själva, om alternativet ändras, kommer de inte att ändras. I det här fallet ändras urvalet, men ett nytt urvalselement läggs inte till.

Efter avrättning

ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.All)

plattformen bara faller tyst. Testad på flera olika utgåvor. Och att anropa läget för att visa inställningar endast för snabba är meningslöst - vi påverkade inte deras sammansättning, så ingenting kommer att förändras ändå.

Och eftersom vi fortfarande behöver ändra inte bara de interna valen, utan också visningen på rapportformuläret och i relaterade formulär, måste vi antingen bara ändra urvalet eller fortsätta enligt följande:

&På serverproceduren ChangeSKD() pObject = Form AttributesValue("Rapport"); selection=pObject.DataCompositionScheme.SettingsOptions.Get(0).Settings.Selection; eo = selection.Elements.Add(Type("DataCompositionSelectionElement")); eo.LeftValue=NewDataCompositionField("LinkToDirectory.Field1"); eo.ComparisonType=DataCompositionComparisonType.Equals; eo.RightValue=Sant; eo.Use=Sant; ValueВFormAttributes(pObject,"Rapport"); Report.SettingsLitter.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.Restore(); // önskvärt, även om detta fortfarande inte påverkar FN. // i själva verket är detta precis vad som kan kallas en förändring i sammansättningen av PN För varje e-postmeddelande Från Report.ComponentSettings.Settings.Selection.Elements Cykla email.DisplayMode=ElementDisplayModeDataCompositionSettings.QuickAccess; Om EmptyString(el.UserSettingsIdentifier)​Då // kan du använda electronicSetIdentifier-metoden för PN-elementet, se dess hjälp i SP, allt är ganska tydligt där e.UserSettingsIdentifier="ID123"; // viktigt - identifieraren kan vara ALLA, inte UUID eller GUID! el.ViewUserSettings="Test"; endIf; EndCycle; comp=NewDataCompositionSettingsComposer; comp.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.LoadCustomSettings(comp.CustomSettings); För varje e-postmeddelande Från Report.Settings Composer.CustomSettings.Elements Cykla email.DisplayMode=ItemDisplayModeDataLayoutSettings.QuickAccess; // dra EndCycle till rapportformuläret; // och nu kommer detta att ha effekten: ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.QuickAccess); Slut på förfarandet

Egentligen kan du studera denna mekanik under lång tid. Denna publikation växte fram ur att studera sätt att lösa ett specifikt problem, och är därför ganska ensidig; men jag misstänker att en separat bok kan skrivas om inställningarnas interna logik, särskilt användarnas, inte mer subtil än Khrstalevs. Tyvärr har jag varken ork eller tid för detta. Den som finner specifika utvecklingar användbara är redan bra.

Vissa saker har klarlagts experimentellt och är därför kontroversiella. De som vet mer uppmanas att kritisera och kommentera.