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

01.11.2019 Програми

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

Масив 1С часто використовується:
А) Для відборів
Б) Щоб зберегти список значень, щоб далі використовувати його, наприклад, передати як параметр у функцію/процедуру.

Робота з масивами 1С

Створимо масив 1С із 2 значень:
Масив = Новий Масив(); //масив без фіксованого кіл-ва значень

Масив.Додати(ГСЧ.ВипадковеЧисло(0, 1000));
Масив.Додати(ГСЧ.ВипадковеЧисло(0, 1000));

//цикл проходу кожного значення масиву 1С, скільки б їх не було

Повідомити(Знч);
КінецьЦикл;

Створимо масив 1С із 10 значень:
Масив = Новий Масив (10); //масив із фіксованим кіл-вом значень
ГСЧ = Новий Генератор Випадкових Чисел (); // заповнюватимемо випадковими числами

//індекс масиву починається з нуля, а чи не з одиниці
//10 шт – це від 0 до 9
Для Сч = 0 до 9 Цикл
//звернення до масиву Ім'яМассива[Індекс]
Масив [Сч] = ДСЧ. Випадкове Число (0, 1000); //випадкове число від 0 до 1000
КінецьЦикл;

//цикл проходу кожного значення масиву, хоч би скільки їх було
Для кожного Знч з Масив Цикл
Повідомити(Знч);
КінецьЦикл;

//зверніть увагу - 10 значень масиву, це означає, що їх за замовчуванням 10 шт і кожне значення одно НЕВИЗНАЧЕНО, поки ми не встановили інше
// це значить, що ми можемо додати ще одне значення, 11е, з допомогою ИмяМассива.Добавить();

Багатовимірний масив

Створимо багатовимірний масив 1С 2х2. Багатомірний масив 1С, отже кожен осередок масиву 1С містить значення, і навіть масив 1С.

Багатомірний масив 1С не обов'язково має бути фіксованим. Зробимо багатовимірний масив 1С 2х2 без вказівки фіксованої кількості значень:

Створення масиву 1С з нуля

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

Наприклад – рядок версії програми виглядає так: «11.0.9.5» — чотири числа, розділені точками. Ми можемо перевести версію у «комп'ютерний» формат – масив із чотирьох числових значень. Тоді далі ми можемо порівнювати версії одна з одною:

Отримання готового масиву 1С з даними

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

У наведеному нижче прикладі ми робимо запит – вибираємо всі посилання документів з бази даних.

  • РезультатЗапроса = Запрос.Выполнить() //виконує запит
  • тзРезультат = РезультатЗапиту.Вивантажити() //вивантажує результат у таблицю значень
  • мМассивПосилань = тзРезультат.ВивантажитиКолонку("Ім'яКолонки") //Вивантажує колонку таблиці в масив

Отримання масиву 1С з інших об'єктів та використання як відбір у запиті

Коли на формі розміщено перелік документів (або таблиця значень) – користувач може виділити курсором один рядок. Також можна дозволити виділяти кілька рядків одночасно. Щоб виділити кілька рядків (якщо формі це дозволено) потрібно затиснути клавішу CTRL чи SHIFT.

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

Ми можемо програмно отримати список виділених рядків:

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

Звертання до масиву 1С виділених рядків виглядатиме як:
Елементи.Ім'яРеквізитуФорми. Виділені Рядки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Приклад: Наш Масив. Встановити (2,8);

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

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

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

Приклад: Наша Змінна = Наш Масив. Отримати (2);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Застосування масивів в 1С допомагає впорядкувати елементи, що використовуються в роботі.

Це програмний набір елементів. Він служить для:

  • Відбір значень.
  • Сортування. Кожній позиції в масиві надається індекс. Це полегшує пошук. І ви можете послатись на об'єкт, написавши його номер.
  • Об'єднання та збереження записів.
  • Поділу груп, створення підрядків.
  • Масив - сам собою об'єкт. До нього буде прив'язана змінна. Можна звернутися до окремих його частин або використовувати його цілком у процедурах. Наприклад, можна об'єднати групу значень «Співробітники відділу N» та внести туди імена та прізвища працівників.

Проведемо аналогію. Уявіть книжкову шафу. Книги в ньому розставлені за різними «осередками». Якщо вести облік, ви знатимете, де знаходиться кожен об'єкт. І легко його дістанете. Але якщо книжки, журнали та газети хаотично розкидані на столі, пошук потрібної речі затягнеться. Хоча це не відбиває всі можливості унікальних колекцій.

створення

Робота з масивами 1С починається з їхнього створення. Потрібне «місце дії» - поле, в якому ви вводитимете код.

  1. Відкрийте "Конфігуратор" ("Конфігурація").
  2. Клацніть правою кнопкою миші за пунктом «Обробка».
  3. Виберіть «Додати».
  4. З'явиться підменю «Обробка1». Виділіть його. Інформація про нього відобразиться у робочій області.
  5. На вкладці "Основні" введіть "Ім'я". Скажімо, «Тестовий Масив».
  6. Відкрийте розділ «Форми».
  7. Натисніть на значок у вигляді лупи.
  8. Позначте опцію "Форма обробки".
  9. Клацніть на "Готово".
  10. Відкриється вікно з трьома кадрами. У верхньому правому перейдіть в закладку «Команди».
  11. Значок у вигляді плюс, щоб додати позиції.
  12. З'явиться пункт "Команда1". Виділіть його.
  13. У полі "Ім'я" введіть назву. Наприклад, «ТестовіЗначення». Скопіюйте його в "Заголовок".
  14. У рядку "Дія" натисніть на лупу.
  15. Пункт "Створити на клієнті" та "OK".
  16. Ось і модуль, у якому можна вводити код.

Щоб виводити проміжний результат, створіть кнопку. Навіщо вона потрібна в масиві - ви зрозумієте трохи згодом.

  1. Перейдіть на вкладку Форми. Вона унизу.
  2. Клацніть правою кнопкою миші на командну панель.
  3. "Додати - Кнопка".
  4. Придумайте їй будь-яку назву. Або можете залишити те, що видано за умовчанням.
  5. У полі «Ім'я команди» натисніть на піктограму у вигляді крапки.
  6. Виберіть «Тестові знаки». Якщо назвали команду інакше, там буде інший заголовок.

Тепер можна розпочинати роботу з колекціями. Але не думайте, що в 1С відразу можете розкласти рядок в масив. Краще почати з чогось легше. Хоча всі функції – це набір операторів, які треба просто запам'ятати.

  1. Відкрийте закладку "Модуль".
  2. Текст, що йде після двох косих рисочок (два сліша - "//") можна видалити. Він виглядає приблизно так "// Вставити вміст обробника". Це пояснення. Їх пишуть програмісти, щоб не заплутатися у коді.
  3. Свій текст пишіть між операторами «Процедура» та «КінецьПроцедури».
  4. Тепер створіть набір значень. Придумайте змінну, яка буде умовно його позначати. Припустимо, «Перший Масив».
  5. Її треба пов'язати із об'єктом. Для цього введіть команду "Перший Масив = Новий масив ()". Це колекція, де може бути необмежену кількість елементів. Якщо ви маєте фіксований розмір, вкажіть його після команди у дужках «Новий масив (5)». Відповідно, двовимірна колекція виглядатиме «Новий масив (7, 5)». Можна створювати багатовимірні набори.
  6. Під час введення можуть з'явитися підказки, які пропонують відповідні оператори.
  7. Слова різняться за кольором. У змінних одне забарвлення, у функцій - інше.
  8. Після кожної команди ставте крапку з комою ";". І для зручності починайте з нового абзацу.
  9. З порожнім безліччю нічого вдіяти не можна. Ні впорядкувати, ні вивести, ні розкласти рядок у масив 1С. Тому треба вставити до нього елементи.
  10. Введіть «ПершийМасив.Додати(Значення1);». Потім «Перший Масив.Додати(Значення2);» і так далі.
  11. Об'єкти нумеруються з нуля. Тобто змінною «Значення1» буде надано індекс «0». Можете самі заповнювати колекцію зі «Значення0», щоб не переплутати.

Навіщо все це? І навіщо та загадкова «кнопка»? Спробуємо запустити просту функцію.

  1. Під колекцією напишіть команду «Повідомити (Перший Масив);» У квадратних дужках вказано індекс елемента. Тобто адресу нашого «Значення0».
  2. Відформатуйте модуль. Це перевірка наявності помилок. У великих блоках можна щось недоробити через неуважність: не поставити крапку з комою, не закрити дужку, неправильно написати змінну. Компілятор цього вкаже.
  3. Натисніть кнопку у вигляді знака «Плей» (трикутник у колі), щоб запустити написану вами програму.
  4. Клацніть на «Сервіс» та виберіть вашу кнопку.
  5. Натисніть її.
  6. З'явиться напис "Значення0". Це і є результатом виконання функції.

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

Функції

Усе доступні функціїє у довіднику програми. Перерахуємо кілька, щоби показати принцип.

Як перетворити масив 1С на рядок:

ТестМассив = Новий Масив(4);
ТестМассив = Це;
ТестМассив = Робиться;
ТестМассив = Так;
РядокТест = ЗначенняВстрокуВнутр(ТестМассив);
Повідомити(РядокТест);

Виводьте на «Кнопку» та отримуєте фразу. Це може бути частиною великого модуля – у такому разі оператор «Повідомити» не потрібен.

Щоб у 1С розкласти рядок у масив підрядків, потрібен роздільник. Умовна позначка, після якої текст буде ділитися. Допустимо, є слово «Протокол». І ми поставимо роздільник "О". Введіть команду «ТестМассив = РозкластиСтрокуМассив(Протокол, «О») ;» Вийде окремо «Пр», «Т», «К» та «Л». Розділювач стертий. А слово поділено на кілька підрядків.

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

Зазвичай для цього використовується складний модуль: цикл з великою кількістюоператорів. Циклічні блоки з умовою будуються за принципом «Якщо (умова), тоді (дія1), інакше (дія2)». Спочатку програма перевіряє, чи виконується умова. Якщо так, вона запускає першу функцію. Якщо ні – другу.

Цикл перевірить кожен символ у рядку. Якщо там немає роздільника, то він продовжує далі. Якщо там є роздільник, він додає значення набору підрядків. Там можуть використовуватися інші оператори: наприклад, «СокрЛП» - скорочення певних знаків праворуч і ліворуч від рядка.

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

Пошук та сортування

У колекціях може бути безліч даних. Треба навчитися їх шукати та сортувати.

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

МасивТест = Новий Масив(3);
МасивТест = "Телефон";
МасивТест = "Ноутбук";
МасивТест = "Комп'ютер";
Індекс = МасивТест.Найти(«Телефон»);
Якщо Індекс ‹› Невизначено
Повідомити («Пошук завершено» + МасивТест [Індекс]);

І не забудьте поставити «завершальний оператор».

Колекція подана для прикладу. Ми створили набір із трьох значень. І зробили невеликий цикл. Якщо утиліта не знайде відповідний елемент, вона видасть повідомлення "Невизначено". Якщо знайде, покаже результат.

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

ТестСписок = Новий СписокЗначень;
ТестСписок.ЗавантажитиЗначення(ВашМассив);
ТестСписок.СортуватиПоЗначенню(НапрямокСортування.Возр);
ВашМассив = ТестСписок.ВыгрузитьЗначення();

Замість «Возр» можете поставити «Убувши». Також результат можна вивантажити до таблиці значень:

ТестоваТаблиця = Новий ТаблицяЗначень;
ТестоваТаблиця.Колонки.Додати(«Колонка»);
Тестова Таблиця. Завантажити Колонку (Ваш Масив, «Колонка»);
ТестоваТаблиця.Сортувати(«Колонка Убувши»);
Ваш Масив = Тестова Таблиця. Вивантажити Колонку («Колонка»)

Існують і складні методи сортування: «Бульбашкова», «Швидка», «Шейкер», «Рекурсія». У них багаторівневі та довгі алгоритми.

Таблиці та списки

Інформацію можна переправляти між різними видамиколекцій. Щоб перенести в 1С масив таблицю значень:

МасивТелеф = Новий Масив;
МасивТелеф.Додати («Смартфон»);
МасивТелеф.Додати(«Планшет»);
МасивТелеф.Додати («Телефон»);
ТаблицяТест = Новий ТаблицяЗначень;
ТаблицяТест.Колонки.Додати(«Мобільники»);
ТаблицяТест.Додати();
ТаблицяТест.Додати();
ТаблицяТест.Додати();
ТаблицяТест.ЗавантажитиКолонку(МасивТелеф, «Мобільники»);
Для кожного рядку З ТаблицяТест Цикл
Повідомити(Рядок.Мобільники);

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

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

НовийСписок = Новий СписокЗначень();
НовийСписок.ЗавантажитиЗначення(ВашМасив);

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

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

  1. Список значень (на відміну від масиву значень зі списку є уявлення, реалізована можливість сортування та інтерфейсного представлення колекції);
  2. Таблиця значень - колекція, що має колонки для розширеного опису значення, подібну структуру можна отримати, виконавши запит;
  3. Дерево – дуже схоже таблицю, доповнену структурою підпорядкованості;
  4. Структура – динамічний набірімен та значень змінних;
  5. Відповідність – подібно до структури, тільки змінні зіставляються не рядковим уявленням, а один одному.

Методи масиву

Програмне створення екземпляра масиву відбувається за допомогою оператора Новий() (Рис.1).

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

Перш ніж приступати до обговорення методів роботи з масивом, давайте визначимося з двома поняттями:

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

Важливо знати: в 1С підрахунок кількості значень будь-якої колекції починається з 1, а роздача індексів з 0, тобто перший елемент масиві має індекс 0. Таким чином, обхід колекції за допомогою циклу з ітератором повинен починатися з 0 і закінчуватися кількістю елементів мінус 1, інакше система за допомогою вікна (Рис.2) повідомить про настання виняткової ситуації.

Рис.2

Будь-який об'єкт конфігурації має свої методи для роботи, масив не виняток, перерахуємо їх з деяким розшифруванням:

  • ВГраница() – за допомогою методу можна отримати максимальний індекселемента для порожнього масиву буде повернуто значення (-1);
  • Вставити() – цей метод має два параметри: індекс та значення, індекс вказує куди в масив вставити новий елементзначення, що додається може бути порожнім;
  • Додати() – цей метод вставки значення можна використовувати, коли місце розміщення елемента непринципово, за його допомогою нові дані будуть записані на кінець наявного масиву;
  • Знайти() – у разі успішного виконання повертає індекс вказаного у дужках значення, інакше повертає «Невизначено»;
  • Очистити () – очищає колекцію;
  • Отримати() – читає дані, розташовані в масиві за вказаним індексом, можна замінити квадратними дужками ;
  • Видалити() – видаляє елемент із зазначеним індексом;
  • Встановити() – замінює дані у зазначеному осередку масиву.

Одновимірні та багатовимірні масиви

У найпростішому випадку одновимірний масив може містити значення різних типів(Мал.3)

Рис.3.

Результат виконання наведеного вище коду представлений на Рис.4

Рис.4

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

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

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

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

Рис.5

Для його обходу нам знадобиться два цикли, у першому циклі ми обходимо масив по рядках, у другому розбираємо рядок на елементи. Це можна зробити за допомогою циклу «Для кожного …. З» (Рис.6)

Рис.6

Або за допомогою циклу з ітератором "Для ... по" (Рис.7)

Рис.7

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

Використання масиву

Масиви в 1С найчастіше використовуються для:

  1. Створення різних відборів значень, що використовуються при роботі з запитами та іншими колекціями;
  2. Передача списків як параметрів між процедурами та функціями;
  3. Обмін даними з зовнішніми компонентами, підключеними з використанням COM технології.

Безумовно, це далеко неповний список того, з якою метою можна задіяти об'єкт «Масив».