Имя: Пароль:
1C
1С v8
Отчет по документам в связке
0 suharik
 
28.04.18
11:29
Добрый день. Не подскажите Если я делаю отчет по ПоступлениеДопРасходов и ПоступлениеТоваровУслуг. При формировании отчета выводятся только те документы ПоступлениеТоваровУслуг, у которых есть в структуре ПоступлениеДопРасходов. А как вывести все документы ПоступлениеТоваровУслуг, но если к ним не привязан ПоступлениеДопРасходов чтобы выводилась надпись документ не обнаружен?

Я делаю так:

ВЫБОР
    КОГДА ПоступлениеДопРасходов.Ссылка = NULL
        ТОГДА "Документ не обнаружен"
    ИНАЧЕ ПоступлениеДопРасходов.Ссылка
КОНЕЦ
1 Ненавижу 1С
 
гуру
28.04.18
11:30
КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
2 Cool_Profi
 
28.04.18
11:30
@ПоступлениеДопРасходов.Ссылка = NULL@
Кто же так делает-то?
3 Ненавижу 1С
 
гуру
28.04.18
11:31
или даже вместо всего этого:

ЕСТЬNULL(ПоступлениеДопРасходов.Ссылка,"Документ не обнаружен")
4 suharik
 
28.04.18
11:39
Видимо дело не только в условии, не работает ЕСТЬ NULL

ВЫБРАТЬ
    ВЫБОР
        КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
            ТОГДА "Документ не обнаружен"
        ИНАЧЕ ПоступлениеДопРасходов.Ссылка
    КОНЕЦ КАК ДокДР,
    ПоступлениеТоваровУслуг.Ссылка КАК ДокПТ,
    ВЫБОР
        КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ ПоступлениеДопРасходов.СуммаДокумента
    КОНЕЦ КАК СуммаДокДР,
    ПоступлениеТоваровУслуг.СуммаДокумента КАК СуммаДокПТ
ИЗ
    Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ПО ПоступлениеДопРасходов.Товары.ДокументПартии = ПоступлениеТоваровУслуг.Ссылка
ГДЕ
    ПоступлениеДопРасходов.Проведен = ИСТИНА
    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА
5 suharik
 
28.04.18
11:40
(2) ну уж извиняйте, как умеем :)
6 suharik
 
02.05.18
10:20
Нарооод, нет больше вариантов? ну хоть куда копать?
7 DrShad
 
02.05.18
10:32
(4) какой ужас
8 DrShad
 
02.05.18
10:34
КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL

ты действительно думаешь, что в твоем запросе это условие когда-нибудь выполнится?
9 Cyberhawk
 
02.05.18
11:06
Вот это тебе все портит: ПоступлениеДопРасходов.Проведен = ИСТИНА
10 Cyberhawk
 
02.05.18
11:07
Добавь к нему через ИЛИ условие на НУЛЛ
11 suharik
 
02.05.18
13:57
(10) спасибо, попробую
12 suharik
 
02.05.18
13:58
(8) ну фиг знает, я в уме обрабатывать запросы не умею.
13 hhhh
 
02.05.18
14:29
(12) null бывает в левом соединении поэтому и без обработки в уме понятно.видишь левое соединение,значит там Null. А еслиу тебя поступлениеДопРасходов без левого соединения, то хоть головой о стенку бейся, null ты не получишь
14 b_ru
 
02.05.18
14:53
В (1) не совсем правда. В большинстве диалектов SQL NULL не равен NULL, как и положено по определению этого самого нула, но в 1Совском равен. Но лучше, конечно же, писать как в (1)

А проблема в том, что у тебя в предложении ГДЕ наложено условие на вторую таблицу, а ведь там не будет Проведен = ИСТИНА, там будет Проведен = NULL

Правильно будет так:

ВЫБРАТЬ
    ВЫБОР
        КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
            ТОГДА "Документ не обнаружен"
        ИНАЧЕ ПоступлениеДопРасходов.Ссылка
    КОНЕЦ КАК ДокДР,
    ПоступлениеТоваровУслуг.Ссылка КАК ДокПТ,
    ВЫБОР
        КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ ПоступлениеДопРасходов.СуммаДокумента
    КОНЕЦ КАК СуммаДокДР,
    ПоступлениеТоваровУслуг.СуммаДокумента КАК СуммаДокПТ
ИЗ
    Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ПО ПоступлениеДопРасходов.Товары.ДокументПартии = ПоступлениеТоваровУслуг.Ссылка
    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА
ГДЕ
    ПоступлениеДопРасходов.Проведен = ИСТИНА
15 b_ru
 
02.05.18
14:54
точнее даже ПТУ и ПДР надо поменять местами в соединении, а то у тебя будут выводиться все ПДР, не зависимо от ПТУ.
16 ВРедная
 
02.05.18
15:49
(12) А как ты вообще работаешь то тогда? Если в уме запросы выполнять не умеешь?

Нужно же представить сначала, что ты получаешь, потом уже запрос писать.

У тебя сейчас так:
Беру все документы "доп расходы"
Привязываю к ним документы поступления по ссылке (только те документы поступления, ссылка на которые есть в доп расходах).

Как в этой схеме появятся поступления, к которым не создан доп расход?
17 suharik
 
03.05.18
04:51
(16) методом тыка :)
ну так то оно так, только в реализации нет ссылки на доп расход, чтобы сделать иначе. Ну или я не нашел.
18 suharik
 
03.05.18
04:56
(14) Видимо все таки как и сказал(а) (16) нельзя увидеть то что уже есть из того чего нет :) ну или как то так.
Надо именно от поступления плясать как то
19 suharik
 
03.05.18
06:47
Нашел я где привязка, ну или по крайней мере должна быть там, но почему то она вообще ничерта не дает. Даже простой запрос показывает только документы прихода. Реквизит Сделка имеет сборную солянку из кучи других документов, и без условий отбора по сути должен показывать ВСЕ, но опять пустота.

ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка КАК ДокПТ,
    ПоступлениеТоваровУслуг.Дата КАК Дата,
    ПоступлениеТоваровУслуг.СуммаДокумента КАК СуммаПТ,
    ПоступлениеТоваровУслуг.Сделка КАК ДокДР,
    ПоступлениеТоваровУслуг.Сделка.СуммаДокумента КАК СуммаДр
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
    ПоступлениеТоваровУслуг.Проведен = ИСТИНА

УПОРЯДОЧИТЬ ПО
    ДокПТ
20 suharik
 
03.05.18
09:27
К сожалению ничего умнее вот этого не придумал. Всем спасибо за помощь.
ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка КАК ДокПТ,
    ПоступлениеТоваровУслуг.Дата КАК Дата,
    ПоступлениеТоваровУслуг.СуммаДокумента КАК СуммаПТ,
    ВЫБОР
        КОГДА ВложенныйЗапрос.ДокДР.Ссылка ЕСТЬ NULL
            ТОГДА "Документ не создан"
        ИНАЧЕ ВложенныйЗапрос.ДокДР.Ссылка
    КОНЕЦ КАК ДокДР,
    ВложенныйЗапрос.СуммаДокДР КАК СуммаДР
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВЫБОР
                КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
                    ТОГДА "Документ не обнаружен"
                ИНАЧЕ ПоступлениеДопРасходов.Ссылка
            КОНЕЦ КАК ДокДР,
            ПоступлениеТоваровУслуг.Ссылка КАК ДокПТ,
            ВЫБОР
                КОГДА ПоступлениеДопРасходов.Ссылка ЕСТЬ NULL
                    ТОГДА 0
                ИНАЧЕ ПоступлениеДопРасходов.СуммаДокумента
            КОНЕЦ КАК СуммаДокДР
        ИЗ
            Документ.ПоступлениеДопРасходов КАК ПоступлениеДопРасходов
                ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                ПО ПоступлениеДопРасходов.Товары.ДокументПартии = ПоступлениеТоваровУслуг.Ссылка
                    И (ПоступлениеТоваровУслуг.Проведен = ИСТИНА)
        ГДЕ
            ПоступлениеДопРасходов.Проведен = ИСТИНА) КАК ВложенныйЗапрос
        ПО ПоступлениеТоваровУслуг.Ссылка = ВложенныйЗапрос.ДокПТ.Ссылка
ГДЕ
    ПоступлениеТоваровУслуг.Проведен = ИСТИНА

УПОРЯДОЧИТЬ ПО
    ДокПТ