Сформировать отчет не на СКД без установленного параметра
Конфигурации 1cv8
1С:Комплексная автоматизация 2.х
1С:Управление торговлей 11
Платформа 1С v8.3
Управляемые формы
Как сформировать отчет не на СКД без установленного параметра (пустым)? Нужно, чтобы при указании водителя отчет формировался только по этому водителю, а иначе по всем водителям.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Распоряжения.Период КАК Период,
| Распоряжения.Партнер КАК Партнер,
| Распоряжения.СуммаДокумента КАК Сумма,
| Распоряжения.Распоряжение.Номер КАК Номер,
| Распоряжения.Распоряжение.Дата КАК ДатаЗаказа,
| Распоряжения.Транспорт КАК Транспорт,
| Распоряжения.Транспорт.Водитель КАК Водитель,
| Распоряжения.СтатусДоставки КАК Статус,
| Распоряжения.ДатаС КАК Ушла,
| Распоряжения.ДатаПо КАК Пришла,
| Распоряжения.СостояниеОплаты КАК Оплата
|ИЗ
| РегистрСведений.од_РаспоряженияНаДоставку КАК Распоряжения
|ГДЕ
| Распоряжения.СтатусДоставки В (ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.ВПути), ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.Доставлено))
| И (Распоряжения.Транспорт.Водитель = &Водитель
| ИЛИ &Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
| И (Распоряжения.Период >= &ДатаНачала
| И Распоряжения.Период <= &ДатаКонца
| ИЛИ &ДатаКонца = ДАТАВРЕМЯ(1,1,1))
| И (НАЧАЛОПЕРИОДА(Распоряжения.ДатаС, ДЕНЬ) = &ДатаОтправки
| ИЛИ &ДатаОтправки = ДАТАВРЕМЯ(1,1,1))";
Запрос.УстановитьПараметр("ДатаНачала", ПериодОтчета.ДатаНачала);
Запрос.УстановитьПараметр("ДатаКонца", ПериодОтчета.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаОтправки", ДатаОтправки);
Запрос.УстановитьПараметр("Водитель", Водитель);
ПоказатьПо теме из базы знаний
- Универсальный конструктор отчетов (Новейший отчет) для 1C 7.7
- Отладка сложных отчетов на СКД
- Перенос/копирование и установка отбора/фильтра/периода при интерактивном переключении или смене варианта отчета/СКД в БСП 3.1 (1C ERP, УТ, БП, ...)
- Отладка СКД
- Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки
Найденные решения
(1) как-то так
Если НЕ ЗначениеЗаполнено(Водитель) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ", ""); // получаем текст запроса без условия по Водитель = Водитель
Иначе
Запрос.УстановитьПараметр("Водитель", Водитель); // а если Водитель выбран, то и параметр установим
КонецЕсли;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) как-то так
Если НЕ ЗначениеЗаполнено(Водитель) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ", ""); // получаем текст запроса без условия по Водитель = Водитель
Иначе
Запрос.УстановитьПараметр("Водитель", Водитель); // а если Водитель выбран, то и параметр установим
КонецЕсли;
(4) нет условия в запросе, нет параметра
а там хоть он трижды будет установлен. запросу будет на него глубоко фиолетово
т.е. если не будет в запросе "&Водитель" то на УстановитьПараметр("Водитель"), запрос реагировать не будет
а вот это условие я бы поменял на более корректное
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ &Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
а то получается, что Водитель = Водитель и в тоже время ИЛИ он пустая ссылка, как-то нелогично
хотя бы так
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ Распоряжения.Транспорт.Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
а там хоть он трижды будет установлен. запросу будет на него глубоко фиолетово
т.е. если не будет в запросе "&Водитель" то на УстановитьПараметр("Водитель"), запрос реагировать не будет
а вот это условие я бы поменял на более корректное
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ &Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
а то получается, что Водитель = Водитель и в тоже время ИЛИ он пустая ссылка, как-то нелогично
хотя бы так
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ Распоряжения.Транспорт.Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
(5) Да, это я до этого таким способом пробовал реализовать. Сейчас так:
Но все равно почему-то после первого формирования параметр Водитель сам заполнятся.. Не могу понять почему.
1й скрин - при открытии отчета
2й скрин - второе формирование отчета
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Распоряжения.Период КАК Период,
| Распоряжения.Партнер КАК Партнер,
| Распоряжения.СуммаДокумента КАК Сумма,
| Распоряжения.Распоряжение.Номер КАК Номер,
| Распоряжения.Распоряжение.Дата КАК ДатаЗаказа,
| Распоряжения.Транспорт КАК Транспорт,
| Распоряжения.Транспорт.Водитель КАК Водитель,
| Распоряжения.СтатусДоставки КАК Статус,
| Распоряжения.ДатаС КАК Ушла,
| Распоряжения.ДатаПо КАК Пришла,
| Распоряжения.СостояниеОплаты КАК Оплата
|ИЗ
| РегистрСведений.од_РаспоряженияНаДоставку КАК Распоряжения
|ГДЕ
| Распоряжения.СтатусДоставки В (ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.ВПути), ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.Доставлено))
| И Распоряжения.Транспорт.Водитель = &Водитель
| И (Распоряжения.Период >= &ДатаНачала
| И Распоряжения.Период <= &ДатаКонца
| ИЛИ &ДатаКонца = ДАТАВРЕМЯ(1,1,1))
| И (НАЧАЛОПЕРИОДА(Распоряжения.ДатаС, ДЕНЬ) = &ДатаОтправки
| ИЛИ &ДатаОтправки = ДАТАВРЕМЯ(1,1,1))";
Запрос.УстановитьПараметр("ДатаНачала", ПериодОтчета.ДатаНачала);
Запрос.УстановитьПараметр("ДатаКонца", ПериодОтчета.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаОтправки", ДатаОтправки);
Если ЗначениеЗаполнено(Водитель) Тогда
Запрос.УстановитьПараметр("Водитель", Водитель);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Распоряжения.Транспорт.Водитель = &Водитель", "");
КонецЕсли;
Возврат Запрос;
ПоказатьНо все равно почему-то после первого формирования параметр Водитель сам заполнятся.. Не могу понять почему.
1й скрин - при открытии отчета
2й скрин - второе формирование отчета
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот