При переходе с устаревших конфигураций «1С:Предприятие 7.7» на современные решения на платформе 8.3 специалисты часто сталкиваются с трудностями. Одной из самых коварных ошибок является остановка процесса на этапе загрузки документов с системным сообщением: «Ошибка при вызове метода контекста (ВыполнитьЗагрузкуДанныхНаСервере)... Ошибка конфигурации. Соединение с сервером баз данных удерживается после окончания вызова сервера. Возможно, не был освобожден менеджер временных таблиц». Разберем подробно, почему это происходит и как довести перенос данных до победного финала.
Прежде всего, проанализируем природу данной ошибки. Она специфична для платформы «1С:Предприятие 8.3» и связана с внутренним механизмом управления ресурсами. Когда выполняется процедура ВыполнитьЗагрузкуДанныхНаСервере, система создает временные таблицы в базе данных для обработки входящего потока информации. Если в процессе записи объекта (документа или справочника) происходит критический сбой или образуется циклическая ссылка в памяти, платформа не может корректно закрыть МенеджерВременныхТаблиц.
Ситуация осложняется тем, что даже в файловом варианте работы платформы 8.3 используются механизмы, имитирующие работу клиент-серверного взаимодействия. Если объект «зависает» в кэше или не заполнены обязательные реквизиты (например, период в регистре сведений), транзакция не завершается должным образом, и сервер (даже виртуальный в файловой базе) продолжает удерживать соединение.
Как показывает практика и подтверждают пользователи, наиболее эффективным решением является использование полностью чистой целевой базы. Рассмотрим, почему это критически важно:
Перед началом процесса убедимся, что база 8.3 создана «с нуля», в ней нет ни одного введенного документа или созданного вручную элемента справочника.
Если даже в пустой базе возникает ошибка, значит, проблема кроется в конкретных данных внутри «семерки». Проанализируем алгоритм локализации ошибки:
МенеджерВременныхТаблиц.Часто причиной является отсутствие обязательного реквизита, который в 7.7 мог быть пустым, а в 8.3 стал обязательным для заполнения.
Огромная нагрузка на систему при переносе создается не самой записью данных, а их проведением. При записи документа в 8.3 срабатывают многочисленные подписки на события и обработчики ОбработкаПроведения, которые активно используют временные таблицы для расчета остатков и формирования проводок.
Выясним, как снизить нагрузку на МенеджерВременныхТаблиц:
Иногда ошибка вызвана не качеством данных, а состоянием окружения 1С. Разберем шаги по очистке системы:
%AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8. Это исключит влияние старых сессий и зависших временных объектов.Поскольку в файловом режиме платформа активно работает с файлами блокировок 1Cv8.1cl и временными файлами в каталоге пользователя, антивирус может заблокировать доступ к ним в момент записи. Система не сможет вовремя удалить временную таблицу и выдаст ошибку удержания соединения.
Рекомендация: На время миграции данных добавим папку с информационной базой и папку временных файлов пользователя в исключения антивирусного сканера.
Если вы используете собственную доработанную обработку загрузки, проанализируйте фрагменты кода, отвечающие за вызов сервера. Убедитесь, что внутри транзакций не создаются бесконечные циклы. Типовой вызов выглядит так:
Результат = ВыполнитьЗагрузкуДанныхНаСервере(АдресФайла);
// После этого метода платформа должна автоматически очистить менеджер временных таблиц.
// Если этого не происходит, проверьте, нет ли в модуле глобальных переменных,
// удерживающих ссылки на загруженные объекты.
Попробуем разделить загрузку на порции (например, по 100-500 объектов в одной транзакции), принудительно завершая вызов сервера и запуская новый. Это позволит платформе очищать ресурсы между порциями данных.
Подводя итог, отметим: в большинстве случаев проблема решается подготовкой идеально чистой приемной базы и отказом от немедленного проведения документов при загрузке. Эти простые действия позволяют обойти большинство ограничений платформы 8.3 по управлению памятью и успешно перенести накопленные данные из старых систем.