День добрый. Написал запрос на отбор остатков на складе, которых осталось меньше, чем указанное в регистре минимальное значение. Проблема в том, что если остаток на складе равен 0, номенклатура в отбор не попадает. Помогите, пожалуйста, разобраться(
ВЫБРАТЬ
ТоварныеОграничения.Склад КАК Склад,
ТоварныеОграничения.Номенклатура.Родитель КАК НоменклатураРодитель,
ТоварныеОграничения.Номенклатура КАК Номенклатура,
ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
Выбор Когда СвободныеОстаткиОстатки.ВНаличииОстаток есть NULL Тогда 0
Иначе СвободныеОстаткиОстатки.ВНаличииОстаток
Конец КАК ВНаличииОстаток
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
СвободныеОстаткиОстатки.ВНаличииОстаток <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
СГРУППИРОВАТЬ ПО
ТоварныеОграничения.Номенклатура.Родитель,
ТоварныеОграничения.МинимальноеКоличествоЗапаса,
ТоварныеОграничения.Склад,
ТоварныеОграничения.Номенклатура,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса,
СвободныеОстаткиОстатки.ВНаличииОстаток
УПОРЯДОЧИТЬ ПО
НоменклатураРодитель
ВЫБРАТЬ
ТоварныеОграничения.Склад КАК Склад,
ТоварныеОграничения.Номенклатура.Родитель КАК НоменклатураРодитель,
ТоварныеОграничения.Номенклатура КАК Номенклатура,
ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
Выбор Когда СвободныеОстаткиОстатки.ВНаличииОстаток есть NULL Тогда 0
Иначе СвободныеОстаткиОстатки.ВНаличииОстаток
Конец КАК ВНаличииОстаток
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
СвободныеОстаткиОстатки.ВНаличииОстаток <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
СГРУППИРОВАТЬ ПО
ТоварныеОграничения.Номенклатура.Родитель,
ТоварныеОграничения.МинимальноеКоличествоЗапаса,
ТоварныеОграничения.Склад,
ТоварныеОграничения.Номенклатура,
ТоварныеОграничения.МаксимальноеКоличествоЗапаса,
СвободныеОстаткиОстатки.ВНаличииОстаток
УПОРЯДОЧИТЬ ПО
НоменклатураРодитель
По теме из базы знаний
- Особенности языка запросов 1С.
- Проверка контрагентов через сервис ФНС (npchk.nalog.ru)
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Извлечение и проверка запроса из расширения конфигурации 1С с автоматическими опциями и журналом ошибок
- Семерых одним ударом: ищем все ошибки в запросе за один раз!
Найденные решения
по-хорошему надо почитать что-нибудь осмысленное про базы данных и язык SQL. Причем всем участникам обсуждения, сдается мне.
в таком варианте в результат попадет только то, что есть в остатках. Во-первых, потому, что соединение внутреннее. Во-вторых, потому, что стоит условие на содержимое второй таблицы.
Для того, чтобы выбрать все из ТоварныеОграничения, надо убрать жесткую привязку к остаткам. А для этого нужно как минимум два исправления запроса.
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
СвободныеОстаткиОстатки.ВНаличииОстаток <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
в таком варианте в результат попадет только то, что есть в остатках. Во-первых, потому, что соединение внутреннее. Во-вторых, потому, что стоит условие на содержимое второй таблицы.
Для того, чтобы выбрать все из ТоварныеОграничения, надо убрать жесткую привязку к остаткам. А для этого нужно как минимум два исправления запроса.
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
<s>ВНУТРЕННЕЕ</s> ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
<s>СвободныеОстаткиОстатки.ВНаличииОстаток</s> ЕстьNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) когда остаток 0, то выборки вообще никакой не будет.
Т.е. вы не получите записи номенклатура такая то остаток 0.
В выборку попадают только отличающиеся от нуля значения.
Если нужна такая запись в выборке, то нужно сделать виртуальную таблицу с исходным перечнем номенклатуры,
и уже к ней левым соединением подсоединять остатки из регистра.
А где ЕСТЬNULL - то ставим 0.
Т.е. вы не получите записи номенклатура такая то остаток 0.
В выборку попадают только отличающиеся от нуля значения.
Если нужна такая запись в выборке, то нужно сделать виртуальную таблицу с исходным перечнем номенклатуры,
и уже к ней левым соединением подсоединять остатки из регистра.
А где ЕСТЬNULL - то ставим 0.
по-хорошему надо почитать что-нибудь осмысленное про базы данных и язык SQL. Причем всем участникам обсуждения, сдается мне.
в таком варианте в результат попадет только то, что есть в остатках. Во-первых, потому, что соединение внутреннее. Во-вторых, потому, что стоит условие на содержимое второй таблицы.
Для того, чтобы выбрать все из ТоварныеОграничения, надо убрать жесткую привязку к остаткам. А для этого нужно как минимум два исправления запроса.
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
СвободныеОстаткиОстатки.ВНаличииОстаток <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
в таком варианте в результат попадет только то, что есть в остатках. Во-первых, потому, что соединение внутреннее. Во-вторых, потому, что стоит условие на содержимое второй таблицы.
Для того, чтобы выбрать все из ТоварныеОграничения, надо убрать жесткую привязку к остаткам. А для этого нужно как минимум два исправления запроса.
ИЗ
РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
<s>ВНУТРЕННЕЕ</s> ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
ПО ТоварныеОграничения.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
ГДЕ
<s>СвободныеОстаткиОстатки.ВНаличииОстаток</s> ЕстьNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) <= ТоварныеОграничения.МинимальноеКоличествоЗапаса
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот