Отримання даних, що відображаються динамічним списком

Окрім примітивних типів даних, які можна зустріти у будь-якій мові програмування, у 1С існують унікальні типи. У кожного з них є свої властивості, методи, функції, призначення та нюанси використання у системі. Одним з таких типів є динамічний список, що істотно полегшує багато прикладних завдань. Саме тому розробники повинні знати і вміти поводитися з цим універсальним інструментом.

Можливості динамічних списків у 1С

Призначення цього типу полягає у відображенні інформації з будь-яких таблиць БД, незалежно від її типу. Механізм був створений на основі СКД і має аналогічні можливості. Але це не означає, що обов'язково доведеться писати запит мовою 1С, хоча ця можливість є і їй потрібно скористатися. Ви можете просто вказати таблицю, інформація з якої вас цікавить і 1С самостійно сформує найпростіший запит.

Щоб подивитися, як формується динамічний список та які дані він показує, необхідно відкрити керовані форми, де він розташований, у конфігураторі: у переліку реквізитів через контекстне меню відкрити його властивості та звернути увагу на пункт «Довільний Запит». Якщо галка відсутня, параметр «Основна таблиця» відображає таблицю БД, звідки беруться дані. В іншому випадку динамічний список відображає дані довільного запиту, який можна побачити, відкривши налаштування списку.

Набагато частіше використовується схема з довільним запитом, оскільки це дає чудову можливість об'єднувати та показувати найрізноманітніші дані. Найчастіше цей механізм використовується для відображення залишків на складах, цінах номенклатури, приходу, витрати або закупівель. Користуватися ним потрібно обережно, оскільки швидкодія при складних запитах може зменшуватися.

Ще одна корисна властивість динамічного списку відкривається при натисканні напис «Налаштування списку». Це меню дозволяє навіть при використанні стандартного набору полів зробити інформацію більш доступною та зрозумілою для кінцевих користувачів. Незалежно від того, довільний запит чи ні, ви побачите вкладку «Налаштування», де зможете вказати:

  • Вибір динамічного списку;
  • Угруповання;
  • Сортування;
  • Оформлення.

Використання параметрів робить динамічні списки універсальними та досить гнучкими. Також ви можете зв'язати їх з реквізитами на керованій формі, і дані змінюватимуться залежно від обраних параметрів. Використання цих механізмів можна зрозуміти та оцінити під час розгляду прикладів реальних завдань.

Як приклад розглянемо завдання відображення на керованій формі залишків номенклатури. У реальній практиці подібні замовлення зустрічаються досить часто в різних конфігураціях, і динамічний список ідеально підходить як інструмент. Для цього завдання нам доведеться використовувати довільний запит, параметри динамічного списку та його налаштування.

Для більшої наочності створимо окрему зовнішню обробку та розмістимо на ній динамічний список. Щоб реалізувати задумане таблиці з номенклатурою буде мало, тому нам необхідно дозволити довільний запит. У ньому ми опишемо ліве з'єднання довідника з переліком номенклатури та регістру залишків та встановимо довідник як основну таблицю. Така схема дозволить користувачам, працюючи з динамічним списком, додавати чи змінювати номенклатуру.



ВИБРАТИ НоменклатураПерелік.Найменування ЯК Найменування, ТовариНаСкладахЗалишки.Склад ЯК Склад, ТовариНаСкладахЗалишки.КількістьЗалишок ЯК КількістьЗалишок З Довідник.Номенклатура ЯК НоменклатураПерелік ЛІВЕ СПОЛУЧЕННЯ ) ЯК ТовариНаСкладахЗалишки ПЗ НоменклатураПерелік.Посилання = ТовариНаСкладахЗалишки.Номенклатура ДЕ

Так як у нашому запиті використовувався параметр «Поточна Дата», то нам необхідно задати його значення перед тим, як користуватися обробкою. Для цього в модулі форми в процедурі «При створенні на сервері» стандартною командою надамо йому функцію «Поточна Дата Сеансу». Також нам необхідно вивести динамічний список на форму, що управляє, і змінити порядок полів для наочності. Перетягуємо реквізит «Залишки номенклатури» в елементи форми (ліва верхня частина) і синіми стрілками змінюємо порядок полів у таблиці на формі.

&На сервері Процедура При створенні на сервері (відмова, стандартна обробка) залишки номенклатури. параметри.


Вже на цьому етапі ми можемо у 1С відкрити нашу зовнішню обробку та побачити, що динамічний список працює. Ми можемо дивитися залишки, створювати номенклатуру та групи, здійснювати пошук. Часто замовники просять додати можливість вибирати дату, яку вони бачитимуть залишки. У разі форми з динамічним списком це забезпечується за рахунок додаткового поля та встановлення параметрів за його допомогою.

Додаємо реквізит «Дата Залишків» типу «Дата» та переносимо його в елементи форми. У подіях поля створюємо подію «Зміни» і прописуємо код встановлення параметра «ПоточнаДата», що використовується в динамічному запиті. Щоб при відкритті форми користувач одразу розумів, на яку дату він бачить залишки, внесемо невеликі зміни до процедури «Створення на сервері».



&НаСервері Процедура ПриСтворенніНаСервері(Відмова, СтандартнаОбробка) ДатаЗалишків = ПоточнаДатаСеансу(); ЗалишкиНоменклатури.Параметри.УстановитиЗначенняПараметра("ПоточнаДата", ДатаЗалишків); КінецьПроцедури &НаКлієнті Процедура ДатаЗалишківПриЗміні(Елемент) ЗалишкиНоменклатури.Параметри.ВстановитиЗначенняПараметра("ПоточнаДата",ДатаЗалишків); КінецьПроцедури

В результаті, наша форма Динамічний список може відображати залишки на будь-яку дату.

Ми розглянули лише малу частину можливостей цього інструментарію, але цього вже достатньо, щоб зрозуміти зручність такого типу, як динамічний список. Подібний механізм використовується для безлічі завдань, але найчастіше його зустрічають у типових конфігураціях у керованих формах:

  1. Підбирання;
  2. Списків.

Щоб отримати динамічний список та його запит у типових керованих формах, розробнику необхідно у конфігураторі відкрити потрібну форму. У розділі реквізитів знайти реквізит з типом даних «Динамічний Список» (найчастіше виділений жирним шрифтом). Його властивості містять текст запиту, відбори та інші налаштування.

Платформа 1С:Підприємство 8.2 може працювати з безліччю записів у таблиці бази даних динамічним способом, тобто зчитувати дані порціями. Раніше у статтях ми розглядали механізм динамічних списків та методи оптимізації роботи з ними.

Сьогодні ми вирішимо нестандартне завдання динамічних списків.Нам потрібно буде підрахувати підсумок щодо реквізиту документа "Сума" та вивести його у підвалі списку. Аналогічно підрахувати середнє значення для поля "Рейтинг" і вивести в підвалі динамічного списку. Підрахунок підсумкових полів має враховувати відбір, встановлений користувачем у налаштуваннях списку документів.

Вся складність полягає в тому, що динамічний список не отримує одразу всі записи, а отримує їх порціями. Відповідно, ми не можемо одразу отримати підсумок за всіма документами, що відповідають поточному добору. Яким чином порахувати результат?

Реалізація

І так перейдемо до вирішення завдання. Почнемо зі зміни форми, далі опишемо алгоритм отримання підсумкових значень.

Форма та інтерфейс

Для початку підготуємо форму документа для відображення підсумкових полів. Для цього додамо два рядкові реквізити форми "Рейтинг" та "Сума".

У дані реквізити записуватимуться підсумкові значення за документами.

Для відображення значень реквізитів у підвалі динамічного списку необхідно увімкнути відповідну опцію пов'язаного елемента форми списку (див. наступний скріншот).

Тепер потрібно визначитися, за якою подією відбуватиметься оновлення підсумків у підвалі списку. Для зручності розробки додамо команду "Оновити" і відповідний елемент форми на командну панель. Під час виконання цієї команди відбуватиметься оновлення підсумків.

У тестовій конфігурації, яку Ви можете завантажити за посиланням наприкінці статті, мною також було додано подію оновлення результатів під час запису документа. У цьому використовується механізм оповіщення форм. Докладніше на цьому зупинятись не будемо.

Алгоритм

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

Примітка: налаштування динамічних списків (див. скріншот вище) ґрунтуються на механізмах системи компонування даних (СКД). Відповідно, працювати з ними можна аналогічним чином (програмне додавання, зміна, читання та інше).

Етапи формування запиту для отримання підсумків такі:

1. Отримуємо вихідний запит динамічного списку.

Як бачимо, запит обирає всі реквізити документа. Для невеликого ускладнення додав власне поле "Рівень рейтингу", яке формується конструкцією "ВИБІР".

2. Формуємо текст умов запиту (секція "ДЕ") та підставляємо у вихідний запит.

До отриманого вихідного тексту запиту нам необхідно додати умови відповідно до настроєного відбору динамічного списку.

Процедура, залежно від типу переданого елемента відбору (група чи елемент відбору), формує відповідний текст умови. Всі умови в групі обрамляються дужками, входять також обрамляються круглими дужками. Умови між виразами залежить від вищестоящої групи (між верхніми в ієрархії елементами ставиться умова " І " ).

Якщо елемент містить прапор використання (властивість "Використання") тоді елемент обробляється. Формований текст залежить також від умови порівняння (Рівно, не однаково, у списку та інше). Залежність формованого тексту умови від виду порівняння можна побачити у наступній функції.

Ще однією цікавою, на мій погляд, функцією є "ОтриматиТекстПоляПредставлення". Потрібна вона для того, щоб підставляти умови запиту поля, які формуються виразами мови запиту. Вище у вихідний запит мною було додано поле "Рівень рейтингу". Якщо користувач буде використовувати його у відборі, то за умови запиту потрібно підставляти повністю вираз. Ця функція отримує текст поля із запиту на його подання. Для таких складних полів вона поверне повністю текст висловлювання.

Докладніше алгоритм дивіться у тестовій конфігурації, що додається до статті. Нижче наведу скріншот налаштувань відбору та сформованих для них умов запиту.

Сформований текст умов приєднується до запиту динамічного списку. Результат запиту міститься у тимчасову таблицю.

3. Перший запит поміщаємо у тимчасову таблицю та виконуємо угруповання за підсумковими полями з необхідними агрегатними функціями.

Нагадаю, що нам потрібно отримати середнє значення по полю "Рейтинг" та загальну суму по полю "Сума". Запит з урахуванням відборів ми сформували, залишилося зробити підрахунок підсумкових значень. Робиться це таким запитом:

Після виконання запиту обробляємо отриманий результат, повертаємо його на клієнт та записуємо до реквізитів форми, які ми створили раніше. Зрештою, ми отримали відображення підсумків у підвалі динамічного списку (див. перший скріншот до статті).

Оптимальність рішення

Взагалі цей підхід може негативно вплинути на продуктивність. Наприклад, якщо програма підраховуватиме результат без встановленого відбору в динамічному списку, то кількість записів, що вибираються, може бути величезною (наприклад, за кілька років). У результаті кожне оновлення результатів може тривати десятки (!!!) секунд. Тому має сенс підраховувати підсумки лише якщо було встановлено відбір. Це умови поставив у тестовій конфігурації.

Плюс, підрахунок підсумків, запит ми можемо зробити тільки на стороні сервера. Тому потрібно серйозно підійти до звернення на сервер, оскільки процедура оновлення результатів може виконуватися дуже часто. Уявіть собі журнал чеків ККМ у торговій організації, де за хвилину може бути введено до 5 чеків, а на годину до 300 чеків. Щоразу після запису документа буде викликано оновлення результатів. Тому розумно було б скоротити трафік, що передається за рахунок використання позаконтекстних процедур.

На наступному скріншоті представлений програмний код виклику позаконтекстної серверної функції, що повертає підсумки.

Першим параметром передаємо відбір динамічного списку, другим структуру типу "Ім'яПоляОтбору ТипЗначенняПоляОтбору". Зверніть увагу, що перший параметр функції виходить як самостійне значення. Не можу сказати точно чому, але якщо передавати відбір як посилання, то платформа видає помилку про те, що не можна змінити відбір. Помилку вдалося обійти тільки таким чином.

Примітка: використання позаконтекстних процедур дозволяє скоротити розмір трафіку, що передається в рази, оскільки дані форми на сервер не передаються, на відміну від контекстних серверних процедур (директива "&На Сервері").

Висновок

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

Плюс до всього, використання регістрів накопичення дозволить підраховувати підсумки без урахування відбору, оскільки система оптимально працює із уже розрахованими підсумками за минулі місяці.

Тим не менш, описаний у статті спосіб має місце при вирішенні завдань.

Файли для завантаження:

Друк (Ctrl+P)

Динамічний список

1. Загальна інформація

Динамічний список є спеціальним типом даних, що дозволяє відображати на формі довільну інформацію з таблиць бази даних. Для цього потрібно вказати таблицю, дані з якої необхідно відобразити, або описати одержувану вибірку мовою запитів.
Механізм заснований на системі компонування даних і надає можливості для сортування, відбору, пошуку, угруповання та умовного оформлення даних. При цьому джерелом даних служить запит, який формується системою автоматично (на підставі зазначених даних), або пишеться розробником вручну.

Мал. 1. Варіанти створення динамічного списку

При створенні реквізиту форми типу Динамічний Списокрозробник може вибрати два способи формування запиту до даних:
● Завданням основної таблиці – в цьому випадку досить просто вказати таблицю (властивість Основна таблиця), з якої необхідно отримувати дані, та система автоматично формуватиме запит до даних (див. праву частину на рис.1).
● Ручним формуванням запиту – для цього потрібно встановити властивість Довільний запит (див. ліву частину мал.1). Після цього буде доступне ручне формування запиту на отримання даних з інформаційної бази.
За допомогою запиту можна виконувати вибірку даних із кількох таблиць, тому можна вказати основну таблицю. Це потрібно для того, щоб динамічний список міг визначити, які головні дані, а які – другорядні, і міг правильно вибирати і відображати інформацію, а також надавати стандартні команди. Однак, якщо в запиті неможливо визначити основну таблицю, то її можна не вказувати, але тоді
динамічний список не надаватиме команди, пов'язані з основною таблицею. Крім того, у цьому випадку (без вказівки основної таблиці) буде суттєво знижено ефективність отримання даних динамічним списком.
З метою підвищення продуктивності рекомендується всі з'єднання, які використовуються в довільному запиті тільки для отримання додаткових даних, робити необов'язковими за допомогою розширення мови запитів системи компонування даних.
Для динамічного списку, що є основним реквізитом форми, можна встановлювати значення відбору за допомогою параметра форми Відбір. Для цього необхідно, щоб назва властивості структури, що знаходиться в параметрі Відбір,
збіглося з ім'ям поля відбору динамічного списку. У цьому випадку значення властивості структури буде встановлено як праве значення елемента відбору. Якщо в якості значення елемента параметра Відбір форми динамічного списку передано масив, фіксований масив або список значень, то добір додається умова з варіантом У Списку, в праве значення якого поміщається список значень (в який перетворюються масив і фіксований масив).
Як довільний запит у динамічному списку може виступати запит, в якому для формування значення будь-якого поля використовується параметр, наприклад:

ВИБРАТИ
ВИБІР
КОЛИ Доставка.Коефіцієнт = 1 ТОДИ &Подання
Інакше Доставка. Коефіцієнт
КІНЕЦЬ ЯК Коефіцієнт
З

При цьому якщо значення параметра відрізняється від типу реквізиту об'єкта (наприклад, Реквізит1має тип Число, а значення параметра – тип Рядок), то для коректного відображення поля слід виконати явне наведення значення параметра до потрібного типу:

ВИБРАТИ
ВИБІР
КОЛИ Доставка.Коефіцієнт = 1 ТОДИ ВИРАЗИТИ(&Подання ЯК Рядок(100)) Інакше Доставка. Коефіцієнт
КІНЕЦЬ ЯК Коефіцієнт
З
Документ.ДоставкаПродукції ЯК Доставка

Якщо поле, за яким встановлюється відбір, відключено за допомогою функціональних опцій, то відбір по такому полю не встановлюється, навіть якщо значення відбору передано як параметр форми або зв'язків параметрів вибору.
За допомогою властивості Динамічне зчитування даних динамічному списку вказується на необхідність зчитування даних невеликими порціями.
(Докладніше про способи отримання даних динамічним списком і кешування даних див. нижче). Незалежно від цієї ознаки діють такі умови:

● Якщо встановлено режим перегляду у вигляді ієрархічного списку, будуть зчитуватися лише дані поточної групи та дані всіх батьківських елементів (без підлеглих елементів).
● Якщо встановлено режим перегляду дерева, зчитуються лише дані відкритих вузлів дерева.
● Не підтримується одноразове завантаження даних динамічного списку у разі встановленого ієрархічного перегляду (властивість Відображення встановлено на Дерево) та початковому відображенні дерева, встановленому в Розкривати всі рівні. Для отримання даних буде виконано стільки запитів до сервера, скільки вузлів знаходиться в списку, що відображається.
В рамках одного отримання даних динамічний список повторно використовує раніше створені тимчасові таблиці при дотриманні наступних умов:
● У пакетному запиті списку відсутній запит після основного запиту пакета.
● Склад тимчасових таблиць та полів у них незмінний з попереднього виконання пакетного запиту.

У своїй роботі динамічний список використовує значення наступних властивостей реквізитів метаданих об'єктів:
● формат,
● формат редагування,
● підказка,
● ознака виділення негативних значень,
● маска,
● ознака багаторядкового режиму,
● ознака розширеного редагування,
● режим пароля.
Під час відображення та редагування відбору та параметрів системи компонування даних використовується формат редагування відповідного поля.

2. Обмеження та особливості

Під час встановлення відбору динамічного списку слід пам'ятати, що відбір не діє на групи, якщо для динамічного списку вибрано режим відображення Ієрархічний список або Дерево. Під «групами» розуміється елемент довідника чи плану видів характеристик, що має властивість ЦеГруппа встановлено значення Істина.
Відбори, що автоматично накладаються динамічним списком на стандартні реквізити Власник, Батько, Дата, Період та ЕтоГрупа застосовуються
стандартними засобами системи компонування даних. Відбори, що автоматично накладаються динамічним списком на ключові поля, можуть застосовуватися як стандартними засобами системи компонування даних, так і шляхом безпосереднього додавання до тексту запиту умови Уполя основний таблиці. В результаті застосування відборів засобами компонування, вони можуть бути застосовані як у вкладених запитах, так і в параметрах віртуальних таблиць.

Під час створення динамічних списків рекомендується перевірити всі динамічні списки з довільними запитами. У процесі перевірки слід переконатися, що якщо у запиті списку присутні вкладені запити або віртуальні таблиці, і в них доступні для відбору поля з псевдонімами, що збігаються з псевдонімами стандартних реквізитів Власник, Батько, Дата, Період, Це Група або ключові поля, то ці поля дійсно відповідають стандартним реквізитам, з якими у них збігається псевдонім. Якщо це не так – слід змінити запит, щоб вони збігалися або
псевдонім вирізнявся.
Якщо вибрано ручне формування запиту, на запит накладаються деякі обмеження:
● Не підтримується використання вказівок ПЕРШІ у запиті динамічного списку. При необхідності використовувати в динамічному списку вибірку, обмежену за кількістю записів, слід переробити запит формування динамічного списку таким чином, щоб змістовна частина запиту була розміщена в підзапиті і обмежити кількість одержуваних записів в цьому підзапиті. Замість підзапиту можна використовувати тимчасову таблицю.
● Не підтримується вибір, сортування та угруповання:

  • За реквізитами табличних елементів.
  • Поля уявлень.
  • Поле ВерсіяДаних.
  • Поле Ім'яПредвизначенихДаних.
  • Поле подання таблиці плану рахунків.
  • Поле рух таблиці регістра накопичення.
  • Поле ТипЗначення таблиці плану видів характеристик.
  • Поле типу Тип;
  • Поле типу Рядок (необмежену довжину).
  • Поле типу ДвійковіДані.

● Не підтримується сортування та групування по полях Субконто<НомерСубконто>та ВидСубконто<НомерСубконто>таблиці РухуСубконто регістра бухгалтерії.
● Не підтримується групування по полях, які є виразом мови запитів, що містять агрегатні функції.
● Якщо вибрано основну таблицю, запит динамічного списку має такі обмеження:

  • Чи не підтримуються об'єднання.
  • Не підтримується використання секції ПОРЯДОЧИТИ ПО. Слід використовувати запит без основної таблиці або задавати необхідне впорядкування через налаштування динамічного списку.

● Якщо динамічний список відображається у вигляді ієрархічного списку або дерева, запис не буде відображено динамічним списком, якщо не відображається хоча б один з батьків цього запису. Іншими словами – для відображення елемента ієрархічного списку, динамічний список повинен відобразити всіх батьків цього елемента до вершини списку. При цьому під вершиною списку мається на увазі чи власне
кореневий елемент ієрархічного об'єкта, що відображається динамічним списком або елемент, встановлений як властивість БатькоВерхньогоРівня розширення таблиці форми для динамічного списку.

Не підтримується використання основної таблиці динамічного списку наступних таблиць:

● Таблиця, для якої відсутній ключ, що унікально ідентифікує кожен запис таблиці (посилання для об'єктних таблиць і ключ запису для таблиць регістрів). Однак такі таблиці можуть бути встановлені як основна таблиця динамічного списку (незважаючи на відсутність ключа):

● таблиця Субконто регістра бухгалтерії;
● всі віртуальні таблиці регістра бухгалтерії, крім таблиці РухуСубконто;
● таблиці значень констант (включаючи таблицю Константи);
● таблиці зовнішніх джерел даних без ключових полів;
● таблиці кубів зовнішніх джерел даних;
● таблиці регістру накопичення:

  • таблиця оборотів;
  • таблиця залишків;
  • таблиця оборотів та залишків.

● таблиці регістру розрахунку:

  • таблиця фактичного періоду;
  • даних графіка;
  • базових даних.

● Таблиці табличних частин об'єктів;
● Таблиці реєстрації змін (які використовуються в механізмах обміну даними);
● Таблиці послідовностей;
● Таблиці перерахунків (які використовуються в механізмах періодичних розрахунків).
● Таблиці, які використовуються лише у зовнішньому з'єднанні.

Іншими словами, динамічний список із зазначеною основною таблицею працюватиме коректно в тому випадку, якщо в результаті виконання запиту,
зазначеного як джерело даних, не збільшується кількість рядків, одержуваних з основної таблиці (з урахуванням накладеного відбору). Якщо в результаті виконання запиту кількість рядків, які отримують запит з основної таблиці, збільшується, це призведе до порушення унікальності ключа записів таблиці, що відображається списком. У цьому випадку необхідно вимкнути використання таблиці динамічного списку.
При роботі динамічного списку необхідно враховувати права доступу на реквізити, які відображаються списком:
● На сторону клієнта не передаються дані динамічних списків, які позначені властивістю Використовувати завжди, але для яких у поточного користувача відсутнє право Перегляд. Доступ до даних таких колонок (за допомогою властивості ПоточніДані та методу ДаніРядки())
на стороні клієнта неможливе.
● Якщо у поточного користувача немає права перегляду ключового поля динамічного списку, отримання даних цим динамічним списком призводить до помилки порушення прав доступу.
Для динамічного списку, який відображає список переліку, відсутня можливість інтерактивного налаштування списку.
Склад колонок та налаштування динамічного списку пов'язані з полями запиту псевдонімів полів вибірки. Якщо в запиті для поля вибірки псевдонім не заданий явно і поле є системним, то як псевдонім використовується ім'я поля для англійської варіанти вбудованої мови.
Вказаний зв'язок означає, що при зміні (або явній вказівці псевдоніма для поля, у якого використовувався автоматичний псевдонім)
псевдоніма поля запиту, що формує дані динамічного списку, будуть втрачені налаштування реквізиту динамічного списку, елементи форми «втратять» реквізити, що відображаються, налаштування динамічного списку стануть невірними і т.д.
Якщо джерелом даних динамічного списку є таблиця (звичайна або віртуальна), яка дозволяє встановлювати відбір за періодом, то в тому випадку, якщо користувач встановлює період відображення в такому динамічному списку (команда Встановити інтервал дат ...),
задані межі періоду будуть встановлені як значення відбору або параметрів віртуальної таблиці. Якщо засобами розширення мови
запитів для системи компонування даних були явно вказані імена параметрів віртуальної таблиці – будуть встановлені параметри із заданими
іменами. Таблиці, для яких можна керувати періодом відображення або обробки даних:
● таблиці регістрів (основні чи віртуальні), котрим є можливість відбору за періодом (для регістру розрахунку – за періодом реєстрації);
● основні таблиці документів, бізнес-процесів та завдань;
● основні таблиці журналів документів;
● основні таблиці послідовностей, таблиці меж послідовностей.
Як параметр запиту динамічного списку може бути масив або список значень. Однак якщо параметром є список значень, то значення відбору буде використано тільки перше значення списку. Якщо динамічний список використовує запит з параметрами, початкова установка значень параметрів повинна виконуватися в обробнику При створенні сервера.
При відображенні даних динамічного списку слід пам'ятати про такі особливості:
● Якщо програмне змінення властивостей динамічного списку не автоматично повторно заповнює командні панелі, пов'язані
із цим динамічним списком.
● Якщо кілька полів згруповані в групу з режимом групування У комірці і в згрупованих полях є поле, яке відображається прапорцем, то цей прапорець завжди буде відображатися першим у комірці, що вийшла (ліворуч тексту).
У динамічному списку при визначенні типу даних для полів, до складу виразів яких входять параметри, поля або літерали, результуючий тип визначається за типами полів і літералів. Якщо тип значення параметра не входить до результуючого типу даних – його значення буде усічено.
Наприклад, у наступному прикладі поле матиме тип Число.

ВИБІР
КОЛИ БРЕХНЯ
ТОДІ 5
Інакше
&Параметр
КІНЕЦЬ

Якщо налаштувати параметр Параметр значення іншого типу, динамічний список для цього поля отримуватиме значення 0 (значення за замовчуванням для типу Число).
Якщо у цій ситуації потрібно вибирати параметр іншого типу – рекомендується використовувати конструкцію мови запитів ВИРАЗИТИ. Наприклад,
якщо у наведеному вище прикладі потрібно передавати до параметра рядок не довше 100 символів, то слід замінити просту вказівку параметра, на вираз з явним наведенням типу:

ВИБІР
КОЛИ БРЕХНЯ
ТОДІ 5
Інакше
ВИРАЗИТИ(&Параметр ЯК Рядок(100))
КІНЕЦЬ

Якщо у довільному тексті запиту динамічного списку у виразах полів вибірки використовуються параметри, слід явно вказати тип параметрів за допомогою конструкції ВИРАЗИТИ. Наприклад, замість Номенклатура ЯК Номеклатуравикористовувати
ВИРАЗИТИ(&Номенклатура ЯК Довідник.Номенклатура) ЯК Номенклатура. В іншому випадку пошук через рядок пошуку може працювати
некоректно чи видавати помилки.

3. Способи отримання та кешування даних динамічним списком

При отриманні даних для відображення динамічний список використовує один із трьох способів:
1. Зчитування з бази даних виконується порціями з кількістю елементів даних, що дещо перевищує кількість рядків, що одночасно відображаються списком (але не менше 20). Не виконується кешування даних на сервері.
2. Зчитування з бази даних виконується сторінками по 1000 елементів даних. Виконується кешування даних на сервері. Ієрархічні дані кешуються: кожному батьку кешується трохи більше 2 сторінок елементів. Один динамічний список кешується трохи більше 20 сторінок елементів. Кешування буде включено динамічним списком для наступних таблиць:
● Критерій відбору;
● Усі таблиці регістру бухгалтерії, крім основної таблиці та таблиці РухуСубконто;
● Усі таблиці регістру накопичення, крім основної таблиці;
● Усі таблиці регістру відомостей, крім основної таблиці;
● Усі таблиці регістру розрахунку, крім основної таблиці;
● Віртуальна таблиця ЗавданняПо Виконавцю;
● Таблиці зовнішніх джерел без ключів;
● Куби зовнішніх джерел.

3. Зчитування з бази даних виконується сторінками по 1000 елементів. Перша порція дорівнює 1 сторінці. Кожна наступна порція збільшується на 1 сторінку (при досягненні кінця попередньої вибірки). Чим ближче пересувається «точка перегляду» до кінця даних, тим більша вибірка зчитується з бази даних, у межі стаючи рівною всім відображуваним даними. Виконується кешування даних на сервері. Максимальна кількість записів у кеші та динамічному списку – 1 000 000.
Залежно від того, що обрано основною таблицею динамічного списку та яке значення набуває властивість Динамічне зчитування, використовуються ті чи інші способи зчитування даних:

● В якості значення властивості Основна таблиця вказана з наступних таблиць: план обміну, довідник, список документів, журнал документів, план видів характеристик, план рахунків, план видів розрахунку, бізнес-процес, завдання, таблиця точок бізнес-процесу:



● Як значення властивості Основна таблиця вказана одна з наступних таблиць: основна таблиця регістра відомостей, регістра накопичення, регістра бухгалтерії, регістра розрахунку, віртуальна таблиця регістра бухгалтерії.

● Властивість Динамічне зчитування:
● Встановлено: використовується спосіб 1 (опис способів наведено вище).
● Скинуто: використовується спосіб 2 (наведено вище).

● Як властивість Основна таблиця вказана таблиця критерію відбору або таблиця завдань за виконавцем (Завдання По Виконавцю):
● Ключ, що ідентифікує рядок таблиці: Посилання.

● Як властивість Основна таблиця вказана віртуальна таблиця регістра відомостей СрезПерших або ЗрезОстанніх:
● Ключ, що ідентифікує рядок таблиці: КлючЗаписи.
● Властивість Динамічне зчитування не застосовується.
● Використовується спосіб 2 (наведено вище).

● Як властивість Основна таблиця вказана одна з віртуальних таблиць регістрів, крім перерахованих вище:

● Властивість Динамічне зчитування не застосовується.

● Властивість Основна таблиця не вказана, використовується довільний запит:
● Ключ, що ідентифікує рядок таблиці: Число.
● Властивість Динамічне зчитування не застосовується.
● Використовується спосіб 3 (опис способів наведено вище).

Для відображення дані передаються на клієнта порціями, розмір яких аналогічний розміру порції в 1 способі зчитування даних (описаний на початку даного розділу).
При створенні форми, що містить динамічний список, спочатку клієнта передається 45 елементів даних кожного видимого динамічного списку (якщо у списку більше 45 елементів). Якщо динамічний список відображає більше 45 рядків, то при відкритті форми буде виконано додатковий серверний дзвінок для отримання відсутніх елементів даних.

4. Налаштування динамічного списку

Властивість Налаштування списку – натискання гіперпосилання Відкрити призводить до відкриття форми налаштування відображення динамічного списку. Налаштування списку виконується так само, як і аналогічні операції в системі компонування даних.


Мал. 2. Умовне оформлення динамічного списку

Під час налаштування динамічного списку конфігурації розробник прикладного рішення має можливість зробити наступне:
● встановити поля, за якими необхідно проводити впорядкування;
● описати відбір даних у списку;
● вказати налаштування умовного оформлення;
● встановити поля, за якими потрібно групувати дані.
Задавати сортування розробнику має сенс, якщо не влаштовує сортування, що встановлюється системою, за замовчуванням.

ПОРАДА.Слід пам'ятати у тому, що невдалий вибір полів сортування (як і відбору і угруповання даних) негативно впливає ефективність динамічної вибірки.
З погляду прикладного розробника, налаштування динамічного списку складаються з кількох частин, пов'язаних між собою. Основною властивістю, через яку можна керувати налаштуваннями динамічного списку є КомпонувальникНалаштувань. Це об'єкт містить три набори налаштувань, які при роботі системи визначають остаточні настройки, які застосовуються до динамічного списку:
● Установки — Установки, створені в режимі Конфігуратора. Властивість динамічного списку Порядок надає швидкий доступ до властивості Налаштування.Порядок компонувальника налаштувань динамічного списку, таким чином, такі конструкції є еквівалентними:
Список.Порядок та Список.КомпоновщикНалаштувань.Налаштування.Порядок;
● Налаштування користувача – це настройки, які змінює користувач у режимі «1С:Підприємство»;
● Фіксовані Установки – ці установки встановлюються з вбудованої мови. Також у цю властивість потрапляють значення відбору, що передаються у форму за допомогою її параметрів. Властивості динамічного списку Відбір, Параметри, Умовне Оформлення надають швидкий доступ до фіксованих параметрів компонувальника налаштувань динамічного списку. Іншими словами, дані звернення є еквівалентними:
Список.КомпоновщикНалаштувань.ФіксованіНалаштування.Відбір та Список.Відбір.
При формуванні остаточного настроювання динамічного списку різні варіанти налаштувань комбінуються наступним чином:
● Якщо будь-який вид налаштувань цілком позначений як користувальницький, то в результуючі настройки потрапляють налаштування користувача
(Список.КомпоновщикНалаштувань.Налаштування користувача). При цьому якщо якісь елементи налаштувань відзначені як недоступні, то ці налаштування буде поміщено в результуючі налаштування з властивості Список.КомпоновщикНалаштувань. Налаштування.
● Якщо будь-який вид налаштувань позначений як не повністю, а поелементно, то:
● Елементи, позначені як користувацькі, потраплять у результуючі налаштування з властивості Список.КомпоновщикНастроек.Настройки користувача.
● Елементи, позначені як недоступні, потраплять у результуючі налаштування з властивості Список.КомпоновщикНалаштувань.Налаштування.
● Фіксовані налаштування (Список.КомпоновщикНалаштувань.ФіксованіНастройки) додаються до результуючих налаштувань «як є». При цьому неприпустима ситуація, коли у фіксованих і налаштуваннях користувача є однойменні налаштування, наприклад відбір з однаковим лівим значенням в умові.

Якщо у налаштуваннях динамічного списку є параметри, які вимкнені за допомогою функціональних опцій, ці налаштування будуть видалені зі списку доступних налаштувань при отриманні даних динамічного списку.
Керування тим, які параметри будуть доступні користувачеві, а які – ні, виконується у вікні динамічного списку.


Мал. 3. Управління включенням до налаштувань користувача

Прапорець у нижній частині вікна (див. мал. 3) відповідає за розміщення в налаштуваннях (звичайних або швидких) всього виду налаштувань. Ця можливість доступна для відбору, порядку, угруповання та умовного оформлення. Якщо налаштування вказані з режимом редагування Швидкий вибір, то у властивості Група налаштувань таблиці форми, що відображає динамічний список, необхідно вказати порожню групу форми, в якій будуть розміщені елементи, пов'язані зі швидкими налаштуваннями динамічного списку. Якщо група не вказана – швидкі налаштування користувача не будуть відображені на формі. Також є можливість явно викликати створення налаштувань користувача за допомогою вбудованої мови за допомогою методу Створити Елементи Форми Налаштувань користувача () розширення динамічного списку.
Також є можливість вибирати можливість розміщення в налаштуваннях конкретних елементів налаштувань. Ця можливість доступна для елементів відбору та умовного оформлення (див. рис. 3).

Якщо необхідно, щоб при відкритті динамічного списку були завантажені будь-які спеціальні налаштування, це можна зробити двома способами:
● За допомогою параметра динамічного списку Налаштування користувача. Дані, що містяться в цьому параметрі, будуть поміщені в налаштування користувача динамічного списку.
● За допомогою параметра форми динамічного списку Ключів налаштувань. Якщо при відкритті форми вказати цей параметр, то в динамічний список, що є основним реквізитом форми, будуть завантажені налаштування користувача, розташовані в сховищі налаштувань із зазначеним ключем.

5. Пошук у динамічному списку

Динамічний список, розташований на формі, надає можливість виконувати інтерактивний пошук у даних, що відображаються. Пошук може здійснюватися за допомогою таких інструментів: рядки пошуку, діалогу пошуку, пошуку поточного значення, за допомогою історії пошуку та встановленням періоду (для динамічних списків, що відображають документи). Результатом пошуку є обмежений набір записів
динамічного списку (з доступних даному користувачеві), які відповідають критеріям пошуку.
Для керування можливостями пошуку в динамічному списку призначені три властивості таблиці керованої форми, що відображає динамічний список:
● Положення рядка пошуку — Визначення положення рядка пошуку. Може приймати такі значення: Авто, Командна панель, Ні, Верх, Низ.


Мал. 4. Рядок пошуку у динамічному списку

Якщо значення цієї властивості встановлено на Командна панель, то в командній панелі форми (якщо динамічний список є основним реквізитом форми) або в командній панелі, пов'язаної з динамічним списком, буде відображатися рядок пошуку. Рядок пошуку, розміщений у командній панелі, завжди притискається до правого краю командної панелі (разом із кнопками, розташованими правіше рядка пошуку).
Якщо властивість встановлено на Ні, то рядок пошуку буде відсутній на формі, а при початку набору пошукового рядка буде відкриватися діалог.
Якщо властивість встановлено на значення Верх, то рядок пошуку буде розташований між командною панеллю списку та таблицею, що відображає динамічний список. Якщо властивість встановлено на значення Низ, то рядок пошуку буде розміщений відразу після таблиці, що відображає динамічний список.


● Якщо властивість Режим сумісності встановлено на Не використовувати або старше значення Версія 8.3.4 – Командна панель.
Перехід до рядка пошуку здійснюється таким чином:
● Натисканням клавіш Ctrl+F;
● Мишею;
● При початку набору тексту у динамічному списку (з урахуванням значення властивості динамічного списку ПошукПріВведення).
● Положення стану перегляду – описує, де відображатиметься стан перегляду: за якими полями здійснювався пошук та які значення
шукали у кожному полі. Може приймати такі значення: Авто, Ні, Верх, Низ


Мал. 5. Стан пошуку у динамічному списку

Якщо властивість встановлена ​​в значення Ні, стан перегляду буде відсутній на формі. В результаті визначити, виконано пошук чи ні, можна буде лише за доступністю кнопки Скасувати пошук.
Якщо властивість встановлена ​​у значення Верх, стан перегляду буде розташований між командною панеллю списку і таблицею, що відображає динамічний список. Якщо властивість встановлено на значення Низ, стан перегляду буде розміщений відразу після таблиці, що відображає динамічний список.
Якщо форму створено в «1С:Підприємстві» версії 8.3.4 і молодше – властивість встановлено значення Ні. Якщо форма створена в «1С:Підприємстві» версії 8.3.5 і старше – властивість встановлено значення Авто. Реальне значення властивості у разі визначатиметься так:
● Якщо властивість Режим сумісності встановлено на значення Версія 8.3.4 (і нижче) – значення Ні;
● Якщо властивість Режим сумісності встановлено на значення Не використовувати або старше значення Версія 8.3.4 – значення Верх;
● Положення керування пошуком – визначає, де відображатиметься кнопка керування пошуком. Кнопка відкриває меню, яке містить таку інформацію: команди Знайти поточне значення, Розширений пошук, Скасувати пошук, Встановити період (для списків документів та журналів) та історія пошукових запитів (останні 5 запитів). Властивість може набувати значення: Авто, Ні, Командна панель.


Мал. 6. Управління пошуком у динамічному списку

Якщо властивість встановлено на значення Ні, то кнопка управління пошуком буде відсутня на формі (але команди будуть доступні за допомогою меню Ще). Значення властивості Командна панель розміщує кнопку на командну панель, пов'язану з таблицею, що відображає динамічний список.
Якщо форму створено в «1С:Підприємстві» версії 8.3.4 і молодше – властивість встановлено значення Ні. Якщо форма створена в «1С:Підприємстві» версії 8.3.5 і старше – властивість встановлено значення Авто. Реальне значення властивості у разі визначатиметься так:
● Якщо властивість Режим сумісності встановлено на значення Версія 8.3.4 (і нижче) – значення Ні;
● Якщо властивість Режим сумісності встановлено на Не використовувати або старше значення Версія 8.3.4 – Командна панель;
Якщо на формі є кілька командних панелей, джерелом команд для яких є одна таблиця керованої форми (що відображає дані динамічного списку), то рядок пошуку і кнопка управління пошуком буде розташовуватися тільки в одній командній панелі:
● Або в командній панелі динамічного списку (якщо для неї увімкнено автоматичне заповнення)
● Або в будь-якій з командних панелей, що залишилися.

Розглянемо особливості використання пошуку у динамічному списку:
● Для того, щоб пошуком було зручно користуватися (у тому числі і з точки зору швидкодії), необхідно увімкнути повнотекстовий пошук для всіх об'єктів конфігурації, які можуть використовуватися як основна таблиця динамічного списку. Також у повнотекстовому пошуку повинні брати участь усі реквізити об'єктів конфігурації, які можуть відображатися в динамічному списку та за якими може знадобитися пошук.
Якщо об'єкт виключено з повнотекстового пошуку, то механізм пошуку буде працювати, але продуктивність такого пошуку буде вкрай низькою. Не рекомендується використовувати пошук за об'єктами, які не індексуються повнотекстовим пошуком.
● У прикладному рішенні має бути регламентне завдання, яке регулярно оновлює індекс повнотекстового пошуку.

● Пошук виконується не по всіх колонках динамічного списку (і об'єкта конфігурації), а лише по колонках, які відображаються в таблиці.
● Пошук у динамічному списку по полях посилальних типів з довільним поданням виконується по полях, які використовуються для
формування уявлення (див. тут). Поля, що входять до вистави, виходять з урахуванням обробника Обробка Отримання Полів Подання() відповідного об'єкта.
● Для динамічних списків із зазначеною основною таблицею використовується повнотекстовий пошук за основною таблицею. До результатів повнотекстового пошуку буде додано всі непроіндексовані посилання з основної таблиці. Результат повнотекстового пошуку для основної таблиці використовується як відбір ключових полів. Також виконується повнотекстовий пошук полями, що відображаються у списку з інших таблиць (якщо для поля та об'єкта конфігурації використовується повнотекстовий пошук). Без увімкненого повнотекстового пошуку дані можуть бути
знайдено, але сам пошук буде виконуватися дуже повільно.
Якщо при спробі здійснити повнотекстовий пошук виникла помилка, пошук буде виконуватися без застосування повнотекстового пошуку.
Наприклад, таке може статися при пошуку по одній літері та великій кількості рядків в інформаційній базі, що починаються з цієї літери.
● Якщо для поля основної таблиці динамічного списку використовується відбір з видом порівняння Рівно, то при виконанні повнотекстового пошуку до пошукового запиту по цій таблиці буде додано значення відбору.
● Рядок пошуку розбивається на слова. Це розбиття виконується за такими правилами:
● Рядок розбивається, використовуючи символи пробілу та табуляції як роздільники.
● Потім обробляється кожен фрагмент, що вийшов:
● Якщо фрагмент є поданням дати (з часом або без нього) з урахуванням поточних регіональних установок сеансу, словом є цей фрагмент.
● Інакше фрагмент розбивається далі, використовуючи як роздільники символи “,.-/\”. У цьому випадку як слово приймається кожен фрагмент рядка, що вийшов.

● Для кожного слова формується свій набір умов, які об'єднуються «АБО». Цей набір умов формується в тому випадку, якщо повнотекстовий пошук даного слова в таблиці, з якої було отримано дане поле, повернув хоча б один об'єкт або повнотекстовий пошук не використовувався для цього поля. Умови формуються так:
● Для поля типу Рядок умова має вигляд Ім'яПоля подібно до %Слово%.
● Для поля типу Число умова має вигляд Ім'яПоля=Значення, де Значення – це слово, яке наведено до типу Число. Якщо приведення виконати неможливо, пошук по полю не виконуватиметься.
● Слово шукається як підрядок у типовому поданні для типу Булеве, визначене для поточного сеансу. Якщо шукане слово виявлено у поданні, то надалі виконується пошук значення, відповідного уявленню, у якому виявлено слово. При цьому для пошуку не використовуються уявлення, задані за допомогою властивості елемента форми Формат.
● Для поля типу Дата умова має вигляд Ім'яПоля>= ПочатокДня(Слово) та Ім'яПоля<=КонецДня(Слово). Если Слово подобно дате, в которой год
вказаний однією або двома цифрами, рік буде приведено до поточного віку і вже це значення підставлятиметься в пошукову умову.
● Для посилальних полів виконується пошук по полях, що використовуються для формування подання посилання. У кожному з цих полів пошук
виконується за правилами, описаними вище. Для пошуку не використовуються поля, які використовуються для формування довільного представлення даних.
Набір умов кожного слова об'єднуються «по І».
● Для значень з провідними нулями, пошук можна виконувати як по рядку з провідними нулями, так і по рядку, вказаному без провідних нулів.
● Якщо динамічний список відображає список документів або журнал документів, то заданий інтервал перегляду списку також відображається в області форми, відведеної для відображення стану перегляду для потрібного динамічного списку.
● Команда пошуку за поточним значенням недоступна, якщо основною таблицею динамічного списку є критерій відбору.
● Знайдені фрагменти рядків виділяються під час відображення у таблиці.
● Для однієї колонки підтримується пошук лише за одним пошуковим рядком. При додаванні нового пошукового запиту для колонки, за якою вже виконується пошук, відбудеться заміна пошукового виразу, а не додавання двох пошукових запитів.
● Якщо на формі відсутнє доповнення елемента форми виду Відображення рядка пошуку, пов'язане з таблицею (властивість Джерело доповнення елемента форми), що відображає динамічний список, то натискання клавіш Ctrl+F призводить до відкриття діалогу пошуку.


Мал. 7. Діалог пошуку

Якщо на формі є додаток елемента форми виду Відображення рядка пошуку, пов'язане з таблицею (властивість Джерело доповнення елемента форми), що відображає динамічний список, то для відкриття діалогу пошуку слід використовувати команду Розширений пошук.
● При використанні діалогу пошуку слід пам'ятати про такі особливості:
● Відкриття діалогу пошуку за поєднанням клавіш призводить до того, що значення поточної комірки виявляється в рядку Що шукати, а значення перемикача Як шукати встановлюється в значення За точним збігом.

● Відкриття діалог пошуку шляхом безпосереднього початку набору пошукового рядка в динамічному списку призводить до того, що значення перемикача Як шукати встановлюється значення По частині рядка, а текст, що набирається, потрапляє в поле Що шукати.

6. Отримання даних, що відображаються динамічним списком

При використанні динамічних списків може знадобитися виконати різні дії з даними, які відображаються динамічним списком, з урахуванням накладених відборів і застосованого пошуку. До таких дій відносяться: обробка інформації, що відображається, наприклад, перепроведення виділених документів або встановлення будь-якого реквізиту у виділених об'єктів, формування списку доступних об'єктів (з оформленням і т. д.), наприклад, для друку або збереження в табличний документ.
Для отримання даних, які відображаються динамічним списком, слід використовувати методи Отримати Виконувану Схему Компонування Даних () та
ОтриматиНалаштуванняКомпонуванняДаних().
Приклад отримання даних:

Схема = Елементи. Список. Отримати Виконувану Схему Компонування Даних ();
Налаштування = Елементи.Список.ОтриматиВиконаніНалаштуванняКомпонуванняДаних();
КомпонувальникМакета = Новий КомпонувальникМакетаКомпонуванняДаних();
МакетКомпонування = КомпонувальникМакета.Виконати(Схема, Налаштування);
ПроцесорКомпонування = Новий ПроцесорКомпонуванняДаних;
ПроцесорКомпонування.Ініціалізувати(МакетКомпонування);
ПроцесорВиводу = Новий ПроцесорВиводуРезультатуКомпонуванняДанихВТабличнийДокумент;
Повернення ПроцесорВиводу.Вивести(ПроцесорКомпонівки);

Отримання даних у колекцію значень (таблиця чи список значень) виконується аналогічно.
Отримання даних динамічного списку вказаним чином має низку особливостей, які потрібно враховувати під час розробки прикладних рішень:
● Не підтримується таке оформлення таблиці:
● Чергування кольорів рядків;
● Картинка шапки;
● Картинка підвалу;
● Колір фону підвалу;
● Колір тексту підвалу;
● Шрифт підвалу;
● Горизонтальне положення у підвалі;
● Режим пароля.
● Не підтримується умовне оформлення, вказане для керованої форми;
● При впорядкуванні ієрархічної таблиці за зростанням, по полю типу Посилання, записи, що містять порожнє посилання, завжди розміщуються першими.

У процесі доопрацювання конфігурацій кожен програміст 1С стикається з динамічними списками.
Динамічний список – це інтерфейсний об'єкт, що використовується для відображення різних списків об'єктів бази даних або необ'єктних даних – записів регістрів.
Наприклад, динамічний список використовується для відображення списку номенклатури:

Для демонстрації можливостей динамічного списку створимо зовнішню обробку, додамо основну форму. На форму додамо новий реквізит із типом «Динамічний список». Зайдемо до його властивостей і подивимося, що там.
Нас цікавить властивість «Довільний запит». Його включення продемонструє нам усі можливості динамічного списку. Ми зможемо написати запит, використовуючи практично всі можливості мови запитів системи 1С: Підприємство. Встановлюємо прапорець та натискаємо посилання «Відкрити»:

За замовчуванням у наш список виводитимуться список номенклатури із загальним залишком по всіх складах. Для реалізації такого списку додамо наступний запит:


Як основна таблиця виберемо «Довідник.Номенклатура», це дозволить нам працювати з динамічним списком, як зі списком номенклатури - додавати, змінювати, помічати видалення елементи довідника. Також установка основної таблиці робить доступним можливість динамічного зчитування даних - це означає, що вибірка буде проводитися порціями, в міру необхідності.
Далі необхідно створити елементи форми для нашого списку:

Якщо ми спробуємо запустити нашу обробку у такому вигляді, то отримаємо помилку:


Для її усунення необхідно встановити параметр «Період». Для цього можна скористатись методом «ВстановитиЗначенняПараметри» колекції «Параметри» динамічного списку. Метод приймає два параметри:
. "Параметр" - Тип: Рядок; ПараметрКомпонуванняДаних. Ім'я параметра або параметра компонування даних, значення якого потрібно встановити;
. "Значення" - Тип: Довільний. Значення, яке необхідно встановити.
Може бути викликаний в обробнику «При створенні на сервері» форми:

У вас є питання, чи потрібна допомога консультанта?


Надаємо користувачеві можливість змінювати період отримання залишків. Для цього додамо реквізит та пов'язаний з ним елемент форми «Дата»:


У обробнику «Зміни» елемента форми «Дата» викличемо метод «ВстановитиЗначенняПараметра», передавши значення значення пов'язаного реквізиту. Аналогічним чином змінимо процедуру «При створенні на сервері» форми. Оскільки метод доступний на клієнті, виклик сервера не буде потрібно:


Тепер при зміні дати, автоматично оновлюватимуться залишки:




Припустимо, що користувачі хочуть бачити або поточні залишки, або заплановані надходження. Розглянемо один із варіантів реалізації. Додамо реквізит форми бульового типу та пов'язаний з ним перемикач:


При зміні значення перемикача змінюватимемо текст запиту. Для цього скористаємося обробником події «При Зміні» елемента форми «Відображати Кількість КЗступу». Нам необхідно змінити властивість тексту запиту динамічного списку в залежності від значення реквізиту. Так як ця властивість недоступна на клієнті, необхідний виклик серверної процедури:


Результат внесених змін:



Нарешті здійснилася мрія будь-якого «сімейника». Як часто, користувачі програми 7.7 просили зробити нормальний підбір номенклатури. Щоб залишки можна було бачити, і ціни, і встановити фільтри. Доводилося вигадувати різні хитрощі, аж до написання зовнішніх компонентів. У 1С 8.2 з'явилися динамічні списки. Пропоную розглянути, що це таке і що вони можуть дати в 1С 8.3.

За основу візьмемо якусь тестову конфігурацію 1С: "Бухгалтерія підприємства 3.0". Не будемо зараз робити підбір, просто довіднику «Номенклатура» додамо ще одну форму вибору і зробимо її тимчасово основною:

При створенні система за замовчуванням додасть на форму табличного поля з типом "Динамічний список".

Зайдемо до його властивостей і подивимося, що там.

Насамперед нас цікавить прапорець «Довільний запит». Він і відкриє нам усі переваги динамічного списку. У нас з'явиться можливість написати власний запит, з параметрами. Встановлюємо прапорець та натискаємо посилання «Відкрити»:

Відкриється вікно з готовим кодом на . Наразі там просто перераховані всі поля довідника «Номенклатура».

Отримайте 267 відеоуроків з 1С безкоштовно:

Як бачимо, є кнопка виклику « » та прапорець, який дає можливість динамічно змінювати вміст списку. Тобто, коли інший користувач змінює щось у довіднику, у нашому списку це теж зміниться. Крім того, є закладка «Налаштування», але її ми торкнемося пізніше.

Власний запит у динамічному списку

Спочатку створимо потрібний нам запит із залишками та цінами. Приблизно так:

Закладка «Налаштування»

І ось тепер найсмачніше! Переходимо на закладку "Налаштування". І відразу бачимо, що на першій вкладці ми можемо робити будь-які відбори з будь-якого поля у запиті:

Програмне встановлення параметрів запиту в динамічному списку 1С 8.3

Не забуваймо, що у запиті у нас є два параметри: «Період» і «Тип цін». Ми повинні передати їх на запит, інакше буде помилка.

Пропишемо ці параметри у параметрах форми, а в модулі форми додамо наступні рядки:

&На Сервері Процедура ПриСтворенніНа Сервері(Відмова, СтандартнаОбробка) Список. Параметри. ВстановитиЗначенняПараметра("Період" , Параметри. Дата) ; Перелік. Параметри. ВстановитиЗначенняПараметра("ТипЦен" , Параметри. ТипЦен) ; КінецьПроцедури