Обращение к таблице значений в программе 1С: ...
-

Обращение к таблице значений в программе 1С: Предприятие 8.3 — детальный алгоритм

0
3090
27.10.2025 Дмитрий Коваль

Содержание:

В платформе 1С: Предприятие 8.3 нередко встречается задача использовать ТаблицуЗначений как источник данных для запросов. Подобный подход позволяет сократить количество явных циклов в коде и повысить быстродействие за счёт оптимизации на стороне сервера СУБД. В этой инструкции поэтапно разберёмся, как сформировать, передать и использовать таблицу значений в запросах 1С.


1.    Руководство по созданию и заполнению таблицы значений в 1С для передачи данных в запросы


1.    Формирование ТаблицыЗначений и определение колонок


2.    Создаём экземпляр таблицы
МояТЗ = Новый ТаблицаЗначений;


3.    Описываем структуру столбцов
Обязательно указывать типы данных, чтобы избежать неявных преобразований при выполнении запросов:
МояТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
МояТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));


4.    Заполняем строки значениями
НоваяСтрока = МояТЗ.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0001");
НоваяСтрока.Количество = 10;
При необходимости можно добавить несколько строк в цикле или выборкой из другого источника.


5.    Передача таблицы значений в запрос через временную таблицу


2.    Интеграция таблицы значений в запросы 1С через временную таблицу


Чтобы обращаться к данным ТЗ из текста запроса, её передают во временную таблицу внутри контекста запроса:


1.    Создаём объект запроса и менеджер временных таблиц
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;


2.    Пишем SQL-текст для помещения данных
Запрос.Текст =
"ВЫБРАТЬ
*
ПОМЕСТИТЬ ВТ_МояТЗ
ИЗ
&ТЗ КАК ТЗ";


3.    Привязываем параметр и выполняем
Запрос.УстановитьПараметр("ТЗ", МояТЗ);
РезультатПломещения = Запрос.Выполнить();
После этого во внутреннем хранилище запроса появится временная таблица ВТ_МояТЗ.


4.    Объединение временной таблицы с регистрами или справочниками

Теперь можно строить основной запрос, используя ранее созданную ВТ_МояТЗ:

Запрос.Текст =
"ВЫБРАТЬ
ВТ_МояТЗ.Номенклатура КАК Товар,
Остатки.КоличествоОстаток КАК Остаток
ИЗ
ВТ_МояТЗ КАК ВТ_МояТЗ
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Остатки
ПО
ВТ_МояТЗ.Номенклатура = Остатки.Номенклатура";
Результат = Запрос.Выполнить().Выбрать();

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


5.    Прямое использование ТаблицыЗначений в конструкторе запросов 


3.    Использование ПостроителяЗапроса для динамического формирования запросов в системе 1С

Вместо текстового SQL можно воспользоваться объектом-помощником ПостроительЗапроса:


1.    Инициализация построителя
ПострЗап = Новый ПостроительЗапроса;


2.    Указываем источник данных как таблицу значений
ПострЗап.ИсточникДанных = Новый ОписаниеИсточникаДанных(МояТЗ);


3.    Задаём условие отбора
Отбор = ПострЗап.Отбор.Добавить("Номенклатура");
Отбор.Значение = Справочники.Номенклатура.НайтиПоКоду("0001");
Отбор.ВидСравнения = ВидСравнения.Равно;
Отбор.Использование = Истина;


4.    Выполняем и выгружаем результат
ПострЗап.Выполнить();
Результат = ПострЗап.Результат.Выгрузить();

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


Полезные советы и рекомендации

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


С помощью описанных приёмов вы сможете гибко и быстро обрабатывать наборы данных, используя встроенные возможности платформы 1С: Предприятие 8.3.


Специалист компании ООО "Кодерлайн"

Дмитрий Коваль

Обсудить статью в Telegram Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.