Сформировать отчет не на СКД без установленного параметра

1. ciddex 28.09.20 18:09 Сейчас в теме
Как сформировать отчет не на СКД без установленного параметра (пустым)? Нужно, чтобы при указании водителя отчет формировался только по этому водителю, а иначе по всем водителям.

Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	Распоряжения.Период КАК Период,
	               |	Распоряжения.Партнер КАК Партнер,
	               |	Распоряжения.СуммаДокумента КАК Сумма,
	               |	Распоряжения.Распоряжение.Номер КАК Номер,
				   |	Распоряжения.Распоряжение.Дата КАК ДатаЗаказа,
	               |	Распоряжения.Транспорт КАК Транспорт,
	               |	Распоряжения.Транспорт.Водитель КАК Водитель,
	               |	Распоряжения.СтатусДоставки КАК Статус,
	               |	Распоряжения.ДатаС КАК Ушла,
	               |	Распоряжения.ДатаПо КАК Пришла,
	               |	Распоряжения.СостояниеОплаты КАК Оплата
	               |ИЗ
	               |	РегистрСведений.од_РаспоряженияНаДоставку КАК Распоряжения
	               |ГДЕ
	               |	Распоряжения.СтатусДоставки В (ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.ВПути), ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.Доставлено)) 
				   |	И (Распоряжения.Транспорт.Водитель = &Водитель
				   |		ИЛИ &Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
	               |    И (Распоряжения.Период >= &ДатаНачала
	               |	    И Распоряжения.Период <= &ДатаКонца
				   |		ИЛИ &ДатаКонца = ДАТАВРЕМЯ(1,1,1))
				   |	И (НАЧАЛОПЕРИОДА(Распоряжения.ДатаС, ДЕНЬ) = &ДатаОтправки
				   |		ИЛИ &ДатаОтправки = ДАТАВРЕМЯ(1,1,1))";

	Запрос.УстановитьПараметр("ДатаНачала", ПериодОтчета.ДатаНачала);
	Запрос.УстановитьПараметр("ДатаКонца", ПериодОтчета.ДатаОкончания);
	Запрос.УстановитьПараметр("ДатаОтправки", ДатаОтправки);
	Запрос.УстановитьПараметр("Водитель", Водитель);

Показать
По теме из базы знаний
Найденные решения
2. VictorRGB2 13 28.09.20 18:15 Сейчас в теме
(1) как-то так
Если НЕ ЗначениеЗаполнено(Водитель) Тогда
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Распоряжения.Транспорт.Водитель = &Водитель
                           ИЛИ", "");  // получаем текст запроса без условия по Водитель = Водитель
Иначе
  Запрос.УстановитьПараметр("Водитель", Водитель); // а если Водитель выбран, то и параметр установим
КонецЕсли;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VictorRGB2 13 28.09.20 18:15 Сейчас в теме
(1) как-то так
Если НЕ ЗначениеЗаполнено(Водитель) Тогда
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Распоряжения.Транспорт.Водитель = &Водитель
                           ИЛИ", "");  // получаем текст запроса без условия по Водитель = Водитель
Иначе
  Запрос.УстановитьПараметр("Водитель", Водитель); // а если Водитель выбран, то и параметр установим
КонецЕсли;
3. ciddex 28.09.20 18:20 Сейчас в теме
4. ciddex 28.09.20 18:32 Сейчас в теме
(2) После первого формирования параметр сам заполняется, как это убрать?
5. VictorRGB2 13 28.09.20 18:39 Сейчас в теме
(4) нет условия в запросе, нет параметра
а там хоть он трижды будет установлен. запросу будет на него глубоко фиолетово
т.е. если не будет в запросе "&Водитель" то на УстановитьПараметр("Водитель"), запрос реагировать не будет

а вот это условие я бы поменял на более корректное
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ &Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))

а то получается, что Водитель = Водитель и в тоже время ИЛИ он пустая ссылка, как-то нелогично
хотя бы так
И (Распоряжения.Транспорт.Водитель = &Водитель
ИЛИ Распоряжения.Транспорт.Водитель = ЗНАЧЕНИЕ(Справочник.од_ВодителиЭкспедиторы.ПустаяСсылка))
6. ciddex 28.09.20 18:48 Сейчас в теме
(5) Да, это я до этого таким способом пробовал реализовать. Сейчас так:
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	Распоряжения.Период КАК Период,
	               |	Распоряжения.Партнер КАК Партнер,
	               |	Распоряжения.СуммаДокумента КАК Сумма,
	               |	Распоряжения.Распоряжение.Номер КАК Номер,
				   |	Распоряжения.Распоряжение.Дата КАК ДатаЗаказа,
	               |	Распоряжения.Транспорт КАК Транспорт,
	               |	Распоряжения.Транспорт.Водитель КАК Водитель,
	               |	Распоряжения.СтатусДоставки КАК Статус,
	               |	Распоряжения.ДатаС КАК Ушла,
	               |	Распоряжения.ДатаПо КАК Пришла,
	               |	Распоряжения.СостояниеОплаты КАК Оплата
	               |ИЗ
	               |	РегистрСведений.од_РаспоряженияНаДоставку КАК Распоряжения
	               |ГДЕ
	               |	Распоряжения.СтатусДоставки В (ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.ВПути), ЗНАЧЕНИЕ(Перечисление.од_СтатусыДоставки.Доставлено)) 
				   |	И Распоряжения.Транспорт.Водитель = &Водитель
	               |    И (Распоряжения.Период >= &ДатаНачала
	               |	    И Распоряжения.Период <= &ДатаКонца
				   |		ИЛИ &ДатаКонца = ДАТАВРЕМЯ(1,1,1))
				   |	И (НАЧАЛОПЕРИОДА(Распоряжения.ДатаС, ДЕНЬ) = &ДатаОтправки
				   |		ИЛИ &ДатаОтправки = ДАТАВРЕМЯ(1,1,1))";

	Запрос.УстановитьПараметр("ДатаНачала", ПериодОтчета.ДатаНачала);
	Запрос.УстановитьПараметр("ДатаКонца", ПериодОтчета.ДатаОкончания);
	Запрос.УстановитьПараметр("ДатаОтправки", ДатаОтправки);
	Если ЗначениеЗаполнено(Водитель) Тогда
		Запрос.УстановитьПараметр("Водитель", Водитель);
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Распоряжения.Транспорт.Водитель = &Водитель", "");
	КонецЕсли;	
		
	Возврат Запрос;
Показать


Но все равно почему-то после первого формирования параметр Водитель сам заполнятся.. Не могу понять почему.
1й скрин - при открытии отчета
2й скрин - второе формирование отчета
Прикрепленные файлы:
7. VictorRGB2 13 28.09.20 18:51 Сейчас в теме
(6) смотреть в код надо
скорее всего совпадение имен имеет место быть и в результате при заполнении табличного документа последний водитель влетает в реквизит на форме
8. ciddex 28.09.20 18:56 Сейчас в теме
(7) Вы правы, нашел ошибку. Я чет прицепился к запросу
9. user1407549 1 29.09.20 07:01 Сейчас в теме
Я бы так сделал:

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот