Marrja e të dhënave të shfaqura nga një listë dinamike

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.

Platforma 1C: Enterprise 8.2 mund të punojë me shumë regjistrime në një tabelë të bazës së të dhënave në një mënyrë dinamike, domethënë, të lexojë të dhënat në pjesë. Më parë në artikuj kemi shikuar mekanizmin e listave dinamike dhe metodat për optimizimin e punës me to.

Sot do të zgjidhim një problem jo standard për listat dinamike. Do të na duhet të llogarisim totalin duke përdorur atributin e dokumentit "Shuma" dhe ta shfaqim atë në fund të listës. Në mënyrë të ngjashme, llogaritni vlerën mesatare për fushën "Vlerësimi" dhe shfaqni gjithashtu në fundin e listës dinamike. Llogaritja e totalit të fushave duhet të marrë parasysh përzgjedhjen e vendosur nga përdoruesi në cilësimet e listës së dokumenteve.

E gjithë vështirësia qëndron në faktin se një listë dinamike nuk i merr të gjitha hyrjet menjëherë, por i merr ato në pjesë. Prandaj, ne nuk mund të marrim menjëherë një përmbledhje të të gjitha dokumenteve që korrespondojnë me përzgjedhjen aktuale. Si të llogarisni totalin?

Zbatimi

Dhe kështu, le të kalojmë në zgjidhjen e problemit. Le të fillojmë me ndryshimin e formës, pastaj do të përshkruajmë algoritmin për marrjen e vlerave përfundimtare.

Forma dhe ndërfaqja

Së pari, le të përgatisim një formular dokumenti për të shfaqur fushat që rezultojnë. Për ta bërë këtë, shtoni dy detaje të vargut të formës "Vlerësimi" dhe "Shuma".

Vlerat totale për dokumentet do të regjistrohen në këto detaje.

Për të shfaqur vlerat e detajeve në fundin e një liste dinamike, duhet të aktivizoni opsionin përkatës për elementin shoqërues të formularit të listës (shih pamjen e mëposhtme të ekranit).

Tani duhet të vendosni se në cilën ngjarje do të përditësohen rezultatet në fund të listës. Për lehtësinë e zhvillimit, le të shtojmë komandën "Përditëso" dhe elementin përkatës të formës në panelin e komandës. Kur të ekzekutohet kjo komandë, totalet do të përditësohen.

Në konfigurimin e testit, të cilin mund ta shkarkoni nga lidhja në fund të artikullit, shtova gjithashtu një ngjarje të përditësimit përmbledhës kur regjistroni një dokument. Në këtë rast, përdoret mekanizmi i njoftimit të formularit. Ne nuk do të ndalemi në këtë më në detaje.

Algoritmi

Pjesa më problematike mbetet - ju duhet të merrni vlerat totale. Le të vazhdojmë si më poshtë: do të formojmë një kërkesë në bazën e të dhënave për të marrë vlerat e fushave përfundimtare në përputhje me përzgjedhjen e vendosur në listën dinamike. Vlen të merret parasysh se përzgjedhja mund të ketë një kusht kompleks nga grupet.

Shënim: cilësimet për listat dinamike (shih pamjen e ekranit më lart) bazohen në mekanizmat e sistemit të përbërjes së të dhënave (DCS). Prandaj, ju mund të punoni me ta në një mënyrë të ngjashme (shtimi programor, ndryshimi, leximi, etj.).

Fazat e formimit të një kërkese për të marrë rezultate janë si më poshtë:

1. Marrim kërkesën fillestare për listën dinamike.

Siç mund ta shohim, kërkesa zgjedh të gjitha detajet e dokumentit. Për të shtuar pak më shumë kompleksitet, shtova fushën time "Niveli i Vlerësimit", krijuar nga konstrukti "SELECT".

2. Ne formojmë tekstin e kushteve të kërkesës (seksioni "KU") dhe e zëvendësojmë atë në kërkesën origjinale.

Ne duhet t'i shtojmë kushte tekstit të kërkesës së burimit të marrë në përputhje me përzgjedhjen e listës dinamike të konfiguruar.

Procedura, në varësi të llojit të elementit të përzgjedhjes së kaluar (grupi ose elementi përzgjedhës), gjeneron tekstin përkatës të kushtit. Të gjitha kushtet në një grup janë të rrethuara me kllapa, dhe ato të përfshira në grup janë gjithashtu të rrethuara me kllapa. Kushtet midis shprehjeve varen nga grupi prind (një kusht "AND" vendoset midis elementeve të lartë në hierarki).

Nëse një element ka një grup flamuri përdorimi (vetia "Përdorimi"), atëherë elementi përpunohet. Teksti i gjeneruar varet edhe nga kushti i krahasimit (E barabartë, jo e barabartë, në listë, etj.). Varësia e tekstit të gjendjes së krijuar nga lloji i krahasimit mund të shihet në funksionin e mëposhtëm.

Një tjetër funksion interesant, për mendimin tim, është "GetFieldTextByView". Është e nevojshme për të zëvendësuar fushat që formohen nga shprehjet e gjuhës së pyetjes në kushtet e pyetjes. Më sipër, shtova fushën "Niveli i vlerësimit" në kërkesën origjinale. Nëse përdoruesi e përdor atë në përzgjedhje, atëherë e gjithë shprehja duhet të zëvendësohet në kushtin e pyetjes. Ky funksion merr tekstin e fushës nga kërkesa bazuar në paraqitjen e tij. Për fusha të tilla komplekse, ai do të kthejë të gjithë tekstin e shprehjes.

Për më shumë detaje mbi algoritmin, shihni konfigurimin e testit bashkangjitur artikullit. Më poshtë është një pamje e ekranit të cilësimeve të përzgjedhjes dhe kushteve të kërkesës të krijuara për to.

Teksti i gjendjes së krijuar i shtohet kërkesës origjinale të listës dinamike. Rezultati i pyetjes vendoset në një tabelë të përkohshme.

3. Ne vendosim pyetjen e parë në një tabelë të përkohshme dhe kryejmë grupimin sipas fushave përmbledhëse me funksionet e nevojshme të grumbullimit.

Më lejoni t'ju kujtoj se duhet të marrim vlerën mesatare për fushën "Vlerësimi" dhe shumën totale për fushën "Shuma". Ne kemi krijuar tashmë një kërkesë duke marrë parasysh zgjedhjet; gjithçka që mbetet është të llogarisim vlerat totale. Kjo bëhet me kërkesën e mëposhtme:

Pas ekzekutimit të kërkesës, ne përpunojmë rezultatin që rezulton, ia kthejmë klientit dhe e shkruajmë në detajet e formularit që kemi krijuar më parë. Në fund të fundit, ne morëm rezultatet e shfaqura në fundin e listës dinamike (shih pamjen e parë të ekranit në artikull).

Optimaliteti i zgjidhjes

Në përgjithësi, kjo qasje mund të ketë një ndikim negativ në performancën. Për shembull, nëse programi llogarit totalin pa një përzgjedhje të caktuar në një listë dinamike, atëherë numri i regjistrimeve të zgjedhura mund të jetë i madh (për shembull, gjatë disa viteve). Si rezultat, çdo përditësim i rezultateve mund të zgjasë dhjetëra (!!!) sekonda. Prandaj, ka kuptim të llogariten rezultatet vetëm nëse është vendosur përzgjedhja. I vendos këto kushte në një konfigurim provë.

Plus, ne mund të llogarisim vetëm shumat dhe kërkesat në anën e serverit. Prandaj, duhet t'i qaseni seriozisht serverit, pasi procedura për azhurnimin e totalit mund të kryhet shumë shpesh. Imagjinoni një ditar faturash në arkë në një organizatë tregtare, ku mund të futen deri në 5 fatura në minutë dhe deri në 300 fatura në orë. Sa herë që shkruhet një dokument, shumat do të përditësohen. Prandaj, do të ishte e arsyeshme të reduktohej trafiku i transmetuar duke përdorur procedura jashtë kontekstit.

Pamja e mëposhtme e ekranit tregon kodin e programit për thirrjen e një funksioni të serverit jashtë kontekstit që kthen totalet.

Parametri i parë kalon përzgjedhjen e listës dinamike, i dyti është një strukturë e tipit "SelectionFieldNameSelectionFieldValueType". Ju lutemi vini re se parametri i parë në funksion merret si vlera e tij. Nuk mund të them saktësisht pse, por nëse e kalon përzgjedhjen si lidhje, platforma jep një gabim duke thënë se përzgjedhja nuk mund të ndryshohet. Gabimi u anashkalua vetëm në këtë mënyrë.->

Shënim: përdorimi i procedurave jashtë kontekstit ju lejon të zvogëloni madhësinë e trafikut të transmetuar me disa herë, pasi të dhënat e formularit nuk transmetohen në server, ndryshe nga procedurat e serverit të ndjeshëm ndaj kontekstit (direktiva "&OnServer").

konkluzioni

Si përfundim, do të them se kjo qasje për llogaritjen e totalit në një listë dinamike është e pasaktë nga pikëpamja e metodologjisë së zhvillimit. Do të ishte e saktë të merret totali me regjistra. Për shembull, në ditarin e çeqeve, përsëri, ne mund të marrim shumën e parave në arkën aktuale ose nga dokumentet ose nga regjistri përkatës i akumulimit.

Plus, përdorimi i regjistrave të akumulimit do t'ju lejojë të llogaritni totalet pa marrë parasysh përzgjedhjen, pasi sistemi funksionon në mënyrë optimale me totalet tashmë të llogaritura për muajt e mëparshëm.

Sidoqoftë, metoda e përshkruar në artikull ndodh gjatë zgjidhjes së problemeve.

Skedarët për shkarkim:

Print (Ctrl+P)

Lista dinamike

1. Informacion i përgjithshëm

Një listë dinamike është një lloj i veçantë i të dhënave që ju lejon të shfaqni informacione arbitrare nga tabelat e bazës së të dhënave në një formular. Për ta bërë këtë, duhet të specifikoni tabelën nga e cila dëshironi të shfaqni të dhënat, ose të përshkruani përzgjedhjen që rezulton në një gjuhë të pyetjes.
Mekanizmi bazohet në një sistem të përbërjes së të dhënave dhe ofron aftësi për renditjen, përzgjedhjen, kërkimin, grupimin dhe formatimin me kusht të të dhënave të marra. Në këtë rast, burimi i të dhënave është një kërkesë, e cila ose gjenerohet nga sistemi automatikisht (bazuar në të dhënat e specifikuara) ose shkruhet manualisht nga zhvilluesi.

Oriz. 1. Opsionet për krijimin e një liste dinamike

Gjatë krijimit të atributeve të formës së tipit Lista Dinamike një zhvillues mund të zgjedhë dy mënyra për të formuar një pyetje të të dhënave:
● Duke specifikuar tabelën kryesore - në këtë rast, ju vetëm duhet të specifikoni tabelën (vetia e tabelës kryesore) nga e cila dëshironi të merrni të dhëna, dhe sistemi automatikisht do të gjenerojë një pyetje për të dhënat (shih pjesën e djathtë në Fig. 1).
● Gjenerimi manual i një kërkese - për këtë ju duhet të vendosni veçorinë Custom request (shihni anën e majtë të Fig. 1). Pas kësaj, gjenerimi manual i një kërkese për marrjen e të dhënave nga infobaza do të jetë i disponueshëm.
Një pyetje mund të marrë të dhëna nga tabela të shumta, kështu që ju mund të specifikoni një tabelë primare. Kjo është në mënyrë që lista dinamike të mund të përcaktojë se cilat të dhëna janë parësore dhe cilat janë dytësore, dhe mund të zgjedhë dhe shfaqë saktë informacionin, si dhe të sigurojë komanda standarde. Sidoqoftë, nëse është e pamundur të përcaktohet tabela kryesore në pyetje, atëherë nuk mund të specifikohet, por atëherë
lista dinamike nuk do të ofrojë komanda të lidhura me tabelën kryesore. Për më tepër, në këtë rast (pa specifikuar tabelën kryesore) efikasiteti i marrjes së të dhënave nga një listë dinamike do të ulet ndjeshëm.
Për të përmirësuar performancën, rekomandohet që çdo lidhje e përdorur në një pyetje të personalizuar vetëm për të marrë të dhëna shtesë të bëhet opsionale duke përdorur një shtesë të gjuhës së pyetjeve të sistemit të përbërjes së të dhënave.
Për një listë dinamike, e cila është atributi kryesor i formës, është e mundur të vendosni vlerat e përzgjedhjes duke përdorur një parametër formulari Përzgjedhja. Për ta bërë këtë, është e nevojshme që emri i pronës së strukturës që ndodhet në parametër Përzgjedhja,
përkonte me emrin e fushës së përzgjedhjes së listës dinamike. Në këtë rast, vlera e vetive të strukturës do të vendoset si vlera e duhur e elementit të përzgjedhjes. Nëse një grup, një grup fiks ose një listë vlerash kalohet si vlera e një elementi të parametrit Selection të një forme të listës dinamike, atëherë një kusht me opsionin In List i shtohet përzgjedhjes, në vlerën e duhur. prej të cilave vendoset një listë vlerash (në të cilat janë konvertuar grupi dhe grupi fiks).
Një pyetje arbitrare në një listë dinamike mund të jetë një pyetje në të cilën një parametër përdoret për të gjeneruar vlerën e një fushe, për shembull:

ZGJIDHNI
ZGJEDHJA
KUR Dorëzimi.Koeficienti = 1 PASTAJ &Prezantimi
PER Ndryshe dorezimi. Koeficient
FUND AS Raporti
NGA

Për më tepër, nëse lloji i vlerës së parametrit ndryshon nga lloji i atributit të objektit (për shembull, Rekuizita1 ka lloj Numri, dhe vlera e parametrit është tip Linjë), më pas për të shfaqur saktë fushën, duhet të hedhni në mënyrë eksplicite vlerën e parametrit në llojin e dëshiruar:

ZGJIDHNI
ZGJEDHJA
KUR Dorëzimi.Koeficienti = 1 PASTAJ SHPREH (&Perfaqësimi AS varg(100)) TJETER Dorëzimi. Koeficient
FUND AS Raporti
NGA
Dokumenti.Dorëzimi i produkteve SI të dorëzohet

Nëse fusha me të cilën vendoset përzgjedhja është çaktivizuar duke përdorur opsionet funksionale, atëherë zgjedhja nga një fushë e tillë nuk instalohet, edhe nëse vlera e përzgjedhjes kalohet si parametra të formularit ose lidhje të parametrave të përzgjedhjes.
Duke përdorur veçorinë e leximit dinamik të të dhënave, ju tregoni në një listë dinamike nevojën për të lexuar të dhëna në pjesë të vogla
(për më shumë detaje rreth mënyrave për të marrë të dhëna duke përdorur një listë dinamike dhe ruajtjen e të dhënave, shih më poshtë). Pavarësisht nga ky atribut, zbatohen kushtet e mëposhtme:

● Nëse modaliteti i shikimit është vendosur në listën hierarkike, do të lexohen vetëm të dhënat e grupit aktual dhe të dhënat e të gjithë elementëve prindër (pa fëmijë).
● Nëse është vendosur modaliteti i pamjes së pemës, do të lexohen vetëm të dhënat nga nyjet e hapura të pemës.
● Ngarkimi një herë i të dhënave të listës dinamike nuk mbështetet nëse është caktuar shfletimi hierarkik (vetia e ekranit është caktuar në Pemë) dhe shfaqja fillestare e pemës është caktuar në Zgjero të gjitha nivelet. Për të marrë të dhëna, serverit do t'i bëhen aq kërkesa sa ka nyje në listën e shfaqur.
Brenda një rikthimi të vetëm të të dhënave, një listë dinamike ripërdor tabelat e përkohshme të krijuara më parë nëse plotësohen kushtet e mëposhtme:
● Kërkesa e grupit të listës nuk ka pyetje pas pyetjes së grupit kryesor.
● Përbërja e tabelave të përkohshme dhe fushat në to është e pandryshuar nga ekzekutimi i mëparshëm i kërkesës së grupit.

Në punën e saj, lista dinamike përdor vlerat e vetive të mëposhtme të detajeve të objektit të meta të dhënave:
● format,
● formati i redaktimit,
● sugjerim,
● shenjë për të theksuar vlerat negative,
● maskë,
● shenjë e modalitetit me shumë rreshta,
● shenjë e redaktimit të avancuar,
● modaliteti i fjalëkalimit.
Gjatë shfaqjes dhe redaktimit të përzgjedhjes dhe parametrave të sistemit të përbërjes së të dhënave, përdoret formati i redaktimit të fushës përkatëse.

2. Kufizimet dhe veçoritë

Kur vendosni përzgjedhjen në një listë dinamike, mbani mend se zgjedhja nuk ndikon në grupe nëse mënyra e shfaqjes për listën dinamike është Lista Hierarkike ose Pema. Me "grupe" nënkuptojmë një element të një drejtorie ose plani të llojeve karakteristike, vetia ThisGroup e të cilit është vendosur në True.
Kualifikimet që aplikohen automatikisht nga një listë dinamike për detajet standarde: Pronari, Prindi, Data, Periudha dhe Ky Grup zbatohen
duke përdorur mjete standarde të sistemit të përbërjes së të dhënave. Përzgjedhja, e aplikuar automatikisht nga një listë dinamike në fushat kryesore, mund të zbatohet si me mjete standarde të sistemit të përbërjes së të dhënave ashtu edhe duke shtuar drejtpërdrejt kushte në tekstin e kërkesës në fushat e tabelës kryesore. Si rezultat i aplikimit të përzgjedhjeve duke përdorur mjetet e paraqitjes, ato mund të aplikohen si në pyetjet e ndërlidhura ashtu edhe në parametrat e tabelave virtuale.

Gjatë zhvillimit të listave dinamike, rekomandohet të testohen të gjitha listat dinamike me pyetje të personalizuara. Gjatë procesit të verifikimit, duhet të siguroheni që nëse një pyetje liste përmban pyetje të ndërlidhura ose tabela virtuale, dhe në to fusha me pseudonime që përputhen me pseudonimet e detajeve standarde Pronari, Prindi, Data, Periudha, KyGrup ose fushat kryesore janë të disponueshme për përzgjedhje, atëherë këto fusha janë të vlefshme përputhen me detajet standarde me të cilat përputhet pseudonimi i tyre. Nëse nuk është kështu, duhet ta ndryshoni kërkesën në mënyrë që ato të përputhen ose
pseudonimi ishte i ndryshëm.
Nëse zgjidhni të gjeneroni manualisht një kërkesë, atëherë disa kufizime vendosen në kërkesë:
● Përdorimi i deklaratës FIRST në një pyetje të listës dinamike nuk mbështetet. Nëse keni nevojë të përdorni një përzgjedhje të kufizuar nga numri i regjistrimeve në një listë dinamike, duhet të ripunoni kërkesën për gjenerimin e një liste dinamike në mënyrë të tillë që përmbajtja aktuale e kërkesës të vendoset në një nënpyetje dhe të kufizoni numrin e regjistrimeve marrë në këtë nënpyetje. Ju gjithashtu mund të përdorni një tabelë të përkohshme në vend të një pyetjeje.
● Përzgjedhja, renditja dhe grupimi nuk mbështeten:

  • Sipas detajeve të pjesëve tabelare.
  • Shikoni fushat.
  • Fusha DataVersion.
  • Fusha e paracaktuar Emri i të dhënave.
  • Fusha e llojit të tabelës së kontabilitetit.
  • Fusha Lloji i Lëvizjes së tabelës së regjistrit të akumulimit.
  • Lloji i fushësVlerat e tabelës së planit të tipit karakteristik.
  • Fusha e tipit Lloji;
  • Fusha e tipit String (gjatësi e pakufizuar).
  • Fusha e tipit BinaryData.

● Renditja dhe grupimi sipas fushave Subconto nuk mbështetet<НомерСубконто>dhe ViewSubconto<НомерСубконто>Tabelat LëvizjetNënkonto e regjistrit kontabël.
● Grupimi sipas fushave që janë shprehje të gjuhës së pyetjes që përmbajnë funksione të përmbledhura nuk mbështetet.
● Kur zgjidhet tabela kryesore, pyetja e listës dinamike ka kufizimet e mëposhtme:

  • Bashkimet nuk mbështeten.
  • Seksioni ORDER BY nuk mbështetet. Ju duhet të përdorni një pyetje pa një tabelë kryesore ose të vendosni renditjen e nevojshme përmes cilësimeve të listës dinamike.

● Nëse një listë dinamike shfaqet si një listë hierarkike ose pemë, atëherë një hyrje nuk do të shfaqet si një listë dinamike nëse nuk shfaqet të paktën një prind i asaj hyrjeje. Me fjalë të tjera, për të shfaqur një element të një liste hierarkike, një listë dinamike duhet gjithashtu të shfaqë të gjithë prindërit e atij elementi deri në krye të listës. Në këtë rast, me krye të listës nënkuptojmë ose
elementi rrënjë i objektit hierarkik i shfaqur nga një listë dinamike, ose elementi i vendosur si veti ParentTopLevel e një zgjerimi të tabelës së formës për një listë dinamike.

Përdorimi i tabelave të mëposhtme si tabelë kryesore e një liste dinamike nuk mbështetet:

● Një tabelë që nuk ka një çelës që identifikon në mënyrë unike çdo rekord tabele (një referencë për tabelat e objekteve dhe një çelës regjistrimi për tabelat e regjistrave). Sidoqoftë, tabelat e mëposhtme mund të vendosen si tabela kryesore e një liste dinamike (pavarësisht se nuk ka një çelës):

● Tabela nënkonto e regjistrit kontabël;
● të gjitha tabelat virtuale të regjistrit kontabël, përveç tabelës MovementsSubconto;
● tabela me vlera konstante (përfshirë tabelën e konstanteve);
● tabelat e burimeve të jashtme të të dhënave pa fusha kyçe;
● tabela kubike të burimeve të jashtme të të dhënave;
● tabelat e regjistrit të grumbullimit:

  • tabela e revolucionit;
  • tabela e bilancit;
  • tabela e qarkullimit dhe e bilanceve.

● tabelat e regjistrit të llogaritjes:

  • tabela e periudhës aktuale të vlefshmërisë;
  • të dhënat e planit;
  • të dhëna bazë.

● Tabelat e pjesëve tabelare të objekteve;
● Ndryshimi i tabelave të regjistrimit (përdoret në mekanizmat e shkëmbimit të të dhënave);
● Tabelat e renditjes;
● Tabelat e konvertimit (të përdorura në mekanizmat periodikë të shlyerjes).
● Një tabelë që përdoret në një pyetje vetëm në një bashkim të jashtëm.

Me fjalë të tjera, një listë dinamike me tabelën kryesore të specifikuar do të funksionojë saktë nëse, si rezultat i ekzekutimit të pyetjes,
i specifikuar si burim i të dhënave, numri i rreshtave të marra nga tabela kryesore nuk rritet (duke marrë parasysh përzgjedhjen e imponuar). Nëse, si rezultat i ekzekutimit të një pyetjeje, rritet numri i rreshtave të marra nga pyetja nga tabela kryesore, kjo do të çojë në një shkelje të veçantisë së çelësit të të dhënave të tabelës së shfaqur nga lista. Në këtë rast, duhet të çaktivizoni përdorimin e tabelës kryesore të listës dinamike.
Kur punoni me një listë dinamike, duhet të merrni parasysh të drejtat e aksesit në detajet e shfaqura nga lista:
● Të dhënat nga kolonat e listës dinamike që janë shënuar me veçorinë "Përdor gjithmonë", por për të cilat përdoruesi aktual nuk ka të drejtën "Shiko", nuk transmetohen në anën e klientit. Qasja në të dhënat e kolonave të tilla (duke përdorur veçorinë CurrentData dhe metodën RowData())
nuk është e mundur nga ana e klientit.
● Nëse përdoruesi aktual nuk ka pamjen e duhur në një fushë kyçe të një liste dinamike, marrja e të dhënave nga ajo listë dinamike rezulton në një gabim të shkeljes së aksesit.
Për një listë dinamike që shfaq një listë numërimi, nuk ka asnjë mundësi për të personalizuar në mënyrë interaktive listën.
Përbërja e kolonave dhe cilësimet e listës dinamike shoqërohen me fushat e pyetjeve duke përdorur pseudonimet e fushave të përzgjedhjes. Nëse një pseudonim nuk është specifikuar në mënyrë eksplicite në një pyetje për një fushë përzgjedhjeje dhe fusha është e sistemit, atëherë emri i fushës për versionin anglisht të gjuhës së integruar përdoret si një pseudonim.
Marrëdhënia e specifikuar do të thotë që kur ndryshoni (ose specifikoni në mënyrë eksplicite një pseudonim për një fushë për të cilën është përdorur një pseudonim automatik)
pseudonimi i fushës së pyetjes që gjeneron të dhënat e listës dinamike, cilësimet e atributeve të listës dinamike do të humbasin, elementët e formularit do të "humbin" detajet e shfaqura, cilësimet e listës dinamike do të bëhen të pasakta, etj.
Nëse burimi i të dhënave të një liste dinamike është një tabelë (e rregullt ose virtuale), e cila ju lejon të vendosni një përzgjedhje sipas periudhës, atëherë nëse përdoruesi cakton periudhën e shfaqjes në një listë të tillë dinamike (komandë Set interval data...),
kufijtë e specifikuar të periudhës do të vendosen si vlera të përzgjedhjes ose parametra të tabelës virtuale. Nëse me anë të shtrirjes gjuhësore
pyetjet për sistemin e përbërjes së të dhënave, emrat e parametrave të tabelës virtuale u specifikuan në mënyrë eksplicite - parametrat me të specifikuar
emrat. Tabelat për të cilat është e mundur të kontrollohet periudha për shfaqjen ose përpunimin e të dhënave:
● tabelat e regjistrimit (kryesore ose virtuale), për të cilat është e mundur të zgjidhen sipas periudhës (për regjistrin e llogaritjes - sipas periudhës së regjistrimit);
● tabelat kryesore të dokumenteve, proceseve të biznesit dhe detyrave;
● tabelat kryesore të ditarëve të dokumenteve;
● tabelat e sekuencës kryesore, tabelat e kufirit të sekuencës.
Parametri i pyetjes së listës dinamike mund të jetë një grup ose një listë vlerash. Megjithatë, nëse parametri është një listë vlerash, atëherë vetëm vlera e parë në listë do të përdoret si vlerë e përzgjedhjes. Nëse një listë dinamike përdor një pyetje me parametra, vendosja fillestare e vlerave të parametrave duhet të kryhet në mbajtësin OnCreateOnServer.
Kur shfaqni të dhënat e listës dinamike, mbani parasysh pikat e mëposhtme:
● Kur ndryshoni në mënyrë programore vetitë e një liste dinamike, panelet e komandave të lidhura me listën nuk ripopullohen automatikisht.
me këtë listë dinamike.
● Nëse fusha të shumta janë grupuar në një grup me modalitetin e grupimit në një qelizë dhe në fushat e grupuara ka një fushë që shfaqet si një kuti kontrolli, atëherë kjo kuti e kontrollit do të shfaqet gjithmonë e para në qelizën që rezulton (në të majtë të tekst).
Në një listë dinamike, kur përcaktohet lloji i të dhënave për fushat, shprehjet e të cilave përfshijnë parametra, fusha ose fjalëpërfjalë, lloji që rezulton përcaktohet nga llojet e fushave dhe literaleve. Nëse lloji i vlerës së parametrit nuk përfshihet në llojin e të dhënave që rezulton, vlera e tij do të shkurtohet.
Për shembull, në shembullin e mëposhtëm fusha do të jetë e tipit Number.

ZGJEDHJA
KUR ËSHTË GËNJESHTRË
PASTAJ 5
PER Ndryshe
&Parametri
FUND

Nëse e vendosni parametrin Parametri në një vlerë të një lloji tjetër, lista dinamike për atë fushë do të marrë vlerën 0 (vlera e paracaktuar për llojin e numrit).
Nëse në një situatë të tillë ju duhet të zgjidhni një parametër të një lloji tjetër, rekomandohet të përdorni konstruktin e gjuhës së pyetjes EXPRESS. Për shembull,
nëse në shembullin e mësipërm ju duhet të kaloni një varg jo më të gjatë se 100 karaktere në parametër, atëherë duhet të zëvendësoni treguesin e thjeshtë të parametrit me një shprehje me një cast të tipit eksplicit:

ZGJEDHJA
KUR ËSHTË GËNJESHTRË
PASTAJ 5
PER Ndryshe
EXPRESS (&Parametri AS varg (100))
FUND

Nëse teksti arbitrar i një kërkese të listës dinamike përdor parametra në shprehjet e fushave të përzgjedhjes, duhet të tregoni në mënyrë eksplicite llojin e parametrave duke përdorur konstruktin EXPRESS. Për shembull, në vend të &Nomenklatura AS Nomenklatura përdorni
EXPRESS(&Nomenklatura AS Drejtoria.Nomenklatura) AS Nomenklatura. Përndryshe, kërkimi përmes shiritit të kërkimit mund të funksionojë
të pasakta ose prodhojnë gabime.

3. Metodat për marrjen dhe ruajtjen e të dhënave me një listë dinamike

Kur merrni të dhëna për t'u shfaqur, një listë dinamike përdor një nga tre metodat:
1. Leximi nga baza e të dhënave kryhet në copa me një numër elementësh të dhënash pak më të madh se numri i rreshtave të shfaqura njëkohësisht nga lista (por jo më pak se 20). Të dhënat nuk ruhen në server.
2. Leximi nga baza e të dhënave bëhet në faqe me 1000 elementë të dhënash. Të dhënat po ruhen në server. Të dhënat hierarkike ruhen në memorie të fshehtë: jo më shumë se 2 faqe elementësh ruhen në memorie për çdo prind. Jo më shumë se 20 faqe artikujsh ruhen në memorie për çdo listë dinamike. Memoria e memories do të aktivizohet nga një listë dinamike për tabelat e mëposhtme:
● Kriteret e përzgjedhjes;
● Të gjitha tabelat e regjistrit kontabël, përveç tabelës kryesore dhe tabelës MovementsSubconto;
● Të gjitha tabelat e regjistrave të grumbullimit, përveç tabelës kryesore;
● Të gjitha tabelat e regjistrit të informacionit, përveç tabelës kryesore;
● Të gjitha tabelat e regjistrit llogaritës, përveç tabelës kryesore;
● Tabela virtuale e detyrave sipas performuesit;
● Tabelat e burimeve të jashtme pa çelësa;
● Kube nga burime të jashtme.

3. Leximi nga baza e të dhënave kryhet në faqe me 1000 elementë. Pjesa e parë është e barabartë me 1 faqe. Çdo pjesë pasuese rritet me 1 faqe (kur të arrihet fundi i mostrës së mëparshme). Sa më afër "pika e shikimit" të lëvizë në fund të të dhënave të shfaqura, aq më i madh lexohet kampioni nga baza e të dhënave, duke u bërë përfundimisht i barabartë me të gjitha të dhënat e shfaqura. Të dhënat po ruhen në server. Numri maksimal i hyrjeve në cache dhe listën dinamike është 1,000,000.
Në varësi të asaj që zgjidhet nga tabela kryesore e listës dinamike dhe çfarë vlere merr vetia e leximit dinamik, përdoret një ose një metodë tjetër e leximit të të dhënave:

● Një nga tabelat e mëposhtme është specifikuar si vlera e pronës së tabelës kryesore: plani i shkëmbimit, drejtoria, lista e dokumenteve, ditari i dokumenteve, plani i llojeve të karakteristikave, plani i llogarive, plani i llojeve të llogaritjes, procesi i biznesit, detyra, tabela e Pikat e procesit të biznesit:



● Një nga tabelat e mëposhtme është specifikuar si vlera e veçorisë së tabelës kryesore: tabela kryesore e regjistrit të informacionit, regjistri i grumbullimit, regjistri i kontabilitetit, regjistri i llogaritjes, tabela virtuale e regjistrit kontabël MovementsSubconto:

● Vetia e leximit dinamik:
● Instaluar: përdoret metoda 1 (përshkrimi i metodave është dhënë më lart).
● Rivendosja: Përdoret metoda 2 (përshkrimi i metodave është dhënë më sipër).

● Vetia e tabelës kryesore përmban tabelën e kritereve të përzgjedhjes ose tabelën e detyrave sipas ekzekutuesit (Detyrat Nga Performuesi):
● Tasti që identifikon një rresht tabele: Lidhja.

● Vetia e tabelës kryesore specifikon tabelën virtuale të regjistrit të informacionit SliceFirst ose SliceLast:
● Tasti që identifikon një rresht tabele: RecordKey.
● Vetia e leximit dinamik nuk është e zbatueshme.
● Përdoret metoda 2 (përshkrimi i metodave është dhënë më sipër).

● Vetia e tabelës kryesore vendoset në një nga tabelat e regjistrit virtual, përveç atyre të listuara më sipër:

● Vetia e leximit dinamik nuk është e zbatueshme.

● Vetia e tabelës kryesore nuk është specifikuar, përdoret një pyetje arbitrare:
● Tasti që identifikon një rresht tabele: Numri.
● Vetia e leximit dinamik nuk është e zbatueshme.
● Përdoret metoda 3 (përshkrimi i metodave është dhënë më sipër).

Për shfaqje, të dhënat i transferohen klientit në pjesë, madhësia e të cilave është e ngjashme me madhësinë e porcionit në metodën e parë të leximit të të dhënave (të përshkruara në fillim të këtij seksioni).
Kur krijoni një formë që përmban një listë dinamike, 45 artikuj të dhënash për secilën listë dinamike të dukshme i kalohen fillimisht klientit (nëse lista ka më shumë se 45 artikuj). Nëse lista dinamike shfaq më shumë se 45 rreshta, do të bëhet një telefonatë shtesë e serverit kur të hapet formulari për të marrë artikujt e të dhënave që mungojnë.

4. Cilësimet e listës dinamike

Cilësimet e listës së pronave - duke klikuar mbi lidhjen Open hap një formular për konfigurimin e shfaqjes së një liste dinamike. Vendosja e një liste bëhet në të njëjtën mënyrë si operacionet e ngjashme në një sistem të përbërjes së të dhënave.


Oriz. 2. Stilimi i kushtëzuar i një liste dinamike

Kur vendosni një listë dinamike në konfigurim, zhvilluesi i aplikacionit ka mundësinë të bëjë sa më poshtë:
● vendosni fushat sipas të cilave dëshironi të renditni;
● përshkruani përzgjedhjen e të dhënave në listë;
● specifikoni cilësimet e paraqitjes së kushtëzuar;
● vendosni fushat sipas të cilave dëshironi të gruponi të dhënat.
Ka kuptim të vendosni renditjen tek zhvilluesi nëse nuk jeni të kënaqur me renditjen e paracaktuar të instaluar nga sistemi.

KËSHILLA. Duhet mbajtur mend se përzgjedhja e dobët e fushave të renditjes (si dhe përzgjedhja dhe grupimi i të dhënave) ndikon negativisht në efikasitetin e kampionimit dinamik.
Nga këndvështrimi i një zhvilluesi të aplikacionit, cilësimet e listës dinamike përbëhen nga disa pjesë që janë të ndërlidhura. Vetia kryesore përmes së cilës mund të menaxhoni cilësimet e një liste dinamike është Cilësimet e Linker. Ky objekt përmban tre grupe cilësimesh që, kur sistemi funksionon, përcaktojnë cilësimet përfundimtare të aplikuara në listën dinamike:
● Cilësimet – cilësimet e krijuara në modalitetin Konfigurator. Vetia Order e listës dinamike ofron akses të shpejtë në veçorinë Settings.Order të ndërtuesit të cilësimeve të listës dinamike, kështu që konstruktet e mëposhtme janë ekuivalente:
List.Order dhe List.SettingsLinker.Settings.Order;
● Cilësimet e përdoruesit – këto janë cilësime që ndryshohen nga përdoruesi në modalitetin 1C:Enterprise;
● Fixed Settings – këto cilësime vendosen nga gjuha e integruar. Kjo pronë gjithashtu përmban vlerat e përzgjedhjes që transferohen në formë duke përdorur parametrat e saj. Karakteristikat e listës dinamike Zgjedhja, Opsionet, Paraqitja e kushtëzuar ofrojnë qasje të shpejtë në cilësimet fikse të ndërtuesit të cilësimeve të listës dinamike. Me fjalë të tjera, këto thirrje janë ekuivalente:
List.Cilësimet Kompozitor.FixedSettings.Selection dhe List.Selection.
Kur krijoni cilësimet përfundimtare për një listë dinamike, opsionet e ndryshme të cilësimeve kombinohen si më poshtë:
● Nëse çdo lloj cilësimesh është shënuar tërësisht si i personalizuar, atëherë cilësimet që rezultojnë përfshijnë cilësimet e personalizuara
(Lista.ComposerSettings.UserSettings). Për më tepër, nëse ndonjë element i cilësimeve shënohet si i padisponueshëm, atëherë këto cilësime do të vendosen në cilësimet që rezultojnë nga vetia List.Settings Composer. Cilësimet.
● Nëse ndonjë lloj cilësimesh shënohet si i personalizuar jo tërësisht, por element pas elementi, atëherë:
● Artikujt e shënuar si të personalizuar do të përfshihen në cilësimet që rezultojnë nga vetia List.SettingsComposer.CustomSettings.
● Artikujt e shënuar si të padisponueshëm do të përfshihen në cilësimet që rezultojnë nga vetia List.SettingsComposer.Settings.
● Cilësimet e fiksuara (List.SettingsComposer.FixedSettings) u shtohen cilësimeve që rezultojnë "siç është". Në të njëjtën kohë, është e papranueshme që cilësimet fikse dhe të përdoruesit të përmbajnë cilësime me të njëjtin emër, për shembull, zgjedhje me të njëjtën vlerë të majtë në gjendje.

Nëse cilësimet e listës dinamike përmbajnë cilësime që çaktivizohen duke përdorur opsionet funksionale, këto cilësime do të hiqen nga lista e cilësimeve të disponueshme kur të merren të dhënat e listës dinamike.
Kontrolli se cilat cilësime do të jenë të disponueshme për përdoruesin dhe cilat jo, bëhet në dritaren e cilësimeve të listës dinamike.


Oriz. 3. Kontrollo përfshirjen në cilësimet e përdoruesit

Kutia e kontrollit në fund të dritares (shih Fig. 3) është përgjegjëse për vendosjen e të gjithë llojit të cilësimeve në cilësimet (normale ose të shpejta). Ky funksion është i disponueshëm për përzgjedhje, renditje, grupim dhe kushtëzimin. Nëse cilësimet janë të specifikuara me modalitetin e redaktimit të zgjedhjes së shpejtë, atëherë në veçorinë e Grupit të Cilësimeve të Përdoruesit të tabelës së formularit që shfaq listën dinamike, duhet të specifikoni një grup bosh të formularit në të cilin elementet që lidhen me cilësimet e shpejta të përdoruesit të do të vendoset lista dinamike. Nëse grupi nuk është i specifikuar, cilësimet e shpejta të përdoruesit nuk do të shfaqen në formular. Është gjithashtu e mundur që në mënyrë eksplicite të thirret krijimi i cilësimeve të personalizuara duke përdorur gjuhën e integruar duke përdorur metodën CreateCustomSettingsFormItems() të shtrirjes dinamike të listës.
Është gjithashtu e mundur të zgjidhni nëse do të vendosni artikuj të caktuar të cilësimeve në cilësimet e përdoruesit. Ky funksion është i disponueshëm për përzgjedhjen dhe elementët e projektimit të kushtëzuar (shih Figurën 3).

Nëse keni nevojë të ngarkoni ndonjë cilësim të veçantë kur hapni një listë dinamike, kjo mund të bëhet në dy mënyra:
● Përdorimi i parametrit të formës së listës dinamike Cilësimet e përdoruesve. Të dhënat e përfshira në këtë parametër do të vendosen në cilësimet e listës dinamike të përdoruesit.
● Përdorimi i parametrit të formës së listës dinamikeUserSettingsKey. Nëse e specifikoni këtë parametër kur hapni një formular, atëherë cilësimet e përdoruesit të vendosura në ruajtjen e cilësimeve me çelësin e specifikuar do të ngarkohen në listën dinamike, e cila është atributi kryesor i formularit.

5. Kërkoni në një listë dinamike

Një listë dinamike e vendosur në formular ofron mundësinë për të kërkuar në mënyrë interaktive të dhënat e shfaqura. Kërkimi mund të kryhet duke përdorur mjetet e mëposhtme: shiriti i kërkimit, dialogu i kërkimit, kërkimi i vlerës aktuale, përdorimi i historisë së kërkimit dhe vendosja e periudhës (për listat dinamike që shfaqin dokumente). Rezultati i kërkimit është një grup i kufizuar regjistrimesh
një listë dinamike (e atyre të disponueshme për një përdorues të caktuar) që përputhet me kriteret e kërkimit.
Për të kontrolluar aftësitë e kërkimit të një liste dinamike, ekzistojnë tre veçori të tabelës në formën e menaxhuar që shfaq listën dinamike:
● Pozicioni i vargut të kërkimit – përcakton pozicionin e vargut të kërkimit. Mund të marrë vlerat e mëposhtme: Auto, Command Bar, Asnjë, Top, Bottom.


Oriz. 4. Kërko vargun në një listë dinamike

Nëse vlera e kësaj veçorie vendoset në Panelin e Komandës, atëherë vargu i kërkimit do të shfaqet në panelin e komandës së formës (nëse lista dinamike është atributi kryesor i formës) ose në panelin komandues të lidhur me listën dinamike. Shiriti i kërkimit i vendosur në shiritin e komandës shtypet gjithmonë në skajin e djathtë të shiritit të komandës (së bashku me butonat e vendosur në të djathtë të shiritit të kërkimit).
Nëse vetia është vendosur në Jo, atëherë vargu i kërkimit nuk do të jetë në formular dhe kur të filloni të shkruani vargun e kërkimit, do të hapet një dialog.
Nëse vetia vendoset në Top, shiriti i kërkimit do të vendoset midis shiritit të komandave të listës dhe tabelës që shfaq listën dinamike. Nëse vetia vendoset në Bottom, vargu i kërkimit do të vendoset menjëherë pas tabelës që shfaq listën dinamike.


● Nëse vetia "Modaliteti i përputhshmërisë" është caktuar në Mos përdorni ose më e vjetër se Versioni 8.3.4 – vlera është Paneli i Komandës.
Shkoni në rreshtin e kërkimit si më poshtë:
● Duke shtypur kombinimin e tastit Ctrl+F;
● Miu;
● Kur filloni të shkruani në një listë dinamike (duke marrë parasysh vlerën e vetive SearchOnTyping të listës dinamike).
● Shiko pozicionin e gjendjes – përshkruan se ku do të shfaqet gjendja e pamjes: cilat fusha u kërkuan dhe cilat vlera
kërkuar në çdo fushë. Mund të marrë vlerat e mëposhtme: Auto, Asnjë, Top, Bottom


Oriz. 5. Gjendja e kërkimit në listën dinamike

Nëse vetia vendoset në Jo, atëherë gjendja e pamjes nuk do të jetë e pranishme në formular. Si rezultat, do të jetë e mundur të përcaktohet nëse kërkimi ka përfunduar apo jo vetëm nga disponueshmëria e butonit Anulo kërkimin.
Nëse vetia vendoset në Top, gjendja e pamjes do të vendoset midis shiritit të komandave të listës dhe tabelës që shfaq listën dinamike. Nëse vetia vendoset në Bottom, gjendja e pamjes do të vendoset menjëherë pas tabelës që shfaq listën dinamike.
Nëse formulari është krijuar në versionin 1C:Enterprise 8.3.4 dhe më herët, prona vendoset në Nr. Nëse formulari është krijuar në versionin 1C:Enterprise 8.3.5 dhe më të vjetër, vetia vendoset në Auto. Vlera reale e pronës në këtë rast do të përcaktohet si më poshtë:
● Nëse vetia Compatibility Mode është vendosur në Version 8.3.4 (dhe më të ulët) – vlera Nr;
● Nëse vetia Compatibility Mode është caktuar në Mos përdorni ose më e vjetër se Versioni 8.3.4 – vlera Top;
● Pozicioni i kontrollit të kërkimit – Përcakton se ku do të shfaqet butoni i kontrollit të kërkimit. Butoni hap një meny që përmban informacionin e mëposhtëm: komandat Gjeni sipas vlerës aktuale, Kërkim i avancuar, Anulo kërkimin, Cakto periudhën (për listat e dokumenteve dhe ditarit) dhe historikun e pyetjeve të kërkimit (5 pyetjet e fundit). Vetia mund të marrë vlerat e mëposhtme: Auto, Asnjë, Paneli i komandës.


Oriz. 6. Menaxhimi i kërkimit në një listë dinamike

Nëse vetia është vendosur në Jo, atëherë butoni i kontrollit të kërkimit nuk do të jetë në formular (por komandat do të jenë të disponueshme duke përdorur menynë Më shumë). Vlera e vetive të shiritit të komandës vendos një buton në shiritin e komandave të lidhur me një tabelë që shfaq një listë dinamike.
Nëse formulari është krijuar në versionin 1C:Enterprise 8.3.4 dhe më herët, prona vendoset në Nr. Nëse formulari është krijuar në versionin 1C:Enterprise 8.3.5 dhe më të vjetër, vetia vendoset në Auto. Vlera reale e pronës në këtë rast do të përcaktohet si më poshtë:
● Nëse vetia Compatibility Mode është vendosur në Version 8.3.4 (dhe më të ulët) – vlera Nr;
● Nëse vetia "Modaliteti i përputhshmërisë" është caktuar në Mos përdorni ose më e vjetër se Versioni 8.3.4 – vlera është Paneli i Komandës;
Nëse ka disa panele komandimi në një formular, burimi i komandave për të cilat është një tabelë e formës së menaxhuar (duke shfaqur të dhënat e listës dinamike), atëherë linja e kërkimit dhe butoni i kontrollit të kërkimit do të vendosen vetëm në një panel komandimi:
● Ose në shiritin e komandave të vetë listës dinamike (nëse ka të aktivizuar plotësimin automatik)
● Ose në cilindo nga panelet e komandës së mbetur.

Le të shohim veçoritë e përdorimit të kërkimit në një listë dinamike:
● Për ta bërë kërkimin të përshtatshëm për t'u përdorur (përfshirë për sa i përket performancës), duhet të aktivizoni kërkimin me tekst të plotë për të gjitha objektet e konfigurimit që mund të përdoren si tabela kryesore e listës dinamike. Gjithashtu, kërkimi i tekstit të plotë duhet të përfshijë të gjitha detajet e objekteve të konfigurimit që mund të shfaqen në një listë dinamike dhe për të cilat mund të kërkohet një kërkim.
Nëse një objekt përjashtohet nga kërkimi me tekst të plotë, atëherë mekanizmi i kërkimit në fjalë do të funksionojë, por performanca e një kërkimi të tillë do të jetë jashtëzakonisht e ulët. Nuk rekomandohet përdorimi i kërkimit në objekte që nuk indeksohen nga kërkimi me tekst të plotë.
● Zgjidhja e aplikacionit duhet të ketë një detyrë rutinë që përditëson rregullisht indeksin e kërkimit me tekst të plotë.

● Kërkimi nuk kryhet në të gjitha kolonat e listës dinamike (dhe objektit të konfigurimit), por vetëm përmes atyre kolonave që shfaqen në tabelë.
● Kërkimi në një listë dinamike sipas fushave të llojeve të referencës me paraqitje arbitrare kryhet nga fushat që përdoren për
formimi i përfaqësimit (shih këtu). Fushat e përfshira në pamje merren duke marrë parasysh trajtuesin ViewFieldGettingProcessing() të objektit përkatës.
● Për listat dinamike me një tabelë kryesore të specifikuar, në tabelën kryesore përdoret kërkimi me tekst të plotë. Të gjitha lidhjet e pa indeksuara nga tabela kryesore do të shtohen në rezultatet e kërkimit me tekst të plotë. Rezultati i një kërkimi me tekst të plotë për tabelën kryesore përdoret si një përzgjedhje e bazuar në fushat kryesore. Një kërkim me tekst të plotë kryhet gjithashtu në fushat e shfaqura në listë nga tabelat e tjera (nëse fusha dhe objekti i konfigurimit përdorin kërkimin me tekst të plotë). Pa aktivizuar kërkimin e tekstit të plotë, të dhënat mund të jenë
gjetur, por vetë kërkimi do të jetë shumë i ngadaltë.
Nëse ndodh një gabim gjatë përpjekjes për të kryer një kërkim me tekst të plotë, kërkimi do të kryhet pa aplikuar kërkimin me tekst të plotë.
Për shembull, kjo mund të ndodhë kur kërkoni për një shkronjë dhe një numër të madh rreshtash në bazën e informacionit që fillojnë me këtë shkronjë.
● Nëse një përzgjedhje me llojin e krahasimit Equals përdoret për një fushë në tabelën kryesore të një liste dinamike, atëherë kur kryeni një kërkim me tekst të plotë, një vlerë përzgjedhjeje do t'i shtohet pyetjes së kërkimit për këtë tabelë.
● Vargu i kërkimit është i ndarë në fjalë. Kjo ndarje kryhet sipas rregullave të mëposhtme:
● Linja prishet duke përdorur karakteret e hapësirës dhe skedës si ndarës.
● Pastaj çdo fragment që rezulton përpunohet:
● Nëse fragmenti është një paraqitje e datës (me ose pa kohë) bazuar në vendndodhjen aktuale të sesionit, atëherë fjala është fragment.
● Përndryshe, fragmenti ndahet më tej duke përdorur karakteret ",.-/\" si ndarës. Në këtë rast, çdo fragment që rezulton i vargut merret si fjalë.

● Për çdo fjalë, formohet grupi i saj i kushteve, të cilat kombinohen "nga OR". Ky grup kushtesh krijohet nëse një kërkim me tekst të plotë për një fjalë të caktuar në tabelën nga e cila është marrë kjo fushë kthen të paktën një objekt, ose një kërkim me tekst të plotë nuk është përdorur për këtë fushë. Kushtet formohen si më poshtë:
● Për një fushë të tipit String, kushti është FieldName LIKE %Word%.
● Për një fushë të tipit Number, kushti ka formën FieldName=Vlera, ku Vlera është një fjalë e konvertuar në llojin Number. Nëse hedhja nuk mund të kryhet, kërkimi në terren nuk do të kryhet.
● Fjala shikohet si një nënvarg në paraqitjen e paracaktuar Boolean të përcaktuar për sesionin aktual. Nëse fjala e kërkimit gjendet në një pamje, ajo më pas kërkon vlerën që korrespondon me pamjen në të cilën është gjetur fjala. Në këtë rast, kërkimi nuk përdor pamje që janë specifikuar duke përdorur veçorinë e elementit të formës Format.
● Për një fushë të tipit Date, kushti duket si FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
treguar me një ose dy shifra, viti do të reduktohet në shekullin aktual dhe kjo vlerë do t'i shtohet kushtit të kërkimit.
● Për fushat e referencës, kryhet një kërkim në fushat e përdorura për të formuar pamjen e referencës. Kërkoni në secilën nga këto fusha
kryhet sipas rregullave të përshkruara më sipër. Kërkimi nuk përdor fushat e përdorura për të formuar një paraqitje të personalizuar të të dhënave.
Grupi i kushteve për secilën fjalë kombinohet "DHE".
● Për vlerat me zero kryesore, mund të kërkoni ose vargun me zerat kryesore ose vargun e specifikuar pa zero kryesore.
● Nëse një listë dinamike shfaq një listë dokumentesh ose një histori dokumenti, intervali i pamjes së listës që specifikoni shfaqet gjithashtu në zonën e formularit të rezervuar për shfaqjen e statusit të pamjes për listën dinamike të dëshiruar.
● Komanda e kërkimit sipas vlerës aktuale nuk është e disponueshme nëse kriteri i përzgjedhjes është tabela kryesore e listës dinamike.
● Fragmentet e gjetura të vargut theksohen kur shfaqen në tabelë.
● Vetëm një varg kërkimi mbështetet për një kolonë. Kur shtoni një pyetje të re kërkimi për një kolonë që tashmë është duke u kërkuar, shprehja e kërkimit do të zëvendësohet në vend që dy pyetjet e kërkimit të shtohen së bashku.
● Nëse formulari nuk ka një shtim të elementit të formularit të formës Shfaqja e vargut të formularit të lidhur me tabelën (vetia e shtimit të elementit të formës Burimi) që shfaq një listë dinamike, atëherë shtypja e kombinimit të tastit Ctrl+F hap dialogun e kërkimit.


Oriz. 7. Dialogu i kërkimit

Nëse formulari përmban një shtim të elementit të formës të formës Shfaqja e vargut të kërkimit të lidhur me një tabelë (vetia e shtimit të elementit të formës Burimi) që shfaq një listë dinamike, atëherë për të hapur dialogun e kërkimit duhet të përdorni komandën Kërkim i avancuar.
● Kur përdorni dialogun e kërkimit, mbani parasysh pikat e mëposhtme:
● Hapja e dialogut të kërkimit duke përdorur një shkurtore të tastierës bën që vlera e qelizës aktuale të shfaqet në rreshtin Çfarë të kërkoni dhe vlera e çelësit Si të kërkoni vendoset në Sipas përputhjes së saktë.

● Hapja e dialogut të kërkimit duke filluar drejtpërdrejt të shtypni një varg kërkimi në listën dinamike çon në faktin se vlera e çelësit Si të kërkoni është vendosur në vlerën By një pjesë e vargut dhe teksti i shtypur përfundon në Çfarë në fushën e kërkimit.

6. Marrja e të dhënave të shfaqura nga një listë dinamike

Kur përdorni listat dinamike, mund t'ju duhet të kryeni veprime të ndryshme në të dhënat e shfaqura aktualisht nga lista dinamike, duke marrë parasysh zgjedhjet dhe kërkimet e aplikuara. Veprime të tilla përfshijnë: përpunimin e informacionit të shfaqur, për shembull, ridërgimin e dokumenteve të zgjedhura ose vendosjen e disa detajeve për objektet e zgjedhura, gjenerimin e një liste të objekteve të disponueshme (me dizajn, etj.), për shembull, për printim ose ruajtje në një dokument fletëllogaritëse.
Për të marrë të dhëna që shfaqen nga një listë dinamike, duhet të përdorni GetExecutableDataCompositionSchema() dhe
GetExecutableDataCompositionSettings().
Shembull i marrjes së të dhënave:

Skema = Elements.List.GetExecutableDataCompositionSchema();
Cilësimet = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Skema, Cilësimet);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Processor i ri OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Marrja e të dhënave në një koleksion vlerash (tabela ose listë vlerash) bëhet në të njëjtën mënyrë.
Marrja e të dhënave të listës dinamike në këtë mënyrë ka një sërë veçorish që duhet të merren parasysh gjatë zhvillimit të zgjidhjeve të aplikacionit:
● Dizajni i mëposhtëm i tabelës nuk mbështetet:
● Alternimi i ngjyrave të linjës;
● Foto e kokës;
● Foto e bodrumit;
● Ngjyra e sfondit të fundvitit;
● Ngjyra e tekstit në fund të faqes;
● Fonti i fundvitit;
● Pozicioni horizontal në bodrum;
● Modaliteti i fjalëkalimit.
● Pamja e kushtëzuar e specifikuar për një formë të menaxhuar nuk mbështetet;
● Kur renditni një tabelë hierarkike në rend rritës sipas një fushe të tipit Link, të dhënat që përmbajnë një lidhje boshe vendosen gjithmonë në fillim.

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:



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