Как узнать или включить код элемента справочника в 1С:Управление торговлей 11

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

При переходе на современные версии конфигураций (1С:Управление торговлей 11, 1С:Комплексная автоматизация 2 или 1С:ERP) пользователи и специалисты часто сталкиваются с ситуацией, когда в формах справочников отсутствует привычный реквизит Код. Особенно часто этот вопрос возникает при работе со справочниками Склады (места хранения), Организации, Контрагенты и Договоры контрагентов. Выясним причину такого поведения системы и рассмотрим практические способы решения этой задачи.

Архитектурная причина отсутствия реквизита «Код»

Проанализируем структуру метаданных конфигурации. В прикладных решениях на базе Библиотеки стандартных подсистем (БСП) разработчики намеренно отказались от использования стандартного числового или строкового реквизита Код для целого ряда объектов. В свойствах таких справочников параметр Длина кода установлен равным 0.

Это означает, что поле Код физически не создается в таблицах базы данных СУБД. Настроить его отображение через меню Еще — Изменить форму невозможно, так как самого реквизита не существует в структуре метаданных объекта.

Разработчики типовых решений применили данный подход по следующим причинам:

  1. Естественная бизнес-идентификация: для небольших справочников (склады, подразделения, организации) уникальность и удобство восприятия обеспечиваются рабочим наименованием. Для юридических и физических лиц используются уникальные реквизиты: ИНН, КПП, паспортные данные или специальное поле Уточнение.
  2. Разделение учета: управленческий и регламентированный учет разделены. Например, в справочнике Партнеры управленческий код присутствует, а у связанного справочника Контрагенты реквизит Код отключен, так как контрагент выступает исключительно как юридическое лицо.

Вариант 1. Использование механизма дополнительных реквизитов (без программирования)

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

Пошагово выполним настройку:

  1. Перейдем в раздел НСИ и администрирование — Администрирование — Общие настройки.
  2. Раскроем блок Дополнительные реквизиты и сведения и убедимся, что соответствующий флаг включен.
  3. Перейдем по ссылке Дополнительные реквизиты, найдем в списке справочник Склады (или другой требуемый объект) и нажмем кнопку Добавить — Новый.
  4. Укажем наименование реквизита (например, «Внешний код» или «Код склада»), выберем тип значения Строка или Число и зададим нужную длину.
  5. Сохраним настройку. Теперь в карточке каждого склада появится поле для ввода кода.
  6. Чтобы вывести новый код в общий список, откроем форму списка справочника Склады и магазины, нажмем Еще — Изменить форму, найдем в списке доступных полей созданный дополнительный реквизит и установим напротив него флаг видимости.

Вариант 2. Добавление реквизита через расширение конфигурации

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

Важно помнить: механизм расширений платформы 1С:Предприятие 8.3 не позволяет изменить длину стандартного реквизита Код, если в основной конфигурации она равна 0. Поэтому в расширение добавляется собственный реквизит объекта.

Разберем порядок действий:

  1. Создадим новое расширение конфигурации в режиме Конфигуратор.
  2. Добавим в расширение целевой справочник (например, Склады).
  3. Создадим у справочника собственный реквизит КодСклада с типом Строка требуемой длины.
  4. Вынесем реквизит на форму элемента и форму списка справочника в расширении.
  5. При необходимости программного контроля уникальности переопределим обработчик события ПередЗаписью в модуле объекта расширения:

&Вместо("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
    // Проверяем заполнение и уникальность кода склада
    Если ЗначениеЗаполнено(ЭтотОбъект.КодСклада) Тогда
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |	Склады.Ссылка КАК Ссылка
            |ИЗ
            |	Справочник.Склады КАК Склады
            |ГДЕ
            |	Склады.КодСклада = &КодСклада
            |	И Склады.Ссылка <> &Ссылка";
        Запрос.УстановитьПараметр("КодСклада", ЭтотОбъект.КодСклада);
        Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
        
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            Отказ = Истина;
            ВызватьИсключение "Склад с таким кодом уже зарегистрирован в системе!";
        КонецЕсли;
    КонецЕсли;
    
    ПродолжитьВызов(Отказ);
КонецПроцедуры

Вариант 3. Идентификация элементов через GUID (UUID) для обменов и интеграций

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

Рассмотрим способы получения уникального идентификатора объекта:

  1. Интерактивно в режиме «1С:Предприятие»: откроем нужный элемент справочника и нажмем кнопку Получить ссылку (пиктограмма в заголовке окна формы). В строке навигационной ссылки формата e1cib/data/Справочник.Склады?ref=... шестнадцатеричный хвост после параметра ref= представляет собой закодированный идентификатор объекта.
  2. Через отчеты или запросы: в Универсальном отчете или через Консоль запросов можно получить поле Ссылка, которое при сериализации в XML/JSON автоматически преобразуется в строковый UUID.
  3. Программно: для получения строкового идентификатора в коде используется метод:

СтрокаGUID = Строка(СкладСсылка.УникальныйИдентификатор());

При организации интеграций между базами 1С рекомендуется использовать стандартный механизм БСП — регистр сведений Соответствия объектов информационных баз либо сопоставление по GUID в формате EnterpriseData, что полностью исключает зависимость от наличия пользовательского кода.

← На главную