Получение нулевых остатков из РегистраСвободныеОстаткиОстатки
Доброго времени суток!
Сегодня убил весь день, чтобы понять, как сделать, но совершенно ничего не понял..
Нужно получить нулевые остатки с регистра - СвободныеОстатки.
Если нет записи в регистре, то написать:
а) Недостающий склад
б) Остаток равен 0.
Мой запрос, который просто показывает склады и количество остатков на нём.
И пожалуйста, прямо для чайников.. Понимаю, что нужно сделать левое соединение, даже нашёл несколько примеров, но разобраться ума не хватает..
Сегодня убил весь день, чтобы понять, как сделать, но совершенно ничего не понял..
Нужно получить нулевые остатки с регистра - СвободныеОстатки.
Если нет записи в регистре, то написать:
а) Недостающий склад
б) Остаток равен 0.
Мой запрос, который просто показывает склады и количество остатков на нём.
ВЫБРАТЬ
| СвободныеОстаткиОстатки.Номенклатура.Код КАК НоменклатураКод,
| СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии,
| СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
| СвободныеОстаткиОстатки.Склад.Наименование КАК СкладНаименование
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
|ГДЕ
| СвободныеОстаткиОстатки.Номенклатура = &Номенклатура
ПоказатьИ пожалуйста, прямо для чайников.. Понимаю, что нужно сделать левое соединение, даже нашёл несколько примеров, но разобраться ума не хватает..
Найденные решения
(1)
ВЫБРАТЬ
СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
СвободныеОстаткиОстатки.Склад.Представление КАК Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура В (&Номенклатура)) КАК СвободныеОстаткиОстатки
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
ЕСТЬNULL(ВТ_Остатки.Склад, "Недостающий склад") КАК Склад,
ЕСТЬNULL(ВТ_Остатки.ВНаличии, 0) КАК ВНаличие
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО (ВТ_Остатки.Номенклатура = Товары.Ссылка)
ГДЕ
Товары.Ссылка В (&Номенклатура)
Показать
(27)
Лучше вот так
ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
| ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, 0) КАК Номенклатура
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура.Родитель = &Номенклатура) КАК СвободныеОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО СвободныеОстаткиОстатки.Склад = Склады.Ссылка
| И НЕ Склады.Ссылка = &Ссылка
| И Склады.ЭтоГруппа = &ЭтоГруппа
| И Склады.Родитель = &Родитель
Если надо убрать группы, то сразу в запросе и пишите "Склады.ЭтоГруппа = Ложь". Если нужны склады в определенной папке, то лучше написать "Склады.Ссылка В ИЕРАРХИИ (&ГруппаСкладов)"
Лучше вот так
ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
| ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, 0) КАК Номенклатура
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура.Родитель = &Номенклатура) КАК СвободныеОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО СвободныеОстаткиОстатки.Склад = Склады.Ссылка
| И НЕ Склады.Ссылка = &Ссылка
| И Склады.ЭтоГруппа = &ЭтоГруппа
| И Склады.Родитель = &Родитель
Если надо убрать группы, то сразу в запросе и пишите "Склады.ЭтоГруппа = Ложь". Если нужны склады в определенной папке, то лучше написать "Склады.Ссылка В ИЕРАРХИИ (&ГруппаСкладов)"
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
СвободныеОстаткиОстатки.Склад.Представление КАК Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура В (&Номенклатура)) КАК СвободныеОстаткиОстатки
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
ЕСТЬNULL(ВТ_Остатки.Склад, "Недостающий склад") КАК Склад,
ЕСТЬNULL(ВТ_Остатки.ВНаличии, 0) КАК ВНаличие
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО (ВТ_Остатки.Номенклатура = Товары.Ссылка)
ГДЕ
Товары.Ссылка В (&Номенклатура)
Показать
(6)
Большое вам спасибо, однако, если указывать Номенклатуру, то всё так же и остаётся, как было в моём запросе..
ВЫБРАТЬ
СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
СвободныеОстаткиОстатки.Склад.Представление КАК Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура В (&Номенклатура)) КАК СвободныеОстаткиОстатки
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
ЕСТЬNULL(ВТ_Остатки.Склад, "Недостающий склад") КАК Склад,
ЕСТЬNULL(ВТ_Остатки.ВНаличии, 0) КАК ВНаличие
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО (ВТ_Остатки.Номенклатура = Товары.Ссылка)
ГДЕ
Товары.Ссылка В (&Номенклатура)
ПоказатьСвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
СвободныеОстаткиОстатки.Склад.Представление КАК Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура В (&Номенклатура)) КАК СвободныеОстаткиОстатки
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
ЕСТЬNULL(ВТ_Остатки.Склад, "Недостающий склад") КАК Склад,
ЕСТЬNULL(ВТ_Остатки.ВНаличии, 0) КАК ВНаличие
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО (ВТ_Остатки.Номенклатура = Товары.Ссылка)
ГДЕ
Товары.Ссылка В (&Номенклатура)
Большое вам спасибо, однако, если указывать Номенклатуру, то всё так же и остаётся, как было в моём запросе..
Прикрепленные файлы:

(18) вот вариант для любого количества номенклатуры:
ВЫБРАТЬ
СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
СвободныеОстаткиОстатки.Склад КАК Склад,
СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличии
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура В (&Номенклатура)) КАК СвободныеОстаткиОстатки
ИНДЕКСИРОВАТЬ ПО
Склад,
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Склады.Ссылка КАК Склады,
Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТ_НоменклатураСклады
ИЗ
Справочник.Номенклатура КАК Номенклатура
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
ПО (ИСТИНА)
ГДЕ
Номенклатура.Ссылка В(&Номенклатура)
ИНДЕКСИРОВАТЬ ПО
Склады,
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_НоменклатураСклады.Номенклатура КАК Номенклатура,
ВТ_НоменклатураСклады.Склады КАК Склады,
ЕСТЬNULL(ВТ_Остатки.ВНаличии, 0) КАК ВНаличии
ИЗ
ВТ_НоменклатураСклады КАК ВТ_НоменклатураСклады
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
ПО (ВТ_НоменклатураСклады.Склады = ВТ_Остатки.Склад)
И (ВТ_НоменклатураСклады.Номенклатура = ВТ_Остатки.Номенклатура)
УПОРЯДОЧИТЬ ПО
Номенклатура,
Склады
Показать
(12) откуда в вашем запросе вообще возьмется пустой склад? Из попы на месте головы? Вы думаете в результате левого соединения по номенклатуре вам дадут еще и склады несуществующие в выборке? Нет, не дадут, это не так работает. В данном случае очень проблематично получить Null, почти невозможно.
А теперь отвечаю на вопрос. Из русского языка. Недостающий склад не обернут в кавычки, значит это не константа, а именно название склада, на котором нет товара.
А теперь отвечаю на вопрос. Из русского языка. Недостающий склад не обернут в кавычки, значит это не константа, а именно название склада, на котором нет товара.
(19)
Ей. Полегче. Если не знаете как работает левое соединение, то не обязательно об этом говорить, да еще в таком тоне.
И мой код основывался на получение складов по несуществующей записи номенклатуры в остатках.
откуда в вашем запросе вообще возьмется пустой склад? Из попы на месте головы? Вы думаете в результате левого соединения по номенклатуре вам дадут еще и склады несуществующие в выборке? Нет, не дадут, это не так работает. В данном случае очень проблематично получить Null, почти невозможно.
Ей. Полегче. Если не знаете как работает левое соединение, то не обязательно об этом говорить, да еще в таком тоне.
И мой код основывался на получение складов по несуществующей записи номенклатуры в остатках.
(21)Ваш запрос легко проверяется в консоли на любой рабочей УТ. Вы в первом подзапросе получили остатки с отбором по конкретной номенклатуре, во втором запросе выбираете из справочника номенклатуры и по номенклатуре соединяете. Откуда там возьмется неизвестная номенклатура? Вы имели в виду несуществующей записи склада в остатках. Ну так и соединяйте со складами. И не стоит делать такую виртуальную таблицу, если в запросенет группировки данных или выбора данных для условия других запросов, это таблица-паразит.
(24) вот. Теперь по делу.
Соединять виртуальную таблицу остатки с физической не рекомендуется. Не будут работать индексы.
Далее, делать полное соединение это ... ну очень плохо. Особенно для базы на Postgree.
Ну и предполагал, что выборка будет не по одной номенклатуре, а по списку (в коде можно заметить).
Соединять виртуальную таблицу остатки с физической не рекомендуется. Не будут работать индексы.
Далее, делать полное соединение это ... ну очень плохо. Особенно для базы на Postgree.
Ну и предполагал, что выборка будет не по одной номенклатуре, а по списку (в коде можно заметить).
тут нужно использовать логику. Есть такая наука...
РегистрНакопления.СвободныеОстатки.Остатки - не может показать того, чего на остатках нет. Логично же?
Значит, информацию надо брать не оттуда. Логично?
А откуда? Если нам нужны все товары и все склады, то надо брать информацию из таблиц товаров и складов. А остатки уже к ним привязывать.
Какой вывод?
РегистрНакопления.СвободныеОстатки.Остатки - не может показать того, чего на остатках нет. Логично же?
Значит, информацию надо брать не оттуда. Логично?
А откуда? Если нам нужны все товары и все склады, то надо брать информацию из таблиц товаров и складов. А остатки уже к ним привязывать.
Какой вывод?
Выбрать блабла
Из Справочник.Номенклатура
Левое соединение РегистрНакопления.СвободныеОстатки.Остатки
по блабла
ВЫБРАТЬ
Склады.Ссылка КАК Ссылка,
ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, "Остаток равен 0") КАК ВНаличииОстаток
ИЗ
РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура = &Номенклатура) КАК СвободныеОстаткиОстатки
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
ПО (СвободныеОстаткиОстатки.Склад = Склады.Ссылка)
Показать
(15) Ничего не понимаю, если указывать конкретную номенклатуру, то всё работает.
Если указать Родителя, то нулевых остатков нет.
Если указать Родителя, то нулевых остатков нет.
ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
| ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, 0) КАК Номенклатура
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура.Родитель = &Номенклатура) КАК СвободныеОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО СвободныеОстаткиОстатки.Склад = Склады.Ссылка
|ГДЕ
| НЕ Склады.Ссылка = &Ссылка
| И Склады.ЭтоГруппа = &ЭтоГруппа
| И Склады.Родитель = &Родитель
Показать
(27)
Лучше вот так
ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
| ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, 0) КАК Номенклатура
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура.Родитель = &Номенклатура) КАК СвободныеОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО СвободныеОстаткиОстатки.Склад = Склады.Ссылка
| И НЕ Склады.Ссылка = &Ссылка
| И Склады.ЭтоГруппа = &ЭтоГруппа
| И Склады.Родитель = &Родитель
Если надо убрать группы, то сразу в запросе и пишите "Склады.ЭтоГруппа = Ложь". Если нужны склады в определенной папке, то лучше написать "Склады.Ссылка В ИЕРАРХИИ (&ГруппаСкладов)"
Лучше вот так
ВЫБРАТЬ
| Склады.Ссылка КАК Ссылка,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК ВНаличииОстаток,
| ЕСТЬNULL(СвободныеОстаткиОстатки.Номенклатура, 0) КАК Номенклатура
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура.Родитель = &Номенклатура) КАК СвободныеОстаткиОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО СвободныеОстаткиОстатки.Склад = Склады.Ссылка
| И НЕ Склады.Ссылка = &Ссылка
| И Склады.ЭтоГруппа = &ЭтоГруппа
| И Склады.Родитель = &Родитель
Если надо убрать группы, то сразу в запросе и пишите "Склады.ЭтоГруппа = Ложь". Если нужны склады в определенной папке, то лучше написать "Склады.Ссылка В ИЕРАРХИИ (&ГруппаСкладов)"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот