В типовых конфигурациях 1С (например, «1С:Бухгалтерия предприятия 3.0»), использующих Библиотеку стандартных подсистем (БСП), состав полей контактной информации в форме контрагента формируется динамически. Программа считывает настройки из справочника ВидыКонтактнойИнформации. Если из справочника исчезает предопределенная группа СправочникКонтрагенты или входящие в нее элементы (например, ЮрАдресКонтрагента), соответствующие строки просто перестают отображаться в карточке контрагента.
Разберем причины возникновения этой неполадки и подробно рассмотрим надежные способы ее устранения.
Проанализируем основные причины, из-за которых возникает данная ситуация:
ИмяПредопределенныхДанных. Если значение этого поля очищается (например, из-за некорректной работы сторонних обработок, сбоев обмена или ошибок синхронизации), элемент превращается в обычный пользовательский и код конфигурации перестает его находить..cf не создадут недостающие строки в таблицах.Разберем самый быстрый способ восстановления, если конфигурация типовая и поддерживается механизм обновления БСП. Запустим внешнюю обработку или выполним на сервере процедуру вызова стандартных механизмов обновления предопределенных элементов.
ОбновлениеИнформационнойБазы.ОбновитьПредопределенныеЭлементы(Метаданные.Справочники.ВидыКонтактнойИнформации);
Если требуется запустить комплексную проверку всех предопределенных объектов метаданных, используем следующий вызов:
СтандартныеПодсистемыСервер.ВосстановитьПредопределенныеЭлементы();
Также можно принудительно запустить процедуры обновления подсистем. Для этого уменьшим версию подсистемы СтандартныеПодсистемы в регистре сведений ВерсииПодсистем и выполним запуск сеанса «1С:Предприятие» с параметром командной строки /C ЗапуститьОбновлениеИнформационнойБазы.
Если строка юридического адреса или группа контрагентов присутствует в справочнике ВидыКонтактнойИнформации, но отображается как обычный пользовательский элемент (без значка предопределенного), восстановим системное имя ИмяПредопределенныхДанных программно.
Объект = СсылкаНаЭлемент.ПолучитьОбъект();
Объект.ИмяПредопределенныхДанных = "ЮрАдресКонтрагента";
Объект.Записать();
После записи объект снова свяжется с метаданными конфигурации и форма контрагента начнет корректно отображать адрес.
Если группа или элемент были полностью удалены из базы данных, создадим их заново программно, явно назначив реквизит ИмяПредопределенныхДанных.
// 1. Создаем предопределенную группу для контрагентов
ГруппаКонтрагенты = Справочники.ВидыКонтактнойИнформации.СоздатьГруппу();
ГруппаКонтрагенты.Наименование = "Справочник ""Контрагенты""";
ГруппаКонтрагенты.ИмяПредопределенныхДанных = "СправочникКонтрагенты";
ГруппаКонтрагенты.Записать();
// 2. Создаем предопределенный элемент юридического адреса
ЭлементАдрес = Справочники.ВидыКонтактнойИнформации.СоздатьЭлемент();
ЭлементАдрес.Наименование = "Юридический адрес";
ЭлементАдрес.Родитель = ГруппаКонтрагенты.Ссылка;
ЭлементАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
ЭлементАдрес.ИмяПредопределенныхДанных = "ЮрАдресКонтрагента";
ЭлементАдрес.Записать();
Посмотрим, как восстановить структуру справочника без написания кода, если есть доступ к демонстрационной или резервной копии базы той же версии:
ВидыКонтактнойИнформации со всеми подчиненными элементами.Сохранение введенных ранее адресов: Если предопределенный элемент создается заново с новым уникальным идентификатором, ранее введенные адреса в регистре сведений КонтактнаяИнформация останутся привязаны к старому (удаленному) идентификатору. В этом случае воспользуемся типовой обработкой ПоискИУдалениеДублей (или «Поиск и замена значений»), чтобы перенести накопленные записи контактной информации со старой битой ссылки на вновь созданный предопределенный элемент.
Ограничения для узлов РИБ: В подчиненных узлах распределенной информационной базы механизмы автоматического восстановления предопределенных данных заблокированы платформой. Все описанные операции восстановления необходимо выполнять исключительно в главном (центральном) узле с последующей выгрузкой изменений в подчиненные базы через стандартный обмен.