Масив в 1С - це набір деяких значень. Значення в одному масиві можуть бути різних типів.

Масив може бути отриманий в результаті виконання різних функцій, наприклад, ВигрузітьКолонку ()таблиці значень; у вигляді масиву можна отримати виділені рядки динамічного списку і т.д. Можна створити масив і «вручну».

створення масиву

1. Як створити масив потрібного розміру

пМассів = новий Масив (4); // створили масив з 4 елементів

ПМассів [0] = "Ми";
пМассів [1] = "створили";
пМассів [2] = "новий";
пМассів [3] = "масив";

2. Як створити порожній масив і додати в нього елементи

пМассів = новий Масив; // створили порожній масив

// Внесемо значення елементів масиву

ПМассів. Додати ( "Ми");


3. Як створити багатовимірний масив.

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

пМассів = новий Масив (4, 2); // створили масив 4х2

// Внесемо значення елементів масиву, пронумерувавши кожне слово

ПМассів [0] [0] = "1.";
пМассів [0] [1] = "Ми";
пМассів [1] [0] = "2.";
пМассів [1] [1] = "створили";
пМассів [2] [0] = "3.";
пМассів [2] [1] = "багатовимірний";
пМассів [3] [0] = "4.";
пМассів [3] [1] = "масив";

4. Як створити фіксований масив

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

Фіксований масив може бути отриманий з звичайного:

пМассів = новий Масив;

ПМассів. Додати ( "Ми");
пМассів. Додати ( "створили");
пМассів. Додати ( "новий");
пМассів. Додати ( "масив");

ФМассів = новий ФіксірованнийМассів (пМассів); // створили фіксований масив

Функції роботи з масивами

Роботу функцій будемо розглядати на прикладі одновимірного масиву пМассів, Створеного вище і складається з 4 елементів:

  1. «Створили»
  2. "новий"
  3. «Масив».
Функція ВГраніца ()

Отримує найбільший індекс елемента масиву. Він завжди на одиницю менше кількості елементів масиву.

Індекс = пМассів. ВГраніца () // 3;

Функція Вставити ()

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

пМассів. Вставити (3, "нове значення") // Тепер масив складається з 5 елементів

Функція Додати ()

Створює новий елемент в кінці масиву і вставляє туди задане значення

пМассів. Додати ( ".") // додали точку п'ятим елементів масиву;

Функція Кількість ()

Повертає кількість елементів масиву.

пМассів. Кількість (); // 4

Функція Знайти ()

Шукає в масиві заданий елемент. Якщо знаходить, повертає його індекс. Якщо не знаходить, повертає Не визначене.

Індекс = пМассів. Знайти ( "масив"); // 3
Індекс = пМассів. знайти ( "Рядок, якої не було"); // Не визначене

Функція Очистити ()

Видаляє всі значення з масиву.

пМассів. Очистити ();

Функція Отримати ()

Отримує значення масиву за індексом. Цю ж задачу можна вирішити через.

Значення = пМассів. Отримати (3) // "масив"
Значення = пМассів [3]; // "масив"

Функція Видалити ()

Видаляє елемент масиву за індексом

пМассів. Видалити (3);

Функція Встановити ()

Встановлює значення елемента масиву за індексом. Працює аналогічно.

пМассів. Встановити (3, "масив!");
пМассів [3] = "масив!" ;

Як обійти масив

Можна обійти всі елементи масиву без вказівки індексу:

Для кожного ЕлементМассіва з пМассів Цикл
Повідомити (ЕлементМассіва);
КонецЦікла;

Можна при обході використовувати індекс:

Для Індекс = 0 по пМассів. ВГраніца () Цикл
Повідомити (пМассів [Індекс]);
КонецЦікла;

Як обійти багатовимірний масив

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

Для кожного Елемент1 з мМассів Цикл
Для кожного Елемент2 з Елемент1 Цикл
Повідомити (Елемент1);
КонецЦікла;
КонецЦікла;

Або із застосуванням індексів.

мМассів = новий масив (3, 4);

Для Індекс1 = 0 по мМассів. ВГраніца () Цикл
Для Індекс2 по мМассів [Індекс1]. ВГраніца () Цикл
Повідомити (мМассів [Індекс1] [Індекс2]);
КонецЦікла;
КонецЦікла;

Сортування масиву

Для сортування масиву нам буде потрібно допоміжний об'єкт з типом СпісокЗначеній.

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

Порівняння двох масивів

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

Функція СравнітьМассіви (массів1, массів2)

Якщо массів1. Кількість ()<>Массів2. Кількість () Тоді
Повернення БРЕХНЯ; // Масиви не рівні, порівнювати елементи немає сенсу.
КонецЕсли;

Для Індекс = 0 по массів1. ВГраніца () Цикл
Якщо массів1 [Індекс]<>Массів2 [Індекс] Тоді
Повернення Брехня; // ці елементи не рівні, значить і масиви не рівні
КонецЕсли;
КонецЦікла;

Повернення Істина; // Якщо дійшли до сюди, то масиви рівні
КонецФункціі

У функцію потрібно передати 2 порівнюваних масиву. Функція повертає значення істина, Якщо масиви рівні, і брехня, Якщо не рівні.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

наприклад:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Знадобилося (не питайте навіщо) знайти і проаналізувати всі можливі комбінації елементів масиву довільної довжини. Завдання хрестоматійна. Так як число можливих елементів і довжина комбінації на етапі постановки завдання не визначені, напрошується рекурсивне рішення. І що ж я знаходжу по темі? Нічого для 1С, але безліч всяких різних реалізацій на сях, Дельфах і навіть VBA.

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

Сама функція:

// мЕлементов - масив довільних елементів, що утворюють комбінації. Довільний. // ДлінаПерестановкі - кількість елементів в комбінації. Ціле. // БезПовторов - ознака необхідності отримувати в результаті комбінації в яких один і той же елемент мЕлементов зустрічався б не частіше 1 рази. Булево. За замовчуванням - Брехня. Функція Перестановки (мЕлементов, ДлінаПерестановкі, БезПовторов = Брехня, Підстава = Не визначено, мРезультата = Не визначено, ТекУровень = 0) Експорт Якщо Підстава = Не визначено Тоді Підстава = Новий Масив КонецЕсли; Якщо мРезультата = Не визначено Тоді мРезультата = Новий Масив КонецЕсли; якщо ТекУровень< ДлинаПерестановки - 1 Тогда Для Каждого Элемент Из мЭлементов Цикл Если БезПовторов И НЕ Основание.Найти(Элемент) = Неопределено Тогда Иначе Основание.Добавить(Элемент); мРезультата = Перестановки(мЭлементов, ДлинаПерестановки, БезПовторов, Основание, мРезультата, ТекУровень + 1); Основание.Удалить(Основание.Количество() - 1); КонецЕсли; КонецЦикла; Иначе Для Каждого Элемент Из мЭлементов Цикл Если БезПовторов И НЕ Основание.Найти(Элемент) = Неопределено Тогда Иначе Основание.Добавить(Элемент); мРезультата.Добавить(Новый ФиксированныйМассив(Основание)); Основание.Удалить(Основание.Количество()-1); КонецЕсли; КонецЦикла; КонецЕсли; Возврат мРезультата; КонецФункции

За аргументів все, сподіваюся, зрозуміло з опису. За результатами: на виході отримуємо масив з фіксованих масивів. Фіксований масив - можлива комбінація, а кількість елементів результуючого масиву і є кількість знайдених (можливих) комбінацій. Кожен фіксований масив складається з ДлінаПерестановкі елементів масиву мЕлементов - то є якийсь набір елементів первісного безлічі значень. Або одна з можливих комбінацій.

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

Поняття «масив» вже давно використовується в програмуванні і, найчастіше, під ним розуміють певну структуру в пам'яті, що складається з послідовності елементів. Масив в 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 технології.

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