Добрый день, Коллеги! Довольно простой вопрос по простому запросу, но что-то упускаю. Есть регистр цен, есть регистр остатков. Нужно свести в одну таблицу остаток и цену. Принцип: если на товар была цена (хоть одна запись в регистре стоимости) он должен попасть в таблицу, даже если остаток нулевой. В моем запросе если остатка нет - позиция из таблицы выпадает. Там еще есть соединение с другим регистром, но это к делу не относится (мне кажется).
Запрос.Текст = "ВЫБРАТЬ
| СтоимостьНоменклатурыСрезПоследних.Розничная КАК Цена,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура КАК Наименование,
| СтоимостьНоменклатурыСрезПоследних.Размер,
| СтоимостьНоменклатурыСрезПоследних.Цвет,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.ЕД КАК ЕД,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.ШтрихПроизводителя КАК ШтрихПроизводителя,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.Код КАК ШтрихКод,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.КлючевоеСлово КАК КлючевоеСлово,
| СтоимостьНоменклатурыСрезПоследних.Закупочная КАК ЗакупочнаяСтоимость,
| СкладОстатки.КолВоОстаток КАК Остаток
|ПОМЕСТИТЬ ЦеныОстатки
|ИЗ
| РегистрСведений.СтоимостьНоменклатуры.СрезПоследних КАК СтоимостьНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Склад.Остатки(&НаДату, ) КАК СкладОстатки
| ПО (СтоимостьНоменклатурыСрезПоследних.Номенклатура = СкладОстатки.Номенклатура)
|ГДЕ
| СкладОстатки.Отдел = &Отдел
| И СтоимостьНоменклатурыСрезПоследних.Размер = СкладОстатки.Размер
| И СтоимостьНоменклатурыСрезПоследних.Цвет = СкладОстатки.Цвет
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЦеныОстатки.Цена,
| ЦеныОстатки.Наименование,
| ЦеныОстатки.Размер,
| ЦеныОстатки.Цвет,
| ЦеныОстатки.ШтрихПроизводителя,
| ЦеныОстатки.ШтрихКод,
| ЦеныОстатки.КлючевоеСлово,
| ЦеныОстатки.Остаток,
| ЦеныОстатки.ЗакупочнаяСтоимость,
| Акции.Скидка
|ИЗ
| ЦеныОстатки КАК ЦеныОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Акции КАК Акции
| ПО (Акции.Номенклатура = ЦеныОстатки.Наименование)"
ПоказатьПо теме из базы знаний
- История оптимизации одного большого запроса средствами MSSQL Profiler и 1С
- Что делает "В ИЕРАРХИИ" в запросе?
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Генератор текста запроса
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Какая практическая ценность текущего принципа: если на товар была цена (хоть одна запись в регистре стоимости) он должен попасть в таблицу, даже если остаток нулевой? Ибо обычно наоборот: выбирается цена к остатку.
Это тестовое задание на вакансию?
Тут нужно формировать таблицу дат, стоимости и ключей по РегистрСведений.СтоимостьНоменклатуры (не срез последних), помещать ее во временную таблицу, индексировать по периоду и ключам.
Далее нужно выбрать уникальные ключи в следующую временную таблицу.
Далее нужно брать РегистрНакопления.Склад. но не виртуальную таблицу Остатки, а ОстаткиИОбороты с периодичностью как установлено в метаданных Р/С но делать ее из физической таблицы регистра, а не виртуальной ОстаткиИОбороты, загружая в нее кроссджойном ключи, выбранные в предыдущей таблице, и ограничивая минимальным и максимальным периодом из первой временной таблицы, выбирая КоличествоКонечныйОстаток, ключи и период и помещать результат в третью временную таблицу.
Далее соединить левым соединением первую и третью временную таблицы по периоду и ключам.
Это тестовое задание на вакансию?
Тут нужно формировать таблицу дат, стоимости и ключей по РегистрСведений.СтоимостьНоменклатуры (не срез последних), помещать ее во временную таблицу, индексировать по периоду и ключам.
Далее нужно выбрать уникальные ключи в следующую временную таблицу.
Далее нужно брать РегистрНакопления.Склад. но не виртуальную таблицу Остатки, а ОстаткиИОбороты с периодичностью как установлено в метаданных Р/С но делать ее из физической таблицы регистра, а не виртуальной ОстаткиИОбороты, загружая в нее кроссджойном ключи, выбранные в предыдущей таблице, и ограничивая минимальным и максимальным периодом из первой временной таблицы, выбирая КоличествоКонечныйОстаток, ключи и период и помещать результат в третью временную таблицу.
Далее соединить левым соединением первую и третью временную таблицы по периоду и ключам.
вот это (ГДЕ надо убрать)
надо поместить в условие связи ПО
|ГДЕ
| СкладОстатки.Отдел = &Отдел
| И СтоимостьНоменклатурыСрезПоследних.Размер = СкладОстатки.Размер
| И СтоимостьНоменклатурыСрезПоследних.Цвет = СкладОстатки.Цвет
надо поместить в условие связи ПО
|ИЗ
| РегистрСведений.СтоимостьНоменклатуры.СрезПоследних КАК СтоимостьНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Склад.Остатки(&НаДату, Отдел = &Отдел) КАК СкладОстатки
| ПО (СтоимостьНоменклатурыСрезПоследних.Номенклатура = СкладОстатки.Номенклатура)
| И СтоимостьНоменклатурыСрезПоследних.Размер = СкладОстатки.Размер
| И СтоимостьНоменклатурыСрезПоследних.Цвет = СкладОстатки.Цвет
(3) Результат тот же!
Запрос.Текст = "ВЫБРАТЬ
| СтоимостьНоменклатурыСрезПоследних.Розничная КАК Цена,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура КАК Наименование,
| СтоимостьНоменклатурыСрезПоследних.Размер,
| СтоимостьНоменклатурыСрезПоследних.Цвет,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.ЕД КАК ЕД,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.ШтрихПроизводителя КАК ШтрихПроизводителя,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.Код КАК ШтрихКод,
| СтоимостьНоменклатурыСрезПоследних.Номенклатура.КлючевоеСлово КАК КлючевоеСлово,
| СтоимостьНоменклатурыСрезПоследних.Закупочная КАК ЗакупочнаяСтоимость,
| СкладОстатки.КолВоОстаток КАК Остаток
|ПОМЕСТИТЬ ЦеныОстатки
|ИЗ
| РегистрСведений.СтоимостьНоменклатуры.СрезПоследних КАК СтоимостьНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Склад.Остатки(&НаДату, ) КАК СкладОстатки
| ПО СтоимостьНоменклатурыСрезПоследних.Номенклатура = СкладОстатки.Номенклатура
| И СтоимостьНоменклатурыСрезПоследних.Размер = СкладОстатки.Размер
| И СтоимостьНоменклатурыСрезПоследних.Цвет = СкладОстатки.Цвет
|ГДЕ
| СкладОстатки.Отдел = &Отдел
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЦеныОстатки.Цена,
| ЦеныОстатки.Наименование,
| ЦеныОстатки.Размер,
| ЦеныОстатки.Цвет,
| ЦеныОстатки.ШтрихПроизводителя,
| ЦеныОстатки.ШтрихКод,
| ЦеныОстатки.КлючевоеСлово,
| ЦеныОстатки.Остаток,
| ЦеныОстатки.ЗакупочнаяСтоимость,
| Акции.Скидка
|ИЗ
| ЦеныОстатки КАК ЦеныОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Акции КАК Акции
| ПО (Акции.Номенклатура = ЦеныОстатки.Наименование)
Показать
Это тестовое задание на вакансию?
Упаси Будда, никогда такой фигней не занимался.
Практическая задача: видеть текущий остаток и цену. Если остатка нет, всё равно нужно видеть последнюю цену.
В чем смысл вашего метода, кроме сложности? Если бы нужна была история цен и остатков, ок что такое бы имело смысл. А так есть список номенклатуры с последними ценами, по нему получаем остаток (если есть). Если номенклатуры нет в регистре цен, она никогда не поступала в продажу и нам не интересна.
Упаси Будда, никогда такой фигней не занимался.
Практическая задача: видеть текущий остаток и цену. Если остатка нет, всё равно нужно видеть последнюю цену.
В чем смысл вашего метода, кроме сложности? Если бы нужна была история цен и остатков, ок что такое бы имело смысл. А так есть список номенклатуры с последними ценами, по нему получаем остаток (если есть). Если номенклатуры нет в регистре цен, она никогда не поступала в продажу и нам не интересна.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот