Основната таблица на динамичния списък 1s 8.3. Начини за получаване и кеширане на данни с динамичен списък

Основната таблица на динамичния списък 1s 8.3.  Начини за получаване и кеширане на данни с динамичен списък
Основната таблица на динамичния списък 1s 8.3. Начини за получаване и кеширане на данни с динамичен списък
Домашни бележки от огледалото

21.04.2014 г. Получаване на данни от динамичен списък

Внедрено във версия 8.3.6.1977.

Внедрихме възможност за лесно и удобно получаване на данни, показани с помощта на динамичен списък.

Може да имате нужда от данните от динамичния списък, за да го отпечатате в нестандартна, "специфична" форма. Или за извършване на определени действия с тях. Например, изпратете писмо до всички контрагенти, които сте избрали в списъка по някакъв критерий.

Освен това има редица задачи, в които потребителят, в допълнение към списъка с елементи, иска да види и обобщените данни, свързани с този списък. Например, след като е избрал стоките от определена продуктова група и определен доставчик, той веднага иска да види общия брой на тези стоки в базата данни.

Самият динамичен списък не може да ви предостави тази информация. Целта на динамичния списък е да предостави бърз преглед на големи количества данни. Следователно той чете данните на части, необходими за показване на един или два екрана. И „не знае нищо“, например, за общото количество данни, които трябва да прочете.

Като цяло, за да получите допълнителната информация, която потребителят иска, трябва да направите заявка в базата данни. Точно същият като този, използван в динамичния списък.

Можеше да го направиш и преди. Но не винаги беше лесно. В крайна сметка, в допълнение към текста на оригиналната заявка, според която работи динамичният списък, трябваше да знаете всички селекции, сортировки и други параметри, които потребителят интерактивно задава в таблицата, която показва данните.

Сега тази задача се решава лесно. Таблицата с динамичен списък има два нови метода:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

По този начин получавате самата схема за съставяне на данни и най-важното - всички нейни настройки, благодарение на които потребителят вижда списъка точно такъв, какъвто е. Всичко, което трябва да направите, е програмно да съставите оформлението и да го изведете в колекция от стойности (за програмна обработка) или документ с електронна таблица (за показване):

В резултат на това ще получите структура (или отчет), съдържаща колони и редове, които се показват в таблица с динамичен списък.

Важното е, че оформлението и настройките, които получавате от таблицата с динамичен списък, вземат предвид, наред с други неща, видимостта на колоните и приложеното търсене. Тъй като настройките се получават отделно, можете да промените състава на полетата за свои собствени цели и да получите например всички колони от списъка, а не само тези, които са видими за потребителя.

При извеждане в документ с електронна таблица има още един приятен момент. Като цяло външният вид на отчета ще съответства на външния вид на таблицата с динамичен списък в момента на получаване на схемата и настройките. Включително условния дизайн на масата. Ще ви трябват някои допълнителни действия само ако искате да прехвърлите условния дизайн на формуляра и към отчета.

В процеса на финализиране на конфигурациите всеки 1C програмист среща динамични списъци.
Динамичният списък е интерфейсен обект, използван за показване на различни списъци с обекти на база данни или необектни данни - записи в регистъра.
Например динамичен списък се използва за показване на списък с елементи:

За да демонстрираме възможностите на динамичен списък, нека създадем външна обработка, добавете основната форма. Нека добавим към формата нов атрибут с тип "Динамичен списък". Нека отидем до имотите му и да видим какво има там.
Интересуваме се от имота "По поръчка". Активирането му ще ни покаже всички възможности на динамичния списък. Ще можем да напишем заявка, използвайки почти всички функции на езика за заявки на системата 1C: Enterprise. Поставете отметка в квадратчето и щракнете върху връзката „Отвори“:

По подразбиране нашият списък ще покаже списък с артикули с общ баланс за всички складове. За да приложите такъв списък, добавете следната заявка:


Като основна таблица ще изберем "Директория. Номенклатура", това ще ни позволи да работим с динамичния списък, както със списъка с номенклатура - добавяне, промяна, маркиране за изтриване на елементи от директорията. Също така, настройката на основната таблица дава възможност за динамично четене на данни - това означава, че селекцията ще бъде направена на части, според нуждите.
След това трябва да създадем елементи на формуляр за нашия списък:

Ако се опитаме да стартираме нашата обработка в този формуляр, ще получим грешка:


За да го премахнете, трябва да зададете стойността на параметъра "Период". За да направите това, можете да използвате метода "SetParameterValue" от колекцията "Параметри" на динамичния списък. Методът приема два параметъра:
. "Параметър" - Тип: String; DataCompositionParameter. Името на параметъра или параметъра за съставяне на данни, чиято стойност трябва да бъде зададена;
. "Стойност" - Тип: произволна. Стойността, която трябва да бъде зададена.
Може да се извика в манипулатора "OnCreateOnServer" на формуляра:

Имате въпрос, имате нужда от помощта на консултант?


Нека да дадем възможност на потребителя да променя периода за получаване на салда. За да направите това, нека добавим атрибута и свързания с него елемент от формуляра „Дата“:


В манипулатора "OnChange" на елемента на формуляр "Date" извикайте метода "SetParameterValue", като предавате стойността на свързания атрибут като стойност. По същия начин ще променим процедурата "На CreationAtServer" на формуляра. Тъй като методът е наличен на клиента, няма нужда да се обаждате на сървъра:


Сега, когато датата се промени, балансите ще се актуализират автоматично:




Да предположим, че потребителите искат да видят или текущи салда, или прогнозирани постъпления. Нека разгледаме един от вариантите за изпълнение. Нека добавим булев атрибут на формуляр и свързан бутон за избор:


При промяна на стойността на превключвателя, ние ще променим текста на заявката. За да направим това, ще използваме манипулатора на събитие "OnChange" на елемента на формуляра "DisplayQuantityToReceipt". Трябва да променим свойството "QueryText" на динамичния списък в зависимост от стойността на атрибута. Тъй като това свойство не е налично на клиента, е необходимо извикване на сървърната процедура:


Резултатът от направените промени:



Най-после мечтата на всеки "седем играч" се сбъдна. Колко често потребителите на програма 7.7 ​​искат да направят нормален избор на елементи. За да можете да видите баланси, цени и да зададете филтри. Трябваше да измисля различни трикове, до писането на външни компоненти. В 1C 8.2 се появиха динамични списъци. Предлагам да разгледаме какво е и какво могат да ни дадат в 1C 8.3.

Нека вземем за основа определена тестова конфигурация 1C: "Enterprise Accounting 3.0". Сега няма да правим избор, просто добавете друга форма за избор в справочника "Номенклатура" и я направете временно основна:

Когато бъде създадена, системата по подразбиране ще добави таблично поле с тип "Динамичен списък" към формата.

Нека отидем до имотите му и да видим какво има там.

На първо място, ние се интересуваме от квадратчето за отметка "Произволна заявка". Именно той ще ни разкрие всички предимства на динамичния списък. Ще имаме възможност да напишем наша собствена заявка и с параметри. Поставете отметка в квадратчето и щракнете върху връзката „Отвори“:

Ще се отвори прозорец с готов код за . Досега всички полета на директорията "Номенклатура" са просто изброени там.

Вземете 267 1C видео урока безплатно:

Както можете да видите, има бутон за повикване "" и квадратче за отметка, което ви позволява динамично да променяте съдържанието на списъка. Тоест, когато друг потребител промени нещо в директорията, то ще се промени и в нашия списък. Освен това има раздел Настройки, но ще го разгледаме по-късно.

Персонализирана заявка в динамичен списък

Първо, нека създадем заявката, от която се нуждаем, със салда и цени. така:

Раздел Настройки

А сега най-вкусното! Отидете в раздела "Настройки". И веднага виждаме, че в първия раздел можем да направим всякакви селекции за всяко поле в заявката:

Програмно задаване на параметри на заявка в динамичен списък 1C 8.3

Не забравяйте, че имаме два параметъра в заявката: "Период" и "Вид цена". Трябва да ги предадем на заявката, в противен случай ще има грешка.

Нека запишем тези параметри в параметрите на формуляра и да добавим следните редове в модула на формуляра:

&OnServerProcedure OnCreateOnServer(Failure, StandardProcessing) списък. Настроики. SetParameterValue("Период", Параметри. Дата) ; списък. Настроики. SetParameterValue("PriceType" , Parameters.PriceType) ; EndProcedure

В допълнение към примитивните типове данни, които могат да бъдат намерени във всеки език за програмиране, в 1C има уникални типове. Всеки от тях има свои собствени свойства, методи, функции, предназначение и нюанси на използване в системата. Един от тези видове е динамичен списък, който значително опростява много приложни задачи. Ето защо разработчиците трябва да знаят и да могат да боравят с този многофункционален инструмент.

Характеристики на динамични списъци в 1C

Целта на този тип е да показва информация от всяка таблица на базата данни, независимо от нейния тип. Механизмът е създаден на базата на SKD и има подобни възможности. Но това не означава, че определено ще трябва да напишете заявка на езика 1C, въпреки че тази възможност съществува и трябва да я използвате. Можете просто да посочите таблицата, информацията, от която се интересувате, и 1C независимо ще генерира проста заявка.

За да видите как се формира динамичен списък и какви данни показва, трябва да отворите управлявани формуляри, където се намира, в конфигуратора: в списъка с подробности отворете свойствата му през контекстното меню и обърнете внимание на „Персонализиран Заявка“. Ако няма квадратче за отметка, тогава параметърът "Главна таблица" отразява таблицата на базата данни, от която са взети данните. В противен случай динамичният списък отразява данни от персонализирана заявка, които могат да се видят, като отворите настройката на списъка.

Произволна схема на заявка се използва много по-често, тъй като предоставя чудесна възможност за комбиниране и показване на голямо разнообразие от данни. Най-често този механизъм се използва за отразяване на складови наличности, цени на артикули, приходи, разходи или покупки. Трябва да го използвате внимателно, тъй като производителността може да падне при сложни заявки.

Друго полезно свойство на динамичния списък се отваря, като щракнете върху надписа "Настройки на списъка". Това меню позволява, дори когато използвате стандартен набор от полета, да направите информацията по-достъпна и разбираема за крайните потребители. Независимо дали е произволна заявка или не, ще видите раздел „Настройки“, където можете да посочите:

  • Избор на динамичен списък;
  • групировки;
  • сортиране;
  • Декор.

Използването на параметри прави динамичните списъци гъвкави и достатъчно гъвкави. Можете също така да ги свържете към подпори на управляван формуляр и данните ще се променят в зависимост от опциите, избрани от потребителя. Използването на тези механизми може да бъде разбрано и оценено чрез разглеждане на примери за проблеми от реалния свят.

Като пример, разгледайте проблема с отразяването на остатъците от номенклатурата върху управлявана форма. В реалната практика такива поръчки са доста често срещани в различни конфигурации, а динамичният списък е идеален като инструмент. За тази задача ще трябва да използваме произволна заявка, параметри на динамичен списък и неговите настройки.

За по-голяма яснота нека създадем отделна външна обработка и да поставим динамичен списък върху нея. За да реализираме нашите планове, ще има малко таблици с номенклатура, така че трябва да разрешим произволна заявка. В него ще опишем лявата връзка на справочника със списъка на номенклатурата и регистъра на остатъците и ще зададем справочника като основна таблица. Такава схема ще позволи на потребителите, докато работят с динамичен списък, да добавят или променят номенклатурата.



ИЗБЕРЕТЕ NomenclatureList.Description AS Name, GoodsInWarehouseRemains.Warehouse AS Warehouse, GoodsInWarehousesRemains.QuantityRemaining AS QuantityRemainder FROM Directory.Nomenclature AS NomenclatureList LEFT JOIN Accumulation Register.GoodsInWarehouses.Remains(&CurrentDate,) AS GoodsInW arehousesRemainder ki software NomenclatureList.Reference = GoodsInWarehousesRemains.Nomenclature WHERE

Тъй като параметърът CurrentDate беше използван в нашата заявка, трябва да зададем стойността му, преди да използваме обработката. За да направите това, в модула формуляр в процедурата "On CreationOnServer" със стандартна команда му присвоете функцията "CurrentSessionDate" със стандартна команда. Също така трябва да покажем динамичен списък на контролния формуляр и да променим реда на полетата за по-голяма яснота. Плъзнете реквизита „Остатъци от номенклатура“ в елементите на формуляра (горе вляво) и използвайте сините стрелки, за да промените реда на полетата в таблицата на формуляра.

&На сървърна процедура При създаванеНа сървър(Отказ, StandardProcessing) Номенклатура Remains.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


Вече на този етап можем да отворим нашата външна обработка в 1C и да видим, че динамичният списък работи. Можем да разглеждаме балансите, да създаваме номенклатура и групи и да търсим. Често клиентите искат да се добави възможност за избор на дата, за която ще видят баланса. В случай на форма с динамичен списък, това се осигурява от допълнително поле и настройка на параметри, използващи него.

Добавяме атрибута „Остана дата“ от типа „Дата“ и го прехвърляме към елементите на формуляра. В полето събития създаваме събитие "OnChange" и записваме кода за настройка на параметъра "CurrentDate", използван в динамичната заявка. Така че при отваряне на формуляра потребителят веднага да разбере на коя дата вижда балансите, ще направим малки промени в процедурата OnCreateOnServer.



&OnServerProcedureOnCreateOnServer(Failure, StandardProcessing)RemainsDate = CurrentSessionDate(); Номенклатура Remains.Parameters.SetParameterValue("CurrentDate", RemainsDate); Край на процедурата &В клиентската процедура RemainsDateOnChange(Element) Item Remains.Parameters.SetParameterValue("CurrentDate",RemainsDate); EndProcedure

В резултат на това нашата форма за динамичен списък може да показва салда за всяка дата.

Покрихме само малка част от възможностите на този инструментариум, но това вече е достатъчно, за да разберем удобството на този тип динамичен списък. Подобен механизъм се използва за много задачи, но най-често се намира в типични конфигурации в управлявани форми:

  1. селекция;
  2. Списъци.

За да получите динамичен списък и неговата заявка в типични управлявани форми, разработчикът трябва да отвори необходимия формуляр в конфигуратора. В секцията атрибути намерете атрибута с тип данни "DynamicList" (най-често е в удебелен шрифт). Неговите свойства съдържат текста на заявката, селекции и други настройки.