Имя: Пароль:
1C
1С v8
Двойной выбор периода в отчете
0 serg-lom89
 
23.09.14
10:18
Подскажите по данному вопросу

Есть отчет который выводит такую инфу.

Основание   Заявка        Исполнение    СтатутЗаявки   статусРейса
Док 4        ДокЗаявка7    ДокИспол4      Выполненно    Выполненно
Док 6        ДокЗаявка1    ДокИспол6      Выполненно    Выполненно
Док 2        ДокЗаявка4                   Выполненно    Выполненно
Док 1        ДокЗаявка2    ДокИспол1      Выполненно    Выполненно

Пользоватль в отчете выбирает период с дата1 по Дата2,и идет отбор по колонке Основание.
Теперь ему нужно что бы он выбирал период как и прежде(с Дата1 по Дата2),и была возможность выбрать один период для колонки исполнение.
Вот если период для колонки Исполнение будет выбран,то будет выводить только ДокиИсполнение за этот период,с учетом выбора периода для Основания

Основание   Заявка        Исполнение    СтатутЗаявки   статусРейса
Док 4        ДокЗаявка7                   Выполненно    Выполненно
Док 6        ДокЗаявка1    ДокИспол6      Выполненно    Выполненно
Док 2        ДокЗаявка4                   Выполненно    Выполненно
Док 1        ДокЗаявка2                   Выполненно    Выполненно


Как это указать в запросе?

Может что не правильно объяснил,извиняйте))
1 serg-lom89
 
23.09.14
10:19
вот сам запрос

ВЫБРАТЬ
    ЗаявкаНаСклад.ДокументОснование КАК Основание,
    ЗаявкаНаСклад.Ссылка КАК Заявка,
    Исполнение.Ссылка КАК Исполнение,
    СтатусЗаявки.Значение КАК СтатусЗаявки,
    СтатусРейса.Значение КАК СтатусРейса,
    СтатусWMS.Значение КАК СтатусWMS,
    ВЫБОР
        КОГДА Исполнение.Ссылка ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ЕстьИсполнение,
    ЗаявкаНаСклад.ВидОперации,
    ЗаявкаНаСклад.ДокументОснование.Проведен,
    ЗаявкаНаСклад.ДокументОснование.ПометкаУдаления,
    ЗаявкаНаСклад.ДокументОснование.Комментарий КАК Комментарий,
    Исполнение.Количество КАК Количество,
    Исполнение.КоличествоФакт КАК КоличествоФакт
ИЗ
    Документ.ЗаявкаНаСклад КАК ЗаявкаНаСклад
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗначенияСвойствОбъектов.Объект КАК Объект,
            ЗначенияСвойствОбъектов.Свойство КАК Свойство,
            ЗначенияСвойствОбъектов.Значение КАК Значение
        ИЗ
            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ГДЕ
            ЗначенияСвойствОбъектов.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.СтатусЗаявкиНаСклад)) КАК СтатусЗаявки
        ПО ЗаявкаНаСклад.Ссылка = СтатусЗаявки.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗначенияСвойствОбъектов.Объект КАК Объект,
            ЗначенияСвойствОбъектов.Свойство КАК Свойство,
            ЗначенияСвойствОбъектов.Значение КАК Значение
        ИЗ
            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ГДЕ
            ЗначенияСвойствОбъектов.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.СтадияДоставкиТовара)) КАК СтатусРейса
        ПО ЗаявкаНаСклад.Ссылка = СтатусРейса.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗначенияСвойствОбъектов.Объект КАК Объект,
            ЗначенияСвойствОбъектов.Свойство КАК Свойство,
            ЗначенияСвойствОбъектов.Значение КАК Значение
        ИЗ
            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        ГДЕ
            ЗначенияСвойствОбъектов.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СвойстваОбъектов.СтатусДокументаWMS)) КАК СтатусWMS
        ПО ЗаявкаНаСклад.Ссылка = СтатусWMS.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ИсполнениеЗаявкиНаСкладТовары.Ссылка КАК Ссылка,
            ИсполнениеЗаявкиНаСкладТовары.Ссылка.ЗаявкаНаСклад.Ссылка КАК ЗаявкаНаСкладСсылка,
            СУММА(ИсполнениеЗаявкиНаСкладТовары.Количество) КАК Количество,
            СУММА(ИсполнениеЗаявкиНаСкладТовары.КоличествоФакт) КАК КоличествоФакт
        ИЗ
            Документ.ИсполнениеЗаявкиНаСклад.Товары КАК ИсполнениеЗаявкиНаСкладТовары
        
        СГРУППИРОВАТЬ ПО
            ИсполнениеЗаявкиНаСкладТовары.Ссылка,
            ИсполнениеЗаявкиНаСкладТовары.Ссылка.ЗаявкаНаСклад.Ссылка) КАК Исполнение
        ПО ЗаявкаНаСклад.Ссылка = Исполнение.ЗаявкаНаСкладСсылка
ГДЕ
    ЗаявкаНаСклад.Дата МЕЖДУ &Дата1 И &Дата2
    И (НЕ ЗаявкаНаСклад.ПометкаУдаления)
    И ЗаявкаНаСклад.Проведен
    И ЗаявкаНаСклад.Склад <> &Склад
    И ЗаявкаНаСклад.Склад <> &Склад1

УПОРЯДОЧИТЬ ПО
    ЗаявкаНаСклад.Дата
ИТОГИ
    СУММА(Количество),
    СУММА(КоличествоФакт)
ПО
    ОБЩИЕ
2 Asmody
 
23.09.14
10:21
ну и добавь еще условие Исполнение.Дата МЕЖДУ &Дата3 И &Дата4
3 serg-lom89
 
23.09.14
10:25
(2) а как выполнить условие в запросе что бы обрезало по датам Исполнение?
Если дата заданнам,то обрезает исполнения,если нет то не обрезает
4 Milok
 
23.09.14
10:25
+(2) После "ПО ЗаявкаНаСклад.Ссылка = Исполнение.ЗаявкаНаСкладСсылка"
5 serg-lom89
 
23.09.14
10:30
(4) если ставлю (2) после (4) выдает ошибку(
6 Milok
 
23.09.14
10:31
(5) продублируй текст ошибки
7 serg-lom89
 
23.09.14
10:35
вроде взлетело!!!!
Вот только когда я период не указываю для отбора по Исполнению то у меня не выводит исполнения ни одного..хотя так они есть для этих документов
8 Enders
 
23.09.14
10:39
(7) После текста запроса, перед выполнить
Если Дата3  = '00010101' и Дата4 = '00010101' Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"и Исполнение.Дата МЕЖДУ &Дата3 И &Дата4","");
КонецЕсли;


Или если нет документов будущим периодом.
Если Дата4 = '00010101' Тогда
дата4 = ТекущаяДата();
КонецЕсли;
9 serg-lom89
 
23.09.14
10:51
(8) отчет получается делался через Построительотчетов...получается после запроса сразу условие это писать (8) ?
10 serg-lom89
 
23.09.14
10:53
вот только получается что все равно если период выбираю для Исполнения все срабатывает хорошо...а если переод не указываю то не не заполненно Исполнение...
11 Milok
 
23.09.14
10:54
(10) см (8)
12 serg-lom89
 
23.09.14
11:02
в общем все равно не получается
13 Asmody
 
23.09.14
11:11
вот так условие напиши:
И (НЕ (&ЗаданПериодИсполнение) ИЛИ (Исполнение.Дата МЕЖДУ &Дата3 И &Дата4))

в установке параметров отчета добавь
УстановитьПараметр("ЗаданПериодИсполнение", ЗначениеЗаполнено(Дата3) И ЗначениеЗаполнено(Дата4));
Программист всегда исправляет последнюю ошибку.