Пропали фактический и юридический адреса контрагентов в 1С: как вернуть контактную информацию и исправить справочник

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

Каждый специалист, работающий с типовыми конфигурациями на платформе 1С:Предприятие 8.3 (такими как «1С:Бухгалтерия предприятия 3.0», «1С:Управление нашей фирмой» или «1С:Зарплата и управление персоналом»), рано или поздно сталкивается с загадочными сбоями в механизме контактной информации. Одна из наиболее распространенных и неприятных проблем — внезапное исчезновение возможности вводить и редактировать «Фактический адрес» и «Юридический адрес» в карточке контрагента. Поля просто пропадают с формы, а вместо них остается пустое место или только «Почтовый адрес».

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

В чем первопричина сбоя: почему «ломаются» виды контактной информации

Прежде чем приступать к активным действиям, выясним причину происходящего. Вся контактная информация (адреса, телефоны, email) в современных конфигурациях 1С хранится и управляется через специальный справочник ВидыКонтактнойИнформации. В этом справочнике есть предопределенные группы и элементы, созданные разработчиками на уровне конфигуратора. Для контрагентов это группа СправочникКонтрагенты («Контактная информация справочника "Контрагенты"»), внутри которой находятся предопределенные элементы «Юридический адрес контрагента», «Фактический адрес контрагента» и другие.

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

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

Теперь, когда мы понимаем физику процесса, рассмотрим пошагово методы лечения нашей базы данных. Перед выполнением любых процедур обязательно создайте резервную копию базы данных (файловый бэкап .1CD или выгрузку .dt)!

Способ 1. Программное восстановление предопределенного состояния (Для разработчиков)

Если вы имеете доступ к запуску внешних обработок или можете выполнить произвольный код на сервере (например, через обработку «Групповое изменение реквизитов» в режиме разработчика или через «Групповую обработку объектов» с возможностью выполнения кода), этот способ будет самым быстрым. Нам необходимо принудительно вернуть элементам справочника их предопределенные системные имена и установить признак использования.

Рассмотрим код, который возвращает правильные настройки для группы «Контрагенты» и основных видов адресов:


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

// 2. Восстанавливаем предопределенный Юридический адрес
ЮрАдрес = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Юридический адрес контрагента", , ГруппаКонтрагенты);
Если ЗначениеЗаполнено(ЮрАдрес) Тогда
    ОбъектЮр = ЮрАдрес.ПолучитьОбъект();
    ОбъектЮр.ИмяПредопределенныхДанных = "ЮрАдресКонтрагента";
    ОбъектЮр.Используется = Истина;
    ОбъектЮр.ОбменДанными.Загрузка = Истина;
    ОбъектЮр.Записать();
    Сообщить("Предопределенное имя для Юридического адреса восстановлено!");
КонецЕсли;

// 3. Восстанавливаем предопределенный Фактический адрес
ФактАдрес = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Фактический адрес контрагента", , ГруппаКонтрагенты);
Если ЗначениеЗаполнено(ФактАдрес) Тогда
    ОбъектФакт = ФактАдрес.ПолучитьОбъект();
    ОбъектФакт.ИмяПредопределенныхДанных = "ФактАдресКонтрагента";
    ОбъектФакт.Используется = Истина;
    ОбъектФакт.ОбменДанными.Загрузка = Истина;
    ОбъектФакт.Записать();
    Сообщить("Предопределенное имя для Фактического адреса восстановлено!");
КонецЕсли;

Важное примечание: Использование свойства ОбменДанными.Загрузка = Истина критически важно. Оно блокирует запуск прикладных обработчиков БСП в модуле объекта при вызове метода Записать(), позволяя нам обойти системные проверки и насильно записать нужные значения реквизитов.

Способ 2. Выгрузка и загрузка эталонных данных через XML (Наиболее надежный метод)

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

Разберем этот процесс по шагам:

  1. Создайте на локальном компьютере пустую базу данных «1С:Бухгалтерия предприятия» (или вашей конфигурации) строго того же релиза, что и рабочая база. Запустите ее один раз в режиме «Предприятие», чтобы завершилось первоначальное заполнение всех констант и справочников.
  2. Возьмите универсальную обработку «Выгрузка загрузка данных XML» (ее можно найти на диске ИТС или в каталоге шаблонов установленной платформы в папке \1c\ts).
  3. Откройте эту обработку в созданной чистой эталонной базе. В списке объектов найдите и отметьте галочкой только справочник Виды контактной информации. Нажмите кнопку «Выгрузить» и сохраните данные в XML-файл на диске.
  4. Запустите эту же обработку в вашей поврежденной рабочей базе. Перейдите на вкладку «Загрузка», выберите сохраненный ранее XML-файл и нажмите кнопку «Загрузить».

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

Способ 3. Использование встроенного обновления БСП

Разработчики Библиотеки стандартных подсистем предусмотрели процедуры для экстренного восстановления системных данных. Мы можем принудительно запустить фоновую процедуру обновления видов контактной информации по умолчанию.

Для этого нам понадобится открыть консоль для выполнения кода (например, внешнюю обработку «Групповое изменение реквизитов» в режиме разработчика, выбрав любой объект, перейдя в настройки и выбрав вкладку выполнения произвольного алгоритма) и выполнить следующую команду:


УправлениеКонтактнойИнформациейСлужебный.ЗаполнитьПредопределенныеВидыКонтактнойИнформации();

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

Способ 4. Поиск и устранение дублирующихся элементов

Очень часто после «кривого» обмена данными в справочнике ВидыКонтактнойИнформации образуется хаос из дублирующих записей. Например, система видит два элемента «Юридический адрес контрагента» — один предопределенный (но отключенный), а второй пользовательский (активный, пришедший из другой базы). Из-за этого карточка контрагента перестает понимать, какое именно поле выводить на форму, и скрывает оба.

Выполним очистку справочника от дублей:

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

Как не допустить повторения проблемы

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

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

← На главную