1с передать в запрос структуру как параметр
Перейти к содержимому

1с передать в запрос структуру как параметр

  • автор:

Как передать структуру во временную таблицу запроса?

ТекстВТ =
«ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Цена
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.ТипЦен = &ТипЦен
| И ТаблицаТоваров.Цена <> 0″;

Запрос.УстановитьПараметр(«ТаблицаТоваров», Новый Структура(«Номенклатура,Цена,ТипЦен», Источник.Ссылка, Цена, ТипЦенРетейл));

САБЖ, ругается на:
<(6, 2)>: Неверные параметры «ТаблицаТоваров»
<<?>>&ТаблицаТоваров КАК ТаблицаТоваров

(1)Я так сделал, все работает, только букав много, хотелось бы сократить, это возможно?

1С 8.3 Параметры в запросе — Программист 1С Минск. Автоматизация бизнеса.

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

Запрос . УстановитьПараметр ( «НачДата» , ‘20200101000000’ );
Запрос . УстановитьПараметр ( «КонДата» , ‘20201231235959’ );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

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

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

Запрос . УстановитьПараметр ( «ЕдинИзмер» , Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.см.» ));

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

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

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

СписокЕИ = Новый Массив ;
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.см.» ));
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.дм.» ));
СписокЕИ . Добавить ( Справочники . ЕдиницыИзмерения . НайтиПоНаименованию ( «Куб.м.» ));

Запрос . УстановитьПараметр ( «СписокЕдиницИзмерения» , СписокЕИ );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

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

// Создание отбора по материалам в соответствии с параметром в виде
// комбинированной таблицы значений: «Срок Использования» и «Производитель»
ТЗ_СрокИсп_Произв = новый ТаблицаЗначений ;
ТЗ_СрокИсп_Произв . Колонки . Добавить ( «СрокИспользования» , Новый ОписаниеТипов ( «СправочникСсылка.КлассификаторСроковПИ» ));
ТЗ_СрокИсп_Произв . Колонки . Добавить ( «Производитель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ));

// «12 месяцев» + «Гомелькабель»
СтрокаТЗ = ТЗ_СрокИсп_Произв . Добавить ();
СтрокаТЗ . СрокИспользования = Справочники . КлассификаторСроковПИ . НайтиПоНаименованию ( «12 месяцев» );
СтрокаТЗ . Производитель = Справочники . Контрагенты . НайтиПоНаименованию ( «Гомелькабель» );

// «18 месяцев» + «Гомельстекло»
СтрокаТЗ = ТЗ_СрокИсп_Произв . Добавить ();
СтрокаТЗ . СрокИспользования = Справочники . КлассификаторСроковПИ . НайтиПоНаименованию ( «18 месяцев» );
СтрокаТЗ . Производитель = Справочники . Контрагенты . НайтиПоНаименованию ( «Гомельстекло» );

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

Запрос . УстановитьПараметр ( «СписокСочетаний» , ТЗ_СрокИсп_Произв );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

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

// Программное создание Таблицы Значений и передача её в запрос
ДрагМеталл = новый ТаблицаЗначений ;
ДрагМеталл . Колонки . Добавить ( «Название» , Новый ОписаниеТипов ( «Строка» ));
ДрагМеталл . Колонки . Добавить ( «РынЦена» , Новый ОписаниеТипов ( «Число» ));

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Золото» ;
НоваяСтрока . РынЦена = 127.29 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Серебро» ;
НоваяСтрока . РынЦена = 1.30 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Платина» ;
НоваяСтрока . РынЦена = 62. 00 ;

НоваяСтрока = ДрагМеталл . Добавить ();
НоваяСтрока . Название = «Родий» ;
НоваяСтрока . РынЦена = 568.27 ;

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

Запрос . УстановитьПараметр ( «ТаблицаДрагМеталлов» , ДрагМеталл );

РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;

Запросы 1с 8 — Программная работа

Для программиста Запросы 1с 8 один из главных инструментов разработки. Рассмотрим основы программной работы с ними.

Запросы 1с 8 — программное создание

  • Создание запроса 1с 8. Для начала работы с запросом создадим переменную типа Запрос:
  • Написание текста запроса. У созданной выше переменной есть строковое свойство Текст, именно оно содержит в себе текст запроса. Текст запроса можно писать вручную или используя Конструктор запроса. Для того что бы начать писать запрос при помощи конструктора создадим в модуле следующую строку:

Установим курсор между кавычками и вызовем контекстное меню нажатием правой кнопки мыши. В меню выберем пункт Конструктор запроса. Созданный при помощи конструктора текст запроса будет выглядеть следующим образом (пример):

Выполнение запроса 1с 8 и работа с полученными данными

  • Выполнение запроса. После того, как написан текст запроса и в него переданы все необходимые параметры, запрос необходимо выполнить при помощи метода Выполнить().

Полученный таким образом результат запроса 1с 8 можно:

    Выгрузить в таблицу значений при помощи метода Выгрузить().

Таблицу значений можно обойти при помощи цикла Для Каждого.

Для перемещения между записями выборки используется метод Следующий(). Для того чтобы обойти всю выборку воспользуемся циклом Пока.

И в выборке и в выгрузке результатов запроса можно узнать количество содержащихся в них строк при помощи метода Количество().

Если вы еще не разобрались с главным оператором языка запросов — ВЫБРАТЬ, то прочтите статью: Язык запросов 1с — оператор Выбрать

Научитесь пользоваться конструктором запросов: Конструктор запросов 1С — обучение на примерах

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

Ваш адрес email не будет опубликован.