При работе в конфигурации «1С:Управление нашей фирмой» (1С:УНФ) пользователи часто сталкиваются с неприятной проблемой: при создании нового исходящего электронного письма поле ввода основного текста сообщения и поле редактирования подписи оказываются полностью заблокированными (отображаются серыми, курсор туда поставить невозможно). При этом поле «Тема» и список получателей остаются доступными для редактирования, а само письмо при отправке уходит, но без тела сообщения.
В этой статье мы подробно проанализируем ситуацию, выясним технические причины этого сбоя и разберем по шагам два принципиально разных метода его решения. Проблема может носить как инфраструктурный характер (связанный с настройками безопасности Windows Server), так и программный (вызванный сбоем в логике генерации идентификаторов БСП).
---
Рассмотрим подробнее, как устроена форма отправки писем в 1С. В версиях платформы «1С:Предприятие» ниже 8.3.14 для отображения и редактирования текста письма с форматированием (различные шрифты, цвета, таблицы) используется специальный объект — ФорматированныйДокумент. На операционных системах семейства Windows этот объект инициализируется и отрисовывается с помощью встроенного системного движка MSHTML, который принадлежит браузеру Internet Explorer.
Если база данных развернута на сервере под управлением Windows Server (2003, 2008, 2012 или более современных версий), и пользователи подключаются к ней через терминальный доступ (RDP), в дело вступают жесткие политики безопасности. По умолчанию в серверных ОС Windows активна функция IE ESC (Enhanced Security Configuration — Конфигурация усиленной безопасности Internet Explorer). Эта функция блокирует выполнение любых активных сценариев (скриптов JavaScript и элементов ActiveX) в целях защиты сервера. Без выполнения этих сценариев визуальный редактор ФорматированныйДокумент просто не может запуститься, в результате чего поле ввода «замораживается».
Если у вас нет возможности обновить платформу 1С, нам придется настроить безопасность операционной системы. Разберем по шагам, как разрешить выполнение активных сценариев:
Для системных администраторов более быстрым решением будет полное или частичное отключение IE ESC на сервере:
Начиная с релиза платформы 8.3.14, фирма 1С полностью переработала механизм рендеринга HTML-содержимого. Платформа отказалась от использования устаревшего системного MSHTML (Internet Explorer) в пользу современного кроссплатформенного движка WebKit (Chromium).
Переход на актуальную версию платформы полностью решает проблему зависимости от настроек Internet Explorer. Однако при этом следует учитывать несколько важных нюансов:
---
Если настройки Internet Explorer верны, платформа обновлена до современной версии, но поле ввода текста письма все равно заблокировано, причина кроется в ошибке внутри кода конфигурации. Почтовый клиент в «1С:УНФ» базируется на подсистеме «Взаимодействия» из состава «Библиотеки стандартных подсистем» (БСП).
Проанализируем программную логику этого механизма. При создании нового исходящего письма система автоматически генерирует для него уникальный идентификатор (GUID). По этому идентификатору программа определяет состояние объекта. Однако после некорректных обновлений конфигурации, переноса данных, распределения распределенных баз данных (РИБ) или слияния баз, механизм генерации может дать сбой.
В результате при создании нового документа «Электронное письмо исходящее» программа генерирует идентификатор, который уже существует в базе данных и жестко привязан к какому-то старому входящему письму. Алгоритмы БСП отрабатывают следующим образом: если идентификатор уже есть в базе и ассоциирован с входящим сообщением, то редактировать его нельзя (ведь полученные письма должны быть защищены от изменений). Система автоматически переводит форму документа в режим «Только чтение» для форматированного текста, блокируя поля ввода текста и подписи, хотя шапка письма (Тема, Важность) может частично оставаться доступной.
Для исправления коллизии идентификаторов нам необходимо очистить кэшированные и ошибочные записи в регистрах подсистемы взаимодействий. Посмотрим на последовательность действий:
КонтактыВзаимодействий и СостоянияКонтактовВзаимодействий на наличие битых или зацикленных ссылок.Часто сбои в идентификаторах метаданных возникают из-за того, что обновление конфигурации было выполнено «накатом» без завершения регламентных процедур. Выясним, как завершить этот процесс:
Если регистры очищены, но проблема сохраняется, программисту необходимо обновить справочник идентификаторов метаданных. Для этого можно воспользоваться внешней обработкой «Консоль кода» или написать простой одноразовый скрипт:
// Принудительное обновление идентификаторов объектов метаданных БСП
Попытка
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Сообщить("Обновление идентификаторов метаданных успешно завершено.");
Исключение
Сообщить("Ошибка при обновлении метаданных: " + ОписаниеОшибки());
КонецПопытки;
Этот код принудительно перезапишет все связи объектов метаданных конфигурации со справочником идентификаторов, устранив возможные логические несоответствия, блокирующие корректное определение типа создаваемого документа «Электронное письмо».
---
Мы подробно разобрали две абсолютно разные природы одной и той же проблемы в 1С:УНФ. На практике диагностику следует проводить по следующему алгоритму: