При активной разработке или доработке типовых конфигураций (например, 1С:Бухгалтерия предприятия 3.0) специалисты часто сталкиваются с ситуацией, когда попытка внести изменения в общий модуль приводит к аварийному завершению работы Конфигуратора. Программа зависает, выводит сообщение о критической ошибке или выдает уведомление: «Нарушена целостность структуры конфигурации». Снятие модуля с поддержки в таком случае чаще всего не помогает. Проанализируем причины этой проблемы и подробно рассмотрим способы её исправления, а также архитектурные альтернативы.
Выясним главные причины, по которым платформа 1С:Предприятие 8.3 отказывается сохранять изменения в общем модуле и завершает работу с ошибкой:
Config или ConfigCAS.rphost на сервере 1С содержат устаревшее или искаженное структурное дерево объектов.Перед тем как приступать к более радикальным мерам, выполним базовый комплекс восстановительных работ:
Удалим каталог с кэш-файлами 1С. Для этого необходимо завершить все сеансы 1С и перейти в папки:
%LocalAppData%\1C\1cv8
%AppData%\1C\1cv8
Удалим все каталоги с длинными именами-идентификаторами (GUID).
Остановим службу 1C:Enterprise 8.3 Server Agent, удалим временно созданные папки из каталога `snaccfg` и каталогов базы на сервере, после чего заново запустим службу.
Для файловых баз запустим утилиту chdbfl.exe (находится в папке bin установленной платформы), выберем файл 1Cv8.1CD и установим флаг «Исправлять обнаруженные ошибки».
Зайдем в режим Конфигуратора, перейдем в меню Администрирование — Тестирование и исправление. Выберем пункты «Проверка логической целостности» и «Реструктуризация таблиц информационной базы».
Если структура повреждена в памяти Конфигуратора, попробуем пересобрать конфигурацию через файл `.cf`:
1cv8.cf.1cv8.cf. Это действие полностью перезаписывает структуру основной конфигурации.Если база работает в клиент-серверном режиме, причиной ошибки часто являются застрявшие временные данные динамического обновления. Рассмотрим, как очистить их напрямую через SQL-запросы на примере MS SQL:
Важно: Перед выполнением любых прямых запросов к базе данных обязательно создайте резервную копию базы (SQL-дамп)!
DELETE FROM ConfigSave
Config:
DELETE FROM Config WHERE FileName = 'DynamicallyUpdated'
Если исправлять поврежденный общий модуль прямо сейчас нет возможности (например, из-за жестких временных рамок), или платформа не дает снять его с поддержки, рассмотрим архитектурное решение: вынесение требуемого кода в отдельную обработку.
Разберем по шагам, как правильно перенести процедуры и как к ним обращаться из других объектов (например, из отчетов или документов):
СрокиОплаты1.Экспорт в объявлении процедуры, чтобы она была доступна извне:
Процедура ПросроченнаяЗадолженность(Параметр1, Параметр2) Экспорт
// Ваша логика расчета
КонецПроцедуры
СрокиОплаты1.ПросроченнаяЗадолженность(), платформа выдаст ошибку о том, что переменная не определена. Правильный вызов выполняется через менеджер обработки с помощью метода Создать():
// Создаем экземпляр обработки и вызываем экспортную процедуру модуля объекта
Обработки.СрокиОплаты1.Создать().ПросроченнаяЗадолженность(Значение1, Значение2);
В современных релизах платформы (начиная с 8.3.10) наилучшим решением для доработки функционала общих модулей без снятия их с поддержки является использование Расширений конфигурации.
Рассмотрим алгоритм работы с расширением:
СрокиОплатыДокументов), кликнем по нему правой кнопкой мыши и выберем Добавить в расширение.
&Вместо("РассчитатьСроки")
Процедура Расш1_РассчитатьСроки(Параметры)
// Измененная логика процедуры
КонецПроцедуры
Использование расширений полностью изолирует ваши доработки от основной конфигурации, исключает вылеты при редактировании общих модулей поставщика и сохраняет базу в безошибочном состоянии при последующих обновлениях.