Имя: Пароль:
1C
1С v8
Результат левого соединения в запросе.
0 lirt82
 
09.09.26
11:51
Не могу понять почему в запросе при левом соединении, результат пустой, должны же быть сохранены все строки из левой таблицы.
ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
    ПеремещениеТоваровТовары.Количество КАК ПеремещаемоеКоличество,
    ПеремещениеТоваровТовары.Ссылка.СкладОтправитель КАК СкладОтправитель
ПОМЕСТИТЬ ВТ_ДанныеДокумента
ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
ГДЕ
    ПеремещениеТоваровТовары.Ссылка = &ДокПеремещения
    И ПеремещениеТоваровТовары.Номенклатура.АвтоматическиКомплектовать
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ДанныеДокумента.Номенклатура КАК Номенклатура,
    ВТ_ДанныеДокумента.СкладОтправитель КАК СкладОтправитель,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ВТ_ДанныеДокумента.ПеремещаемоеКоличество КАК РазницаТоварыНаСкладах,
    ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0) - ВТ_ДанныеДокумента.ПеремещаемоеКоличество КАК РазницаТоварыОрганизации
ПОМЕСТИТЬ ВТ_МинусовыеОстатки
ИЗ
    ВТ_ДанныеДокумента КАК ВТ_ДанныеДокумента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаДокаПеремещения, ) КАК ТоварыНаСкладахОстатки
        ПО ВТ_ДанныеДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
            И ВТ_ДанныеДокумента.СкладОтправитель = ТоварыНаСкладахОстатки.Склад
            И ВТ_ДанныеДокумента.ПеремещаемоеКоличество > ТоварыНаСкладахОстатки.КоличествоОстаток
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки(&ДатаДокаПеремещения, ) КАК ТоварыОрганизацийОстатки
        ПО ВТ_ДанныеДокумента.Номенклатура = ТоварыОрганизацийОстатки.Номенклатура
            И ВТ_ДанныеДокумента.СкладОтправитель = ТоварыОрганизацийОстатки.Склад
            И ВТ_ДанныеДокумента.ПеремещаемоеКоличество > ТоварыОрганизацийОстатки.КоличествоОстаток
;

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

Если документ Сборка проведу тогда результат запроса не пустой
https://yapx.ru/album/eL08F
Если сниму с проведения тогда результат пустой
https://yapx.ru/album/eL087
1 RomanYS
 
09.09.26
11:55
Не надо в "ГДЕ" условия делать на правую таблицу. Это делает соединение внутренним по факту
2 maxab72
 
09.09.26
11:57
ГДЕ
    СборкаТоваров.Проведен
3 lirt82
 
09.09.26
12:33
(1) тогда в последнем запросе нужно делать объединение?
цель доработки:
перед проведением Перемещения получаем остаток из регистра, если остаток меньше чем мы перемещаем в документе Перемещение тогда либо создаем новую Сборку либо добавляем в уже существующую Сборку.
в последнем запросе получить ссылку на док Сборка при условии проведенного дока Сборка и даты Сборки не позже даты документа Перемещения, если такого документа Сборки не найдется тогда в поле "ДокСборка" будет Неопределено, дальше по результату выполнения запроса 2 варианта, либо создается новый документ Сборка либо в найденный запросом док Сборка добавляется недостающая номенклатура для комплектации.
4 Kigo_Kigo
 
09.09.26
12:52
(3) Собери еще обну ВТ где  СборкаТоваров.Проведен, а потом уже собирай итоговую
5 КонецЕсли
 
09.09.26
13:06
...
ИЗ
    ВТ_МинусовыеОстатки КАК ВТ_МинусовыеОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СборкаТоваров КАК СборкаТоваров
        ПО ВТ_МинусовыеОстатки.СкладОтправитель = СборкаТоваров.Склад
            И ВТ_МинусовыеОстатки.Номенклатура = СборкаТоваров.Номенклатура
И СборкаТоваров.Проведен
    И СборкаТоваров.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКомплектацияНоменклатуры.Комплектация)
    И СборкаТоваров.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаДокаПеремещения, ДЕНЬ) И &ДатаДокаПеремещения
6 lirt82
 
09.09.26
13:22
(4) все получилось) благодарю
7 lirt82
 
09.09.26
13:25
(5) да я пробовал делать связь по условию, также при непроведеной сборке был пустой результат, а по (4) все получилось.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс