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

1с массив в запросе как параметр

  • автор:

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

УПП 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С программистов и разработчик обновлятора).

                        Владимир Милькин

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

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

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