1c postavite standardne postavke obrasca. Odabiri u izvješćima. Nijanse graditelja postavki. Postavljanje obrazaca i rad s listama

Podsustav u 1C 8.3— objekt stabla metapodataka koji je odgovoran za izgradnju sučelja konfiguracijskih naredbi.

U nastavku članka govorit ćemo o podsustavima počevši od verzije 8.2.

Činjenica je da je verzija 8.1 (kao i obična aplikacija 8.2) također imala podsustave, ali oni su služili u potpuno druge svrhe, više za programera nego za korisnika. Korištenjem podsustava u 8.1, različite su funkcionalnosti obično bile odvojene. Podsustavi su također pomogli pri kombiniranju različitih 1C konfiguracija - bilo je moguće odrediti koji sustav prenijeti.

1C podsustavi i sučelje programera

U verzijama 8.3 i 8.2 podsustavi su glavni alat za izgradnju naredbenog korisničkog sučelja. Objekti metapodataka podsustava imaju hijerarhijska struktura Da biste konfigurirali "podizbornik" u sučelju, morate dodati podređeni podsustav:

Svojstva i postavke

Pogledajmo postavke i svojstva podsustava u konfiguratoru:

Besplatno nabavite 267 video lekcija o 1C:

Uključi u naredbeno sučelje— ako ste zaboravili postaviti ovu zastavicu, podsustav neće biti prikazan u sučelju.

Gumb otvara ploču postavki sučelja, gdje možete konfigurirati sučelja ovisno o ulozi trenutnog korisnika:

Slika— slika dodijeljena podsustavu prikazuje se u poslovnom načinu rada. Možete odabrati standardnu ​​sliku ili možete dodati vlastitu tako da je prvo izradite kao konfiguracijski objekt Slika:

Na kartici Funkcionalne mogućnosti označava popis funkcionalnih opcija u kojima se ovaj podsustav koristi.

tab Spoj definira skup objekata metapodataka koji sudjeluju u danom podsustavu.

Na kartici ostalo možete opisati pomoć za podsustav i odrediti postavke Uključi u sadržaj pomoći— treba li ovaj odjeljak pomoći uključiti u opći popratne informacije po konfiguraciji.

Ako ne vidite izvješće ili obradu u upravljanom sučelju

Ovaj se problem vrlo često pojavljuje među programerima početnicima - čini se da je izvješće ili obrada dodana u podsustav, ali nije vidljiva.

Prvi razlog za to može biti da objekt nema definiranu kontroliranu formu.

Drugi razlog je taj što je na kartici Naredbe objekta odabran potvrdni okvir "Koristi standardne naredbe". To je zbog činjenice da se za otvorenu obradu može opisati vlastiti postupak ili se može koristiti standardni:

Članak nastavlja seriju "Prvi koraci u razvoju 1C."

U konfiguraciji na platformi 1C:Enterprise, pri prikazu informacija najčešće se koriste tablice koje prikazuju razne popise informacija. Rad s takvim listama može se odvijati iu obliku liste iu obliku elementa (obrada).

U ovom članku ćemo se upoznati s ovim opcijama za prilagodbu popisa, a također ćemo pogledati i druge značajke prilagodbe obrazaca sa strane korisnika.

Primjenjivost

U članku se govori o upravljanom sučelju u verziji konfiguracije "Verzija 8.2" razvijenoj na platformi 1C 8.3.4.482.

Ako radite s konfiguracijama koje podržavaju ovo sučelje, tada su informacije relevantne za vas i trenutne verzije platforme.

Ako radite u novom Taxi sučelju, nazivi nekih konfiguracijskih naredbi, kao i opći slijed radnji, mogu biti malo drugačiji.

Osim toga, trenutna verzija platforme dodala je nove mogućnosti pretraživanja na popisima.

Postavljanje obrazaca i rad s listama

Za upravljane elemente obrasca moguće je promijeniti vidljivost i neka druga svojstva. Za ove namjene u u upravljivom obliku na jelovniku Sve akcije služi kao stavka Promjena forme.

Nakon klika na ovu naredbu pojavit će se prozor "Postavke obrasca".

U prozoru koji se pojavi možete koristiti potvrdne okvire za promjenu vidljivosti nekih detalja. U tom slučaju, obrazac se automatski skalira.

Možete promijeniti redoslijed detalja. Dodajte novu grupu i u nju postavite neke detalje (elemente), definirajući mogućnost njihovog grupiranja (horizontalno, okomito).

Detalji uključeni u grupu bit će objavljeni u skladu s tim. Osim toga, možete konfigurirati svojstva kao što su širina, visina i podaci zaglavlja za elemente.

Možete definirati atribute koji će se aktivirati kada se obrazac otvori.

Važna značajka je mogućnost dodavanja novih polja obrascu. To postaje moguće kroz atribute tipa reference.

Na primjer, imati atribut tipa reference na obrascu Protustranka, može dodati Kontakt osoba, Ako ovaj podupirač nalazi se u imeniku “Druge strane”.

Ako je potrebno, dodatna polja se mogu ukloniti. Polja kreirana u konfiguratoru nije moguće brisati. Sve postavke koje je napravio korisnik se spremaju.

Za povratak na standardne postavke u prozoru Form Settings u izborniku Sve akcije trebali biste odabrati stavku Instalirati standardne postavke .

Osim prilagodbe obrazaca u upravljanom sučelju, moguće je prilagodba popisa (elemenata imenika, dokumenata).

U obliku liste u izborniku Sve akcije sadrži posebnu naredbu Prilagodite popis.

Otvorit će se prozor "Postavke popisa". U ovom prozoru možete odabrati, sortirati, definirati uvjetno oblikovanje i grupiranje.

Na slici je prikazan obrazac za uređivanje odabira.

Odabir se može izvršiti pomoću nekoliko polja. U ovom slučaju, prema zadanim postavkama odabir će raditi prema uvjetu I. Također možete koristiti uvjete ILI i NE.

Za korištenje uvjeta ILI (NE), morate dodati odgovarajuću grupu (OR grupa, NOT grupa) pomoću naredbe Uvjeti grupe.

Na slici je prikazan obrazac za definiranje polja sortiranja.

Grupiranje se može konfigurirati. Na slici je odabrano polje za grupiranje Protustranka.

Sljedeća slika prikazuje kako će se izvršiti grupiranje.

Popis možete slobodno obojiti ili primijeniti druge elemente uvjetnog dizajna (odabir fonta, specifično oblikovanje) prema zadanom uvjetu, kao i odabrati popis polja za oblikovanje.

Na slici je prikazan rezultat uvjetnog projektiranja pozadine polja Iznos.
Kada je iznos > 100.000.

Treba napomenuti da je moguće pregledavati direktorije u hijerarhijskom načinu rada.

Hijerarhijski pregled imenika može se konfigurirati putem stavke Način prikaza na jelovniku Sve akcije. Možete odabrati jednu od opcija: Hijerarhijska lista, Popis, Drvo.

Također je moguće konfigurirati vlastito grupiranje elemenata imenika prema određenim detaljima.

Na primjer, možete grupirati stavke prema dobavljaču. Primjer je sličan onom gdje smo gledali grupiranje dokumenata "Prodaja roba i usluga" po ugovornim stranama.

Zgodna značajka je višestruki odabir na popisima i naknadno izvršenje grupnih radnji (objava, otkazivanje, brisanje brisanja).

Objekti na listi se biraju pritiskom na tipku Shift ili Ctrl.

Traženje određene vrijednosti na popisu ima svoje karakteristike. Pretraga radi u načinu odabira. Ostaju samo oni redovi koji zadovoljavaju uvjet pretraživanja.

Za pretraživanje prema vrijednosti u trenutnom stupcu, samo postavite kursor na željeni stupac i kliknite na gumb Pronaći u komandnoj ploči. Pojavit će se prozor u kojem također trebate kliknuti na gumb Pronaći.

Da bi vaše pretraživanje bilo preciznije, možete upotrijebiti potvrdni okvir Traži u pronađeno.

Kada tražite red podataka referentne vrste (na primjer, mjerne jedinice), trebate odabrati odgovarajuću opciju pretraživanja ...(po redu).

Ovo završava s popisima i načinima za njihovo konfiguriranje. U sljedećem članku nastavit ćemo se upoznavati sa sučeljem i pogledati zgodan alat za informiranje korisnika, o kojem dosad nismo govorili. Kakav je ovo instrument? :)

Vjerujem da nema potrebe govoriti vam što je sustav kontrole pristupa, sastavljač postavki i, općenito, cijeli skup objekata dizajniranih za rad sa sustavom kontrole pristupa. Glavna područja korištenja, ne računajući lukave radnje u kodu, su dinamički popisi i izvješća, au oba slučaja vrlo značajna funkcionalnost ostaje iza scene. Često niti ne razmišljamo o logici ponašanja i odnosa svih sudionika u procesu, jer Obično rješavamo prilično jednostavne probleme ili se oslanjamo na zadane postavke platforme. Ali gdje ima šutnje, tu je i unutarnja logika, svojevrsna “medvjeđa usluga” 1C-a čije je plodove ponekad teško i neočito prevladati kako bi se postigao željeni učinak, a pritom je dovoljno samo ispravno koristiti alate.

Zainteresirani mogu preskočiti dijelove 1-4 i odmah prijeći na primjere.

Pokušat ću se malo detaljnije zadržati na radu ACS odabira za slučaj njihove upotrebe u izvješćima. Mislim da je ponašanje u dinamičke liste, uz brojne rezerve, bit će blizu. Dakle, odabiri u izvješćima, malo teorije pa konkretni primjeri.

Koriste se SP 8.3.6 i noviji, odjeljci ITS-a (klauzula 10.3.7.5, itd.), knjiga „Profesionalni razvoj u sustavu 1C-Enterprise 8” (Kazan, 2012, drugi svezak). U knjizi E. Khrustaleva uopće nije bilo ničeg razumljivog o ovoj temi.

1. dio

Alat za izradu postavki, kao što znate, ima zbirke “Postavke”, “Fiksne postavke” (u daljnjem tekstu “FN”) i “Prilagođene postavke” (u daljnjem tekstu “CU”). Izvješće može imati nekoliko opcija, a veze između opcije, N, PN i FN vrlo su jedinstvene. Također, ne zaboravimo na izvor dostupne postavke, i njegov "predak", koji je obično sam sklop, koji također ima vlastite zadane postavke.

* Postavke – postavke kreirane u načinu rada konfiguratora i promijenjene u načinu rada za uređivanje verzije izvješća;

* UserSettings – postavke koje korisnik mijenja u načinu rada "1C:Enterprise" isključivo kroz sučelje;

* FixedSettings – one postavke koje su postavljene iz ugrađenog jezika, uklj. su implicitno postavljeni od strane sustava. Ovo svojstvo sadrži vrijednosti odabira koje se prenose u obrazac pomoću njegovih parametara (struktura "Odabir").

Postavke i FN-ovi sličnog su dizajna i imaju zbirku "Odabir" tipa "Odabir sastava podataka", dostupnu za promjenu sastava u bilo kojem trenutku tijekom postojanja izvješća. U isto vrijeme, Postavke su dostupne za promjene sučelja kroz uređivanje varijante, ali FN-ovi nisu uopće dostupni. PN je, pak, "kaša", gdje jednaki elementi mogu biti i sam "Odabir" i pojedinačni objekti tipa "Element odabira sastava podataka" (tzv. ugniježđeni objekt). Unatoč dostupnosti odgovarajućih metoda, nemoguće je programski promijeniti sastav zbirke PN elemenata ako su to PN-ovi samog izvješća, a ne napravljeni „od nule“ od strane dizajnera - 1C će izvijestiti da je „Zbirka korisnika postavke ne mogu promijeniti njegov sastav, budući da je povezan s podacima o postavkama izgleda." ITS kaže: "Svojstvo nije moguće pisati pomoću ugrađenog jezika", ali, kao što ćemo vidjeti kasnije, moguće je utjecati na PN. “Kaša” predmeta ima interne komunikacije– provjerava se konzistentnost uvjeta prilikom generiranja izvješća, te prilikom promjene sastava. Na ITS-u čitamo: “Elementi koji su sami označeni kao prilagođeni neće biti dodani. Na primjer, prilagođeni odabir neće uključivati ​​element odabira koji je označen kao prilagođeni. Elementi koji sadrže prilagođene elemente neće biti dodani. Na primjer, grupa uvjeta neće biti dodana ako grupa sadrži elemente označene kao prilagođeni. Za ugniježđene elemente, svojstvo DisplayMode se ne analizira. Dodaju se ili ne dodaju zajedno s nadređeni elementi." Dakle, "seniornost" objekata djeluje iza kulisa. U ovom slučaju možete postići učinak kada vam sučelje dopušta da odredite kontradiktorne odabire za varijantu i njen PN, kao i unutar PN.

Čini se da je "senior" opcija. Ali klik na “Više” / “Promijeni opciju” i potvrda promjena u otvorenom obrascu poziva obrasca za obradu događaja , u ovom slučaju, odabir se pojavljuje na ploči "Osnovno" na obrascu pozvanom iz "Postavke..." i pojavljuje se na obrascu izvješća, ali NIJE prikazan na kartici "Odabir"; Štoviše, ili se pojavljuje odmah i na glavnom obrascu izvješća i na obrascu "Postavke..." (ako postoji oznaka "Uključi u korisničke postavke"), ili ni tamo ni tamo. Ali u svakom slučaju, NEĆE biti na kartici “Odabir” forme “Postavke...”. Razlika između kartice "Osnovno", obrasca "Postavke..." i glavnog obrasca izvješća određena je poljem "Način uređivanja" (normalno - samo u "Postavkama", brzo - i na samom obrascu izvješća), ali mislim da to svi znaju. Usput, vrijednosti "Odabir" i "Brzo" nisu sinkronizirane ni na koji način i mogu proturječiti jedna drugoj, ali "Brzo" na obrascu izvješća i obrascu postavki strogo su sinkroni. Dakle, kada uredite varijantu, ona sama postaje promijenjena (ali njen ID i naziv se ne mijenjaju), ali PN-ovi ostaju NE promijenjeni (tj. čak i ako govorimo o njima, tj. o zastavici za uključivanje ovog ili onog element u PN ).

Klikom na “Select option...” i potvrdom promjena u obrascu koji se otvori pokreću se događaji sljedećim redoslijedom:

Prilikom učitavanja OptionOn poslužitelja

Prilikom ažuriranja sastava korisničkih postavki na poslužitelju

U tom slučaju ni opcija ni PN se ni na koji način ne mijenjaju. Odavde je jasno da opcija i postavke, ako su povezane, nipošto nisu izravno povezane.

Klikom na "Postavke..." i potvrdom promjena u otvorenom obrascu samo se pokreće događaj Prilikom ažuriranja sastava korisničkih postavki na poslužitelju(u ovom slučaju, PN-ovi se mijenjaju, ali pogledi i ključ (ako ih nema) nisu primljeni; ako je omogućeno "Brzo" za elemente objekta "Odabir" PN-a, tada uz "Odabir", njegovi se stvarni elementi pojavljuju kao polja, tj. . ponaša se slično ugniježđenim elementima. Ove se postavke spremaju pri zatvaranju i vraćaju sljedeći put kad uđete u obrazac. Ne dodiruje niti mijenja opciju.

Klikom na "Više"/"Postavi standardne postavke" u obrascu postavki (kao i na stavku "Standardne postavke" u opciji edit) samo se pokreće događaj Prilikom ažuriranja sastava korisničkih postavki na poslužitelju. U ovom slučaju, opcija postaje promijenjena, ali se mijenja PN. Ako je opcija prije promijenjena, ostaje promijenjena (niti se promijenjena zastavica poništava, niti se poništavaju stvarne postavke).

Klikom na "Svojstva elementa prilagođenih postavki" u strukturnom stablu na obrascu za uređivanje varijanti dodaje se objekt "Odabir", a on ispada prazan i ni na koji način nije sinkroniziran s postojećim odabirom varijante i postojećim ugniježđenim elementima odabira. varijanta se ni na koji način ne mijenja.

Stoga preporuka: ako trebate postaviti određene odabire u načinu rada "Konfigurator", kako ne biste petljali s kodom i kako ne bi bili u opciji, već bi bili u sučelju izvješća, ne biste trebali manipulirati odabirom elemente opcije, mijenjajući njihova svojstva, ali i sam odabir, koristeći gumbe "Svojstva elementa..." i "Prilagođene postavke".

Dodavanje nečega što se pojavljuje u postavkama u PN zahtijeva radnje u kodu ili sučelju, ali brisanje i brisanje postavki utječe na PN odmah i bez ikakvih ažuriranja, na primjer:

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

Prije zatvaranja obrasca za prijavu sustav samo pita da li je došlo do promjena na varijanti. Ukoliko je bilo promjena u PN-u, one će se automatski spremiti bez ikakvih pitanja, te će se također automatski pokušati primijeniti u sljedećoj sesiji rada s izvješćem.

Bilješke:

U slučaju većeg broja grešaka u primjeni postavki, prvo se prikaže poruka o problemu, a zatim još uvijek dolazi do sastava, događaj se naziva i generiranje izvješća. U ovom slučaju, FN-ovi, čak i ako postoje, i dalje se zanemaruju, a samo Postavke igraju ulogu.

Prilikom dodavanja odabira na obrascu “Promijeni opciju”, to se radi odmah s postavljenom zastavom “Uključi u PN”, ali ponavljam, sa stajališta ugrađenog jezika, PN ostaju nepromijenjeni.

Postavljanje varijante varijante i postavljanje varijacije PN nisu izravno povezani, to su dva različita smjera promjena.

PN između ostalog ima i “Dodatne postavke”. Nikada nisam mogao shvatiti čime se i u kojem trenutku pune. Iako izvješće sadrži postavke "označene u odabiru i uvjetnom dizajnu" kao prilagođene (prema zajedničkom ulaganju), ali dodatne postavke u svim su slučajevima bile prazne. Nema ništa o ovome na ITS-u.

Unatoč izjavi u joint venture, PN-ovi su savršeno serijalizirani u xml.

Ako su i neovisni elementi odabira i sam odabir uključeni za korištenje, izvješće je ispravno sastavljeno, ali kada se prikaže, duplicira informacije o uspostavljenom odabiru u konačnom izgledu.

Zadana forma za editiranje verzije izvješća sadrži puno zanimljivosti, ali nigdje ne radi s FN i PN, a i s osnovnim postavkama radi više za čitanje (osim što briše odabir, redoslijed, konvencije).

2. dio

Rad s postavkama i FN-om kroz njihovu zbirku gotovo je uvijek prihvatljiv, ali važno je zapamtiti da se bit "treće razine" mijenja. Prva razina uvijek sadrži zadane postavke samog sustava kontrole pristupa, one se implicitno pojavljuju u izvoru dostupnih postavki; na drugoj razini – postavke korištene opcije. Ali ovdje vam logika dopušta da ili "prebrišete" temeljne upute ili ih zanemarite. Ali rad s PN više ne dopušta slobode, a suptilne manipulacije moraju se izvoditi pomoću posebnih metoda, a ponekad i privremenih pomoćnih posredničkih objekata, na primjer:

Comp=NewDataCompositionSettingsComposer; // također možete pokrenuti // comp.Initialize(SomeSettingsComposer.GetSourceofAvailableSettings()); comp.LoadSettings(SomeSettingsComposer.Settings); SomeSettingsComposer.LoadCustomSettings(comp.CustomSettings);

Alat za izradu postavki ima metodu (), koji učitava vrijednosti korisničkih postavki proslijeđenih kao parametar metodi. metoda GetSettings() omogućuje vam da dobijete kopiju trenutnih postavki (uzimajući u obzir korisničke postavke). metoda Postavke preuzimanja() učitava proslijeđene postavke u alat za izradu postavki (korisničke postavke također se ponovno popunjavaju na temelju proslijeđenih podataka, uzimajući u obzir prisutnost ključeva, pogledajte primjer u nastavku).

Primjena prilagođenih postavki na glavne postavke vrši se u metodi GetSettings() alat za izradu postavki. Izvode se sljedeće radnje:

* Za tipove DataCompositionSelectionElement, sadržaj elemenata se kopira u odgovarajuće elemente prilagođenih postavki.

* Za vrste odabira izgleda podataka, elementi koji se nalaze u glavnim postavkama i označeni kao nedostupni ostaju nepromijenjeni. Elementi iz PN prenose se u glavne. Dodaju se na kraj zbirke za odabir.

* Za tipove DataCompositionSelectionElementGroup svojstvo Usage postavljeno je u odgovarajućem elementu glavnih postavki (na temelju predznaka korištenja PN elementa).

dio 3

Prilikom formiranja konačnih postavki, da citiram ITS, različite postavke se kombiniraju na sljedeći način:

* Ako je bilo koja vrsta postavki u potpunosti označena kao prilagođena, tada rezultirajuće postavke uključuju PN. U tom slučaju, ako su neki elementi postavki označeni kao nedostupni, tada će te postavke biti smještene u rezultirajuće postavke iz svojstva Settings Composer.Settings.

* Ako je bilo koja vrsta postavki označena kao prilagođena, ne u potpunosti, već element po element, tada će elementi označeni kao prilagođeni biti uključeni u rezultirajuće postavke iz svojstva Settings Composer.CustomSettings, a elementi označeni kao nedostupni bit će uzeti u rezultirajuće postavke iz Settings Composer.Settings svojstvo.

* Fiksne postavke dodaju se dobivenim postavkama "kao što jesu". Istodobno, neprihvatljivo je da FN i PN imaju postavke istog imena, na primjer, odabir s istom lijevom vrijednošću u uvjetu. Napominjem da je čak i potpuna slučajnost svih svojstava ovih uvjeta zabranjena. Iskreno rečeno, malo je nelogično.

Napominjem da ako bilo koji fragment postavki potpada pod djelovanje funkcionalne opcije i mora biti ograničen, sustav radi "tiho" - uklanja taj fragment posvuda, ne prijavljuje ništa, a tijekom programskih manipulacija u vezi s takvim fragmentom , obrađuje greške u mirovanju. Ne daje nikakve rezultate, ali ni kod nema učinka. Međutim, moguće je da se različita izdanja ponašaju drugačije.

dio 4.

Proširenje obrasca za izvješće daje nam parametre "FN" i "PN", ali nigdje se ne preporučuje njihovo izravno ispunjavanje prosljeđivanjem u obrazac. Kao što su eksperimenti pokazali, bez dodatnih plesova s ​​tamburinom, sadržaj ovih parametara se zanemaruje - prepisuje se kada se linker inicijalizira tijekom procesa otvaranja i kada se prime prethodno spremljeni PN-ovi. Preporuča se rad s PN ključevima, pomoću kojih ih možete dohvatiti iz pohrane postavki te ih otvoriti i koristiti, a to se radi automatski na strani obrasca za prijavu, a ne na obrascu za pozivanje.

Parametar "Izvor dostupnih postavki" automatski se prevodi u informacije graditelja prilikom kreiranja obrasca na poslužitelju i ne može se nadjačati. Odnosno, može, ali to će imati efekta tek nakon potpunog redefiniranja cijelog lanca povezanih objekata. pri čemu GetSourceAvailableSettings() vratit će Nedefinirano do kraja svih događaja otvaranja obrazaca.

Napominjem da parametri obrasca, koji u suštini nisu ključni parametri, "rastežu" svoje djelovanje na nekoliko događaja ako je zastavica formacije postavljena prilikom otvaranja. Da, u slučaju ProcessingCheckFillOnServer, koji se poziva tijekom otvaranja i formiranja, parametar “Odabir” će biti dostupan, ali s njim, ali pozvan jednostavnim klikom na gumb “Generiraj”, više neće biti dostupan. To je zbog činjenice da se svi ovi događaji obrađuju u jednom “posjetu” serveru, ako je omogućeno formiranje pri otvaranju, a tek na samom kraju kontrola se prenosi na klijenta i poziva Prilikom otvaranja. U ovom slučaju, ne-ključni parametri se prirodno gube.

Opći redoslijed izvršavanja događaja prilikom otvaranja obrasca s oznakom za generiranje izvješća pri otvaranju (malo više od opisanog u “Profesionalno usavršavanje”):

Kada se kreira na poslužitelju

Prije učitavanja opcija na poslužitelj

Prilikom učitavanja OptionOn poslužitelja

Prije učitavanja korisničkih postavki na poslužitelj

Prilikom učitavanja korisničkih postavki na poslužitelj

Prilikom ažuriranja sastava korisničkih postavki na poslužitelju

ProcessingCheckFillOnServer

Prilikom otvaranja

U ovom slučaju, ni opcija ni PN se ne mijenjaju osim ako nisu uloženi posebni napori.

dio 5.

Sada pogledajmo detaljnije zadatak otvaranja obrasca izvješća s njegovom konstrukcijom i unaprijed određenim odabirom. Kratke informacije o tome ima informacija na ITS-u i in metodološke preporuke, ali tamo je pokriven samo sam princip, a suptilnosti se ne otkrivaju. Dakle, da biste kontekstualno pozvali izvješće, morate proslijediti parametar "GenerateOnOpen" u njegov obrazac, jednak True; i parametar Odabir koji sadrži strukturu. Ključevi strukture su imena ACS polja ili ACS parametara, a vrijednosti su njihove vrijednosti. Citirajući SP, ako postoji ACS parametar s nazivom koji odgovara nazivu ključa strukture, tada će vrijednost biti postavljena na njega. Ako nema parametra, ali postoji polje, odabir će biti dodan u ovo polje. U isto vrijeme, ako postoji parametar i polje istog imena, tada će ga sustav jednostavno tiho ignorirati i neće ništa instalirati.

"Profesionalni razvoj" daje primjer mijenjanja (tj. presretanja i rekonfiguriranja) PN "u hodu" u događaju Prije učitavanja korisničkih postavki na poslužitelj, gdje se prosljeđuje argument koji sadrži trenutni PN. Zapravo, to nije uvijek slučaj - na primjer, mogu postojati slučajevi u kojima će pogreška u spremanju PN-a u prethodnoj sesiji ili nedosljednosti između postavki, FN-a i PN-a dovesti do toga da argument "Postavke" bude prazan. I ono što je najzanimljivije je da ga u ovom događaju neće biti moguće u potpunosti rekonfigurirati; to se može učiniti samo "na kraju" niza događaja, naime, u događaju ProcessingCheckFillOnServer.

Pogledajmo što imamo prije učitavanja PN-a na poslužitelj.

Za jednostavan slučaj, kada ništa nije unaprijed postavljeno u ACS-u i nijedan element nije uključen u PN, situacija je sljedeća: Postavke – prazno; FN – sadrži točan odabir; Mon sadrži prazan odabir. Oblikovanje radi ispravno, ali s korisnikove točke gledišta sučelje je u suprotnosti s unutarnjim i obeshrabrujuće - odabir radi, ali nije vidljiv. Slično, ako omogućite odabir u PN-u u postavkama strukture opcija, izvješće se također gradi uzimajući u obzir odabir, ali korisnik također ne vidi nikakve odabire.

Postavimo predizbore (jednake praznim vrijednostima) u postavkama ACS-a u konfiguratoru i uključimo ih u PN. U teoriji, FN-ovi bi trebali ispunjavati Postavke, a oni bi trebali ispunjavati PN, ali u stvarnosti imamo: u Postavkama - Odabir sa traženim elementom, ali praznom desnom vrijednošću, FN-ovi sadrže točan odabir, a PN još uvijek ne sadrže ništa. Osim toga, u ovom slučaju izvješće neće biti izgrađeno, jer vrijednost desnog odabira je prazna, unatoč vrijednosti proslijeđenoj u parametru Select.

Pokušaj rada s PN elementima također ne daje rezultate. Za PN element možete promijeniti samo oznaku "Upotreba" i sudjelovanje u "Brzom". Vrijednost odabira na sučelju bit će prazna, sustav neće generirati nikakve pogreške. Slično će funkcionirati i pokušaj rada s PN odabirom; u programu za ispravljanje pogrešaka bit će vidljiva prava vrijednost kao ispravno ispunjena, ali nećete vidjeti ništa na sučelju. Podsjećam da je sastav PN nemoguće promijeniti. Stoga su potrebni dodatni trikovi. Na primjer:

&Na proceduri poslužitelja SetPresetSelections(UserSettings) If not Parameters.Property("Selection") Then Return EndIf; If Parameters.Selection.Quantity()=0 Then Return EndIf; rTypeEO=Tip("Element odabira sastava podataka"); Za svaki ključ Iz 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; Inače pComparisonType=DataCompositionComparisonType.Equals; završi ako; // pNecessarySelection = Nedefinirano; // vidjeti postoji li Selection u korisničkim postavkama pNecessaryEO=Undefined; // pogledajte postoji li zaseban element odabira sastava podataka u korisničkim postavkama za svaki elnastr iz ciklusa UserSettings.Elements If TypeValue(elnastr) = Type("DataComposition Selection") i pNecessarySelection=Undefined Then // može postojati samo jedan pNecessarySelection= elnastr; // ovo se može učiniti izvan petlje, ali je potrebno sortirati korisničke postavke radi elemenata... Inače, If TypeZnch(elnastr) = pTypeEO Then // ovo je element odabira, može ih biti mnogo od njih, ali nas zanimaju oni koji nisu inicijalizirani ili sa obaveznim poljem If elstr.LeftValue=pField ili elstr.LeftValue=Undefined and rNeedEO=Undefined Then pNeedEO=elstr; završi ako; završi ako; EndCycle; // Ako je pRequiredSelection<>Nedefinirano Onda // ide kao prioritet pNecessaryEOFromSelection = Nedefinirano; Za svaki elotb From pNecessarySelection.Elements Cycle If elotb.LeftValue=pField Then pNecessaryEOfromSelection=eloteb; Prekid EndIf; EndCycle; If pNecessary EO from Selection = Undefined Then pNecessary EO from Selection = pNecessary Selection.Elements.Add(pType of EO); pNeedEOFromSelection.LeftValue=pField; završi ako; pNecessaryEOfromSelection.ComparisonType=pTipusporedbe; pNecessaryEOFromSelection.RightValue=kiz.Value; pNecessaryEOFromSelection.Use=True; // rNeededEO.Use=False; OtherwiseIf pNecessarySelection=Nedefinirano i pNecessaryEO<>Nedefinirano Zatim // stavite element pNecessaryEO.LeftValue=pField; pNecessaryEO.ComparisonType=pTipusporedbe; pNeedEO.RightValue=kiz.Value; pNeedEO.Use=Istina; završi ako; pPotreba=Nedefinirano; Za svaki elotb iz Report.ComposerSettings.Settings.Selection.Elements Loop // na prijateljski način, trebalo bi postojati rekurzivno pretraživanje! If TypeValue(elotb)=pTypeEO and elotb.LeftValue=pField Then pNeed=elotb; Prekid EndIf; EndCycle; If pNeed = Undefined Then pNeed = Report.Settings Composer.Settings.Selection.Elements.Add(pEOType); pNeed.LeftValue=pMargin; završi ako; pNecessary.ComparisonType=pTipusporedbe; pNeed.RightValue=kiz.Value; pNeed.Use=Istina; //Kraj ciklusa; Report.Settings Composer.FixedSettings.Selection.Items.Clear(); // inače će reći da se elementi sijeku/suprotstavljaju Kraj procedure

Najispravniji način da ovo pozovete je:

&Na poslužitelju Postupak obrade Ispunjavanje provjera na poslužitelju (Greška, Provjereni detalji) Postavite unaprijed definirane odabire (Izvješće. Povezivač postavki. Korisničke postavke); Kraj postupka

Tada će kontekstni poziv, na primjer, iz obrasca imenika, izgledati ovako:

&OnClient Procedure OpenReport(Command) If ValueFilled(Object.Link) Then ot=New Structure("LinkToDirectory",Object.Link); // ovako je polje nazvano u SDS izvješću Parametri obrasca = Nova struktura ("Selection, GenerateWhen Opening", select, True); OpenForm("Izvješće.Izvješće1.Obrazac.Obrazac izvješća",Parametri obrasca,OvajObrazac); završi ako; Kraj postupka

Dio 6.

Ako je potrebno, promijenite postavke izvješća tijekom rada s njim, uklj. i pri pokretanju i nakon otvaranja, najispravnije je promijeniti "iz početka", tj. iz ACS postavki. Promjena ACS sheme se vrši samo s objektom Report (ili External Report), a ne s podacima obrasca i sama po sebi ne mijenja ništa - u Postavkama iu PN-u ostaje isto kao što je bilo, a FN može ostati prazan. Stoga, ovisno o našim zadacima:

Nakon izvršenja

Report.Settings Composer.LoadSettings(SKD.DefaultSettings)

Mijenja se samo opcija i ništa više;

Nakon izvođenja tehnike navedene u stavku 2. (koristeći „posrednika” i metodu Učitaj prilagođene postavke()

radi samo ako poništite trenutni PN pomoću sučelja. Sami po sebi, ako se opcija promijeni, neće se promijeniti. U ovom slučaju odabir se mijenja, ali se ne dodaje novi element odabira.

Nakon izvršenja

ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.All)

platforma samo tiho pada. Testirano na nekoliko različitih izdanja. A pozivanje načina za prikaz postavki samo za brze nema smisla - nismo utjecali na njihov sastav, tako da se ionako ništa neće promijeniti.

A budući da još uvijek trebamo potpuno promijeniti ne samo interne odabire, već i prikaz na obrascu izvješća iu povezanim obrascima, moramo promijeniti samo odabir ili postupiti na sljedeći način:

&Na proceduri poslužitelja ChangeSKD() pObject = Form AttributesValue("Izvješće"); odabir=pObject.DataCompositionScheme.SettingsOptions.Get(0).Settings.Selection; eo = selection.Elements.Add(Type("DataCompositionSelectionElement")); eo.LeftValue=NewDataCompositionField("LinkToDirectory.Field1"); eo.ComparisonType=DataCompositionComparisonType.Equals; eo.RightValue=Istina; eo.Use=Istina; ValueÂFormAttributes(pObject,"Izvješće"); Report.SettingsLitter.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.Restore(); // poželjno, iako to još uvijek ne utječe na FN. // zapravo, to je upravo ono što se može nazvati promjenom sastava PN Za svaku e-poštu From Report.ComponentSettings.Settings.Selection.Elements Cycle email.DisplayMode=ElementDisplayModeDataCompositionSettings.QuickAccess; Ako je EmptyString(el.UserSettingsIdentifier) ​​​​Tada // možete koristiti metodu electronicSetIdentifier za PN element, pogledajte njenu pomoć u SP-u, tamo je sve sasvim jasno e.UserSettingsIdentifier="ID123"; // važno - identifikator može biti BILO KOJI, ne UUID ili GUID! el.ViewUserSettings="Test"; završi ako; EndCycle; comp=NewDataCompositionSettingsComposer; comp.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.LoadCustomSettings(comp.CustomSettings); Za svaku e-poštu From Report.Settings Composer.CustomSettings.Elements Cycle email.DisplayMode=ItemDisplayModeDataLayoutSettings.QuickAccess; // povucite EndCycle na obrazac izvješća; // i sada će ovo imati učinak: ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.QuickAccess); Kraj postupka

Zapravo, ovu mehaniku možete proučavati dugo vremena. Ova publikacija proizašla je iz proučavanja načina rješavanja jednog specifičnog problema, te je stoga prilično jednostrana; ali sumnjam da bi se o internoj logici postavki, posebno korisničkih, mogla napisati posebna knjiga, ništa suptilnija od Khrstaleva. Nažalost, nemam energije ni vremena za ovo. Tko smatra da su određeni razvoji korisni, već je dobar.

Neke su stvari eksperimentalno razjašnjene i stoga su kontroverzne. Oni koji znaju više pozvani su da kritiziraju i komentiraju.