Lista dinamike 1s duke shtuar një rresht. Përpunimi dhe formatimi i të dhënave të listës dinamike. Kufizime në fushat e redaktueshme dhe të shtuara

Shënime në shtëpi nga Përmes xhamit

21.04.2014 Marrja e të dhënave dinamike të listës

Zbatuar në versionin 8.3.6.1977.

Ne kemi zbatuar aftësinë për të marrë me lehtësi dhe lehtësi të dhëna të shfaqura duke përdorur një listë dinamike.

Mund t'ju nevojiten të dhëna dinamike të listës për t'i printuar ato në një formë "specifike" jo standarde. Ose për të kryer veprime të caktuara me to. Për shembull, dërgoni një letër për të gjithë kontraktorët që keni përzgjedhur në listë bazuar në disa kritere.

Përveç kësaj, ka një sërë detyrash në të cilat përdoruesi, përveç listës së elementeve, dëshiron të shohë edhe të dhënat përmbledhëse të lidhura me këtë listë. Për shembull, pasi ka zgjedhur produkte të një grupi të caktuar produktesh dhe një furnizuesi të caktuar, ai menjëherë dëshiron të shohë numrin total të produkteve të tilla në bazën e të dhënave.

Një listë dinamike në vetvete nuk mund t'ju ofrojë këtë informacion. Qëllimi i një liste dinamike është të sigurojë shikim të shpejtë të sasive të mëdha të të dhënave. Prandaj, i lexon të dhënat në copa të nevojshme për t'u shfaqur në një ose dy ekrane. Dhe "nuk di asgjë", për shembull, për sasinë totale të të dhënave që ai duhet të numërojë.

Në përgjithësi, për të marrë informacion shtesë që përdoruesi dëshiron, ju duhet të ekzekutoni një pyetje në bazën e të dhënave. Saktësisht i njëjtë me atë të përdorur në listën dinamike.

Dikur keni mundur ta bëni këtë. Por nuk ishte gjithmonë e lehtë. Në fund të fundit, përveç tekstit të kërkesës origjinale mbi të cilën funksionon lista dinamike, duhej të njihje të gjitha zgjedhjet, renditjet dhe parametrat e tjerë që përdoruesi vendos në mënyrë interaktive në tabelën që shfaq të dhënat.

Tani ky problem mund të zgjidhet thjesht. Tabela e listës dinamike tani ka dy metoda të reja:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Kështu, ju merrni vetë skemën e paraqitjes së të dhënave dhe, më e rëndësishmja, të gjitha cilësimet e saj, falë të cilave përdoruesi e sheh listën pikërisht ashtu. E tëra çfarë ju duhet të bëni është të hartoni në mënyrë programore paraqitjen dhe ta shfaqni atë në një koleksion vlerash (për përpunimin e programit) ose në një dokument fletëllogaritëse (për shfaqje):

Si rezultat, ju do të merrni një strukturë (ose raport) që përmban kolona dhe rreshta të shfaqura në një tabelë të listës dinamike.

Pika e rëndësishme është që faqosja dhe cilësimet që merrni nga tabela e listës dinamike marrin parasysh, ndër të tjera, dukshmërinë e kolonave dhe kërkimin e aplikuar. Meqenëse cilësimet merren veçmas, ju mund të ndryshoni përbërjen e fushave për qëllimet tuaja dhe të merrni, për shembull, të gjitha kolonat e listës, dhe jo vetëm ato që janë të dukshme për përdoruesin.

Kur nxirret në një dokument fletëllogaritëse, ka një moment më të këndshëm. Në përgjithësi, pamja e raportit do të korrespondojë me pamjen e tabelës së listës dinamike në kohën e marrjes së skemës dhe cilësimeve. Përfshirë modelin e kushtëzuar të tabelës. Do t'ju duhen disa veprime shtesë vetëm nëse dëshironi të transferoni modelin e kushtëzuar të formularit në raport.

Përveç llojeve primitive të të dhënave që mund të gjenden në çdo gjuhë programimi, ka lloje unike në 1C. Secila prej tyre ka vetitë, metodat, funksionet, qëllimin dhe nuancat e veta të përdorimit në sistem. Një nga këto lloje është një listë dinamike, e cila lehtëson shumë shumë detyra të aplikuara. Kjo është arsyeja pse zhvilluesit duhet të dinë dhe të jenë në gjendje të trajtojnë këtë mjet universal.

Karakteristikat e listave dinamike në 1C

Qëllimi i këtij lloji është shfaqja e informacionit nga çdo tabelë e bazës së të dhënave, pavarësisht nga lloji i saj. Mekanizmi u krijua në bazë të SKD dhe ka aftësi të ngjashme. Por kjo nuk do të thotë që do t'ju duhet domosdoshmërisht të shkruani një kërkesë në gjuhën 1C, megjithëse kjo mundësi ekziston dhe duhet të përdoret. Ju thjesht mund të specifikoni tabelën, informacioni i së cilës ju intereson dhe 1C do të gjenerojë në mënyrë të pavarur një pyetje të thjeshtë.

Për të parë se si formohet një listë dinamike dhe cilat të dhëna tregon, duhet të hapni formularët e menaxhuar ku ndodhet në konfigurues: në listën e detajeve, përdorni menunë e kontekstit për të hapur vetitë e saj dhe kushtojini vëmendje "Custom Kërkesë” artikull. Nëse nuk ka kuti, atëherë parametri "Tabela kryesore" pasqyron tabelën e bazës së të dhënave nga e cila janë marrë të dhënat. Përndryshe, lista dinamike pasqyron të dhënat e një pyetjeje të personalizuar, e cila mund të shihet duke hapur cilësimet e listës.

Skema e pyetjeve me porosi përdoret shumë më shpesh, pasi kjo ofron një mundësi të shkëlqyer për të kombinuar dhe shfaqur një shumëllojshmëri të gjerë të të dhënave. Më shpesh, ky mekanizëm përdoret për të pasqyruar bilancet e magazinës, çmimet e artikujve, arkëtimet, shpenzimet ose blerjet. Duhet ta përdorni me kujdes, pasi performanca mund të bjerë për pyetje komplekse.

Një veçori tjetër e dobishme e një liste dinamike hapet kur klikoni në mbishkrimin "Cilësimet e listës". Kjo meny ju lejon të bëni informacionin më të aksesueshëm dhe të kuptueshëm për përdoruesit fundorë, edhe kur përdorni një grup standard fushash. Pavarësisht nëse kërkesa është arbitrare apo jo, do të shihni skedën "Cilësimet", ku mund të specifikoni:

  • Zgjedhja dinamike e listës;
  • Grupet;
  • Renditja;
  • Dekor.

Përdorimi i parametrave i bën listat dinamike universale dhe mjaft fleksibël. Ju gjithashtu mund t'i lidhni ato me detaje në një formular të menaxhuar dhe të dhënat do të ndryshojnë në varësi të parametrave të zgjedhur nga përdoruesi. Përdorimi i këtyre mekanizmave mund të kuptohet dhe vlerësohet duke shqyrtuar shembuj të problemeve të jetës reale.

Si shembull, merrni parasysh detyrën e pasqyrimit të mbetjeve të nomenklaturës në një formë të kontrolluar. Në praktikën reale, urdhra të tillë ndodhin mjaft shpesh në konfigurime të ndryshme, dhe një listë dinamike është ideale si një mjet. Për këtë detyrë do të duhet të përdorim një pyetje të personalizuar, parametrat e listës dinamike dhe cilësimet e saj.

Për qartësi më të madhe, le të krijojmë një përpunim të jashtëm të veçantë dhe të vendosim një listë dinamike në të. Për të zbatuar planet tona, tabela me nomenklaturën nuk do të jetë e mjaftueshme, ndaj duhet të lejojmë një pyetje arbitrare. Në të do të përshkruajmë lidhjen e majtë të drejtorisë me listën e artikujve dhe regjistrin e bilanceve dhe do ta vendosim direktorinë si tabelën kryesore. Kjo skemë do t'i lejojë përdoruesit, duke punuar me një listë dinamike, të shtojnë ose ndryshojnë artikuj.



SELECT Nomenclature List.Name AS Emri, MallratNëMagazinat Mbetjet.Magazina AS Magazina, MallratNëMagazinat Mbetjet.Sasia e mbetur AS Sasia e mbetur NGA Direktoria.Nomenklatura AS Lista e nomenklaturës. LIDHJA LEFT LIDHJENË REGJISTRIMINA MallratPër thesaret e USA Softueri i mbetur NomenclatureList.Link = ProdukteNë magazinat Mbetjet.Nomenklatura WHERE

Meqenëse kërkesa jonë përdori parametrin "Data aktuale", duhet të vendosim vlerën e tij përpara se të përdorim përpunimin. Për ta bërë këtë, në modulin e formularit në procedurën "When CreatedOnServer", duke përdorur një komandë standarde, caktojeni funksionin "CurrentSessionDate". Ne gjithashtu duhet të shfaqim listën dinamike në formularin e kontrollit dhe të ndryshojmë rendin e fushave për qartësi. Tërhiqni atributin “Nomenklature Remaining” në elementët e formës (pjesa e sipërme majtas) dhe përdorni shigjetat blu për të ndryshuar rendin e fushave në tabelën në formular.

&Në procedurën e serverit Kur krijohet në server (Dështimi, Përpunimi standard) Mbetet Nomenklatura. Parametrat. Vendos ParameterValue("Data aktuale", CurrentSessionDate()) Procedura e përfundimit


Tashmë në këtë fazë, ne mund të hapim përpunimin tonë të jashtëm në 1C dhe të shohim që lista dinamike po funksionon. Ne mund të shikojmë bilancet, të krijojmë artikuj dhe grupe dhe të kërkojmë. Shpesh klientët kërkojnë të shtojnë aftësinë për të zgjedhur datën në të cilën do të shohin bilancet. Në rastin e një formulari me listë dinamike, kjo arrihet përmes një fushe shtesë dhe vendosjes së parametrave duke e përdorur atë.

Shtoni atributin "DateRemaining" të tipit "Date" dhe transferojeni atë te elementët e formularit. Në ngjarjet në terren, ne krijojmë ngjarjen "OnChange" dhe shkruajmë kodin për vendosjen e parametrit "Data aktuale" e përdorur në kërkesën dinamike. Kështu që gjatë hapjes së formularit përdoruesi të kuptojë menjëherë se në cilën datë i sheh bilancet, ne do të bëjmë ndryshime të vogla në procedurën "When CreatedOnServer".



&OnServerProcedureWhenCreatingOnServer(Dështim, StandardProcessing)RemainingDate = CurrentSessionDate(); Artikulli Remains.Parameters.SetParameterValue("Data aktuale", RemainingDate); Fundi i procedurës &Në procedurën e klientit Data e mbetur kur ndryshohet(elementi)Nomenklatura e mbetur.Parameters.SetParameterValue("Data aktuale",Data e mbetur); Fundi i procedurës

Si rezultat, formulari ynë i Listës Dinamike mund të pasqyrojë bilancet në çdo datë.

Ne kemi shqyrtuar vetëm një pjesë të vogël të aftësive të kësaj pakete mjetesh, por kjo tashmë është e mjaftueshme për të kuptuar komoditetin e këtij lloji të listës dinamike. Një mekanizëm i ngjashëm përdoret për shumë detyra, por më së shpeshti gjendet në konfigurimet tipike në format e menaxhuara:

  1. Përzgjedhja;
  2. Listat.

Për të marrë një listë dinamike dhe kërkesën e saj në format standarde të menaxhuara, zhvilluesi duhet të hapë formularin e dëshiruar në konfigurues. Në seksionin e detajeve, gjeni detajet me llojin e të dhënave "DynamicList" (më shpesh theksohet me shkronja të zeza). Karakteristikat e tij përmbajnë tekstin e kërkesës, zgjedhjet dhe cilësimet e tjera.

Zbatuar në versionin 8.3.10.2168.

Siç e dini, lista dinamike është e përshtatshme dhe e dobishme për të shfaqur shpejt listat e mëdha. Është mjaft fleksibël, duke ju lejuar të modifikoni pyetjen standarde dhe madje të krijoni pyetjen tuaj komplekse. Falë kësaj, ju keni mundësinë të shfaqni të dhëna të ndryshme shtesë në listë që lidhen me të dhënat kryesore të listës.

Sidoqoftë, një shkathtësi e tillë ka gjithashtu një anë negative. Dëshira për të "treguar gjithçka menjëherë" mund t'ju bëjë të komplikoni ndjeshëm kërkesën. Si rezultat, do të përfundoni me plane ekzekutimi joefikase dhe, si rezultat, do të reduktoni performancën kur shfaqni dhe lëvizni nëpër listë.

Përveç kësaj, ka një sërë problemesh të aplikuara në të cilat algoritmi për zgjedhjen dhe formatimin e të dhënave të listës është mjaft kompleks. Në këto raste, kërkesat e personalizuara dhe aftësitë e stilimit të kushtëzuar thjesht nuk mjaftojnë. Do të doja të kisha një mjet më "falas" dhe më "të saktë" që do të më lejojë të bëj "çdo gjë" dhe "vetëm aty ku është e nevojshme".

Ngjarja kur merr të dhëna në server

Ne kemi implementuar një mbajtës të ri posaçërisht për këto qëllime. Ai shtohet në zgjerimin e tabelës që shfaq listën dinamike.

Ky mbajtës thirret në server pasi lista dinamike të ketë marrë dhe formatuar pjesën tjetër të të dhënave për shfaqje.

Një veçori e rëndësishme është se konteksti i formularit nuk është i disponueshëm në këtë mbajtës. Mund të operoni vetëm me një koleksion të atyre linjave të listës që merren nga baza e të dhënave, tashmë janë përzgjedhur dhe dizajnuar në përputhje me cilësimet e listës dinamike.

Ju mund t'i ndryshoni të dhënat në këto rreshta ose të aplikoni dizajnin tuaj në qeliza. Opsionet e mëposhtme të projektimit janë në dispozicion: Ngjyrë e sfondit, Ngjyra e tekstit, Fonti, Pozicioni horizontal, Dukshmëria, Disponueshmëria, Ekrani, Teksti Dhe Formati.

Gjithashtu, nëse është e nevojshme, mund të shikoni dhe analizoni një kopje të cilësimeve të listës së plotë dinamike. Por nuk do të mund të ndryshoni cilësimet.

Rasti më i thjeshtë i përdorimit

Mënyra më e lehtë për të kuptuar qëllimin e këtij mbajtësi është me një shembull. Një shembull është të tregohen bilancet e tyre nga regjistri i akumulimit në një listë mallrash. Një sasi më e vogël se një vlerë e caktuar është e theksuar me të kuqe.

Deri më tani, ky problem zgjidhej nga një bashkim majtas në një kërkesë të listës dinamike dhe një dizajn i listës së kushtëzuar të vendosur në konfigurues.

Tani ajo vendos në këtë mënyrë. Kërkesa standarde e listës nuk është e komplikuar; ai vetëm shton një fushë të bedel Pjesa e mbetur.

Dhe në mbajtës WhenReceiving DataOnServer() Vetëm për rreshtat e marrë llogariten mbetjet. Dhe pastaj mbetjet e vogla theksohen me të kuqe.

Këtu, sipas metodës GetKeys (), nga një koleksion i rreshtave dinamike të listës ju merrni çelësat (lidhjet) e tyre dhe i kaloni këta çelësa në pyetjen e mbetur.

Më pas, kur kaloni rezultatet e pyetjes, merrni rreshtat e kërkuar me çelës, në kolonë Pjesa e mbetur vendosni vlerën dhe vendosni dizajnin e kësaj fushe, nëse është e nevojshme.

Si rezultat, përdoruesi sheh listën e mëposhtme:

Cili është avantazhi i këtij opsioni?

Së pari, pyetja e listës mbetet e thjeshtë. Ose nuk mbetet e thjeshtë, por numri i lidhjeve në të zvogëlohet. Kjo do të thotë se, me një shkallë të lartë probabiliteti, do të ndërtohet një plan i mirë për të.

Së dyti, marrja e mbetjeve në mbajtës do të ekzekutohet vetëm një herë, ndërsa kërkesa e listës mund të ekzekutohet disa herë (në varësi të cilësimeve të listës dhe skriptit të faqes).

Dhe së treti, mbajtësi i ri ekzekutohet pasi të dhënat kryesore janë marrë nga baza e të dhënave dhe kanë kaluar kontrollin e të drejtave. Kjo do të thotë që në disa skenarë, marrja e të dhënave të lidhura në një mbajtës mund të bëhet në modalitetin e privilegjuar, pa kontrolluar lejet. Kjo përshpejton listën.

Kufizime në fushat e redaktueshme dhe të shtuara

Fakti që në mbajtës mund të ndryshoni vlerat e fushave të listës ka një veçori që duhet marrë gjithmonë parasysh.

Nëse nuk merrni masa shtesë, përdoruesi mund të habitet shumë nga rezultatet e grupimit, renditjes ose përzgjedhjes (përfshirë kërkimin) sipas fushave që keni ndryshuar. Në fund të fundit, këto veprime do të kryhen bazuar në të dhënat origjinale të marra nga kërkesa, dhe jo në të dhënat që shikon përdoruesi.

Prandaj, në rastet kur ndryshoni vlerat e fushave, mos harroni t'i përjashtoni ato nga grupimi, renditja dhe përzgjedhja. Ne kemi zbatuar tre metoda të reja posaçërisht për këtë qëllim.

Për më tepër, në disa skenarë mund të ketë kuptim të theksohen vizualisht kolona të tilla në tabelë, në mënyrë që përdoruesit të shohin se këto kolona janë "të veçanta", jo si gjithë të tjerët.

Më në fund, ëndrra e çdo shtatë vjeçari është realizuar. Sa shpesh kërkuan përdoruesit e programit 7.7 për një përzgjedhje normale të artikujve? Kështu që ju mund të shihni balancat, çmimet dhe të vendosni filtra. Na u desh të gjenim truke të ndryshme, duke përfshirë shkrimin e komponentëve të jashtëm. Në 1C 8.2, u shfaqën listat dinamike. Unë propozoj të shqyrtojmë se çfarë është dhe çfarë mund të na japin në 1C 8.3.

Le të marrim si bazë një konfigurim të caktuar provë të 1C: "Kontabiliteti i Ndërmarrjes 3.0". Ne nuk do të bëjmë një përzgjedhje tani, thjesht do të shtojmë një formë tjetër përzgjedhjeje në drejtorinë "Nomenklatura" dhe do ta bëjmë atë përkohësisht kryesorin:

Kur të krijohet, sistemi si parazgjedhje do të shtojë një fushë tabele të llojit "Lista Dinamike" në formular.

Le të shkojmë në pronat e tij dhe të shohim se çfarë ka atje.

Para së gjithash, ne jemi të interesuar për kutinë e kontrollit "Kërkesë me porosi". Kjo do të na zbulojë të gjitha avantazhet e një liste dinamike. Ne do të kemi mundësinë të shkruajmë kërkesën tonë, me parametra. Kontrolloni kutinë dhe klikoni lidhjen "Hap":

Do të hapet një dritare me kodin e përfunduar në . Tani për tani, të gjitha fushat e drejtorisë "Nomenklatura" janë renditur thjesht atje.

Merrni 267 mësime video në 1C falas:

Siç mund ta shihni, ekziston një buton i thirrjes " " dhe një kuti kontrolli që bën të mundur ndryshimin dinamik të përmbajtjes së listës. Kjo do të thotë, kur një përdorues tjetër ndryshon diçka në drejtori, ajo gjithashtu do të ndryshojë në listën tonë. Përveç kësaj, ekziston një skedë "Cilësimet", por ne do ta prekim atë më vonë.

Pyetje e personalizuar në listën dinamike

Së pari, le të krijojmë kërkesën që na nevojitet me bilancet dhe çmimet. Kështu:

Skeda "Cilësimet".

Dhe tani pjesa më e mirë! Shkoni te skedari "Cilësimet". Dhe menjëherë shohim që në skedën e parë mund të bëjmë çdo zgjedhje për çdo fushë në kërkesë:

Vendosja programatike e parametrave të pyetjes në një listë dinamike 1C 8.3

Mos harroni se ne kemi dy parametra në kërkesë: "Periudha" dhe "Lloji i çmimit". Ne duhet t'i kalojmë ato në kërkesë, përndryshe do të ketë një gabim.

Le t'i shkruajmë këto parametra në parametrat e formës dhe të shtojmë rreshtat e mëposhtëm në modulin e formularit:

Lista &OnServerProcedureWhenCreatingOnServer(Dështimi,Përpunimi standard). Opsione. SetParameterValue("Periudha" , Parametrat. Data) ; Listë. Opsione. SetParameterValue("PriceType", Parameters.PriceType) ; Fundi i procedurës

Në procesin e finalizimit të konfigurimeve, çdo programues 1C ndeshet me lista dinamike.
Një listë dinamike është një objekt ndërfaqe që përdoret për të shfaqur lista të ndryshme të objekteve të bazës së të dhënave ose hyrjeve të të dhënave jo-objekte - regjistrime.
Për shembull, një listë dinamike përdoret për të shfaqur një listë artikujsh:

Për të demonstruar aftësitë e një liste dinamike, le të krijojmë përpunim të jashtëm dhe të shtojmë formën kryesore. Le të shtojmë një atribut të ri në formular me llojin "Lista Dinamike". Le të shkojmë në pronat e tij dhe të shohim se çfarë ka atje.
Ne jemi të interesuar për pronën “Kërkesë me porosi”. Aktivizimi i tij do të na tregojë të gjitha aftësitë e një liste dinamike. Ne do të jemi në gjendje të shkruajmë një kërkesë duke përdorur pothuajse të gjitha aftësitë e gjuhës së pyetjeve të sistemit 1C: Enterprise. Kontrolloni kutinë dhe klikoni lidhjen "Hap":

Si parazgjedhje, lista jonë do të shfaqë një listë artikujsh me bilancin total për të gjitha magazinat. Për të zbatuar një listë të tillë, shtoni pyetjen e mëposhtme:


Si tabelë kryesore, ne do të zgjedhim "Directory.Nomenklature", kjo do të na lejojë të punojmë me një listë dinamike, si me një listë të nomenklaturës - shtoni, ndryshoni, shënoni elementë të drejtorisë për fshirje. Gjithashtu, instalimi i tabelës kryesore bën të mundur leximin dinamik të të dhënave - kjo do të thotë se përzgjedhja do të bëhet në pjesë, sipas nevojës.
Tjetra, ne duhet të krijojmë elemente të formës për listën tonë:

Nëse përpiqemi të ekzekutojmë përpunimin tonë në këtë formë, do të marrim një gabim:


Për ta eliminuar atë, duhet të vendosni një vlerë për parametrin "Periudha". Për ta bërë këtë, mund të përdorni metodën "SetParameterValue" të koleksionit "Parameters" të listës dinamike. Metoda merr dy parametra:
. "Parameter" - Lloji: String; Parametri i Kompozimit të të Dhënave. Emri i parametrit ose parametrit të përbërjes së të dhënave, vlera e të cilit dëshironi të vendosni;
. “Vlera” - Lloji: Arbitrarë. Vlera për të vendosur.
Mund të thirret në mbajtësin "OnCreateOnServer" të formularit:

Keni një pyetje apo keni nevojë për ndihmë nga një konsulent?


Ne do t'i ofrojmë përdoruesit mundësinë për të ndryshuar periudhën për marrjen e bilanceve. Për ta bërë këtë, shtoni atributin dhe elementin e formës "Data" të lidhur me të:


Në mbajtësin "OnChange" të elementit të formularit "Date", ne do të thërrasim metodën "SetParameterValue", duke kaluar vlerën e atributit të lidhur si vlerë. Në mënyrë të ngjashme, le të ndryshojmë procedurën "Kur krijoni në server" të formularit. Meqenëse metoda është e disponueshme në klient, nuk ka nevojë të telefononi serverin:


Tani kur ndryshon data, bilancet do të përditësohen automatikisht:




Le të supozojmë se përdoruesit duan të shohin ose bilancet aktuale ose faturat e planifikuara. Le të shqyrtojmë një nga opsionet e zbatimit. Le të shtojmë një atribut të formës së tipit boolean dhe një ndërprerës të lidhur:


Kur ndryshojmë vlerën e çelësit, ne do të ndryshojmë tekstin e kërkesës. Për ta bërë këtë, ne do të përdorim mbajtësin e ngjarjeve "On Change" për elementin e formularit "Shfaq sasinë në faturë". Duhet të ndryshojmë veçorinë “QueryText” të listës dinamike në varësi të vlerës së atributit. Meqenëse kjo pronë nuk është e disponueshme te klienti, duhet të thirret një procedurë serveri:


Rezultati i ndryshimeve të bëra: