1c nastavite standardne nastavitve obrazca. Izbire v poročilih. Nianse graditelja nastavitev. Nastavitev obrazcev in delo s seznami

Podsistem v 1C 8.3— objekt metapodatkovnega drevesa, ki je odgovoren za gradnjo konfiguracijskega ukaznega vmesnika.

Spodaj v članku bomo govorili o podsistemih od različice 8.2.

Dejstvo je, da je imela različica 8.1 (pa tudi običajna aplikacija 8.2) tudi podsisteme, ki pa so služili povsem drugim namenom, bolj verjetno za razvijalca kot za uporabnika. Z uporabo podsistemov v 8.1 so bile različne funkcionalnosti običajno ločene. Podsistemi so pomagali tudi pri združevanju različnih konfiguracij 1C - mogoče je bilo določiti, kateri sistem prenesti.

Podsistemi 1C in programski vmesnik

V različicah 8.3 in 8.2 so podsistemi glavno orodje za gradnjo ukaznega uporabniškega vmesnika. Podsistemi metapodatkovnih objektov hierarhično strukturoČe želite konfigurirati "podmeni" v vmesniku, morate dodati podrejeni podsistem:

Lastnosti in nastavitve

Poglejmo si nastavitve in lastnosti podsistemov v konfiguratorju:

Pridobite 267 video lekcij o 1C brezplačno:

Vključi v ukazni vmesnik— če ste pozabili nastaviti to zastavico, podsistem ne bo prikazan v vmesniku.

Gumb odpre ploščo z nastavitvami vmesnika, kjer lahko konfigurirate vmesnike glede na vlogo trenutnega uporabnika:

Slika— slika, dodeljena podsistemu, je prikazana v načinu podjetja. Izberete lahko standardno sliko ali pa dodate svojo, tako da jo najprej ustvarite kot konfiguracijski objekt Slika:

Na zavihku Funkcionalne možnosti označuje seznam funkcijskih možnosti, v katerih se ta podsistem uporablja.

Tab Spojina definira nabor metapodatkovnih objektov, ki sodelujejo v danem podsistemu.

Na zavihku drugo lahko opišete pomoč za podsistem in določite nastavitve Vključi v vsebino pomoči— ali vključiti ta razdelek pomoči v splošno osnovne informacije po konfiguraciji.

Če v upravljanem vmesniku ne vidite poročila ali obdelave

Ta težava se zelo pogosto pojavlja med razvijalci začetniki - zdi se, da je bilo v podsistem dodano poročilo ali obdelava, vendar ni vidna.

Prvi razlog za to je lahko ta, da objekt nima definirane nadzorovane oblike.

Drugi razlog je, da je na zavihku Ukazi predmeta izbrano potrditveno polje »Uporabi standardne ukaze«. To je posledica dejstva, da lahko za odprto obdelavo opišete svoj postopek ali pa uporabite standardnega:

Članek nadaljuje serijo "Prvi koraki v razvoju 1C."

V konfiguraciji na platformi 1C:Enterprise se pri prikazu informacij najpogosteje uporabljajo tabele, ki prikazujejo različne sezname informacij. Delo s takšnimi seznami se lahko pojavi tako v obliki seznama kot v obliki elementa (obdelava).

V tem članku se bomo seznanili s temi možnostmi prilagajanja seznamov in si ogledali tudi druge funkcije prilagajanja obrazcev z uporabniške strani.

Uporabnost

Članek obravnava upravljani vmesnik v različici konfiguracije »Različica 8.2«, razvite na platformi 1C 8.3.4.482.

Če delate s konfiguracijami, ki podpirajo ta vmesnik, so informacije pomembne za vas in trenutne različice platforme.

Če delate v novem vmesniku Taxi, se lahko imena nekaterih konfiguracijskih ukazov in splošno zaporedje dejanj nekoliko razlikujejo.

Poleg tega je trenutna različica platforme dodala nove možnosti iskanja na seznamih.

Nastavitev obrazcev in delo s seznami

Pri upravljanih elementih obrazca je mogoče spremeniti vidnost in nekatere druge lastnosti. Za te namene v v obvladljivi obliki na meniju Vsa dejanja služi kot predmet Spremeni obrazec.

Po kliku na ta ukaz se prikaže okno »Nastavitve obrazca«.

V oknu, ki se prikaže, lahko s potrditvenimi polji spremenite vidnost nekaterih podrobnosti. V tem primeru se obrazec samodejno prilagodi.

Vrstni red podrobnosti lahko spremenite. Dodajte novo skupino in vanjo postavite nekaj podrobnosti (elementov) ter določite možnost njihovega združevanja (vodoravno, navpično).

Podrobnosti o vključenih v skupino bodo ustrezno objavljene. Poleg tega lahko konfigurirate lastnosti, kot so podatki o širini, višini in glavi za elemente.

Določite lahko atribute, ki bodo aktivirani, ko se obrazec odpre.

Pomembna funkcija je možnost dodajanja novih polj obrazcu. To postane mogoče z atributi referenčnega tipa.

Na primer imeti na obrazcu atribut tipa reference Nasprotna stranka, lahko doda Kontaktna oseba, Če ta rekvizit je prisoten v imeniku »Nasprotne stranke«.

Po potrebi lahko odstranite dodatna polja. Polja, ustvarjena v konfiguratorju, ni mogoče izbrisati. Vse uporabniške nastavitve se shranijo.

Za vrnitev na standardne nastavitve v oknu Nastavitve obrazca v meniju Vsa dejanja morate izbrati predmet Namestite standardne nastavitve .

Poleg prilagajanja obrazcev v upravljanem vmesniku je možno prilagajanje seznamov (elementov imenika, dokumentov).

V obliki seznama v meniju Vsa dejanja vsebuje poseben ukaz Prilagodite seznam.

Odpre se okno »Nastavitve seznama«. V tem oknu lahko izbirate, razvrščate, definirate pogojno oblikovanje in združevanje.

Slika prikazuje obrazec za urejanje izbora.

Izbira je mogoča z uporabo več polj. V tem primeru bo izbira privzeto delovala glede na pogoj IN.Uporabite lahko tudi pogoja ALI in NE.

Če želite uporabiti pogoj ALI (NE), morate z ukazom Pogoji skupine dodati ustrezno skupino (ALI skupina, NE skupina).

Slika prikazuje obrazec za definiranje polj za razvrščanje.

Združevanje je mogoče konfigurirati. Na sliki je izbrano polje za združevanje Nasprotna stranka.

Naslednja slika prikazuje, kako bo izvedeno združevanje.

Seznam lahko poljubno pobarvate ali uporabite druge elemente pogojnega oblikovanja (izbira pisave, specifično oblikovanje) glede na dani pogoj, kot tudi izberete seznam polj, ki jih želite oblikovati.

Slika prikazuje rezultat pogojnega oblikovanja ozadja polja vsota.
Ko je znesek > 100.000.

Upoštevati je treba, da si je možno ogledati imenike v hierarhičnem načinu.

Hierarhični ogled imenikov je mogoče konfigurirati prek postavke Način pogleda na meniju Vsa dejanja. Izberete lahko eno od možnosti: Hierarhični seznam, Seznam, Drevo.

Prav tako je mogoče konfigurirati lastno razvrščanje elementov imenika glede na določene podrobnosti.

Artikle lahko na primer združite po dobaviteljih. Primer je podoben tistemu, kjer smo si ogledali združevanje dokumentov »Prodaja blaga in storitev« po nasprotnih strankah.

Priročna funkcija je večkratna izbira na seznamih in kasnejša izvedba skupinskih dejanj (objava, preklic, počistite brisanje).

Objekte na seznamu izbiramo z držanjem tipke Shift oz Ctrl.

Iskanje določene vrednosti na seznamu ima svoje značilnosti. Iskanje poteka v izbirnem načinu. Ostanejo samo tiste vrstice, ki izpolnjujejo iskalni pogoj.

Če želite iskati po vrednosti v trenutnem stolpcu, postavite kazalec na želeni stolpec in kliknite gumb Najti v ukazni plošči. Odpre se okno, v katerem morate tudi klikniti na gumb Najti.

Za natančnejše iskanje lahko uporabite potrditveno polje Iskanje v najdenem.

Ko iščete vrstico podatkov referenčne vrste (na primer merske enote), morate izbrati ustrezno možnost iskanja ... (po vrstici).

To se zaključi s seznami in načini za njihovo konfiguracijo. V naslednjem članku bomo nadaljevali s spoznavanjem vmesnika in si ogledali priročno orodje za obveščanje uporabnika, o katerem prej nismo govorili. Kakšen instrument je to? :)

Mislim, da vam ni treba povedati, kaj je sistem za nadzor dostopa, sestavljalnik nastavitev in na splošno celoten nabor objektov, ki so zasnovani za delo s sistemom za nadzor dostopa. Glavna področja uporabe, če ne štejemo zapletenih dejanj v kodi, so dinamični seznami in poročila, v obeh primerih pa zelo pomembna funkcionalnost ostaja v ozadju. Pogosto sploh ne razmišljamo o logiki vedenja in odnosov vseh udeležencev v procesu, saj Običajno rešujemo dokaj preproste težave ali se zanašamo na privzete nastavitve platforme. A kjer so tišine, je tudi notranja logika, nekakšna »medvedja usluga« 1C, katere sadove je včasih težko in neočitno premagati, da bi dosegli želeni učinek, hkrati pa je dovolj že samo pravilno uporabljati orodja.

Zainteresirani lahko preskočijo dele 1-4 in gredo naravnost na primere.

Poskušal se bom nekoliko podrobneje posvetiti delovanju izbir ACS za primer njihove uporabe v poročilih. Mislim, da je vedenje v dinamični seznami, z nekaterimi zadržki, bo blizu. Torej izbor v poročilih, malo teorije in nato konkretni primeri.

Uporabljajo se SP 8.3.6 in višje, razdelki ITS (klavzula 10.3.7.5 itd.), Knjiga »Strokovni razvoj v sistemu 1C-Enterprise 8« (Kazan, 2012, drugi zvezek). V knjigi E. Khrustaleva o tej temi sploh ni bilo nič razumljivega.

1. del

Kot veste, ima graditelj nastavitev zbirke »Nastavitve«, »Stalne nastavitve« (v nadaljevanju »FN«) in »Nastavitve po meri« (v nadaljevanju »CU«). Poročilo ima lahko več možnosti, povezave med možnostjo N, PN in FN pa so zelo edinstvene. Ne pozabimo tudi na vir razpoložljive nastavitve, in njegov "prednik", ki je običajno samo vezje, ki ima prav tako svoje privzete nastavitve.

* Nastavitve – nastavitve, ustvarjene v načinu Konfigurator in spremenjene v načinu urejanja različice poročila;

* UserSettings – nastavitve, ki jih uporabnik spremeni v načinu »1C:Enterprise« izključno prek vmesnika;

* FixedSettings – tiste nastavitve, ki so nastavljene iz vgrajenega jezika, vklj. implicitno nastavi sistem. Ta lastnost vsebuje izbirne vrednosti, ki se prenesejo v obrazec z uporabo njegovih parametrov (struktura »Izbor«).

Nastavitve in FN-ji so po zasnovi podobni in imajo zbirko »Izbor« tipa »Izbira sestave podatkov«, ki je na voljo za spreminjanje sestave kadar koli med obstojem poročila. Hkrati so na voljo nastavitve za spreminjanje vmesnika z urejanjem različice, FN pa sploh niso dostopne. PN pa je "kaša", kjer so enaki elementi lahko tako sam "Izbor" kot posamezni objekti tipa "Element izbire sestave podatkov" (tako imenovani ugnezdeni objekt). Kljub razpoložljivosti ustreznih metod je nemogoče programsko spremeniti sestavo zbirke elementov PN, če so to PN samega poročila in jih oblikovalec ni izdelal "iz nič" - 1C bo poročal, da "Zbirka uporabnikov nastavitve ne morejo spremeniti njegove sestave, ker je povezana s podatki o nastavitvah postavitve." ITS pravi: »Lastnosti ni mogoče pisati z uporabo vgrajenega jezika.«, vendar, kot bomo videli kasneje, je možno vplivati ​​na PN. "Kaša" predmetov ima interne komunikacije– se preveri konsistentnost pogojev pri generiranju poročila in ob spremembi sestave. Na ITS beremo: »Elementi, ki so sami označeni kot po meri, ne bodo dodani. Izbor po meri na primer ne bo vključeval elementa izbora, ki je označen kot po meri. Elementi, ki vsebujejo elemente po meri, ne bodo dodani. Na primer, skupina pogojev ne bo dodana, če skupina vsebuje elemente, označene kot po meri. Za ugnezdene elemente lastnost DisplayMode ni analizirana. So dodani ali ne dodani skupaj z nadrejeni elementi." Tako "starost" predmetov deluje v ozadju. V tem primeru lahko dosežete učinek, ko vam vmesnik omogoča, da določite nasprotujoče si izbire za različico in njen PN, pa tudi znotraj PN.

Zdi se, da je "starejši" možnost. Toda klik na “Več” / “Spremeni možnost” in potrditev sprememb v odprtem obrazcu prikliče obravnavo dogodkov obrazca , v tem primeru se izbor pojavi na plošči "Osnovno" na obrazcu, ki ga prikličete iz "Nastavitve ...", in se prikaže na obrazcu za poročilo, vendar NI prikazan na zavihku "Izbira"; Poleg tega se bodisi pojavi takoj tako na glavnem obrazcu za poročilo kot na obrazcu »Nastavitve ...« (če obstaja zastavica »Vključi v uporabniške nastavitve«) ali pa niti tam niti tam. V vsakem primeru pa NE bo na zavihku “Izbira” v obrazcu “Nastavitve...”. Razliko med zavihkom »Osnovno«, obrazcem »Nastavitve ...« in glavnim obrazcem za poročilo določa polje »Način urejanja« (normalno - samo v »Nastavitve«, hitro - tudi na samem obrazcu za poročilo), ampak mislim, da to vsi vedo. Mimogrede, vrednosti »Izbira« in »Hitro« nikakor nista sinhronizirani in si lahko nasprotujeta, vendar sta »Hitro« na obrazcu za poročilo in na obrazcu za nastavitve strogo sinhroni. Torej, ko uredite varianto, se sama spremeni (vendar se njen ID in ime ne spremenita), vendar PN ostanejo NEspremenjeni (tj. tudi če govorimo o njih, tj. o zastavici za vključitev tega ali onega element v PN).

Klik na “Izberi možnost...” in potrditev sprememb v obrazcu, ki se odpre, sproži dogodke v naslednjem vrstnem redu:

Pri nalaganju na strežnik OptionOn

Pri posodabljanju sestave uporabniških nastavitev na strežniku

V tem primeru se niti opcija niti PN ne spremenita v ničemer. Od tu je razvidno, da možnost in nastavitve, če so povezane, nikakor niso neposredno povezane.

Klik na "Nastavitve..." in potrditev sprememb v odprtem obrazcu le sproži dogodek Pri posodabljanju sestave uporabniških nastavitev na strežniku(v tem primeru se PN-ji spremenijo, vendar pogledi in ključ (če jih ni bilo) niso prejeti; če je za elemente predmeta »Izbira« PN-ja omogočeno »Hitro«, potem poleg »Izbira«, njeni dejanski elementi se prikažejo kot polja, tj. obnaša se podobno kot ugnezdeni elementi. Te nastavitve se shranijo ob zapiranju in obnovijo ob naslednjem vstopu v obrazec. Možnosti se ne dotika ali spreminja.

Klik na "Več"/"Nastavi standardne nastavitve" v obrazcu z nastavitvami (kot tudi postavko "Standardne nastavitve" v možnosti urejanja) samo sproži dogodek Pri posodabljanju sestave uporabniških nastavitev na strežniku. V tem primeru se možnost spremeni, spremeni pa se PN. Če je bila možnost prej spremenjena, ostane spremenjena (niti spremenjena zastavica se ne ponastavi niti dejanske nastavitve).

S klikom na »Lastnosti elementa nastavitev po meri« v strukturnem drevesu na obrazcu za urejanje različice se doda objekt »Izbira«, ki se izkaže za prazen in ni na noben način sinhroniziran z obstoječo izbiro različice in obstoječimi ugnezdenimi elementi izbire. varianta se v ničemer ne spremeni.

Od tod priporočilo: če morate določene izbire nastaviti v načinu »Konfigurator«, da se ne bi poigravali s kodo in da niso v možnosti, ampak bi bili v vmesniku poročila, ne smete manipulirati z izbiro elemente možnosti, spreminjanje njihovih lastnosti, ampak sam izbor z uporabo gumbov »Lastnosti elementa…« in »Nastavitve po meri«.

Dodajanje nečesa, kar se prikaže v nastavitvah v PN, zahteva dejanja v kodi ali vmesniku, vendar brisanje in brisanje nastavitev vpliva na PN takoj in brez kakršnih koli posodobitev, na primer:

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

Sistem pred zaprtjem obrazca za prijavo vpraša le, če je prišlo do sprememb variante. Če je prišlo do sprememb v PN, bodo te samodejno shranjene brez kakršnih koli vprašanj in se bodo samodejno poskušale uporabiti v naslednji seji dela s poročilom.

Opombe:

V primeru številnih napak pri uporabi nastavitev se najprej prikaže sporočilo o težavi, nato pa še vedno pride do sestave, dogodek se imenuje in ustvarjanje poročil. V tem primeru so FN-ji, tudi če bi obstajali, še vedno prezrti in samo nastavitve igrajo vlogo.

Pri dodajanju izbire na obrazcu »Spremeni možnost« se to izvede takoj z nastavljeno zastavico »Vključi v PN«, vendar ponavljam, z vidika vgrajenega jezika ostanejo PN nespremenjeni.

Nastavitev variacije variante in nastavitev variacije PN nista neposredno povezani, gre za dve različni smeri sprememb.

PN ima med drugim "Dodatne nastavitve". Nikoli nisem mogel razumeti, kaj in v katerem trenutku se polnijo. Čeprav poročilo vsebuje nastavitve, »označene v izboru in pogojni zasnovi« kot prilagojene (glede na skupno podjetje), vendar dodatne nastavitve v vseh primerih so bili prazni. Na ITS o tem ni ničesar.

Kljub izjavi v joint venture so PN-ji odlično serializirani v xml.

Če sta za uporabo vključena tako neodvisna izbirna elementa kot sam izbor, je poročilo sestavljeno pravilno, vendar ob prikazu podvoji informacije o vzpostavljenem izboru v končni postavitvi.

Privzeta forma za urejanje verzije poročila vsebuje marsikaj zanimivega, a nikjer ne deluje s FN in PN, pa tudi z osnovnimi nastavitvami deluje bolj za branje (le da počisti izbor, vrstni red, konvencije).

2. del

Delo z nastavitvami in FN prek njihove zbirke je skoraj vedno sprejemljivo, vendar je pomembno vedeti, da se bistvo "tretje ravni" spreminja. Na prvem nivoju so vedno privzete nastavitve samega sistema za nadzor dostopa, ki se implicitno pojavljajo tudi v viru razpoložljivih nastavitev; na drugem nivoju – nastavitve uporabljene opcije. Toda tukaj vam logika omogoča, da bodisi »prepišete« osnovna navodila ali jih prezrete. Toda delo s PN ne dopušča več svoboščin, subtilne manipulacije pa je treba izvajati s posebnimi metodami in včasih z začasnimi pomožnimi vmesnimi objekti, na primer:

Comp=NewDataCompositionSettingsComposer; // lahko tudi zaženete // comp.Initialize(SomeSettingsComposer.GetSourceofAvailableSettings()); comp.LoadSettings(SomeSettingsComposer.Settings); SomeSettingsComposer.LoadCustomSettings(comp.CustomSettings);

Graditelj nastavitev ima metodo (), ki naloži vrednosti uporabniških nastavitev, posredovane metodi kot parameter. Metoda GetSettings() vam omogoča, da dobite kopijo trenutnih nastavitev (ob upoštevanju uporabniških nastavitev). Metoda Nastavitve prenosa() naloži posredovane nastavitve v graditelj nastavitev (uporabniške nastavitve se prav tako ponovno poselijo na podlagi posredovanih podatkov, ob upoštevanju prisotnosti ključev, glejte spodnji primer).

Uporaba nastavitev po meri za glavne nastavitve se izvede v metodi GetSettings() graditelj nastavitev. Izvajajo se naslednja dejanja:

* Za tipe DataCompositionSelectionElement se vsebina elementov prekopira v ustrezne elemente nastavitev po meri.

* Za vrste izbire postavitve podatkov ostanejo elementi, ki se nahajajo v glavnih nastavitvah in so označeni kot nedostopni, nespremenjeni. Elementi iz PN se prenesejo v glavne. Dodani so na konec zbirke za izbor.

* Za tipe DataCompositionSelectionElementGroup je lastnost Usage nastavljena v ustreznem elementu glavnih nastavitev (glede na predznak uporabe elementa PN).

3. del

Pri oblikovanju končnih nastavitev, citirano ITS, se različne nastavitve združijo na naslednji način:

* Če je katera koli vrsta nastavitev v celoti označena kot po meri, potem nastale nastavitve vključujejo PN. V tem primeru, če so kateri koli elementi nastavitev označeni kot nerazpoložljivi, bodo te nastavitve postavljene v nastale nastavitve iz lastnosti Settings Composer.Settings.

* Če je katera koli vrsta nastavitev označena kot po meri, ne v celoti, ampak element za elementom, bodo elementi, označeni kot po meri, prevzeti v nastale nastavitve iz lastnosti Settings Composer.CustomSettings, elementi, označeni kot nerazpoložljivi, pa v nastale nastavitve iz Lastnosti Settings Composer.Settings.

* Fiksne nastavitve so dodane nastalim nastavitvam "kot so". V tem primeru je situacija nesprejemljiva, ko imata FN in PN nastavitve istega imena, na primer izbira z isto levo vrednostjo v pogoju. Ugotavljam, da je celo popolno sovpadanje vseh lastnosti teh pogojev prepovedano. Če sem iskren, je malo nelogično.

Rad bi opozoril, da če je kateri koli fragment nastavitev predmet funkcionalne možnosti in bi moral biti omejen, sistem deluje "tiho" - ta fragment odstrani od vsepovsod, ne poroča ničesar in med programskimi manipulacijami v zvezi s takšnim fragmentom , obdeluje napake v mirovanju. ne proizvaja, vendar tudi koda nima učinka. Vendar je možno, da se različne izdaje obnašajo drugače.

4. del.

Razširitev obrazca za poročila nam ponuja parametra »FN« in »PN«, vendar nikjer ni priporočljivo, da ju izpolnite neposredno s posredovanjem v obrazec. Kot so pokazali poskusi, je brez dodatnih plesov s tamburinom vsebina teh parametrov prezrta - prepisana je, ko je povezovalnik inicializiran med postopkom odpiranja in ko so prejeti predhodno shranjeni PN. Priporočljivo je delo s PN ključi, s katerimi jih lahko pridobite iz shrambe nastavitev in jih nato odprete in uporabite, in to avtomatsko na strani poročila in ne na klicnem obrazcu.

Parameter »Vir razpoložljivih nastavitev« se samodejno prevede v informacije graditelja, ko je obrazec ustvarjen na strežniku, in ga ni mogoče preglasiti. Oziroma lahko, vendar bo to učinkovalo šele po popolni redefiniciji celotne verige povezanih objektov. pri čemer GetSourceAvailableSettings() bo vrnil Nedefinirano do konca vseh dogodkov odpiranja obrazca.

Naj opozorim, da parametri forme, ki v bistvu niso ključni parametri, svoj učinek »raztegnejo« na več dogodkov, če je ob odpiranju postavljena zastavica formacije. Da, v primeru ProcessingCheckFillOnServer, ki se prikliče med odpiranjem in oblikovanjem, bo na voljo parameter “Selection”, vendar z njim, ki ga preprosto prikliče uporabnik s klikom na gumb “Generate”, ne bo več na voljo. To je posledica dejstva, da se vsi ti dogodki obdelajo v enem "obisku" strežnika, če je omogočeno oblikovanje ob odpiranju, in šele na samem koncu le-teh se nadzor prenese na odjemalca in kliče Ob odprtju. V tem primeru se neključni parametri seveda izgubijo.

Splošni vrstni red izvajanja dogodkov pri odpiranju obrazca z zastavico za ustvarjanje poročila ob odpiranju (nekoliko več kot je opisano v "Strokovnem razvoju"):

Ko je CreatedOnServer

Možnost pred nalaganjem na strežnik

Pri nalaganju na strežnik OptionOn

Pred nalaganjem uporabniških nastavitev na strežnik

Pri nalaganju uporabniških nastavitev na strežnik

Pri posodabljanju sestave uporabniških nastavitev na strežniku

ProcessingCheckFillOnServer

Ob odprtju

V tem primeru se niti opcija niti PN ne spremenita, razen če se posebej potrudite.

5. del.

Zdaj pa si podrobneje oglejmo nalogo odpiranja obrazca za poročilo z njegovo konstrukcijo in vnaprej določeno izbiro. Kratka informacija o tem so informacije na ITS in v metodološka priporočila, vendar je tam zajeto samo načelo in podrobnosti niso razkrite. Če želite kontekstualno poklicati poročilo, morate v njegov obrazec posredovati parameter »GenerateOnOpen«, ki je enak True; in izbirni parameter, ki vsebuje strukturo. Strukturni ključi so imena polj ACS ali parametrov ACS, vrednosti pa so njihove vrednosti. Če navajam SP, če obstaja parameter ACS z imenom, ki ustreza imenu strukturnega ključa, bo vrednost nastavljena nanj. Če parametra ni, obstaja pa polje, bo v to polje dodan izbor. Hkrati, če obstaja parameter in polje z istim imenom, ga bo sistem preprosto tiho ignoriral in ne bo namestil ničesar.

"Strokovni razvoj" je primer spreminjanja (tj. prestrezanja in ponovnega konfiguriranja) PN "na letenju" v dogodku Pred nalaganjem uporabniških nastavitev na strežnik, kjer je posredovan argument, ki vsebuje trenutni PN. Pravzaprav ni vedno tako - na primer, lahko pride do primerov, ko napaka pri shranjevanju PN v prejšnji seji ali nedoslednosti med nastavitvami, FN in PN povzročijo, da je argument »Nastavitve« prazen. In kar je najbolj zanimivo je, da ga v tem dogodku ne bo mogoče v celoti preoblikovati; to bo mogoče storiti šele »na koncu« zaporedja dogodkov, in sicer v dogodku ProcessingCheckFillOnServer.

Poglejmo, kaj imamo, preden naložimo PN na strežnik.

Za preprost primer, ko v ACS ni nič prednastavljeno in noben element ni vključen v PN, je situacija naslednja: Nastavitve – prazno; FN – vsebuje pravilno izbiro; Pon vsebuje prazen izbor. Oblikovanje deluje pravilno, vendar je z vidika uporabnika vmesnik v nasprotju z notranjostjo in odvrača - izbor deluje, vendar ni viden. Podobno, če v nastavitvah strukture možnosti omogočite Izbira v PN, se poročilo prav tako sestavi ob upoštevanju izbora, vendar uporabnik prav tako ne vidi nobenih izborov.

V nastavitvah ACS v konfiguratorju nastavimo predizbore (enake praznim vrednostim) in jih vključimo v PN. V teoriji bi morali FN-ji izpolniti Nastavitve, ti pa bi morali izpolniti PN, v resnici pa imamo: v Nastavitve - Izbira z zahtevanim elementom, a prazno desno vrednostjo, FN-ji vsebujejo pravilno izbiro in PN še vedno ne vsebujejo ničesar. Poleg tega v tem primeru poročilo ne bo zgrajeno, ker desna izbirna vrednost je prazna kljub vrednosti, posredovani v parametru Select.

Poskus dela z elementi PN tudi ne daje rezultatov. Pri elementu PN lahko spremenite samo zastavo »Uporabi« in sodelovanje v »Hitrem«. Izbirna vrednost na vmesniku bo prazna, sistem ne bo ustvaril nobenih napak. Podobno bo deloval tudi poskus dela z izbiro PN; v razhroščevalniku bo prava vrednost vidna kot pravilno izpolnjena, vendar na vmesniku ne boste videli ničesar. Naj vas spomnim, da je nemogoče spremeniti sestavo PN. Zato so potrebni dodatni triki. Na primer:

&Na strežniškem postopku SetPresetSelections(UserSettings) If not Parameters.Property("Selection") Then Return EndIf; If Parameters.Selection.Quantity()=0 Then Return EndIf; rTypeEO=Tip("Izbirni element sestave podatkov"); Za vsak ključ From Parameters.Selection Loop pField=NewDataCompositionField(key.Key); // If (ValueType(kiz.Value)=Type("Array") orValueType(kiz.Value)=Type("ValueList")) and kiz.Value.Quantity()>1 Then pViewComparison=DataCompositionComparisonType.InList; V nasprotnem primeru pComparisonType=DataCompositionComparisonType.Equals; endIf; // pNecessarySelection = Nedefinirano; // poglej, če je v uporabniških nastavitvah Selection pNecessaryEO=Undefined; // preverite, ali je v uporabniških nastavitvah ločen element izbire DataComposition Za vsak elnastr From UserSettings.Elements Cycle If TypeValue(elnastr) = Type("DataComposition Selection") in pNecessarySelection=Undefined Potem // obstaja lahko samo en pNecessarySelection= elnastr; // to bi lahko naredili zunaj zanke, vendar je treba zaradi elementov razvrstiti po uporabniških nastavitvah... V nasprotnem primeru, If TypeZnch(elnastr) = pTypeEO Then // to je izbirni element, lahko jih je veliko izmed njih, zanimajo pa nas tisti, ki niso inicializirani ali z zahtevanim poljem. If elstr.LeftValue=pField ali elstr.LeftValue=Undefined in rNeedEO=Undefined Then pNeedEO=elstr; endIf; endIf; EndCycle; // Če je pRequiredSelection<>Nedefinirano Potem // gre kot prioriteta pNecessaryEOFromSelection = Nedefinirano; Za vsak elotb From pNecessarySelection.Elements Cycle If elotb.LeftValue=pField Then pNecessaryEOfromSelection=eloteb; Prekini EndIf; EndCycle; If pNecessary EO from Selection = Undefined Then pNecessary EO from Selection = pNecessary Selection.Elements.Add(pType of EO); pNeedEOFromSelection.LeftValue=pField; endIf; pNecessaryEOfromSelection.ComparisonType=pComparisonType; pNecessaryEOFromSelection.RightValue=kiz.Value; pNecessaryEOFromSelection.Use=True; // rNeededEO.Use=False; OtherwiseIf pNecessarySelection=Nedefinirano in pNecessaryEO<>Nedefinirano Nato // vnesite element pNecessaryEO.LeftValue=pField; pNecessaryEO.ComparisonType=pComparisonType; pNeedEO.RightValue=kiz.Value; pNeedEO.Use=True; endIf; pPotreba=Nedefinirano; Za vsak elotb iz Report.ComposerSettings.Settings.Selection.Elements Loop // na prijateljski način bi moralo obstajati rekurzivno iskanje! If TypeValue(elotb)=pTypeEO in elotb.LeftValue=pField Then pNeed=elotb; Prekini EndIf; EndCycle; If pNeed = Undefined Then pNeed = Report.Settings Composer.Settings.Selection.Elements.Add(pEOType); pNeed.LeftValue=pMargin; endIf; pNecessary.ComparisonType=pComparisonType; pNeed.RightValue=kiz.Value; pNeed.Use=True; //Končni cikel; Report.Settings Composer.FixedSettings.Selection.Items.Clear(); // drugače bo pisalo, da se elementi sekajo/kontradiktirajo Konec postopka

Najbolj pravilen način za klic je:

&Na strežniškem postopku Obdelava Izpolnjevanje preverjanj na strežniku (napaka, preverjene podrobnosti) Nastavite vnaprej določene izbire (Poročilo. Povezovalnik nastavitev. Uporabniške nastavitve); Konec postopka

Nato bo kontekstni klic, na primer iz obrazca imenika, videti takole:

&OnClient Procedure OpenReport(Command) If ValueFilled(Object.Link) Then ot=New Structure("LinkToDirectory",Object.Link); // tako je poimenovano polje v poročilu SDS Form Parameters = New Structure ("Selection, GenerateWhen Opening", select, True); OpenForm("Poročilo.Poročilo1.Obrazec.Obrazec za poročilo",Parametri obrazca,Taobrazec); endIf; Konec postopka

6. del.

Po potrebi spremenite nastavitve poročila med delom z njim, vklj. tako ob zagonu kot po odprtju je najbolj pravilna menjava “od začetka”, tj. iz nastavitev ACS. Spreminjanje sheme ACS se izvede samo z objektom Poročilo (ali Zunanjim poročilom), ne pa s podatki obrazca in samo po sebi ne spremeni ničesar - v nastavitvah in v PN ostane enako, kot je bilo, FN pa lahko ostane prazno. Zato glede na naše naloge:

Po usmrtitvi

Report.Settings Composer.LoadSettings(SKD.DefaultSettings)

Spremeni se le možnost in nič več;

Po izvedbi tehnike iz odstavka 2 (z uporabo "posrednika" in metode Naloži nastavitve po meri()

deluje le, če ponastavite trenutni PN z vmesnikom. Sami po sebi, če se možnost spremeni, se ne bodo spremenili. V tem primeru se izbor spremeni, vendar se ne doda nov element izbora.

Po usmrtitvi

ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.All)

platforma samo tiho pade. Preizkušeno na več različnih izdajah. In klicanje načina za prikaz nastavitev samo za hitre ni smiselno - na njihovo sestavo nismo vplivali, tako da se tako ali tako nič ne spremeni.

In ker moramo še vedno v celoti spremeniti ne le notranje izbire, ampak tudi prikaz na obrazcu za poročilo in v povezanih obrazcih, moramo spremeniti samo izbor ali pa postopati na naslednji način:

&Na strežniškem postopku ChangeSKD() pObject = Form AttributesValue("Poročilo"); izbor=pObject.DataCompositionScheme.SettingsOptions.Get(0).Settings.Selection; eo = selection.Elements.Add(Type("DataCompositionSelectionElement")); eo.LeftValue=NewDataCompositionField("LinkToDirectory.Field1"); eo.ComparisonType=DataCompositionComparisonType.Equals; eo.RightValue=True; eo.Use=True; ValueВFormAttributes(pObject,"Poročilo"); Report.SettingsLitter.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.Restore(); // zaželeno, čeprav to še vedno ne vpliva na FN. // pravzaprav je to točno tisto, kar lahko imenujemo sprememba v sestavi PN Za vsako e-pošto From Report.ComponentSettings.Settings.Selection.Elements Cycle email.DisplayMode=ElementDisplayModeDataCompositionSettings.QuickAccess; If EmptyString(el.UserSettingsIdentifier) ​​​​Then // lahko uporabite metodo electronicSetIdentifier za element PN, glejte njeno pomoč v SP, tam je vse povsem jasno e.UserSettingsIdentifier="ID123"; // pomembno - identifikator je lahko KATERIKOLI, ne UUID ali GUID! el.ViewUserSettings="Test"; endIf; EndCycle; comp=NewDataCompositionSettingsComposer; comp.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.LoadCustomSettings(comp.CustomSettings); Za vsako e-pošto From Report.Settings Composer.CustomSettings.Elements Cycle email.DisplayMode=ItemDisplayModeDataLayoutSettings.QuickAccess; // potegni EndCycle na obrazec za poročilo; // in zdaj bo to imelo učinek: ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.QuickAccess); Konec postopka

Pravzaprav lahko to mehaniko preučujete dolgo časa. Ta publikacija je nastala iz preučevanja načinov reševanja določenega problema in je zato precej enostranska; vendar sumim, da je mogoče napisati ločeno knjigo o notranji logiki nastavitev, zlasti uporabniških, nič bolj subtilnih od Khrstaleva. Na žalost nimam ne energije ne časa za to. Komur se zdi določen razvoj koristen, je že dober.

Nekatere stvari so bile eksperimentalno pojasnjene in so zato sporne. Tisti, ki vedo več, vabljeni h kritiki in komentarju.