Версия для печати темы (https://pro1c.org.ua/index.php?s=a97425f09052e691413d1d669998db36&showtopic=25595)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Проверка на заполнение параметра в запросе

Автор: vet07 08.10.15, 10:01

1C 8.3 конфигурация самописная, управляемая.
Есть запрос в ГДЕ передается праметр (ТИП Массив):

 ВЫБОР
     КОГДА &Контрагенты ЕСТЬ NULL
         ТОГДА ИСТИНА
      ИНАЧЕ Закупки.Контрагент В (&Контрагенты)
КОНЕЦ


Запрос не работает. Как в запросе проверить массив на заполненность?


Или на НЕОПРЕДЕЛЕНО?

Цитата(vet07 @ 08.10.15, 10:52) *
1C 8.3 конфигурация самописная, управляемая.
Есть запрос в ГДЕ передается праметр (ТИП Массив):
 ВЫБОР
     КОГДА &Контрагенты ЕСТЬ NULL
         ТОГДА ИСТИНА
      ИНАЧЕ Закупки.Контрагент В (&Контрагенты)
КОНЕЦ


Запрос не работает. Как в запросе проверить массив на заполненность?


Или на НЕОПРЕДЕЛЕНО?


Пробовал
 ВЫБОР
     КОГДА &Контрагенты = НЕОПРЕДЕЛЕНО
         ТОГДА ИСТИНА
      ИНАЧЕ Закупки.Контрагент В (&Контрагенты)
КОНЕЦ

Вообще выдает ошибку.

Автор: TipsyKID 08.10.15, 11:03

Проверить до выполнения, на этапе установки параметра в запрос.

Запрос.УстановитьПараметр("Контрагенты", ?(ВашМассив.Количество() = 0, неопределено, ВашМассив))

Автор: Petre 08.10.15, 12:18

Или пользовать построитель запроса.

Автор: vet07 08.10.15, 12:33

Цитата(TipsyKID @ 08.10.15, 12:03) *
Проверить до выполнения, на этапе установки параметра в запрос.
Запрос.УстановитьПараметр("Контрагенты", ?(ВашМассив.Количество() = 0, неопределено, ВашМассив))


Я так понял, в запросе проверку сделать никак?

Автор: Petre 08.10.15, 12:50

Цитата(vet07 @ 08.10.15, 13:33) *
Я так понял, в запросе проверку сделать никак?

Делайте запрос количества различных к справочнику контрагенты с условием ссылка в вашем списке, помещайте во временную таблицу.

Автор: VXIIIZ 09.10.15, 11:43

Я, не понимаю общей идеи, зачем делать такую конструкцию в чем её преимущество.
Вы уже до выполнения запросам можете знать есть контрагенты в массиве или нет.
Зачем же городить огород?

Можно:
1. Делать через построитель запроса и заполнять этот отбор в построитель при наличии заполненного массива.
2. При формировании текста запроса добавлять это условие в зависимости от заполненности.
3. Добавить второй параметр в запрос
ВЫБОР КОГДА &ОтборПоКонтрагентам ТОГДА _.Контрагент В (&МассивКонтрагентов) ИНАЧЕ ИСТИНА КОНЕЦ

Запрос.УстановитьПараметр("ОтборПоКонтрагентам", МассивКонтрагентов.Количество() > 0)

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua