Angi standardinnstillingene 1c 8.3. Utvalg i rapporter. Nyansene til innstillingslinkeren. Formtilpasning og evne til å jobbe med lister

Delsystem i 1C 8.3- et metadatatreobjekt som er ansvarlig for å byggetet.

Nedenfor i artikkelen vil vi snakke om undersystemer fra og med versjon 8.2.

Faktum er at i versjon 8.1 (så vel som for en vanlig applikasjon 8.2) var det også delsystemer, men de tjente helt andre formål, mer for utvikleren enn for brukeren. Delsystemer i 8.1 skilte vanligvis forskjellige funksjoner. Undersystemene hjalp også når de kombinerte forskjellige 1C-konfigurasjoner - det var mulig å spesifisere hvilket system som skulle overføres.

1C undersystemer og et grensesnitt for programmereren

I versjon 8.3 og 8.2 er undersystemer det primære verktøyet for å bygge et kommandobrukergrensesnitt. Metadataobjekter "Undersystemer" har en hierarkisk struktur, for å konfigurere "undermenyen" i grensesnittet, må du legge til et underordnet undersystem:

Egenskaper og innstillinger

Vurder innstillingene og egenskapene til undersystemene i konfiguratoren:

Få 267 1C videoopplæringer gratis:

Inkluder i kommandogrensesnittet- hvis du har glemt å sette dette flagget, delsystemet vil ikke vises i grensesnittet.

Knappen åpner grensesnittinnstillingspanelet, der du kan konfigurere grensesnitt avhengig av rollen til gjeldende bruker:

Bilde- bildet som er tilordnet undersystemet vises i bedriftsmodus. Du kan velge et standardbilde, eller du kan legge til ditt eget, etter å ha opprettet det tidligere som et konfigurasjonsobjekt Bilde:

I fanen Funksjonelle alternativer listen over funksjonelle alternativer som dette delsystemet brukes i, er angitt.

Tab Komposisjon definerer et sett med metadataobjekter som deltar i et gitt delsystem.

I fanen Annen du kan beskrive hjelpen til delsystemet og spesifisere innstillingen Inkluder i hjelpeinnhold- om dette hjelpeemnet skal inkluderes i hjelpeinformasjonen for generell konfigurasjon.

Hvis ingen rapport eller behandling vises i det administrerte grensesnittet

Dette problemet oppstår veldig ofte blant nybegynnere - som en rapport eller behandling ble lagt til undersystemet, men det er ikke synlig.

Den første grunnen til dette kan være at objektet ikke har et administrert skjema definert.

Den andre grunnen er at avmerkingsboksen "Bruk standardkommandoer" er merket av på fanen Kommandoer til objektet. Dette skyldes det faktum at for å åpne behandlingen, kan både din egen prosedyre beskrives, og standarden kan brukes:

Artikkelen fortsetter syklusen "First steps in development on 1C".

I konfigurasjonen på 1C: Enterprise-plattformen, ved visning av informasjon, brukes oftest tabeller som viser ulike informasjonslister. Arbeidet med slike lister kan foregå både i form av en liste og i form av et element (behandling).

I denne artikkelen vil vi ta en titt på disse listetilpasningsalternativene, samt se på andre aspekter ved å tilpasse skjemaer på brukerens side.

Anvendbarhet

Artikkelen diskuterer det administrerte grensesnittet i versjonen "Versjon 8.2" av konfigurasjonen utviklet på 1C-plattformen 8.3.4.482.

Hvis du jobber med konfigurasjoner som støtter dette grensesnittet, så er informasjonen relevant for deg for gjeldende versjoner av plattformen.

Hvis du jobber i det nye "Taxi"-grensesnittet, kan navnene på noen konfigurasjonskommandoer, samt den generelle handlingssekvensen, avvike litt.

I tillegg har den nåværende versjonen av plattformen lagt til nye søkemuligheter i listene.

Formtilpasning og evne til å jobbe med lister

For elementer av administrerte skjemaer er det mulig å endre synligheten og noen andre egenskaper. For disse formålene, i en kontrollert form i menyen Alle handlinger fungerer som vare Endre form.

Etter å ha trykket på denne kommandoen vil vinduet "Skjemainnstillinger" vises.

I vinduet som vises, ved å bruke avmerkingsboksene, kan du endre synligheten til enkelte detaljer. I dette tilfellet skaleres skjemaet automatisk.

Du kan endre rekkefølgen på detaljene. Legg til en ny gruppe og plasser noen attributter (elementer) i den, og definerer alternativet for deres gruppering (horisontalt, vertikalt).

Rekvisittene som inngår i gruppen vil bli plassert deretter. I tillegg, for elementer, kan du tilpasse egenskaper som bredde, høyde, overskriftsdata.

Du kan definere et attributt som skal aktiveres når skjemaet åpnes.

En viktig egenskap er muligheten til å legge til nye felt i skjemaet. Dette er gjort mulig gjennom referansetype rekvisitter.

For eksempel å ha et referansetypeattributt på skjemaet Motpart, kan legge til Kontaktpersonen, hvis denne variabelen finnes i katalogen "Contractors".

Ytterligere felt kan fjernes om nødvendig. Felt opprettet i konfiguratoren kan ikke slettes. Alle innstillinger foretatt av brukeren lagres.

For å gå tilbake til standardinnstillingene i vinduet "Forminnstillinger" i menyen Alle handlinger bør velge element Angi standardinnstillinger.

I tillegg til å tilpasse skjemaer i det administrerte grensesnittet, er det mulig å tilpasse lister (elementer av kataloger, dokumenter).

I form av en liste i menyen Alle handlinger inneholder en spesiell kommando Tilpass listen.

Vinduet "Tilpass liste" åpnes. I dette vinduet kan du velge, sortere, definere betinget design og gruppering.

Figuren viser et skjema for redigering av utvalget.

Valg kan utføres på flere felt. I dette tilfellet vil valget som standard fungere i henhold til OG-betingelsen. Du kan også bruke OR- og NOT-betingelsene.

For å bruke OR (NOT)-betingelsen, må du legge til den aktuelle gruppen (OR Group, NOT Group) ved å bruke kommandoen Group conditions.

Figuren viser et skjema for å definere sorteringsfelt.

Innstilling av gruppering er mulig. I figuren er feltet for gruppering valgt Motpart.

Den neste figuren viser hvordan grupperingen skal utføres.

Du kan fargelegge listen på en vilkårlig måte, eller bruke andre elementer av betinget design (utheving med fonter, viss formatering) i henhold til en spesifisert tilstand, og også velge listen over felt som skal tegnes.

Figuren viser resultatet av feltets betingede bakgrunn Sum.
Når beløpet er > 100 000.

Det skal bemerkes at det er mulig å vise kataloger i hierarkimodus.

Hierarkisk visning av kataloger kan konfigureres gjennom elementet Visningsmodus på menyen Alle handlinger... Du kan velge ett av alternativene: Hierarkisk liste, Liste, Tre.

Det er også mulig å sette opp din egen gruppering av katalogelementer etter noen detaljer.

Du kan for eksempel gruppere en vare etter leverandør. Et eksempel ligner det der vi vurderte grupperingen av dokumenter "Salg av varer og tjenester" av motparter.

En praktisk funksjon er flere valg i listene med påfølgende utførelse av gruppehandlinger (holde, avbryte, fjerne merking av sletting).

Valg av objekter i listen utføres ved å holde nede tasten Skifte eller Ctrl.

Å søke etter en bestemt verdi i en liste har sine egne egenskaper. Søket fungerer i valgmodus. Bare de strengene gjenstår som samsvarer med søkebetingelsen.

For å søke etter verdi i gjeldende kolonne, plasserer du bare markøren på ønsket kolonne og klikker på knappen Finne i kommandopanelet. Et vindu vil dukke opp der du også skal klikke på knappen Finne.

Du kan bruke avmerkingsboksen for å gjøre søket mer spesifikt. Søk i funnet.

Når du søker etter en datastreng av en referansetype (for eksempel måleenheter), bør du velge riktig søkealternativ ... (etter linje).

Dette avsluttes med listene og måtene å tilpasse dem på. I den neste artikkelen vil vi fortsette å gjøre oss kjent med grensesnittet og vurdere et praktisk verktøy for å informere brukeren, som vi ikke har snakket om før. Hva er dette verktøyet? :)

Jeg antar at det ikke er nødvendig å fortelle deg hva en ACS, en innstillingslinker og generelt sett hele settet med objekter beregnet på å jobbe med ACS er. De viktigste bruksområdene, bortsett fra vanskelige handlinger i koden, er dynamiske lister og rapporter, og i begge tilfeller er det fortsatt svært betydelig funksjonalitet bak kulissene. Vi tenker ofte ikke engang på atferdslogikken og forholdet til alle deltakerne i prosessen, fordi vi løser vanligvis ganske enkle problemer eller stoler på plattformstandarder. Men der det er stillhet, er det også en intern logikk, en slags "bjørnetjeneste" 1C, for å overvinne fruktene som noen ganger er vanskelig og ikke åpenbar for å oppnå ønsket effekt, og samtidig er det nok bare å bruke verktøyene riktig.

Interesserte kan hoppe over del 1-4 og gå rett til eksemplene.

Jeg vil prøve å dvele litt mer detaljert på arbeidet med ACS-utvalg for deres søknad i rapporter. Jeg antar at oppførselen i dynamiske lister, med noen få forbehold, vil være lik. Så, utvalg i rapporter, litt teori og så konkrete eksempler.

SP 8.3.6 og høyere, ITS-seksjoner (klausul 10.3.7.5, etc.), boken "Professional development in the 1C-Enterprise 8 system" (Kazan, 2012, andre bind) brukes. I boken av E. Khrustaleva ble det ikke funnet noe forståelig om dette emnet i det hele tatt.

Del 1

Som du vet har innstillingslinkeren samlingene "Innstillinger", "Faste innstillinger" (heretter referert til som "FN") og "Brukerinnstillinger" (heretter referert til som "PN"). Rapporten kan ha flere alternativer, mens koblingene mellom alternativ, N, PN og FN er veldig særegne. La oss heller ikke glemme kilden til de tilgjengelige innstillingene, og dens "progenitor", som vanligvis er selve kretsen, som også har sine egne standardinnstillinger.

* Innstillinger - innstillinger opprettet i konfiguratormodus og endret i redigeringsmodus for rapportalternativet;

* Brukerinnstillinger - innstillinger som brukeren endrer i 1C: Enterprise-modus rent grensesnitt;

* FixedSettings - de innstillingene som er satt fra det innebygde språket, inkl. er implisitt satt av systemet. Denne egenskapen inneholder utvalgsverdiene som sendes til skjemaet ved hjelp av parameterne («Utvalg»-strukturen).

Innstillinger og FN er like i design og har en samling "Utvalg" av typen "Valg av datasammensetning", tilgjengelig for å endre sammensetningen når som helst etter rapportens eksistens. Samtidig er innstillingene tilgjengelige for grensesnittendring gjennom å redigere en variant, mens FN-er ikke er tilgjengelige i det hele tatt. PN er på sin side et "rot", der både selve "Utvalg" og individuelle objekter av typen "Utvalgselement av datasammensetningen" (det såkalte nestede objektet) kan være like elementer. Til tross for tilstedeværelsen av de riktige metodene, er det umulig å programmatisk endre sammensetningen av samlingen av PN-elementer, hvis det er PN-en til selve rapporten, og ikke laget "fra bunnen av" av designeren - 1C vil informere om at "The samling av brukerinnstillinger kan ikke endre sammensetningen, siden den er knyttet til layoutinnstillingene. ITS sier: "Eiendommen er ikke tilgjengelig for skriving ved hjelp av det innebygde språket.", Men, som vi skal se senere, er det mulig å påvirke PN. "Grøten" av objekter har interne forbindelser - den kontrolleres for konsistens av forholdene når du genererer en rapport, og når du endrer sammensetningen. På ITS-en leser vi: «Elementer som selv er merket som egendefinerte vil ikke bli lagt til. For eksempel vil et tilpasset filter ikke inkludere et filterelement som er merket som tilpasset. Elementer som inneholder egendefinerte elementer vil ikke bli lagt til. For eksempel vil en betingelsesgruppe ikke bli lagt til hvis gruppen inneholder elementer merket som egendefinert. For nestede elementer analyseres ikke DisplayMode-egenskapen. De legges til eller ikke legges til sammen med de overordnede elementene." Dermed opptrer "senioriteten" til objekter bak kulissene. I dette tilfellet kan en effekt oppnås når grensesnittet lar deg indikere motstridende valg for en variant og dens ST, så vel som innenfor ST.

Det ser ut til at "senior" er alternativet. Men å klikke på "Mer" / "Endre variant" og bekrefte endringene i det åpnede skjemaet kaller hendelsesbehandleren av skjemaet , mens utvalget vises i "Generelt"-panelet på skjemaet som kalles fra "Innstillinger ...", og vises på rapportskjemaet, men vises IKKE på fanen "Utvalg"; dessuten vises det enten umiddelbart både på rapportens hovedskjema og på skjemaet ved "Innstillinger ..." (hvis det er et flagg "Inkluder i brukerinnstillinger"), eller verken der eller der. Men i alle fall vil det IKKE være på "Valg"-fanen i "Innstillinger ..."-skjemaet. Forskjellen mellom "Generelt"-fanen i "Innstillinger ..."-skjemaet og hovedrapportskjemaet bestemmes av "Redigeringsmodus"-feltet (normalt - bare i "Innstillinger", raskt - også på selve rapportskjemaet), men jeg tror alle vet dette. Forresten, verdiene "Utvalg" og "Rask" er ikke synkronisert på noen måte og kan motsi hverandre, men "Rask"-verdiene på rapportskjemaet og på innstillingsskjemaet er strengt synkronisert. Så når du redigerer en variant, blir den selv endret (men dens ID og navn endres ikke), men PN forblir IKKE modifisert (dvs. selv om vi snakker om dem, dvs. om flagget for å inkludere et eller annet element i PN-en ).

Ved å klikke på "Velg et alternativ ..." og bekrefte endringene i skjemaet som åpner, får du opp hendelser i følgende rekkefølge:

WhenLoadingOptionOnServer

Ved oppdatering av egendefinerte innstillinger på server

Samtidig endres verken alternativet eller PN på noen måte. Derfor er det klart at alternativet og innstillingene, hvis de er tilkoblet, ikke er direkte relatert.

Å klikke på "Innstillinger ..." og bekrefte endringene i det åpnede skjemaet utløser bare hendelsen Ved oppdatering av egendefinerte innstillinger på server(i dette tilfellet blir PN endret, men visningene og nøkkelen (hvis de ikke ble det) mottas ikke; hvis "Rask" er aktivert for elementene i "Utvalg" til PN-objektet, i tillegg til "Utvalg", dets elementer vises som felt, det vil si .oppfører seg på samme måte som nestede elementer. Disse innstillingene lagres på lukk og gjenopprettes neste gang du går inn i skjemaet. Det berører eller endrer ikke alternativet på noen måte.

Klikk på "Mer" / "Angi standardinnstillinger" i innstillingsskjemaet (samt elementet "Standardinnstillinger" i redigeringsalternativet) utløser bare hendelsen Ved oppdatering av egendefinerte innstillinger på server... I dette tilfellet endres alternativet, men PN endres. Hvis alternativet ble endret før dette, forblir det endret (verken endringsflagget tilbakestilles, eller innstillingene som faktisk er gjort, tilbakestilles).

Ved å klikke på "Egenskaper for egendefinerte innstillinger" i strukturtreet på variantredigeringsskjemaet legges "Selection"-objektet til, og det viser seg å være tomt og synkroniseres ikke på noen måte med det eksisterende utvalget av en variant og det eksisterende nestede utvalget elementer.

Derfor anbefalingen: hvis du trenger å sette noen valg i "Konfigurator"-modus, for ikke å fikle med koden og slik at de ikke er i versjonen, men vil være i rapportgrensesnittet - bør du ikke manipulere valget elementer av alternativet, endre deres egenskaper, men selve valget , knappene "Elementegenskaper ..." og "Brukerinnstillinger".

Å legge til noe som har dukket opp i innstillingene til PN krever handlinger i koden eller grensesnittet, men sletting og sletting av innstillingene påvirker PN umiddelbart og uten noen oppdateringer, for eksempel:

Report.SettingsComposer.Settings.Selection.Elements.Clear ();

Før lukking av rapportskjemaet spør systemet kun om det har vært endringer i varianten. Hvis det var endringer i PN, vil de bli lagret automatisk uten spørsmål, og vil også automatisk prøve å søke i neste økt med arbeidet med rapporten.

Merknader:

Med en rekke feil er det bruken av innstillingene, først vises en melding om problemet, og deretter skjer koblingen fortsatt, hendelsen kalles og lage en rapport. Samtidig blir FN-er, hvis de var, fortsatt ignorert, og bare innstillinger spiller en rolle.

Når et utvalg legges til på "Endre variant"-skjemaet, gjøres det umiddelbart med flaggsettet "Inkluder i PN", men jeg gjentar, fra synspunktet til det innebygde språket, forblir PN uendret.

Innstillingen av variansen til varianten og innstillingen av variasjonen til PN er ikke direkte relatert, de er to forskjellige retninger for endringer.

PN har blant annet «Tilleggsinnstillinger». Jeg klarte ikke på noen måte å forstå hva og i hvilket øyeblikk de er fylt. Selv om rapporten inneholder innstillinger «merket i utvalget og betinget utforming» som tilpasset (i følge fellesforetaket), viste tilleggsinnstillingene seg i alle tilfeller å være tomme. Det står ingenting om dette på ITS.

Til tross for uttalelsen i joint venture, er PN-er perfekt serialisert i xml.

Hvis både uavhengige elementer av utvalget og selve utvalget er inkludert for bruk, er rapporten satt sammen riktig, men når den vises, dupliserer den informasjon om det etablerte utvalget i det endelige oppsettet.

Standard redigeringsskjema for rapportvarianten inneholder mange interessante ting, men ingen steder fungerer det med FN og PN, og med grunninnstillingene fungerer det mer for lesing (bortsett fra at det sletter utvalget, rekkefølgen, betinget design).

Del 2

Å jobbe med Attitudes og FN gjennom samlingen deres er nesten alltid tillatt, men det er viktig å huske at essensen av det "tredje nivået" er i endring. Det første nivået inneholder alltid standardinnstillingene for selve ACS, de vises også implisitt i kilden til tilgjengelige innstillinger; på andre nivå - innstillingene for det brukte alternativet. Men her lar logikken deg enten "slette" de underliggende instruksjonene, eller ignorere dem. Men å jobbe med PN gir ikke lenger friheter, og subtile manipulasjoner må gjøres ved hjelp av spesielle metoder, og noen ganger midlertidige hjelpemidler, for eksempel:

Comp = New DataCompositionSettingsComposer; // du kan også starte // comp.Initialize (SomeComposerSettings.GetSourceAvailableSettings ()); comp.LoadSettings (SomeComposerSettings.Settings); En vissSettingsComposer.DownloadUserSettings (comp.UserSettings);

Innstillingslinkeren har en metode (), som laster de egendefinerte preferanseverdiene sendt som en metodeparameter. Metode Hent innstillinger() lar deg få en kopi av gjeldende innstillinger (under hensyntagen til brukerinnstillinger). Metode Last ned innstillinger() laster de overførte innstillingene inn i innstillingslinkeren (brukerinnstillingene lastes også inn på nytt basert på de overførte dataene, tar hensyn til tilstedeværelsen av nøkler, se eksempelet nedenfor).

Bruk av egendefinerte innstillinger på grunnleggende innstillinger gjøres i metoden Hent innstillinger() linkerinnstillinger. I dette tilfellet utføres følgende handlinger:

* For DataCompositionOptionElement-typer kopieres innholdet i elementene til de tilsvarende egendefinerte innstillingselementene.

* For DataCompositionFeed-typer forblir elementene som er i hovedinnstillingene og merket som Utilgjengelig uendret. Elementer fra PN overføres til de viktigste. De legges til på slutten av utvalgssamlingen.

* For DataCompositionElementGroup-typer settes Use-egenskapen i det tilsvarende elementet i hovedinnstillingene (basert på tegnet for bruk av PN-elementet).

Del 3

Når du danner den endelige innstillingen, for å sitere ITS, kombineres ulike innstillingsalternativer som følger:

* Hvis noen type innstillinger er fullstendig merket som egendefinerte, inkluderer de resulterende innstillingene PN. Samtidig, hvis noen innstillingselementer er merket som utilgjengelige, vil disse innstillingene bli plassert i de resulterende innstillingene fra SettingsComposer.Settings-egenskapen.

* Hvis noen form for innstillinger er merket som tilpasset ikke helt, men element for element, vil elementene som er merket som tilpasset inkluderes i de resulterende innstillingene fra Properties Composer.Custom Settings, og elementene merket som utilgjengelige vil bli tatt med i resulterende innstillinger fra Properties Composer. Innstillinger. ...

* Faste innstillinger legges til de resulterende innstillingene "som de er". I dette tilfellet er situasjonen uakseptabel når det er innstillinger med samme navn i FN og PN, for eksempel valg med samme venstre verdi i tilstanden. Merk at selv fullstendig sammenfall av alle egenskapene til disse forholdene er forbudt. For å være ærlig, litt ulogisk.

Merk at hvis et fragment av innstillingene faller innenfor rammen av det funksjonelle alternativet og bør begrenses, fungerer systemet "stille" - det fjerner dette fragmentet fra overalt, rapporterer ikke noe, og under programmanipulasjoner angående et slikt fragment, fungerer "tomgang" - feil produserer ikke, men det er ingen effekt fra koden heller. Det er imidlertid mulig at forskjellige utgivelser oppfører seg forskjellig.

Del 4.

Utvidelsen av rapportskjemaet gir oss parametrene "FN" og "PN", men ingen steder anbefales det å fylle dem ut direkte ved å overføre dem til skjemaet. Som eksperimenter har vist, uten ytterligere danser med en tamburin, ignoreres fyllingen av disse parameterne - den overskrives når linkeren initialiseres under åpningsprosessen og når tidligere lagrede PN-er mottas. Det anbefales å jobbe med PN-nøkler, ifølge hvilke de kan hentes fra innstillingslageret og deretter åpnes og brukes, og dette gjøres automatisk på siden av rapportskjemaet, og ikke på oppkallingsskjemaet.

Parameteren "SourceAvailableSettings" blir automatisk oversatt til linkerinformasjon når skjemaet opprettes på serveren og kan ikke overstyres. Det kan det heller, men dette vil først gi effekt etter en fullstendig omdefinering av hele kjeden av relaterte objekter. Hvori GetSourceAvailableSettings() vil returnere Udefinert til slutten av behandlingen av alle skjemaåpningshendelsene.

Legg merke til at formparametrene, som faktisk ikke er nøkkelen, "strekker" handlingen over flere hendelser, hvis formasjonsflagget ved åpning er satt. Så i tilfelle BehandlerCheckFillsOnServer, kalt ved åpning og dannelse, vil "Valg"-parameteren være tilgjengelig, men med den, men bare kalt ved å trykke på brukeren på "Generer"-knappen, vil den ikke lenger være det. Dette skyldes det faktum at alle disse hendelsene behandles i ett "besøk" på serveren, hvis formasjonen ved åpning er aktivert, og først på slutten av dem overføres kontrollen til klienten og kalles Åpning... I dette tilfellet går ikke-nøkkelparametere naturlig tapt.

Den generelle rekkefølgen for utførelse av hendelser når du åpner et skjema med flagget for å generere en rapport ved åpning (noe mer enn beskrevet i "Faglig utvikling"):

OnCreateAtServer

FørLoadingOptionOnServer

WhenLoadingOptionOnServer

Før du laster ned egendefinerte innstillinger på serveren

Ved opplasting av egendefinerte innstillinger på server

Ved oppdatering av egendefinerte innstillinger på server

BehandlerCheckFillsOnServer

Åpning

Samtidig endres verken opsjonen eller PN, med mindre det er gjort en spesiell innsats.

Del 5.

La oss nå dvele mer detaljert på oppgaven med å åpne et rapportskjema med dets konstruksjon og forhåndsspesifiserte utvalg. Kort informasjon om dette er på ITS og i de metodiske anbefalingene, men bare selve prinsippet er belyst der og finessene avsløres ikke. Så, for en kontekstuell samtale av rapporten, er det nødvendig å overføre til sin form "GenerateOnOpening"-parameteren lik True; og en "Utvalg"-parameter som inneholder strukturen. Strukturnøkler er navnene på ACS-felt eller ACS-parametere, og verdiene er deres verdier. Siterer SP, hvis det er en ACS-parameter med et navn som tilsvarer navnet på strukturnøkkelen, vil verdien settes til den. Hvis det ikke er noen parameter, men det er et felt, vil et utvalg bli lagt til dette feltet. På samme tid, hvis det er en parameter og et felt med samme navn, vil systemet ganske enkelt ignorere det stille og ikke installere noe.

I "Profesjonell utvikling" er det et eksempel på å endre (dvs. avskjære og rekonfigurere) en PN "on the fly" i en hendelse Før du laster ned egendefinerte innstillinger på serveren, hvor argumentet som inneholder gjeldende PN sendes. Faktisk er dette ikke alltid tilfelle - for eksempel kan det være tilfeller når en feil ved lagring av PN i forrige økt, eller uoverensstemmelser mellom Innstillinger, FN og PN vil føre til at "Innstillinger"-argumentet vil være tomt. Og det som er mest interessant, det vil ikke være mulig å konfigurere det fullstendig i denne hendelsen, det kan bare gjøres "på slutten" av hendelsessekvensen, nemlig i hendelsen BehandlerCheckFillsOnServer.

La oss se hva vi har før du laster PN på serveren.

For et enkelt tilfelle, når ingenting er forhåndsdefinert i ACS og ingen elementer er inkludert i PN, er situasjonen som følger: Innstillinger - tom; FN - inneholder riktig utvalg; PN inneholder tom utvalg. Shaping fungerer riktig, men fra brukerens synspunkt motsier grensesnittet guts og er nedslående - utvalget fungerer, men er ikke synlig. Tilsvarende, hvis du aktiverer Selection i PN i strukturinnstillingene til varianten, bygges rapporten også med hensyn til utvalget, men brukeren ser heller ingen valg.

La oss sette forhåndsvalg i ACS-innstillingene i konfiguratoren (lik tomme verdier) og aktivere dem i PN. I teorien skal FN fylle ut Innstillinger, og de - PN, men faktisk har vi: i Innstillinger - Utvalg med ønsket element, men en tom høyreverdi, FN - inneholder riktig utvalg, og PN - inneholder fortsatt ikke hva som helst. I tillegg vil rapporten i dette tilfellet ikke bygges, fordi den høyre valgverdien er tom, til tross for verdien som er sendt i Selection-parameteren.

Et forsøk på å jobbe med PN-elementer gir heller ikke resultat. For PN-elementet kan du kun endre "Bruk"-flagget og deltakelse i "Rask". Valgverdien på grensesnittet vil være tom, systemet vil ikke generere noen feil. På samme måte vil et forsøk på å jobbe med PN Selection også fungere, i debuggeren vil riktig verdi ses som riktig fylt, men du vil ikke se noe på grensesnittet. La meg minne deg på at det er umulig å endre sammensetningen av PN. Derfor kreves ytterligere justeringer. For eksempel:

& OnServer-prosedyre SetPresetSections (UserSettings) Hvis ikke Parameters.Property ("Selection") Returner deretter EndIf; Hvis Parameters.Selection.Number () = 0 Returner deretter EndIf; rTypeEO = Type ("DataCompositionSelectionElement"); For hver nøkkel Fra parametere Utvalgssyklus rField = New DataComposition Field (key.Key); // If (TypeZnch (kiz.Value) = Type ("Array") eller TypeZnch (kiz.Value) = Type ("List of Values")) og kiz.Value.Quantity ()> 1 Then pComparisonType = ComparisonTypeDataCompositionInList; Ellers pComparisonType = DataCompositionComparisonType.Equal; Slutt om; // pHnecessaryChoice = Udefinert; // se om det er et utvalg i de egendefinerte innstillingene rn nødvendig EO = Udefinert; // sjekk om det er et eget DataCompositionFeed Element i de tilpassede innstillingene For hver elnastr Fra CustomSettings.Elements Cycle IfTypeZnch (elnastr) = Type ("DataCompositionSelection") og pHnecessarySelection = Undefined Da // kan det bare være én pHnecessarySelection = Elnastr; // dette kan gjøres utenfor loopen, men det er nødvendig å iterere over de egendefinerte innstillingene av hensyn til elementene ... Ellers, hvis TypeZnch (elnastr) = rTypeEO Da // dette er et utvalgselement, kan det være mange av dem, men vi er interessert i ikke initialisert eller med det nødvendige feltet Hvis elnastr.LevoeValue = rField eller elnastr.LevoeValue = Udefinert og pHuzhnyEO = Udefinert Da pHuzhnyEO = elnastr; Slutt om; Slutt om; Slutt på syklus; // Hvis pH er passende<>Udefinert Deretter // går det som prioritet rn For hver elotb Fra pHuzhnyObot.Elementsyklus Hvis elotb.LevoeValue = pField Da pHuzhnyEOizObra = elotb; Avbryt EndIf; Slutt på syklus; Hvis pHRequiredEOfromSelection = Udefinert Da pHRequiredEOfromOffice = pHRequiredSelection.Elements.Add (rTypeEO); pHRealEOfromSelection.LeftValue = pField; Slutt om; pHRealEOfromSelection.ComparisonType = pComparisonType; pHRealEOfromSelection.RightValue = kiz.Value; pHRequiredEOisObtaining.Usage = Sant; // pHAlrightEO.Usage = False; Else Hvis pH er ønsket Valg = Udefinert og pH er ønsket EO<>Undefined Deretter // sette på elementet pHazhnyEO.LeftValue = pField; pHRealEO.ComparisonType = pComparisonType; pHazhnyEO.RightValue = kiz.Value; pHEO.Usage = Sant; Slutt om; pHazhny = Udefinert; For hver elotb Fra Report.SettingsComposer.Settings.Selection.Elements Loop // på en minnelig måte, bør det være et rekursivt søk! Hvis TypeZnch (elotb) = pTypeEO og elotb.LevoValue = pField Da pHnecessary = elotb; Avbryt EndIf; Slutt på syklus; Hvis pHRequired = Udefinert Da pHRequired = Report.Settings Composer.Settings.Selection.Elements.Add (rTypeEO); pHLeftValue = pField; Slutt om; pHOfComparisonType = pComparisonType; pHazhny.RightValue = kiz.Value; pHazy.Usage = Sant; // End of the loop; Report.SettingsComposer.FixedSettings.Selection.Elements.Clear (); // ellers si at elementene krysser / motsier EndProcedure

Den mest korrekte måten å kalle det på er:

& AtServer-prosedyre for uved server (avslag, kontrollerte attributter) SetPresetSections (Report.SettingsComposer.UserSettings); Slutt på prosedyre

Deretter vil en kontekstuell samtale, for eksempel fra et referanseskjema, se slik ut:

& OnClient-prosedyre OpenReport (Command) Hvis ValueFilled (Object.Link) Så ut = New Structure ("ReferenceOnDirectory", Object.Link); // dette er navnet på feltet i ACS-en til rapporten Form Parameters = New Structure ("Velg, Generer ved åpen", Ot, True); OpenForm ("Report.Report1.Form.ReportForm", skjemaparametere, EtaForm); Slutt om; Slutt på prosedyre

Del 6.

Om nødvendig, endre innstillingene til rapporten mens du arbeider med den, inkl. både ved oppstart og etter åpning er den mest korrekte måten å endre "fra begynnelsen", dvs. fra ACS-innstillingene. Endring av ACS-skjemaet utføres bare med rapportobjektet (eller ExternalReport), og ikke med skjemadataene, og endrer ikke noe i seg selv - i innstillingene og i PN forblir det samme som det var, og FN kan forbli tom i det hele tatt. Derfor, avhengig av våre oppgaver:

Etter henrettelse

Report.SettingsComposer.LoadSettings (ACS.Default)

bare varianten endres, og ingenting mer;

Etter å ha fullført teknikken gitt i klausul 2 (ved å bruke "mediator" og metoden Last ned egendefinerte innstillinger()

fungerer bare hvis gjeldende PN-er tilbakestilles ved hjelp av grensesnittet. Av seg selv vil de ikke endre seg når alternativet endres. Dette endrer utvalget, men legger ikke til et nytt utvalgselement.

Etter henrettelse

ThisForm.CreateFormElementsCustomSettings (, DisplayModeDataCompositionSettings.All)

plattformen faller bare stille. Testet på flere forskjellige utgivelser. Og samtalen med modusen for å vise innstillingene bare for de raske gir ikke mening - vi har ikke påvirket sammensetningen deres, så ingenting vil endre seg uansett.

Og siden vi fortsatt trenger å endre ikke bare de interne valgene, men også visningen på rapportskjemaet og i relaterte skjemaer, må vi enten bare endre utvalget, eller fortsette som følger:

& AtServer Prosedyre ChangeSKD () rObject = FormInValue ("Rapport"); off = pObject.DataCompositionSchema.SettingsVariants.Get (0) .Settings.Feed; eo = otb.Elementy.Add (Type ("DataCompositionOptionElement")); eo.LeftValue = NewDataCompositionField ("ReferenceRef.Field1"); eo.ComparisonType = DataCompositionComparisonType.Equal; eo.RightValue = Sant; eo.Use = Sannhet; ValueVRequisitForm (rObject, "Rapport"); Report.SettingsComposer.LoadSettings (rObject.DataCompositionSchema.Default Settings); Report.ConfigurationComposer.Restore (); // ønskelig, selv om dette ikke påvirker FN uansett. // faktisk er dette det som kan kalles en endring i sammensetningen av PN For hver e-post Fra Report.ComposerSettings.Notroyki.Obor.Elements Cycle e.Display Mode = Display ModeDataCompositionSettingsSettingElement.BystryAccess; Hvis det er en EmptyString (UserSettings' e-postidentifikator) så // kan du bruke metoden for PN-elementet. // viktig - identifikatoren kan være ALLE, ikke en UUID eller en GUID! EmailPresentationUserSettings = "Prøving"; Slutt om; Slutt på syklus; comp = New DataCompositionSettingsComposer; Comp.LoadSettings (rObject.DataComposition Scheme.Default Settings); Report.Settings Composer.DownloadUserSettings (comp.UserSettings); For hver e-post Fra Report.Settings Composer.UserSettings.Elements Cycle eDisplay Mode = Display ModeDataCompositionDataCompositionSettings.QuickAccess; // trekk EndCycle til rapportskjemaet; // og nå vil det ha en effekt: ThisForm.CreateUserSettingsFormElements (,DataCompositionSettingsDisplayMode.QuickAccess); Slutt på prosedyre

Faktisk kan du studere denne mekanikken i lang tid. Denne publikasjonen vokste ut av å utforske måter å løse ett bestemt problem på og er derfor veldig ensidig; men jeg mistenker at det generelt er mulig å skrive en egen bok om den interne logikken til innstillinger, spesielt tilpassede, ikke mer subtile enn Kristalevs. Dessverre har jeg ikke tid og energi til det. Alle som trenger spesifikke utviklinger er allerede gode.

Noe har blitt avklart eksperimentelt og derfor kontroversielt. De som vet mer inviteres til å kritisere og kommentere.