Каталог решений - Запрос стоимости партии на даты документов одним запросом (УТ 10)

Запрос стоимости партии на даты документов одним запросом (УТ 10)

Запрос стоимости партии на даты документов одним запросом (УТ 10)

В наличии

Ниже приведен запрос, который получает стоимость партии на дату документа.
Такой запрос нужен, когда документ не делает движений по регистру Партии товаров.
В УТ10 это документ Перемещение товаров, Приходный и Расходный ордера при отключенной настройке "Вести учет партий в разрезе складов"

Категория:

Описание

Запрос составлен на примере документа Приходный ордер на товары.

В запросе есть виртуальная таблица, в которой получаем данные документов и потом к нему присоединяем слева Партии.ОстаткиИОбороты, чтобы получить период последнего измениения. Этот период должен быть максимальным, но меньше или равен дате документа.

Остались сомнения по получению остатка партии.

В данном случае Цена себестоимости = (НачСтоимость + ПриходСтоимость + КонСтоимость) / (НачКоличестов + ПриходКоличество + КонКоличество).

Возможно есть более оптимальные способы получения стоимости партии.

Любая критика приветствуется.


Текст запроса:

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Документы.ПериодДень,
    ВТ_Документы.Документ,
    ВТ_Документы.Номенклатура,
    ВТ_Документы.Количество,
    ВТ_Документы.Количество * ЕСТЬNULL(ВТ_Себестоимость.ЦенаСебестоимости, 0) КАК Себестоимость
ИЗ
    ВТ_Документы КАК ВТ_Документы
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Себестоимость КАК ВТ_Себестоимость
        ПО ВТ_Документы.Документ = ВТ_Себестоимость.Документ
            И ВТ_Документы.Номенклатура = ВТ_Себестоимость.Номенклатура
has been added to your cart:
Оформление заказа