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

от admin

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

Есть запрос:
"ВЫБРАТЬ
| ЧекККМ.Ссылка КАК Ссылка,
| ЧекККМ.Дата КАК Дата,
| ЧекККМ.НомерЧекаККМ КАК НомерЧекаККМ,
| ЧекККМ.СуммаДокумента КАК СуммаДокумента,
| ЧекККМ.ОперацияСДенежнымиСредствами КАК ОперацияСДенежнымиСредствами,
| ЧекККМ.СтатусЧекаККМ КАК СтатусЧекаККМ
|ИЗ
| Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
| ЧекККМ.Дата МЕЖДУ &НачЧека И &КонЧека"

Таблица значений с колонками НачЧека и КонЧека, которые заполняются из документов смен (начало смены и конец смены)

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

ВЫБРАТЬ
ТвояТаблица.НачЧека КАК НачЧека,
ТвояТаблица.КонЧекаКАК КонЧека
ПОМЕСТИТЬ втТвояТаблица
ИЗ
&ТвояТаблица КАК ТвояТаблица;

и используй дальше вт как тебе угодно.

(4) Зачем использовать ТЗ, если документы смен и так есть в базе данных? Получи их и минимальную\максимальную дату запросом.

Если уже так хочется использовать ТЗ, зачем опять же, пихать её в запрос? Тебе надо же получить чеки в интервале дат, так найди интервал в коде, а интервал так же параметрами задавай как в (0).

Но навскидку всё это выглядит какими-то неверными решениями от непонимания. Если тебе нужно выбрать чеки по сменам, то там наверняка есть какая-то связь, в запрос следует передавать смены, а уже по ним определять чеки.

(6) Бухгалтер выбирает из списка нужные смены. На основе которых и идет отбор всех кассовых смен.

минимальную\максимальную дату запросом я как раз и получаю запросом и его надо вставить в запрос из (0)

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

В условии в запросе — НачалоПериода(Чек.Дата, ДЕНЬ) в (&МассивДат)

Т.е. если в течении дня было две смены, одну выгружаем, а другую нет, то все равно выгружаем?

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

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

  • Как передать в запрос параметры простых типов
  • Как передать в запрос параметры ссылочных типов
  • Как передать в запрос параметр списочного типа
  • Как передать в запрос таблицу значений в качестве параметра
  • Как использовать таблицу переданную в запрос в качестве источника
  • Скачать и выполнить эти примеры на компьютере

Параметры в запросах в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

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

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

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

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

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

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

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

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

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

Читать:
Acronis universal restore как пользоваться

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Таблица значений как источник данных в запросе 1С

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

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

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

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

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

Похожие статьи