Имя: Пароль:
1C
1С v8
Что не так в запросе. Серию по срок годности получить.
0 zippygrill
 
09.10.13
18:36
Пытаюсь получить для номенклатуры серию с наивысшей срок годности по оси времени. Сейчас результат выдает к одной номенклатуры из втОстатки все серии.
ВЫБРАТЬ
    ТоварыВНТТОстатки.Номенклатура,
    СУММА(ТоварыВНТТОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ втОстатки
ИЗ
    РегистрНакопления.ТоварыВНТТ.Остатки(
            &Граница,
            Склад = &Склад
                И ВЫБОР
                    КОГДА &ФлажокТолькоНоменклатураУчетПоСериям
                        ТОГДА Номенклатура.ВестиУчетПоСериям = ИСТИНА
                    ИНАЧЕ ИСТИНА
                КОНЕЦ) КАК ТоварыВНТТОстатки

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

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

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

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

СГРУППИРОВАТЬ ПО
    втМаксСерия.СерияНоменклатуры,
    втОстатки.Номенклатура
1 zippygrill
 
09.10.13
18:38
подозреваю что из за группировки по Владельцу и Ссылки во втором запросе
2 Enders
 
09.10.13
18:39
Пытаюсь получить для номенклатуры серию с наивысшей срок годности по оси времени. Сейчас результат выдает к одной номенклатуры из втОстатки все серии.

ТАк вы ж группируете по серии и номенклатуре Оо.
Сгруппируйте по номенклатуре, получите макс срок годности. Потом к нему привяжите серию. А потом всё это дело к остаткам.
3 Rie
 
09.10.13
18:40
(1) Правильно подозреваешь.
Выбери просто максимальный срок годности.
Потом - соедини с сериями по владельцу и срокгодности = максимальный срок годности.
4 zippygrill
 
09.10.13
18:58
не получается

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СерииНоменклатуры.Ссылка КАК СерияНоменклатуры
ПОМЕСТИТЬ вт2
ИЗ
    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ вт1 КАК вт1
        ПО СерииНоменклатуры.Ссылка = вт1.СерияНоменклатуры
            И СерииНоменклатуры.СрокГодности = вт1.СрокГодности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втОстатки.Номенклатура,
    вт2.СерияНоменклатуры,
    втОстатки.КоличествоОстаток
ИЗ
    втОстатки КАК втОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2
        ПО втОстатки.Номенклатура = вт2.СерияНоменклатуры.Владелец
5 viktor_vv
 
09.10.13
19:10
Тут у тебя совсем не срок годности

КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СерииНоменклатуры.СрокГодности) КАК СрокГодности,
6 zippygrill
 
09.10.13
19:11
(5) да я заметил исправляю
7 Rie
 
09.10.13
19:12
(4)
ВЫБРАТЬ
    СерииНоменклатуры.Владелец КАК Номенклатура
,   МАКСИМУМ(СерииНоменклатуры.СрокГодности) КАК МаксСрокГодности
ПОМЕСТИТЬ МаксСрокиГодности
ИЗ
    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
СГРУППИРОВАТЬ ПО
    СерииНоменклатуры.Владелец;
ВЫБРАТЬ
    СерииНоменклатуры.Ссылка
ПОМЕСТИТЬ СерииСМаксСрокомГодности
ИЗ
    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
    СОЕДИНЕНИЕ МаксСрокиГодности
        ПО СерииНоменклатуры.СрокГодности = МаксСрокиГодности.МаксСрокГодности
        М СерииНоменклатуры.Владелец = МаксСрокиГодности.Номенклатура
8 zippygrill
 
09.10.13
19:12
ВЫБРАТЬ
    ТоварыВНТТОстатки.Номенклатура,
    СУММА(ТоварыВНТТОстатки.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ втОстатки
ИЗ
    РегистрНакопления.ТоварыВНТТ.Остатки(
            &Граница,
            Склад = &Склад
                И ВЫБОР
                    КОГДА &ФлажокТолькоНоменклатураУчетПоСериям
                        ТОГДА Номенклатура.ВестиУчетПоСериям = ИСТИНА
                    ИНАЧЕ ИСТИНА
                КОНЕЦ) КАК ТоварыВНТТОстатки

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

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

СГРУППИРОВАТЬ ПО
    СерииНоменклатуры.Владелец
;

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

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

СГРУППИРОВАТЬ ПО
    втСерия.СерияНоменклатуры,
    втОстатки.Номенклатура
9 zippygrill
 
09.10.13
19:18
эх близко был блин.
10 zippygrill
 
09.10.13
19:18
спасибо (7)
11 zippygrill
 
09.10.13
19:41
дублируется номенклатура.

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

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

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

СГРУППИРОВАТЬ ПО
    СерииНоменклатуры.Владелец
;

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

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

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

УПОРЯДОЧИТЬ ПО
    втОстатки.Номенклатура.Наименование
12 zippygrill
 
09.10.13
19:43
может быть из за того что не везде поле СрокГодности заполнен
13 Rie
 
09.10.13
19:45
(12) Либо у одной номенклатуры есть несколько серий с одним и тем же сроком годности. Но тут уж надо определиться - какую серию (по каким признакам) в таком случае выбирать.
14 viktor_vv
 
09.10.13
20:22
(12) Вот здесь

ИЗ
    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ втМаксСрокГодности КАК втМаксСрокГодности
        ПО СерииНоменклатуры.Владелец = втМаксСрокГодности.Владелец
            И СерииНоменклатуры.СрокГодности = втМаксСрокГодности.СрокГодности


вместо левого, внутреннее соединение плюс (13).
15 viktor_vv
 
09.10.13
20:23
(14) Как вариант

ВЫБРАТЬ
    Максимум(СерииНоменклатуры.Ссылка) КАК СерияНоменклатуры,
    СерииНоменклатуры.Владелец
ПОМЕСТИТЬ втСерииСМаксСрокомГодности
ИЗ
    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
        Внутреннее СОЕДИНЕНИЕ втМаксСрокГодности КАК втМаксСрокГодности
        ПО СерииНоменклатуры.Владелец = втМаксСрокГодности.Владелец
            И СерииНоменклатуры.СрокГодности = втМаксСрокГодности.СрокГодности
Сгруппировать ПО СерииНоменклатуры.Владелец
;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn