Доработать запрос отчета в СКД для регистра сведений Цены Номенклатуры

1. rosenword 08.04.21 16:13 Сейчас в теме
Здравствуйте! Стоит задача доработать отчет ОстаткиИОтборыТМЦ. Нужно выводить колонку с Ценой Номенклатур. Пытался доделать в типовом отчете, но успехов ноль. С горем пополам нацарапал Внешний отчет на СКД с таким вот запросом:
ВЫБРАТЬ
	ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
	ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Склад,
	ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
	ХозрасчетныйОстаткиИОбороты.Организация КАК Организация,
	ВЫБОР
		КОГДА &ЕстьТипЦен
			ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
		ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток
	КОНЕЦ КАК СуммаНачальныйОстаток,
	ВЫБОР
		КОГДА &ЕстьТипЦен
			ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
		ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток
	КОНЕЦ КАК СуммаКонечныйОстаток,
	ВЫБОР
		КОГДА &ЕстьТипЦен
			ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
		ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
	КОНЕЦ КАК СуммаОборотДт,
	ВЫБОР
		КОГДА &ЕстьТипЦен
			ТОГДА ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
		ИНАЧЕ ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
	КОНЕЦ КАК СуммаОборотКт,
	ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
	ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
	ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
	ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
	ВЫБОР
		КОГДА ХозрасчетныйОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
			ТОГДА NULL
		ИНАЧЕ ХозрасчетныйОстаткиИОбороты.Регистратор
	КОНЕЦ КАК Регистратор,
	ХозрасчетныйОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
	ХозрасчетныйОстаткиИОбороты.Субконто1.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	ВЫБОР
		КОГДА &ЕстьТипЦен
			ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
		КОГДА ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток > 0
			ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток / ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Цена
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, , Счет В ИЕРАРХИИ (&Счет), &Субконто, {(Организация В (&Организации)), (Субконто1 В ИЕРАРХИИ (&Номенклатура))}) КАК ХозрасчетныйОстаткиИОбороты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонецПериода)}, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
		ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ЦеныНоменклатурыСрезПоследних.Номенклатура
Показать


Колонка появилась и начала выводить цены, однако выводит не те значения, что хотелось. Структура отчета такова: сначала идет Склад, далее Номенклатура и следом документ являющийся Регистратором. Нужно, чтобы выводился срез с даты документа Регистратора. Подскажите, пожалуйста, как доработать запрос.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. homer_ 79 08.04.21 16:27 Сейчас в теме
надо больше данных. Что значит не те суммы. По мне все должно работать.
Приведи пример.
3. rosenword 08.04.21 16:35 Сейчас в теме
(2) Например, рассматриваю определенную единицу Номенклатуры за заданный период. Сейчас выдает ее Цену 129,55. В документе Регистраторе же стоит стоимость этой единицы номенклатуры 129,88.
Получается мой запрос подхватывает срез цены за конец периода, а нужно за дату документа Регистратора.
4. homer_ 79 08.04.21 16:38 Сейчас в теме +0.25 $m
ну для этого надо сделать на каждый день
первую попавшуюся ссылку даю
https://infostart.ru/1c/articles/337365/
5. rosenword 08.04.21 16:41 Сейчас в теме
(4) Регистр сведений так же использовать срез последних?
6. homer_ 79 08.04.21 16:44 Сейчас в теме
нет. В примере замени имя регистра и все будет ок.
7. rosenword 08.04.21 17:55 Сейчас в теме
(6) Что-то не совсем понимаю как мне расположить Пакеты запросов относительно моего
8. victorree 25 09.04.21 14:59 Сейчас в теме +0.25 $m
(7) Сначала выводишь тот пакет что привел в заголовке, только без цен номенклатуры и добавляешь в него даты регистратора.
Вторым пакетом соединяешь результат первого пакета с регистром сведений ценыноменклатуры (не срезом а физической таблицой) по условию номенклатура= номенклатура и датарегистратора (поле из первого пакета) > ЦеныНоменклатуры.Период. Поля в этом пакете должны быть Номенклатура, ДатаРегистратора ЦеныНоменклатуры.Период и сама Цена
Третьим пакетом группируешь результат второго пакета по "Номенклатура, ДатаРегистратора" и суммируемое поле делаешь МАКСИМУМ(ЦеныНоменклатуры.Период)(ДатаУстановкиНаДатуРегистратора).
Четвертым пакетом ВНУТРЕННИМ СОЕДИНЕНИЕМ соединяешь результат второго и третьего пакета по условию Номенклатура = Номенклатура И ДатаРегистратора = ДатаРегистратора И ЦеныНоменклатуры.Период = ДатаУстановкиНаДатуРегистратора ну и вытаскиваешь все поля из второго пактета. В итоге в этом пакете у тебя искомая цена.
И в итоге в последнем пакете соединяешь первый пакет с четвертным левым соединением по условию Номенклатура = Номенклатура, ДатаРегистратора = ДатаРегистратора.
Как то так вроде нигде не ошибся
9. rosenword 09.04.21 15:13 Сейчас в теме
(8) Спасибо, попробую так
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот