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

Запрос к таблице значений в 1С 8.2 и 8.3

Многие начинающие программисты не знают, как поместить таблицу значений в запрос 1С 8. Очень часто это порождает распространенную ошибку — запрос в цикле. То есть разработчик не умеет включать таблицу значений в запрос и поэтому начинает обходить её в цикле и делать на каждую итерацию свой запрос. Рассмотрим на простом примере, как это сделать.

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

Пример

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

Может быть две ситуации, как создана таблица значений, — программно и уже получена откуда-то (например, ТЧ документа). Если таблица создана программно, необходимо установить тип колонки, сделать это несложно

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

Т.е. при добавление колонки необходимо вторым параметром указать типы данных с помощью конструктора объекта «ОписаниеТипов».

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

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

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

Таким образом, мы помещаем первый запрос во временную таблицу, а потом соединяем её с регистром остатков номенклатуры.

Вот и всё, проблема решена.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

1С 8.3 Параметры в запросе

&НаСервере
Процедура ПередачаПараметровПростыхТиповВЗапросе ()

// Создание отбора по поступлению материала за 2020 год
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР» );

&НаСервере
Процедура ПередачаПараметровСсылочныхТиповВЗапросе ()

// Создание отбора по материалам с единицей измерения «Куб.см.»
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения = &ЕдинИзмер» );

&НаСервере
Процедура ПередачаПараметровСписочногоТипаВЗапросе ()

// Создание отбора по материалам, единицы измерения входят в переданный список
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| ЕдиницаИзмерения
|ИЗ
| Справочник.Материалы
|ГДЕ
| ЕдиницаИзмерения В (&СписокЕдиницИзмерения)» );

&НаСервере
Процедура ПередачаПараметраВВидеТаблицыЗначенийВЗапросе ()

Запрос = Новый Запрос ( «ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Производитель
|ИЗ
| Справочник.Материалы
|ГДЕ
| (СрокИспользования, Производитель) В (&СписокСочетаний)» );

&НаСервере
Процедура ИспользованиеТаблицыЗначенийПереданнойВЗапросКакПараметр ()

// Сперва выбираем данные во временную таблицу, а потом работаем как с обычной таблицей
Запрос = Новый Запрос ( «ВЫБРАТЬ
| Название,
| РынЦена
|ПОМЕСТИТЬ
| ВременнаяТаблица
|ИЗ
| &ТаблицаДрагМеталлов КАК ДрагМеталлы
|;
|ВЫБРАТЬ
| Название,
| РынЦена
|ИЗ
| ВременнаяТаблица
|УПОРЯДОЧИТЬ ПО
| РынЦена УБЫВ» );

Источник

Таблица значений в запросе

Подскажите как правильно использовать ТЗ в запросе?
Параметры ввожу тут:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецДня = Параметры.НаКакуюДату;
РеквТЗ.Параметры.УстановитьЗначениеПараметра(«НаДату», КонецДня);
РеквТЗ.Параметры.УстановитьЗначениеПараметра(«НаСкладе», Параметры.СодержитСклад);
РеквТЗ.Параметры.УстановитьЗначениеПараметра(«ТЗУчета», Параметры.ТЗУчета);
КонецПроцедуры

Выбрать
* Поместить ТЗУчета
ИЗ &ТЗУчета КАК ТЗУчета; //Тут ошибку выдает у &ТЗУчета

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

Вот так попробовал
Процедура ПриОткрытии(Отказ)

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = «ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ»;
Запрос.УстановитьПараметр(«ТЗ», Параметры.ТЗУчета);
Запрос.Выполнить();

КонецПроцедуры
Но выдает ошибку:
<ОбщаяФорма.ПодборМатериалов1.Форма(89)>: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить().Выбрать();
по причине:
<(7, 2)>: Таблица не найдена «ТЗ»
>ТЗ

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

Да. Это можно сделать с помощью временных таблиц:

// Сначала помещаем ТЗ во временную таблицу
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = «ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ»;
Запрос.УстановитьПараметр(«ТЗ», ТЗ);
Запрос.Выполнить();
// Теперь ТЗ можно использовать в запросе:
Запрос.Текст = »
|ВЫБРАТЬ
| ТЗ.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Остатки
| ПО
| ТЗ.Номенклатура=Остатки.Номенклатура»;

Но что то у меня не катит.

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = «ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ»;
Запрос.УстановитьПараметр(«ТЗ», ТЗ);
Запрос.Выполнить();
// Теперь ТЗ можно использовать в запросе:
Запрос.Текст = »
|ВЫБРАТЬ
| ТЗ.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Остатки
| ПО
| ТЗ.Номенклатура=Остатки.Номенклатура»;

ТипизированнаяТЗ = Новый ТаблицаЗначений;
Для й=1 По Тз.Количество() Цикл ТипизированнаяТЗ.Добавить(); //Создаем строки
КонецЦикла;

ДЗТипов = Новый ДеревоЗначений;
ДЗТипов.Колонки.Добавить(«ИмяКолонки»);
ДЗТипов.Колонки.Добавить(«ТипЗначений»);

Для Каждого Колонка из Тз.Колонки Цикл
СтрокаКолонки = ДЗТипов.Строки.Добавить();
СтрокаКолонки.ИмяКолонки = Колонка.Имя;

ТекСТрокаТипа = СтрокаКолонки.Строки.Добавить();
ТекСТрокаТипа.ИмяКолонки = Колонка.Имя; //Заполняется для красоты
ТекСТрокаТипа.ТипЗначений = ТипЗнч(тз[0][Колонка.Имя]);
Для Каждого СтокаТЗ из Тз Цикл
ТекТип = ТипЗнч(СтокаТЗ[Колонка.Имя]);
Если НЕ ТекТип = ТекСТрокаТипа.ТипЗначений Тогда
Если СтрокаКолонки.Строки.Найти(ТекТип, «ТипЗначений»)=Неопределено Тогда
ТекСТрокаТипа = СтрокаКолонки.Строки.Добавить();
ТекСТрокаТипа.ИмяКолонки = Колонка.Имя;//Заполняется для красоты
ТекСТрокаТипа.ТипЗначений = ТекТип;
КонецЕслИ;
КонецЕслИ;
КонецЦикла;

МассивТипов = СтрокаКолонки.Строки.ВыгрузитьКолонку(«ТипЗначений»);
ТипизированнаяТЗ.Колонки.Добавить(Колонка.Имя, Новый ОписаниеТипов(МассивТипов),Колонка.Заголовок);
ТипизированнаяТЗ.ЗагрузитьКолонку(Тз.ВыгрузитьКолонку(Колонка),Колонка.Имя);
КонецЦикла;

Источник

Запрос к таблице значений 1С 8.3

Чтобы в 1C 8 поместить таблицу значений в запрос и использовать ее в качестве источника данных нужно:

1. Передать ее в параметр запроса

Пусть у нас есть таблица значений с именем ТЗ и полями: Договор, Количество, Сумма.

2. В конструкторе запроса задать структуру таблицы

Для этого вызываем конструктор запросов 1С 8, создаем новый запрос и жмем кнопку Создать описание временной таблицы.

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

В имени таблицы указываем переданный параметр, в поля заносим имена полей таблицы. Создание структуры временной таблицы:

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

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

таблица значений как параметр запроса 1с. Смотреть фото таблица значений как параметр запроса 1с. Смотреть картинку таблица значений как параметр запроса 1с. Картинка про таблица значений как параметр запроса 1с. Фото таблица значений как параметр запроса 1с

3. Использование созданной временной таблицы в запросе

Получите понятные самоучители по 1С бесплатно:

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

Вот пример простенького запроса с группировкой и условием:

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

Источник

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

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