Почему вылетает Конфигуратор 1С 7.7 при вводе текста модуля и как это исправить?

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

В процессе активной разработки внешних отчетов, обработок или редактирования модулей конфигурации в платформе 1С:Предприятие 7.7 многие разработчики сталкиваются с внезапным аварийным закрытием программы. Сбой обычно происходит прямо в момент набора текста программы, например, при вызове функции СоздатьОбъект или при попытке ввода кавычки. Конфигуратор аварийно завершает работу с системной ошибкой APPCRASH, где в качестве исполняемого файла фигурирует 1cv7s.exe, модулем ошибки значится StackHash, а код исключения равен c000041d. Разберем детально, почему это происходит и как вернуть стабильность среде разработки.

Выясним причину сбоя: механизм DEP и плагины автодополнения

Проанализируем ситуацию и внутренние механизмы платформы. Штатный Конфигуратор 1С:Предприятия версии 7.7 не содержит встроенного механизма интеллектуального контекстного автодополнения кода (IntelliSense). Для ускорения написания кода большинство разработчиков используют сторонние библиотеки расширения среды разработки, в частности популярный плагин Телепат (Telepat), входящий в состав различных сборок автоматизации Конфигуратора.

Принцип работы подобных утилит базируется на внедрении (инъекции) сторонних динамических библиотек в адресное пространство процесса 1cv7s.exe и перехвате системных сообщений оконных процедур редактора модулей. Падение Конфигуратора вызывают следующие основные факторы:

  1. Срабатывание системной защиты DEP (Data Execution Prevention). Код исключения c000041d вкупе с модулем StackHash в современных операционных системах линейки Windows указывает на принудительное завершение процесса службой предотвращения выполнения данных. Телепат генерирует исполняемый машинный код непосредственно в областях динамической памяти (стеке или куче), что распознается механизмами безопасности Windows как потенциальная угроза или атака типа переполнения буфера.
  2. Сбой при сканировании OLE/COM-объектов в системном реестре. При наборе конструкции СоздатьОбъект плагин автоматически пытается построить контекстный список, считывая зарегистрированные системные библиотеки типов (TypeLib) и ветку реестра HKEY_CLASSES_ROOT. Наличие битых ссылок, некорректно удаленных программ или конфликт 32- и 64-битных COM-серверов приводит к возникновению необработанного исключения в момент формирования выпадающего списка.
  3. Повреждение кэша метаданных и словарей автодополнения. Если служебные файлы с индексами идентификаторов конфигурации оказались повреждены или заблокированы антивирусом, попытка плагина извлечь подсказку завершается падением среды.

Рассмотрим, как выглядит типичный фрагмент кода, на котором провоцируется аварийное завершение работы:


// В момент ввода открывающей кавычки или пробела после вызова метода
// плагин пытается опросить зарегистрированные OLE-классы системы
РегКасса = СоздатьОбъект("Регистр.ОстаткиККМ");

Способ 1. Корректировка параметров автоподсказки в плагине Телепат

Самое быстрое и действенное решение, позволяющее устранить вылеты без потери удобства автодополнения остальных конструкций языка, заключается в отключении сбойных обработчиков вызова списков. Разберем по шагам, как добраться до нужных настроек:

  1. В окне Конфигуратора откройте окно настроек установленной надстройки через соответствующее меню конфигурации или панель управления плагинами.
  2. Перейдите на четвертую закладку окна параметров, отвечающую за фильтрацию и отображение контекстной подсказки.
  3. Снимите флажки, отвечающие за автоматический поиск и вывод OLE/COM-объектов при анализе вызова СоздатьОбъект.
  4. Отключите автоматическое появление подсказки сразу при вводе символа кавычки, переведя вызов списков в ручной режим по комбинации клавиш Ctrl + Пробел.
  5. Увеличьте значение задержки (таймаута) появления всплывающей подсказки, чтобы плагин не перегружал стек вызовов при быстром непрерывном наборе кода.

Способ 2. Настройка исключений DEP в операционной системе

Чтобы операционная система не блокировала динамический код плагинов расширения Конфигуратора, выполним настройку системной службы предотвращения выполнения данных:

  1. Откроем Свойства системы (нажатием комбинации клавиш Win + Pause/Break) и выберем пункт Дополнительные параметры системы.
  2. В открывшемся окне на вкладке Дополнительно найдем блок Быстродействие и нажмем кнопку Параметры.
  3. Перейдем на вкладку Предотвращение выполнения данных (DEP).
  4. Активируем переключатель «Включить DEP для всех программ и служб, кроме выбранных ниже».
  5. С помощью кнопки Добавить укажем пути ко всем исполняемым файлам 1С:Предприятия 7.7 в каталоге установки (файлы 1cv7s.exe, 1cv7.exe, 1cv7l.exe).
  6. Нажмем кнопку Применить и перезагрузим компьютер для вступления изменений в силу.

Способ 3. Очистка кэша и переустановка расширений с нуля

Если точечная настройка параметров не помогает, причина кроется в повреждении рабочих файлов самого Телепата или его интеграционных библиотек. Проанализируем действия по восстановлению среды:

  1. Полностью закроем все запущенные экземпляры Конфигуратора и базы данных 1С.
  2. Перейдем в каталог пользовательских временных файлов (набрав команду %TEMP% в строке адреса проводника) и очистим временные файлы.
  3. В каталоге установки расширений Конфигуратора удалим сгенерированные файлы кэша метаданных и словарей с расширениями .tlb, .words и временные индексные файлы.
  4. Выполним переустановку плагина с нуля, используя адаптированную для современных 64-битных версий Windows сборку библиотеки telepat.dll.
  5. Проверим права доступа: если платформа установлена в системный каталог C:\Program Files (x86)\, целесообразно настроить запуск Конфигуратора от имени администратора либо предоставить пользователю полные права на чтение и запись в папку с установленной программой.

Способ 4. Временное отключение автодополнения

В ситуациях, когда необходимо срочно внести критические исправления в рабочий модуль и нет времени на тонкую диагностику библиотек, самым надежным вариантом будет полное отключение надстройки автодополнения. Для этого достаточно отключить загрузку библиотеки telepat.dll в настройках загрузчика или переименовать файл библиотеки, после чего Конфигуратор вернется к стандартному режиму редактирования модулей без риска внезапных аварийных сбоев.

← На главную