Ситуация, когда после очередного сохранения в «Конфигураторе» 1С:Предприятия 7.7 внешний отчет (файл с расширением .ert) превращается в «тыкву», знакома многим опытным разработчикам. Файл внезапно «худеет» до 2–3 Кб, а при попытке открыть его в Конфигураторе вместо модуля и формы мы видим только пустое окно описания. В режиме «Предприятие» такой отчет, естественно, не запускается. Проанализируем причины этой проблемы и разберем по шагам методы спасения кода и предотвращения подобных катастроф в будущем.
Для начала выясним причину. Файл .ert — это OLE-контейнер, сложная структура, внутри которой 1С хранит потоки данных: модуль, форму, описание и таблицу. Когда Конфигуратор сохраняет файл, он должен перезаписать все эти потоки. Если в момент записи происходит программный сбой, запись прерывается. Поскольку старая структура файла уже разрушена, а новая не записана, остается только «заголовок» и, в лучшем случае, описание.
Рассмотрим основные факторы риска:
Enter или точки .).Проанализируем ситуацию: если у вас в этот момент открыто «1С:Предприятие» и в нем запущен (или был запущен до ошибки) этот самый отчет, у нас есть отличный шанс на спасение. Дело в том, что при открытии внешнего отчета 1С загружает его содержимое в оперативную память процесса 1cv7.exe практически в открытом виде.
Разберем по шагам, как вытащить код из памяти:
1cv7.exe (в WinHex это меню Tools — Open RAM).Рассмотрим механизм работы 1С с временными файлами. При сохранении любых объектов Конфигуратор создает временные копии. Посмотрим на содержимое папки %TEMP% (обычно это C:\Users\ИмяПользователя\AppData\Local\Temp).
На что обратить внимание:
~md*.tmp или v7*.tmp.Файл — Открыть), предварительно скопировав их в безопасное место и сменив расширение на .ert.Выясним причину, почему Конфигуратор может падать «рандомно», особенно при нажатии Enter в печатных формах или модулях. Часто это связано с работой плагина IntelliSense. Чтобы минимизировать риск, выполним следующие настройки:
Проанализируем файл настроек intell.ini. Нам нужно обратить внимание на параметр CHOICELIST_KIND. Изменение способа отображения списков подсказок часто стабилизирует работу:
[Settings]
; Попробуйте изменить значение на 2 или 3, если 1С часто падает
CHOICELIST_KIND=2
Также рекомендуется соблюдать «правило первого окна»: перед открытием модулей внешних отчетов всегда открывайте дерево метаданных (конфигурацию). Это инициализирует внутренние структуры 1С и снижает вероятность Access Violation при обращении скриптов OpenConf к объектам метаданных.
Как мы уже выяснили, автоматическая проверка синтаксиса при сохранении — главный «убийца» файлов .ert. Разберем, как её выключить:
Сервис — Параметры.Модуль.Важно: Теперь вам нужно будет проверять синтаксис вручную (клавиша F7) перед сохранением. Если вы всё же нажали «Сохранить» и 1С выдала предупреждение об ошибках — лучше всего принудительно завершить процесс 1С через диспетчер задач (Ctrl+Shift+Esc), не нажимая кнопку «ОК» в окне ошибки. Это сохранит последнюю рабочую версию файла на диске.
Чтобы не полагаться на удачу, внедрим систему автоматического резервного копирования. Существует скрипт для OpenConf (автор Romix), который делает копию файла при каждом нажатии кнопки сохранения.
Рассмотрим логику работы такого скрипта:
Ctrl+S скрипт перехватывает событие.Backup.ИмяФайла_ГГГГММДД_ЧЧММСС.ert.Даже если основной файл будет «убит», у вас всегда останется история версий за весь день работы.
Проанализируем возможности утилиты GComp. Это мощный инструмент для разборки файлов 1С на текстовые составляющие. Если файл битый не полностью (размер больше 2 Кб), попробуйте декомпилировать его:
gcomp.exe.gcomp -p MyReport.ert -d OutFolder.Подведем итог: Работа в 1С 7.7 требует определенной гигиены разработки. Отключение автопроверки синтаксиса, использование скриптов автоматического бэкапа и знание методов работы с Hex-редактором — это обязательный арсенал, который позволит вам сохранить плоды своего труда даже в случае критических сбоев платформы.