Как лучше вытащить последнюю цену закупки

1. AndKovalchuk 192 28.12.20 11:28 Сейчас в теме
Есть УНФ , последняя версия. У меня попросили в отчете по продажам добавить колонку " последняя цена закупки". Понятно, что ее можно взять из оборотного регистра "Закупки", но это в том случае, если были закупки в периоде отчета, а если их не было, то откуда взять такую цену? Подскажите...
По теме из базы знаний
Найденные решения
16. uno-c 235 28.12.20 17:23 Сейчас в теме
(11) Период вынести в запрос .СрезПоследних(&ЦеныНаДату, ). Потом в настройках СКД во вкладке Параметры его заполнить выражением, сославшись на другой параметр: Имя - ЦеныНаДату, в колонке Выражение - &ИмяДругогоПараметра (например &КонецПериода, или какой параметр там у Вас на вкладке СКД-Параметры отвечает за последнюю дату отчета)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. suepifanov 967 28.12.20 12:31 Сейчас в теме
(1) из регистра "ЦеныНоменклатурыКонтрагентов", брать срез последних на конец периода отчета.
IChe; AndKovalchuk; +2 Ответить
2. Swetlana 25 28.12.20 11:35 Сейчас в теме
Если не было закупок то нет и продаж по нему, либо это товар из производства. Тогда нужно анализировать другой регистр. Но в этом регистре товар чисто по себестоимости
3. uno-c 235 28.12.20 11:40 Сейчас в теме
Почему именно в периоде отчета? В любом периоде - лишь бы была в регистре. Если несколько вариантов цены - взять последний.
5. AndKovalchuk 192 28.12.20 14:47 Сейчас в теме
(3)не есть хороший вариант. Замедляет и очень существенно скорость формирования отчета.
6. IChe 28.12.20 14:58 Сейчас в теме
(5)Если используется регистрация цен поставщика, то см. (4).
(3) абсолютно прав. Сделай отдельную выборку с группировкой по номенклатуре, и максимальным периодом. И из регистра получай запись с этими параметрами.
AndKovalchuk; +1 Ответить
8. AndKovalchuk 192 28.12.20 16:24 Сейчас в теме
(6) Ну вот прикрутил левое соединение к запросу СКД

        ....
        ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки
	
	ИЗ
	РегистрНакопления.Продажи.Обороты(, , Авто, ) КАК ПродажиОбороты
		{ЛЕВОЕ СОЕДИНЕНИЕ ПроданныеНаборы КАК ПроданныеНаборы
		ПО ПродажиОбороты.Документ = ПроданныеНаборы.Документ
			И ПродажиОбороты.НоменклатураНабора = ПроданныеНаборы.НоменклатураНабора
			И ПродажиОбороты.ХарактеристикаНабора = ПроданныеНаборы.ХарактеристикаНабора}
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
		ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
			И ПродажиОбороты.Характеристика = ЦеныНоменклатурыКонтрагентовСрезПоследних.Характеристика
Показать


Но при формировании отчета ругается на
Ошибка обработки представления "РегистрСведений.ЦеныКонтрагентов.СрезПоследних: Несоответствие типов (параметр Номер 1)

Подозреваю , что не удалось найти цену контрагента в регистре. И как тут проверить на NULL?
9. IChe 28.12.20 16:40 Сейчас в теме
(8)
Ориентируясь по скриншоту, нужно указать в поле период на какой момент времени берется срез последних.
По второму вопросу: ЕстьNULL(). Очень полезная вещь.
Прикрепленные файлы:
AndKovalchuk; +1 Ответить
11. AndKovalchuk 192 28.12.20 16:46 Сейчас в теме
(9)Но это запрос СКД там период в параметрах СКД.
12. AndKovalchuk 192 28.12.20 16:50 Сейчас в теме
(11)Скорее всего соединять нужно не в запросе, а два набора данных.
13. uno-c 235 28.12.20 16:51 Сейчас в теме
(11) IsNULL(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,0) КАК ЦенаПокупки
AndKovalchuk; +1 Ответить
14. IChe 28.12.20 16:56 Сейчас в теме
(11) Просто указав параметры здесь, мы сокращаем количество данных полученных для обработки.
Посмотри статью:
https://1cguide.ru/obuchenie-yazyku-zaprosov/konstruktor-zaprosov-1s.html/6
19. AndKovalchuk 192 29.12.20 17:42 Сейчас в теме
(14) тут работает компоновщик данных. То есть параметры заранее не известны.
15. IChe 28.12.20 16:59 Сейчас в теме
(11) Скриншот можно? и Какой тип передается в параметр.
18. AndKovalchuk 192 29.12.20 17:40 Сейчас в теме
(15) Скриншот в файле

{(6, 2)}: Ошибка обработки представления "РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних:Несоответствие типов (Параметр номер ""1"")"
<<?>>РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&П3, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних

ПЗ - это я так понимаю параметр запрос.

Добавил второй набор данных и описал его запросом

ВЫБРАТЬ
	&Дата КАК Дата,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки
{ВЫБРАТЬ
	Дата,
	Номенклатура.*,
	ЦенаПокупки}
ИЗ
	РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
{ГДЕ
	(&Дата) КАК Дата,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура.*,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки}
Показать



Только проблема, соединить два набора, потому как в первом выбирается период, а во втором дата.
Вот у меня такие прописаны связи наборов
Прикрепленные файлы:
21. IChe 30.12.20 11:22 Сейчас в теме
(18) Примерно в таком виде. ПродажиОбороты это твоя итоговая таблица запроса, и просто к ней цепляешь с левым соединением срез последних на дату. (Сбрось название отчета в УНФ, посмотрю подробней)

ВЫБРАТЬ
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Период КАК Период,
	ПродажиОбороты.Номенклатура КАК Номенклатура1,
	ПродажиОбороты.Характеристика КАК Характеристика,
	ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
	ПродажиОбороты.СуммаОборот КАК СуммаОборот
ИЗ
	РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
		ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура}
Показать
AndKovalchuk; +1 Ответить
22. AndKovalchuk 192 30.12.20 11:30 Сейчас в теме
(21) Отчет называется "Продажи" , а вариант отчета "Валовая прибыль по номенклатуре".

Если проблема в том, что формирование отчета и настройка параметров происходит через форму отчета "ФормаОтчетаУНФ". И там только один параметр "Период".
16. uno-c 235 28.12.20 17:23 Сейчас в теме
(11) Период вынести в запрос .СрезПоследних(&ЦеныНаДату, ). Потом в настройках СКД во вкладке Параметры его заполнить выражением, сославшись на другой параметр: Имя - ЦеныНаДату, в колонке Выражение - &ИмяДругогоПараметра (например &КонецПериода, или какой параметр там у Вас на вкладке СКД-Параметры отвечает за последнюю дату отчета)
7. uno-c 235 28.12.20 15:53 Сейчас в теме
(5) Если регистр сведений не ведется - то можно через регистр накопления попробовать ускорить - виртуальную таблицу сразу брать по нужной номенклатуре, использовать индексированную временную таблицу.
10. AndKovalchuk 192 28.12.20 16:45 Сейчас в теме
(7) Регистр сведений ведется.
17. uno-c 235 28.12.20 17:38 Сейчас в теме
(10) у РС ЦеныНоменклатурыКонтрагентов помимо Номенклатура и Характеристика есть еще измерение ВидЦенКонтрагента. Если по какой-нибудь номенклатуре зарегистрируется более одного вида цен - то в Вашем запросе из (8) обороты начнут задваиваться - т.к. по этой номенклатуре будет выводиться два вида цен с одним и тем же оборотом.
AndKovalchuk; suepifanov; +2 Ответить
20. AndKovalchuk 192 30.12.20 10:38 Сейчас в теме
(17) Это не решает проблему. Вот тут похожая ошибка рассматривается https://forum.infostart.ru/forum9/topic112492/
23. uno-c 235 30.12.20 11:44 Сейчас в теме
(20) Да, когда-то раньше сталкивался, что параметр запроса выставляешь в СКД, но безрезультатно - нужно еще в инструкции построителя вмешиваться, которые в фигурных скобках {}. Но последнее время вроде и без этого проходило. У Вас какая платформа?
AndKovalchuk; +1 Ответить
24. AndKovalchuk 192 30.12.20 12:16 Сейчас в теме
26. uno-c 235 30.12.20 12:58 Сейчас в теме
(24)
8.3.14.2095
Пробовал недавно на 8.3.17.1851 - там к инструкциям построителя обращаться не пришлось. По крайней мере посмотрел результаты без добавок инструкций пострителя - вернуло то, что ожидал.
25. AndKovalchuk 192 30.12.20 12:56 Сейчас в теме
Заработало. Спасибо.
Вот тут запрос второй набора данных
ВЫБРАТЬ
	&Период1 КАК Период1,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки
{ВЫБРАТЬ
	Период1,
	Номенклатура.*,
	ЦенаПокупки}
ИЗ
	РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Период1 {(&Период1)}, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
{ГДЕ
	(&Период1) КАК Период1,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура.*,
	ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена КАК ЦенаПокупки}
Показать


Связь наборов по Номенклатуре.
Прикрепленные файлы:
Оставьте свое сообщение

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