Почему реквизит «Упаковка» пустой в базе данных, а на форме 1С отображается «шт»?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Управленческий учет IT и автоматизация бизнеса
← На главную

При переходе на современные конфигурации на платформе «1С:Предприятие 8.3», такие как «1С:Комплексная автоматизация 2», «1С:ERP Управление предприятием» или «1С:Управление торговлей 11», разработчики и аналитики часто сталкиваются с неочевидным поведением системы при работе с единицами измерения и упаковками. Типичный сценарий: в табличной части документа (например, в «Заказе клиента» или «Реализации товаров и услуг») визуально в колонке «Упаковка» отображается «шт» (или другая базовая единица), но при анализе этой таблицы через консоль запросов или программно реквизит Упаковка возвращает пустую ссылку.

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

Разбор проблемы: пустые значения в базе данных при заполненном интерфейсе

Проанализируем ситуацию, с которой сталкивается программист при исследовании базы данных. Открыв консоль запросов и обратившись к табличной части Товары любого торгового документа, мы видим, что поле Упаковка для многих строк содержит пустую ссылку типа СправочникСсылка.УпаковкиЕдиницыИзмерения. При этом, глядя на форму того же самого документа в режиме «1С:Предприятие», мы отчетливо видим в соответствующей колонке надпись «шт» (штуки), «кг» (килограммы) или «полный набор».

Такое поведение не является ошибкой или программным сбоем. Это **штатный механизм оптимизации хранения данных**, заложенный разработчиками фирмы «1С». Логика системы строится на следующих правилах:

  1. Экономия ресурсов СУБД: Если хозяйственная операция (продажа, закупка, перемещение) осуществляется в базовой единице хранения карточки номенклатуры (например, товар продается поштучно, и базовая единица — «шт»), то записывать в каждую строку документов ссылку на элемент справочника упаковок избыточно. База данных просто хранит пустую ссылку в поле Упаковка.
  2. Упрощение проведения по регистрам: Все движения в регистрах накопления (таких как «Товары на складах», «Выручка и себестоимость продаж») всегда пересчитываются и фиксируются строго в базовых единицах хранения номенклатуры. Отсутствие заполненной упаковки в документе прямо указывает системе, что коэффициент пересчета равен 1, и никакого дополнительного вычисления объемов или веса по упаковкам производить не требуется.
  3. Использование упаковок по назначению: Поле Упаковка в базе данных заполняется реальным значением только тогда, когда товар действительно отгружается или принимается в упаковках (коробках, паллетах, пачках), отличных от базовой единицы хранения. В этом случае в реквизит записывается ссылка на конкретную упаковку, у которой определен коэффициент пересчета (например, коробка = 10 шт.).

Секреты интерфейса: как платформа выводит «шт» без записи в базу данных

Выясним, каким образом на форме документа пользователю выводится базовая единица измерения, если в самой базе данных реквизит пуст. Многие разработчики ошибочно полагают, что здесь задействовано тяжелое программное условное оформление или динамический пересчет строк при выводе. На самом деле всё гораздо проще и элегантнее.

Разберем по шагам, как устроена колонка «Упаковка» на управляемой форме документа (например, в форме документа ЗаказКлиента):

  1. В конфигураторе на управляемой форме в таблице «Товары» создается **Группа колонок** (обычно с типом «Группа полей» и горизонтальной группировкой), у которой отключено отображение границ и заголовков подчиненных элементов. Это позволяет визуально объединить несколько полей в одну ячейку.
  2. В эту группу помещаются два поля:
    • Основное поле: Объект.Товары.Упаковка (путь к данным реквизита ТЧ).
    • Вспомогательное поле отображения: связанный путь через точку от номенклатуры — Объект.Товары.Номенклатура.ЕдиницаИзмерения.
  3. Платформа «1С:Предприятие» использует встроенное свойство связи параметров выбора и представление пустой ссылки. Если значение в поле Упаковка пустое, система автоматически скрывает пустоту и выводит значение из альтернативного поля — базовую единицу измерения номенклатуры. Если же упаковка выбрана (например, «Коробка»), то отображается именно представление этой упаковки.

Таким образом, пользователь видит целостную и понятную картину («шт», «кг» или «Коробка (10 шт)») в одной и той же колонке, а база данных при этом остается ненагруженной лишними дублирующими связями.

Единый справочник УпаковкиЕдиницыИзмерения: архитектурные изменения

В старых решениях 1С (например, в «Управление производственным предприятием 1.3» или «Управление торговлей 10.3») существовали раздельные справочники для классификатора единиц измерения и для упаковок (мест) номенклатуры. В современных прикладных решениях на базе ERP-платформы структура метаданных подверглась глубокой унификации.

Справочника «Единицы измерения» в чистом виде больше нет. Вместо него функционирует единый справочник УпаковкиЕдиницыИзмерения. Он имеет сложную иерархическую структуру и систему подчинения (владельцев):

Как правильно писать запросы для отчетов и печатных форм

Поскольку реквизит Упаковка в табличной части товаров часто бывает пустым, прямая выборка этого поля в запросе для вывода в печатную форму или отчет приведет к тому, что вместо «шт» или «кг» пользователь увидит пустые поля. Чтобы избежать этой популярной ошибки, в запросах необходимо использовать условную конструкцию ВЫБОР.

Рассмотрим подробнее шаблон построения такого запроса:


ВЫБРАТЬ
    ЗаказТовары.НомерСтроки КАК НомерСтроки,
    ЗаказТовары.Номенклатура КАК Номенклатура,
    ЗаказТовары.Количество КАК Количество,
    ВЫБОР
        КОГДА ЗаказТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
            ТОГДА ЗаказТовары.Номенклатура.ЕдиницаИзмерения
        ИНАЧЕ ЗаказТовары.Упаковка
    КОНЕЦ КАК ЕдиницаИзмеренияУпаковка,
    ВЫБОР
        КОГДА ЗаказТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.PushСсылка)
            ТОГДА ЗаказТовары.Номенклатура.ЕдиницаИзмерения.Наименование
        ИНАЧЕ ЗаказТовары.Упаковка.Наименование
    КОНЕЦ КАК ЕдиницаИзмеренияПредставление
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказТовары
ГДЕ
    ЗаказТовары.Ссылка = &Ссылка

Проанализируем этот запрос. В поле ЕдиницаИзмеренияУпаковка мы получаем готовую ссылку: либо на базовую единицу измерения номенклатуры (если упаковка не была указана), либо на конкретный элемент упаковки. В поле ЕдиницаИзмеренияПредставление мы сразу извлекаем текстовое наименование для вывода на печать. Это гарантирует, что печатная форма всегда будет заполнена корректными данными. Для автоматического вывода весогабаритных характеристик упаковок в документы и контроля кратности подойдёт расширение для расчета веса, объема и вывода данных в печатные формы.

Почему в рабочей базе все упаковки могут быть пустыми?

Иногда администраторы и аналитики замечают, что после перехода на «1С:Комплексную автоматизацию» в рабочей базе абсолютно во всех документах поле Упаковка в СУБД остается пустым, хотя в интерфейсе везде горит «шт». Выясним возможные причины этой ситуации:

  1. Отключена функциональная опция: Перейдите в раздел НСИ и администрирование -> Настройка разделов -> Номенклатура -> Разрезы учета. Проверьте, включен ли флаг «Упаковки номенклатуры». Если эта опция выключена на уровне системы, ведение учета в разрезе упаковок заблокировано, и документы всегда будут проводить операции только в базовых единицах.
  2. Отсутствие настроек в карточках номенклатуры: Даже если общая опция включена, в каждой конкретной карточке товара в поле «Упаковки» должен быть выбран индивидуальный или общий набор упаковок. Если там выбрано значение «Не используются», менеджеры физически не смогут выбрать упаковку в документах, и поле в базе всегда будет хранить пустую ссылку.
  3. Ошибки при программном переносе данных: Если справочник номенклатуры загружался из внешних систем (например, из 1С:УПП или ERP сторонней конфигурации) с помощью обработок или правил обмена, разработчики могли перенести элементы упаковок, но забыть проставить в карточках товаров признак ИспользоватьУпаковки = Истина или некорректно заполнить владельцев в справочнике УпаковкиЕдиницыИзмерения. В результате данные в системе есть, но логика документов их «не видит».

Понимание этой архитектурной особенности хранения упаковок и единиц измерения в 1С v8.3 позволяет разработчикам писать более оптимизированные запросы, избегать ошибок при создании печатных форм и оперативно локализовать проблемы интеграции при переносе данных из других информационных систем. При необходимости быстро настроить учет по упаковкам после переноса данных можно воспользоваться обработкой для массового создания индивидуальных упаковок.

← На главную