При переходе на современные версии конфигураций (1С:Управление торговлей 11, 1С:Комплексная автоматизация 2 или 1С:ERP) пользователи и специалисты часто сталкиваются с ситуацией, когда в формах справочников отсутствует привычный реквизит Код. Особенно часто этот вопрос возникает при работе со справочниками Склады (места хранения), Организации, Контрагенты и Договоры контрагентов. Выясним причину такого поведения системы и рассмотрим практические способы решения этой задачи.
Проанализируем структуру метаданных конфигурации. В прикладных решениях на базе Библиотеки стандартных подсистем (БСП) разработчики намеренно отказались от использования стандартного числового или строкового реквизита Код для целого ряда объектов. В свойствах таких справочников параметр Длина кода установлен равным 0.
Это означает, что поле Код физически не создается в таблицах базы данных СУБД. Настроить его отображение через меню Еще — Изменить форму невозможно, так как самого реквизита не существует в структуре метаданных объекта.
Разработчики типовых решений применили данный подход по следующим причинам:
ИНН, КПП, паспортные данные или специальное поле Уточнение.Партнеры управленческий код присутствует, а у связанного справочника Контрагенты реквизит Код отключен, так как контрагент выступает исключительно как юридическое лицо.Если для бизнес-процессов предприятия (например, для маркировки мест хранения, внутренней нумерации или сопоставления с внешними системами) необходим собственный код, разберем самый простой и безопасный способ его добавления через пользовательский интерфейс.
Пошагово выполним настройку:
Склады (или другой требуемый объект) и нажмем кнопку Добавить — Новый.Склады и магазины, нажмем Еще — Изменить форму, найдем в списке доступных полей созданный дополнительный реквизит и установим напротив него флаг видимости.Если требуется жесткий контроль уникальности или программное автозаполнение кода без снятия конфигурации с типовой поддержки, рассмотрим реализацию через механизм расширений.
Важно помнить: механизм расширений платформы 1С:Предприятие 8.3 не позволяет изменить длину стандартного реквизита Код, если в основной конфигурации она равна 0. Поэтому в расширение добавляется собственный реквизит объекта.
Разберем порядок действий:
Склады).КодСклада с типом Строка требуемой длины.ПередЗаписью в модуле объекта расширения:
&Вместо("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
// Проверяем заполнение и уникальность кода склада
Если ЗначениеЗаполнено(ЭтотОбъект.КодСклада) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Склады.Ссылка КАК Ссылка
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.КодСклада = &КодСклада
| И Склады.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр("КодСклада", ЭтотОбъект.КодСклада);
Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Отказ = Истина;
ВызватьИсключение "Склад с таким кодом уже зарегистрирован в системе!";
КонецЕсли;
КонецЕсли;
ПродолжитьВызов(Отказ);
КонецПроцедуры
Если код элемента требовался для интеграции, синхронизации или выгрузки данных во внешние системы, наилучшей практикой является переход на уникальный системный идентификатор ссылки — GUID (UUID).
Рассмотрим способы получения уникального идентификатора объекта:
e1cib/data/Справочник.Склады?ref=... шестнадцатеричный хвост после параметра ref= представляет собой закодированный идентификатор объекта.Ссылка, которое при сериализации в XML/JSON автоматически преобразуется в строковый UUID.
СтрокаGUID = Строка(СкладСсылка.УникальныйИдентификатор());
При организации интеграций между базами 1С рекомендуется использовать стандартный механизм БСП — регистр сведений Соответствия объектов информационных баз либо сопоставление по GUID в формате EnterpriseData, что полностью исключает зависимость от наличия пользовательского кода.