← На главную
При разработке и доработке отчетов в тяжелых конфигурациях (например, Управление производственным предприятием или Комплексная автоматизация) разработчики часто сталкиваются с ситуацией, когда стандартная команда контекстного меню Сохранить как внешний отчет... приводит к глухому зависанию платформы. В строке состояния процесс может останавливаться на определенном проценте (например, 60–63%), после чего приложение перестает отвечать.
Проанализируем ситуацию, выясним технические причины такого поведения и разберем по шагам все способы решения проблемы — от простых системных действий до альтернативных методов извлечения отчета.
Причины зависания платформы при выгрузке отчета
Рассмотрим подробнее, почему возникает данный сбой:
- Ограничение 32-битной архитектуры и нехватка виртуальной памяти: Если Конфигуратор запущен в 32-разрядной операционной системе (или используется 32-битный клиент
1cv8.exe), адресному пространству процесса по умолчанию доступно не более 2 ГБ оперативной памяти. При формировании файла .erf платформа выполняет сериализацию метаданных, анализирует общие модули, связи и макеты. При работе с большими конфигурациями процесс исчерпывает доступную память, начинается непрерывный свопинг на диск и интерфейс зависает. - Блокировка системных каталогов временных файлов: Во время сохранения отчета платформа 1С активно создает промежуточные структуры в каталогах
%TEMP% и %TMP%. Если доступ к этим файлам блокируется антивирусным монитором, службой индексации Windows или переполненным диском, запись прерывается. - Накопление поврежденного кэша конфигурации: Локальный кэш структуры метаданных и пользовательские настройки могут содержать некорректные ссылки, приводящие к циклической ошибке при сборке внешнего отчета.
- Ошибки сериализации в конкретных релизах платформы: В некоторых версиях технологической платформы (в частности, ветки
8.3.8) присутствовали ошибки утечки памяти при работе с универсальными отчетами и сложными схемами СКД.
Способ 1. Перезагрузка системы и очистка временных файлов
Разберем базовые действия, которые позволяют освободить заблокированные дескрипторы файлов и очистить оперативную память:
- Выполним перезагрузку операционной системы. Это снимает блокировки системных процессов и восстанавливает непрерывное адресное пространство RAM.
- Очистим каталог временных файлов. Для этого откроем проводник, введем в адресной строке
%TEMP% и удалим все доступные файлы и каталоги. - Очистим кэш баз 1С. Для быстрого сброса кэша удалим информационную базу из списка запуска 1С и добавим ее повторно, указав прежний путь к каталогу файловой базы или параметрам сервера.
- Временно отключим сканирование каталога базы и папки
%TEMP% в антивирусном ПО.
Способ 2. Расширение адресного пространства для 32-разрядной Windows
Если разработка ведется на 32-битной версии Windows (например, Windows 7 x86), стандартного лимита в 2 ГБ для тяжелой конфигурации недостаточно. Выделим процессу до 3 ГБ памяти:
- Запустим командную строку
cmd.exe от имени Администратора. - Выполним системную команду:
bcdedit /set IncreaseUserVa 3072 - Перезагрузим компьютер для применения изменений.
- После перезагрузки запустим Конфигуратор и повторим операцию сохранения отчета.
Важно: При первой возможности перенесите разработку на 64-битную операционную систему с достаточным объемом оперативной памяти.
Способ 3. Выгрузка отчета через чистую базу (CF-файл)
Если рабочая файловая база перегружена данными, транзакциями или имеет локальные повреждения таблиц конфигурации, выгрузим конфигурацию в отдельную тестовую среду:
- В исходной базе откроем меню Конфигурация → Сохранить конфигурацию в файл... и сохраним файл с расширением
.cf. - Создадим новую пустую файловую базу данных через стартер 1С.
- Откроем Конфигуратор пустой базы и выберем меню Конфигурация → Загрузить конфигурацию из файла..., указав сохраненный ранее CF-файл.
- В дереве метаданных найдем нужный отчет, нажмем по нему правой кнопкой мыши и выберем Сохранить как внешний отчет.... В пустой базе без накопленных пользовательских данных и кэша процесс выгрузки завершается успешно.
Способ 4. Ручной перенос компонентов в новый внешний отчет
Если штатная выгрузка по-прежнему зависает из-за особенностей вложенного механизма УниверсальныйОтчет, перенесем структуру вручную:
- В главном меню Конфигуратора выберем Файл → Новый..., укажем тип Внешний отчет и нажмем ОК.
- Откроем дерево объектов встроенного отчета в конфигурации.
- Скопируем реквизиты, табличные части и макеты из встроенного отчета во вновь созданный внешний отчет (через контекстное меню или перетаскиванием).
- Если отчет использует Схему компоновки данных (СКД): откроем макет СКД во встроенном отчете, нажмем кнопку Сохранить схему в файл (сохранится файл XML), затем в новом внешнем отчете добавим основную схему компоновки и загрузим структуру из этого файла.
- Скопируем исходный программный код из Модуля объекта и модулей форм встроенного отчета в соответствующие модули внешнего отчета.
- Сохраним готовый отчет через меню Файл → Сохранить в формате
.erf.
Способ 5. Проверка физической целостности базы данных
Ошибки сериализации могут быть вызваны нарушением структуры таблиц файла базы 1Cv8.1CD. Разберем порядок проверки:
- Полностью закроем все сеансы 1С и Конфигуратор.
- Создадим резервную копию файла
1Cv8.1CD. - Перейдем в каталог установки платформы (по умолчанию
C:\Program Files (x86)\1cv8\8.3.X.X\bin) и запустим утилиту chdbfl.exe. - Укажем путь к файлу базы данных, установим флаг Исправлять обнаруженные ошибки и нажмем Выполнить.
- После завершения исправления запустим Конфигуратор и повторим сохранение внешнего отчета.