Вывод статуса номенклатуры из регистра ПравилаРазмещения
Решение задачи вывода поля СтатусНоменклатуры в отчёте 1С:ERP: как связать регистры и получить значение через справочник номенклатуры для отображения в отчёте.
Как вывести поле “СтатусНоменклатуры” в отчете на основе данных из регистра “ПравилаРазмещенияТоваровВЯчейках”?
У меня есть связь между двумя регистрами: “ТоварыВЯчейках.Остатки” и “ПравилаРазмещенияТоваровВЯчейках”.
Мне нужно вывести поле “СтатусНоменклатуры”. Когда я обращаюсь к “ТоварыВЯчейках.Остатки.Родитель.СтатусНоменклатуры”, получаю пустое значение.
Мне подсказали, что нужно брать “СтатусНоменклатуры” из другого регистра сведений - из “ПравилаРазмещенияТоваровВЯчейках.СкладскаяГруппаНоменклатуры”.
Но в этом регистре такого реквизита нет. Не понимаю, как это реализовать и вывести это поле в отчет.
Подскажите, пожалуйста, как решить эту задачу?
Для вывода поля “СтатусНоменклатуры” в отчете на основе данных из регистра “ПравилаРазмещенияТоваровВЯчейках” нужно правильно организовать связь между регистрами и использовать корректный путь доступа к данным. Вот подробное решение вашей задачи:
Объяснение проблемы
При обращении к ТоварыВЯчейках.Остатки.Родитель.СтатусНоменклатуры вы получаете пустое значение, потому что регистр остатков не содержит прямой ссылки на статус номенклатуры. Как указано в обсуждении на Форуме Инфостарт, связь между регистрами “ТоварыВЯчейках.Остатки” и “ПравилаРазмещенияТоваровВЯчейках” требует правильного подхода к получению связанных данных.
Содержание
- Структура регистров и проблема доступа к данным
- Правильный способ связи регистров
- Решение через СКД
- Альтернативные подходы
- Пример запроса для получения данных
- Практические рекомендации
Структура регистров и проблема доступа к данным
Регистр “ПравилаРазмещенияТоваровВЯчейках” в 1С:ERP обычно имеет следующую структуру:
- Основная таблица: содержит правила размещения товаров
- Иерархическая связь: через поле “СкладскаяГруппаНоменклатуры” связывается с номенклатурой
- Реквизиты: настройки размещения, параметры ячеек и т.д.
Проблема заключается в том, что регистр остатков “ТоварыВЯчейках.Остатки” не содержит прямого поля для статуса номенклатуры. Статус хранится в справочнике номенклатуры или в связанных регистрах.
Правильный способ связи регистров
Вариант 1: Через справочник номенклатуры
- Связь через Номенклатуру:
- В запросе установите связь через номенклатуру
- Используйте структуру:
ТоварыВЯчейкахОстатки.Номенклатура.СтатусНоменклатуры
Вариант 2: Через виртуальную таблицу
Как описано в документации 1С, для связи с виртуальной таблицей остатков нужно использовать правильный синтаксис:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток,
Номенклатура.СтатусНоменклатуры
ИЗ
РегистрНакопления.ТоварыВЯчейках.Остатки КАК Остатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Остатки.Номенклатура = Номенклатура.Ссылка
Решение через СКД
Настройка набора данных в СКД
-
Создайте новый набор данных:
- Тип: “Запрос”
- Источник: регистр “ТоварыВЯчейках.Остатки”
-
Добавьте поля:
- Номенклатура
- КоличествоОстаток
- СтатусНоменклатуры (через связь с номенклатурой)
-
Пример запроса для СКД:
ВЫБРАТЬ
ТоварыВЯчейкахОстатки.Номенклатура,
ТоварыВЯчейкахОстатки.КоличествоОстаток,
ТоварыВЯчейкахОстатки.Номенклатура.СтатусНоменклатуры КАК СтатусНоменклатуры
ИЗ
РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
ГДЕ
ТоварыВЯчейкахОстатки.Склад = &Склад
Настройка отображения в отчете
- Включите поле “СтатусНоменклатуры” в макет отчета
- Настройте группировку по номенклатуре
- Добавьте фильтрацию по статусу при необходимости
Альтернативные подходы
Вариант 3: Через регистр сведений “ПравилаРазмещенияТоваровВЯчейках”
Если в вашем конфигурационном решении есть регистр “ПравилаРазмещенияТоваровВЯчейках” с реквизитом для статуса, используйте:
ВЫБРАТЬ
ТоварыВЯчейкахОстатки.Номенклатура,
ТоварыВЯчейкахОстатки.КоличествоОстаток,
ПравилаРазмещения.СтатусНоменклатуры
ИЗ
РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПравилаРазмещенияТоваровВЯчейках КАК ПравилаРазмещения
ПО ТоварыВЯчейкахОстатки.Номенклатура = ПравилаРазмещения.Номенклатура
Вариант 4: Через иерархическую связь
Если номенклатура имеет иерархию, и статус наследуется:
ВЫБРАТЬ
ТоварыВЯчейкахОстатки.Номенклатура,
ТоварыВЯчейкахОстатки.КоличествоОстаток,
ВЫБОР
КОГДА Номенклатура.СтатусНоменклатуры <> НЕОПРЕДЕЛЕНО
ТОГДА Номенклатура.СтатусНоменклатуры
ИНАЧЕ Номенклатура.Родитель.СтатусНоменклатуры
КОНЕЦ КАК СтатусНоменклатуры
ИЗ
РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО ТоварыВЯчейкахОстатки.Номенклатура = Номенклатура.Ссылка
Пример запроса для получения данных
Вот готовый пример запроса, решающий вашу задачу:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.Ячейка,
Остатки.КоличествоОстаток,
Номенклатура.СтатусНоменклатуры КАК СтатусНоменклатуры,
Склад.Наименование КАК Склад
ИЗ
РегистрНакопления.ТоварыВЯчейках.Остатки КАК Остатки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Остатки.Номенклатура = Номенклатура.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склад
ПО Остатки.Склад = Склад.Ссылка
ГДЕ
Остатки.КоличествоОстаток > 0
И Склад.Наименование = "Основной склад"
УПОРЯДОЧИТЬ ПО
Номенклатура.Наименование,
Остатки.Ячейка
Практические рекомендации
-
Проверьте структуру регистров:
- Убедитесь, что в вашем конфигурационном решении поле “СтатусНоменклатуры” существует
- Проверьте, в каком справочнике или регистре оно хранится
-
Используйте отладку:
- Добавьте отладочную печать в запрос
- Проверьте, какие значения возвращает каждый этап связи
-
Документируйте связи:
- Создайте схему связей между регистрами
- Отметьте, какие поля используются для соединения
-
Оптимизируйте запрос:
- Используйте индексированные поля для связи
- Избегайте избыточных соединений
-
Тестируйте на реальных данных:
- Проверьте запрос на тестовой базе с реальными остатками
- Убедитесь, что статус корректно отображается для всех номенклатурных позиций
Важно: Если после всех попыток поле “СтатусНоменклатуры” все равно не отображается, возможно, в вашей конфигурации этот параметр называется иначе или хранится в другом регистре. Рекомендуется обратиться к документации вашего конфигурационного решения или консультанту 1С.
Заключение
Для решения задачи вывода поля “СтатусНоменклатуры” в отчете нужно:
- Установить правильную связь между регистром остатков и справочником номенклатуры
- Использовать синтаксис
РегистрОстатков.Номенклатура.СтатусНоменклатурыдля доступа к данным - При необходимости использовать виртуальные таблицы или дополнительные соединения
- Проверить структуру регистров в вашей конфигурации
Основная проблема — отсутствие прямой связи в регистре остатков, решается через соединение со справочником номенклатуры. Если стандартные методы не работают, рекомендуется проверить конфигурацию на наличие альтернативных путей хранения статуса номенклатуры.
Источники
- СкладскаяГруппаНоменклатуры в регистре ПравилаРазмещенияТоваровВЯчейках - Форум Инфостарт
- Особенности связи с виртуальной таблицей остатков - 1С:ИТС
- Работа с мерной номенклатурой в «1С:ERP»: настройки и примеры
- Регистр накопления | Объекты конфигурации - платформа 1С:Предприятие
- Ордерная схема документооборота на складе с хранением остатков номенклатуры в ячейках в 1С:ERP