При администрировании и разработке в системе «1С:Предприятие» специалисты нередко сталкиваются с последствиями некорректного обновления информационных баз. Типичный сценарий: после обновления нетиповой конфигурации на новый релиз часть уникального функционала («фич») теряется, а стандартные механизмы начинают работать со сбоями. Например, при попытке создать и записать новый элемент справочника Контрагенты система выдает критическую ошибку, хотя в чистой типовой конфигурации того же релиза эта операция проходит успешно.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем классические ошибки разработчиков при попытке восстановить конфигурацию и пошагово рассмотрим правильный алгоритм возврата к рабочей типовой конфигурации с сохранением ваших данных и доработок.
---
Рассмотрим распространенное заблуждение начинающих специалистов. Столкнувшись со сломанным функционалом в рабочей базе, разработчик создает чистую информационную базу с типовой конфигурацией и пытается загрузить в нее данные из поврежденной базы через файл выгрузки с расширением .dt. В результате они получают ту же самую нерабочую базу со всеми старыми ошибками.
Выясним причину этого поведения. Файл .dt представляет собой полный снимок информационной базы, который содержит в себе:
Когда мы выполняем операцию «Загрузить информационную базу» в Конфигураторе, платформа полностью стирает целевую базу (даже если там была установлена чистая типовая конфигурация) и разворачивает на ее месте содержимое файла .dt. Таким образом, мы просто получаем точную копию исходной нерабочей базы, включая «криво» обновленную конфигурацию.
---
Проанализируем техническую сторону сбоя при записи контрагентов. В современных конфигурациях 1С, разработанных на базе БСП (Библиотеки стандартных подсистем), запись контрагента неразрывно связана со справочником Виды контактной информации. В этот момент происходят сложные процедуры валидации, сопоставления и сохранения адресов, телефонов и электронной почты.
Сбой записи чаще всего вызывают следующие факторы:
Тип (например, «Адрес» или «Телефон») или Вид объекта контактной информации (указывающий на связь со справочником Контрагенты). Без этих данных система блокирует запись.---
Чтобы восстановить штатный функционал, исправить ошибки записи и при этом сохранить все накопленные данные и доработки, мы должны применить правильную методику сравнения и объединения конфигураций. Разберем этот процесс по шагам.
Прежде всего нам необходимо разделить конфигурацию (программный код) и данные.
.dt в новую, временную пустую базу (назовем ее «Временная база-источник»).broken_custom.cf. Это файл, который содержит наши уникальные доработки («фичи»), но при этом имеет поврежденную структуру БСП.typical.cf.Теперь мы должны исправить рабочую базу, объединив её с чистой типовой конфигурацией typical.cf, взяв ее за основу.
typical.cf.typical.cf.F5 или F7).---
Если после приведения конфигурации к типовому виду ошибки с записью контрагентов сохраняются, значит, повреждены сами данные внутри справочника Виды контактной информации. Выясним, как устранить эти последствия в режиме «1С:Предприятие».
Перейдем в раздел НСИ и администрирование (или Администрирование) -> Обслуживание -> Корректировка данных и запустим обработку Поиск и удаление дублей. С ее помощью найдем дублирующиеся элементы в справочнике Виды контактной информации и сольем их, перенеся все ссылки со старых неверных элементов на новые предопределенные.
Иногда система не позволяет пометить дубликаты на удаление, так как считает их «предопределенными». Чтобы решить эту проблему, мы можем написать простую обработку, которая очистит признак предопределенности у ложных элементов, сделав их обычными пользовательскими объектами. После этого их можно будет легко удалить или объединить.
Рассмотрим пример кода для очистки предопределенности:
Выборка = Справочники.ВидыКонтактнойИнформации.Выбрать();
Пока Выборка.Следующий() Цикл
// Ищем элементы с заполненным именем предопределенных, содержащие признак дубля в наименовании
Если ЗначениеЗаполнено(Выборка.ИмяПредопределенныхДанных) И Найти(Выборка.Наименование, "Дубль") > 0 Тогда
ОбъектКРедактированию = Выборка.ПолучитьОбъект();
// Сбрасываем имя предопределенных данных в пустую строку
ОбъектКРедактированию.ИмяПредопределенныхДанных = "";
ОбъектКРедактированию.ОбменДанными.Загрузка = Истина;
ОбъектКРедактированию.Записать();
ЗаписьЖурналаРегистрации("СбросПредопределенности", УровеньЖурналаРегистрации.Информация,,, "Сброшен признак у элемента: " + Выборка.Наименование);
КонецЕсли;
КонецЦикла;
После выполнения данного кода поврежденные дубли перестанут считаться системой как жестко заданные в конфигурации, и стандартная обработка удаления дублей сможет без труда завершить свою работу.
Для того чтобы система заново инициализировала и заполнила все недостающие предопределенные элементы КИ правильными реквизитами, мы можем запустить базу со специальным параметром командной строки. Для этого закроем базу и запустим ее через ярлык или командную строку со следующим ключом:
/C СтартЗаполненияПредопределенныхДанных
Этот параметр заставит механизмы БСП просканировать справочники метаданных и автоматически восстановить утерянные системные связи и заполнить обязательные реквизиты видов контактной информации.
---
Мы детально разобрали процесс исправления конфигурации после некорректного слияния. Помните главные правила администратора 1С: никогда не используйте файл .dt для переноса изменений конфигурации в живую базу, всегда разделяйте структуру (код) и данные, контролируйте целостность справочников контактной информации БСП и регулярно создавайте резервные копии перед любыми критическими операциями.