Имя: Пароль:
1C
1С v8
В СКД отчет по полному соответствию таб. части и списком значений
0 SmirnAlex
 
17.11.16
14:40
Подскажите, как в СКД выбрать документы с ПОЛНЫМ соответствием табличной части и параметром - списком значений. Под полным соответствием понимается: если в документе присутствует номенклатура не из списка, то такие документы не выводить в отчете, если в документе нет какой то номенклатуры из списка, то такие документы не выводить в отчете.
1 catena
 
17.11.16
15:01
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПоступлениеТоваровУслугТовары.Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура
ПОМЕСТИТЬ тзТовары
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
;

////////////////////////////////////////////////////////////////////////////////
Выбрать различные ссылка из (ВЫБРАТЬ
    тзТовары.Ссылка,
    СУММА(ВЫБОР
            КОГДА тзТовары.Номенклатура В (&Список)
                ТОГДА 1
            ИНАЧЕ &КоличествоВСписке*100000
        КОНЕЦ) КАК количествоСовпадений
ИЗ
    тзТовары КАК тзТовары

СГРУППИРОВАТЬ ПО
    тзТовары.Ссылка

ИМЕЮЩИЕ
    СУММА(ВЫБОР
            КОГДА тзТовары.Номенклатура В (&Список)
                ТОГДА 1
            ИНАЧЕ &КоличествоВСписке*100000
        КОНЕЦ) = &КоличествоВСписке) как Д
2 SmirnAlex
 
17.11.16
15:28
Спасибо! Вроде получается.
3 youalex
 
17.11.16
15:42

ВЫБРАТЬ
    Номенклатура.Ссылка
ПОМЕСТИТЬ вт_Список
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В(&Список)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Ссылка
ПОМЕСТИТЬ вт_ЕстьСовпадения
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_Список КАК вт_Список
        ПО РеализацияТоваровУслугТовары.Номенклатура = вт_Список.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Ссылка
ПОМЕСТИТЬ вт_Расхождения    
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_ЕстьСовпадения КАК вт_ЕстьСовпадения
        ПО РеализацияТоваровУслугТовары.Ссылка = вт_ЕстьСовпадения.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ вт_Список КАК вт_Список
        ПО РеализацияТоваровУслугТовары.Номенклатура = вт_Список.Ссылка
ГДЕ  вт_Список.Ссылка is null  ИЛИ   РеализацияТоваровУслугТовары.Ссылка is null

4 SmirnAlex
 
17.11.16
15:52
Поясни плз, зачем нужен параметр &КоличествоВСписке и где его заполнять?
5 SmirnAlex
 
17.11.16
15:53
На строке &КоличествоВСписке*100000 ругается "Неверные параметры "*""
6 youalex
 
17.11.16
15:59
(3) +
ВЫБРАТЬ * ИЗ  вт_ЕстьСовпадения ГДЕ НЕ  Ссылка В (ВЫБРАТЬ Ссылка ИЗ вт_Расхождения)
7 SmirnAlex
 
17.11.16
16:06
(6)
Я так уже пробовал делать, только даже проще. Дело в том, что если в список выбрать все товары, вт_Расхождения будет пустая и выйдут все документы. На этом и застрял)
8 SmirnAlex
 
17.11.16
16:09
(6)
Аналогично работает:
ВЫБРАТЬ
    ЗаказТовары.Ссылка
ПОМЕСТИТЬ Таб1
ИЗ
    Документ.Заказ.Товары КАК ЗаказТовары
ГДЕ
    ЗаказТовары.Номенклатура В(&Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказТовары.Ссылка
ПОМЕСТИТЬ Таб2
ИЗ
    Документ.Заказ.Товары КАК ЗаказТовары
ГДЕ
    НЕ ЗаказТовары.Номенклатура В (&Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таб1.Ссылка
ИЗ
    Таб1 КАК Таб1
        ЛЕВОЕ СОЕДИНЕНИЕ Таб2 КАК Таб2
        ПО Таб1.Ссылка = Таб2.Ссылка
ГДЕ
    Таб2.Ссылка ЕСТЬ NULL
9 SmirnAlex
 
17.11.16
16:12
А нужно так:
Список: Яблоки, Груши, Виноград
Документ1: Яблоки, Груши, Виноград - попадает в отчет
Документ2: Яблоки, Груши - не попадает в отчет
10 DrShad
 
17.11.16
16:16
(9) сколько?
11 тарам пам пам
 
17.11.16
18:11
(8) через полное соединение нужно делать, например так:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Ссылка,
    РеализацияТоваровУслугТовары.Номенклатура
ПОМЕСТИТЬ ВТДокументы
ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
    ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
        РеализацияТоваровУслугТовары.Номенклатура В(&Номенклатура)) КАК ВложенныйЗапрос
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ПО ВложенныйЗапрос.Ссылка = РеализацияТоваровУслугТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТДокументы.Ссылка,
    СпрНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТДокументыСНоменклатурой
ИЗ
    ВТДокументы КАК ВТДокументы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        ПО (СпрНоменклатура.Ссылка В (&Номенклатура))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(ВТДокументы.Ссылка, ВТДокументыСНоменклатурой.Ссылка) КАК Ссылка
ИЗ
    ВТДокументы КАК ВТДокументы
        ПОЛНОЕ СОЕДИНЕНИЕ ВТДокументыСНоменклатурой КАК ВТДокументыСНоменклатурой
        ПО ВТДокументы.Ссылка = ВТДокументыСНоменклатурой.Ссылка
            И ВТДокументы.Номенклатура = ВТДокументыСНоменклатурой.Номенклатура

СГРУППИРОВАТЬ ПО
    ЕСТЬNULL(ВТДокументы.Ссылка, ВТДокументыСНоменклатурой.Ссылка)

ИМЕЮЩИЕ
    МИНИМУМ(НЕ ВТДокументы.Номенклатура ЕСТЬ NULL
            И НЕ ВТДокументыСНоменклатурой.Номенклатура ЕСТЬ NULL ) = ИСТИНА
12 SmirnAlex
 
17.11.16
18:20
(11)
Да, то что надо! Работает. Спасибо!
13 SmirnAlex
 
17.11.16
18:36
(11)
Только можно обойтись без вложенного запроса:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Заказы.Ссылка КАК Ссылка,
    Заказы.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТДокументы
ИЗ
    Документ.Заказ.Товары КАК Заказы
ГДЕ
    Заказы.Номенклатура В(&Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТДокументы.Ссылка,
    СпрНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТДокументыСНоменклатурой
ИЗ
    ВТДокументы КАК ВТДокументы
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        ПО (СпрНоменклатура.Ссылка В (&Номенклатура))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(ВТДокументы.Ссылка, ВТДокументыСНоменклатурой.Ссылка) КАК Ссылка
ИЗ
    ВТДокументы КАК ВТДокументы
        ПОЛНОЕ СОЕДИНЕНИЕ ВТДокументыСНоменклатурой КАК ВТДокументыСНоменклатурой
        ПО (ВТДокументы.Ссылка = ВТДокументыСНоменклатурой.Ссылка)
            И (ВТДокументы.Номенклатура = ВТДокументыСНоменклатурой.Номенклатура)

СГРУППИРОВАТЬ ПО
    ЕСТЬNULL(ВТДокументы.Ссылка, ВТДокументыСНоменклатурой.Ссылка)

ИМЕЮЩИЕ
    МИНИМУМ(НЕ ВТДокументы.Номенклатура ЕСТЬ NULL
            И НЕ ВТДокументыСНоменклатурой.Номенклатура ЕСТЬ NULL) = ИСТИНА

УПОРЯДОЧИТЬ ПО
    Ссылка
14 тарам пам пам
 
18.11.16
09:03
(13) нельзя, сравнивать нужно полную таб. часть от документов, а у тебя выберутся только те строки, где есть номенклатура из списка
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой