Как программно ввести адрес сотрудника в свободной форме в 1С?

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

В процессе разработки, анализа зависимостей конфигурации или автоматизации загрузки данных часто возникает задача заполнения контактной информации сотрудников. Одной из самых частых проблем является ввод адреса в так называемой «свободной форме». Это ситуация, когда адрес представлен единой строкой, не разложенной по классификатору ГАР (ФИАС). Рассмотрим, как реализовать эту задачу программно, используя механизмы Библиотеки стандартных подсистем (БСП), которые лежат в основе большинства современных конфигураций 1С, таких как ЗУП 3.1, ERP 2.5 или Бухгалтерия предприятия 3.0.

Разбор основного механизма через БСП

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

Рассмотрим пример кода, который позволяет записать адрес по прописке для конкретного физического лица:


// Определим параметры: Физлицо (ссылка), Адрес (строка), Вид (ссылка на справочник)
Физлицо = Справочники.ФизическиеЛица.НайтиПоРеквизиту("ИНН", "123456789012");
АдресТекст = "г. Москва, ул. Ленина, д. 1, кв. 10";
ВидАдреса = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица;

УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(Физлицо, АдресТекст, ВидАдреса);

Важно понимать, что метод ДобавитьКонтактнуюИнформацию просто создает новую запись. В реальных задачах мы рекомендуем использовать метод ЗаписатьКонтактнуюИнформацию. Выясним причину: метод «Записать» сначала проверяет наличие уже существующей записи данного вида и обновляет её, предотвращая дублирование строк в табличной части КонтактнаяИнформация.

Структура хранения данных в объекте

Разберем подробнее, где именно хранятся эти данные. У справочника ФизическиеЛица (как и у Контрагенты) есть табличная часть под названием КонтактнаяИнформация. Проанализируем её ключевые поля, которые задействуются при записи адреса:

Прямая запись в табличную часть (ручной способ)

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

  1. Получаем объект физического лица через ПолучитьОбъект().
  2. Ищем нужную строку в табличной части по Вид.
  3. Если строка не найдена — добавляем новую.
  4. Заполняем поля Тип, Вид и Представление.
  5. Записываем объект.

Посмотрим на пример программной реализации этого подхода:


ОбъектФизЛицо = СсылкаНаФизЛицо.ПолучитьОбъект();

// Поиск существующей записи адреса проживания
СтрокаКИ = ОбъектФизЛицо.КонтактнаяИнформация.Найти(Справочники.ВидыКонтактнойИнформации.АдресФактическийФизическиеЛица, "Вид");

Если СтрокаКИ = Неопределено Тогда
    СтрокаКИ = ОбъектФизЛицо.КонтактнаяИнформация.Добавить();
    СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.АдресФактическийФизическиеЛица;
    СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
КонецЕсли;

СтрокаКИ.Представление = "г. Новосибирск, пр. Красный, д. 101";
// Поле ЗначенияПолей для свободной формы можно оставить пустым, 
// но лучше сформировать минимальную структуру БСП

ОбъектФизЛицо.Записать();

Нюансы работы с форматом JSON и XML

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

Рассмотрим, как это сделать правильно:


АдресСтрокой = "г. Москва, ул. Тверская, 7";
ВидКИ = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица;

// Формируем структуру контактной информации
СтруктураКИ = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьКонтактнуюИнформациюОбъекта(ВидКИ, АдресСтрокой);

// Теперь записываем через стандартный механизм
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Физлицо, СтруктураКИ, ВидКИ);

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

Особенности иностранных адресов и прав доступа

Проанализируем еще два важных момента. Во-первых, если адрес вводится в свободной форме, потому что он иностранный, необходимо убедиться, что в виде контактной информации или в самой записи указана страна, отличная от РФ. В противном случае проверки отчетности (например, для СФР или ФНС), как и ошибки корректировки регистров зарплаты, могут помешать сдаче отчетности.

Во-вторых, обратите внимание на права доступа. При выполнении кода от лица пользователя с ограниченными правами, запись в табличную часть КонтактнаяИнформация может быть заблокирована, даже если есть права на изменение самого справочника ФизическиеЛица. Всегда проверяйте наличие ролей на работу с контактной информацией в профиле пользователя.

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

← На главную