Программирование

Вывод статуса номенклатуры из регистра ПравилаРазмещения

Решение задачи вывода поля СтатусНоменклатуры в отчёте 1С:ERP: как связать регистры и получить значение через справочник номенклатуры для отображения в отчёте.

Как вывести поле “СтатусНоменклатуры” в отчете на основе данных из регистра “ПравилаРазмещенияТоваровВЯчейках”?

У меня есть связь между двумя регистрами: “ТоварыВЯчейках.Остатки” и “ПравилаРазмещенияТоваровВЯчейках”.

Мне нужно вывести поле “СтатусНоменклатуры”. Когда я обращаюсь к “ТоварыВЯчейках.Остатки.Родитель.СтатусНоменклатуры”, получаю пустое значение.

Мне подсказали, что нужно брать “СтатусНоменклатуры” из другого регистра сведений - из “ПравилаРазмещенияТоваровВЯчейках.СкладскаяГруппаНоменклатуры”.

Но в этом регистре такого реквизита нет. Не понимаю, как это реализовать и вывести это поле в отчет.

Подскажите, пожалуйста, как решить эту задачу?

Для вывода поля “СтатусНоменклатуры” в отчете на основе данных из регистра “ПравилаРазмещенияТоваровВЯчейках” нужно правильно организовать связь между регистрами и использовать корректный путь доступа к данным. Вот подробное решение вашей задачи:

Объяснение проблемы

При обращении к ТоварыВЯчейках.Остатки.Родитель.СтатусНоменклатуры вы получаете пустое значение, потому что регистр остатков не содержит прямой ссылки на статус номенклатуры. Как указано в обсуждении на Форуме Инфостарт, связь между регистрами “ТоварыВЯчейках.Остатки” и “ПравилаРазмещенияТоваровВЯчейках” требует правильного подхода к получению связанных данных.


Содержание


Структура регистров и проблема доступа к данным

Регистр “ПравилаРазмещенияТоваровВЯчейках” в 1С:ERP обычно имеет следующую структуру:

  • Основная таблица: содержит правила размещения товаров
  • Иерархическая связь: через поле “СкладскаяГруппаНоменклатуры” связывается с номенклатурой
  • Реквизиты: настройки размещения, параметры ячеек и т.д.

Проблема заключается в том, что регистр остатков “ТоварыВЯчейках.Остатки” не содержит прямого поля для статуса номенклатуры. Статус хранится в справочнике номенклатуры или в связанных регистрах.


Правильный способ связи регистров

Вариант 1: Через справочник номенклатуры

  1. Связь через Номенклатуру:
    • В запросе установите связь через номенклатуру
    • Используйте структуру: ТоварыВЯчейкахОстатки.Номенклатура.СтатусНоменклатуры

Вариант 2: Через виртуальную таблицу

Как описано в документации 1С, для связи с виртуальной таблицей остатков нужно использовать правильный синтаксис:

1c
ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.КоличествоОстаток,
    Номенклатура.СтатусНоменклатуры
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК Остатки
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    ПО Остатки.Номенклатура = Номенклатура.Ссылка

Решение через СКД

Настройка набора данных в СКД

  1. Создайте новый набор данных:

    • Тип: “Запрос”
    • Источник: регистр “ТоварыВЯчейках.Остатки”
  2. Добавьте поля:

    • Номенклатура
    • КоличествоОстаток
    • СтатусНоменклатуры (через связь с номенклатурой)
  3. Пример запроса для СКД:

1c
ВЫБРАТЬ
    ТоварыВЯчейкахОстатки.Номенклатура,
    ТоварыВЯчейкахОстатки.КоличествоОстаток,
    ТоварыВЯчейкахОстатки.Номенклатура.СтатусНоменклатуры КАК СтатусНоменклатуры
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
ГДЕ
    ТоварыВЯчейкахОстатки.Склад = &Склад

Настройка отображения в отчете

  1. Включите поле “СтатусНоменклатуры” в макет отчета
  2. Настройте группировку по номенклатуре
  3. Добавьте фильтрацию по статусу при необходимости

Альтернативные подходы

Вариант 3: Через регистр сведений “ПравилаРазмещенияТоваровВЯчейках”

Если в вашем конфигурационном решении есть регистр “ПравилаРазмещенияТоваровВЯчейках” с реквизитом для статуса, используйте:

1c
ВЫБРАТЬ
    ТоварыВЯчейкахОстатки.Номенклатура,
    ТоварыВЯчейкахОстатки.КоличествоОстаток,
    ПравилаРазмещения.СтатусНоменклатуры
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПравилаРазмещенияТоваровВЯчейках КАК ПравилаРазмещения
    ПО ТоварыВЯчейкахОстатки.Номенклатура = ПравилаРазмещения.Номенклатура

Вариант 4: Через иерархическую связь

Если номенклатура имеет иерархию, и статус наследуется:

1c
ВЫБРАТЬ
    ТоварыВЯчейкахОстатки.Номенклатура,
    ТоварыВЯчейкахОстатки.КоличествоОстаток,
    ВЫБОР
        КОГДА Номенклатура.СтатусНоменклатуры <> НЕОПРЕДЕЛЕНО
            ТОГДА Номенклатура.СтатусНоменклатуры
        ИНАЧЕ Номенклатура.Родитель.СтатусНоменклатуры
    КОНЕЦ КАК СтатусНоменклатуры
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    ПО ТоварыВЯчейкахОстатки.Номенклатура = Номенклатура.Ссылка

Пример запроса для получения данных

Вот готовый пример запроса, решающий вашу задачу:

1c
ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.Ячейка,
    Остатки.КоличествоОстаток,
    Номенклатура.СтатусНоменклатуры КАК СтатусНоменклатуры,
    Склад.Наименование КАК Склад
ИЗ
    РегистрНакопления.ТоварыВЯчейках.Остатки КАК Остатки
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    ПО Остатки.Номенклатура = Номенклатура.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склад
    ПО Остатки.Склад = Склад.Ссылка
ГДЕ
    Остатки.КоличествоОстаток > 0
    И Склад.Наименование = "Основной склад"
УПОРЯДОЧИТЬ ПО
    Номенклатура.Наименование,
    Остатки.Ячейка

Практические рекомендации

  1. Проверьте структуру регистров:

    • Убедитесь, что в вашем конфигурационном решении поле “СтатусНоменклатуры” существует
    • Проверьте, в каком справочнике или регистре оно хранится
  2. Используйте отладку:

    • Добавьте отладочную печать в запрос
    • Проверьте, какие значения возвращает каждый этап связи
  3. Документируйте связи:

    • Создайте схему связей между регистрами
    • Отметьте, какие поля используются для соединения
  4. Оптимизируйте запрос:

    • Используйте индексированные поля для связи
    • Избегайте избыточных соединений
  5. Тестируйте на реальных данных:

    • Проверьте запрос на тестовой базе с реальными остатками
    • Убедитесь, что статус корректно отображается для всех номенклатурных позиций

Важно: Если после всех попыток поле “СтатусНоменклатуры” все равно не отображается, возможно, в вашей конфигурации этот параметр называется иначе или хранится в другом регистре. Рекомендуется обратиться к документации вашего конфигурационного решения или консультанту 1С.


Заключение

Для решения задачи вывода поля “СтатусНоменклатуры” в отчете нужно:

  1. Установить правильную связь между регистром остатков и справочником номенклатуры
  2. Использовать синтаксис РегистрОстатков.Номенклатура.СтатусНоменклатуры для доступа к данным
  3. При необходимости использовать виртуальные таблицы или дополнительные соединения
  4. Проверить структуру регистров в вашей конфигурации

Основная проблема — отсутствие прямой связи в регистре остатков, решается через соединение со справочником номенклатуры. Если стандартные методы не работают, рекомендуется проверить конфигурацию на наличие альтернативных путей хранения статуса номенклатуры.

Источники

  1. СкладскаяГруппаНоменклатуры в регистре ПравилаРазмещенияТоваровВЯчейках - Форум Инфостарт
  2. Особенности связи с виртуальной таблицей остатков - 1С:ИТС
  3. Работа с мерной номенклатурой в «1С:ERP»: настройки и примеры
  4. Регистр накопления | Объекты конфигурации - платформа 1С:Предприятие
  5. Ордерная схема документооборота на складе с хранением остатков номенклатуры в ячейках в 1С:ERP
Авторы
Проверено модерацией
Модерация