Контакти

Отримати дані структури 1с. Універсальна колекція Дерево значень

Структура і відповідність є свого роду таблицею, що має дві колонки: ключ і значення. У колонці "Ключ" зберігається індексований елемент, за яким здійснюється пошук. Сам елемент пошуку знаходиться в полі "Значення". Який механізм краще використовувати з точки зору швидкодії пошуку? Проведемо серію експериментів.

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

Нижче наведено лістинг процедури для пошуку значення по ключу для відповідності і структури.

Процедура ПоіскЗначеніяПоКлючу (ДляСоответствія, Ключ) Якщо ДляСоответствія Тоді Повернення ІскомоеСоответствіе [Ключ]; Інакше ЗначеніеПоіска = Не визначено; ІскомаяСтруктура. Властивість (Ключ, ЗначеніеПоіска); Повернення ЗначеніеПоіска; КонецПроцедури

Для першого досвіду отримані наступні результати:

Як ми бачимо, з досить великим відривом виграє відповідність. Час пошуку для структури показано приблизно в 1/4 рази повільніше.

Після другого експерименту ситуація кардинально змінилася:

Час пошуку для відповідності з параметром типу "Рядок" в ключі програє структурі практично в два рази.

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

Більш ніж в шість разів відповідність впоралося з цим завданням швидше.

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

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

Для значень типу "Структура" доступний метод "Властивість ()":

ТестСтруктура = Новий Структура; ТестСтруктура. Вставити ( "ТестКлюч", "ТестЗначеніе"); ЕстьЗначеніеТестКлюч = ТестСтруктура ( "ТестКлюч"); // В результаті змінна "ЕстьЗначеніеТестКлюч" буде містити значення ІСТИНА

Якщо ж ми спробуємо таким же чином дізнатися про існування будь-якого елементу форми або параметра на області макета (як приклад), то це викличе таку помилку:

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

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

Але що робити, якщо колекція не підтримує роботу з подібними методами, описаними вище. У таких випадку потрібен зовсім інший спосіб роботи з цими типами даних.

Сьогодні в статті йтиметься про універсальний підхід, що дозволяє визначити наявність властивості у значення будь-якого типу даних 1С: Підприємство 8.x.

Як це реалізувати

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

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

// Змінні: // // 2. ІмяСвойства - змінна типу"Рядок", що містить шукане властивість// Функція ПеременнаяСодержітСвойство (Змінна, ІмяСвойства) Якщо СтруктураПроверка [ІмяСвойства] = NULL Тоді Повернення Брехня; Інакше Повернення Істина; КонецЕсли; КонецФункціі

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

практичний приклад

Як приклад в тестової конфігураціїдодамо документ "ТестовийДокумент" з декількома реквізитами. На його форму додані відповідні елементи форми.

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

& НаКліенте Процедура НайтіКоманда (Команда) Якщо ПеременнаяСодержітСвойство (Елементи, ІмяЕлемента) Тоді Попередження ( "Елемент" "" + ІмяЕлемента + "" "знайдено!"); Інакше Попередження ( "Елемент" "" + ІмяЕлемента + "" " НЕ знайдений!"); КонецЕсли; КонецПроцедури // Універсальна функція для перевірки наявності властивостей у значення будь-якого типу даних// Змінні: // 1. Змінна - змінна будь-якого типу, для якої необхідно перевірити наявність властивості // 2. ІмяСвойства - змінна типу "Рядок", що містить шуканого властивості// & НаКліенте Функція ПеременнаяСодержітСвойство (Змінна, ІмяСвойства) // ініціалізувавши структуру для тесту з ключем (значення змінної "ІмяСвойства") і значенням NULLСтруктураПроверка = Новий Структура; СтруктураПроверка. Вставити (ІмяСвойства, NULL); // Заповнюємо створену структуру з переданого значення змінноїЗаполнітьЗначеніяСвойств (СтруктураПроверка, Змінна); // Якщо значення для властивості структури залишилося NULL, то шукане властивість не знайдено, і навпаки.Якщо СтруктураПроверка [ІмяСвойства] = NULL Тоді Повернення Брехня; Інакше Повернення Істина; КонецЕсли; КонецФункціі

Тестову конфігурація Ви можете скачати за посиланням.

Підведемо підсумок

Описаний в статті підхід дозволяє перевіряти наявності свойст в колекціях будь-якого типу. Елементи форми, колекція метаданих, параметри макета і багато іншого. Негативного впливу на продуктивність не має. Працює на будь-якої версії платформи.

P.S. Як зауважив alcom привожу програмний код з використанням GUID "а.

// Універсальна функція для перевірки наявності властивостей у значення будь-якого типу даних // Змінні: // 1. Змінна - змінна будь-якого типу, для якої необхідно перевірити наявність властивості // 2. ІмяСвойства - змінна типу "Рядок", що містить шукане властивості // & НаКліенте Функція ПеременнаяСодержітСвойство (Змінна, ІмяСвойства) // ініціалізувавши структуру для тесту з ключем (значення змінної "ІмяСвойства") і значенням довільного GUID "а GUIDПроверка = Новий УнікальнийІдентіфікатор; СтруктураПроверка = Новий Структура; СтруктураПроверка.Вставіть (ІмяСвойства, GUIDПроверка); // заповнюємо створену структуру з переданого значення змінної ЗаполнітьЗначеніяСвойств (СтруктураПроверка, Змінна); // Якщо значення для властивості структури залишилося NULL, то шукане властивість не знайдено, і навпаки. Якщо СтруктураПроверка [ІмяСвойства] = GUIDПроверка Тоді Повернення Брехня; Інакше Повернення Істина; КонецЕсли; КонецФункціі

Про що ця стаття

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

  • Що таке універсальні колекції, коли і в яких випадках їх необхідно використовувати?
  • Що спільного у всіх універсальних колекцій? Які прийоми можна використовувати для роботи з усіма ними?
  • Що таке масив, як і коли його використовувати? Які у нього є методи?
  • Навіщо використовувати структуру? У чому її відмінність від масиву?
  • В яких випадках використовувати список значень? Як відобразити його на формі?
  • Відповідність - що це і коли його використовувати? У чому переваги щодо структури?
  • Для чого використовується таблиця значень? Як описати її структуру? Як додати / видалити рядки? Як вивести її на форму?
  • Дерево значень - для чого використовується? Як заповнити і вивести на форму? Як з ним працювати?

застосовність

У статті розглядається платформа 1С: Підприємство 8.3 актуальною редакції.

Як в 1С працювати з універсальними колекціями

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

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

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

існують різні видиуніверсальних колекцій: Масив, Структура, Відповідність, Фіксований масив, Таблиця значень, таблична частинаі т.д. Але у всіх колекцій є схожість поведінки.

Колекція може створюватися в результаті роботи будь-якої функції (функція повертає в якості значення універсальну колекцію).

Можна отримати нову колекцію вручну, звернувшись до конструктора і створивши екземпляр класу.

наприклад: НашМассів = Новий Масив;

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

Так, в конструкторі для можна вказати кількість елементів у відповідних вимірах. Тобто можна відразу ж оголошувати багатовимірні .

Відповідний опис конструктора є в синтаксис-помічника.

Таким чином, використовуючи параметри конструктора, можна відразу поставити бажану поведінку даного об'єкта.

Але параметри є необов'язковими, розробник може їх не ставити і в подальшому визначити поведінку Масиву так, як вважає за потрібне.

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

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

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

наприклад, НашМассів. Зверніть увагу, в цьому випадку система повертає елемент Масиву з індексом 3, а по порядку це четвертий елемент Масиву.

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

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

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

Для більшості універсальних колекцій застосовні методи: Кількість, Індекс, Додати, Вставити, Видалити та Знайти.

Кількість - це функція, яка повертає кількість елементів колекції. Вона може використовуватися перед циклом для, Як представлено на малюнку.

Метод Індекс існує не у всіх колекцій, а тільки у тих, на елементи якої можна послатися. Як приклад можна привести ТабліцуЗначеній.

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

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

Метод Індекс дозволяє визначити, який індекс відповідає цьому рядку (тобто поточну позицію рядка в таблиці). Значення індексу починаються з нуля.

Методи додавання нових значень в дану колекцію існують практично у будь-який універсальної колекції. На малюнку представлено, як заповнити Масив значеннями від 0 до 10 двома способами.

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

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

синтаксис: Вставити (,)

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

Для видалення елементів з колекції використовується метод видалити. У методі Видалити вказується за індексом, який елемент ми будемо видаляти.

синтаксис: Видалити()
Приклад використання: НашМассів.Удаліть (5);

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

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

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

Якщо значення знайдено, то даний метод повертає індекс або певну рядок. Якщо значення, не знайдено, повертається значення типу Не визначене. Стосовно до Масиву повертається індекс, Яке значення Не визначене.

Приклад використання: НашаПеременная = НашМассів.Найті (8);

Універсальні колекції можна дуже швидко очищати, тобто видалити абсолютно всі елементи. Для цього використовується метод Очистити (), Який видаляє елементи Масиву, рядки ТабліциЗначеній, Або дані інших колекцій.

Додаткові методи для Масиву

метод ВГраніца ()повертає кількість елементів мінус один. Тобто якщо ми використовуємо цикл для, То замість методу Кількість можемо відразу використовувати метод Кордон ().

Зокрема, змінну КолічествоВМассіве можна було визначити інакше:

КолічествоВМассіве = НашМассів.ВГраніца ();
Тоді при описі самого циклу віднімати від даної змінної одиницю не слід.

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

синтаксис: Встановити (,)

приклад: НашМассів.Установіть (2,8);

Альтернативний варіант: НашМассів = 8;

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

синтаксис: Отримати ()

приклад: НашаПеременная = НашМассів.Получіть (2);

Альтернативний варіант: НашаПеременная = НашМассів;

Універсальна колекція Структура

Структура, так само як і Масив, може мати необмежену кількість елементів, але ось зміст елемента відрізняється від Масиву.

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

ключ- це строго строковий тип даних, який описує значення. наприклад, ключу«Код» може відповідати значення 113; ключу«Ім'я» значення «Вася». На саме Значення обмеження типу даних не накладається.

Структуру дуже зручно використовувати, якщо ми хочемо створити якийсь список параметрів. якщо дана структураназивається НашаСтруктура, То звертатися до її двома значеннями ми будемо в такий спосіб: НашаСтруктура.Код і НашаСтруктура.Імя.

Таке звернення набагато зручніше, ніж якби ми всі параметри визначили в Масив і зверталися до них за індексом.

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

Вона використовується для опису деяких параметрів, яких часто існує досить велика кількістьу всіх алгоритмах.

Крім того, Структура застосовується в тому випадку, якщо процедура і функція містять велику кількість переданих параметрів.

Тоді набагато зручніше записати всі параметри в Структуру і саме її і передавати. Тобто відбувається «упаковка» параметрів процедур і функцій.

Окремо слід відзначити, що в якості ключав Структурі може виступати не абсолютно будь-який рядок. Накладаються певні обмеження.

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

припустимо початок ключаз букви або знака підкреслення. Таким чином, ключповинен задовольняти вимогам до створення ідентифікаторів.

Відзначимо, що ще Сруктура відрізняється від Масиву. У Структурі є метод вставити, В Масиві є два методи для вставки: вставити(В певну позицію) і Додати(В кінець списку). У Масиві всі елементи є впорядкованими.

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

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

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

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

Як і Масив, конструктор Структури може мати параметри. Тобто можливо описати сам зміст Структури, використовуючи конструктор.

На відміну від Масиву, де можна просто вказати кількість елементів для всіх розмірностей, в Структурі можливо задавати сам зміст.

наприклад: НашаСтруктура = Новий Структура ( "Код, Ім'я", 133, "Вася");

Через кому перераховуються спочатку імена Ключів, а потім, відповідно, в тій же послідовності значення параметрів.

Щоб додати до Структуру нового значення існує метод вставити, Який вставляє нову пару(Ключ і Значення).

наприклад: НашаСтруктура.Вставіть ( "членів сім'ї", 3);

Для Структури характерний ще один метод, який використовується досить часто. це метод властивість.

За допомогою даного методу можна зрозуміти, а чи є в цій Структурі такий елемент, у якого Ключ має таке-то ім'я.

Якщо існує такий елемент, то система поверне значення Істина, в іншому випадку - Брехня.

Наприклад, вираз НашаСтруктура.Свойство ( "членів сім'ї")буде дорівнює значенню Істина. Цей метод застосовується досить часто при аналізі Структури.

Як і для будь-якої універсальної колекції, допустимо звернення до властивостей Структури за індексом. Але індекс для Структури - це строкове значення.

наприклад: Повідомити (НашаСтруктура [ "членів сім'ї"]);

Однак слід не забувати, що Структура - це не впорядкована множина об'єктів, саме тому звернення за індексом 0, 1, 2 неприпустимо.

Універсальна колекція Список значень

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

Кожен елемент складається з декількох значень. Схематично список значень можна уявити у вигляді списку з чотирма колонками.

Перша колонка - відмітка. Вона має булевский тип даних і дозволяє користувачеві або ставити прапорці, або їх знімати.

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

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

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

СпісокЗначеній- це той об'єкт, з яким може візуально працювати користувач. Тобто СпісокЗначенійможна вивести на форму.

Користувач може виконувати з ним якісь дії. Крім цього, СпісокЗначенійможна вивести незалежно, використовуючи методи, тобто показати на екран в деякій гілці алгоритму (за винятком серверного коду), щоб користувач вибрав якусь сходинку або проставив будь-які галочки.

знайдемо СпісокЗначенійв сітакс-помічника. конструктор СпіскаЗначенійНЕ параметризрвані (можна задати якісь значення за замовчуванням).

Є такі методи, як:

  • Вставити (,);
  • Додати (,);
  • Кількість ();
  • Індекс ().

Є і спеціальні методи, наприклад, ВигрузітьЗначенія (). При цьому створюється Масив, в який копіюється список значень. наприклад:

МассівЕлементов = СпісокТіповЦен.ВизрузітьЗначенія ();

Існує і зворотний метод:
СпісокТіповЦен.ЗагрузітьЗначенія (МассівЕлементов);

Існують методи пошуку:
НайтіПоЗначенію (); НайтіПоІдентіфікатору ().

Є метод копіювання:
КопіяСпіска = СпісокТіповЦен.Скопіровать ();
даний методпризначений для того, щоб зробити якусь модифікацію з копією.

Існують методи:
СортіроватьПоЗначенію ();
СортіроватьПоПредставленію ().

методи ВибратьЕлемент (,)і ОтметітьЕлементи ()викликають модальное діалогове вікно, яке зупиняє виконання алгоритму, поки користувач не закриє це вікно.

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

Приклад коду, що викликається з модуля Керованого програми:

Відображення даного коду в призначеному для користувача режимі(Модальне діалогове вікно).

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

Створюємо нову команду ЗапонітьПодаркі, Переносимо на форму і визначаємо для неї обробник дії.

У призначеному для користувача режимі, при натисканні в формі обробки кнопки Заповнити подарунки, з'явиться заповнений список.

При бажанні список можна редагувати: якісь елементи додати, якісь - видалити.

Універсальна колекція Відповідність

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

Головна відмінність в тому, що в якості Ключа може вказуватися будь-який тип даних, так само як і для значення. З причини цієї особливості звертатися до значення відповідності необхідно за індексом, як значення індексу вказується значення ключа.

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

Конструктор Відповідності, на відміну від Структури, не містить можливості вказівки параметрів.

Приклад використання:

Відповідність зручно застосовувати тоді, коли необхідно пов'язати будь-які дві структури. Наприклад, кожному рядку табличної частини необхідно зіставити рядок з таблиці значень.
У цьому випадку в якості ключа Відповідності використовується рядок табличної частини і вказується відповідне значення.

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

наприклад: НашеСоответствіе = Новий Відповідність;
Відповідність = 999;

Тобто якщо елемент в колекції не був присутній, то за допомогою оператора присвоювання він буде доданий, а якщо присутній, то буде оновлено.

Це є відмінністю від Структури.

Універсальна колекція Таблиця значень

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

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

відмінності ТабліциЗначенійвід двомірного Масиву:

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

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

Отже, ТабліцаЗначенійскладається з набору рядків і набору колонок. І рядки, і колонки представляють собою колекції.

Тобто всередині колекції ТабліцаЗначенійє ще дві колекції. Звернемося до синтаксис-помічника і знайдемо ТабліцуЗначеній.

Підтримувані типи даних: сама ТабліцаЗначеній, Яка складається з рядків. Кожен рядок представлена ​​типом даних СтрокаТабліциЗначеній, У якій є свої властивості і свої методи. є КоллекціяКолонок ТабліциЗначенійтакож має певні властивості.

Важливий момент! Процедура, яка формує ТабліцуЗначеній, Повинна компілюватися & НаСервере.

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

Додати (,)
(Необов'язковий)
Тип: Рядок.
(Необов'язковий)
Тип: ОпісаніеТіпов
(Необов'язковий)
Тип: Рядок.
(Необов'язковий)
Тип: Число.

наприклад:

Для виклику даної процедури будемо використовувати команду.

В описі ТабліциЗначенійв якості елементів колекції виступають саме СтрокіТабліциЗначеній.

На відміну від колонок, які складаються тільки з властивостей (Ім'я, Тип, Тема, Ширина), в СтрокеТабліциЗначенійіснують як властивості (звернення на ім'я колонки), так і методи (можна отримувати і встановлювати значення, працювати з власниками).

Щоб додати новий рядокв таблицю потрібно використовувати метод або Додати (), або Вставити (). У другому випадку слід вказати, на яку позицію треба виставляти необхідну рядок.

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

Для заповнення ТабліциЗначенійможуть використовуватися такі методи:

Очистити ()- для видалення всіх рядків з ТабліциЗначеній.

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

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

Скопіювати (,)- дозволяє на підставі існуючої таблицістворити нову ТабліцуЗначеній, При цьому вказувати не всі рядки і все колонки, а тільки деякі з них. Значення, що повертається - ТабліцаЗначеній.

Ви маєте можливість копіювати структуру ТабліциЗначеній. Для цього існує відповідний метод СкопіроватьКолонкі (). Ми отримаємо порожню ТабліцуЗначенійз необхідною структурою.

В ТабліцеЗначенійіснує метод Підсумок (). Можна вказати ту колонку, в якій потрібно підсумувати числові величини. Стосовно до раніше показаному коду в Табло можна розрахувати значення: ТЗ.Ітог ( "Сума").

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

Стосовно до раніше показаному коду в Табло можна розрахувати значення: ТЗ.Свернуть ( "ДеньНеделі", "Сума").

ТабліцуЗначенійможна показати на призначеному для користувача екрані, щоб з нею можна було здійснювати будь-які дії. Але на відміну від СпіскаЗначенійз програмного кодуне можна просто так викликати таблицю на екран.

щоб відобразити ТабліцуЗначенійна екрані, створимо реквізит форми і дамо йому тип даних ТабліцаЗначеній.

Після чого отриману таблицю слід вивести на форму.

У модулі форми в кінці раніше складеного алгоритму (в Процедурі СозданіеТабліциЗначеній) слід дописати:
ЗначеніеВДанниеФорми (ТЗ, Таблиця);

Універсальна колекція Дерево значень

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

Теж може бути відображено на екрані. Дерево значень в явному вигляді складається з колекції рядків і колекції колонок. У дереві існують такі дві властивості як Рядки і Колонки.

Оскільки рядки можуть бути підпорядковані один одному, то для кожного рядка може бути вказаний Батько, а також підлеглі їй рядки.

Створимо відповідну команду Дерево і її процедуру обробки.

створимо в якому одна батьківська рядок і дві підлеглі.

Створимо реквізит форми смію(Тип даних - ДеревоЗначеній).

Для цього реквізиту створимо колонки Рік і Місяць.

Перемістимо відповідний елемент сміюна форму.

В кінці Процедури ДеревоНаСервере ()допишемо:

ЗначеніеВДанниеФорми (ДеревоЗн, смію);

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

За допомогою кнопки Додатиможна додавати нові рядки. Вони можуть також утворювати ієрархію.

Щоб обійти всі елементи дерева значень, нам знадобиться використовувати рекурсію, тобто виклик процедури самої собою. Наприклад, обробка дерева значень може виглядати так:

На цьому ми завершуємо наше перше знайомство з універсальними колекціями.

У наступній статті розглянемо, за допомогою якого важливого механізму розробник може спростити звернення до елементу довідника з програмного коду.

Структура в мові програмування 1С 8.3 і 8.2 - набір пар «Ключ» та «Значення». Поле «Ключ» має строковий тип, «Значення» ж може приймати будь-який тип даних. Зазвичай використовується для зберігання і передачі між процедурами набору будь-яких параметрів.

Структуру в мові програмування 1С можна створити двома способами за допомогою конструкції «Новий».

Перший спосіб:

Структура = Новий Структура;
Структура.Вставіть ( «КлючПараметра1», «Значення параметра №1»);
Структура.Вставіть ( «КлючПараметра2», «Значення параметра №2»);

Другий спосіб:

Структура = Новий Структура ( «КлючПараметра1, КлючПараметра2», «Значення параметра №1», «Значення параметра №2»);

Обидва способи створять структуру, яку видно на скріншоті з налагодження:

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

зміна

Додати або змінити структуру можна, використовуючи метод «Вставити ()».

Структура.Вставіть ( «ІмяКлюча», ЗначеніеКлюча);

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

Щоб видалити елемент колекції, потрібно скористатися методом «Видалити», куди передати ім'я ключа:

Структура.Удаліть ( «ІмяКлюча»);

Можлива також очищення всіх об'єктів колекції:

Структура.Очістіть ();

обхід структури

Щоб перебрати колекцію структури, потрібно використовувати конструкцію «Для Кожного КлючІЗначеніе З Структура Цикл».

наприклад:

Для Кожного КлючІЗначеніе З Структура Цикл
...... // обробляємо, наприклад, змінюємо значення
КонецЦікла;

У кожному циклі буде видно, що нам доступні наступні поля:



Сподобалася стаття? поділіться їй