Что делать, если после сохранения внешний отчет 1С 7.7 стал «битым» и открывается только описание?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Ситуация, когда после очередного сохранения в «Конфигураторе» 1С:Предприятия 7.7 внешний отчет (файл с расширением .ert) превращается в «тыкву», знакома многим опытным разработчикам. Файл внезапно «худеет» до 2–3 Кб, а при попытке открыть его в Конфигураторе вместо модуля и формы мы видим только пустое окно описания. В режиме «Предприятие» такой отчет, естественно, не запускается. Проанализируем причины этой проблемы и разберем по шагам методы спасения кода и предотвращения подобных катастроф в будущем.

Почему файл превращается в «битый»?

Для начала выясним причину. Файл .ert — это OLE-контейнер, сложная структура, внутри которой 1С хранит потоки данных: модуль, форму, описание и таблицу. Когда Конфигуратор сохраняет файл, он должен перезаписать все эти потоки. Если в момент записи происходит программный сбой, запись прерывается. Поскольку старая структура файла уже разрушена, а новая не записана, остается только «заголовок» и, в лучшем случае, описание.

Рассмотрим основные факторы риска:

  1. Включенная штатная автопроверка синтаксиса. Это критический момент. Если вы сохраняете модуль с синтаксической ошибкой и подтверждаете сохранение, штатный механизм 1С может вызвать исключение в памяти, что приводит к обнулению потоков модуля и формы.
  2. Конфликты OpenConf и IntelliSense. При использовании скриптов для расширения возможностей Конфигуратора (OpenConf) часто возникают конфликты при перехвате нажатия клавиш (особенно Enter или точки .).
  3. Проблемы с дисковой подсистемой. На серверах с включенным кэшированием записи или на SSD с агрессивным TRIM временные файлы могут не успевать корректно фиксироваться.

Способ 1. Восстановление из оперативной памяти (самый действенный)

Проанализируем ситуацию: если у вас в этот момент открыто «1С:Предприятие» и в нем запущен (или был запущен до ошибки) этот самый отчет, у нас есть отличный шанс на спасение. Дело в том, что при открытии внешнего отчета 1С загружает его содержимое в оперативную память процесса 1cv7.exe практически в открытом виде.

Разберем по шагам, как вытащить код из памяти:

  1. Не закрывайте 1С:Предприятие! Это ваш единственный источник данных.
  2. Скачаем любой Hex-редактор (например, WinHex или HxD).
  3. Откроем в редакторе процесс 1cv7.exe (в WinHex это меню Tools — Open RAM).
  4. Запустим поиск по уникальной строке из вашего кода. Вспомните название редкой переменной или специфический комментарий, который вы точно писали.
  5. Как только фрагмент найден, мы увидим текстовый поток модуля. Скопируем его целиком и сохраним в текстовый файл.
  6. С формой (диалогом) сложнее, так как она хранится в бинарном виде, но, как правило, текст модуля — это 90% трудозатрат программиста.

Способ 2. Поиск во временных файлах (Temp)

Рассмотрим механизм работы 1С с временными файлами. При сохранении любых объектов Конфигуратор создает временные копии. Посмотрим на содержимое папки %TEMP% (обычно это C:\Users\ИмяПользователя\AppData\Local\Temp).

На что обратить внимание:

Способ 3. Предотвращение падений через настройку OpenConf

Выясним причину, почему Конфигуратор может падать «рандомно», особенно при нажатии Enter в печатных формах или модулях. Часто это связано с работой плагина IntelliSense. Чтобы минимизировать риск, выполним следующие настройки:

Проанализируем файл настроек intell.ini. Нам нужно обратить внимание на параметр CHOICELIST_KIND. Изменение способа отображения списков подсказок часто стабилизирует работу:


[Settings]
; Попробуйте изменить значение на 2 или 3, если 1С часто падает
CHOICELIST_KIND=2

Также рекомендуется соблюдать «правило первого окна»: перед открытием модулей внешних отчетов всегда открывайте дерево метаданных (конфигурацию). Это инициализирует внутренние структуры 1С и снижает вероятность Access Violation при обращении скриптов OpenConf к объектам метаданных.

Способ 4. Отключение штатной проверки синтаксиса

Как мы уже выяснили, автоматическая проверка синтаксиса при сохранении — главный «убийца» файлов .ert. Разберем, как её выключить:

  1. Зайдем в меню Сервис — Параметры.
  2. Перейдем на закладку Модуль.
  3. Снимем галочку «Автоматическая проверка синтаксиса».

Важно: Теперь вам нужно будет проверять синтаксис вручную (клавиша F7) перед сохранением. Если вы всё же нажали «Сохранить» и 1С выдала предупреждение об ошибках — лучше всего принудительно завершить процесс 1С через диспетчер задач (Ctrl+Shift+Esc), не нажимая кнопку «ОК» в окне ошибки. Это сохранит последнюю рабочую версию файла на диске.

Автоматизация бэкапов

Чтобы не полагаться на удачу, внедрим систему автоматического резервного копирования. Существует скрипт для OpenConf (автор Romix), который делает копию файла при каждом нажатии кнопки сохранения.

Рассмотрим логику работы такого скрипта:

  1. При нажатии Ctrl+S скрипт перехватывает событие.
  2. Создает в папке с отчетом подкаталог Backup.
  3. Копирует текущий файл под именем ИмяФайла_ГГГГММДД_ЧЧММСС.ert.
  4. И только после этого позволяет штатному механизму 1С выполнить сохранение.

Даже если основной файл будет «убит», у вас всегда останется история версий за весь день работы.

Использование GComp

Проанализируем возможности утилиты GComp. Это мощный инструмент для разборки файлов 1С на текстовые составляющие. Если файл битый не полностью (размер больше 2 Кб), попробуйте декомпилировать его:

  1. Используйте командную строку для запуска gcomp.exe.
  2. Попробуйте разобрать отчет: gcomp -p MyReport.ert -d OutFolder.
  3. Иногда GComp удается вытащить поток модуля даже из поврежденного OLE-контейнера, который сам Конфигуратор уже не понимает.

Подведем итог: Работа в 1С 7.7 требует определенной гигиены разработки. Отключение автопроверки синтаксиса, использование скриптов автоматического бэкапа и знание методов работы с Hex-редактором — это обязательный арсенал, который позволит вам сохранить плоды своего труда даже в случае критических сбоев платформы.

← На главную