Как добавить таблицу со значениями в программу 1С? Инструкция
Многие программисты, которые только недавно начали работать в программной среде 1С, не умеют добавлять таблицу значений в запрос. Подобное отсутствие знаний может обернуться различными ошибками, чаще всего возникает такой неоптимальный алгоритм как «запрос в цикле». Грубо говоря, специалист, вместо того чтобы использовать табличную форму, создает цикл, где есть несколько запросов на все строки данных по отдельности. В данной небольшой статье будет подробно рассмотрена эта тема.
Лучший способ объяснить — это показать действия и их логику на простом и понятном для программиста примере. Итак, существует табличная форма документа или обработки со значениями, где есть список позиций номенклатуры. Цель программиста — узнать (и показать пользователю) остатки каждой номенклатурной позиции на складах.
Изначально таблица может быть сформирована либо в самом программном алгоритме, либо получена откуда-либо (является частью загруженного документа). В случае с программным созданием таблицы, обязательно нужно указать тип колонки.
Действия:
//создать таблицу значений
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить (“Номенклатура”, Новый ОписаниеТипов («СправочникССылка.Номенклатура”));
//заполнить таблицу
//НоваяСтрока = ТЗ.Добавить ();
//НоваяСтрока.Номенклатура = …;
Как видно, вид данных указывается вторым параметром и формируется через объект типа «ОписаниеТипов» с указанием значения - типа «СправочникСсылка.Номенклатура».
Теперь нужно сформировать запрос, используя команду «УстановитьПараметр»:
//таблицу в запрос, поиск остатков для таблицы
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ”
| ВнешняяТаблицаНоменклатуры.Номенклатура КАК Номенклатура
| ПОМЕСТИТЬ ВнешняяТаблицаНоменклатуры
| ИЗ
| &ВнешняяТаблицаНоменклатуры КАК ВнешняяТаблицаНоменклатуры
|;
|////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаНоменклатуры.Номенклатура,
| ТоварыНаСкладах.КоличествоОстаток
|ИЗ
| ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНкопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
| ПО ТаблицаНоменклатуры.Номенклатура = ТоварыНаСкладах.Номенклатура”;
Запрос.УстановитьПараметр (“ВнешняяТаблицаНоменклатуры”, ТЗ);
Результат = Запрос.Выполнить ();
//обработка результата запроса
Важно! Результат сформированной таблицы требуется перенести во временную таблицу, иначе возникнет ошибка «Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу».
А затем подключить ее к регистру остатков с позициями номенклатуры.
В таком случае запрос отработает корректно и только по тем позициям, которые были переданы через таблицу значений.