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

Повний синтаксис (натисніть, щоб розкрити)

СписокЗначень

Опис:

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

Елементи колекції: ЕлементСпискаЗначень

Для об'єкта доступний обхід колекції за допомогою оператора Для кожного… З… Цикл. Під час обходу вибираються елементи колекції.

Можливе звернення до елемента колекції за допомогою оператора [...]. Як аргумент передається індекс елемента ( нумерація з 0).

Властивості:

Методи:

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

Конструктори:

Новий СписокЗначень
&На Клієнті Процедура ВиконатиКод(Команда) /// Як створити список значень у 1с 8.3, 8.2Список = Новий СписокЗначень; /// Як додати елемент до списку значень у 1с 8.3, 8.2 // Параметри методу додати:// - значення // - Вистава // - Позначка (необ.) // - картинка (необ.)Перелік. Додати ( 1980 ) // значення елемента "Рік народження Васі"// уявлення); Перелік. Додати(1985 ) "Рік народження Юлі") ; // значення можуть бути різних типівПерелік. Додати("Поліна", "Ім'я дитини"); /// Як вставити елемент до списку значень у 1с 8.3, 8.2 // Вставляємо в позицію №2 (елементи нумеруються з 0) // елемент зі значенням 2010 та поданням // "Рік народження їхньої спільної доньки"Перелік. Вставити(2 , 2010 , "Рік народження їхньої спільної доньки") ; /// Як обійти елементи списку значень 1С 8.3, 8.2Для Кожного Елемент З Список Цикл Повідомити( Елемент. Подання + ": " + Рядок(Елемент. Значення) ) ; КінецьЦикл; /// Як очистити список значень 1с 8.3, 8.2Перелік. Очистити(); Перелік. Додати("Понеділок"); Перелік. Додати("Вівторок"); Перелік. Додати("Середовище"); /// Як дізнатися кількість елементів списку значень, а також /// отримати елемент списку за його індексом 1с 8.3, 8.2 // нумерація з нуляДля Індекс = 0 Список. Кількість() - 1 Цикл Повідомити(Список[ Індекс] ) ; КінецьЦикл; /// Як знайти елемент списку за його значенням 1с 8.3, 8.2Знач Вівторок = Список. ЗнайтиПоЗначению("Вівторок") ; /// Як дізнатися індекс елемента у списку 1с 8.3, 8.2Повідомити(Список. Індекс(ЗначВівторок) ) ; // 1, оскільки нумерація з нуля /// Як відсортувати список за його значеннями 1с 8.3, 8.2 // було: понеділок, вівторок, середаПерелік. СортуватиПоЗначенню(НапрямокСортування. Убувши) ; // стало: середа, понеділок, вівторок /// Як видалити елемент зі списку значень 1С 8.3, 8.2 // видаляємо перший елемент // Параметр: елемент списку // або індекс елемента// можна так Список. Видалити (Список [0]); // або так // Список. Видалити (0); /// Як зрушити елемент списку значень 1с 8.3, 8.2 // зрушуємо нульовий елемент однією позицію вперед // було: понеділок ВівторокПерелік. Зрушити (0, 1); // стало: вівторок понеділок /// Як зробити копію списку в 1с 8КопіяСписку = Список. Копіювати() ; Кольори = Новий СписокЗначень; Кольори. Додати("Червоний") ; Кольори. Додати("Зелений") ; Кольори. Додати("Синій" ) ; /// Як вивантажити значення списку масив в 1с 8.3, 8.2МасивКвітів = Кольори. ВивантажитиЗначення() ; /// Як завантажити значення списку з масиву 1с 8.3, 8.2Кольори. ЗавантажитиЗначення(МасивКвітів) ; КінецьПроцедури /// Як зробити немодальний вибір значення зі списку /// значень 1с 8.3, 8.2&НаКлієнті Процедура ЯкЗробитиНемодальнийВибірЗначення(Команда) Кольори = Новий СписокЗначень; Кольори. Додати("Червоний") ; Кольори. Додати("Зелений") ; Кольори. Додати("Синій" ) ; //Процедура ПісляВиборуЕлементу визначена трохи нижчеОповіщенняПісляВиборуЕлементу = Новий ОписОповіді( "ПісляВиборуЕлементу", цей об'єкт ) ; Кольори. ПоказатиВибірЕлементу( ОповіщенняПісляВиборуЕлементу, "Виберіть улюблений колір"); КінецьПроцедури &НаКлієнті Процедура ПісляВиборуЕлементу(Елемент, Параметри) Експорт Якщо Елемент<>Невизначено Тоді Повідомити(Елемент. Значення) ; КінецьЯкщо ; КінецьПроцедури /// Як зробити немодальну позначку значень зі списку /// значень 1с 8.3, 8.2&НаКлієнті Процедура ЯкЗробитиНемодальнуПозначкуЗначень(Команда) Кольори = Новий СписокЗначень; Кольори. Додати("Червоний") ; Кольори. Додати("Зелений") ; Кольори. Додати("Синій" ) ; //Процедура ПісляВідміткиЕлементів визначена трохи нижчеОповіщенняПісляВідміткиЕлементів = Новий ОписОповіді( "ПісляВідміткиЕлементів", цей об'єкт ) ; Кольори. ПоказатиПозначкуЕлементів( ОповіщенняПісляВідміткиЕлементів, "Виберіть улюблені кольори"); Кольори. ЗаповнитиПомітки(Істина); КінецьПроцедури &НаКлієнті Процедура ПісляВідміткиЕлементів(Елементи, Параметри) Експорт Якщо Елементи<>Невизначено Тоді Для Кожного Колір З Елементи Цикл Якщо Колір. Позначка Тоді Повідомити(Колір. Значення) ; КінецьЯкщо ; КінецьЦикл; КінецьЯкщо ; КінецьПроцедури /// Як зробити модальний вибір значення зі списку 1с 8.3, 8.2&НаКлієнті Процедура ЯкЗробитиМодальнийВибірЗначення(Команда) Кольори = Новий СписокЗначень; Кольори. Додати("Червоний") ; Кольори. Додати("Зелений") ; Кольори. Додати("Синій" ) ; ВибКолір = Кольори. ВибратиЕлемент( "Виберіть улюблений колір"); Якщо ВибКолір<>Невизначено Тоді Повідомити(ВибКолір. Значення) ; КінецьЯкщо ; КінецьПроцедури /// Як зробити модальну позначку значень зі списку /// значень 1с 8.3, 8.2&НаКлієнті Процедура ЯкЗробитиМодальнуВідміткуЗначень(Команда) Кольори = Новий СписокЗначень; Кольори. Додати("Червоний") ; Кольори. Додати("Зелений") ; Кольори. Додати("Синій" ) ; Якщо кольори. Відзначити Елементи( "Виберіть улюблені кольори") Тоді Для Кожного Колір З Колір Цикл Якщо Колір. Позначка Тоді Повідомити(Колір. Значення) ; КінецьЯкщо ; КінецьЦикл; КінецьЯкщо ; // а ось так можна разом встановити всі позначки // Список у певне значенняКольори. ЗаповнитиПомітки(Істина); КінецьПроцедури /// Завантажити та виконати ці приклади на комп'ютері

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В даному юніті ми познайомимося з новим типом даних мови 1С, який називається СписокЗначень.

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

// Створили список значень

Список.Додати(23);

Поки що все дуже схоже на масив, чи не так? Але йдемо далі. Щоб тепер вивести ці числа користувачеві, напишемо:

// пробіжимося циклом по кожному елементу списку для кожного елемента зі списку циклів Повідомити (Елемент.Значення);

// Виводимо значення елемента Кінець циклу;

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

Розглянемо деякі додаткові можливості Значення.

Вміє сортувати

Наприклад, ми легко можемо відсортувати список значень. Список це вміє робити сам:

Список.СортуватиПоЗначенню(НапрямокСортування.Возр); У випадку зі звичайним масивом нам довелося б реалізовувати один із алгоритмів сортування (наприклад, "бульбашка").

Вміє шукати

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

Ввести Число (Число); // Ввели число від користувача ЗнайденийЕлемент = Список. ЗнайтиПоЗначенню(Число);

Якщо ЗнайденийЕлемент = Невизначено Тоді ВідкритиЗначення("Число" + Число + "у списку не знайдено!"); Інакше

ВідкритиЗначення("Число" + Число + "присутнє у списку. Ось воно:" + ЗнайденийЕлемент.Значення);

КінецьЯкщо; СписокЗначень

Підтримує вставку та видалення

Список значень, як і масив, підтримує вставку та видалення елементів:

Перелік. Вставити(0, 1000);

// вставляємо тисячу на початок списку Список.Видалити(О); // і відразу видаляємо її зі списку Список. Вставити(Список.Кількість(), 13);

// вставляємо 13 в кінець списку Повідомити(Список[Список.Кількість() - 1]);

// виводимо останній елемент списку (13)

Підтримує квадратні дужки

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

Повідомити (Список.Значення); // вивели другий елемент списку Таким чином ми можемо пробігтися по всіх елементах списку ще й так:

Для А = 0 По Список.Кількість() - 1 Цикл Повідомити(Список[А].Значення);

КінецьЦикл;

Вміє створювати свою копію

У списку значень є просто шикарна нагода - він вміє сам створювати свою копію:

КопіяСписку = Список.Скопіювати();

// зробили копію списку // тепер можемо сміливо міняти КопіяСписку // при цьому вихідний список не змінюватиметься КопіяСписку. Значення = 123 456;

Вміє перетворюватися на масив

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

МасивЧисел = Список. ВивантажитиЗначення();

// Вивантажили в масив

Для А = 0 По Масив Чисел. Кількість () - 1 Цикл

Повідомити(МасивЧисел[А]); // не потрібно вказувати // опцію Значення

КінецьЦикл;

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

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

Рішення

Список = Новий СписокЗначень;

// Створили список значень Для А = 1 По 5 Цикл Число = 0;

Ввести Число (Число); // введемо число від користувача Список.Додати(Число); // і додамо його до списку Кінець циклу; // і так 5 разів

// зробимо сортування списку чисел

Перелік. Сортувати ПоЗначенню(НапрямокСортування. Возр);

// після сортування перший елемент списку - і є // найменший елемент, а останній - найбільший ВідкритиЗначення(" Найменший елемент " + Список +

", а найбільший" + Список [Список. Кількість () - 1]);