При обновлении нетиповых, сильно кастомизированных и «тяжелых» конфигураций (таких как «1С:Управление производственным предприятием» в связке с крупными отраслевыми решениями, например, «БИТ.ФИНАНС») специалисты часто сталкиваются со скрытыми техническими проблемами. Одна из самых неприятных ситуаций — когда процесс обновления внезапно прерывается, а Конфигуратор просто закрывается без вывода каких-либо ошибок («вылетает») на этапе считывания или загрузки конфигурации поставщика. При этом на тестовых базах или файловых копиях то же самое обновление может проходить абсолютно штатно.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем неочевидные серверные факторы, влияющие на процесс обновления, и рассмотрим эффективные пошаговые методики устранения ошибки. В случаях, когда сопровождение текущей системы становится слишком трудозатратным, можно изучить раздел с решениями для перехода с 1С:УПП на более современные конфигурации.
Ситуация, когда на тестовом сервере или локальной копии обновление выполняется успешно, а на рабочей СУБД стабильно «отваливается», указывает на различия в системном окружении или инфраструктурных настройках. Давайте проанализируем основные факторы влияния СУБД MS SQL Server и сервера приложений 1С:Предприятие.
1. Модель восстановления базы данных (Recovery Model)
На рабочих базах данных СУБД практически всегда настроена Полная модель восстановления (Full Recovery Model). Это необходимо для обеспечения возможности восстановления данных на любой момент времени с помощью логов транзакций. Тестовые же базы чаще всего работают в Простой модели (Simple Recovery Model).
Во время обновления конфигураций масштаба УПП система совершает сотни тысяч записей в таблицы метаданных. При полной модели восстановления файл лога транзакций (.ldf) мгновенно разрастается до гигантских размеров. Если на диске под логи не хватает места, либо скорость записи дисковой подсистемы недостаточна, SQL-сервер приостанавливает транзакцию для выделения пространства. Если задержка превышает таймаут соединения, процесс 1С аварийно завершается.
2. Ограничения размера и авторасширения базы TempDB
Системная база данных TempDB активно используется СУБД при операциях сравнения и объединения больших объемов метаданных. Если для файлов TempDB задан слишком маленький шаг авторасширения (например, по умолчанию 1 МБ или 10%), SQL-сервер тратит драгоценное время на постоянное изменение размеров файлов, что приводит к дисковым очередям и падению клиента 1С.
3. Лимиты рабочего процесса rphost и кэш сервера
При сопоставлении тяжелых объектов метаданных рабочий процесс сервера 1С (rphost) может потреблять колоссальный объем оперативной памяти. Начиная с платформы 8.3.15, в кластере 1С действуют жесткие внутренние алгоритмы контроля памяти. Если процесс превышает допустимые лимиты или время жизни, установленное в настройках кластера, сервер 1С принудительно перезапускает rphost. Конфигуратор на стороне пользователя при этом мгновенно закрывается без предупреждения.
Также не следует забывать о серверном кэше. Часто администраторы очищают только локальный кэш пользователя, забывая о временных файлах службы сервера «1С:Предприятие» (папка пользователя usr1cv8 на сервере приложений). Накопившийся там мусор может провоцировать ошибки формата потока при обновлении структуры конфигурации поставщика.
4. Логическое повреждение («битость») конфигурации поставщика
Это наиболее частая причина сбоя непосредственно в структуре данных. Если в прошлом обновления выполнялись с нарушениями правил (например, через прямое объединение с файлом .cf без корректного сохранения поддержки, или путем пропуска обязательных промежуточных релизов при обновлении через файлы обновлений .cfu), внутренние уникальные идентификаторы (UUID) метаданных могут рассинхронизироваться. Конфигурация базы данных перестает понимать структуру поставляемого обновления, что вызывает критический сбой на этапе загрузки конфигурации поставщика.
Если мы имеем дело с нарушением целостности метаданных поддержки, нам необходимо полностью пересобрать конфигурацию поставщика в рабочей базе, вернув ей эталонный вид, соответствующий текущему релизу. Проанализируем этот процесс по шагам.
Шаг 1. Создание резервной копии и выгрузка текущей конфигурации
Перед началом любых манипуляций обязательно создаем резервную копию базы данных средствами СУБД или выгрузкой в .dt. Затем открываем Конфигуратор рабочей базы и выгружаем нашу текущую доработанную конфигурацию в файл .cf через меню Конфигурация — Выгрузить конфигурацию в файл... (назовем его, например, my_work_with_changes.cf).
Шаг 2. Полное снятие базы с поддержки
Переходим в меню Конфигурация — Поддержка — Настройка поддержки. В открывшемся окне нажимаем кнопку Снять с поддержки. Подтверждаем действие. Теперь наша база полностью лишена конфигурации поставщика, таблицы Config очищены от старых связей, мешавших обновлению.
Шаг 3. Загрузка «чистой» конфигурации поставщика текущей версии
Нам понадобится чистый, абсолютно типовой файл конфигурации (.cf) той версии, которая сейчас установлена у нас (в рассматриваемом примере это релиз УПП .124). Выполняем сравнение и объединение:
.cf версии .124.Шаг 4. Возврат доработок и кода
На данный момент в Конфигураторе находится чистая типовая конфигурация, но нам нужно вернуть все наши доработки из сохраненного файла. Повторяем процедуру сравнения:
my_work_with_changes.cf.После проведения данной процедуры конфигурация поставщика будет полностью исправлена, а связь UUID восстановится. Последующее штатное обновление на следующий релиз (например, до .125) через файл обновления .cfu должно пройти без каких-либо зависаний и вылетов.
Если предыдущий способ по каким-то причинам не применим непосредственно на работающей базе данных (например, из-за жесткого регламента простоя), мы можем использовать альтернативный подход, который успешно применил автор темы на форуме.
Рассмотрим алгоритм действий:
my_work_with_changes.cf).ready_to_update_125.cf). Таким образом, мы получаем готовый «слепок» будущей рабочей базы, но с уже корректно интегрированной и обновленной конфигурацией поставщика внутри самого файла.ready_to_update_125.cf.Этот метод исключает ресурсоемкий для СУБД процесс сопоставления и реструктуризации тяжелых таблиц поставщика непосредственно в момент обновления на рабочей базе, так как Конфигуратор получает уже готовую, собранную структуру метаданных.
Чтобы гарантированно обезопасить себя от прерывания транзакций и падения процессов при обновлении масштабных конфигураций, настоятельно рекомендуем выполнить следующие настройки на вашем SQL-сервере перед запуском обновления:
Временный перевод базы данных в режим Simple
Для минимизации нагрузки на дисковую подсистему и предотвращения лавинообразного роста лога транзакций временно измените модель восстановления базы данных на простую. Выполнить это можно с помощью следующего скрипта в SQL Server Management Studio (SSMS):
-- Переводим базу в режим Simple перед обновлением 1С
ALTER DATABASE [Имя_Вашей_Базы] SET RECOVERY SIMPLE;
После того как обновление конфигурации базы данных в 1С будет успешно завершено (нажата кнопка F7 и обновлены таблицы метаданных), верните базу в режим полной модели восстановления и обязательно сделайте полную резервную копию:
-- Возвращаем полную модель восстановления базы данных
ALTER DATABASE [Имя_Вашей_Базы] SET RECOVERY FULL;
Оптимизация системной базы TempDB
Убедитесь, что файлы базы TempDB расположены на быстром SSD-накопителе. Настройте фиксированный шаг авторасширения файлов (например, по 256 МБ или 512 МБ), чтобы SQL-сервер не тратил процессорное время на динамическое выделение памяти мизерными порциями во время тяжелых транзакций.
Очистка кэша службы сервера приложений 1С
Перед началом работ остановите службу сервера «1С:Предприятие» и физически удалите папки временных файлов в каталоге реестра кластера (по умолчанию это папка srvinfo\reg_1541\snccntry и аналогичные директории временных файлов), а также очистите локальные папки Temp системного пользователя, из-под которого запущена служба сервера 1С.
Выполнение этих комплексных мер позволит вам успешно и без сбоев обновлять даже самые тяжелые и измененные конфигурации на платформе 1С:Предприятие 8.3. Для регулярного технического сопровождения нескольких систем удобно использовать программу для автоматического обновления, архивирования и тестирования баз 1С.