Передать массив в запрос.
УПП 1.3 (толстый клиент)
Есть задачка вывести отчет по выделенным строкам обработки. Строк может быть несколько, придумал передать их в массив. Но никогда не работал с передачей параметра массив в запрос, помогите пжл, что я делаю не так (((
Массив содержит много строк, нужная мне строка называется "Заказ", вот как ее передать в запрос, голову уже сломал. Помогите пжл, люди добрые.
вместо:
ЗаказПокупателяТовары.Ссылка = &Заказ
ЗаказПокупателяТовары.Ссылка в (&Заказ)
только в массиве не строки должны быть, а ссылки
МассивЗаказов = Новый Массив;
Для Каждого Строка Из ЭлементыФормы.ТаблицаЗаказов.ВыделенныеСтроки Цикл
МассивЗаказов.Добавить(Строка.Заказ);
КонецЦикла;
Запрос.УстановитьПараметр("Заказ", МассивЗаказов);
В запросах строчку "= &Заказ" заменить на "В (&Заказ)".
SySБудни
Общее·количество·просмотров·страницы
среда, 15 августа 2012 г.
Передача массива в качестве параметра запроса 1с
В запрос 1с можно передать в качестве параметра массив, простой пример реализации:
//КОД
Запрос = Новый Запрос;
Запрос.Текст Apple-tab-span» style=»white-space: pre;»> | СУММА(ОсновныеНачисленияРаботниковОрганизаций.Результат) КАК Результат,
| ГОД(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации) КАК Год
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
|ГДЕ
| ОсновныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник
| И (НЕ ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В (&МассивВидовРасчета))
| И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета.КодДоходаФСС_НС = &КодДохода
|
|СГРУППИРОВАТЬ ПО
| ГОД(ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации)
|
|УПОРЯДОЧИТЬ ПО
| Год УБЫВ,
| Результат»;
МассивВидовРасчета = Новый Массив();
//Добавляем ВР исключающие отпуск
МассивВидовРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду(«000ОК»));
МассивВидовРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду(«00041»));
МассивВидовРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду(«00042»));
МассивВидовРасчета.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду(«00037»));
Запрос.УстановитьПараметр(«Сотрудник»,Сотрудник);
Запрос.УстановитьПараметр(«МассивВидовРасчета», МассивВидовРасчета);
Запрос.УстановитьПараметр(«КодДохода», Перечисления.ДоходыФСС_НС.Облагается);
Результат = Запрос.Выполнить().Выгрузить();
//КОД
В примере отчета для ЗУП я выбираю только те начисления которые не находятся в массиве, принадлежат этому сотруднику и облагаются взносами в ФСС. При передачи массива в качестве параметра главное правильно подобрать условие.
Язык запросов 1С:Предприятие 8.3
Язык запросов — это развитый и эффективный инструмент отбора, объединения и преобразования данных из любых объектов данных хранимых в ИБ. Синтаксис языка запросов 1С основан на классическом T-SQL, в который внесено ряд расширений и наложено ряд ограничений характерных для прикладных задач 1С. Ввиду специальной объектной парадигмы 1С все изменения данных в ИБ выполняются только программными средствами и только через объектное API платформы. По этой причине с помощью языка запросов можно выполнять только выборку данных.
ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ ПЕРВЫЕ .
ПОМЕСТИТЬ .
ИЗ РегистрСведений. СрезПоследних(,) КАК .
ЛЕВОЕ ОБЪЕДИНЕНИЕ . КАК .
ПО .
ГДЕ .
УПОРЯДОЧИТЬ ПО .
ИТОГИ . ПО .
СГРУППИРОВАТЬ ПО .
ИМЕЮЩИЕ .
ОБЪЕДИНИТЬ .
- 1С:ИТС. Методические рекомендации по конфигурированию. Язык запросов. /its.1c.ru
- Запросы 1С 8. Полный курс /zapros-1c-8.ru
- Е.Ю. Хрусталева «Язык запросов «1С:Предприятия 8»
- содержание полностью на ИТС /its.1c.ru
- в PDF с дополнительными материалами на CD на /dfiles.ru
Запрос выборки
Язык запросов 1С по ряду концептуальных причин предназначен только для выборки данных, поэтому любой запрос состоит из одного или нескольких выражений выбора. Подробное описание синтаксиса запросов с примерами и рекомендациями приведено в ИТС /its.1c.ru
ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <число>] <источник>.<реквизит> КАК <псевдоним> [, . ]
Раздел содержит определения реквизитов источников и псевдонимов, под которыми они должны войти в результирующий набор. Описание раздела ВЫБРАТЬ сделано в 1С:ИТС /its.1c.ru
- РАЗРЕШЕННЫЕ — в ИБ с ограничением доступа на уровне записей (RLS) включает в выборку кортежи, которые разрешены текущему пользователю
- РАЗЛИЧНЫЕ — включает в выборку только неповторяющиеся кортежи, при условии что в них нет полей неограниченной длины и полей ТипЗначения
- ПЕРВЫЕ <число> — включает в выборку только указанное число кортежей
- конструкция ПЕРВЫЕ 0 используется в запросах структуры выборки, например для создания пустой временной таблицы
- если при создании временной таблицы заданное число первых превысит общее число добавляемых записей, то возникает критическая ошибка платформы
- разыменование <псевдоним источника>.<реквизит>.<реквизит> — определяет неявный подзапрос с левым объединением со всеми таблицами из набора типов первого реквизита, поэтому разыменование предпочтительно избегать
- ВЫРАЗИТЬ(<псевдоним источника>.<реквизит> КАК <прикладной тип>).<реквизит> — ограничивает неявный подзапрос единственной таблицей определенного прикладного типа /its.1c.ru
- предпочтительно использовать Представление в запросах для отчетов вместо ссылки для экономии времени выполнения, поскольку оно будет выполнено уже в запросе и отчету не понадобится его вычислять из Ссылки для каждой результирующей строки /its.1c.ru
- для значения ПустаяСсылка Представление возвращает NULL
- используя ВЫРАЗИТЬ нельзя преобразовать Число как Строка, Строка как Число и т.п.
- обычно содержит целое Число от 1, однако документация » не гарантирует, что начальное значение счетчика будет равно 1 для любой временной таблицы «
- применимо только при создании временной таблицы выражением ПОМЕСТИТЬ
- в сочетании с УПОРЯДОЧИТЬ ПО ИЕРАРИЯ требует обязательного выражения ПЕРВЫЕ и вызывает крах платформы
- невозможно использовать в арифметическом выражении запроса
- КОГДА <условие>
- <реквизит> ЕСТЬ NULL
- ДЛЯ ИЗМЕНЕНИЯ <,> — блокирует только перечисленные таблицы
- УникальныйИдентификатор в строковом виде xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx получить невозможно
- Уровень вложения для иерархических справочников возможно получить только громоздким выражением ВЫБОР или специальным запросом
ПОМЕСТИТЬ <имя временной таблицы>
В пакетном запросе создает временную таблицу с заданным именем, которая будет существовать до окончания исполнения всего пакета запроса или до исполнения в пакете запроса, уничтожающего данную временную таблицу с помощью конструкции УНИЧТОЖИТЬ. Описано в ИТС /its.1c.ru
ИЗ <источник> КАК <псевдоним> [. ]
Раздел определяет одну или несколько таблиц источников данных и определяет способ их соединения в результирующих кортеж /its.1c.ru
- Раздел ИЗ в простом запросе можно опустить ВЫБРАТЬ Справочник.Пользователи.*;
- Справочник.<справочник> — базовый способ определения справочника в качестве источника
- Справочник.<справочник>.<табличная часть> — базовый способ определения таблицы справочника в качестве источника
- Документ.<документ>.<табличная часть>
- РегистрСведений.<регистр>.СрезПоследних() — использование виртуальной таблицы
- .СрезПоследних(&<параметр даты>, <реквизит> = &<параметр отбора>) — параметризация по соответствию параметрам
- .СрезПоследних(, <реквизит> В (<вложенный запрос>) — параметризация по вхождению во вложенный запрос
- .СрезПоследних(, <реквизит> В (&<параметр отбора>) — параметризация по вхождению в множество
- .СрезПоследних(, <реквизит> > &<параметр отбора> И <реквизит> < &<параметр отбора>) — параметризация с несколькими условиями сравнения
- РегистрНакопления.<регистр>.Обороты(. ) — параметризованное использование виртуальной таблицы предпочтительней использования условия в выражении ГДЕ
- РегистрНакопления.<регистр>.Обороты(&<параметр начала>, &<параметр конца>,,) —
- РегистрНакопления.<регистр>.Обороты(. <реквизит> = &<параметр критерия отбора>)
- РегистрНакопления.<регистр>.Остатки(&<параметр критерия отбора>,)
Все перечисленные источники могут быть соединены по указанным правилам соединения
- ВНУТРЕННЕЕ СОЕДИНЕНИЕ — для внутреннего объединения
- ЛЕВОЕ СОЕДИНЕНИЕ — для объединения всех записей левого источника
- ПРАВОЕ СОЕДИНЕНИЕ — для объединения всех записей правого источника
- ПОЛНОЕ СОЕДИНЕНИЕ — для полного внешнего соединения всех записей левого и правого источников
Источники, для которых не были определены правила соединения, соединяют все свои кортежи с каждым кортежем уже выполненного соединения.
ГДЕ <условие>
Условие содержит выражение отбора значений реквизитов, которое определяет включение и использование кортежа в результирующей выборке. Выражение условия может использовать любые реквизиты из любых источников определенных разделе ИЗ запроса.
- <псевдоним>.<реквизит> <=,<,>,<>, В, НЕ В><критерий> [ <И, ИЛИ>. ] — базовая форма выражения условия
- <псевдоним>.<реквизит> В (<значение1>,<значение2>. ) — для условия вхождения в множество допустимо перечисление произвольного набора значений
- <псевдоним>.<реквизит> НЕ В (. ) — для условия отсутствия в множестве
- НЕ (<реквизит> ЕСТЬ NULL) — выражение равно Истина, если значение не NULL
- NULL — это не пустое значение
- <справочник>.Родитель = ИЕРАРХИИ(&Группа) — условие отбора всех входящих в группу и подгруппы
- (<выражение 1>, . <выражение N>) В (ВЫБРАТЬ <реквизит 1>, . <реквизит N> ИЗ <Источники> ГДЕ <Условие>. ) — для проверки вхождения группы значений в набор групп /its.1c.ru
ДЛЯ ИЗМЕНЕНИЯ [<источник>[.<реквизит>] [. ]]
Предложение ДЛЯ ИЗМЕНЕНИЯ позволяет заблаговременно заблокировать некоторые данные (которые могут читаться транзакцией другого соединения) уже при считывании, чтобы исключить взаимные блокировки при записи. //its.1c.ru
- по умолчанию блокируются все источники
- РегистрНакопления.<имя регистра>.<реквизит>
УПОРЯДОЧИТЬ ПО <псевдоним 1> [УБЫВ][, <псевдоним 2>[. ]]
Сортирует отобранные кортежи по перечисленным псевдонимам.
- значения Булево упорядочивается как: Ложь < Истина
- Наименование ИЕРАРХИЯ — для представления в иерархии
- <справочник>.ЭтоГруппа ИЕРАРХИЯ, Наименование — для представления в иерархии с приоритетом групп
- УПОРЯДОЧИТЬ ПО Ссылка АВТОУПОРЯДОЧИВАНИЕ — устанавливает порядок определенный в свойствах справочника или документа
- применимо также во вложенных запросах, но с обязательным использованием ВЫБРАТЬ ПЕРВЫЕ <число> /its.1c.ru
- реквизиты неограниченной длины и реквизиты типов для упорядочения не допускаются
- ///
ИТОГИ <функция 1>(<псевдоним 1>) [,<>] ПО [[ТОЛЬКО] ИЕРАРХИЯ] <псевдоним>
Вычисляет итоги для иерархического справочника /its.1c.ru и /its.1c.ru. Позволяет создать дерево значений //programmist1s.ru
- агрегирующей функцией итогов может быть СУММА(<псевдоним>),
- КОЛИЧЕСТВО(<псевдоним>)
- СРЕДНЕЕ(<псевдоним>),
- МИНИМУМ(<псевдоним>),
- МАКСИМУМ(<псевдоним>)
СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ] <псевдоним 1> [, <псевдоним 2>[, . ]]>
Выполняет выборку с группировкой по совпадению значений всех перечисленных в разделе псевдонимов. Все псевдонимы из раздела ВЫБРАТЬ должны или войти в раздел СГРУППИРОВАТЬ ПО или использовать одну из агрегирующих функций:
- СУММА(<псевдоним>)
- СРЕДНЕЕ(<псевдоним>)
- МИНИМУМ(<псевдоним>)
- МАКСИМУМ(<псевдоним>)
- КОЛИЧЕСТВО(<псевдоним>)
- реквизиты неограниченной длины и реквизиты типов для группировки не допускаются
ИМЕЮЩИЕ <условие>
Условие этого раздела применяется к кортежам уже после выполнения группировки и может применять к значениям вычисленных агрегирующих функций.
ОБЪЕДИНИТЬ [ВСЕ]
Присоединяет к уже полученной выборке выборку следующего выражения.
- <выражение> ОБЪЕДИНИТЬ <выражение> ОБЪЕДИНИТЬ <выражение> . — число выражений объединения синтаксически не ограничивается
- объединяемые выборки должны состоять из идентичных наборов колонок по типу и порядку
- совпадение имен колонок не требуется
- имена колонок объединенной выборки определяются первым выражением
Выборка набора значений
Выборка одиночной строки с произвольным набором значений данных не требует источника:
1с массив в запросе как параметр
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.- Как передать в запрос параметры простых типов
- Как передать в запрос параметры ссылочных типов
- Как передать в запрос параметр списочного типа
- Как передать в запрос таблицу значений в качестве параметра
- Как использовать таблицу переданную в запрос в качестве источника
- Скачать и выполнить эти примеры на компьютере
Параметры в запросах в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
- <псевдоним>.<реквизит> В (<значение1>,<значение2>. ) — для условия вхождения в множество допустимо перечисление произвольного набора значений