Записки программиста 1с

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

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

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

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

Создание таблицы значений можно разделить на три этапа:

Таблица значений в языке 1С
Схема создания Таблицы значений в 1с

Во-первых инициализация таблицы значений:

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

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

Табабб.Колонки.Добавить("Адресат");
Табабб.Колонки.Добавить("Адрес");
Табабб.Колонки.Добавить("Сообщение");

В третьих заполняем таблицу значений данными:

//заполняет строку таблицы значений
Стр = Табабб.Добавить();
	
Стр.Адресат=док.ФизЛицо;
Стр.Адрес=док.ФизЛицо.КонтактнаяИнформация[3].АдресЭП;
Стр.Сообщение="";

Cтрока таблицы значений 1c

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

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

Стр = Табабб.Добавить();

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

Стр.Адресат=док.ФизЛицо;
Стр.Адрес=док.ФизЛицо.КонтактнаяИнформация[3].АдресЭП;
Стр.Сообщение="";

Пример создания и заполнения таблицы значений:

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

Методы объекта Таблица значений в языке 1с

Таблица значений в языке 1С
Методы таблицы значений 1с

Метод Добавить. Добавляет строку а конец таблицы значений.

ТЗ=новый ТаблицаЗначений;
НоваяСтрока=ТЗ.Добавить();
НоваяСтрока.Адресат="Петров Петр Иванович";
НоваяСтрока.Адрес="doc@ithelpyou.ru";
НовасСтрока.Сообщение="Добавлено значение программно";

Метод Вставить. Вставляет новый элемент в таблицу значений на позицию с указанным индексом.

ТЗ=новый ТаблицаЗначений;
НоваяСтрока=ТЗ.Вставить(2);
НоваяСтрока.Адресат="Иванов Иван Иванович";
НоваяСтрока.Адрес="doc@ithelpyou.ru";
НовасСтрока.Сообщение="Вставлено значение программно";

Метод Количество. Возвращает количество строк таблицы значений.
Синтаксис:
Количество();

Сообщить(ТЗ.Количество());

Метод Итог. Суммирует значения всех строк в указанной колонке. Суммирование производится по числовым типам данных.
Синтаксис:
Итог(Колонка);

Сообщить(ТЗ.Итог("Сумма"));

Метод Сортировать. Сортирует таблицу значений в соответствии с указанными правилами сортировки.
Синтаксис:
Сортировать(Колонки);

ТЗ.Сортировать("Адресат");

Метод Удалить. Удаляет строку таблицы значений. Номер-это номер строки таблицы значений, которую необходимо удалить.
Синтаксис:
Удалить(Номер);

Метод ВыбратьСтроку. Вызывает модальное диалоговое окно для интерактивного выбора строки из таблицы значений.
Синтаксис:
ВыбратьСтроку([Заголовок][, НачальнаяСтрока]);

Где: Заголовок — заголовок окна выбора; НачальнаяСтрока указывает строку
таблицы значений, на которой будет установлен курсор при открытии окна выбора.

Метод Очистить. Удаляет все строки таблицы значений.
Синтаксис:
Очистить();

1с таблица значений найти


Метод Найти. Осуществляет поиск значения в указанных колонках таблицы значений.
Синтаксис:
Найти(Значение[, Колонки]);
Значение-искомое значение; Колонки-колонки, в которых производиться поиск. Если Параметр Колонки не задан, поиск выполняется по всей таблице значений ТЗ.

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

Метод Свернуть. Осуществляет сворачивание таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения этих строк, хранящиеся в колонках, указанных во втором параметре, суммируются. Списки колонок не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений.
Синтаксис:
Свернуть(КолонкиГруппировки[, КолонкиСуммирования]);


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

Таблица=новый ТаблицаЗначений;
Таблица=Запрос.Выполнить().Выгрузить();

Как проверить наличие колонки в Таблице значений?

Если ТаблицаДанных.Колонки.Найти("Всего")<>Неопределено Тогда
КонецЕсли;

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

Если Строка.Всего<>"" Тогда 
     СтрокаРуп.МаксимальнаяНагрузка=Число(Строка.Всего);
КонецЕсли;

Нахождение максимума в таблице значений 1с

МаксЗначение = 0;
Для Каждого СтрокаТЧ Из ТЧ Цикл
     МаксЗначение = Макс(МаксЗначение, СтрокаТЧ.НашаКолонка); 
КонецЦикла;

На примере таблицы в 10 млн. строк:
1. Сортировка — 96 сек.
2. Прямой цикл — 55 секунд.

На маленьких таблицах (менее 10 тыс. строк) разница практически незаметна.

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

Синтаксис команды НайтиСтроки.

НайтиСтроки (FindRows)
Синтаксис:

НайтиСтроки(<ПараметрыОтбора>)
Параметры:

<ПараметрыОтбора> (обязательный)

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

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

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

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

Студент=Справочники.Студенты.НайтиПоНаименованию("Иванов"); 
ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Студент", Студент);
    НайденныеСтроки = ТЗ.НайтиСтроки(ПараметрыОтбора);

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

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

Для Каждого СтрокаТЗ2 из ТЗОткуда Цикл;
					ЗаполнитьЗначенияСвойств(ТЗКуда.Добавить(), СтрокаТЗ2);	

КонецЦикла;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *