Работаем удаленно и с выездом
Наши филиалыМоскваЯрославль
АВТОМАТИЗАЦИЯ, ВНЕДРЕНИЕ, СОПРОВОЖДЕНИЕ

Как добавить таблицу со значениями в программу 1С? Инструкция

Многие программисты, которые только недавно начали работать в программной среде 1С, не умеют добавлять таблицу значений в запрос. Подобное отсутствие знаний может обернуться различными ошибками, чаще всего возникает такой неоптимальный алгоритм как «запрос в цикле». Грубо говоря, специалист, вместо того чтобы использовать табличную форму, создает цикл, где есть несколько запросов на все строки данных по отдельности. В данной небольшой статье будет подробно рассмотрена эта тема.

Рис. ВнешняяТаблицаНоменклатуры. Справочник.Ссылка. Номенклатура

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

Изначально таблица может быть сформирована либо в самом программном алгоритме, либо получена откуда-либо (является частью загруженного документа). В случае с программным созданием таблицы, обязательно нужно указать тип колонки.

Действия:

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

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

ТЗ.Колонки.Добавить (“Номенклатура”, Новый ОписаниеТипов («СправочникССылка.Номенклатура”));

//заполнить таблицу

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

//НоваяСтрока.Номенклатура = …;

Как видно, вид данных указывается вторым параметром и формируется через объект типа «ОписаниеТипов» с указанием значения - типа «СправочникСсылка.Номенклатура».

Теперь нужно сформировать запрос, используя команду «УстановитьПараметр»:

//таблицу в запрос, поиск остатков для таблицы

Запрос = Новый Запрос;

Запрос.Текст =

“ВЫБРАТЬ”

|   ВнешняяТаблицаНоменклатуры.Номенклатура КАК Номенклатура

| ПОМЕСТИТЬ ВнешняяТаблицаНоменклатуры

| ИЗ

|    &ВнешняяТаблицаНоменклатуры КАК ВнешняяТаблицаНоменклатуры

|;

|////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

|   ТаблицаНоменклатуры.Номенклатура,

|   ТоварыНаСкладах.КоличествоОстаток

|ИЗ

|   ТаблицаНоменклатуры КАК ТаблицаНоменклатуры

|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНкопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах

|      ПО ТаблицаНоменклатуры.Номенклатура = ТоварыНаСкладах.Номенклатура”;

Запрос.УстановитьПараметр (“ВнешняяТаблицаНоменклатуры”, ТЗ);

Результат = Запрос.Выполнить ();

//обработка результата запроса

Важно! Результат сформированной таблицы требуется перенести во временную таблицу, иначе возникнет ошибка «Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу».

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