Как исправить ошибку сценария при вводе текста электронного письма в 1С?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

При активной работе с почтовым клиентом, встроенным в конфигурации на платформе 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: Принудительное включение эмуляции Internet Explorer 11 через реестр Windows

Это самый надежный системный способ исправить проблему без изменения кода конфигурации 1С и без обновления всей платформы предприятия. Мы можем явно указать операционной системе Windows, что исполняемые файлы 1С должны использовать самую современную версию движка рендеринга (IE11) вместо устаревшей версии IE7.

Для реализации этого метода выполним следующие шаги под учетной записью Администратора:

  1. Нажмите комбинацию клавиш Win + R на клавиатуре, введите команду regedit и нажмите клавишу Enter для запуска Редактора реестра.
  2. В зависимости от разрядности вашей операционной системы Windows и разрядности установленного клиента 1С, перейдите в нужную ветку реестра:
    • Если у вас установлена 64-битная операционная система Windows, а клиентское приложение 1С используется 32-битное (наиболее частый случай на терминальных серверах), перейдите по пути:
      HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
    • Если у вас установлена 64-битная Windows и используется 64-битный клиент 1С (либо если вся система 32-битная), перейдите по пути:
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
  3. Если вы хотите применить эту настройку индивидуально для каждого пользователя без изменения глобальных параметров сервера, вы можете использовать ветку текущего пользователя:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
  4. Кликните правой кнопкой мыши по пустому пространству в правой части окна редактора реестра, выберите пункт Создать, затем выберите тип параметра DWORD (32 бита).
  5. В качестве имени созданного параметра введите точное имя исполняемого файла платформы 1С:
    • 1Cv8.exe — для толстого клиента 1С.
    • 1Cv8c.exe — для тонкого клиента 1С.
    Рекомендуется создать оба этих параметра, чтобы исключить любые проблемы при разных способах запуска программы.
  6. Дважды кликните по созданному параметру. В открывшемся окне переключите систему исчисления в положение Десятичная (Decimal) и введите значение 11000 (или оставьте шестнадцатеричную систему исчисления и введите значение 2AF8). Значение 11000 указывает системе использовать стандарты Internet Explorer 11 (EdgeHTML / IE11 Standards Mode).
  7. Нажмите кнопку ОК, закройте редактор реестра и обязательно перезапустите сеанс пользователя на терминальном сервере (или перезапустите компьютер, если работа ведется локально).

После проведения данной процедуры встроенный браузер 1С начнет корректно обрабатывать все скрипты, и ошибка сценария при написании электронных писем полностью исчезнет.

Решение №2: Отключение конфигурации усиленной безопасности Internet Explorer (IE ESC)

На серверных операционных системах семейства Windows Server по умолчанию активна функция повышенной безопасности — Internet Explorer Enhanced Security Configuration (IE ESC). Эта служба принудительно блокирует выполнение любых скриптов, загрузку активного содержимого и файлов ActiveX для всех пользователей, подключающихся через терминальный доступ. Это напрямую блокирует нормальную работу встроенного HTML-редактора в 1С.

Для отключения этой блокировки выполним пошаговые действия на сервере:

  1. Откройте консоль управления Диспетчер сервера (Server Manager).
  2. Перейдите на вкладку сводной информации о сервере (самый верхний уровень дерева навигации).
  3. В правой части экрана найдите раздел Сведения о безопасности (Security Information) или найдите блок настройки свойств сервера.
  4. Кликните по ссылке Настроить IE ESC (Configure IE ESC).
  5. В открывшемся диалоговом окне переключите радиокнопки в положение Выкл (Off) для групп пользователей «Администраторы» (Administrators) и «Пользователи» (Users).
  6. Нажмите кнопку ОК для сохранения изменений.

Обратите внимание, что для вступления изменений в силу пользователям терминального сервера может потребоваться завершить свои текущие сеансы (выполнить Logoff) и зайти в систему заново.

Решение №3: Обновление Internet Explorer в операционной системе и очистка кэша

Поскольку 1С использует библиотеки операционной системы, режим эмуляции IE11 через реестр сработает только в том случае, если сам браузер Internet Explorer в Windows обновлен до актуальной версии. На старых серверах Windows Server 2008 «из коробки» может быть установлен Internet Explorer 8 или 9.

Убедитесь, что в вашей операционной системе установлены последние пакеты обновлений (Service Pack) и браузер Internet Explorer обновлен до финальной 11-й версии. Скачать обновление можно через официальный Центр обновления Windows (Windows Update).

Также нередки случаи, когда в системном кэше Internet Explorer накапливаются устаревшие или поврежденные скрипты веб-компонентов 1С. Обычная очистка кэша самой платформы 1С при этом не помогает. Нам необходимо очистить временные файлы самого браузера под учетной записью проблемного пользователя:

  1. Зайдите в сеанс пользователя, у которого возникает ошибка.
  2. Откройте классическую Панель управления Windows и перейдите в раздел Свойства браузера (или «Свойства обозревателя»).
  3. На вкладке Общие в разделе «История просмотра» нажмите кнопку Удалить....
  4. Установите флажки напротив пунктов Временные файлы интернета и веб-сайтов и Файлы cookie и данные веб-сайтов. Все остальные галочки можно снять.
  5. Нажмите кнопку Удалить и дождитесь завершения процесса очистки.

Решение №4: Программный обход проблемы (для разработчиков 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.

Решение №5: Кардинальное решение — обновление платформы 1С

Разработчики фирмы 1С прекрасно знали об этой системной проблеме зависимости от компонентов Microsoft. Начиная с версии платформы 8.3.14, произошел глобальный технологический сдвиг: 1С полностью отказалась от использования библиотек устаревшего Internet Explorer во всех типах клиентских приложений под управлением ОС Windows.

Взамен системного ActiveX-компонента в платформу был интегрирован кроссплатформенный HTML-движок на базе WebKit. А в последующих современных релизах платформы (начиная с версии 8.3.20 и выше) этот внутренний движок отображения веб-содержимого был переведен на современный и сверхбыстрый Chromium (CEF).

Обновление платформы 1С до любого актуального стабильного релиза полностью, гарантированно и навсегда убирает проблему с возникновением «ошибок сценария» в любых окнах и полях ввода. Все современные скрипты будут выполняться на производительном движке Chromium независимо от версии Windows, установленной на сервере или локальном компьютере пользователя.

← На главную