Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как получить для каждой номенклатуры в остатке последнюю партию.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
DrLivsi
Всем привет!
Нужно для каждой номенклатуры из остатка, вывести только последний документ партии и цену из него. Вот написал запрос, но он не всегда выводит последнюю партию, иногда показывает документ полугодичной давности, закономерности нет никакой...
Помогите разобраться.

Конфигурация дописанная УТП.

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

УПОРЯДОЧИТЬ ПО
    Номенклатура
logist
МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата) КАК ДокументОприходования,

не?
Ardi
Подзапрос 1 - Таблица1: выбираем пары Номенклатура/Последний документ.
Подзапрос 2 - Таблица2: вида Номенклатура/Документ/сумма/количество
Подзапрос 3 - делаем левое соединение таблицы 1 и таблицы 2.
Подзапрос 4 - клеим с остатками.

(Показал сам принцип, кво. подзапросов можно сделать меньше)
DrLivsi
Цитата(logist @ 22.12.13, 19:39) необходимо зарегистрироваться для просмотра ссылки
МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата) КАК ДокументОприходования,

не?


Да, вроде все верно, выводит дату последнего документа партии, но в поле" Документ" (ссылка на док. партии) все равно поступление полугодичной давности. Это когда добавляю документ в суммируемые поля:
МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования) КАК ДокументОприходования
. А когда добавляю в групповое поле, то выводит все поступления по номенклатуре. Хотелось бы получить правильную ссылку на документ...

Ardi, вроде все так и сделал. Но либо ссылка на документ не выводится, либо попадают все документы.
Ardi
Цитата(DrLivsi @ 22.12.13, 20:23) необходимо зарегистрироваться для просмотра ссылки
вроде все так и сделал

Всё не так. Вообще. Совсем.
Zaval
Зачем ТоварыНаСкладах, если в ПартииТоваровНаСкладах есть все необходимое?
Цитата(DrLivsi @ 22.12.13, 19:33) необходимо зарегистрироваться для просмотра ссылки
вывести только последний документ партии и цену из него

По-моему, не нужно искать макс дату. Упорядочить по убыванию документов и "ВЫБРАТЬ 1".
DrLivsi
Цитата(Ardi @ 22.12.13, 19:51) необходимо зарегистрироваться для просмотра ссылки
Подзапрос 1 - Таблица1: выбираем пары Номенклатура/Последний документ.


Вот с этим как раз и возникла трудность, вот подзапрос:
ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования) КАК ДокументОприходования,
    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата) КАК ДокументОприходованияДата
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты

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


В результате получаю:
---------------------------------------------------------------------------------
|Номенклатура_1 | 13.08.2013 | Поступление_№1 01..3.2013|

Цитата(Zaval @ 22.12.13, 21:53) необходимо зарегистрироваться для просмотра ссылки
Зачем ТоварыНаСкладах, если в ПартииТоваровНаСкладах есть все необходимое?

По-моему, не нужно искать макс дату. Упорядочить по убыванию документов и "ВЫБРАТЬ 1".


По партиям очень большие несоответствие с реальным остатком, поэтому количество берется из ТоварыНаСкладах.
Если я не ошибаюсь, то при "выбрать 1" запрос вернет только одну строку для первой попавшейся номенклатуры.
Ardi
Цитата(DrLivsi @ 22.12.13, 22:02) необходимо зарегистрироваться для просмотра ссылки
В результате получаю:---------------------------------------------------------------------------------|Номенклатура_1 | 13.08.2013 | Поступление_№1 01..3.2013|

Значит максимум работает с датой. С документом не работает. Объединять по дате и номенклатуре из одной таблицы и дате документа и номенклатуре из другой.
alex040269
Цитата(DrLivsi @ 22.12.13, 22:02) необходимо зарегистрироваться для просмотра ссылки
Если я не ошибаюсь, то при "выбрать 1" запрос вернет только одну строку для первой попавшейся номенклатуры.

Упорядочит выборку и вернет первую запись
DrLivsi
Цитата(Ardi @ 22.12.13, 22:39) необходимо зарегистрироваться для просмотра ссылки
Значит максимум работает с датой. С документом не работает. Объединять по дате и номенклатуре из одной таблицы и дате документа и номенклатуре из другой.


Блин точно, добавил связь таблиц по дате документа. Большое спасибо Ardi!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.