1з8 вставити рядок у таблицю значень. Які методи існують і як шукати одночасно за кількома значеннями

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

В одній таблиці перераховані товари для відвантаження зі складу. В іншій таблиці – зобов'язання щодо оплати цих товарів.

Тому в 1С чільне місце займає робота з таблицями.

Таблиці 1С також називають «табличні частини». Вони є у довідників, документів та інших.

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

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

//Варіант 1 – послідовний доступ до результатів запиту

//отримання таблиці
Вибірка = Запит.Виконати().Вибрати();
//по порядку обходимо всі рядки результату запиту
Поки Вибірка.Наступний() Цикл
Повідомити(Вибірка.Найменування);
КінецьЦикл;

//Варіант 2 – вивантаження таблицю значень
Запит = Новий Запит («ВИБРАТИ Найменування З Довідник. Номенклатура»);
//отримання таблиці
Таблиця = Запит.Выполнить().Выгрузить().
//Далі можемо також обійти всі рядки
Для кожного Рядок з Таблиця Цикл
Повідомити (Рядок.Найменування);
КінецьЦикл;
//або довільно звертатися до рядків
Рядок = Таблиця. Знайти («Лопата», «Найменування»);

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

Таблиця на формі (товстий клієнт)

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

Базові принципи роботи з формами ми з Вами обговорювали в уроці з і в уроці з

Отже, розмістимо таблицю на формі. Для цього можна перетягнути таблицю з панелі елементів керування. Аналогічно можна вибрати в меню Форма/Вставити елемент керування.

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

Натисніть кнопку «…» у властивості Дані. Щоб побачити список табличних частин, потрібно розкрити гілку Об'єкт.

При виборі табличної частини 1С сама додасть колонки таблиці на формі. Рядки введені користувачем у таку таблицю зберігатимуться автоматично разом із довідником/документом.

У цьому ж властивості Дані Ви можете ввести довільне ім'я і вибрати тип ТаблицяЗначень.

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

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

У властивостях таблиці на формі Ви можете вказати, чи доступно користувачеві додавати/видаляти рядки. Більш просунута форма – галочка Тільки Перегляд. Ці властивості зручно використовуватиме організації таблиць призначених висновку інформації, але з редагування.

Щоб керувати таблицею, потрібно вивести форму командну панель. Виберіть пункт Форма/Вставити елемент керування/Командна панель.

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

Таблиця на формі (тонкий/керований клієнт)

На керованій формі зазначені дії виглядають трохи інакше. Якщо Вам потрібно розмістити на формі табличну частину, розкрийте гілку Об'єкт і перетягніть одну з табличних частин ліворуч. І все!

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

Щоб додати колонки, використовуйте меню правою кнопкою миші на цьому реквізиті форми, пункт Додати колонку реквізиту.

Після цього перетягніть таблицю вліво.

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

Вивантаження таблиці в Excel

Будь-яку таблицю 1С, розташовану на формі, можна роздрукувати чи вивантажити до Excel.

Для цього клацніть правою кнопкою миші на вільному місці в таблиці та виберіть пункт Вивести список.

У керованому (тонкому) клієнт аналогічні дії можна виконати за допомогою пункту меню Усі дії/Вивести список.

Пошук у таблиці значень 1С

Які методи існують і як шукати одночасно за декількома значеннями.

Для пошуку в таблиці значень існує два спеціальні методи:

1. Знайти

ТБГоризонт = Довідники.Номенклатура.ЗнайтиПо Найменуванню("Телевізор Горизонт");
ЗнайденаРядок = ТЗНоменклатури.Найти(ТелевізорГоризонт);
//також ми можемо вказати у яких колонках шукати, щоб прискорити пошук
ЗнайденаРядок = ТЗНоменклатури.Найти(ТелевізорГоризонт, "Номенклатура");

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

Щоб так не мучитися, існує наступний метод, який дозволяє знаходити масив відповідних рядків:

2. ЗнайтиРядки


СтруктураОтбора.Вставить("Номенклатура", ТелевізорГоризонт); // Спершу вказуємо колонку де шукати, а потім що шукати.

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

Чим ще добрий цей метод, так це те, що він може шукати відразу по кількох колонках таблиці значень одночасно:


СтруктураОтбора = Новий Структура;
СтруктураОтбора.Вставить("Номенклатура", ТелевізорГоризонт);
СтруктураОтбора.Вставить("Кількість", 10);
ЗнайденийМасивРядок = ТЗНоменклатури.НайтиРядки(СтруктураВідбору);

Єдиний мінус, як видно, не можна застосовувати інші види порівняння, окрім як "рівно"

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

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

Структура таблиці значень як об'єкта

Властивості таблиці значень визначаються комбінаціями двох визначених колекцій: її колонок та рядків.

Таблиця значень Колонки

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

Оскільки колонки є колекцією об'єктів, ви можете додавати, видаляти і редагувати колонки.

Рядок таблиці значень

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

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

Створити таблицю значень

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

Створення таблиці конструктором

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

ДемоТаблиця = Новий ТаблицяЗначень; // Насамперед ініціалізуємо ТЗ // Далі визначаємо необхідні параметри нових колонок і додаємо в колекцію // Створення колонки " Номенклатура " Ім'я = " Номенклатура " ; ТипЗначення = Новий ОписТипів("ДовідникПосилання.Номенклатура"); Заголовок = "Номенклатура (товар)"; ДемоТаблиця.Колонки.Додати(Їм, ТипЗначення, Заголовок); // Створення колонки "Кількість" Ім'я = "Кількість"; ТипЗначення = Новий ОписТипів("Число"); ДемоТаблиця.Колонки.Додати(Ім'я, ТипЗначення); // В результаті даних маніпуляцій ми створили порожню таблицю з типізованими колонками // Якщо вам необхідно використовувати більш точну типізацію примітивних типів, слід використовувати розширений синтаксис конструктора “ОписТипов”

Створення таблиці копіюванням

Якщо у вас під рукою є стандарт з відповідною структурою та/або складом, ви можете скопіювати або вивантажити еталонну таблицю значень. Якщо зразком є ​​інша таблиця, необхідно застосувати спосіб «Скопіювати таблиці-эталона». Якщо ви маєте справу з табличною частиною або набором записів регістру, необхідно використовувати метод «Вивантажити таблицю значень». Якщо вам потрібна лише структура, то можна скористатися методом «СкопіюватиКолонки».

// Варіант з копіюванням з ТЗ-еталону всіх рядків але зі збереженням лише двох зазначених колонок Колонки Еталону = "Номенклатура, Кількість"; ДемоТаблиця = ТаблицяЕталон.Скопіювати(, КолонкиЕталону); // Варіант з копіюванням з ТЗ-еталону попередньо відібраних рядків, зі збереженням двох зазначених колонок Рядки Еталону = Відібрати В Масив Потрібні Нам Рядки З Таблиці Еталону (); Колонки Еталону = "Номенклатура, Кількість"; ДемоТаблиця = ТаблицяЕталон.Скопіювати(Рядки Еталону, Колонки Еталону); // Варіант з копіюванням з ТЗ-еталону рядків за вказаним фільтром, зі збереженням однієї колонки "Номенклатура" // Будуть відібрані всі рядки де значення в колонці Кількість дорівнює 0, в результуючу таблицю потрапить тільки колонка Номенклатура Відбір Строк = Новий Структура 0); Колонки Еталону = "Номенклатура"; ДемоТаблиця = ТаблицяЕталон.Скопіювати(Рядки Еталону, Колонки Еталону); // Варіант з повним копіюванням таблиці і подальшому видаленні одного рядка зі значенням поля кількість рівним нулю і видаленням цілої колонки "Кількість" Колонки Еталону = "Номенклатура"; ДемоТаблиця = ТаблицяЕталон.Скопіювати(Рядки Еталону, Колонки Еталону); РядокТаблиці = ДемоТаблиця.Найти(0, "Кількість"); ДемоТаблиця.Видалити(РядокТаблиці); ДемоТаблиця.Колонки.Видалити("Кількість"); // Аналогічні варіанти та їх модифікації можна застосовувати до табличних частин та наборів записів регістрів

Створення таблиці запитом

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

// Приклад із створенням порожньої таблиці за зразком структури регістру накопичення // Неважко здогадатися, що таким чином можна отримати і заповнену таблицю Запит = Новий Запит ("ВИБРАТИ ПЕРШІ 0 * З Регістр Накопичення. Товарина Складі"); РезультатЗапиту = Запит.Виконати(); ДемоТаблиця = Результат Запиту. Вивантажити (); // Приклад із створенням порожньої таблиці за явно заданими типами та іменами полів Запит = Новий Запит; Запит.Текст = "ВИБРАТИ ПЕРШІ 0 | Значення(Довідник.Номенклатура.ПустаПосилання) ЯК Номенклатура, | ВИРАЗИТИ(0 ЯК ЧИСЛО(15, 3)) ЯК Кількість"; РезультатЗапиту = Запит.Виконати(); ДемоТаблиця = Результат Запиту. Вивантажити (); // ВАЖЛИВО! Не варто забувати, що в типах значень колонок, отриманих із запиту завжди є тип Null // Таким чином, ТЗ створена запитом, завжди має складові типи колонок

Висновок

У цій невеликій статті ми розглянули основні властивості та практичні прийоми створення таблиці значень, достатні для розуміння та початку застосування. Сам об'єкт таблиці значень настільки багатогранний, що докладний опис його можливостей вимагає написання окремої статті про прийоми та методи роботи.

Ось є для початку невеликий фак – прості приклади роботи з таблицею значень:

1. Створити таблицю значень

ТаблицяЗначень = Новий ТаблицяЗначень;


2. Створити колонки таблиці значень:

ТаблицяЗначень.Колонки.Додати("Ім'я");
ТаблицяЗначень.Колонки.Додати("Прізвище");


3. Додати нові рядки використовуючи імена колонок:


НоваРядок.Ім'я = "Василь";
НоваРядок.Прізвище = "Пупкін";


4. Як шукати значення у таблиці значень:
Необхідно знайти рядок таблиці, що містить потрібне значення.

ЗнайденаРядок = ТаблицяЗначень.Знайти(ШуканийЗначення);


5. Знайти перше входження у певних колонках таблиці значень

ЗнайденаРядок = ТаблицяЗначень.Знайти (ШуканеЗначення, "Постачальник, Покупець");


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

СтруктураПоиска = Структура("Співробітник", ШуканеЗначення);
МасивЗнайденихРядок = ТаблицяЗначень.ЗнайтиРядки(СтруктураПошуку);


Створимо структуру пошуку, кожен елемент якої міститиме ім'я колонки як ключ і шукане значення у цій колонці – як значення. Передаємо СтруктуруПошукавши як параметр методу ЗнайтиРядки(). В результаті одержимо рядків таблиці.
Якщо до структури пошуку додати пошук потрібного значення, наприклад, ще й у колонці Відповідальний, то в результаті застосування методу Знайти Рядки() отримаємо всі рядки, де і Співробітник, і Відповідальний рівні шуканому значенню.

7. Як перебрати таблицю значень у довільному порядку

Для кожного ПоточнийРядок З ТаблицяЗначень Цикл
Повідомити(ПоточнаРядок.Ім'я);
КінецьЦикл;

Теж саме використовуючи індекси:

СтаршийІндекс = ТаблицяЗначень.Кількість() - 1;
Для Сч = 0 за СтаршимІндексом Цикл
Повідомити(ТаблицяЗначень[Сч].Ім'я);
КінецьЦикл;


8. Видалення наявного рядка таблиці значень

ТаблицяЗначень.Видалити(Видалити Рядок);

за індексом

ТаблицяЗначень.Видалити(0);


9. Видалення наявної колонки таблиці значень

ТаблицяЗначень.Колонки.Видалити(ВилученаКолонка);


за індексом

ТаблицяЗначень.Колонки.Видалити(0);

Необхідно враховувати, що видалення рядка (або колонки) «з середини» таблиці значень призведе до зменшення на одиницю індексів рядків, що стояли після віддаленої

10. Як заповнити таблицю значень, якщо імена колонок містяться у змінних?

НовийРядок = ТаблицяЗначень.Додати();
НоваРядок[Ім'яКолонки] = Значення;


11. Як заповнити всю колонку таблиці значень необхідним значенням?
Колонку ПрапораФіскальногоОбліку в таблиці значень ТаблицяЗначень необхідно заповнити значенням Брехня

ТаблицяЗначень.ЗаповнитиЗначення(Брехня, "Прапор ФіскальногоОбліку");


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

12. Як таблицю значень «ТаблицяОтримувач» заповнити даними таблиці значень «Вихідна Таблиця»?

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

ТаблицяОтримувач = ТаблицяВихідна.Скопіювати();


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

Часткове перенесення даних для колонок з іменами, що збігаються:

Для кожного рядка Вихідної Таблиці З Вихідна Таблиця Цикл
ЗаповнитиЗначенняВластивостей(НовийРядок,РядокВихідноїТаблиці);
КінецьЦикл


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

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

Повне копіювання даних для колонок з іменами, що збігаються.

ОдноіменніКолонки = Новий Масив();

Для кожного Колонка З ВихіднаТаблиця.Колонки Цикл
ЗбігаючаКолонка = ТаблицяОтримувач.Колонки.Знайти(Колонка.Ім'я);

Якщо ЗбігаючаКолонка<>Невизначено Тоді

// Отримати властивості колонки.
Ім'я = Колонка. Ім'я;
ТипЗначення = Колонка.ТипЗначення;
Заголовок = Колонка.Заголовок;
Ширина = Колонка.

// Замінити колонки у таблиці-одержувачі.
Індекс = ТаблицяОтримувач.Колонки.Індекс(ЗбігаючаКолонка);

ТаблицяОтримувач.Колонки.Видалити(Індекс);
ТаблицяОтримувач.Колонки.Вставити(Індекс, Ім'я, ТипЗначення, Заголовок, Ширина);

// Додати чергове ім'я колонок, що збігаються в масив.
ОдноіменніКолонки.Додати(Колонка.Ім'я);

КінецьЯкщо;

КінецьЦикл;

// Цикл перебору рядків вихідної таблиці.
Для кожного Рядок Вихідної Таблиці З Вихідна Таблиця Цикл

// Додати новий рядок у таблицю-одержувач.
НовийРядок = ТаблицяОтримувач.Додати();

// Заповнити значення в комірках, що збігаються.
Для кожного Ім'яКолонки З ОдноіменніКолонки Цикл
НоваРядок[Ім'яКолонки] = РядокВихідноїТаблиці[Ім'яКолонки];

КінецьЦикл;

КінецьЦикл;


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

13. Як додати колонки до таблиці значень «ТаблицяЗначень» з обмеженнями на кшталт?

При додаванні стовпчика можна просто вказати її ім'я, а другий параметр методу Додати() не чіпати. І тут тип даних колонки – довільний.

Додавання колонки без зазначення типу даних

// Додати колонку без обмежень на кшталт.
ТаблицяЗначень.Колонки.Додати("Об'єкт");


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

Додавання колонки із зазначенням типу даних

// Обмеження за типами даних колонки:
// Тільки елементи довідника "Контрагенти".
ТаблицяЗначень.Колонки.Додати("Контрагент",Новий ОписТипів("ДовідникПосилання.Контрагенти"));


Якщо серед типів, дозволених до заповнення даних колонки, є рядок, можна обмежити її розрядність (довжину), вказати використання змінної чи фіксованої довжини. Усе це забезпечується створенням об'єкта з допомогою конструктора КваліфікаториРядки. Далі цей об'єкт буде використаний як один з параметрів конструктора ОписТипів.

Використання кваліфікаторів для уточнення типу даних колонки таблиці значень

// Підготовка та встановлення обмежень для даних типу Рядок.
КваліфікаторРядки = Новий КваліфікаторРядки(20, ДопустимаДовжина.Змінна);
Допустимі Типи = Новий Опис Типів ("Рядок", КваліфікаториРядки);
ТаблицяЗначень.Колонки.Додати("ПриміткаСтроковеКоротке", ДопустиміТипи);


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

Використання існуючих описів типів для вказівки типу даних колонки таблиці значень

// Розширення вже використаного описи типів.
КваліфікаториЧисла = Новий КваліфікаториЧисла(10, 2, ДопустимийЗнак.Неотрицательный);
КваліфікаториДати = Новий КваліфікаториДати(ЧастіДати.Дата);
РозширеніДопустиміТипи = Новий ОписТипів(ДопустиміТипи, "Число, Дата", КваліфікаториЧисла, КваліфікаториДати);

ТаблицяЗначень.Колонки.Додати("Примітка", РозширеніДопустиміТипи);

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

Статті про інші універсальні колекції значень в 1С

Вивчайте програмування в 1С у місці з моєї книги «Програмувати в 1С за 11 кроків»

  1. Книга написана зрозумілою та простою мовою – для новачка.
  2. Навчіться розуміти архітектуру 1С;
  3. Станете писати код мовою 1С;
  4. Опануйте основні прийоми програмування;
  5. Закріпіть отримані знання з допомогою задачника;

Відмінний посібник з розробки в керованому додатку 1С, як для розробників-початківців, так і для досвідчених програмістів.

  1. Дуже доступна та зрозуміла мова викладу
  2. Книга надсилається на електронну пошту у форматі PDF. Можна відкрити будь-який пристрій!
  3. Зрозумієте ідеологію керованого додатка 1С
  4. Дізнаєтеся, як розробляти керовану програму;
  5. Навчіться розробляти керовані форми 1С;
  6. Зможете працювати з основними та потрібними елементами керованих форм
  7. Програмування під керованим додатком стане зрозумілим

Промо-код на знижку в 15% 48PVXHeYu


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

можна сплатити вручну:

Яндекс.Гроші — 410012882996301
Web Money - R955262494655

Вступайте до моїх груп.