Примеры работы, методы, лайфхаки

Таблица значений в 1С 8. 3 позволяет строить динамические наборы значений. При этом каких-либо жестких ограничений на тип данных не накладывается. Таблица значений создается в памяти и не сохраняется в базе данных, имеет множество полезных возможностей и работает очень быстро.

Свойствами таблиц значений являются:

  • индексы (коллекция индексов таблицы значений)
  • колонки (коллекция колонок таблицы значений).

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

Примеры работы, методы, лайфхаки

Создание таблицы значений Таблица значений — это двумерный массив в 1С, который предназначен для хранения и обработки промежуточных данных, возникающих в процессе работы программы. Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т. это временный набор данных.

ТабЗнач. НоваяКолонка(«Номер»); ТабЗнач. НоваяКолонка(«Сотрудник»); ТабЗнач. НоваяКолонка(«Должность»); ТабЗнач. НоваяКолонка(«Оклад»);

//можно указать тип данных каждой колонки //если тип данных колонки не указан, то можно хранить данные любого типа Синтаксис: НоваяКолонка( , , , , , , , )

ТабЗнач. НоваяКолонка(«Номер»,»Число»,10,0); ТабЗнач. НоваяКолонка(«Сотрудник»,»Справочник. Сотрудники»); ТабЗнач. НоваяКолонка(«Должность»,»Справочник. Должности»); ТабЗнач. НоваяКолонка(«Оклад»,»Число»,10,2);

Добавление строк в таблицу значений

ТабЗнач. НоваяСтрока(); ТабЗнач. Номер = 1; ТабЗнач. Сотрудник = «Иванов Иван Иванович»; //следите за типом колонки! ТабЗнач. Должность = «Программист»; ТабЗнач. Оклад = 20000;

ТабЗнач. НоваяСтрока(); ТабЗнач. Номер = 2; ТабЗнач. Сотрудник = «Петров Петр Петрович»; ТабЗнач. Должность = «Бухгалтер»; ТабЗнач. Оклад = 10000;

//обычно строки добавляются в цикле СпрСотр = СоздатьОбъект(«Справочник. Сотрудники»); СпрСотр. ВыбратьЭлементы(); Пока СпрСотр. ПолучитьЭлемент()=1 Цикл. ТабЗнач. НоваяСтрока();. ТабЗнач. Номер = СпрСотр. Код;. ТабЗнач. Сотрудник = СпрСотр. ТекущийЭлемент(); //следите за типом колонки!. ТабЗнач. Должность = СпрСотр. Должность;. ТабЗнач. Оклад = СпрСотр. Оклад; КонецЦикла;

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

ТабЗнач. ВыбратьСтроки(); Пока ТабЗнач. ПолучитьСтроку()=1 Цикл. Сообщить(ТабЗнач. Сотрудник); КонецЦикла; 2-й способ.

Для НомерСтроки = 1 По ТабЗнач. КоличествоСтрок() Цикл. ТабЗнач. ПолучитьСтрокуПоНомеру(НомерСтроки);. Сообщить(ТабЗнач. Сотрудник); КонецЦикла;

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

//сортировать по должности по возрастанию ТабЗнач. Сортировать(«Должность+»);

//сортировать по должности по возрастанию, а внутри должности по убыванию оклада ТабЗнач. Сортировать(«Должность+,Оклад-«);

Поиск в таблице значений

Синтаксис: НайтиЗначение( , , ) Возвращает число: 0 — значение не найдено; 1 — значение найдено Если указан параметр , то поиск производится только по заданной строке Если указан параметр , то поиск производится только по заданной колонке

номстр = 0; Если ТабЗнач. НайтиЗначение (10000, номстр, «Оклад») = 1 Тогда. ТабЗнач. ПолучитьСтрокуПоНомеру(номстр);. Сообщить(ТабЗнач. Сотрудник); КонецЕсли;

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

//получить итог по колонке можно методом Итог ВсеОклады = ТабЗнач. Итог(«Оклад»)

//часто требуется группировать строки и подсчитывать итоги по группам, //в этом случае применяется метод Свернуть

//проссумировать оклады по каждой должности ТабЗнач. Свернуть(«Должность»,»Оклад»);

//Можно группировать и суммировать сразу по нескольким колонкам ТабЗнач. Свернуть(«Категория, Должность»,»Оклад,Налог»);

Удаление строк и колонок из таблицы значений

ТабЗнач. Очистить(); //очистить таблицу значений и удалить колонки

ТабЗнач. УдалитьСтроки(); //удаляет все строки (колонки сохраняются)

ТабЗнач. УдалитьСтроку(); //удаляет текущую строку ТабЗнач. УдалитьСтроку(3); //удаляет 3-ю строку

ТабЗнач. УдалитьКолонку(«Оклад»); //удаляет колонку Оклад ТабЗнач. УдалитьКолонку(2); //удаляет 2-ю колонку

ВНИМАНИЕ Часто требуется удалить строки, удовлетворяющие определенному условию. Так как при удалении строки из таблицы значений следующая строка становится текущей, то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.

//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ. ТабЗнач. ВыбратьСтроки(); Пока ТабЗнач. ПолучитьСтроку()=1 Цикл. Если Тогда. ТабЗнач. УдалитьСтроку(); //следующая строка стала текущей,. КонецЕсли; КонецЦикла;

В этом случае я рекомендую использовать следующий прием:

начало:. Если Тогда. ТабЗнач. УдалитьСтроку(); //следующая строка стала текущей. Если ТабЗнач. НомерСтроки<>0 Тогда. Перейти

начало;. КонецЕсли;. КонецЕсли; КонецЦикла;

А вот еще один правильный алгоритм, предложенный Wlad:

ТабЗнач. выбратьстроки(); Пока ТабЗнач. ПолучитьСтроку()=1 Цикл. Пока ( ) и (ТабЗнач. НомерСтроки<>0) Цикл. ТабЗнач. УдалитьСтроку(); //следующая строка стала текущей. КонецЦикла; КонецЦикла;

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

//установить курсор на указанную колонку или можно узнать, где находится курсор ТабЗнач. ТекущаяКолонка(НоваяКолонка,ТекКолонка);

//установить курсор на указанную строку или можно узнать, где находится курсор. ТекСтрока = ТабЗнач. ТекущаяСтрока(НовСтрока);

ТабЗнач. ВидимостьКолонки(«Оклад»,0); //скрыть колонку Оклад ТабЗнач. ВидимостьКолонки(«Должность, Сотрудник»,1); //показать колонки Должность и Сотрудник ТабЗнач. ВидимостьКолонки(«Оклад»,1,1); //показать колонку Оклад в 1-й позиции

//можно зафиксировать верхние строки и левые колонки для удобства прокрутки таблицы значений в диалоге ТабЗнач. Фиксировать(КолСтрок,КолКолонок);

Методы УстановитьЗначение и ПолучитьЗначение Эти методы позволяют обращаться к данным в таблице значений для чтения и записи. Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.

Синтаксис: УстановитьЗначение( , , ) Синтаксис: ПолучитьЗначение( , )

ТабЗнач. НоваяСтрока(); ТабЗнач. УстановитьЗначение(1,»Номер»,100); ТабЗнач. УстановитьЗначение(1,»Сотрудник»,»Иванов Иван Иванович»); ТабЗнач. УстановитьЗначение(1,3,10000); //обращение к 1-й строке и 3-й колонке («Оклад»)

Номер = ТабЗнач. ПолучитьЗначение(1,»Номер»); ФИО = ТабЗнач. ПолучитьЗначение(1,»Сотрудник»); Оклад = ТабЗнач. ПолучитьЗначение(1,3); //обращение к 1-й строке и 3-й колонке «Оклад»

Выгрузка таблицы значений

//выгрузить 10 сотрудников с наибольшими окладами в новую таблицу значений ТабЗнач. Сортировать(«Оклад-«); ТабЗнач. Выгрузить(НоваяТабЗнач,1,10,»Сотрудник,Оклад»);

Таблица значений в 1С – это универсальная коллекция, объект встроенного языка, который используется для работы с данными в табличном виде. Этот объект не сохраняется в базе данных, а размещается в оперативной памяти. У таблицы значений в общем случае может быть произвольное количество колонок, при этом допускается как типизация колонок, так и размещение в колонках значений произвольных типов.

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

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

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

Добавление колонок

// Добавление колонок в таблицу значений без указания типа
ТабЗнач. Колонки. Добавить(“Сотрудник”);
ТабЗнач. Колонки. Добавить(“Должность”);
ТабЗнач. Колонки. Добавить(“Оклад”);

// Добавление колонки с явным указанием типа значения и заголовком
ОписаниеПремия = Новый ОписаниеТипов(“Число”, Новый КвалификаторыЧисла( 10 , 2));
ТабЗнач. Колонки. Добавить(“ПроцентПремии”, ОписаниеПремия, “Процент премии”);
ТабЗнач. Колонки. Добавить(“Премия”, ОписаниеПремия, “Премия”);

Добавление новой строки, заполнение реквизитов

// Вставить новую строку в указанную позицию в таблицу значений
ВставленнаяСтрока = ТабЗнач. Вставить(1);

// Заполнить строку значениями
// В качестве источника данных заполнения могут быть объекты с именованными свойствами
// – Структура, строка таблицы значений, объект, и т. // метод производит сопоставление свойств по именам,
// и заполняет значения у совпавших свойств приемника – в нашем случае строки таблицы значений
ЗаполнитьЗначенияСвойств(ВставленнаяСтрока, СтрокаТЗ);
ВставленнаяСтрока. Сотрудник = “Сидоров Александр”;

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

// Заполнение колонки для всех строк таблицы значений
ТабЗнач. ЗаполнитьЗначения(10. 5, “ПроцентПремии”);

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

// Коллекция строк и коллекция колонок по своему поведению похожи на массивы,// и работать с ними можно схожим образом
// Перебрать все колонки таблицы значений и вывести заголовки,// а если не заполнен заголовок – то имя колонки
Для Каждого Колонка из ТабЗнач. Колонки Цикл
Сообщить(?(ЗначениеЗаполнено(Колонка. Заголовок),Колонка. Заголовок, Колонка. Имя));
КонецЦикла;

// Перебрать все строки и произвести какие-то вычисления,// например, посчитать премию, как Оклад * процент премии /100
Для Каждого СтрокаТЗ из ТабЗнач Цикл
СтрокаТЗ. Премия = СтрокаТЗ. Оклад * СтрокаТЗ. ПроцентПремии / 100;
КонецЦикла;

Копирование таблицы значений в 1С — примеры

// Создать полную копию таблицы
КопияТЗ = ТабЗнач. Скопировать();
// Создать копию таблицы значений по нужным колонкам
КопияДолжностиОклады = ТабЗнач. Скопировать(,“Должность,Оклад”);

//Создать копию таблицы значений с отбором нужных строк
Отбор = Новый Структура(“Должность”, “Тестировщик”);
КопияТЗТестировщики = ТабЗнач. Скопировать(Отбор);

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

Сортировка таблицы значений в 1С 8. Как упорядочить таблицу значений.

// Сортировать таблицу значений по колонке в 1С 8
КопияТЗ. Сортировать(“Оклад”);

// Сортировать таблицу значений по нескольким колонкам в 1С 8
КопияТЗ. Сортировать(“Должность Убыв, Оклад Возр”);

Свернуть таблицу значений

// Просуммировать значения в одних колонках, свернув таблицу значений в разрезе других колонок
// При использовании метода Свернуть, все не использованные в методе колонки удалятся!
// Первым параметром идет список колонок через запятую, по которым мы хотим получить группировки
// Вторым параметром идет список колонок, значения в которых нужно просуммировать
// В этом примере в таблице значений КопияТЗ останутся только колонки Должность и Оклад
КопияТЗ. Свернуть(“Должность”, “Оклад”);

Удаление строк из таблицы по условию. Обратный обход таблицы значений снизу вверх

// Найти одну строку в таблице значений по значению во всех колонках. // Метод целесообразно использовать для поиска уникальных значений
НайденнаяСтрока = ТабЗнач. Найти(“Федоров Василий”);

// Найти строку по значению с поиском по определенным колонкам
// При поиске по неуникальным значениям следует учитывать, что метод вернет первую попавшуюся строку
НайденнаяСтрока = ТабЗнач. Найти(10. 5, “Премия, ПроцентПремии”);

Удалить все строки из таблицы значений

// Удалить все строки из таблицы значений
ТабЗнач. Очистить();

Получить навыки разработки в 1С, и составить целостное представление о платформе 1С Предприятие 8 вы можете, пройдя мой курс “Разработчик 1С с нуля”.

Работа с таблицей значений в 1С 8. 3 на примерах

ТЗ ТаблицаЗначений

Добавить колонку в таблицу значений

// Необходимо, чтобы колонка таблицы значения была строго типизировано
ОписаниеВеса ОписаниеТипов КвалификаторыЧисла
ТЗКолонкиДобавить ОписаниеВеса

Добавить строку в таблицу значений

НоваяСтрока ТЗДобавить
НоваяСтрокаАвтомобиль
НоваяСтрокаЦвет
НоваяСтрокаКласс
НоваяСтрокаВес

НоваяСтрока ТЗДобавить
НоваяСтрокаАвтомобиль
НоваяСтрокаЦвет
НоваяСтрокаКласс
НоваяСтрокаВес

НоваяСтрока ТЗДобавить
НоваяСтрокаАвтомобиль
НоваяСтрокаЦвет
НоваяСтрокаКласс
НоваяСтрокаВес

Заполнить строку значениями

//ДанныеДляЗаполнения — структура, стройка другой таблицы и т. //Метод сопоставляет имена свойств и заполнят по ним значение
ЗаполнитьЗначенияСвойствТЗДобавить ДанныеДляЗаполнения

Вставить строку

//Метод вставляет в таблицу значения новую строку
НоваяСтрока ТЗВставить

НоваяСтрокаАвтомобиль
НоваяСтрокаЦвет
НоваяСтрокаКласс
НоваяСтрокаВес

//Сортирует таблицу значение по нужным колонкам и направлению сортировки
ТЗ. Сортировать(«Цвет Убыв, Вес Возр»);

Получить значение

//Предположим что в строке №1 хранится информация об автомобиле БМВ. //А цвет храниться в колонке №2 с именем «Цвет»
//Задача — получить значение цвета из таблицы значений

//Если мы знаем номер строки и название свойства:
ЦветБМВ ТЗЦвет
//Если мы значем номер строки и колонки
ЦветБМВ ТЗ
// * отсчет номера строк и колонок начинается с 0

Удалить строку

//Удаляем строку №1 из таблицы значений
ТЗУдалитьТЗ
//Удалить строки по условию можно с помощью перебора (см. Обход таблицы значений)

Найти одну строку

//Позволяет найти одну строку в таблице значений. //Искать можно как по всем колонкам таблице
ИскомаяСтрока ТЗНайти
//Так и по определенной колонке:
ИскомаяСтрока ТЗНайти
//*Метод находит первую попавшуюся строку, если их несколько
//Если строка не найдена, то вернет «Неопределено»

Найти несколько строк

// Позволяет найти сразу несколько строк в таблице значений
//Создаем структуру для отбора
ОтборПоЗеленомуЦвету Структура
ОтборПоЗеленомуЦветуВставить
//Получаем массив строк с зелеными машинами
МассивСоСтроками ТЗНайтиСтрокиОтборПоЗеленомуЦвету

//Позволяет «свернуть» таблицу значений:
//1С оставляет указанные колонки в первом параметре и суммирует по колонкам из второго параметра
ТЗСвернуть

Скопировать таблицу

//Позволяет получить копию таблицы значений. НоваяТЗ ТЗСкопировать
//Если нужны только некоторые строки — нужно вставить массив таких строк в 1-ый параметр
//Если нужны только некоторые колонки — нужно вставить их имена через запятую в 2-ый параметр

Скопировать таблицу без данных

//Делает копию таблицы, но без строк. Только колонки
НоваяТЗ ТЗСкопироватьКолонки

Узнать количество строк

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С. Связаться с нами можно по телефону +7 499 350 29 00. Услуги и цены можно увидеть по ссылке. Будем рады помочь Вам!

КоличествоСтрокТЗ = ТЗ. Количество();

Очистить

//Очищает таблицу значений от строк
ТЗОчистить

Обход таблицы значения

Стр ТаблицаЗначений

СообщитьСтрНоменклатура

Обратный обход таблицы (снизу вверх)

Чаще всего применяется для удаления строк в таблице.

//Товары — таблица значений, где необходимо удалить строки с «Сумма = 0»
Сч
СчТоварыКоличество
ТекущаяСтрокаТоварыСч
ТекущаяСтрокаСумма
ТоварыУдалитьТекущаяСтрока
СчСч

СчСч

Обход колонок

Можно перечислить все колонки в таблице значений в 1с 8. 3 с помощю цикла <<Для>>:

Колонка ТаблицаЗначенийКолонки

СообщитьКолонкаИмя

Превратить структуру в таблицу значений

Создадим структуру поиска, каждый элемент которой будет содержать имя колонки в качестве ключа и искомое значение в этой колонке – в качестве значения. Передаем СтруктуруПоискав качестве параметра методу НайтиСтроки(). В результате получеем массив строк таблицы. Если в структуру поиска добавить поиск нужного значения, например, еще и в колонке Ответственный, то в результате применения метода НайтиСтроки() получим все строки, где и Сотрудник, и Ответственный равны искомому значению.

Как перебрать таблицу значений в произвольном порядке

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

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

Применяем для таблицы значений метод ЗаполнитьЗначения(). Первым параметром передаем заполняемое значение. Вторым параметром – имя заполняемой колонки.

Как таблицу значений «ТаблицаПолучатель» заполнить данными таблицы значений «ИсходнаяТаблица»?

Если ТаблицаПолучатель на момент выполнения операции еще не существует или ее предыдущие колонки сохранять не нужно, можно создать ее как полную копию исходной

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

Частичный перенос данных для колонок с совпадающими именами:

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

Если у таблиц не будет колонок с одинаковыми именами, таблица-получатель будет в результате содержать столько же строк с пустыми значениями, сколько строк было в таблице-источнике. Если у каких-то одноименных колонок тип значения данных из таблицы-источника не попадет в массив разрешенных типов колонки таблицы-получателя, в таких полях получим пустые значения. Рассмотрим третий случай. В случае одноименных колонок колонку таблицы-получателя нужно привести в полное соответствие колонке таблицы-источника.

Полное копирование данных для колонок с совпадающими именами

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

Как добавить колонки к таблице значений «ТаблицаЗначений» с ограничениями по типу?

При добавлении колонки можно просто указать ее имя, а второй параметр метода Добавить() не трогать. В этом случае тип данных колонки – произвольный.

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

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

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

Если среди типов, разрешенных к заполнению данных колонки, есть строка, можно ограничить ее разрядность (длину), указать использование переменной или фиксированной длины. Все это обеспечивается созданием объекта при помощи конструктора КвалификаторыСтроки. Далее этот объект будет использован в качестве одного из параметров конструктора ОписаниеТипов.

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

Аналогичные действия можно осуществлять в отношении квалификаторов числа и даты. Обратите внимание: описание типов можно строить конструктором как «с нуля», так и использовать в качестве основы уже существующее описание типов

Использование существующих описаний типов для указания типа данных колонки таблицы значений

Работаем с таблицей значений программно

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

Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки имеют последовательную целочисленную нумерацию (начиная с 1). И строки, и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.

Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.

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

Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.

Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :

Колонки таблицы значений

Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:

  • Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
  • Заголовок — представление колонки в диалогах (может содержать произвольные символы);
  • ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
  • Ширина — ширина колонки в диалогах;

Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений. Для добавления новой колонки используется метод Добавить():

Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():

Перебор колонок выполняется следующим образом:

Для удаления колонки используется метод Удалить():

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

ИмяТипОписание
ИмяСтрокасимвольный идентификатор колонки, по которому к ней можно обращаться из кода
ЗаголовокСтрокастроковое представление колонки на форме
ТипЗначенияОписаниеТиповсвойство органичивает пространство доступных значений, которые можно указать в данной колонке
ШиринаЧислоширина колонки на форме (выражается в количестве символов)

Методы коллекции колонок таблицы значений

Вставить()Вставляет новую колонку в указанную позицию коллекции
Добавить()Добавляет новую колонку в конец коллекции
Количество()Возвращает количество колонок в коллекции
Найти()Ищет колонку в коллекции по имени
Очистить()Удаляет все колонки из коллекции
Сдвинуть()Сдвигает колонку влево или вправо
Удалить()Удаляет колонку из коллекции

Строки таблицы значений

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

Добавление и удаление строк

Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений. Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:

Для удаления строки используется метод Удалить() объекта ТаблицаЗначений. Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:

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

Для перебора строк удобнее всего использовать оператор цикла Для Каждого. В редких случаях оправдано применение цикла Для :

В отличие от платформы 1С:Предприятие 7. 7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):

Как работать с таблицей значений в 1С 8. 2 – 8

Таблица значений — это не сохраняемый в базе данных объект, предназначенный для создания динамических наборов данных.

Таблица значений состоит из строк и колонок. В отличие от списка значений, таблица значений имеет структуру, которую определяет разработчик.

Объект ТаблицаЗначений имеет много полезных методов для обработки данных. Разработчик средствами встроенного языка может добавлять и удалять строки и колонки, перебирать строки, искать значение, сортировать по любым колонкам и выполнять другие операции.

При создании новой таблицы значений в нее обычно добавляются колонки:

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

По умолчанию в таблице значений могут храниться значения разных типов. Но в 1С:Предприятии 8. 0 для колонки можно задать список возможных типов значений. Это делается следующим образом (для повышения наглядности нам понадобится вспомогательная функция СоздатьОписаниеТипов):

При работе со строками таблицы значений необходимо понимать, что строка — это объект типа СтрокаТаблицыЗначений. Поэтому добавление строк в таблицу значений производится следующим образом:

Чтобы удалить колонки из таблицы значений нужно применить метод Очистить для свойства-коллекции Колонки:

Перебор строк таблицы значений обычно реализуется с помощью конструкции «Для Каждого», при этом в переменной цикла будет содержаться не номер строки, а вся строка целиком как объект СтрокаТаблицыЗначений:

Часто возникает необходимость найти значение в таблице значений. Для решения этой задачи предназначены методы Найти и НайтиСтроки. В метод Найти передается искомое значение и список колонок, которые нужно просматривать. Если значение найдено, то возвращается строка таблицы значений, иначе — значение Неопределено.

Метод НайтиСтроки позволяет найти сразу несколько строк таблицы значений, удовлетворяющих заданному условию. В параметрах этого метода передается структура, задающая условия отбора. Ключ структуры определяет имя колонки, а ее значение — искомое значение. Метод НайтиСтроки возвращает массив, содержащий ссылки на найденные строки таблицы значений:

Внимание! Массив, возвращаемый методом НайтиСтроки, содержит строки таблицы значений (не их копии, а сами строки). При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот.

Таблица значений позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать:

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

Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются.

Внимание! Списки колонок для метода Свернуть не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. Например, у нас есть таблица значений со следующими данными.

В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход:

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

Таблица значений позволяет подсчитать итог по колонке числового типа, например:

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

Руководство 1С

Таблица значений 1С – предназначена для хранения и обработки данных. Очень часто используется программистами для хранения временных (промежуточных) данных.

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

Примеры работы, методы, лайфхаки

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

Как можно создать новую таблицу значений?

ТабЗначений = Новый ТаблицаЗначений; ТабЗначений. Колонки. Добавить(«КолКод»); ТабЗначений. Колонки. Добавить(«КолНоменклатура»); ТабЗначений. Колонки. Добавить(«КолКоличество»);

Функция создает таблицу значений с колонками «КолКод», «КолНоменклатура» и «КолКоличество».

Как добавить новую колонку с определенным типом и заголовком?

ФорматЧисла = Новый КвалификаторыЧисла(9, 2) ОписаниеТипа = Новый ОписаниеТипов(«Число», КвалифЧисла); ТабЗначений. Колонки. Добавить(«КолКоличество», ОписаниеТипа, «Количество номенклатуры»);

Функция добавляет колонку «КолКоличество» с типом «Число», длиной в 9 символов и с точностью в 2 символа.

Как можно добавить новые строки?

ВыбНоменклатура = Справочники. Номенклатура. Выбрать(); Пока ВыбНоменклатура. Следующий() Цикл НоваяСтрока = ТабЗначений. Добавить(); НоваяСтрока. КолКод = ВыбНоменклатура. Код; НоваяСтрока. КолНоменклатура = ВыбНоменклатура. Ссылка; НоваяСтрока. КолКоличество = 1; КонецЦикла;

Функция делает выборку по номенклатуре и добавляет полученные данные в таблицу значений.

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

Функция делает запрос по номенклатуре и выгружает результат в таблицу значений. Колонка будет одна «СсылкаНоменклатура».

Как сделать выборку строк в таблице значений?

Для Каждого СтрокаТаб Из ТабЗначений Цикл Сообщить(СтрокаТаб. КолНоменклатура); КонецЦикла;

Функция делает выборку по таблице значений и сообщает все элементы, которые находятся в колонке «Номенклатура». В первом примере выборка идет по строкам, а во втором строки получаем по индексу.

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

// Создаем отбор ОтборСтруктура = Новый Структура; ОтборСтруктура. Вставить(«КолНоменклатура «, СсылкаНоменклатура); // Используем отбор в поиске строк ТабЗначенийСтроки = ТабЗначений. НайтиСтроки(ОтборСтруктура); Для Каждого СтрокаТаб Из ТабЗначенийСтроки Цикл Сообщить(СтрокаТаб. КолКоличество); КонецЦикла;

Функция делает выборку по таблице значений с отбором по колонке «Номенклатура».

Как сделать сортировку?

ТабЗначений. Сортировать(«КолКод Убыв, КолНоменклатура Возр»);

Функция делает сортировку таблицы по колонкам «КолКод» по убыванию и «КолНоменклатура» по возрастанию.

Как вычислить итоги по колонке?

Функция получает итоги по колонке «КолКоличество» и записывает их в переменную «ИтогКоличество».

Как сделать копию таблицы значений?

Функция делает полную копию таблицы «ТабЗначений» в таблицу «КопияТабЗначений».

Как свернуть таблицу значений по колонке Номенклатура и суммировать по количеству?

Функция сворачивает таблицу по колонке «Номенклатура» и суммирует колонку «Количество». Если существуют еще колонки, то они будут удалены.

Как найти строку в таблице значений по значению?

Функция делает поиск по таблице и возвращает строку если строка найдена.

Как удалить строку или полностью очистит таблицу значений?

ТабЗначений. Удалить(0); // Удалит первую строку по индексу ТабЗначений. Очистить(); // Полностью очистить таблицу

Как установить и получить значение?

Функция получает строку из таблицы значений по индексу

Как вставить значение в таблицу?

Функция вставляет строку по индексу и устанавливает значения.

Дополнительные функции, которые упрощают работу с таблицей значений в 1С

// Выгружает колонку «КолНомнклатура» в массив МассивНоменклатуры = ТабЗначений. ВыгрузитьКолонку(«КолНоменклатура»); // Заполнит колону «КолКоличество» ТабЗначений. ЗаполнитьЗначения(0, «КолКоличество «); // Функция вернет количество строк в таблице КоличествоСток = ТабЗначений. Количество();