В процессе активной разработки внешних отчетов, обработок или редактирования модулей конфигурации в платформе 1С:Предприятие 7.7 многие разработчики сталкиваются с внезапным аварийным закрытием программы. Сбой обычно происходит прямо в момент набора текста программы, например, при вызове функции СоздатьОбъект или при попытке ввода кавычки. Конфигуратор аварийно завершает работу с системной ошибкой APPCRASH, где в качестве исполняемого файла фигурирует 1cv7s.exe, модулем ошибки значится StackHash, а код исключения равен c000041d. Разберем детально, почему это происходит и как вернуть стабильность среде разработки.
Проанализируем ситуацию и внутренние механизмы платформы. Штатный Конфигуратор 1С:Предприятия версии 7.7 не содержит встроенного механизма интеллектуального контекстного автодополнения кода (IntelliSense). Для ускорения написания кода большинство разработчиков используют сторонние библиотеки расширения среды разработки, в частности популярный плагин Телепат (Telepat), входящий в состав различных сборок автоматизации Конфигуратора.
Принцип работы подобных утилит базируется на внедрении (инъекции) сторонних динамических библиотек в адресное пространство процесса 1cv7s.exe и перехвате системных сообщений оконных процедур редактора модулей. Падение Конфигуратора вызывают следующие основные факторы:
c000041d вкупе с модулем StackHash в современных операционных системах линейки Windows указывает на принудительное завершение процесса службой предотвращения выполнения данных. Телепат генерирует исполняемый машинный код непосредственно в областях динамической памяти (стеке или куче), что распознается механизмами безопасности Windows как потенциальная угроза или атака типа переполнения буфера.СоздатьОбъект плагин автоматически пытается построить контекстный список, считывая зарегистрированные системные библиотеки типов (TypeLib) и ветку реестра HKEY_CLASSES_ROOT. Наличие битых ссылок, некорректно удаленных программ или конфликт 32- и 64-битных COM-серверов приводит к возникновению необработанного исключения в момент формирования выпадающего списка.Рассмотрим, как выглядит типичный фрагмент кода, на котором провоцируется аварийное завершение работы:
// В момент ввода открывающей кавычки или пробела после вызова метода
// плагин пытается опросить зарегистрированные OLE-классы системы
РегКасса = СоздатьОбъект("Регистр.ОстаткиККМ");
Самое быстрое и действенное решение, позволяющее устранить вылеты без потери удобства автодополнения остальных конструкций языка, заключается в отключении сбойных обработчиков вызова списков. Разберем по шагам, как добраться до нужных настроек:
СоздатьОбъект.Ctrl + Пробел.Чтобы операционная система не блокировала динамический код плагинов расширения Конфигуратора, выполним настройку системной службы предотвращения выполнения данных:
Win + Pause/Break) и выберем пункт Дополнительные параметры системы.1cv7s.exe, 1cv7.exe, 1cv7l.exe).Если точечная настройка параметров не помогает, причина кроется в повреждении рабочих файлов самого Телепата или его интеграционных библиотек. Проанализируем действия по восстановлению среды:
%TEMP% в строке адреса проводника) и очистим временные файлы..tlb, .words и временные индексные файлы.telepat.dll.C:\Program Files (x86)\, целесообразно настроить запуск Конфигуратора от имени администратора либо предоставить пользователю полные права на чтение и запись в папку с установленной программой.В ситуациях, когда необходимо срочно внести критические исправления в рабочий модуль и нет времени на тонкую диагностику библиотек, самым надежным вариантом будет полное отключение надстройки автодополнения. Для этого достаточно отключить загрузку библиотеки telepat.dll в настройках загрузчика или переименовать файл библиотеки, после чего Конфигуратор вернется к стандартному режиму редактирования модулей без риска внезапных аварийных сбоев.