Многие пользователи столкнулись с неприятной ситуацией: после обновления конфигурации 1С:Бухгалтерия до релиза 3.0.141.39 и выше, при попытке распечатать или отправить по электронной почте счет, содержащий QR-код (актуально для ИП и физических лиц), сеанс работы в веб-клиенте на IIS зависает «наглухо». В этой статье мы разберем причины этой проблемы и рассмотрим способы её устранения.
После обновления платформы до версий, использующих режим совместимости 8.3.21 и выше, изменился механизм работы с внешними компонентами. Теперь они загружаются в изолированном процессе addnhost32.exe для повышения безопасности. Однако при публикации базы на веб-сервере IIS, рабочий процесс w3wp.exe часто не имеет необходимых прав для запуска этого изолированного процесса, что и приводит к критическому зависанию всей печатной формы.
Фирма 1С оперативно отреагировала на массовость проблемы и выпустила специальные исправления — патчи. Установка патча является самым надежным и «чистым» способом решения, так как он корректирует работу встроенных процедур без необходимости изменения настроек безопасности сервера или вмешательства в код конфигурации.
EF_00_00563978 (или аналогичный, выпущенный для вашего релиза БП 3.0).QR-кода должна исчезнуть.Если по какой-то причине установка патча невозможна, можно временно отключить генерацию QR-кода в счетах. Это позволит восстановить работоспособность печати, хотя и ограничит функциональность документа. Для этого создадим расширение конфигурации.
В расширении мы будем использовать аннотацию &Вместо для переопределения стандартных функций. Рассмотрим пример реализации:
// Общий модуль ПечатьТорговыхДокументов
&Вместо("QRКодРеквизитыПлатежа")
Функция QRкод_QRКодРеквизитыПлатежа(ДанныеДокумента, ДанныеПечатиЗаголовокСчета, ДанныеПечатиИтоговНДС)
Возврат Неопределено;
КонецФункции
// Общий модуль ГенерацияШтрихкодаСерверПовтИсп
&Вместо("ПодключитьКомпонентуГенерацииИзображенияШтрихкода")
Функция QRкод_ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты)
Возврат Неопределено;
КонецФункции
После добавления такого расширения система перестанет пытаться вызвать проблемную внешнюю компоненту для генерации QR-кода, и зависание прекратится. Не забудьте убедиться, что расширение не находится в «Безопасном режиме», если это требуется для корректного применения изменений.
Если проблема сохраняется из-за некорректной загрузки компоненты, можно попробовать переопределить логику подключения через ОбщийМодуль — ОбщегоНазначения. Этот метод требует осторожности, так как он влияет на работу всех внешних компонент в системе.
&Вместо("ПодключитьКомпонентуИзМакета")
Функция Расш1_ПодключитьКомпонентуИзМакета(Знач Идентификатор, Знач ПолноеИмяМакета)
РезультатПроверкиВнешнейКомпоненты = Неопределено;
// ... логика проверки и подключения через СтандартныеПодсистемыСервер
Результат = ПодключитьКомпонентуПоИдентификатору(Идентификатор, КомпонентаПоследнейВерсии.Местоположение);
Возврат Результат.ПодключаемыйМодуль;
КонецФункции
По результатам анализа ситуации, мы настоятельно не рекомендуем изменять права пользователя, от имени которого запущен пул приложений IIS (например, назначать права локального администратора для w3wp.exe). Это создает серьезные уязвимости в безопасности вашего сервера. Также отметим, что обновление платформы до актуальных релизов часто содержит скрытые исправления, связанные с работой процесса addnhost32.exe, поэтому поддерживайте вашу инфраструктуру в актуальном состоянии.
Если после выполнения всех действий проблема остается, убедитесь, что вы очистили кэш 1С у пользователей и перезагрузили службы веб-сервера IIS.