Имя: Пароль:
1C
 
Группировка итогового пакета запроса
0 Tolstiy Beremenniy
 
24.12.18
03:54
Подскажите пожалуйста по построению итогового пакета запроса.
Дело в том что как задаю итоги, то в консоле запросов идет
замноживание выводимых данных. Без итогов же все выводится в
более наглядном и понятном виде. Суть задачи выбрать партии
для партионного списания, первая из которых партия из табличной
части документа если указанна.



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

СГРУППИРОВАТЬ ПО
    ПеремещениеТоваровСписокНоменклатуры.Номенклатура,
    ПеремещениеТоваровСписокНоменклатуры.Партия
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ДокТч.Номенклатура КАК НоменклатураИзДокумента,
    СУММА(ВТ_ДокТч.Количество) КАК КоличествоИзДокумента,
    ВТ_ДокТч.Партия КАК ПартияИзДокумента,
    ВТ_ОстаткиПартий.Номенклатура КАК НоменклатураОстатков,
    СУММА(ВТ_ОстаткиПартий.КоличествоОстаток) КАК КоличествоОстаток,
    ВТ_ОстаткиПартий.Партия КАК ПартияОстатков,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ КАК ПорядокСписания,
    ВТ_ОстаткиПартий.Партия.МоментВремени КАК ПартияМоментВремени
ИЗ
    ВТ_ДокТч КАК ВТ_ДокТч
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий
        ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура

СГРУППИРОВАТЬ ПО
    ВТ_ДокТч.Номенклатура,
    ВТ_ДокТч.Партия,
    ВТ_ОстаткиПартий.Номенклатура,
    ВТ_ОстаткиПартий.Партия,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ,
    ВТ_ОстаткиПартий.Партия.МоментВремени

УПОРЯДОЧИТЬ ПО
    ВТ_ДокТч.Номенклатура.Наименование,
    ПорядокСписания,
    ПартияМоментВремени
ИТОГИ
    СУММА(КоличествоИзДокумента),
    СУММА(КоличествоОстаток)
ПО
    НоменклатураИзДокумента,
    ПартияИзДокумента,
    НоменклатураОстатков,
    ПартияОстатков,
    ПорядокСписания,
    ПартияМоментВремени
1 Tolstiy Beremenniy
 
24.12.18
04:05
И почему задваиваются записи в запросе?


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

СГРУППИРОВАТЬ ПО
    ПеремещениеТоваровСписокНоменклатуры.Номенклатура,
    ПеремещениеТоваровСписокНоменклатуры.Партия
;

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

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

СГРУППИРОВАТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура,
    ВТ_ОстаткиПартий.Партия

УПОРЯДОЧИТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура.Наименование
ИТОГИ
    СУММА(КоличествоОстаток)
ПО
    НоменклатураОстатков,
    ПартияОстатков
2 Tolstiy Beremenniy
 
24.12.18
04:15
Вот запрос, почему записи задвоены. я кручу эти запросы
пытаюсь получить нормальную выборку. Есть номенклатура
есть партия, есть количество из регистра, есть количество
из документа.

Но в чем причина задвоения записей? Подскажите пожалуйста?


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

СГРУППИРОВАТЬ ПО
    ПеремещениеТоваровСписокНоменклатуры.Номенклатура,
    ПеремещениеТоваровСписокНоменклатуры.Партия
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ОстаткиПартий.Номенклатура КАК НоменклатураОстатков,
    СУММА(ВТ_ОстаткиПартий.КоличествоОстаток) КАК КоличествоОстаток,
    ВТ_ОстаткиПартий.Партия КАК ПартияОстатков,
    МАКСИМУМ(ВТ_ДокТч.Количество) КАК Количество,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ КАК ПорядокСписания
ИЗ
    ВТ_ДокТч КАК ВТ_ДокТч
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий
        ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура

СГРУППИРОВАТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура,
    ВТ_ОстаткиПартий.Партия,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ

УПОРЯДОЧИТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура.Наименование,
    ПорядокСписания,
    ВТ_ОстаткиПартий.Партия.МоментВремени
ИТОГИ
    СУММА(КоличествоОстаток),
    СУММА(Количество)
ПО
    НоменклатураОстатков,
    ПартияОстатков
3 Tolstiy Beremenniy
 
24.12.18
04:30
Вот вроде в запросе нормальная выборка, такую можно перебирать?


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

СГРУППИРОВАТЬ ПО
    ПеремещениеТоваровСписокНоменклатуры.Номенклатура,
    ПеремещениеТоваровСписокНоменклатуры.Партия
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ОстаткиПартий.Номенклатура КАК НоменклатураОстатков,
    ВТ_ОстаткиПартий.Партия КАК ПартияОстатков,
    СУММА(ВТ_ОстаткиПартий.КоличествоОстаток) КАК КоличествоОстаток,
    СУММА(ВТ_ДокТч.Количество) КАК Количество,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ КАК ПорядокСписания
ИЗ
    ВТ_ДокТч КАК ВТ_ДокТч
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПартий КАК ВТ_ОстаткиПартий
        ПО ВТ_ДокТч.Номенклатура = ВТ_ОстаткиПартий.Номенклатура

СГРУППИРОВАТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура,
    ВТ_ОстаткиПартий.Партия,
    ВЫБОР
        КОГДА ВТ_ДокТч.Партия = ВТ_ОстаткиПартий.Партия
            ТОГДА 1
        ИНАЧЕ 2
    КОНЕЦ

УПОРЯДОЧИТЬ ПО
    ВТ_ОстаткиПартий.Номенклатура.Наименование,
    ПорядокСписания,
    ВТ_ОстаткиПартий.Партия.МоментВремени
ИТОГИ
    СУММА(КоличествоОстаток),
    СУММА(Количество)
ПО
    НоменклатураОстатков
4 Tolstiy Beremenniy
 
24.12.18
04:49
Задваиваться записи начинают когда я добавляю партию
в итог. если только номенклатура то нормально.
А если я не добавлю партию, как я буду обходить результат
по группировкам, если там не будет партии?