При активной работе с почтовым клиентом, встроенным в конфигурации на платформе 1С (например, 1С:Управление нашей фирмой, 1С:ERP или 1С:Комплексная автоматизация), пользователи часто сталкиваются с неприятной проблемой. При попытке создать новое электронное письмо или открыть существующее на экране внезапно появляется модальное окно с предупреждением: «На этой странице произошла ошибка сценария. Строка 453, символ 250» (номера строки и символа могут незначительно отличаться в зависимости от релиза конфигурации).
Особенно остро эта проблема проявляется в терминальных режимах работы, например, при подключении пользователей к серверу под управлением Windows Server 2008 / 2012 через Remote Desktop Services (RDS). Попытки изменить настройки в свойствах обозревателя Windows, включение или отключение сценариев в панели управления зачастую не приносят никакого результата. Если же полностью отключить выполнение сценариев в операционной системе, окно ошибки перестает появляться, но само поле ввода текста письма становится полностью заблокированным для редактирования.
В этой статье мы подробно разберем технические причины этого сбоя и рассмотрим по шагам несколько эффективных методов его устранения — как системных (на уровне операционной системы и реестра Windows), так и программных (на уровне изменения метаданных конфигурации 1С).
Давайте разберем внутреннее устройство платформы 1С при работе с HTML-содержимым в старых версиях (до релиза 8.3.14). Для отображения интерактивных веб-страниц, отчетов, карт и, что самое главное, встроенного HTML-редактора писем, платформа 1С использовала стандартный системный ActiveX-компонент Microsoft Windows под названием WebBrowser. Этот компонент работает на движке MSHTML, который является основой классического браузера Internet Explorer.
По умолчанию в операционной системе Windows в целях безопасности и обратной совместимости любой сторонний процесс, вызывающий компонент WebBrowser, принудительно запускает его в режиме эмуляции Internet Explorer 7 (IE7). Это происходит автоматически, даже если на вашем сервере или локальном компьютере физически установлен Internet Explorer 11.
Современные конфигурации 1С используют сложные JavaScript-сценарии для форматирования текста, создания списков, изменения шрифтов и вставки картинок в тело письма. Старый движок Internet Explorer 7 просто физически не способен обработать современные стандарты JavaScript и каскадных таблиц стилей (CSS). Как только встроенный редактор пытается обработать скрипт форматирования, интерпретатор JS выдает ошибку сценария, делая работу пользователя невыносимой.
Проанализируем все возможные пути исправления этой ошибки, начиная от самых быстрых системных настроек и заканчивая кардинальным обновлением платформы.
Это самый надежный системный способ исправить проблему без изменения кода конфигурации 1С и без обновления всей платформы предприятия. Мы можем явно указать операционной системе Windows, что исполняемые файлы 1С должны использовать самую современную версию движка рендеринга (IE11) вместо устаревшей версии IE7.
Для реализации этого метода выполним следующие шаги под учетной записью Администратора:
regedit и нажмите клавишу Enter для запуска Редактора реестра.HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONHKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION1Cv8.exe — для толстого клиента 1С.1Cv8c.exe — для тонкого клиента 1С.После проведения данной процедуры встроенный браузер 1С начнет корректно обрабатывать все скрипты, и ошибка сценария при написании электронных писем полностью исчезнет.
На серверных операционных системах семейства Windows Server по умолчанию активна функция повышенной безопасности — Internet Explorer Enhanced Security Configuration (IE ESC). Эта служба принудительно блокирует выполнение любых скриптов, загрузку активного содержимого и файлов ActiveX для всех пользователей, подключающихся через терминальный доступ. Это напрямую блокирует нормальную работу встроенного HTML-редактора в 1С.
Для отключения этой блокировки выполним пошаговые действия на сервере:
Обратите внимание, что для вступления изменений в силу пользователям терминального сервера может потребоваться завершить свои текущие сеансы (выполнить Logoff) и зайти в систему заново.
Поскольку 1С использует библиотеки операционной системы, режим эмуляции IE11 через реестр сработает только в том случае, если сам браузер Internet Explorer в Windows обновлен до актуальной версии. На старых серверах Windows Server 2008 «из коробки» может быть установлен Internet Explorer 8 или 9.
Убедитесь, что в вашей операционной системе установлены последние пакеты обновлений (Service Pack) и браузер Internet Explorer обновлен до финальной 11-й версии. Скачать обновление можно через официальный Центр обновления Windows (Windows Update).
Также нередки случаи, когда в системном кэше Internet Explorer накапливаются устаревшие или поврежденные скрипты веб-компонентов 1С. Обычная очистка кэша самой платформы 1С при этом не помогает. Нам необходимо очистить временные файлы самого браузера под учетной записью проблемного пользователя:
Если у вас нет прав администратора на сервере или вы ищете способ решить проблему раз и навсегда программным путем непосредственно в конфигурации, мы можем заменить тип поля ввода текста письма. Вместо капризного поля HTML-документа, завязанного на Internet Explorer, можно использовать стандартный объект платформы 1С — ФорматированныйДокумент.
Этот объект позволяет пользователю вводить форматированный текст (жирный, курсив, списки, менять цвет) без использования внешних системных браузеров. При этом перед отправкой письма программа будет программно конвертировать форматированный документ в стандартный HTML-код.
Рассмотрим пример кода, реализующий конвертацию текста из HTML-шаблона в форматированный документ при открытии формы редактирования письма:
// Пример загрузки HTML-текста во встроенный редактор Форматированного Документа
&НаСервере
Процедура ЗагрузитьТекстПисьмаНаСервере(ИсходныйТекстHTML)
// Создаем объект ФорматированныйДокумент
ДокументРедактора = Новый ФорматированныйДокумент;
// Загружаем HTML-содержимое в объект
СтруктураКартинок = Новый Структура;
ДокументРедактора.УстановитьHTML(ИсходныйТекстHTML, СтруктураКартинок);
// Передаем объект на форму в соответствующий реквизит
ЗначениеВРеквизитФормы(ДокументРедактора, "РеквизитФорматированныйДокумент");
КонецПроцедуры
А перед непосредственной отправкой электронного письма по каналам связи (SMTP), мы выполняем обратное преобразование форматированного документа в формат HTML-строки, которая легко распознается любыми почтовыми клиентами получателей (Outlook, Thunderbird, веб-интерфейсы Яндекс.Почты, Mail.ru и др.):
// Пример выгрузки текста из Форматированного Документа обратно в HTML для отправки
&НаСервере
Функция ПолучитьHTMLТекстДляОтправки()
// Получаем объект из реквизита управляемой формы
ТекущийДокумент = РеквизитФормыВЗначение("РеквизитФорматированныйДокумент");
// Создаем переменные для хранения результата
ИтоговыйТекстHTML = "";
СтруктураКартинок = Новый Структура;
// Выгружаем данные в формате HTML
ТекущийДокумент.ПолучитьHTML(ИтоговыйТекстHTML, СтруктураКартинок);
Возврат ИтоговыйТекстHTML;
КонецФункции
Использование встроенного типа ФорматированныйДокумент полностью изолирует логику работы текстового редактора от настроек операционной системы пользователя и версий Internet Explorer.
Разработчики фирмы 1С прекрасно знали об этой системной проблеме зависимости от компонентов Microsoft. Начиная с версии платформы 8.3.14, произошел глобальный технологический сдвиг: 1С полностью отказалась от использования библиотек устаревшего Internet Explorer во всех типах клиентских приложений под управлением ОС Windows.
Взамен системного ActiveX-компонента в платформу был интегрирован кроссплатформенный HTML-движок на базе WebKit. А в последующих современных релизах платформы (начиная с версии 8.3.20 и выше) этот внутренний движок отображения веб-содержимого был переведен на современный и сверхбыстрый Chromium (CEF).
Обновление платформы 1С до любого актуального стабильного релиза полностью, гарантированно и навсегда убирает проблему с возникновением «ошибок сценария» в любых окнах и полях ввода. Все современные скрипты будут выполняться на производительном движке Chromium независимо от версии Windows, установленной на сервере или локальном компьютере пользователя.