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