В запросе есть проблемы корректности: у таблицы «Остатки» нет поля периода строки, а коррелированный подзапрос в показанном виде не следует переносить из SQL в язык запросов 1С.
Оптимален ли запрос
В запросе есть проблемы корректности: у таблицы «Остатки» нет поля периода строки, а коррелированный подзапрос в показанном виде не следует переносить из SQL в язык запросов 1С.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Оптимален ли запрос
Запрос.Текст = "ВЫБРАТЬ ОстаткиТоваров.Номенклатура КАК Номенклатура, Цены.Цена КАК ЦенаПрошлогоМесяца ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(...) КАК ОстаткиТоваров ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цены ПО Цены.Номенклатура = ОстаткиТоваров.Номенклатура И Цены.Период В ( ВЫБРАТЬ МАКСИМУМ(ЦеныПрошлогоМесяца.Период) ИЗ РегистрСведений.Цена КАК ЦеныПрошлогоМесяца ГДЕ ЦеныПрошлогоМесяца.Период < НАЧАЛОПЕРИОДА(ОстаткиТоваров.Период, МЕСЯЦ) И ЦеныПрошлогоМесяца.Номенклатура = ОстаткиТоваров.Номенклатура ) ГДЕ ОстаткиТоваров.Склад = &Склад";
Ответ
В запросе есть проблемы корректности: у таблицы «Остатки» нет поля периода строки, а коррелированный подзапрос в показанном виде не следует переносить из SQL в язык запросов 1С.
Для единой даты отчёта заранее рассчитайте последний момент предыдущего месяца. Цены получите через СрезПоследних, а склад передайте в параметры виртуальной таблицы остатков:
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
Цены.Цена КАК ЦенаПрошлогоМесяца
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(
&ДатаОстатков, Склад = &Склад) КАК Остатки
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.Цена.СрезПоследних(
&КонецПрошлогоМесяца, ) КАК Цены
ПО Цены.Номенклатура = Остатки.Номенклатура
Пример предполагает периодический регистр цен, где номенклатура достаточна для однозначного выбора. Если есть вид цены, валюта или другие измерения, добавьте нужные отборы и связи, иначе строки размножатся. «Последняя известная цена к концу месяца» отличается от «цены, установленной именно в прошлом месяце»: это требование нужно уточнить.