Имя: Пароль:
1C
1С v8
Запрос
0 SH_tan
 
05.09.14
13:06
Добрый День Всем!!!
Проблема с запросом
Есть документы
Счет
Расходная накладная
Доставка

Принято считать как только проведена Расходная накладная то можно считать что Доставка выполнена, но есть подвох могут быть Расходные накладные не проведенные - в этом случае Доставка не выполнена
Как правильно в запросе поставить условие?
1 Apokalipsec
 
05.09.14
13:07
Выбор
КОГДА РасходнаяНакладная.Проведен
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
2 SH_tan
 
05.09.14
13:12
(1) может что не правильно делаю но при этом у меня отсекаются доставки которые не выполнены
ВЫБРАТЬ
    Доставка.Ссылка КАК Доставка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)) КАК Примечание,
    Доставка.Контрагент.Родитель.Менеджер КАК Менеджер,
    ВЫБОР
        КОГДА ЕСТЬNULL(РасходнаяНакладная.Ссылка, "Невыполнено") = РасходнаяНакладная.Ссылка
            ТОГДА "Выполненно"
        ИНАЧЕ "Невыполнено"
    КОНЕЦ КАК Статус
ИЗ
    Документ.Доставка КАК Доставка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
        ПО Доставка.ДокументОснование = РасходнаяНакладная.ДокументОснование
ГДЕ
    Доставка.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ВЫБОР
            КОГДА &Менеджер = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
                ТОГДА ИСТИНА
            ИНАЧЕ Доставка.Контрагент.Родитель.Менеджер В (&Менеджер)
        КОНЕЦ
    И Доставка.Проведен = ИСТИНА
    И ВЫБОР
            КОГДА &Выполненые = ИСТИНА
                ТОГДА ВЫБОР
                        КОГДА ЕСТЬNULL(РасходнаяНакладная.Ссылка, ЛОЖЬ) = РасходнаяНакладная.Ссылка
                            ТОГДА ИСТИНА
                        ИНАЧЕ ЛОЖЬ
                    КОНЕЦ
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И ВЫБОР
            КОГДА РасходнаяНакладная.Проведен = ИСТИНА
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
{ГДЕ
    Доставка.Контрагент.*,
    Доставка.Контрагент.Родитель.Менеджер.* КАК Менеджер}

СГРУППИРОВАТЬ ПО
    Доставка.Ссылка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)),
    Доставка.Контрагент.Родитель.Менеджер,
    ВЫБОР
        КОГДА ЕСТЬNULL(РасходнаяНакладная.Ссылка, "Невыполнено") = РасходнаяНакладная.Ссылка
            ТОГДА "Выполненно"
        ИНАЧЕ "Невыполнено"
    КОНЕЦ

УПОРЯДОЧИТЬ ПО
    Доставка.Дата
3 Cube
 
05.09.14
13:12
(1) А что, просто

РасходнаяНакладная.Проведен КАК Доставлено

не комильфо? :)
Ну и с заглушкой от NULL:

ЕстьNULL(РасходнаяНакладная.Проведен, ЛОЖЬ) КАК Доставлено
4 Cube
 
05.09.14
13:14
(2) "КОГДА ЕСТЬNULL(РасходнаяНакладная.Ссылка, ЛОЖЬ) = РасходнаяНакладная.Ссылка"
Красавчик чё...
5 SH_tan
 
05.09.14
13:16
(4) я вот с этим Выбор когда еще не очень поэтому не пинайте сильно
6 Apokalipsec
 
05.09.14
13:16
(3) Комильфо и аккуратно, автору нагляднее просто пример.)
7 SH_tan
 
05.09.14
13:18
ВЫБРАТЬ
    Доставка.Ссылка КАК Доставка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)) КАК Примечание,
    Доставка.Контрагент.Родитель.Менеджер КАК Менеджер,
    РасходнаяНакладная.Проведен КАК Доставлено
ИЗ
    Документ.Доставка КАК Доставка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
        ПО Доставка.ДокументОснование = РасходнаяНакладная.ДокументОснование
ГДЕ
    Доставка.Проведен = ИСТИНА
{ГДЕ
    Доставка.Контрагент.*,
    Доставка.Контрагент.Родитель.Менеджер.* КАК Менеджер}

СГРУППИРОВАТЬ ПО
    Доставка.Ссылка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)),
    Доставка.Контрагент.Родитель.Менеджер,
    РасходнаяНакладная.Проведен

УПОРЯДОЧИТЬ ПО
    Доставка.Дата
8 Cube
 
05.09.14
13:18
(5) Так читай (3) и пиши вместо

КОГДА ЕСТЬNULL(РасходнаяНакладная.Ссылка, ЛОЖЬ) = РасходнаяНакладная.Ссылка

Это

КОГДА ЕСТЬNULL(РасходнаяНакладная.Проведен, ЛОЖЬ) = ИСТИНА
9 SH_tan
 
05.09.14
13:19
и тут возникают дубли
к примеру была Расходная проведенная и не проведенная
соответственно строк две
10 SH_tan
 
05.09.14
13:20
(8) ок
11 Cube
 
05.09.14
13:23
(9) Так конечно - та группируешь по полю РасходнаяНакладная.Проведен. Делай так:

ВЫБРАТЬ
    Доставка.Ссылка КАК Доставка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)) КАК Примечание,
    Доставка.Контрагент.Родитель.Менеджер КАК Менеджер,
    МАКСИМУМ(ЕСТЬNULL(РасходнаяНакладная.Проведен, ЛОЖЬ)) КАК Доставлено
ИЗ
    Документ.Доставка КАК Доставка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
        ПО Доставка.ДокументОснование = РасходнаяНакладная.ДокументОснование
ГДЕ
    Доставка.Проведен = ИСТИНА
{ГДЕ
    Доставка.Контрагент.*,
    Доставка.Контрагент.Родитель.Менеджер.* КАК Менеджер}

СГРУППИРОВАТЬ ПО
    Доставка.Ссылка,
    Доставка.ДатаПодачи,
    Доставка.Контрагент,
    ВЫРАЗИТЬ(Доставка.Примечание КАК СТРОКА(200)),
    Доставка.Контрагент.Родитель.Менеджер

УПОРЯДОЧИТЬ ПО
    Доставка.Дата
12 SH_tan
 
05.09.14
13:28
(11) спасибо получилось
Максимум что дает можешь сказать?
МАКСИМУМ(ЕСТЬNULL(РасходнаяНакладная.Проведен, ЛОЖЬ)) КАК Доставлено
13 Cube
 
05.09.14
13:30
(12) Выбирает максимальное значение поля.
Истина = это единица (упрощенно)
Ложь - это ноль.
14 Cube
 
05.09.14
13:34
(12) Почитай в СП как работает метод Свернуть() у таблицы значений. Там есть группировочные поля и есть суммируемые поля. Вот в запросе можно у суммируемых полей указывать не только функцию СУММА(), но и другие - МАКСИМУМ(), МИНИМУМ(), КОЛИЧЕСТВО() и т.д.
15 SH_tan
 
05.09.14
13:39
(14) спасибо!!!
AdBlock убивает бесплатный контент. 1Сергей