Dinamikus lista által megjelenített adatok lekérése

A primitív adattípusokon kívül, amelyek bármely programozási nyelvben megtalálhatók, vannak egyedi típusok az 1C-ben. Mindegyiknek megvannak a saját tulajdonságai, módszerei, funkciói, célja és a rendszerben való felhasználás árnyalatai. Az egyik ilyen típus a dinamikus lista, amely nagyban megkönnyíti számos alkalmazott feladatot. Éppen ezért a fejlesztőknek ismerniük kell és tudniuk kell kezelni ezt az univerzális eszközt.

A dinamikus listák jellemzői az 1C-ben

Ennek a típusnak az a célja, hogy bármilyen adatbázistáblából információt jelenítsen meg, függetlenül annak típusától. A mechanizmust az SKD alapján hozták létre, és hasonló képességekkel rendelkezik. De ez nem jelenti azt, hogy szükségszerűen az 1C nyelven kell kérést írnia, bár ez a lehetőség létezik, és ki kell használni. Egyszerűen megadhatja azt a táblát, amelynek információi érdeklik Önt, és az 1C önállóan generál egy egyszerű lekérdezést.

Ha látni szeretné, hogyan jön létre a dinamikus lista és milyen adatokat jelenít meg, meg kell nyitnia a kezelt űrlapokat a konfigurátorban, ahol az található: a részletek listájában a helyi menü segítségével nyissa meg a tulajdonságait, és figyeljen az „Egyéni Kérelem” elemet. Ha nincs jelölőnégyzet, akkor a „Fő tábla” paraméter azt az adatbázistáblát tükrözi, amelyből az adatok származnak. Ellenkező esetben a dinamikus lista egy egyéni lekérdezés adatait tükrözi, ami a listabeállítások megnyitásával tekinthető meg.

Az egyéni lekérdezési sémát sokkal gyakrabban használják, mivel ez kiváló lehetőséget biztosít a legkülönfélébb adatok kombinálására és megjelenítésére. Ezt a mechanizmust leggyakrabban a raktári egyenlegek, cikkárak, bevételek, kiadások vagy vásárlások tükrözésére használják. Óvatosan kell használnia, mivel a teljesítmény csökkenhet összetett lekérdezések esetén.

A dinamikus lista másik hasznos tulajdonsága megnyílik, ha rákattint a „Listabeállítások” feliratra. Ez a menü lehetővé teszi az információk hozzáférhetőbbé és érthetőbbé tételét a végfelhasználók számára, még szabványos mezőkészlet használata esetén is. Függetlenül attól, hogy a kérés önkényes-e vagy sem, megjelenik a „Beállítások” fül, ahol megadhatja:

  • Dinamikus listaválasztás;
  • Csoportok;
  • Válogatás;
  • Dekoráció.

A paraméterek használata a dinamikus listákat univerzálissá és meglehetősen rugalmassá teszi. Ezeket egy kezelt űrlapon is összekapcsolhatja a részletekkel, és az adatok a felhasználó által kiválasztott paraméterek függvényében változnak. Ezeknek a mechanizmusoknak a használata megérthető és értékelhető, ha figyelembe vesszük a valós életből származó problémák példáit.

Példaként tekintsük azt a feladatot, hogy a nómenklatúra maradványait egy ellenőrzött formában tükrözzük. A gyakorlatban az ilyen rendelések gyakran előfordulnak különféle konfigurációkban, és a dinamikus lista ideális eszköz. Ehhez a feladathoz egyedi lekérdezést, dinamikus lista paramétereket és annak beállításait kell használnunk.

A nagyobb áttekinthetőség érdekében hozzunk létre egy külön külső feldolgozást, és helyezzünk el rajta egy dinamikus listát. Terveink megvalósításához nem lesz elég a nómenklatúrával ellátott táblázat, ezért tetszőleges lekérdezést kell engedélyeznünk. Ebben leírjuk a címtár bal oldali kapcsolatát a tétellistával és az egyenlegnyilvántartással, és beállítjuk a címtárat főtáblaként. Ez a séma lehetővé teszi a dinamikus listával dolgozó felhasználók számára, hogy elemeket adjanak hozzá vagy módosítsanak.



SELECT NomenclatureList.Name AS Name, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList LEFT CONNECTION RegisterAccumulations,astremainings.Goods. sRemaining software NomenclatureList.Link = ProductsInWarehousesRemainings.Nomenclature WHERE

Mivel kérésünk a „CurrentDate” paramétert használta, a feldolgozás előtt be kell állítanunk az értékét. Ehhez a „When CreatedOnServer” eljárás űrlapmoduljában szabványos paranccsal rendelje hozzá a „CurrentSessionDate” funkciót. A dinamikus listát is meg kell jelenítenünk a vezérlőlapon, és az áttekinthetőség kedvéért módosítanunk kell a mezők sorrendjét. Húzza a „Fennmaradó nómenklatúra” attribútumot az űrlapelemek közé (bal felső rész), és a kék nyilakkal módosítsa a mezők sorrendjét az űrlapon lévő táblázatban.

&A szervereljáráson a szerveren létrehozva (hiba, szabványos feldolgozás) a nómenklatúra megmarad. Paraméterek. Set ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure


Már ebben a szakaszban megnyithatjuk a külső feldolgozásunkat az 1C-ben, és láthatjuk, hogy a dinamikus lista működik. Megnézhetjük az egyenlegeket, létrehozhatunk tételeket és csoportokat, és kereshetünk. Az ügyfelek gyakran azt kérik, hogy adják meg annak a dátumnak a kiválasztását, amikor az egyenlegeket látják. A dinamikus listát tartalmazó űrlap esetében ez egy további mezővel és az annak segítségével történő paraméterek beállításával érhető el.

Adja hozzá a „Date” típusú „DateRemaining” attribútumot, és vigye át az űrlapelemekhez. A mezei eseményekben létrehozzuk az „OnChange” eseményt, és megírjuk a dinamikus kérésben használt „CurrentDate” paraméter beállításának kódját. Annak érdekében, hogy az űrlap megnyitásakor a felhasználó azonnal megértse, hogy mikor látja az egyenlegeket, apró változtatásokat hajtunk végre a „When CreatedOnServer” eljáráson.



&OnServerProcedureWhenCreatingOnServer(Failure, Standard Processing)RemainingDate = CurrentSessionDate(); Elem Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Az eljárás vége &Az ügyféleljárásban Remaining DateWhenChanged(Element)Nómenklatúra Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Az eljárás vége

Ennek eredményeként a Dinamikus lista űrlapunk bármely időpontban megjelenítheti az egyenlegeket.

Az eszközkészlet képességeinek csak egy kis részét vettük figyelembe, de ez már elég ahhoz, hogy megértsük az ilyen típusú dinamikus listák kényelmét. Sok feladathoz hasonló mechanizmust használnak, de leggyakrabban a felügyelt űrlapok tipikus konfigurációiban található meg:

  1. Kiválasztás;
  2. Listák.

A dinamikus lista és kérésének fogadásához szabványos kezelt űrlapokon a fejlesztőnek meg kell nyitnia a kívánt űrlapot a konfigurátorban. A részletek részben a „DynamicList” adattípussal keresse meg a részleteket (leggyakrabban félkövérrel van kiemelve). Tulajdonságai tartalmazzák a kérés szövegét, a kijelöléseket és egyéb beállításokat.

Az 1C:Enterprise 8.2 platform dinamikusan tud dolgozni sok rekorddal egy adatbázistáblában, azaz részletekben olvassa be az adatokat. Korábban cikkeinkben megvizsgáltuk a dinamikus listák mechanizmusát és a velük végzett munka optimalizálásának módszereit.

Ma a dinamikus listák egy nem szabványos problémáját fogjuk megoldani. Ki kell számítanunk a végösszeget az „Amount” dokumentumattribútum segítségével, és meg kell jelenítenünk a lista láblécében. Hasonló módon számítsa ki az "Értékelés" mező átlagos értékét, és jelenítse meg a dinamikus lista láblécében. Az összes mező kiszámításakor figyelembe kell venni a felhasználó által a dokumentumlista beállításaiban beállított kiválasztást.

Az egész nehézség abban rejlik, hogy egy dinamikus lista nem egyszerre, hanem részletekben kapja meg az összes bejegyzést. Ennek megfelelően nem áll módunkban azonnal összefoglalni az aktuális kiválasztásnak megfelelő összes dokumentumot. Hogyan kell kiszámítani a végösszeget?

Végrehajtás

És így, menjünk tovább a probléma megoldására. Kezdjük az űrlap megváltoztatásával, majd leírjuk a végső értékek megszerzésének algoritmusát.

Forma és felület

Először készítsünk elő egy dokumentum űrlapot a kapott mezők megjelenítéséhez. Ehhez két karakterlánc-részletet adunk hozzá: „Rating” és „Amount”.

A dokumentumok teljes értéke ezekben az adatokban lesz rögzítve.

A dinamikus lista láblécében lévő részletek értékeinek megjelenítéséhez engedélyeznie kell a megfelelő opciót a listaűrlap társított eleméhez (lásd a következő képernyőképet).

Most el kell döntenie, hogy a lista láblécében szereplő eredmények melyik eseménynél frissüljenek. A fejlesztés megkönnyítése érdekében adjuk hozzá az "Update" parancsot és a megfelelő űrlapelemet a parancspanelhez. Amikor ez a parancs végrehajtódik, az összegek frissülnek.

A cikk végén található linkről letölthető tesztkonfigurációban egy összefoglaló frissítési eseményt is hozzáadtam egy dokumentum rögzítésekor. Ebben az esetben az űrlap értesítési mechanizmust kell használni. Ezzel nem foglalkozunk részletesebben.

Algoritmus

Marad a legproblémásabb rész – meg kell kapnia a teljes értékeket. Folytassa a következőképpen: kérést küldünk az adatbázisnak, hogy megkapjuk a végleges mezők értékét a dinamikus listában beállított kijelölésnek megfelelően. Érdemes megfontolni, hogy a kiválasztásnak összetett feltétele lehet a csoportokból.

Megjegyzés: a dinamikus listák beállításai (lásd a fenti képernyőképet) az adatösszetételi rendszer (DCS) mechanizmusain alapulnak. Ennek megfelelően hasonló módon lehet velük dolgozni (programozottan hozzáadni, módosítani, olvasni stb.).

Az eredmények megszerzésére irányuló kérelem elkészítésének szakaszai a következők:

1. Megkapjuk a kezdeti kérést a dinamikus listára.

Amint látjuk, a kérelem az összes dokumentumrészletet kiválasztja. A bonyolultabbá tétel érdekében hozzáadtam a saját „Értékelési szint” mezőmet, amelyet a „SELECT” konstrukció generált.

2. Megalkotjuk az igénylési feltételek szövegét ("HOL" rész), és behelyettesítjük az eredeti kérésbe.

A kapott forráskérés szövegéhez feltételeket kell hozzáadnunk a konfigurált dinamikus listaválasztásnak megfelelően.

Az eljárás az átadott kiválasztási elem típusától (csoport vagy kiválasztási elem) függően generálja a megfelelő feltétel szövegét. Egy csoportban minden feltétel zárójelben van, és a csoportba tartozókat is zárójelek veszik körül. A kifejezések közötti feltételek a szülőcsoporttól függenek (egy „ÉS” feltétel a hierarchia legfelső elemei közé kerül).

Ha egy elemhez használati jelző van beállítva ("Usage" tulajdonság), akkor az elem feldolgozásra kerül. A generált szöveg az összehasonlítási feltételtől is függ (Egyenlő, nem egyenlő, listában stb.). A generált feltétel szövegének az összehasonlítás típusától való függése a következő függvényben látható.

Egy másik érdekes funkció véleményem szerint a „GetFieldTextByView”. Arra van szükség, hogy a lekérdezési nyelvi kifejezések által alkotott mezőket behelyettesítsük a lekérdezési feltételekbe. Fent hozzáadtam az „Értékelési szint” mezőt az eredeti kéréshez. Ha a felhasználó ezt használja a kijelölésben, akkor a teljes kifejezést be kell cserélni a lekérdezési feltételbe. Ez a függvény lekéri a mező szövegét a kérésből a reprezentációja alapján. Az ilyen összetett mezőknél a kifejezés teljes szövegét adja vissza.

Az algoritmussal kapcsolatos további részletekért tekintse meg a cikkhez csatolt tesztkonfigurációt. Az alábbiakban egy képernyőkép látható a kiválasztási beállításokról és a hozzájuk generált kérési feltételekről.

A generált feltétel szövege hozzá lesz fűzve az eredeti dinamikus listakéréshez. A lekérdezés eredménye egy ideiglenes táblába kerül.

3. Az első lekérdezést egy ideiglenes táblába helyezzük, és az összesítő mezők szerinti csoportosítást végezzük a szükséges összesítő függvényekkel.

Hadd emlékeztesselek arra, hogy meg kell kapnunk az „Értékelés” mező átlagos értékét és az „Összeg” mező teljes összegét. A kijelölések figyelembevételével már generáltunk egy kérést, már csak az összértéket kell kiszámítani. Ez a következő kéréssel történik:

A kérés teljesítése után a kapott eredményt feldolgozzuk, visszaküldjük az ügyfélnek, és beírjuk a korábban elkészített űrlap adataiba. Végül a dinamikus lista láblécében megjelenő eredményeket kaptuk (lásd a cikk első képernyőképét).

A megoldás optimálissága

Általában ez a megközelítés negatív hatással lehet a teljesítményre. Például, ha a program egy dinamikus listában beállított kijelölés nélkül számolja ki a végösszeget, akkor a kiválasztott rekordok száma óriási lehet (például több éven keresztül). Ennek eredményeként az eredmények minden frissítése több tíz (!!!) másodpercig tarthat. Ezért az eredmények kiszámításának csak akkor van értelme, ha a szelekció létrejött. Ezeket a feltételeket egy tesztkonfigurációban állítottam be.

Ráadásul csak a szerver oldalon tudjuk kiszámolni az összegeket és a kéréseket. Ezért komolyan kell megközelítenie a szervert, mivel az összegek frissítésének eljárása nagyon gyakran elvégezhető. Képzeljünk el egy pénztárgép nyugtanaplót egy kereskedelmi szervezetben, ahol percenként legfeljebb 5, óránként pedig 300 bizonylatot lehet bevinni. Minden alkalommal, amikor egy dokumentumot írnak, az összegek frissülnek. Ezért indokolt lenne a továbbított forgalmat kontextuson kívüli eljárások alkalmazásával csökkenteni.

A következő képernyőképen látható a programkód egy kontextuson kívüli kiszolgáló függvény hívásához, amely összegeket ad vissza.

Az első paraméter a dinamikus listakiválasztás átadása, a második egy „SelectionFieldNameSelectionFieldValueType” típusú struktúra. Kérjük, vegye figyelembe, hogy a függvény első paramétere saját értékeként kerül megállapításra. Nem tudom pontosan megmondani, hogy miért, de ha átadja a kijelölést linkként, akkor a platform hibát jelez, hogy a kijelölés nem módosítható. A hibát csak így sikerült kijátszani.->

Megjegyzés: a kontextuson kívüli eljárások használatával többszörösére csökkentheti az átvitt forgalom méretét, mivel az űrlapadatok nem kerülnek továbbításra a szerverre, ellentétben a környezetérzékeny szervereljárásokkal ("&OnServer" direktíva).

Következtetés

Végezetül leszögezem, hogy a dinamikus listában történő végösszegek kiszámításának ez a megközelítése a fejlesztési módszertan szempontjából helytelen. Helyes lenne a teljes összeget regiszterek alapján lekérni. Például a csekknaplóban ismét az aktuális pénztárgépben lévő pénzösszeget tudjuk lekérni akár bizonylatokból, akár a megfelelő felhalmozási nyilvántartásból.

Ráadásul a felhalmozási regiszterek használata lehetővé teszi az összegek kiszámítását a kiválasztás figyelembevétele nélkül, mivel a rendszer optimálisan működik az előző hónapokra már kiszámított összegekkel.

Ennek ellenére a cikkben leírt módszer a problémák megoldása során történik.

Letölthető fájlok:

Nyomtatás (Ctrl+P)

Dinamikus lista

1. Általános információk

A dinamikus lista egy speciális adattípus, amely lehetővé teszi az adatbázistáblák tetszőleges információinak megjelenítését egy űrlapon. Ehhez meg kell adni azt a táblát, amelyből adatokat kívánunk megjeleníteni, vagy le kell írni az eredményül kapott kijelölést egy lekérdezési nyelven.
A mechanizmus egy adatösszeállítási rendszeren alapul, és lehetőséget biztosít a fogadott adatok rendezésére, kiválasztására, keresésére, csoportosítására és feltételes formázására. Ebben az esetben az adatforrás egy kérés, amelyet vagy automatikusan generál a rendszer (a megadott adatok alapján), vagy a fejlesztő kézzel ír.

Rizs. 1. Dinamikus lista létrehozásának lehetőségei

A típusú űrlapattribútumok létrehozásakor DynamicList a fejlesztő kétféleképpen választhat adatlekérdezést:
● A főtábla megadásával - ebben az esetben csak meg kell adnia a táblát (Main table property), amelyből adatokat szeretne fogadni, és a rendszer automatikusan lekérdezést generál az adatokról (lásd a jobb oldali részt a 2. ábrán). 1).
● Kérés manuális generálása – ehhez be kell állítani az Egyéni kérés tulajdonságot (lásd az 1. ábra bal oldalát). Ezt követően elérhetővé válik a kérés manuális generálása az információs bázisból való adatok beszerzésére.
Egy lekérdezés több táblából is lekérhet adatokat, így megadhat egy elsődleges táblát. Ez azért van így, hogy a dinamikus lista meg tudja határozni, melyik adat az elsődleges és melyik a másodlagos, és megfelelően tudja kiválasztani és megjeleníteni az információkat, valamint szabványos parancsokat adjon. Ha azonban nem lehet meghatározni a főtáblát a lekérdezésben, akkor azt nem lehet megadni, hanem akkor
a dinamikus lista nem ad a főtáblához kapcsolódó parancsokat. Ezenkívül ebben az esetben (a fő táblázat megadása nélkül) jelentősen csökken a dinamikus listával történő adatgyűjtés hatékonysága.
A teljesítmény javítása érdekében javasoljuk, hogy az egyéni lekérdezésekben csak további adatok beszerzése céljából használt összekapcsolásokat tegye kötelezővé az adatösszetétel rendszerlekérdezési nyelvi bővítmény használatával.
Egy dinamikus listához, amely a fő űrlapattribútum, lehetőség van kiválasztási értékek megadására egy űrlapparaméter segítségével Kiválasztás. Ehhez szükséges, hogy a paraméterben található szerkezet tulajdonság neve Kiválasztás,
egybeesett a dinamikus lista kiválasztási mező nevével. Ebben az esetben a struktúra tulajdonság értéke lesz beállítva a kiválasztási elem megfelelő értékeként. Ha egy tömböt, egy rögzített tömböt vagy egy értéklistát adunk át egy dinamikus lista űrlap Selection paraméterének elemének értékeként, akkor a megfelelő értékben hozzáadódik egy feltétel a listában opcióval. amelyből egy értéklista kerül elhelyezésre (amelyre a tömb és a rögzített tömb konvertálódik).
Egy tetszőleges lekérdezés egy dinamikus listában lehet olyan lekérdezés, amelyben egy paramétert használnak egy mező értékének generálására, például:

VÁLASZT
VÁLASZTÁS
WHEN Delivery.Együttható = 1 THEN &Presentation
EGYÉBEN Szállítás. Együttható
VÉGE AS Arány
TÓL TŐL

Továbbá, ha a paraméter értékének típusa eltér az objektum attribútum típusától (pl. Kellékek1 típusa van Szám, és a paraméter értéke típus Vonal), majd a mező helyes megjelenítéséhez a paraméterértéket kifejezetten a kívánt típusra kell önteni:

VÁLASZT
VÁLASZTÁS
WHEN Delivery.Együttható = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Delivery. Együttható
VÉGE AS Arány
TÓL TŐL
Dokumentum.Termékek kiszállítása HOGYAN Szállítás

Ha a kijelölést beállító mező le van tiltva a funkcionális beállításokkal, akkor az ilyen mező alapján történő kiválasztás nem kerül telepítésre, még akkor sem, ha a kiválasztási értéket űrlapparaméterként vagy kiválasztási paraméter hivatkozásként adják át.
A Dinamikus adatolvasás tulajdonság használatával jelezheti egy dinamikus listának, hogy az adatokat kis részletekben kell olvasni
(Az adatok dinamikus lista és adatgyorsítótár használatával történő megszerzésének módjaival kapcsolatos további részletekért lásd alább). Ettől az attribútumtól függetlenül a következő feltételek érvényesek:

● Ha a nézet mód hierarchikus listára van állítva, akkor csak az aktuális csoport adatai és az összes szülőelem (gyermekek nélkül) adatai lesznek beolvasva.
● Ha a fanézet mód be van állítva, akkor csak a nyitott fa csomópontjaiból származó adatok kerülnek beolvasásra.
● A dinamikus listaadatok egyszeri betöltése nem támogatott, ha a hierarchikus böngészés be van állítva (a Megjelenítési tulajdonság Fa értékre van állítva), és a kezdeti famegjelenítés az Összes szint kibontása értékre van állítva. Az adatok beszerzéséhez annyi kérés érkezik a szerverhez, ahány csomópont van a megjelenített listában.
Egyetlen adatlehíváson belül a dinamikus lista újra felhasználja a korábban létrehozott ideiglenes táblákat, ha a következő feltételek teljesülnek:
● A listás köteglekérdezésnek nincsenek lekérdezései a fő köteglekérdezés után.
● Az ideiglenes táblák és a bennük lévő mezők összetétele nem változott a kötegelt kérés korábbi végrehajtásához képest.

Munkájában a dinamikus lista a metaadatobjektum-részletek következő tulajdonságainak értékeit használja:
● formátum,
● szerkesztési formátum,
● tipp,
● jel a negatív értékek kiemelésére,
● maszk,
● többsoros mód jel,
● haladó szerkesztés jele,
● jelszó mód.
Az adatösszeállítási rendszer kijelölésének és paramétereinek megjelenítése és szerkesztése során a megfelelő mező szerkesztési formátuma kerül felhasználásra.

2. Korlátozások és jellemzők

Ha dinamikus listában kiválasztja a kijelölést, ne feledje, hogy a kijelölés nincs hatással a csoportokra, ha a dinamikus lista megjelenítési módja Hierarchikus lista vagy Fa. A „csoportok” alatt egy olyan jellemző típusú könyvtár vagy terv elemét értjük, amelynek ThisGroup tulajdonsága True értékre van állítva.
A dinamikus lista által automatikusan alkalmazott minősítések a Tulajdonos, Szülő, Dátum, Időszak és ThisGroup szabványos adatokra vonatkoznak.
szabványos adatalkotó rendszereszközök használatával. A kijelölés, amelyet egy dinamikus lista automatikusan alkalmaz a kulcsmezőkre, alkalmazható mind az adatösszeállítási rendszer szabványos eszközeivel, mind a feltételek közvetlen hozzáadásával a kérés szövegéhez. BAN BEN a főtábla mezőire. Az elrendezési eszközökkel végzett kijelölések alkalmazása eredményeként mind beágyazott lekérdezésekben, mind virtuális táblák paramétereiben alkalmazhatók.

Dinamikus listák fejlesztésekor ajánlatos az összes dinamikus listát egyéni lekérdezésekkel tesztelni. Az ellenőrzési folyamat során győződjön meg arról, hogy ha egy listalekérdezés beágyazott lekérdezéseket vagy virtuális táblákat tartalmaz, és ezekben a szabványos Tulajdonos, Szülő, Dátum, Időszak, ThisGroup vagy kulcsmezők álneveivel megegyező álnevekkel rendelkező mezők állnak rendelkezésre kiválasztást, akkor ezek a mezők érvényesek megfelelnek azoknak a szabványos adatoknak, amelyekkel a becenevük egyezik. Ha ez nem így van, akkor módosítani kell a kérést, hogy megfeleljenek ill
a becenév más volt.
Ha úgy dönt, hogy manuálisan generál egy kérelmet, akkor a kérelemre bizonyos korlátozások vonatkoznak:
● A FIRST utasítás használata dinamikus listalekérdezésben nem támogatott. Ha egy dinamikus listában a rekordok száma által korlátozott kijelölést kell használnia, akkor a dinamikus lista létrehozására irányuló kérést úgy kell átdolgoznia, hogy a kérelem tényleges tartalma egy részlekérdezésbe kerüljön, és korlátozza a rekordok számát. kapott ebben az allekérdezésben. Allekérdezés helyett ideiglenes táblát is használhat.
● A kijelölés, rendezés és csoportosítás nem támogatott:

  • A táblázatos részek részletezése szerint.
  • Mezők megtekintése.
  • DataVersion mező.
  • PredefinedDataName mező.
  • Számlaterv táblázat típusú mező.
  • A felhalmozási regisztertábla mozgásának típusa.
  • Mezőtípus A jellemző típusú tervtáblázat értékei.
  • Típus mező Típus;
  • String típusú mező (korlátlan hosszúságú).
  • BinaryData típusú mező.

● A Subconto mezők szerinti rendezés és csoportosítás nem támogatott<НомерСубконто>és ViewSubconto<НомерСубконто>Táblázatok MovementsSubconto a számviteli nyilvántartás.
● Az összesítő függvényeket tartalmazó lekérdezési nyelvi kifejezések mezők szerinti csoportosítása nem támogatott.
● Ha a fő tábla ki van választva, a dinamikus listalekérdezés a következő korlátozásokkal rendelkezik:

  • A csatlakozások nem támogatottak.
  • A ORDER BY szakasz nem támogatott. Használjon főtábla nélküli lekérdezést, vagy állítsa be a szükséges sorrendet a dinamikus lista beállításain keresztül.

● Ha egy dinamikus lista hierarchikus listaként vagy faként jelenik meg, akkor a bejegyzés csak akkor jelenik meg dinamikus listaként, ha legalább az egyik szülője megjelenik. Más szavakkal, egy hierarchikus lista elemének megjelenítéséhez a dinamikus listának meg kell jelenítenie az adott elem összes szülőjét a lista tetejéig. Ebben az esetben a lista tetején bármelyiket értjük
a dinamikus lista által megjelenített hierarchikus objektum gyökéreleme, vagy egy dinamikus lista űrlaptábla-kiterjesztésének ParentTopLevel tulajdonságaként beállított elem.

A következő táblázatok használata dinamikus lista fő táblázataként nem támogatott:

● Olyan tábla, amely nem rendelkezik olyan kulccsal, amely egyedileg azonosítja az egyes táblarekordokat (hivatkozás az objektumtáblákhoz és rekordkulcs a regisztertáblákhoz). A következő táblázatok azonban beállíthatók a dinamikus lista fő táblázataként (annak ellenére, hogy nincs kulcsuk):

● A számviteli nyilvántartás alkontó táblázata;
● a számviteli nyilvántartás összes virtuális táblája, kivéve a MovementsSubconto táblát;
● konstans értékek táblázatai (beleértve az Állandók táblát);
● külső adatforrások táblázatai kulcsmezők nélkül;
● külső adatforrások kockatáblázatai;
● felhalmozási regiszter táblák:

  • forradalmi asztal;
  • mérleg asztal;
  • forgalom és egyenlegek táblázata.

● számítási regiszter táblázatok:

  • táblázat a tényleges érvényességi időről;
  • ütemezési adatok;
  • alapadatok.

● Tárgyak táblázatos részeinek táblázatai;
● Regisztrációs táblák módosítása (adatcsere-mechanizmusokban használatos);
● Sorozattáblázatok;
● Konverziós táblák (időszakos elszámolási mechanizmusokban használatos).
● Egy tábla, amelyet a lekérdezésben csak külső összekapcsolásban használnak.

Más szóval, egy dinamikus lista a megadott főtáblával akkor fog megfelelően működni, ha a lekérdezés végrehajtása eredményeként
adatforrásként megadva a főtáblából nyert sorok száma nem növekszik (figyelembe véve a kiszabott kijelölést). Ha egy lekérdezés végrehajtása következtében megnő a főtáblából a lekérdezéssel kapott sorok száma, az a lista által megjelenített tábla rekordjainak kulcsának egyediségének megsértéséhez vezet. Ebben az esetben le kell tiltania a fő dinamikus listatábla használatát.
Amikor dinamikus listával dolgozik, figyelembe kell vennie a lista által megjelenített adatokhoz való hozzáférési jogokat:
● A Mindig használ tulajdonsággal megjelölt dinamikus listaoszlopokból származó adatok, amelyekhez az aktuális felhasználónak nincs megtekintési joga, nem kerülnek továbbításra a kliens oldalra. Hozzáférés az ilyen oszlopok adataihoz (a CurrentData tulajdonság és a RowData() metódus használatával)
ügyféloldalon nem lehetséges.
● Ha az aktuális felhasználó nem rendelkezik Nézet joggal egy dinamikus lista kulcsmezőjében, az adatok lekérése a dinamikus listáról hozzáférési megsértési hibát eredményez.
A felsorolási listát megjelenítő dinamikus listák esetében nincs lehetőség a lista interaktív testreszabására.
A dinamikus lista oszlopainak összetétele és beállításai a lekérdezési mezőkhöz vannak társítva a kiválasztási mezők álneveivel. Ha egy álnév nincs kifejezetten megadva egy kijelölő mező lekérdezésében, és a mező rendszerszintű, akkor a beépített nyelv angol verziójának mezőneve álnévként kerül felhasználásra.
A megadott kapcsolat azt jelenti, hogy amikor módosítja (vagy kifejezetten megad egy álnevet egy olyan mezőhöz, amelyhez automatikus álnevet használtak)
a dinamikus lista adatokat generáló lekérdezési mező álneve, a dinamikus lista attribútum beállításai elvesznek, az űrlapelemek „elvesztik” a megjelenített részleteket, a dinamikus lista beállításai hibásak lesznek stb.
Ha egy dinamikus lista adatforrása egy táblázat (normál vagy virtuális), amely lehetővé teszi időszakonkénti kijelölés beállítását, akkor ha a felhasználó egy ilyen dinamikus listában állítja be a megjelenítési időszakot (Dátumintervallum beállítása... parancs),
a megadott időszakhatárok kiválasztási értékként vagy virtuális tábla paraméterként lesznek beállítva. Ha nyelvbővítés útján
lekérdezések az adatösszeállítási rendszerhez, a virtuális tábla paramétereinek nevei kifejezetten meg voltak adva - a megadott paraméterekkel
neveket. Táblázatok, amelyeknél szabályozható az adatok megjelenítésének vagy feldolgozásának időtartama:
● regiszter táblák (fő vagy virtuális), amelyekhez időszakonként lehet kiválasztani (számítási regiszternél - regisztrációs időszak szerint);
● dokumentumok, üzleti folyamatok és feladatok főbb táblái;
● dokumentumnaplók főtáblái;
● fő sorozattáblák, szekvenciahatártáblák.
A dinamikus lista lekérdezési paramétere lehet tömb vagy értéklista. Ha azonban a paraméter értéklista, akkor csak a lista első értéke lesz kiválasztási érték. Ha egy dinamikus lista paraméterekkel rendelkező lekérdezést használ, akkor a paraméterértékek kezdeti beállítását az OnCreateOnServer kezelőben kell elvégezni.
A dinamikus listaadatok megjelenítésekor tartsa szem előtt a következőket:
● Ha programozottan módosítja egy dinamikus lista tulajdonságait, a listához tartozó parancspanelek nem töltődnek fel automatikusan újra.
ezzel a dinamikus listával.
● Ha egy cellában több mező csoportosítási móddal van csoportosítva, és a csoportosított mezőkben van egy mező, amely jelölőnégyzetként jelenik meg, akkor mindig ez a jelölőnégyzet jelenik meg először a kapott cellában (a szöveg).
A dinamikus listákban az olyan mezők adattípusának meghatározásakor, amelyek kifejezései paramétereket, mezőket vagy literálokat tartalmaznak, az eredményül kapott típust a mezők és a literálok típusa határozza meg. Ha a paraméter értéktípusa nem szerepel a kapott adattípusban, akkor annak értéke csonkolva lesz.
Például a következő példában a mező Szám típusú lesz.

VÁLASZTÁS
AMIKOR HAZUGSÁG
AKKOR 5
MÁSKÉPP
&Paraméter
VÉGE

Ha a Paraméter paramétert egy másik típusú értékre állítja be, akkor az adott mező dinamikus listája 0 értéket kap (a Szám típus alapértelmezett értéke).
Ha ilyen helyzetben más típusú paramétert kell kiválasztani, akkor javasolt a lekérdező nyelvi konstrukció használata EXPRESSZ. Például,
ha a fenti példában 100 karakternél nem hosszabb karakterláncot kell átadnia a paraméternek, akkor a paraméter egyszerű jelzését cserélje ki egy kifejezett típusú cast kifejezésre:

VÁLASZTÁS
AMIKOR HAZUGSÁG
AKKOR 5
MÁSKÉPP
EXPRESS(¶méter AS String(100))
VÉGE

Ha egy dinamikus listakérelem tetszőleges szövege paramétereket használ a kiválasztási mezők kifejezéseiben, akkor a konstrukcióval kifejezetten meg kell adni a paraméterek típusát. EXPRESSZ. Például ahelyett &Nómenklatúra AS Nómenklatúra használat
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nómenklatúra. Ellenkező esetben a keresősávon keresztül történő keresés működhet
hibás vagy hibát okoz.

3. Adatok lekérésének és gyorsítótárba helyezésének módszerei dinamikus listával

A megjelenítendő adatok beszerzésekor a dinamikus lista a három módszer egyikét használja:
1. Az adatbázisból való kiolvasás darabokban történik, az adatelemek száma valamivel nagyobb, mint a lista által egyidejűleg megjelenített sorok száma (de legalább 20). Az adatok nem tárolódnak a szerveren.
2. Az adatbázisból való kiolvasás 1000 adatelem oldalain történik. Az adatok gyorsítótárban vannak a szerveren. A hierarchikus adatok gyorsítótárazásra kerülnek: minden szülőhöz legfeljebb 2 oldalnyi elem tárolható. Egy dinamikus lista legfeljebb 20 oldalnyi elemet tárol a gyorsítótárban. A gyorsítótárazást a következő táblázatok dinamikus listája engedélyezi:
● Kiválasztási kritériumok;
● A számviteli nyilvántartás összes táblája, kivéve a főtáblát és a MovementsSubconto táblát;
● Minden felhalmozási regiszter tábla, kivéve a főtáblát;
● Az információs nyilvántartás összes táblája, kivéve a főtáblát;
● A számítási regiszter összes táblája, kivéve a főtáblát;
● Feladatok virtuális táblázata végrehajtó szerint;
● Külső források táblázatai kulcsok nélkül;
● Kockák külső forrásból.

3. Az adatbázisból való kiolvasás 1000 elemből álló oldalakon történik. Az első rész 1 oldal. Minden további rész 1 oldallal növekszik (amikor az előző minta végét érjük). Minél közelebb kerül a „nézőpont” a megjelenített adatok végéhez, annál nagyobb mintát olvasunk ki az adatbázisból, amely végül egyenlővé válik az összes megjelenített adattal. Az adatok gyorsítótárban vannak a szerveren. A gyorsítótárban és a dinamikus listában a bejegyzések maximális száma 1 000 000.
Attól függően, hogy mit választ ki a dinamikus lista főtáblája, és milyen értéket vesz fel a Dinamikus olvasási tulajdonság, az adatok beolvasásának egyik vagy másik módszere használatos:

● A Fő tábla tulajdonság értékeként a következő táblák egyike van megadva: csereterv, címtár, bizonylatok listája, bizonylatnapló, jellemzőtípusok terve, számlatükör, számítási típusok terve, üzleti folyamat, feladat, számlák táblázata. üzleti folyamat pontjai:



● A Fő tábla tulajdonság értékeként a következő táblák egyike van megadva: az információs regiszter főtáblája, a felhalmozási regiszter, a számviteli regiszter, a számítási regiszter, a MovementsSubconto számviteli regiszter virtuális táblája:

● Dinamikus olvasási tulajdonság:
● Telepítve: az 1. módszer használatos (a módszerek leírása fent található).
● Reset: A 2. módszert használja (a módszerek leírása fent található).

● A Main table tulajdonság a kiválasztási feltételtáblázatot vagy a feladattáblázatot tartalmazza végrehajtónként (Tasks By Performer):
● Táblázatsort azonosító kulcs: Link.

● A Main table tulajdonság a SliceFirst vagy SliceLast információs regiszter virtuális tábláját adja meg:
● A táblázatsort azonosító kulcs: RecordKey.
● A Dinamikus olvasás tulajdonság nem alkalmazható.
● A 2. módszert alkalmazzuk (a módszerek leírása fent található).

● A Main table tulajdonság a virtuális regisztertáblák egyikére van állítva, a fent felsoroltak kivételével:

● A Dinamikus olvasás tulajdonság nem alkalmazható.

● A Main table tulajdonság nincs megadva, tetszőleges lekérdezést használ:
● A táblázatsort azonosító kulcs: Szám.
● A Dinamikus olvasás tulajdonság nem alkalmazható.
● A 3. módszert alkalmazzuk (a módszerek leírása fent található).

A megjelenítéshez az adatokat részletekben továbbítják a klienshez, amelyek mérete megegyezik az adatolvasás 1. módszerében (a fejezet elején ismertetett) használt adag méretével.
Amikor dinamikus listát tartalmazó űrlapot hoz létre, minden látható dinamikus listához 45 adatelem kerül először az ügyfélnek (ha a lista 45-nél több elemet tartalmaz). Ha a dinamikus lista 45-nél több sort jelenít meg, akkor az űrlap megnyitásakor további szerverhívás történik a hiányzó adatelemek lekérésére.

4. Dinamikus lista beállításai

Tulajdonságlista beállításai - a Megnyitás hivatkozásra kattintva megnyílik egy űrlap a dinamikus lista megjelenítésének beállításához. A lista felállítása ugyanúgy történik, mint az adatösszeállítási rendszer hasonló műveletei.


Rizs. 2. Dinamikus lista feltételes stílusa

Amikor dinamikus listát állít be a konfigurációban, az alkalmazásfejlesztőnek lehetősége van a következőkre:
● állítsa be azokat a mezőket, amelyek szerint rendezni kíván;
● írja le a listában szereplő adatok kiválasztását;
● feltételes megjelenési beállítások megadása;
● állítsa be azokat a mezőket, amelyek szerint csoportosítani kívánja az adatokat.
Érdemes a rendezést a fejlesztőre állítani, ha nem elégedett a rendszer által beállított alapértelmezett rendezéssel.

TANÁCS. Emlékeztetni kell arra, hogy a rendezési mezők rossz kiválasztása (valamint az adatok kiválasztása és csoportosítása) negatívan befolyásolja a dinamikus mintavétel hatékonyságát.
Az alkalmazásfejlesztő szemszögéből a dinamikus listabeállítások több, egymással összefüggő részből állnak. A fő tulajdonság, amelyen keresztül a dinamikus lista beállításait kezelheti LinkerSettings. Ez az objektum három beállításkészletet tartalmaz, amelyek a rendszer futásakor meghatározzák a dinamikus listára alkalmazott végső beállításokat:
● Beállítások – a Konfigurátor módban létrehozott beállítások. A dinamikus lista Order tulajdonsága gyors hozzáférést biztosít a dinamikus lista beállításkészítőjének Settings.Order tulajdonságához, így a következő konstrukciók egyenértékűek:
List.Order és List.SettingsLinker.Settings.Order;
● UserSettings – ezek a beállítások, amelyeket a felhasználó módosít az 1C:Enterprise módban;
● Rögzített beállítások – ezek a beállítások a beépített nyelvből származnak. Ez a tulajdonság kiválasztási értékeket is tartalmaz, amelyek a paraméterei segítségével kerülnek át az űrlapra. A dinamikus listatulajdonságok Kijelölés, Beállítások, Feltételes megjelenés gyors hozzáférést biztosítanak a dinamikus listabeállítás-készítő rögzített beállításaihoz. Más szóval, ezek a hívások egyenértékűek:
List.Settings Composer.FixedSettings.Selection és List.Selection.
A dinamikus lista végső beállításainak létrehozásakor a különböző beállításokat a következőképpen kombináljuk:
● Ha bármely típusú beállítás teljesen egyéniként van megjelölve, akkor az eredményül kapott beállítások magukban foglalják az egyéni beállításokat is
(List.ComposerSettings.UserSettings). Ezen túlmenően, ha valamelyik beállítási elem nem elérhetőként van megjelölve, akkor ezek a beállítások a List.Settings Composer tulajdonságból származó beállítások közé kerülnek. Beállítások.
● Ha bármely típusú beállítás nem teljes egészében, hanem elemenként van megjelölve egyéniként, akkor:
● Az egyéniként megjelölt elemek bekerülnek a List.SettingsComposer.CustomSettings tulajdonság eredő beállításaiba.
● A nem elérhetőként megjelölt elemek bekerülnek a List.SettingsComposer.Settings tulajdonság eredő beállításaiba.
● A rögzített beállítások (List.SettingsComposer.FixedSettings) „ahogy vannak” hozzáadódnak a kapott beállításokhoz. Ugyanakkor elfogadhatatlan, hogy a fix és a felhasználói beállítások azonos nevű beállításokat tartalmaznak, például a feltételben azonos bal értékű kijelölést.

Ha a dinamikus lista beállításai olyan beállításokat tartalmaznak, amelyeket a funkcionális beállításokkal letiltottak, a dinamikus lista adatok lekérésekor ezek a beállítások törlődnek az elérhető beállítások listájáról.
A dinamikus lista beállítási ablakában szabályozható, hogy mely beállítások lesznek elérhetők a felhasználó számára, és melyek nem.


Rizs. 3. Szabályozza a felvételt a felhasználói beállításokban

Az ablak alján található jelölőnégyzet (lásd 3. ábra) felelős a beállítások teljes típusának (normál vagy gyors) elhelyezéséért. Ez a funkció kiválasztásra, rendezésre, csoportosításra és feltételezésre áll rendelkezésre. Ha a beállításokat a Gyorskiválasztás szerkesztési móddal adjuk meg, akkor a dinamikus listát megjelenítő űrlap tábla Felhasználói beállítások csoport tulajdonságában meg kell adni az űrlapnak egy üres csoportját, amelyben a gyorsfelhasználói beállításokhoz tartozó elemeket kell megadni. megjelenik a dinamikus lista. Ha a csoport nincs megadva, a gyors felhasználói beállítások nem jelennek meg az űrlapon. Lehetőség van arra is, hogy a dinamikus listabővítmény CreateCustomSettingsFormItems() metódusával kifejezetten meghívja az egyéni beállítások létrehozását a beépített nyelv használatával.
Azt is kiválaszthatja, hogy elhelyezzen-e bizonyos beállításokat a felhasználói beállításokban. Ez a funkció a kiválasztáshoz és a feltételes tervezési elemekhez érhető el (lásd 3. ábra).

Ha egy dinamikus lista megnyitásakor különleges beállításokat kell betölteni, ezt kétféleképpen teheti meg:
● A dinamikus lista űrlap UserSettings paraméterének használata. Az ebben a paraméterben szereplő adatok a felhasználó dinamikus lista beállításaiba kerülnek.
● A paraméterUserSettingsKey dinamikus lista űrlap használatával. Ha egy űrlap megnyitásakor megadja ezt a paramétert, akkor a beállítások tárolójában található felhasználói beállítások a megadott kulccsal betöltődnek a dinamikus listába, amely az űrlap fő attribútuma.

5. Keresés egy dinamikus listában

Az űrlapon található dinamikus lista lehetővé teszi a megjelenített adatok interaktív keresését. A keresés a következő eszközökkel végezhető el: keresősáv, keresőablak, aktuális érték keresése, keresési előzmények felhasználása és időszak beállítása (dokumentumokat megjelenítő dinamikus listák esetén). A keresés eredménye korlátozott számú rekord
dinamikus lista (azok közül, amelyek egy adott felhasználó számára elérhetők), amelyek megfelelnek a keresési feltételeknek.
A dinamikus lista keresési funkcióinak szabályozásához három táblázattulajdonság van a dinamikus listát megjelenítő felügyelt űrlapon:
● Keresési karakterlánc pozíciója – meghatározza a keresési karakterlánc pozícióját. A következő értékeket veheti fel: Auto, Command Bar, None, Top, Bottom.


Rizs. 4. Keresési karakterlánc dinamikus listában

Ha ennek a tulajdonságnak az értéke Parancspult, akkor a keresési karakterlánc megjelenik az űrlapparancspanelen (ha a dinamikus lista a fő űrlapattribútum) vagy a dinamikus listához társított parancspanelen. A parancssorba helyezett keresősáv mindig a parancssor jobb széléhez van nyomva (a keresősáv jobb oldalán található gombokkal együtt).
Ha a tulajdonság értéke Nem, akkor a keresési karakterlánc nem lesz az űrlapon, és amikor elkezdi beírni a keresési karakterláncot, megnyílik egy párbeszédablak.
Ha a tulajdonság Top értékre van állítva, a keresősáv a lista parancssora és a dinamikus listát megjelenítő táblázat között található. Ha a tulajdonság alsó értékre van állítva, a keresési karakterlánc közvetlenül a dinamikus listát megjelenítő táblázat mögé kerül.


● Ha a Kompatibilitási mód tulajdonság beállítása Ne használjon, vagy a 8.3.4-es verziónál régebbi – az érték a Parancspult.
Lépjen a keresősorra az alábbiak szerint:
● A Ctrl+F billentyűkombináció megnyomásával;
● Egér;
● Amikor elkezd beírni egy dinamikus listát (figyelembe véve a dinamikus lista SearchOnTyping tulajdonságának értékét).
● Nézet állapot pozíciója – leírja, hogy hol jelenik meg a nézet állapota: milyen mezőkben keresett és milyen értékeket
minden területen keresett. A következő értékeket veheti fel: Auto, None, Top, Bottom


Rizs. 5. Keresés állapota a dinamikus listában

Ha a tulajdonság értéke Nem, akkor a nézet állapota nem lesz jelen az űrlapon. Ennek eredményeként csak a Keresés törlése gomb elérhetősége alapján lehet majd megállapítani, hogy a keresés befejeződött-e vagy sem.
Ha a tulajdonság Top értékre van állítva, a nézet állapota a lista parancssora és a dinamikus listát megjelenítő táblázat között lesz. Ha a tulajdonság alsó értékre van állítva, a nézet állapota közvetlenül a dinamikus listát megjelenítő táblázat után kerül.
Ha az űrlapot az 1C:Enterprise 8.3.4-es vagy korábbi verziójában hozták létre, akkor a tulajdonság értéke No. Ha az űrlapot az 1C:Enterprise 8.3.5-ös vagy régebbi verziójában hozták létre, a tulajdonság Auto értékre van állítva. Az ingatlan valós értéke ebben az esetben a következőképpen kerül meghatározásra:
● Ha a Kompatibilitási mód tulajdonság 8.3.4-es (és régebbi) verzióra van állítva – No érték;
● Ha a Kompatibilitási mód tulajdonság beállítása Ne használjon, vagy régebbi, mint a 8.3.4-es verzió – érték Top;
● Search Control Position – Meghatározza, hogy hol jelenjen meg a keresésvezérlő gomb. A gomb megnyit egy menüt, amely a következő információkat tartalmazza: parancsok Keresés aktuális érték szerint, Speciális keresés, Keresés megszakítása, Időszak beállítása (dokumentum- és naplólistákhoz) és keresési lekérdezések előzményei (utolsó 5 lekérdezés). A tulajdonság a következő értékeket veheti fel: Auto, None, Command panel.


Rizs. 6. Keresés kezelése dinamikus listában

Ha a tulajdonság értéke Nem, akkor a keresésvezérlő gomb nem lesz az űrlapon (de a parancsok elérhetők lesznek a További menüben). A Command Bar tulajdonság értéke egy gombot helyez el a dinamikus listát megjelenítő táblázathoz társított parancssorban.
Ha az űrlapot az 1C:Enterprise 8.3.4-es vagy korábbi verziójában hozták létre, akkor a tulajdonság értéke No. Ha az űrlapot az 1C:Enterprise 8.3.5-ös vagy régebbi verziójában hozták létre, a tulajdonság Auto értékre van állítva. Az ingatlan valós értéke ebben az esetben a következőképpen kerül meghatározásra:
● Ha a Kompatibilitási mód tulajdonság 8.3.4-es (és régebbi) verzióra van állítva – No érték;
● Ha a Kompatibilitási mód tulajdonság beállítása Ne használjon, vagy a 8.3.4-es verziónál régebbi – az érték a Parancspult;
Ha egy űrlapon több parancspanel is található, amelyekhez a parancsok forrása a kezelt űrlap egyik táblája (amely dinamikus listaadatokat jelenít meg), akkor a keresősor és a keresésvezérlő gomb csak egy parancspanelben található:
● Vagy magának a dinamikus lista parancssorában (ha engedélyezve van az automatikus kiegészítés)
● Vagy a többi parancspanelen.

Nézzük meg a dinamikus listában történő keresés használatának jellemzőit:
● Ahhoz, hogy a keresés kényelmes legyen (a teljesítmény szempontjából is), engedélyeznie kell a teljes szöveges keresést minden konfigurációs objektumra, amely a dinamikus lista fő táblázataként használható. Ezenkívül a teljes szöveges keresésnek tartalmaznia kell a konfigurációs objektumok minden részletét, amelyek megjelenhetnek egy dinamikus listában, és amelyekhez keresésre lehet szükség.
Ha egy objektumot kizárunk a teljes szöveges keresésből, akkor a szóban forgó keresési mechanizmus működik, de egy ilyen keresés teljesítménye rendkívül alacsony lesz. Nem ajánlott a keresést olyan objektumokon használni, amelyeket nem indexel a teljes szöveges keresés.
● Az alkalmazásmegoldásnak rendelkeznie kell egy rutinfeladattal, amely rendszeresen frissíti a teljes szöveges keresési indexet.

● A keresés nem a dinamikus lista (és a konfigurációs objektum) összes oszlopában történik, hanem csak a táblázatban megjelenő oszlopokon keresztül.
● A dinamikus listában a referenciatípusok tetszőleges ábrázolású mezői alapján történő keresést a használt mezők végzik
reprezentáció kialakítása (lásd itt). A nézetben szereplő mezőket a megfelelő objektum ViewFieldGettingProcessing() kezelőjének figyelembevételével kapjuk meg.
● Meghatározott főtáblázattal rendelkező dinamikus listák esetén teljes szöveges keresést használunk a főtáblán. A fő táblázat összes nem indexelt hivatkozása hozzáadódik a teljes szövegű keresési eredményekhez. A főtábla teljes szöveges keresésének eredménye kulcsmezők alapján kerül kiválasztásra. A teljes szöveges keresést a listában más táblákból megjelenített mezőkben is végrehajtja (ha a mező és a konfigurációs objektum teljes szöveges keresést használ). A teljes szöveges keresés engedélyezése nélkül előfordulhat, hogy az adatok
talált, de maga a keresés nagyon lassú lesz.
Ha hiba történik a teljes szöveges keresés végrehajtása során, a keresés a teljes szöveges keresés alkalmazása nélkül történik.
Ez például akkor fordulhat elő, ha egy betűt és nagy számú sort keres az információs bázisban ezzel a betűvel kezdődően.
● Ha egy dinamikus lista főtáblájának mezőjéhez Egyenlő összehasonlítási típusú kijelölést használunk, akkor teljes szöveges keresés végrehajtásakor a rendszer egy kiválasztási értéket ad a tábla keresési lekérdezéséhez.
● A keresési karakterlánc szavakra van felosztva. Ez a partíció a következő szabályok szerint történik:
● A sor megszakad, szóköz és tabulátor karakterek használatával határolóként.
● Ezután minden eredményül kapott fragmentum feldolgozásra kerül:
● Ha a töredék dátumábrázolás (idővel vagy anélkül), az aktuális munkamenet területi beállításai alapján, akkor a szó a töredék.
● Ellenkező esetben a töredéket a „,.-/\” karakterek határolóként használva tovább osztják. Ebben az esetben minden kapott karakterlánc-részletet szónak veszünk.

● Minden szóhoz saját feltételrendszer jön létre, amelyeket „VAGY”-val kombinál. Ez a feltételkészlet akkor jön létre, ha a teljes szöveges keresés egy adott szóra abban a táblázatban, amelyből ezt a mezőt kapta, legalább egy objektumot adott vissza, vagy nem használt teljes szöveges keresést ehhez a mezőhöz. A feltételek a következőképpen alakulnak:
● A String típusú mezőnél a feltétel a FieldName LIKE %Word%.
● A Szám típusú mezőnél a feltétel FieldName=Érték formátumú, ahol az Érték egy szám típusúra konvertált szó. Ha a dobás nem hajtható végre, a mezőkeresés nem történik meg.
● A szót a program részkarakterláncként keresi az aktuális munkamenethez definiált alapértelmezett logikai reprezentációban. Ha a keresett szó megtalálható egy nézetben, akkor megkeresi a szót megtaláló nézetnek megfelelő értéket. Ebben az esetben a keresés nem használja a Format form elem tulajdonsággal megadott nézeteket.
● Dátum típusú mező esetén a feltétel így néz ki: FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
egy vagy két számjeggyel jelölve az év az aktuális századra csökken, és ez az érték hozzáadódik a keresési feltételhez.
● A referenciamezők esetében a keresés a referencianézet létrehozásához használt mezőkön történik. Mindegyik mezőben keressen
a fent leírt szabályok szerint végezzük. A keresés nem használ egyéni adatábrázolás létrehozására használt mezőket.
Az egyes szavakhoz tartozó feltételeket „ÉS”-vel kombinálják.
● A kezdő nullákkal rendelkező értékek esetén kereshet vagy a kezdő nullákkal rendelkező karakterláncban, vagy a kezdő nullák nélkül megadott karakterláncban.
● Ha egy dinamikus lista dokumentumok listáját vagy dokumentumelőzményeket jelenít meg, akkor a megadott listamegtekintési intervallum is megjelenik az űrlap azon területén, amely a kívánt dinamikus lista nézeti állapotának megjelenítésére van fenntartva.
● A keresés aktuális érték alapján parancs nem érhető el, ha a dinamikus lista főtáblája a kiválasztási feltétel.
● A talált karakterlánc-töredékek kiemelve jelennek meg a táblázatban.
● Egy oszlophoz csak egy keresési karakterlánc támogatott. Ha új keresési lekérdezést ad hozzá egy már keresett oszlophoz, a keresési kifejezés lecserélődik, nem pedig a két keresési lekérdezés összeadása.
● Ha az űrlaphoz nincs hozzáadva az űrlap Keresési karakterlánc megjelenítése (űrlapelem-kiegészítés Forrás tulajdonság), amely dinamikus listát jelenít meg, akkor a Ctrl+F billentyűkombináció megnyomásával megnyílik a keresési párbeszédpanel.


Rizs. 7. Keresés párbeszédpanel

Ha az űrlap egy dinamikus listát megjelenítő táblázathoz (űrlapelem-kiegészítés Forrás tulajdonság) társított űrlapelem-kiegészítést tartalmaz Keresési karakterlánc megjelenítése, akkor a keresési párbeszédpanel megnyitásához használja a Speciális keresés parancsot.
● A keresési párbeszédpanel használatakor tartsa szem előtt a következőket:
● Ha a keresési párbeszédpanelt billentyűparancs segítségével nyitja meg, az aktuális cella értéke megjelenik a Keresendő sorban, a Hogyan keressünk kapcsoló értéke pedig Pontos egyezés szerint.

● A keresési párbeszédablak megnyitása egy keresési karakterlánc beírásával a dinamikus listába azt eredményezi, hogy a Hogyan keressünk kapcsoló értéke A karakterlánc része szerint értékre van állítva, és a beírt szöveg a Mit a keresőmezőhöz.

6. Az adatok megjelenítése dinamikus listával

Dinamikus listák használatakor előfordulhat, hogy különféle műveleteket kell végrehajtania a dinamikus lista által jelenleg megjelenített adatokon, figyelembe véve az alkalmazott kijelöléseket és kereséseket. Ilyen műveletek a következők: a megjelenített információk feldolgozása, például a kiválasztott dokumentumok újraküldése vagy a kiválasztott objektumok egyes részleteinek beállítása, az elérhető objektumok listájának létrehozása (tervvel stb.), például nyomtatáshoz vagy táblázatos dokumentumba mentéshez.
A dinamikus lista által megjelenített adatok megszerzéséhez használja a GetExecutableDataCompositionSchema() és
GetExecutableDataCompositionSettings().
Példa az adatok fogadására:

Schema = Elements.List.GetExecutableDataCompositionSchema();
Beállítások = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Séma, Beállítások);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Az adatok értékgyűjteménybe (táblázatba vagy értéklistába) történő bejuttatása ugyanígy történik.
A dinamikus listaadatok ilyen módon történő beszerzése számos olyan tulajdonsággal rendelkezik, amelyeket figyelembe kell venni az alkalmazásmegoldások kidolgozásakor:
● A következő táblázatkialakítás nem támogatott:
● Változó vonalszínek;
● Fejléc kép;
● Kép az alagsorról;
● Lábléc háttérszíne;
● A lábléc szövegének színe;
● Footer betűtípus;
● Vízszintes helyzet az alagsorban;
● Jelszó mód.
● A kezelt űrlaphoz megadott feltételes megjelenés nem támogatott;
● Ha egy Hierarchikus táblát növekvő sorrendbe rendez egy Link típusú mező alapján, akkor mindig az üres hivatkozást tartalmazó rekordok kerülnek először.

A konfigurációk véglegesítése során minden 1C programozó dinamikus listákkal találkozik.
A dinamikus lista egy interfészobjektum, amelyet adatbázis-objektumok vagy nem objektum adatok - regiszterbejegyzések - különféle listáinak megjelenítésére használnak.
Például egy dinamikus lista az elemek listájának megjelenítésére szolgál:

A dinamikus lista képességeinek bemutatásához hozzunk létre külső feldolgozást, és adjuk hozzá a fő űrlapot. Adjunk hozzá egy új attribútumot az űrlaphoz „Dinamikus lista” típussal. Nézzük meg a tulajdonságait, és nézzük meg, mi van ott.
Érdekel minket az „Egyedi kérés” tulajdonság. Az engedélyezése megmutatja nekünk a dinamikus lista összes képességét. Az 1C: Enterprise rendszerlekérdezési nyelv szinte összes lehetőségét felhasználva tudunk majd kérést írni. Jelölje be a négyzetet, és kattintson a „Megnyitás” linkre:

A listánk alapértelmezés szerint megjeleníti a cikkek listáját az összes raktár teljes egyenlegével. Egy ilyen lista megvalósításához adja hozzá a következő lekérdezést:


Fő táblázatként a „Könyvtár.Nómenklatúra” elemet választjuk, ez lehetővé teszi, hogy dinamikus listával dolgozzunk, akárcsak a nómenklatúrák listájával - könyvtárelemek hozzáadása, módosítása, törlésre való megjelölése. Ezenkívül a főtábla telepítése lehetővé teszi az adatok dinamikus olvasását - ez azt jelenti, hogy a kiválasztás szükség szerint részenként történik.
Ezután űrlapelemeket kell létrehoznunk a listánkhoz:

Ha ebben a formában próbáljuk lefuttatni a feldolgozást, hibaüzenetet kapunk:


Ennek megszüntetéséhez be kell állítani egy értéket az „Időszak” paraméterhez. Ehhez használhatja a dinamikus lista „Parameters” gyűjteményének „SetParameterValue” metódusát. A módszer két paramétert igényel:
. "Paraméter" - Típus: Karakterlánc; DataCompositionParameter. Annak a paraméternek vagy adatösszetételi paraméternek a neve, amelynek értékét be kívánja állítani;
. „Érték” – Típus: Önkényes. A beállítandó érték.
Meghívható az űrlap „OnCreateOnServer” kezelőjében:

Kérdése van, vagy tanácsadó segítségére van szüksége?


Lehetőséget biztosítunk a felhasználónak az egyenlegek beérkezésének időszakának megváltoztatására. Ehhez adja hozzá az attribútumot és a hozzá tartozó „Dátum” űrlapelemet:


A „Date” űrlapelem „OnChange” kezelőjében a „SetParameterValue” metódust fogjuk meghívni, és a hozzá tartozó attribútum értékét adjuk át értékként. Hasonló módon változtassuk meg az űrlap „Kiállításkor a kiszolgálón” eljárását. Mivel a módszer elérhető a kliensen, nem kell hívni a szervert:


Most, amikor a dátum megváltozik, az egyenlegek automatikusan frissülnek:




Tegyük fel, hogy a felhasználók az aktuális egyenlegeket vagy a tervezett bevételeket szeretnék látni. Tekintsük az egyik megvalósítási lehetőséget. Adjunk hozzá egy logikai típusú form attribútumot és egy kapcsolódó kapcsolót:


A kapcsoló értékének megváltoztatásakor megváltoztatjuk a kérés szövegét. Ehhez a „Módosításkor” eseménykezelőt fogjuk használni a „Mennyiség megjelenítése az átvételkor” űrlapelemhez. A dinamikus lista „QueryText” tulajdonságát az attribútum értékétől függően módosítanunk kell. Mivel ez a tulajdonság nem érhető el a kliensen, egy szervereljárást kell meghívni:


A változtatások eredménye:



Végre minden hétéves álma valóra vált. Milyen gyakran kérték a 7.7-es program felhasználói a tételek normál kiválasztását? Így láthatja az egyenlegeket, árakat és beállíthatja a szűrőket. Különféle trükköket kellett kitalálnunk, beleértve a külső komponensek írását is. Az 1C 8.2-ben dinamikus listák jelentek meg. Azt javaslom, hogy fontoljuk meg, mi ez, és mit adhatnak nekünk az 1C 8.3-ban.

Vegyünk alapul az 1C egy bizonyos tesztkonfigurációját: „Enterprise Accounting 3.0”. Most nem fogunk kiválasztani, csak hozzáadunk egy másik kiválasztási űrlapot a „Nómenklatúra” könyvtárba, és ideiglenesen azt tesszük főként:

Létrehozásakor a rendszer alapértelmezés szerint hozzáad egy „Dinamikus lista” típusú táblázatmezőt az űrlaphoz.

Nézzük meg a tulajdonságait, és nézzük meg, mi van ott.

Először is érdekel minket az „Egyéni kérés” jelölőnégyzet. Ez felfedi számunkra a dinamikus lista minden előnyét. Lehetőségünk lesz saját kérésünk megírására, paraméterekkel. Jelölje be a négyzetet, és kattintson a „Megnyitás” linkre:

Megnyílik egy ablak a kész kóddal. Egyelőre a „Nómenklatúra” könyvtár összes mezője egyszerűen felsorolva van.

Szerezzen ingyen 267 videóleckét 1C-n:

Amint látja, van egy „ ” hívógomb és egy jelölőnégyzet, amely lehetővé teszi a lista tartalmának dinamikus megváltoztatását. Vagyis ha egy másik felhasználó módosít valamit a könyvtárban, az a mi listánkban is megváltozik. Ezen kívül van egy „Beállítások” fül, de ezt később érintjük.

Egyéni lekérdezés dinamikus listában

Először hozzuk létre a szükséges kérelmet egyenlegekkel és árakkal. Mint az:

„Beállítások” fülre

És most a legjobb rész! Lépjen a „Beállítások” fülre. És azonnal látjuk, hogy az első lapon tetszőleges kiválasztást végezhetünk a kérés bármely mezőjéhez:

Lekérdezési paraméterek programozott beállítása dinamikus listában 1C 8.3

Ne felejtse el, hogy két paraméterünk van a kérésben: „Időszak” és „Ártípus”. Ezeket át kell adnunk a kérésnek, különben hiba történik.

Írjuk be ezeket a paramétereket az űrlapparaméterekbe, és adjuk hozzá a következő sorokat az űrlapmodulban:

&OnServerProcedureWhenCreatingOnServer(hiba, StandardProcessing) lista. Lehetőségek. SetParameterValue("Időszak" , Paraméterek. Dátum) ; Lista. Lehetőségek. SetParameterValue("PriceType", Parameters.PriceType) ; Az eljárás vége