При использовании компонента CDO.Message для отправки электронной почты в среде 1С:Предприятие (как в версии 7.7, так и в 8.х) разработчики нередко сталкиваются с неприятной проблемой: в случае возникновения ошибки вместо понятного текста система возвращает «абракадабру» или иероглифы. Это серьезно затрудняет отладку и логирование процессов. Давайте разберемся, почему это происходит и как устранить данную проблему.
Проанализировав ситуацию, мы выяснили, что корень проблемы кроется не в коде 1С, а в самой системной библиотеке cdosys.dll. В операционных системах Windows XP, Windows Server 2003 и ряде других версий, файлы cdosys.dll, поставляемые через системные обновления, содержат некорректно скомпилированные ресурсы строк. Вместо стандартной кодировки Unicode (UTF-16), строки внутри библиотеки представлены в «смешанном» формате: нулевой байт вперемешку с кодами ANSI (Windows-1251). В результате, при попытке программы получить описание ошибки, интерпретатор неверно считывает данные, что и приводит к появлению нечитаемых символов.
Поскольку проблема заключается в «битом» файле библиотеки, нам необходимо заменить его на корректную версию. Рассмотрим процесс исправления по шагам.
cdosys.dll. Обычное копирование файла в системную папку может быть заблокировано механизмом защиты системных файлов Windows (WFP), который автоматически восстановит «битую» версию из кэша.cdosys2.dll.regsvr32 cdosys2.dll.CDO.Message ссылаются на новый файл.CDO.Message при инициализации через СоздатьОбъект("CDO.Message") загружает библиотеку в оперативную память процесса. Даже если вы перерегистрируете библиотеку в реестре, текущий сеанс 1С будет продолжать использовать старую версию из памяти. Необходимо полностью закрыть программу 1С и запустить её заново, чтобы при следующем обращении объект был создан из новой библиотеки.Разберем дополнительные нюансы, которые помогут вам избежать ошибок в процессе настройки:
CDO.Message считается морально устаревшим подходом. Если вы разрабатываете новый функционал или имеете возможность модернизировать текущий, настоятельно рекомендуем переходить на встроенные в платформу объекты 1С, такие как ИнтернетПочта. Они работают с актуальными API, поддерживают современные стандарты безопасности (TLS 1.2/1.3) и лишены проблем с кодировками системных библиотек.cdosys.dll по-прежнему присутствует для обеспечения обратной совместимости. Если вы используете старые методы отправки почты в новых системах, проблема может сохраняться, так как вызовы по-прежнему направляются на устаревший код обработки ошибок.CDO.Message, проанализируйте код ошибки (выраженный в hex-формате) и выводите пользователю заранее подготовленное, корректное сообщение на русском языке.Таким образом, мы видим, что «абракадабра» — это системная ошибка реализации cdosys.dll. Подмена библиотеки на исправную версию и полный перезапуск приложения позволяют устранить проблему, однако для долгосрочной стабильности рекомендуется отказ от использования устаревших COM-объектов в пользу встроенных средств платформы 1С.