Здравствуйте! Стоит задача доработать отчет ОстаткиИОтборыТМЦ. Нужно выводить колонку с Ценой Номенклатур. Пытался доделать в типовом отчете, но успехов ноль. С горем пополам нацарапал Внешний отчет на СКД с таким вот запросом:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Склад,
ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
ХозрасчетныйОстаткиИОбороты.Организация КАК Организация,
ВЫБОР
КОГДА &ЕстьТипЦен
ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
КОНЕЦ КАК СуммаНачальныйОстаток,
ВЫБОР
КОГДА &ЕстьТипЦен
ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
КОНЕЦ КАК СуммаКонечныйОстаток,
ВЫБОР
КОГДА &ЕстьТипЦен
ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
КОНЕЦ КАК СуммаОборотДт,
ВЫБОР
КОГДА &ЕстьТипЦен
ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
КОНЕЦ КАК СуммаОборотКт,
ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
ВЫБОР
КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
ТОГДА NULL
ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор
КОНЕЦ КАК Регистратор,
ХозрасчетныйОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
ХозрасчетныйОстаткиИОбороты.Субконто1.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
ВЫБОР
КОГДА &ЕстьТипЦен
ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
КОГДА ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток > 0
ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток / ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК Цена
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, , Счет В ИЕРАРХИИ (&Счет), &Субконто, {(Организация В (&Организации)), (Субконто1 В ИЕРАРХИИ (&Номенклатура))}) КАК ХозрасчетныйОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонецПериода)}, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ЦеныНоменклатурыСрезПоследних.Номенклатура
Показать
Колонка появилась и начала выводить цены, однако выводит не те значения, что хотелось. Структура отчета такова: сначала идет Склад, далее Номенклатура и следом документ являющийся Регистратором. Нужно, чтобы выводился срез с даты документа Регистратора. Подскажите, пожалуйста, как доработать запрос.
(2) Например, рассматриваю определенную единицу Номенклатуры за заданный период. Сейчас выдает ее Цену 129,55. В документе Регистраторе же стоит стоимость этой единицы номенклатуры 129,88.
Получается мой запрос подхватывает срез цены за конец периода, а нужно за дату документа Регистратора.
8.
victorree
2509.04.21 14:59 Сейчас в теме+0.25 $m
(7) Сначала выводишь тот пакет что привел в заголовке, только без цен номенклатуры и добавляешь в него даты регистратора.
Вторым пакетом соединяешь результат первого пакета с регистром сведений ценыноменклатуры (не срезом а физической таблицой) по условию номенклатура= номенклатура и датарегистратора (поле из первого пакета) > ЦеныНоменклатуры.Период. Поля в этом пакете должны быть Номенклатура, ДатаРегистратора ЦеныНоменклатуры.Период и сама Цена
Третьим пакетом группируешь результат второго пакета по "Номенклатура, ДатаРегистратора" и суммируемое поле делаешь МАКСИМУМ(ЦеныНоменклатуры.Период)(ДатаУстановкиНаДатуРегистратора).
Четвертым пакетом ВНУТРЕННИМ СОЕДИНЕНИЕМ соединяешь результат второго и третьего пакета по условию Номенклатура = Номенклатура И ДатаРегистратора = ДатаРегистратора И ЦеныНоменклатуры.Период = ДатаУстановкиНаДатуРегистратора ну и вытаскиваешь все поля из второго пактета. В итоге в этом пакете у тебя искомая цена.
И в итоге в последнем пакете соединяешь первый пакет с четвертным левым соединением по условию Номенклатура = Номенклатура, ДатаРегистратора = ДатаРегистратора.
Как то так вроде нигде не ошибся