Напевно, не один об'єкт універсальних колекцій значень не користується такою популярністю у розробників 1с, який користується таблиця значень (ТЗ). Списки значень неможливо розширити реквізитами, дерево значень візуально зручно сприймається, але конструкція програмного читання значення його рядків складно реалізується.
І тільки таблиця значень:
- Здатна безпосередньо заповнювати табличні частини документів, довідників і обробок;
- Є результатом виконання запиту;
- Легко читається і наочно формується;
- і багато багато іншого.
У цій статті ми постаралися дати загальне уявлення про такому складному і універсальному об'єкті, як таблиця значень.
З чого складаються таблиці значень
Всі початківці розробники чітко знають, що у таблиці значень є:
- Колонки, що описують структуру таблиці;
- Рядки, що наповнюють таблицю інформацією.
Однак, ми дуже часто забуваємо про один важливий властивості таблиці - про її індексах, а саме використання їх дозволяє багаторазово прискорити процес пошуку по таблиці, формування відборів в ній і серйозно покращує швидкодію.
Але про все по порядку.
На Рис.1 показано, як виглядає таблиця значень, виведена на друк найпростішої процедурою, яка показує їх структуру та наповнення.
Як видно з прикладу, колонок у таблиці 5, за винятком номера рядка за порядком.
У більшості випадків немає необхідності вказувати тип даних колонки і її ширину, досить визначити найменування стовпця, але в деяких випадках без цього просто не обійтися (припустимо, при вивантаженні таблиці в файл формату dbf).
Якщо в подальшому планується використання таблиці значень в якості джерела даних для запиту, вказівка типу даних необхідно (Рис.2).
Додавання рядка відбувається методом Додати (), з присвоєнням імені нового рядка.
Індекси таблиці значень
Пошук по таблиці значень здійснюється двома методами:
- Знайти (повертає перший знайдений елемент за певними параметрами, в іншому випадку значення Не визначено);
- НайтіСтрокі (повертає масив рядків таблиці, які відповідають певним умовам).
Пошук по великих таблицях сильно «підвішує» систему і може бути тривалий за часом. Саме в цих випадках і треба використовувати індекси.
У першому випадку пошук відбувається по одному значенню і одній колонці, саме її і треба передавати в індекси (Рис.3)
Індекси, передані через кому, вказують на те, що по таблиці може здійснюватися пошук методом НайтіСтрокі, в який в якості параметра буде передана певна структура.
У випадку, наведеному на прикладі, другий рядок вказує на одночасний пошук рядків, що містять певне значення Номенклатури і її характеристики, а третім рядком зазначено, що до параметрів пошуку може бути доданий документ «Заказ на виробництво».
При роботі з різними об'єктами метаданих конфігурацій, а також звітами і обробками нерідко виникає ситуація, коли необхідно зробити деякі дії з їх табличними частинами. Працювати безпосередньо з елементами форми або табличними частинами документів не завжди зручно.
Тут на допомогу знову приходить таблиця значень. У ТЗ, скориставшись методом табличних частин вивантажити () можна:
- Повністю повторити структуру таблиці документа, зі збереженням всієї можливої інформації;
- Визначити тільки ті колонки і рядки, які необхідні для подальшої роботи, і вивести їх.
Зворотна дія (заповнення табличній частини) відбувається методом Завантажити (), єдиним параметром якого є ім'я виведеної таблиці.
Слід зазначити, що зіставлення колонок табличній частині і ТЗ відбувається за іменами.
Повністю скопіювати одну ТЗ в іншу, а також визначити, які рядки і колонки будуть перенесені можна методом Скопіювати ().
Коли необхідно зберегти тільки структуру таблиці, можна скористатися кодом (Рис.4)
При цьому будуть збережені колонки таблиці, а інформація і рядки з дубліката будуть видалені.
Таблиця значень і запит
Як вже було сказано вище, вивантаження результату виконання запиту відбувається в ТЗ, але досить часто у розробників виникає питання: а як запитом обробити таблицю значень, чи можливо це, і який код допомагає це зробити.
Технологія запитів в 1С передбачає використання ТЗ в якості джерел даних, але це обмеження легко можна обійти за допомогою менеджера тимчасових таблиць. Код на Рис.5 показує, як це робиться.
Замінивши «*» на найменування колонок (рядок виду ТЗ.Номенклатура) можна зменшити обсяг вивантажується інформації.
Помилка при виконанні запиту (Рис.5) «Тип не може бути оброблений в запиті», говорить про те, що розробник забув виконати частину коду Рис.2 і не типізував колонки.
Таблиця значень і цикли
При переборі рядків таблиці значень методом містить лічильник (Рис. 6). важливо пам'ятати, що початкове значення індексу рядків - 0, а кінцеве значення ітератора повинно бути на 1 менше кількості рядків в таблиці. В іншому випадку є 100% ймовірність виникнення помилки «Значення індексу виходить за межі діапазону»
Взагалі ж, перебір рядків ТЗ краще здійснювати через конструкцію «Для каждго ... з», визначивши ім'я ітератора.