Запрос к таблице значений в 1С 8.2 и 8.3
Многие начинающие программисты не знают, как поместить таблицу значений в запрос 1С 8. Очень часто это порождает распространенную ошибку — запрос в цикле. То есть разработчик не умеет включать таблицу значений в запрос и поэтому начинает обходить её в цикле и делать на каждую итерацию свой запрос. Рассмотрим на простом примере, как это сделать.
Пример
В качестве примера размещения таблицы значения в запросе 1С 8.3 возьмем простую ситуацию — есть таблица значений, в которой содержится список номенклатуры. Необходимо получить данные по остаткам на складах по каждой номенклатурной позиции.
Может быть две ситуации, как создана таблица значений, — программно и уже получена откуда-то (например, ТЧ документа). Если таблица создана программно, необходимо установить тип колонки, сделать это несложно
Т.е. при добавление колонки необходимо вторым параметром указать типы данных с помощью конструктора объекта «ОписаниеТипов».
Перейдем к построению запроса. Таблицу значений можно передать в запрос простым &Параметром.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Обязательный нюанс — созданную таблицу необходимо поместить результат во временную таблицу, в противном случае система выдаст сообщение: «Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу».
Таким образом, мы помещаем первый запрос во временную таблицу, а потом соединяем её с регистром остатков номенклатуры.
Вот и всё, проблема решена.
Читайте также и другие статьи про язык запросов 1С.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Владимир:
Помещаем во временную таблицу ВнешняяТаблицаНоменклатуры, а запрос делаем из таблицы ТаблицаНоменклатуры ! Поправьте, пожалуйста.
Alisa:
Все правильно написано
Аноним:
Что правильного в этом? Источник совсем другой и компилятор выдаст ошибку.
Андрей:
Как на первом рисунке, задаю тип значения для поля Временной таблицы, закрываю конструктор, открываю, тип пустой. Соответственно не получается обратиться к параметрам поля. Не подскажете почему?
Андрей:
В конструкторе тип значения не имеет смысла, для описания таблицы ему нужны только имена колонок. Типы тут никогда не сохранялись, только вот зачем здесь типы вообще нужны — загадка.
Аноним:
Типы нужны для дальнейшей работы в конструкторе. Например что бы вытащить мышкой значение через точку.
Аноним:
И что бы автоматически построилось соединение двух таблиц.
Александр:
В Запросе ошибку так и не исправили.
ПОМЕСТИТЬ ТаблицаНоменклатуры
Vidyabhushan:
ОШИБКА, Спасибо, помогли включить мозги в понедельник! )
алекс:
Не будет работать
Алекс:
А как поместить запрос таблицу значений с составным типом?
конструкция типа:
СписокТипов = Новый Массив;
СписокТипов.Добавить(«ДокументСсылка.ЗаказКлиента»);
СписокТипов.Добавить(«ДокументСсылка.ЗаказНаПеремещение»);
ТЗ.Колонки.Добавить(«Распоряжение», Новый ОписаниеТипов(СписокТипов,));
не работает и выдает ошибку
Аноним:
Как вариант, двумя разными таблицами, через два разных параметра, в два разных запроса, которые уже делаешь ОБЪЕДИНИТЬ ВСЕ. Временная таблица получится одна, заполненная из двух таблиц значения с разными документами.
Аноним:
уу
Аноним:
хреново, что нельзя копировать текст кода
Аноним:
А как сделал такое через Схему запроса, УстановитьТекстЗапроса не предлагать. Когда делаю Оператор.Источники.Добавить(«&Таблица»,»Таблица»), получаю «Таблица не найдена.