Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 00:30

Проблема с запросом

Автор Пустовалов Артем, 22 мар 2016, 10:51

0 Пользователей и 1 гость просматривают эту тему.

Пустовалов Артем

Добрый всем день! У меня возник такой вопрос. Делаю запрос где ставлю есть условие по складу, которое выбирается из поля ввода, ссылка на справочник. Как сделать такой отбор : если поле пустое тогда выводит все склады. И как сделать тоже самое если тип поля ввода не ссылка а строка??

vitasw

Со складом - попробуйте составить условие проверки вхождения в список( по-моему, если список пустой то отбор не выполняется). По строке - только аналитически корректировать текст запроса.
А вообще, если это отчет, то пишите на СКД, а отборы выведите пользователю.

Пустовалов Артем

Цитата: vitasw от 22 мар 2016, 11:34
Со складом - попробуйте составить условие проверки вхождения в список( по-моему, если список пустой то отбор не выполняется). По строке - только аналитически корректировать текст запроса.
А вообще, если это отчет, то пишите на СКД, а отборы выведите пользователю.

Может я не правильно выразился, условие в запросе

Где регСведений.Склад = &Склад

как слелать чтобы если не вводили Склад тогда по всем складам вывел


vitasw

Где регСведений.Склад в (&спСклад)
...
спСклад=Новый СписокЗначений;
спСклад.Добавить(Склад)
Запрос.УстановитьПараметр("спСклад",спСклад);

Пустовалов Артем

Цитата: vitasw от 22 мар 2016, 12:02
Где регСведений.Склад в (&спСклад)
...
спСклад=Новый СписокЗначений;
спСклад.Добавить(Склад)
Запрос.УстановитьПараметр("спСклад",спСклад);


Спасибо что окликнулся помогла такая конструкция запроса

ВЫБОР
    КОГДА "" = &СкладТОГДА ИСТИНА
    ИНАЧЕ ТоварыНаСкладахОстаткиИОбороты.Склад.Наименование = &Склад
КОНЕЦ


А ссылкой

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


LexaK

:D попробуйте такой вариант


Выбрать
    ...
где
    регСведений.Склад = &Склад
или &ВсеСклады = Истина

...
Запрос.УстановитьПараметр("Склад", <ВашаПеременнаяСклад>);
Запрос.УстановитьПараметр("ВсеСклады", Не ЗначениеЗаполнено(<ВашаПеременнаяСклад>));



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

описание способа
в запросе пишем следующее условие


Выбрать
    ...
где
    0 = 0


Если ЗначениеЗаполнено(<ВашаПеременнаяСклад>) Тогда
    Запрос.УстановитьПараметр("Склад", <ВашаПеременнаяСклад>);
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "0 = 0", "регСведений.Склад = &Склад" );
КонецЕсли;

лкРезультат = Запрос.Выполнить().Выгрузить();



если склад не выбран, запрос отработает на ура по всем складам,
если же склад выбран, то срабатывает условие ниже, модифицируется код и отбор будет по одному складу

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

если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск