baner

Работа

Таблицы значений в 1С

Информация

Конспект статьи https://programmist1s.ru/rabota-s-tablitsami-znacheniy-v-1s/

 

Таблицу значений, как любую коллекцию, можно обойти циклом.

Для Каждого Строка Из Товары Цикл



Получить нужную строку можно по индексу. Индексы в таблице значений начинается с 0 (нуля).

Строка = ТаблицаЗначений[0];

 

Примеры использования свойства и методов объекта "Таблица значений"

Создать таблицу значений

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

далее добавление колонок, добавление строк.

или

- выгрузка результата запроса в таблицу значений

- или выгрузка из табличной части документа

 

Добавить колонки в таблицу значений. Рекомендуется указывать "тип данных".

 

ТаблицаТоваров.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаТоваров.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));

После создания колонок добавим несколько новых строк и заполним колонки

НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Помидоры");

НоваяСтрока.Цена = 54;



НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Помидоры желтые");

НоваяСтрока.Цена = 50;


Добавим еще одну колонку:

ТаблицаТоваров.Колонки.Добавить("ТовГруппа", Новый ОписаниеТипов("Строка"));



Заполнить колонку в таблице перебором строк

Для Каждого Строка Из ТаблицаТоваров.ТовГруппа Цикл
Строка.ТовГруппа = "Овощи";
КонецЦикла;

Заполнить колонку одинаковым значением

ТаблицаТоваров.ЗаполнитьЗначения("Овощи", "ТовГруппа");

Синтаксис:

ЗаполнитьЗначения(<Значение>, <Колонки>)

если колонки не указаны, то будут заполнены все колонки



Сообщим пользователю название первого элемента (индекс таблицы значений начинается с 0)

Сообщить(ТаблицаТоваров[0].Товар);

 

Скопировать строку таблицы значений, для примера — первую

ЗаполнитьЗначенияСвойств(ТаблицаТоваров.Добавить(), ТаблицаТоваров[0]);

Поиск в таблице значений с ценой помощью структуры

(если на вход подавать готовые структуры?)

МассивСтрок = ТаблицаТоваров.НайтиСтроки(Новый Структура("Цена", 54));

Сортировка строк таблицы по выбранному полю

ТаблицаТоваров.Сортировать("Цена");

Получить количество строк в таблице

ВсегоСтрок = ТаблицаТоваров.Количество();

Выгрузить колонку таблицы значений в массив

ТаблицаТоваров.ВыгрузитьКолонку("Товар");

Чтобы удалить строку в таблице значений, нужно передать саму строку или индекс в метод "Удалить".

Два варианта:

//по строке
ТаблицаТоваров.Удалить(ТаблицаТоваров[ВсегоСтрок  - 1]);

//по индексу
ТаблицаТоваров.Удалить(ВсегоСтрок  - 1);

Полностью скопировать таблицу значений можно так:

НоваяТаблицаТоваров = ТаблицаТоваров.Скопировать();

Просуммировать итог по колонке таблицы значений:

СуммаЦен = ТаблицаТоваров.Итог("Цена");

Свернуть таблицу можно так:

ТаблицаТоваров.Свернуть("Товар", "Цена");

При этом в таблице останутся только различные значения из колонки «Товар» с суммированными полями «Цена».

Синтаксис:

Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)

Пример:

ТаблицаЦен.Свернуть("Товар, Валюта", "Цена");

 

Очистим все строки таблицы значений

ТаблицаТоваров.Очистить();

Удалить все колонки

ТаблицаТоваров.Колонки.Очистить();

 

­

­

Применение таблиц значений

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

Результат запроса можно выгрузить в таблицу значений

Табличную часть документа можно выгрузить в таблицу значений

Таблицу значений можно выгрузить в табличную часть документа

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



Примеры из документации 1С (синтакс-помощник)

Элементы коллекции:

СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс строки (нумерация с 0).

Свойства:

Индексы (Indexes)

Колонки (Columns)

 

Методы:

Вставить (Insert) вставить строку в таблицу значений

ВыбратьСтроку (ChooseRow)

ВыгрузитьКолонку (UnloadColumn)

Добавить (Add) - добавляет строку

ЗагрузитьКолонку (LoadColumn) — загружает значения из массива в колонку таблицы

ЗаполнитьЗначения (FillValues)

Индекс (IndexOf)

Итог (Total) - выводит итог по выбранной колонке

Количество (Count)

Найти (Find) - поиск строки в таблице, содержащих значение. Эффективно для поиска уникальных значений

НайтиСтроки (FindRows)-  выводим массив строк (ссылки на строки), отвечающих условиям.

Очистить (Clear)

Получить (Get) - получает значение по индексу

Свернуть (GroupBy)

Сдвинуть (Move) — сдвигается строки внутри таблицы

Скопировать (Copy)

СкопироватьКолонки (CopyColumns)

Сортировать (Sort)

Удалить (Delete)

 

 

ТаблицаЗначений (ValueTable)

 

// Создание таблицы значений 

ТаблицаЗначений = Новый ТаблицаЗначений;
// добавим в таблицу значений три колонки

ТаблицаЗначений.Колонки.Добавить("Отдел",,"Отдел");
ТаблицаЗначений.Колонки.Добавить("Сотрудник",,"Фамилия сотрудника");
ТаблицаЗначений.Колонки.Добавить("Оклад",,"Оклад");

// добавим строку
Стр=ТаблицаЗначений.Добавить();
Стр.Отдел="Отдел 1";
Стр.Сотрудник="Иванов";
Стр.Оклад=5600;

// добавим новую колонку
ТаблицаЗначений.Колонки.Добавить("Стаж",,"Стаж работы");

// ввод новой строки и данных по строке
ТекСтр = ТаблицаЗначений.Добавить();
ТекСтр.Отдел = "Отдел 2";  ТекСтр.Сотрудник = "Петров";  
ТекСтр.Оклад = 6700;  ТекСтр.Стаж = 22;

 

Пример поиск строки по значению:
НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, "Товар");
Если НайденнаяСтрока = Неопределено Тогда
Предупреждение(НСтр("ru = 'Товар не найден!';"
+ " en = 'Article not found!'"));
Иначе
ЦенаТовара = НайденнаяСтрока.Цена;
КонецЕсли;

 

Пример поиска всех строк, содержащих значение
// СписокРаботников - реквизит формы для представления информации

// о работниках (тип ТаблицаЗначений).

// В форме расположено табличное поле СписокРаботников, в котором

// показываются данные СписокРаботников.

// С помощью запроса выбирается информация о работниках.

Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
// текст запроса
// ...
";
Запрос.Текст = ТекстЗапроса;
СписокРаботников = Запрос.Выполнить().Выгрузить();

Отбор = Новый Структура();
Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());

Строки = СписокРаботников.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
ЭлементыФормы.СписокРаботников.ТекущаяСтрока = Строки[0];
КонецЕсли;

 

Ромин С.А.