Как расширить КЛАДР (адресный классификатор) в 1С:ЕРП 2.4 и БСП для добавления новых полей (этаж, офис, примечание)?

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

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

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

Как устроен механизм работы с адресами в БСП

Прежде чем переходить к доработке, проанализируем, как система строит форму ввода адреса и сохраняет введенные данные. Когда мы нажимаем кнопку выбора (три точки) рядом с полем адреса, открывается специализированная форма ввода контактной информации. Список доступных дополнительных полей (таких как «Офис», «Бокс», «Помещение», «Этаж») формируется динамически на основе настроек БСП.

За определение структуры полей отвечает общий модуль, содержащий сведения о типах объектов адресации РФ. Система инициализирует доступные типы строений и помещений, сопоставляя их с кодами ФИАС (Федеральной информационной адресной системы).

Вся введенная информация упаковывается в XML- или JSON-строку (в зависимости от версии БСП) и записывается в реквизит ЗначенияПолей табличной части контактной информации соответствующего справочника (например, «Контрагенты» или «Физические лица»). Если мы просто добавим реквизит на форму, система не сможет его сериализовать и сохранить в XML. Поэтому расширять адресную информацию необходимо строго через переопределение стандартной структуры типов объектов адресации.

Шаг 1. Поиск функции формирования типов адресации

Выясним причину, по которой те или иные поля отображаются в форме ввода. В современных версиях БСП за наполнение списка объектов адресации отвечает функция ТипыОбъектовАдресацииАдресаРФ(). В зависимости от точной версии вашей БСП эта функция может быть расположена в общем модуле:

Эта функция возвращает массив структур, описывающих каждый элемент адреса (код, наименование, тип, порядок вывода и код соответствия ФИАС). Нам необходимо переопределить эту функцию, добавив свои кастомные элементы.

Шаг 2. Разработка расширения конфигурации

Чтобы сохранить конфигурацию на поддержке и облегчить будущие обновления 1С:ЕРП, реализуем изменения через Расширение конфигурации. Рассмотрим этот процесс по шагам.

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

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

Шаг 3. Написание кода в расширении

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

Вставьте следующий программный код в модуль расширения:


&После("ТипыОбъектовАдресацииАдресаРФ")
Функция Расш_ТипыОбъектовАдресацииАдресаРФ(Результат)
    
    // Создаем структуру вручную для нового поля "Этаж"
    НовыйТипЭтаж = Новый Структура("Ключ, Код, Наименование, Тип, Порядок, КодФИАС");
    НовыйТипЭтаж.Ключ         = ВРег("Этаж"); // Ключ поиска в верхнем регистре
    НовыйТипЭтаж.Код          = "2060";       // Уникальный числовой код объекта
    НовыйТипЭтаж.Наименование = "Этаж";       // Представление для пользователя
    НовыйТипЭтаж.Тип          = 3;            // 1 - владение, 2 - здание, 3 - помещение
    НовыйТипЭтаж.Порядок      = 6;            // Порядок отображения в выпадающем списке
    НовыйТипЭтаж.КодФИАС      = "";           // Оставляем пустым, так как ФИАС не регламентирует этажи
    
    Результат.Добавить(НовыйТипЭтаж);
    
    // Создаем структуру вручную для нового поля "Примечание"
    НовыйТипПримечание = Новый Структура("Ключ, Код, Наименование, Тип, Порядок, КодФИАС");
    НовыйТипПримечание.Ключ         = ВРег("Примечание");
    НовыйТипПримечание.Код          = "2070";
    НовыйТипПримечание.Наименование = "Примечание";
    НовыйТипПримечание.Тип          = 3;
    НовыйТипПримечание.Порядок      = 7;
    НовыйТипПримечание.КодФИАС      = "";
    
    Результат.Добавить(НовыйТипПримечание);
    
    Возврат Результат;
КонецФункции

Важное примечание по параметрам структуры:

Шаг 4. Проверка сериализации и сохранения данных

Когда пользователь заполнит новое поле (например, напишет «Этаж: 5» и «Примечание: Вход со двора»), БСП применит функцию КодСериализацииОбъектаАдресации(). Данная функция сканирует массив, сформированный нашей измененной процедурой ТипыОбъектовАдресацииАдресаРФ(), находит коды 2060 и 2070 и формирует XML-структуру:


<Structure>
    <Property Name="Этаж">
        <Value xsi:type="xs:string">5</Value>
    </Property>
    <Property Name="Примечание">
        <Value xsi:type="xs:string">Вход со двора</Value>
    </Property>
</Structure>

Благодаря этому данные будут успешно сохранены в реквизите ЗначенияПолей и отобразятся при повторном открытии карточки адреса.

Важные предупреждения и подводные камни

Прежде чем внедрять данное решение в рабочую базу («production»), проанализируем возможные последствия для смежных систем:

Альтернативное решение: Использование стандартного функционала

Если риски нарушения формата ФИАС для вас критичны, рассмотрим альтернативные варианты решения задачи без изменения программного кода БСП:

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

Таким образом, мы рассмотрели устройство адресной системы в БСП и научились расширять КЛАДР новыми типами полей с помощью расширения конфигурации. Применяйте описанную методику аккуратно, учитывая требования регламентированной отчетности и интеграции с ФИАС.

← На главную