Відбір на керованих формах 1С 8.3

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

  • Встановлення відбору конфігуратора

Встановлення відбору в режимі користувача

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

Для встановлення відбору у режимі підприємства необхідно викликати команду «Налаштувати список».

Відкриється вікно.


На вкладці «відбір» представлений список полів, який міститься в поточному списку. Вибираємо поля списку, за якими фільтруватимемо. Зробити це можна подвійним кліком або за допомогою drag and drop.


Задаємо вигляд порівняння та значення, тиснемо "Завершити редагування", відбір встановлений.


При встановленні відбору як підприємства на формі списку автоматично створюються поля про швидких відборів.


Щоб платформа 1С автоматично створювала поля швидких відборів, при розробці форми в конфігураторі необхідно вказати групу налаштувань користувача.


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

Встановлення відбору конфігуратора

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

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


Відкриється вікно.


Відбір задається так само, як у режимі користувача.

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


Динамічний (програмний) відбір

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

Методи

Якщо в конфігурації, що розробляється, присутня підсистема БСП «Базова Функціональність», програмний відбір у динамічному списку можна встановити за допомогою типового методу:

ЗагальногоПризначенняКлієнтСервер.ВстановитиЕлементВідборуДинамічногоСписку()

Сигнатура даного методу:

Динамічний Список Тип: Динамічний Список - Список, в якому потрібно встановити відбір.

Ім'яПоля Тип: Рядок – Поле, яким необхідно встановити відбір.

ПравеЗначення Тип: Довільний – Значення відбору (Необов'язковий. Значення за замовчуванням: Невизначено. Увага! Якщо передати Невизначено, значення не буде змінено).

ВидПорівняння Тип: ВиглядПорівнянняКомпонівкиДаних – Умова відбору.

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

Використання Тип: Булеве – Прапорець використання цього відбору (Необов'язковий. Значення за замовчуванням: Невизначено).

РежимВідображення Тип: РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних – Спосіб відображення цього відбору користувачеві. Можливі значення:

  • РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.ШвидкийДоступ – У групі швидких налаштувань над списком.
  • РежимВідображенняЕлементуНалаштуванняКомпонуванняДаних.Звичайний – У налаштування списку (у підменю Ще).
  • РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.Недоступний – Заборонити користувачеві змінювати цей відбір.

Ідентифікатор Налаштування користувача Тип: Рядок – Унікальний ідентифікатор цього відбору (Використовується для зв'язку з налаштуваннями користувача).

Для видалення значення відбору необхідно скористатися типовим методом:

Загального призначенняКлієнтСервер. ВидалитиЕлементиГрупиВідборуДинамічногоСписку ()

Сигнатура даного методу:

Динамічний Список Тип: Динамічний Список - реквізит форми, для якого потрібно встановити відбір.

Ім'яПоля Тип: Рядок – ім'я поля компонування (не використовується для груп).

Подання Тип: Рядок – представлення поля компонування.

У разі відсутності в системі БСП відбір можна встановити самостійно, використовуючи об'єкт ПолеКомпонівкиДаних.

ЕлементОтбору = Список.Відбор. ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("ПІБ"); ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Рівне; ЕлементВідбору.РежимВідображення = РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.ШвидкийДоступ; // Опціонально ЕлементОтбору.ПравоеЗначение = " Іванів " ;

Даний відбір відбере рядки, в яких значення ПІБ = Іванів.

Для використання логічних «І», «АБО», «НЕ» призначений тип даних ГрупаЕлементівВідборуКомпонівкиДаних

Група Відбору = Список. ГрупаОтбору.ТипГрупи = ТипГрупиЕлементівВідборуКомпонівкиДаних.ГрупаАБО; ЕлементОтбору = ГрупаОтбору.Елементи.Додати(Тип("ЕлементОтборуКомпонуванняДаних")); ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("ПІБ"); ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Рівне; ЕлементОтбора.ПравоеЗначение = " Іванів " ; ЕлементОтбору = ГрупаОтбору.Елементи.Додати(Тип("ЕлементОтборуКомпонуванняДаних")); ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("ПІБ"); ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Рівне; ЕлементОтбору.ПравоеЗначення = "Петрів";

Даний відбір відбере рядки, у яких значення «ПІБ» = «Іванів» або «Петрів».

Вибір динамічного списку також можна здійснювати через зміну тексту запиту динамічного списку. Цей варіант працює, коли динамічний список зроблено через «довільний запит».


Для цього до тексту запиту додаємо умову «ДЕ Істина»…


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

Список.ТекстЗапиту = Список.ТекстЗапиту + "І ДовідникКористувачі.ПІБВ(""Іванов"",""Петрів"")";

Якщо цього не врахувати буде помилка, але щоб уникнути, можна переробити в іншу реалізацію. У текст запиту додаємо таку умову:

ДЕ (НЕ &ВідбірВстановлений АБО ДовідникКористувачі.ПІБ В (&ДозволеніПІБ))

Список.Параметри.ВстановитиЗначенняПараметра("ВідбірВстановлений", ПІБ.Кількість() > 0); Список.Параметри.УстановитиЗначенняПараметра("Дозволені ПІБ", ПІБ);

Тут ПІБ – масив.

Як видно, 2 рядки коду проти 10. Який із способів вибрати, залежить від конкретного прикладного завдання.

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

Як встановити відбір до списку?

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

Щоб встановити динамічний сортувальник програмно, слід знати, що відбір 1С вважається властивістю динамічного списку. Щоб додати відбір, користуючись цією якістю, необхідно додати новий елемент як відбір. Щоб усе працювало, потрібно встановити параметр у полі вибору правого, лівого значення, а також у полі «Вид порівняння». Важливо вписати значення "істина" у поле використання. Таким чином, можна створити найпростіший відбір. Додаючи умови в інших полях, можна зробити його більш складним і підігнати під свої потреби.

Відбори у таблиці значень 1С

Щоб встановити вибір у таблиці, можна використовувати один з декількох варіантів. Можна зробити ручний відбір – перебрати таблицю та приховати усі рядки, які вам не потрібні. Але це дуже трудомісткий процес, яким захочеться займатися не кожному. Цей спосіб підійде тільки тим, хто тільки починає працювати з 1С і ще може освоїти складніші, але продуктивні методики.

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

p align="justify"> Найраціональніший метод відбору в таблиці можна зробити через будівельник запиту.

Інші можливості динамічного списку в 1С

Динамічні списки дають широкі можливості для роботи з даними, яких у 1С7 не було. Одна з найзручніших із них – створення форм вибору. Наприклад, в 1С: Бухгалтерія необхідно зайти в меню Номенклатура і додати нову форму вибору, призначивши її як основну.

Щоб встановити параметри в динамічний список:

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

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

Програмне встановлення запиту

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

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

Друк (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. Отримання даних, що відображаються динамічним списком

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

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

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