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

Начало За ​​начинаещи разработчици Уча се да програмирате

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

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

Тази задача се решава чрез създаване на допълнителни параметри на формуляра, предаване на необходимите стойности към тях и задаване на параметрите на заявката в манипулатора на събития във формуляра. OnCreateAtServer.

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

ИЗБЕРЕТЕ Информационен регистър Цени на стоки. Период, Информационен регистър Цени на стоки. Продукт, Информационен регистър Цени на стоки. Цени ОТ Информационен регистър. Цени на стоки КАТО Информационен регистър Цени на стоки КЪДЕ Информация Регистър Цени на стоки. Цени на стоки> & Информация и начало<= &КонецПериода

Както можете да видите от текста на заявката, заявката има три параметъра: Product, PeriodStart и PeriodEnd. За да функционира нормално формата, стойностите на тези параметри трябва да бъдат посочени при отваряне на формуляра, в противен случай ще бъде получена грешка в резултат на отварянето на формуляра.

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

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

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

И така, нека създадем три параметъра за формата на списъка с информационен регистър: BeginningPeriod, EndPeriod (тип Дата) и Product (тип DirectoryRef.Products).

Сега, под формата на артикул в каталога на стоките, създайте команда PriceIn December със следния текст:

Параметри на формуляра = Нова структура ("Начало на периода, Край на периода, Продукт", "20121201000000", "20121231235959", Обект.Връзка); OpenForm ("Информационен регистър.Цени на стоки.Формуляр.ListForm", Параметри на формуляр);

С тази команда отваряме формуляра за списък с информационен регистър и му предаваме стойностите на три параметъра.

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

& AtServer Процедура OnCreateAtServer (Неуспех, StandardProcessing) List.Parameters.SetParameterValue ("PeriodStart", Parameters.PeriodStart); List.Parameters.SetParameterValue ("EndPeriod", Parameters.EndPeriod); List.Parameters.SetValueParameter ("Продукт", Параметри.Продукт); Край на процедурата

Печат (Ctrl + P)

Динамичен списък

1. Обща информация

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

Ориз. 1. Опции за създаване на динамичен списък

При създаване на форма реквизити като Динамичен списъкразработчикът може да избере два начина за формиране на заявка към данните:
● Като посочите основната таблица - в този случай е достатъчно просто да посочите таблицата (свойството на Основна таблица), от която искате да получите данни, и системата автоматично ще формира заявка към данните (вижте дясната част в Фиг. 1).
● Ръчно формиране на заявка - за това е необходимо да зададете свойството Произволна заявка (вижте лявата част на фиг. 1). След това ще бъде достъпно ръчно генериране на заявка за получаване на данни от информационна база.
Можете да използвате заявка, за да изберете данни от множество таблици, така че можете да посочите основната таблица. Това е необходимо, за да може динамичният списък да определи кои данни са основни и кои вторични и да може правилно да избира и показва информация, както и да предоставя стандартни команди. Въпреки това, ако е невъзможно да се определи основната таблица в заявката, тогава тя може да бъде пропусната, но тогава
динамичен списък няма да предоставя команди, свързани с основната таблица. Освен това в този случай (без посочване на основната таблица) ефективността на извличане на данни чрез динамичен списък ще бъде значително намалена.
За да се подобри производителността, се препоръчва всички връзки, използвани в произволна заявка само за получаване на допълнителни данни, да бъдат направени по избор, като се използва разширението на езика на заявките на системата за съставяне на данни.
За динамичен списък, който е основният атрибут на формуляра, е възможно да се зададат стойности на филтри с помощта на параметър на формуляра Избор... За това е необходимо името на свойството на структурата, което е в параметъра Избор,
съвпада с името на полето за избор на динамичния списък. В този случай стойността на свойството структура ще бъде зададена като правилната стойност на филтърния елемент. Ако масив, фиксиран масив или списък със стойности се предават като стойност на елемент от параметъра Избор на формуляр за динамичен списък, тогава към селекцията вдясно се добавя условие с опцията В списъка стойност, на която е поставен списъкът със стойности (в който се преобразуват масивът и фиксираният масив).
Заявка, в която се използва параметър за формиране на стойността на поле, може да се използва като произволна заявка в динамичен списък, например:

ИЗБЕРЕТЕ
ИЗБОР
КОГА Доставка. Цена = 1 ТОГАВА & Изпращане
ДРУГО Доставка. Коефициент
КРАЙ КАТО СООТНОШЕНИЕ
ОТ

Освен това, ако типът на стойността на параметъра се различава от типа на атрибута на обекта (напр. Реквизит1е от тип номер, а стойността на параметъра е типът линия), тогава за правилното показване на полето трябва изрично да прехвърлите стойността на параметъра към необходимия тип:

ИЗБЕРЕТЕ
ИЗБОР
КОГАТО се изпраща.Цена = 1 ТОГАВА ЕКСПРЕСНО (& представяне КАТО линия (100)) ДРУГО Доставка. Коефициент
КРАЙ КАТО СООТНОШЕНИЕ
ОТ
Document.DeliveryProducts като доставка

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

● Ако изгледът е настроен на йерархичен списък, ще бъдат прочетени само данните на текущата група и данните на всички родителски членове (без подчинени членове).
● Ако е зададен режим на изглед на дърво, ще се четат само данните на отворените възли в дървото.
● Еднократното зареждане на динамични списъчни данни не се поддържа, ако йерархичният изглед е зададен (свойството Display е зададено на дърво) и първоначалният изглед на дърво е настроен на Разширяване на всички нива. За получаване на данни ще бъдат направени толкова заявки към сървъра, колкото има възли в показания списък.
В рамките на едно извличане на данни динамичният списък използва повторно създадени по-рано временни таблици, ако са изпълнени следните условия:
● В пакетната заявка за списък липсват заявки след заявката за основен пакет.
● Съставът на временните таблици и полетата в тях не се е променил от предишното изпълнение на груповата заявка.

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

2. Ограничения и характеристики

Когато задавате филтриране в динамичен списък, не забравяйте, че филтрирането не засяга групите, ако за динамичния списък е избран йерархичен списък или режим на показване на дърво. Под "групи" се разбира елемент от каталог или план от характерни типове, за които свойството EtoGroup е зададено на True.
Прилагат се селекциите, автоматично приложени от динамичния списък към стандартните атрибути Owner, Parent, Date, Period и ThisGroup
стандартни средства на системата за съставяне на данни. Изборите, които се прилагат автоматично от динамичния списък към ключовите полета, могат да бъдат приложени както чрез стандартни средства на системата за съставяне на данни, така и чрез директно добавяне на условие към текста на заявката Vкъм полетата на основната таблица. В резултат на използването на филтри чрез композиция, те могат да се прилагат както във вложени заявки, така и в параметри на виртуални таблици.

Когато проектирате динамични списъци, се препоръчва да тествате всички динамични списъци с произволни заявки. По време на процеса на проверка трябва да се уверите, че ако заявката за списък съдържа вложени заявки или виртуални таблици и полета с псевдоними, които съвпадат с псевдоними на стандартните полета на собственик, родител, дата, период, тази група или ключови полета, са налични за избор, тогава тези полета са валидни.отговарят на стандартните реквизити, с които имат същия псевдоним. Ако това не е така, трябва да промените заявката, така че да съвпадат, или
псевдонимът беше различен.
Ако изберете да генерирате заявка ръчно, тогава на заявката се налагат някои ограничения:
● Използването на израза FIRST в заявка за динамичен списък не се поддържа. Ако трябва да използвате избор, ограничен от броя на записите в динамичен списък, трябва да преработите заявката за генериране на динамичен списък по такъв начин, че действителното съдържание на заявката да бъде поставено в подзаявка и да ограничите броя на извлечените записи в тази подзаявка. Можете също да използвате временна таблица вместо подзаявка.
● Филтрирането, сортирането и групирането не се поддържат:

  • Според детайлите на табличните раздели.
  • Преглед на полета.
  • Поле Версия на данните.
  • Предварително определено поле на DataName.
  • Поле Тип сметкоплан.
  • Полето Тип преместване на таблицата с регистър за натрупване.
  • Поле Тип Стойности на диаграмата на типовете характеристики.
  • Поле от тип Тип;
  • Поле за тип низ (неограничена дължина).
  • Поле от тип BinaryData.

● Сортирането и групирането по полета Subconto не се поддържа<НомерСубконто>и ViewSubconto<НомерСубконто>таблиците на ДвиженияSubkonto на счетоводния регистър.
● Групирането по полета, които са изрази на езика на заявките, съдържащи агрегатни функции, не се поддържа.
● Когато е избрана основната таблица, заявката за динамичен списък има следните ограничения:

  • Присъединяването не се поддържа.
  • Използването на раздел ORDER BY не се поддържа. Трябва да използвате заявка без основна таблица или да посочите необходимия ред чрез настройките на динамичен списък.

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

Използването на следните таблици като основна таблица с динамичен списък не се поддържа:

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

● таблица Подконто на счетоводния регистър;
● всички виртуални таблици от счетоводния регистър, с изключение на таблицата MovementsSubkonto;
● таблици с константни стойности (включително таблицата с константите);
● таблици на външни източници на данни без ключови полета;
● таблици на кубчета на външни източници на данни;
● таблици с регистри за натрупване:

  • революционна маса;
  • остатъчна маса;
  • таблица с обороти и салда.

● таблици в регистъра на изчисленията:

  • таблица на действителната валидност;
  • графични данни;
  • основни данни.

● Таблици на таблични секции на обекти;
● Таблици за регистриране на промените (използвани в механизмите за обмен на данни);
● Таблици на последователността;
● Таблици за разпределение (използвани в механизми за периодичен сетълмент).
● Таблица, която се използва в заявка само във външно присъединяване.

С други думи, динамичен списък с посочената основна таблица ще работи правилно, ако в резултат на изпълнението на заявката
посочен като източник на данни, броят на редовете, получени от основната таблица, не се увеличава (като се вземе предвид наложената селекция). Ако в резултат на изпълнението на заявката броят на редовете, получени от заявката от основната таблица, се увеличи, това ще доведе до нарушаване на уникалността на ключа на записите на таблицата, показани в списъка. В този случай трябва да деактивирате използването на основната таблица с динамичен списък.
Когато работите с динамичен списък, е необходимо да се вземат предвид правата за достъп до подробностите, показани от списъка:
● Данните за колони от динамичен списък, които са маркирани със свойството Винаги използвай, но за които текущият потребител няма право Преглед, не се прехвърлят на клиентската страна. Достъп до данните на такива колони (използвайки свойството CurrentData и метода RowData ())
от страна на клиента не е възможно.
● Ако текущият потребител няма право на изглед върху ключово поле в динамичен списък, извличането на данни за този динамичен списък води до грешка при нарушение на достъпа.
За динамичен списък, който показва списък с изброяване, няма начин интерактивно да персонализирате списъка.
Съставът на колоните и настройките на динамичния списък са свързани с полетата на заявката чрез псевдонимите на полетата за избор. Ако псевдоним не е посочен изрично за избрано поле в заявката и полето е системно поле, тогава името на полето за английската версия на вградения език се използва като псевдоним.
Посочената връзка означава, че при промяна (или изрично указване на псевдоним за поле, което използва автоматичен псевдоним)
псевдонимът на полето за заявка, което генерира данните на динамичния списък, настройките на атрибута на динамичния списък ще бъдат загубени, елементите на формуляра ще „загубят“ показваните детайли, настройките на динамичния списък ще станат неправилни и т.н.
Ако източникът на данни за динамичния списък е таблица (обикновена или виртуална), която ви позволява да зададете филтриране по период, тогава ако потребителят зададе периода на показване в такъв динамичен списък (командата Set date interval ...),
посочените граници на периода ще бъдат зададени като филтриращи стойности или параметри на виртуална таблица. Ако чрез езиково разширение
заявки за системата за съставяне на данни, имената на параметрите на виртуалната таблица бяха изрично посочени - параметрите с дадените
имена. Таблици, за които е възможно да се контролира периодът на показване или обработка на данни:
● регистърни таблици (основни или виртуални), за които е възможно да се избират по период (за регистър на сетълмента - по период на регистрация);
● основни таблици на документи, бизнес процеси и задачи;
● основни таблици на дневниците за документи;
● таблици с главни последователности, гранични таблици на последователността.
Като параметър на заявка за динамичен списък може да се използва масив или списък със стойности. Въпреки това, ако параметърът е списък със стойности, тогава само първата стойност от списъка ще бъде използвана като стойност за избор. Ако динамичен списък използва заявка с параметри, първоначалната настройка на стойностите на параметрите трябва да се извърши в манипулатора OnCreateAtServer.
Имайте предвид следните точки, когато показвате данни от динамичен списък:
● Програмната промяна на свойствата на динамичен списък не запълва автоматично командните ленти, свързани с
с този динамичен списък.
● Ако няколко полета са групирани в група с режим на групиране. Клетката и групираните полета имат поле, което се показва с квадратче за отметка, тогава това квадратче за отметка винаги ще се показва първо в получената клетка (вляво от текста).
В динамичен списък, когато се дефинира тип данни за полета, които включват параметри, полета или литерали в изрази, полученият тип се определя от типовете поле и литерали. Ако типът на стойността на параметъра не е включен в получения тип данни, неговата стойност ще бъде съкратена.
Например в следващия пример полето ще бъде от тип Номер.

ИЗБОР
КОГАТО ЛЪЖА
ТОГАВА 5
В ПРОТИВЕН СЛУЧАЙ
&параметър
КРАЙ

Ако присвоите стойност от различен тип на параметъра Параметър, динамичният списък за това поле ще получи стойността 0 (стойността по подразбиране за типа Номер).
Ако в подобна ситуация трябва да изберете параметър от различен тип, препоръчително е да използвате конструкцията на езика за заявки ЕКСПРЕС... Например,
ако в горния пример се изисква да се предаде низ не по-дълъг от 100 знака в параметъра, тогава простата индикация на параметъра трябва да бъде заменена с израз с изрично преобразуване на тип:

ИЗБОР
КОГАТО ЛЪЖА
ТОГАВА 5
В ПРОТИВЕН СЛУЧАЙ
ЕКСПРЕС (& параметър като низ (100))
КРАЙ

Ако параметрите се използват в произволния текст на заявка за динамичен списък в изразите на полетата за избор, трябва изрично да посочите типа параметри, използвайки конструкцията ЕКСПРЕС... Например, вместо & Номенклатура AS Номенклатураизползване
ЕКСПРЕС (& Номенклатура КАТО Референтна. Номенклатура) КАТО Номенклатура... В противен случай търсенето в лентата за търсене може да работи
неправилни или дават грешки.

3. Начини за получаване и кеширане на данни с динамичен списък

Когато извлича данни за показване, динамичният списък използва един от трите метода:
1. Четенето от базата данни се извършва на части, като броят на елементите с данни малко надвишава броя на редовете, които се показват едновременно в списъка (но не по-малко от 20). Данните не се кешират на сървъра.
2. Четенето от базата данни се извършва на страници от 1000 единици данни. Данните се кешират на сървъра. Йерархичните данни се кешират: За всеки родител се кешират не повече от 2 страници с елементи. Не повече от 20 страници с артикули се кешират на динамичен списък. Кеширането ще бъде активирано от динамичен списък за следните таблици:
● Критерий за подбор;
● Всички таблици на счетоводния регистър, с изключение на основната таблица и таблицата TransactionSubkonto;
● Всички таблици от регистъра за натрупване, с изключение на основната таблица;
● Всички таблици на информационния регистър, с изключение на основната таблица;
● Всички таблици на изчислителния регистър, с изключение на основната таблица;
● Виртуална таблица Задачи по Изпълнител;
● Таблици на външни източници без ключове;
● Кубчета от външни източници.

3. Четенето от базата данни се извършва в страници от 1000 елемента. Първата част е равна на 1 страница. Всяка следваща порция се увеличава с 1 страница (при достигане на края на предишната проба). Колкото по-близо се приближава „гледната точка“ до края на показаните данни, толкова по-голяма извадка се чете от базата данни, като границата става равна на всички показани данни. Данните се кешират на сървъра. Максималният брой записи в кеша и динамичния списък е 1 000 000.
В зависимост от това какво е избрано от основната таблица на динамичния списък и каква стойност има свойството динамично четене, се използва един или друг начин за четене на данни:

● Една от следните таблици се посочва като стойност на свойството Основна таблица: план за обмен, справочник, списък с документи, дневник на документите, характеристичен план, сметкоплан, типове изчисления, бизнес процес, задача, таблица точки от бизнес процесите:



● Една от следните таблици е посочена като стойност на свойството Основна таблица: основната таблица на информационния регистър, регистъра на натрупването, счетоводния регистър, регистъра на изчисленията, виртуалната таблица на счетоводния регистър MovementsSSubkonto:

● Property Dynamic read:
● Инсталиран: Използва се метод 1 (методите са описани по-горе).
● Изчистен: Използва се метод 2 (методите са описани по-горе).

● Свойството Основна таблица съдържа таблица с критерии за избор или таблица със задачи по изпълнител (Задачи по изпълнител):
● Ключ, идентифициращ реда на таблицата: Реф.

● Като таблица на свойството Main се посочва виртуалната таблица на информационния регистър SliceFirst или SliceLast:
● Ключ, идентифициращ реда на таблицата: RecordKey.
● Свойството Dynamic read не е приложимо.
● Използва се метод 2 (методите са описани по-горе).

● Една от таблиците на виртуалните регистри е посочена като свойство Основна таблица, с изключение на изброените по-горе:

● Свойството Dynamic read не е приложимо.

● Свойството Основна таблица не е посочено, използва се произволна заявка:
● Ключ, идентифициращ реда на таблицата: Номер.
● Свойството Dynamic read не е приложимо.
● Използва се метод 3 (методите са описани по-горе).

За показване данните се предават на клиента на парчета, чийто размер е подобен на размера на парчето в първия метод за четене на данни (описан в началото на този раздел).
Когато създадете формуляр, който съдържа динамичен списък, първоначално 45 елемента с данни от всеки видим динамичен списък се изпращат на клиента (ако списъкът съдържа повече от 45 елемента). Ако динамичният списък показва повече от 45 реда, тогава когато формулярът се отвори, ще бъде направено допълнително извикване на сървъра за извличане на липсващите елементи от данни.

4. Настройки на динамичен списък

Свойството за персонализиране на списък - щракването върху хипервръзката Отвори отваря формата за персонализиране на показването на динамичен списък. Създаването на списък се извършва по същия начин като подобни операции в системата за съставяне на данни.


Ориз. 2. Условен външен вид на динамичен списък

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

СЪВЕТ.Трябва да се помни, че лошият подбор на полета за сортиране (както и подборът и групирането на данни) се отразява негативно на ефективността на динамичния подбор.
От гледна точка на разработчика на приложения, настройките на динамичния списък се състоят от няколко части, които са свързани помежду си. Основното свойство, чрез което можете да контролирате настройките на динамичния списък е Конфигуратор... Този обект съдържа три набора от настройки, които, когато системата работи, определят крайните настройки, които се прилагат към динамичния списък:
● Настройки - настройки, създадени в режим Конфигуратор. Свойството за динамичен списък за поръчка осигурява бърз достъп до свойството Settings на линкера за настройки на динамичен списък, така че следните конструкции са еквивалентни:
List.Order и List.OptionComposer.Settings.Order;
● UserSettings са настройки, които потребителят променя в режим 1C: Enterprise;
● FixedSettings – Тези настройки се задават от вградения език. Това свойство също съдържа стойности за избор, които се предават на формуляра с помощта на неговите параметри. Свойствата на динамичния списък Избор, Параметри, Условно форматиране осигуряват бърз достъп до фиксираните настройки на линкера за настройки на динамичен списък. С други думи, тези попадения са еквивалентни:
List.Settings Composer.FixedSettings.Filter и List.Feed.
При формиране на окончателната настройка на динамичния списък различните опции за настройка се комбинират, както следва:
● Ако някакъв вид настройки е изцяло маркиран като персонализиран, тогава получените настройки включват персонализираните настройки
(List.ComposerSettings.UserSettings). В този случай, ако някои елементи от настройките са маркирани като недостъпни, тогава тези настройки ще бъдат поставени в получените настройки от свойството List.Settings Composer. Настройки.
● Ако някакъв вид настройки е маркиран като потребител не изцяло, а елемент по елемент, тогава:
● Елементите, маркирани като персонализирани, ще бъдат включени в получените настройки от свойството List.OptionsComposer.UserSettings.
● Елементите, маркирани като недостъпни, ще бъдат включени в получените настройки от свойството List.OptionsComposer.Settings.
● Фиксираните настройки (List.ConfigurationComposer.FixedSettings) се добавят към получените настройки „както са“. В този случай ситуацията е неприемлива, когато във фиксираните и персонализираните настройки има настройки с едно и също име, например избор със същата лява стойност в условието.

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


Ориз. 3. Контрол на включването в персонализирани настройки

Отметката в долната част на прозореца (виж фиг. 3) е отговорна за поставянето на целия тип настройки в настройките (нормални или бързи). Тази функция е достъпна за избор, поръчка, групиране и условно проектиране. Ако настройките са зададени с режима за редактиране Бързо избиране, тогава в свойството на групата персонализирани настройки на таблицата с формуляри, показваща динамичен списък, трябва да посочите празна група формуляри, в която ще бъдат елементите, свързани с бързите персонализирани настройки на динамичния списък разположен. Ако групата не е посочена, бързите потребителски настройки няма да се показват във формуляра. Възможно е също изрично да се извика създаването на персонализирани настройки с помощта на вградения език, като се използва методът CreateCustomSettingsFormElements () на разширението за динамичен списък.
Също така е възможно да изберете възможността за поставяне на конкретни елементи за настройка в потребителските настройки. Тази функция е налична за избор и условни елементи (виж фиг. 3).

Ако е необходимо да се заредят някакви специални настройки при отваряне на динамичен списък, това може да стане по два начина:
● Използване на параметъра на формуляр за динамичен списък на CustomSettings. Данните, съдържащи се в този параметър, ще бъдат поставени в персонализираните настройки на динамичния списък.
● Използване на параметъра на формуляра от динамичния списък на CustomSettingsKey. Ако посочите този параметър при отваряне на формуляра, тогава персонализираните настройки, намиращи се в магазина за настройки с посочения ключ, ще бъдат заредени в динамичния списък, който е основният атрибут на формуляра.

5. Търсене в динамичен списък

Динамичен списък, разположен във формуляра, предоставя възможност за извършване на интерактивно търсене в показаните данни. Търсенето може да се извърши с помощта на следните инструменти: низ за търсене, диалогов прозорец за търсене, търсене на текущата стойност, използване на хронологията на търсенето и настройка на периода (за динамични списъци, показващи документи). Резултатът от търсенето е ограничен набор от записи
динамичен списък (достъпен за даден потребител), който отговаря на критериите за търсене.
Има три свойства за таблицата с управлявани формуляри, показваща динамичния списък, за да контролирате възможностите за търсене на динамичен списък:
● Позиция на търсещия низ - дефинира позицията на търсещия низ. Може да приема следните стойности: Auto, Command Panel, None, Top, Bottom.


Ориз. 4. Търсене на низ в динамичен списък

Ако стойността на това свойство е зададена на командната лента, тогава низът за търсене ще бъде показан в командната лента на формуляра (ако динамичният списък е основният атрибут на формуляра) или в командната лента, свързана с динамичния списък . Лентата за търсене, разположена в командната лента, винаги е разположена в десния край на командната лента (заедно с бутоните, разположени вдясно от лентата за търсене).
Ако свойството е зададено на Не, тогава низът за търсене ще отсъства във формуляра и ще се отвори диалогов прозорец, когато низът за търсене започне.
Ако свойството е зададено на Top, низът за търсене ще бъде позициониран между панела с команди за списък и таблицата, показваща динамичния списък. Ако свойството е зададено на Bottom, тогава низът за търсене ще бъде поставен веднага след таблицата, показваща динамичния списък.


● Ако свойството Режим на съвместимост е зададено на Не използвай или е по-старо от Версия 8.3.4, стойността е Команден панел.
Отидете в лентата за търсене, както следва:
● Чрез натискане на клавишите за бърз достъп Ctrl + F;
● Мишка;
● Когато започнете да пишете в динамичен списък (като се вземе предвид стойността на свойството Dynamic List на SearchPrinting).
● Позиция на състоянието на изгледа - описва къде ще се показва състоянието на изгледа: кои полета са търсени и кои стойности
бяха търсени във всяка област. Може да приема следните стойности: Auto, None, Top, Bottom


Ориз. 5. Състоянието на търсене в динамичния списък

Ако свойството е зададено на Не, тогава състоянието на изглед ще отсъства във формуляра. В резултат на това ще бъде възможно да се определи дали е извършено търсене или не само чрез наличието на бутона Отказ на търсене.
Ако свойството е зададено на Top, състоянието на изглед ще бъде позиционирано между панела с команди за списък и таблицата, показваща динамичния списък. Ако свойството е зададено на Bottom, тогава състоянието на изглед ще бъде поставено веднага след таблицата, показваща динамичния списък.
Ако формулярът е създаден в 1C: Enterprise версия 8.3.4 и по-стари, свойството е зададено на No. Ако формулярът е създаден в "1C: Enterprise" версия 8.3.5 и по-нова, свойството е зададено на Auto. Реалната стойност на имота в този случай ще бъде определена, както следва:
● Ако свойството Режим на съвместимост е настроено на Версия 8.3.4 (или по-ниска) - стойността е Няма;
● Ако свойството Режим на съвместимост е настроено на Не използвай или е по-старо от стойността Версия 8.3.4 - стойността Top;
● Контролна позиция за търсене – Определя къде ще се показва бутонът за управление на търсенето. Бутонът отваря меню, което съдържа следната информация: команди Намери по текуща стойност, Разширено търсене, Отмяна на търсене, Задаване на период (за списъци с документи и дневници) и история на заявките за търсене (последните 5 заявки). Свойството може да приема стойности: Auto, None, Command bar.


Ориз. 6. Контролиране на търсенето в динамичен списък

Ако свойството е зададено на Не, тогава бутонът за управление на търсенето ще отсъства във формуляра (но командите ще бъдат достъпни чрез менюто Още). Стойността на свойството Команден панел поставя бутон в командния панел, свързан с таблицата, показваща динамичния списък.
Ако формулярът е създаден в 1C: Enterprise версия 8.3.4 и по-стари, свойството е зададено на No. Ако формулярът е създаден в "1C: Enterprise" версия 8.3.5 и по-нова, свойството е зададено на Auto. Реалната стойност на имота в този случай ще бъде определена, както следва:
● Ако свойството Режим на съвместимост е настроено на Версия 8.3.4 (или по-ниска) - стойността е Няма;
● Ако свойството Режим на съвместимост е настроено на Не използвай или е по-старо от стойността Версия 8.3.4 - стойността на командната лента;
Ако формуляр съдържа няколко командни панела, източникът на команди за които е една таблица на управляван формуляр (показваща данни от динамичен списък), тогава низът за търсене и бутонът за управление на търсенето ще бъдат разположени само в един команден панел:
● Или в командната лента на самия динамичен списък (ако за него е активирано автоматично довършване)
● Или в някой от останалите командни панели.

Нека разгледаме характеристиките на използването на търсене в динамичен списък:
● За да направите търсенето удобно за използване (включително от гледна точка на производителността), трябва да активирате пълнотекстово търсене за всички конфигурационни обекти, които могат да се използват като основна таблица на динамичния списък. Също така, пълнотекстово търсене трябва да включва всички атрибути на конфигурационни обекти, които могат да бъдат показани в динамичен списък и чрез които може да се изисква търсене.
Ако обектът бъде изключен от пълнотекстово търсене, тогава въпросната търсачка ще работи, но ефективността на такова търсене ще бъде изключително ниска. Не се препоръчва да се използва търсене на обекти, които не са индексирани чрез пълнотекстово търсене.
● Приложното решение трябва да има планирано задание, което редовно актуализира индекса за пълнотекстово търсене.

● Търсенето се извършва не във всички колони на динамичния списък (и в конфигурационния обект), а само в тези колони, които се показват в таблицата.
● Търсенето в динамичен списък по полета от референтни типове с произволно представяне се извършва от полетата, които се използват за
формиране на изглед (вижте тук). Полетата, включени в изгледа, се получават, като се вземе предвид манипулаторът ViewFieldGetProcessing () на съответния обект.
● За динамични списъци с определена основна таблица се използва пълнотекстово търсене в основната таблица. Всички неиндексирани връзки от основната таблица ще бъдат добавени към резултатите от пълнотекстово търсене. Резултатът от търсенето в пълен текст за основната таблица се използва като избор по ключови полета. Извършва се и пълнотекстово търсене на полетата, показани в списъка от други таблици (ако се използва пълнотекстово търсене за полето и конфигурационния обект). Без активирано пълно текстово търсене данните могат да бъдат
намерено, но самото търсене ще бъде много бавно.
Ако възникне грешка при опит за търсене в пълен текст, търсенето ще се извърши без използване на пълнотекстово търсене.
Например, това може да се случи при търсене на една буква и голям брой редове в информационната база, започващи с тази буква.
● Ако за поле в основната таблица на динамичен списък се използва филтър с тип сравнение Equal, тогава при извършване на пълнотекстово търсене стойността на филтъра ще бъде добавена към заявката за търсене за тази таблица.
● Низът за търсене се разделя на думи. Това разделяне се извършва съгласно следните правила:
● Редът се разделя, като се използват символи за интервал и табулация като разделители.
● След това всеки получен фрагмент се обработва:
● Ако частта е представяне на дата (със или без време) въз основа на текущите регионални настройки на сесията, тогава частта е думата.
● В противен случай фрагментът се разделя допълнително, като се използват знаците “, .- / \” като разделители. В този случай всеки получен фрагмент от ред се приема като дума.

● За всяка дума се формира свой набор от условия, които се комбинират „чрез ИЛИ”. Този набор от условия се формира, ако пълнотекстово търсене на дадена дума в таблицата, от която е получено даденото поле, е върнало поне един обект или пълнотекстово търсене не е използвано за това поле. Условията се формират, както следва:
● За поле от тип String условието е от формата FieldName LIKE% Word%.
● За поле от тип Число условието е от формата Име на поле = Стойност, където Стойност е дума, прехвърлена към типа Число. Ако кастингът не може да се извърши, търсенето на полето няма да се извърши.
● Думата се търси като подниз в представянето по подразбиране на булевия тип, дефиниран за текущата сесия. Ако търсената дума се намери в представянето, тогава впоследствие се извършва търсене за стойност, съответстваща на представянето, в което е намерена думата. Търсенето обаче не използва изгледите, които са посочени чрез свойството на елемента Format на формуляра.
● За поле от тип Дата, условието има формата FieldName> = StartDay (Word) И FieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
се посочва с една или две цифри, годината ще бъде преобразувана в текущия век и тази стойност ще бъде заменена в условието за търсене.
● За референтни полета се извършва търсене в полетата, използвани за формиране на справочното представяне. Във всяко от тези полета потърсете
извършва се съгласно правилата, описани по-горе. Търсенето не използва полетата, използвани за формиране на произволно представяне на данни.
Наборът от условия за всяка дума се комбинира "от И".
● За стойности с водещи нули, можете да търсите както низ с водещи нули, така и низ, определен без водещи нули.
● Ако динамичен списък показва списък с документи или дневник на документи, посоченият интервал за сканиране на списък също се показва в областта на формуляра, запазена за показване на състоянието на преглед на необходимия динамичен списък.
● Командата за търсене по текуща стойност не е налична, ако основната таблица на динамичния списък е критерий за филтриране.
● Намерените фрагменти от ред се маркират, когато се показват в таблицата.
● За една колона се поддържа само един низ за търсене. Когато добавите нова заявка за търсене за колона, която вече се търси, изразът за търсене ще бъде заменен, а не добавянето на двете заявки за търсене.
● Ако формулярът не съдържа допълнение към елемент на формуляр на Показване на низ за търсене, свързан с таблица (свойството Source на елемент от формуляр), показващ динамичен списък, натискането на клавишната комбинация Ctrl + F отваря търсенето диалогов прозорец.


Ориз. 7. Диалог за търсене

Ако формулярът съдържа допълнение към елемент на формуляр от типа Показване на низ за търсене, свързан с таблица (източник на добавка на елемент от формуляр), показващ динамичен списък, тогава използвайте командата Разширено търсене, за да отворите диалоговия прозорец за търсене.
● Когато използвате диалоговия прозорец за търсене, имайте предвид следните точки:
● Отварянето на диалоговия прозорец за търсене чрез клавишна комбинация води до това, че стойността на текущата клетка е в реда Какво да търсите, а стойността на радио бутона Как да търсите е зададена на По точно съвпадение.

● Отварянето на диалоговия прозорец за търсене чрез директно започване на въвеждане на низ за търсене в динамичен списък води до настройка на стойността на квадратчето за отметка Как да търсите По част от низа и въведения текст отива в полето Какво да търсите.

6. Извличане на данни, показани от динамичен списък

Когато използвате динамични списъци, може да се наложи да извършите различни действия с данните, които в момента се показват от динамичния списък, като се вземат предвид наложените филтри и приложените търсения. Тези действия включват: обработка на показаната информация, например, повторно публикуване на избрани документи или задаване на атрибут за избрани обекти, генериране на списък с налични обекти (с дизайн и т.н.), например за отпечатване или запис в документ с електронна таблица.
За да получите данни, които се показват в динамичен списък, използвайте GetExecutableDataCompositionSchema () и
Вземете ExecutableDataCompositionSettings ().
Пример за получаване на данни:

Схема = Items.List.Get ExecutableDataCompositionSchema ();
Настройки = Items.List.Get ExecutableDataCompositionSettings ();
LayoutComposer = Нов LayoutComposerDataComposition ();
LayoutComposition = LayoutComposer.Run (Outline, Settings);
Композиционен процесор = Нов процесор за съставяне на данни;
LayoutProcessor.Initialize (LayoutDetail);
OutputProcessor = NewDataCompositionOutputResultProcessorВ табличен документ;
Връщане OutputProcessor.Output (LayoutProcessor);

Извличането на данни в колекция от стойности (таблица или списък със стойности) е подобно.
Получаването на динамични списъчни данни по този начин има редица характеристики, които трябва да се вземат предвид при разработването на приложни решения:
● Следният дизайн на таблицата не се поддържа:
● Редуващи се цветове на редовете;
● Заглавна снимка;
● Снимка на мазето;
● Цвят на фона на мазето;
● Цвят на текста в долния колонтитул;
● Шрифт на долния колонтитул;
● Хоризонтално разположение в сутерена;
● Режим на парола.
● Условният външен вид, определен за управлявания формуляр, не се поддържа;
● Когато подреждате йерархична таблица във възходящ ред, по поле от типа Връзка, записите, съдържащи празна връзка, винаги се поставят първи.

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

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

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


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

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


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

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


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


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


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




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


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


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



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

Възможности за динамични списъци в 1C

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

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

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

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

  • Избор на динамичен списък;
  • Групиране;
  • Сортиране;
  • Регистрация.

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

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

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



NomenklaturaPerechen.Naimenovanie AS SELECT Име, TovaryNaSkladahOstatki.Sklad като складове, TovaryNaSkladahOstatki.KolichestvoOstatok AS KolichestvoOstatok Spravochnik.Nomenklatura съединение, във вид НАЛЯВО NomenklaturaPerechen RegistrNakopleniya.TovaryNaSkladah.Ostatki (& TekuhtsayaData,) съгласно TovaryNaSkladahOstatki NomenklaturaPerechen.Ssylka = TovaryNaSkladahOstatki.Nomenklatura КЪДЕТО

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

& AtServer Процедура OnCreateAtServer (Failure, StandardProcessing) RemainingNomenclature.Parameters.SetParameterValue ("CurrentDate", CurrentSessionDate ()) EndProcedure


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

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



& AtServer Процедура OnCreateAtServer (Отказ, StandardProcessing) RemainingDate = CurrentSessionDate (); RemainingNomenclature.Parameters.SetValueParameter ("CurrentDate", Remaining Date); EndProcedure & OnClient Процедура RemainingDateOnChange (Element) Номенклатура Remains.Parameters.SetParameterValue ("CurrentDate", Remaining Date); Край на процедурата

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

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

  1. Избор;
  2. Списъци.

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