1s dinaminis sąrašas pridedant eilutę. Dinaminio sąrašo duomenų apdorojimas ir formatavimas. Redaguojamų ir pridedamų laukų apribojimai

Namų užrašai iš pro žiūrintį stiklą

2014-04-21 Priimami dinaminio sąrašo duomenys

Įdiegta 8.3.6.1977 versijoje.

Įdiegėme galimybę lengvai ir patogiai gauti duomenis, rodomus naudojant dinaminį sąrašą.

Jums gali prireikti dinaminio sąrašo duomenų, kad galėtumėte spausdinti juos nestandartine, „specifine“ forma. Arba norint su jais atlikti tam tikrus veiksmus. Pavyzdžiui, išsiųskite laišką visiems rangovams, kuriuos pasirinkote sąraše pagal tam tikrus kriterijus.

Be to, yra keletas užduočių, kuriose vartotojas, be elementų sąrašo, taip pat nori matyti su šiuo sąrašu susietus suvestinius duomenis. Pavyzdžiui, pasirinkęs tam tikros prekių grupės ir tam tikro tiekėjo prekes, jis iš karto nori duomenų bazėje matyti bendrą tokių prekių skaičių.

Pats dinaminis sąrašas negali suteikti šios informacijos. Dinaminio sąrašo tikslas – greitai peržiūrėti didelius duomenų kiekius. Todėl jis nuskaito duomenis dalimis, reikalingus rodyti viename ar dviejuose ekranuose. Ir „nieko nežino“, pavyzdžiui, apie bendrą duomenų kiekį, kurį jis turi suskaičiuoti.

Apskritai, norėdami gauti papildomos informacijos, kurios vartotojas nori, turite paleisti duomenų bazės užklausą. Lygiai tokia pati, kaip ir naudojama dinaminiame sąraše.

Anksčiau tai galėjote padaryti. Bet tai ne visada buvo lengva. Juk be pradinės užklausos teksto, pagal kurį veikia dinaminis sąrašas, reikėjo žinoti visus pasirinkimus, rūšiavimus ir kitus parametrus, kuriuos vartotojas interaktyviai nustatė duomenis rodančioje lentelėje.

Dabar šią problemą galima išspręsti paprasčiausiai. Dinaminio sąrašo lentelėje dabar yra du nauji metodai:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Taigi jūs gaunate pačią duomenų išdėstymo schemą ir, svarbiausia, visus jos nustatymus, kurių dėka vartotojas sąrašą mato būtent taip. Viskas, ką jums reikia padaryti, tai programiškai sudaryti maketą ir parodyti jį reikšmių rinkinyje (programai apdoroti) arba skaičiuoklės dokumente (rodyti):

Dėl to gausite struktūrą (arba ataskaitą), kurioje yra stulpelių ir eilučių, rodomų dinaminio sąrašo lentelėje.

Svarbu tai, kad išdėstymas ir nustatymai, kuriuos gaunate iš dinaminio sąrašo lentelės, atsižvelgia, be kita ko, į stulpelių matomumą ir taikomą paiešką. Kadangi nustatymai gaunami atskirai, galite keisti laukų sudėtį savo reikmėms ir gauti, pavyzdžiui, visus sąrašo stulpelius, o ne tik tuos, kurie matomi vartotojui.

Išvedant į skaičiuoklės dokumentą, yra dar vienas malonus momentas. Apskritai ataskaitos išvaizda atitiks dinaminio sąrašo lentelės išvaizdą tuo metu, kai gaunama schema ir nustatymai. Įskaitant sąlyginį lentelės dizainą. Kai kurių papildomų veiksmų prireiks tik tuo atveju, jei į ataskaitą norite perkelti sąlyginį formos dizainą.

Be primityvių duomenų tipų, kuriuos galima rasti bet kurioje programavimo kalboje, 1C yra ir unikalių tipų. Kiekvienas iš jų turi savo savybes, metodus, funkcijas, paskirtį ir naudojimo sistemoje niuansus. Vienas iš šių tipų yra dinaminis sąrašas, kuris labai palengvina daugelį taikomų užduočių. Štai kodėl kūrėjai turi žinoti ir mokėti valdyti šį universalų įrankį.

Dinaminių sąrašų ypatybės 1C

Šio tipo tikslas – rodyti informaciją iš bet kokių duomenų bazės lentelių, neatsižvelgiant į jos tipą. Mechanizmas buvo sukurtas SKD pagrindu ir turi panašias galimybes. Bet tai nereiškia, kad būtinai turėsite parašyti prašymą 1C kalba, nors tokia galimybė yra ir ja reikėtų pasinaudoti. Galite tiesiog nurodyti lentelę, kurios informacija jus domina, o 1C savarankiškai sugeneruos paprastą užklausą.

Norėdami pamatyti, kaip formuojamas dinaminis sąrašas ir kokius duomenis jis rodo, konfigūravimo priemonėje turite atidaryti tvarkomas formas, kuriose jis yra: detalių sąraše kontekstiniu meniu atidarykite jo ypatybes ir atkreipkite dėmesį į „Custom. Prašymas“ elementą. Jei žymės langelio nėra, parametras „Pagrindinė lentelė“ atspindi duomenų bazės lentelę, iš kurios paimti duomenys. Kitu atveju dinaminis sąrašas atspindi pasirinktinės užklausos duomenis, kuriuos galima pamatyti atidarius sąrašo nustatymus.

Pasirinktinė užklausų schema naudojama daug dažniau, nes tai suteikia puikią galimybę derinti ir rodyti įvairius duomenis. Dažniausiai šis mechanizmas naudojamas norint atspindėti sandėlio likučius, prekių kainas, kvitus, išlaidas ar pirkimus. Turite jį naudoti atsargiai, nes sudėtingų užklausų našumas gali sumažėti.

Dar viena naudinga dinaminio sąrašo savybė atsidaro spustelėjus užrašą „Sąrašo nustatymai“. Šis meniu leidžia padaryti informaciją prieinamesnę ir suprantamesnę galutiniams vartotojams, net ir naudojant standartinį laukų rinkinį. Nepriklausomai nuo to, ar užklausa savavališka, ar ne, pamatysite skirtuką „Nustatymai“, kuriame galėsite nurodyti:

  • Dinaminis sąrašo pasirinkimas;
  • Grupės;
  • Rūšiavimas;
  • Dekoras.

Naudojant parametrus dinaminiai sąrašai yra universalūs ir gana lankstūs. Taip pat galite susieti juos su išsamia informacija valdomoje formoje, o duomenys keisis priklausomai nuo vartotojo pasirinktų parametrų. Šių mechanizmų naudojimą galima suprasti ir įvertinti atsižvelgiant į realių problemų pavyzdžius.

Kaip pavyzdį apsvarstykite užduotį atspindėti nomenklatūros liekanas kontroliuojamoje formoje. Realioje praktikoje tokie užsakymai pasitaiko gana dažnai įvairiose konfigūracijose, o dinaminis sąrašas idealiai tinka kaip įrankis. Šiai užduočiai atlikti turėsime naudoti pasirinktinę užklausą, dinaminio sąrašo parametrus ir jo nustatymus.

Kad būtų daugiau aiškumo, sukurkime atskirą išorinį apdorojimą ir patalpinkime jame dinaminį sąrašą. Norėdami įgyvendinti savo planus, lentelės su nomenklatūra nepakaks, todėl turime leisti savavališką užklausą. Jame aprašysime kairįjį katalogo ryšį su prekių sąrašu ir likučių registru ir nustatysime katalogą kaip pagrindinę lentelę. Ši schema leis vartotojams, dirbantiems su dinaminiu sąrašu, pridėti arba keisti elementus.



SELECT NomenclatureList.Name AS Pavadinimas, PrekėsSandėliuoseLiktos.Sandėlio AS Sandėlis, PrekėsSandėliuoseLikučiai.Kiekis Likęs AS KiekisLikęs IŠ Katalogo.Nomenklatūros AS Nomenklatūros sąrašas KAIRĖS RYŠYS)RegistruotisAkumuliacijos.Prekių likutis. sLikusi programinė įranga NomenclatureList.Link = ProductsInWarehousesRemainings.Nomenclature WHERE

Kadangi mūsų užklausoje buvo naudojamas parametras „CurrentDate“, prieš naudodami apdorojimą turime nustatyti jo vertę. Norėdami tai padaryti, formos modulyje procedūroje „When CreatedOnServer“, naudodami standartinę komandą, priskirkite jai funkciją „CurrentSessionDate“. Taip pat turime rodyti dinaminį sąrašą valdymo formoje ir aiškumo dėlei pakeisti laukų tvarką. Vilkite atributą „Likusi nomenklatūra“ į formos elementus (viršutinėje kairėje dalyje) ir naudokite mėlynas rodykles, kad pakeistumėte laukų tvarką formos lentelėje.

&Serverio procedūroje, kai sukuriama serveryje (gedimas, standartinis apdorojimas) lieka nomenklatūra. Parametrai. Nustatyti ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Jau šiame etape galime atidaryti išorinį apdorojimą 1C ir pamatyti, kad dinaminis sąrašas veikia. Galime peržiūrėti likučius, kurti elementus ir grupes bei ieškoti. Dažnai klientai prašo pridėti galimybę pasirinkti datą, kurią matys likučius. Formos su dinaminiu sąrašu atveju tai pasiekiama naudojant papildomą lauką ir jį naudojant nustatant parametrus.

Pridėkite „Date“ tipo atributą „DateRemaining“ ir perkelkite jį į formos elementus. Lauko įvykiuose sukuriame įvykį „OnChange“ ir įrašome dinaminėje užklausoje naudojamo parametro „CurrentDate“ nustatymo kodą. Kad atidarius formą vartotojas iš karto suprastų, kurią dieną jis mato likučius, atliksime nedidelius procedūros „When CreatedOnServer“ pakeitimus.



&OnServerProcedureCreatingOnServer(gedimas, standartinis apdorojimas)RemainingDate = CurrentSessionDate(); Elementas Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Procedūros pabaiga &Kliento procedūros Remaining DateWhenChanged(Element)Nomenklatūra Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Procedūros pabaiga

Todėl mūsų dinaminio sąrašo forma gali atspindėti bet kurios datos likučius.

Mes apsvarstėme tik nedidelę šio įrankių rinkinio galimybių dalį, tačiau to jau pakanka, kad suprastume tokio tipo dinaminio sąrašo patogumą. Panašus mechanizmas naudojamas daugeliui užduočių, tačiau dažniausiai jis randamas tipinėse valdomų formų konfigūracijose:

  1. Pasirinkimas;
  2. Sąrašai.

Norėdami gauti dinaminį sąrašą ir jo užklausą standartinėmis valdomomis formomis, kūrėjas turi atidaryti norimą formą konfigūravimo priemonėje. Išsamios informacijos skiltyje raskite išsamią informaciją su duomenų tipu „DynamicList“ (dažniausiai jis paryškinamas paryškintu šriftu). Jo ypatybėse yra užklausos tekstas, pasirinkimai ir kiti nustatymai.

Įdiegta 8.3.10.2168 versijoje.

Kaip žinote, dinaminis sąrašas yra patogus ir naudingas norint greitai parodyti didelius sąrašus. Tai gana lanksti, todėl galite keisti standartinę užklausą ir netgi sukurti savo sudėtingą užklausą. Dėl to jūs turite galimybę sąraše rodyti įvairius papildomus duomenis, susijusius su pagrindiniais sąrašo duomenimis.

Tačiau toks universalumas turi ir minusą. Noras „parodyti viską iš karto“ gali gerokai apsunkinti prašymą. Dėl to turėsite neveiksmingų vykdymo planų ir dėl to sumažės našumas rodant ir slenkant sąrašą.

Be to, yra keletas taikomų problemų, kuriose sąrašo duomenų atrankos ir formatavimo algoritmas yra gana sudėtingas. Tokiais atvejais tinkintų užklausų ir sąlyginio stiliaus galimybių tiesiog nepakanka. Norėčiau turėti „laisvesnį“ ir „tikslesnį“ įrankį, kuris leistų daryti „bet ką“ ir „tik ten, kur reikia“.

Įvykis priimant duomenis serveryje

Specialiai šiems tikslams įdiegėme naują tvarkyklę. Jis pridedamas prie lentelės plėtinio, kuriame rodomas dinaminis sąrašas.

Šis tvarkytojas iškviečiamas serveryje, kai dinaminis sąrašas gauna ir suformatavo kitą duomenų dalį, kad būtų rodomas.

Svarbi ypatybė yra ta, kad šioje tvarkyklėje formos kontekstas nepasiekiamas. Galite dirbti tik su tų sąrašo eilučių rinkiniu, kuris yra gautas iš duomenų bazės, jau buvo pasirinktas ir suprojektuotas pagal dinaminio sąrašo nustatymus.

Galite pakeisti duomenis šiose eilutėse arba pritaikyti langeliams savo dizainą. Galimi šie dizaino variantai: Fono spalva, Teksto spalva, Šriftas, Horizontali padėtis, Matomumas, Prieinamumas, Ekranas, Tekstas Ir Formatas.

Be to, jei reikia, galite peržiūrėti ir analizuoti viso dinaminio sąrašo nustatymų kopiją. Bet jūs negalėsite pakeisti nustatymų.

Paprasčiausias naudojimo atvejis

Lengviausias būdas suprasti šio tvarkyklės paskirtį yra pavyzdžiu. Pavyzdys – prekių sąraše parodyti jų likučius iš kaupimo registro. Kiekis, mažesnis už tam tikrą reikšmę, paryškinamas raudonai.

Iki šiol ši problema buvo išspręsta kairiuoju prisijungimu dinaminio sąrašo užklausoje ir konfigūravimo priemonėje nustačius sąlyginio sąrašo dizainą.

Dabar ji nusprendžia taip. Standartinė sąrašo užklausa nėra sudėtinga, ji tik prideda netikrą lauką Priminimas.

Ir prižiūrėtojas Kada gaunami duomenysServer() Skaičiuojami tik gautų eilučių likučiai. Ir tada maži likučiai paryškinami raudonai.

Čia pagal metodą GetKeys (), iš dinaminio sąrašo eilučių rinkinio gaunate jų raktus (saitus) ir perduodate šiuos raktus likusiai užklausai.

Tada, naršydami užklausos rezultatus, stulpelyje gausite reikiamas eilutes pagal raktą Priminimas pateikite vertę ir, jei reikia, nustatykite šio lauko dizainą.

Dėl to vartotojas mato šį sąrašą:

Koks šio pasirinkimo pranašumas?

Pirma, sąrašo užklausa išlieka paprasta. Arba jis nelieka paprastas, bet jungčių skaičius jame mažėja. Tai reiškia, kad su didele tikimybe jam bus sukurtas geras planas.

Antra, likučių gavimas tvarkyklėje bus vykdomas tik vieną kartą, o sąrašo užklausa gali būti vykdoma kelis kartus (priklausomai nuo sąrašo nustatymų ir puslapių skripto).

Ir trečia, naujasis tvarkytojas vykdomas po to, kai iš duomenų bazės gaunami pagrindiniai duomenys ir praėjo teisių patikra. Tai reiškia, kad kai kuriais atvejais susijusių duomenų nuskaitymas tvarkyklėje gali būti atliekamas privilegijuotuoju režimu, netikrinant leidimų. Tai pagreitina sąrašą.

Redaguojamų ir pridedamų laukų apribojimai

Tai, kad tvarkyklėje galite pakeisti sąrašo laukų reikšmes, turi savybę, į kurią visada reikia atsižvelgti.

Jei nesiimsite papildomų priemonių, vartotoją gali labai nustebinti grupavimo, rūšiavimo ar pasirinkimo (įskaitant paiešką) pagal jūsų pakeistus laukus rezultatai. Juk šie veiksmai bus atliekami remiantis pirminiais užklausos gautais duomenimis, o ne duomenimis, kuriuos mato vartotojas.

Todėl tais atvejais, kai keičiate laukų reikšmes, nepamirškite jų neįtraukti į grupavimą, rikiavimą ir pasirinkimą. Specialiai šiam tikslui įdiegėme tris naujus metodus.

Be to, kai kuriais atvejais gali būti prasminga vizualiai paryškinti tokius lentelės stulpelius, kad vartotojai matytų, jog šie stulpeliai yra „ypatingi“, o ne kaip visi kiti.

Pagaliau išsipildė kiekvieno septynmečio svajonė. Kaip dažnai programos 7.7 vartotojai prašydavo įprasto prekių pasirinkimo? Kad galėtumėte matyti likučius, kainas ir nustatyti filtrus. Turėjome sugalvoti įvairių gudrybių, įskaitant išorinių komponentų rašymą. 1C 8.2 pasirodė dinaminiai sąrašai. Siūlau apsvarstyti, kas tai yra ir ką jie gali mums duoti 1C 8.3.

Paimkime pagrindą tam tikra 1C bandomoji konfigūracija: „Įmonės apskaita 3.0“. Dabar pasirinkimo neatliksime, tiesiog įtrauksime kitą pasirinkimo formą kataloge „Nomenklatūra“ ir laikinai padarysime ją pagrindine:

Sukūrus, sistema pagal numatytuosius nustatymus pridės prie formos lentelės lauką „Dinaminis sąrašas“.

Pažvelkime į jo savybes ir pažiūrėkime, kas ten yra.

Visų pirma, mus domina žymės langelis „Custom request“. Tai atskleis mums visus dinaminio sąrašo pranašumus. Turėsime galimybę parašyti savo prašymą, su parametrais. Pažymėkite langelį ir spustelėkite nuorodą „Atidaryti“:

Atsidarys langas su baigtu kodu . Kol kas visi katalogo „Nomenklatūra“ laukai yra tiesiog išvardyti ten.

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Kaip matote, yra skambinimo mygtukas „ “ ir žymimasis laukelis, leidžiantis dinamiškai keisti sąrašo turinį. Tai yra, kai kitas vartotojas ką nors pakeis kataloge, tai pasikeis ir mūsų sąraše. Be to, yra skirtukas „Nustatymai“, bet mes tai paliesime vėliau.

Pasirinktinė užklausa dinaminiame sąraše

Pirmiausia sukurkime mums reikalingą užklausą su likučiais ir kainomis. Šitaip:

Skirtukas „Nustatymai“.

O dabar geriausia dalis! Eikite į skirtuką „Nustatymai“. Ir iškart matome, kad pirmame skirtuke galime pasirinkti bet kurį užklausos lauką:

Programinis užklausos parametrų nustatymas dinaminiame sąraše 1C 8.3

Nepamirškite, kad užklausoje turime du parametrus: „Laikotarpis“ ir „Kainos tipas“. Turime juos įtraukti į užklausą, kitaip įvyks klaida.

Šiuos parametrus įrašykime į formos parametrus, o formos modulyje pridėkite šias eilutes:

&OnServerProcedureWhenCreatingOnServer (gedimas, standartinis apdorojimas) sąrašas. Galimybės. SetParameterValue("Laikotarpis" , Parametrai. Data) ; Sąrašas. Galimybės. SetParameterValue("Kainos tipas", Parameters.PriceType) ; Procedūros pabaiga

Baigdamas konfigūraciją, kiekvienas 1C programuotojas susiduria su dinaminiais sąrašais.
Dinaminis sąrašas yra sąsajos objektas, naudojamas įvairiems duomenų bazės objektų sąrašams arba neobjektiniams duomenims – registro įrašams rodyti.
Pavyzdžiui, dinaminis sąrašas naudojamas elementų sąrašui rodyti:

Norėdami parodyti dinaminio sąrašo galimybes, sukurkime išorinį apdorojimą ir pridėkite pagrindinę formą. Pridėkime prie formos naują atributą su tipu „Dinaminis sąrašas“. Pažvelkime į jo savybes ir pažiūrėkime, kas ten yra.
Mus domina „Custom request“ nuosavybė. Jį įjungus bus parodytos visos dinaminio sąrašo galimybės. Užklausą galėsime parašyti naudodami beveik visas 1C: Enterprise sistemos užklausų kalbos galimybes. Pažymėkite langelį ir spustelėkite nuorodą „Atidaryti“:

Pagal numatytuosius nustatymus mūsų sąraše bus rodomas prekių sąrašas su bendru visų sandėlių likučiu. Norėdami įdiegti tokį sąrašą, pridėkite šią užklausą:


Kaip pagrindinę lentelę pasirinksime „Katalogas.Nomenklatūra“, tai leis mums dirbti su dinaminiu sąrašu, kaip ir su nomenklatūros sąrašu - pridėti, keisti, pažymėti katalogo elementus, kad juos būtų galima ištrinti. Be to, įdiegus pagrindinę lentelę, galima dinamiškai nuskaityti duomenis – tai reiškia, kad pasirinkimas bus atliekamas dalimis pagal poreikį.
Toliau turime sukurti savo sąrašo formos elementus:

Jei bandysime apdoroti šią formą, gausime klaidą:


Norėdami jį pašalinti, turite nustatyti parametro „Periodas“ reikšmę. Norėdami tai padaryti, galite naudoti dinaminio sąrašo rinkinio „Parameters“ metodą „SetParameterValue“. Metodas apima du parametrus:
. "Parametras" - tipas: eilutė; DataCompositionParameter. Parametro arba duomenų sudėties parametro, kurio reikšmę norite nustatyti, pavadinimas;
. „Vertė“ – tipas: savavališkas. Reikšmė, kurią reikia nustatyti.
Galima iškviesti formos „OnCreateOnServer“ tvarkyklėje:

Turite klausimų ar reikia konsultanto pagalbos?


Vartotojui suteiksime galimybę keisti likučių gavimo laikotarpį. Norėdami tai padaryti, pridėkite atributą ir su juo susietą formos elementą „Data“:


Formos elemento „Date“ tvarkyklėje „OnChange“ iškviesime metodą „SetParameterValue“, kaip reikšmę perduodant susijusio atributo reikšmę. Panašiai pakeisime formos procedūrą „Kuriant serveryje“. Kadangi metodas yra prieinamas kliente, nereikia skambinti serveriui:


Dabar, kai pasikeičia data, likučiai bus automatiškai atnaujinti:




Tarkime, kad vartotojai nori matyti esamus likučius arba planuojamas įplaukas. Panagrinėkime vieną iš įgyvendinimo variantų. Pridėkime loginio tipo formos atributą ir susijusį jungiklį:


Keičiant jungiklio reikšmę, pakeisime užklausos tekstą. Norėdami tai padaryti, formos elementui „Rodyti kiekį gavus“ naudosime įvykių tvarkyklę „Pakeitus“. Priklausomai nuo atributo vertės, turime pakeisti dinaminio sąrašo ypatybę „QueryText“. Kadangi ši nuosavybė kliente nepasiekiama, reikia iškviesti serverio procedūrą:


Atliktų pakeitimų rezultatas: