Мы с вами рассмотрим распространенную проблему, с которой сталкиваются пользователи 1С:Бухгалтерии 3.0 и других конфигураций на управляемых формах – это значительное замедление процесса формирования письма для отправки по электронной почте. Вместо привычных 1-2 секунд ожидание может затягиваться до 15 и более секунд. Это становится особенно критичным при необходимости массовой отправки документов, например, счетов на оплату.
Обычно ситуация проявляется следующим образом: вы открываете документ, например, счет на оплату клиента, нажимаете кнопку "Отправить по электронной почте", выбираете необходимый формат вложения (например, PDF), и после этого наступает продолжительное ожидание, прежде чем откроется форма создания нового письма. Подобные задержки часто возникают после обновления конфигурации до новых релизов, таких как БП 3.0.182.33 или 3.0.183.24, в то время как на более старых релизах проблема отсутствует.
Чтобы эффективно решить проблему, мы должны сначала понять, что именно вызывает задержки. Проведенные замеры производительности, о которых сообщают пользователи, указывают на одного основного «виновника» — модуль ПолучениеФайловИзИнтернетаСлужебный. Этот модуль, как следует из его названия, отвечает за взаимодействие системы 1С с внешними интернет-ресурсами. Мы выяснили, что именно этот модуль поглощает большую часть времени при формировании письма.
Суть проблемы: При каждой попытке отправить документ по электронной почте система 1С начинает активно обращаться к внешним серверам. Основная причина этих обращений заключается в обновлении правил конвертации электронного документооборота (ЭДО). По какой-то причине, в новых релизах конфигураций, этот процесс запускается не периодически (например, раз в день), а при каждом формировании письма для отправки. Каждое такое обращение включает в себя проверку размеров файлов, их последующую загрузку (даже если это относительно небольшие файлы, около 300 КБ, но их может быть до 20 штук за раз), что в условиях нестабильного или медленного интернет-соединения, а также при наличии настроек прокси-сервера или фаервола, может приводить к значительным задержкам.
Около 80% и более всего времени ожидания может приходиться именно на соединение по протоколу HTTP, что четко указывает на проблему взаимодействия с внешними интернет-сервисами. Таким образом, несмотря на то что вы просто хотите отправить PDF-файл, система в фоновом режиме выполняет целый ряд действий по синхронизации и обновлению данных, не связанных напрямую с формированием текущего письма, но необходимых для обеспечения корректной работы ЭДО.
Для более детального понимания проблемы мы настоятельно рекомендуем выполнить замер производительности. Если вы столкнулись с подобной ситуацией, это станет вашим первым шагом к решению. Замер производительности позволяет получить файл с расширением .pff, который содержит подробную информацию о времени выполнения различных операций в системе. Мы рассмотрим, как правильно использовать этот инструмент.
.pff: Откройте полученный файл .pff с помощью стандартных средств платформы 1С или специализированных инструментов. Мы должны обратить внимание на следующие аспекты:
ПолучениеФайловИзИнтернетаСлужебный: Убедитесь, что большая часть времени действительно приходится на этот модуль.Откройте конфигурацию в режиме отладки (или через F11). Найдите модуль ПолучениеФайловИзИнтернетаСлужебный. Установите точку останова в начале или внутри функций, отвечающих за HTTP-запросы (например, Получить, ВыполнитьHTTPЗапрос). При следующем выполнении проблемной операции, отладчик остановится, и мы сможем пошагово проанализировать, какие параметры передаются в функции, какие адреса используются и какое содержимое загружается. Это поможет нам определить, связаны ли эти обращения с правилами ЭДО или другими служебными данными.
// Примерная логика для установки точки останова в модуле
// ПолучениеФайловИзИнтернетаСлужебный или схожем модуле БСП.
// Точный код зависит от конкретного релиза и реализации.
// Предположим, что есть функция, которая выполняет HTTP-запрос
Функция ПолучитьФайлПоАдресу(АдресРесурса) Экспорт
// Установите здесь точку останова
#Если ТолстыйКлиентОбычноеПриложение Тогда
Сообщить("Обращение к адресу: " + АдресРесурса);
#КонецЕсли
// ... далее код выполнения HTTP-запроса ...
Попытка
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
HTTPСоединение = Новый HTTPСоединение(АдресРесурса); // Упрощено, нужна парсинг адреса
Ответ = HTTPСоединение.Отправить(HTTPЗапрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат Ответ.ПолучитьТелоКакСтроку(); // Или как двоичные данные
КонецЕсли;
Исключение
Сообщить("Ошибка при получении файла: " + ОписаниеОшибки());
КонецПопытки;
Возврат Неопределено;
КонецФункции
Мы должны обращать внимание на переменные, содержащие URL-адреса, и на данные, которые передаются или принимаются.
Пока мы ищем постоянное решение или ждем обновления от 1С, существуют несколько шагов, которые мы можем предпринять для временного облегчения ситуации.
В некоторых случаях проблема замедления может быть связана с дополнительной операцией архивирования вложений. Мы рекомендуем проверить настройки отправки почты. Если у вас включена опция "Формировать вложение в ZIP-архиве" или аналогичная, попробуйте ее отключить. Некоторые пользователи сообщали, что после отключения этой опции скорость формирования письма значительно возрастала.
Важный момент: Мы должны помнить, что этот метод не всегда является универсальным решением. Другие пользователи сталкивались с проблемой даже при отключенной архивации, отправляя обычные PDF-файлы.
Поскольку проблема связана с HTTP-запросами к внешним ресурсам, мы должны внимательно проверить сетевое окружение, в котором работает 1С.
Поскольку описанная проблема, скорее всего, является багом платформы или конфигурации 1С, наиболее эффективным и долгосрочным решением будет взаимодействие с разработчиком. Мы рассмотрим, как это сделать.
Мы выяснили, что эта ошибка уже зарегистрирована в системе баг-репортов 1С под номером 00-00785098. Эта информация критически важна для обращения на линию консультаций (ЛК) 1С. При обращении мы должны предоставить всю собранную информацию:
.pff): Приложите к обращению файл замера, который вы сделали. Это позволит специалистам 1С быстро увидеть, где именно происходят задержки.ПолучениеФайловИзИнтернетаСлужебный при каждой отправке письма. Мы подчеркнем, что такое поведение не является нормальным, так как обновление правил должно происходить гораздо реже (например, не чаще раза в день).Обращение на ЛК 1С с такой подробной информацией и номером бага значительно ускорит процесс получения решения или патча.
УправлениеПечатьюПереопределяемый:
По информации из обсуждений, 1С может выпускать специализированные патчи для устранения этой проблемы. Мы предполагаем, что эти патчи дорабатывают функциональность Библиотеки Стандартных Подсистем (БСП), в частности, модуль УправлениеПечатьюПереопределяемый. Этот модуль играет ключевую роль в процессах печати и формирования исходящих документов, включая их подготовку для отправки по почте.
Как работает патч (предполагаемая логика): Патч, вероятно, изменит логику модуля УправлениеПечатьюПереопределяемый или связанных с ним подсистем таким образом, чтобы:
// Пример концептуального изменения в модуле УправлениеПечатьюПереопределяемый (или связанном модуле БСП)
// после применения патча. Это не реальный код патча, а иллюстрация принципа.
Функция ПодготовитьДокументКОтправкеПоПочте(ДокументСсылка, ФорматВложения) Экспорт
// ... Начальный код подготовки документа ...
// --- Место, где ранее происходили частые обращения к интернету ---
// Старая логика:
// ПолучениеФайловИзИнтернетаСлужебный.ОбновитьПравилаЭДО(); // <-- Вызывалось слишком часто
// Новая логика после патча (концептуально):
Если Не КэшПравилЭДО.Актуален() Или КэшПравилЭДО.ИстекСрокДействия() Тогда
Попытка
// Предполагается, что эта функция будет более умной и проверит дату обновления
// прежде чем лезть в интернет, или будет вызываться по расписанию.
ПолучениеФайловИзИнтернетаСлужебный.ОбновитьПравилаЭДОСКонтролемЧастоты();
КэшПравилЭДО.УстановитьАктуальность();
Исключение
// Обработка ошибок обновления, чтобы не блокировать отправку
ЖурналРегистрации.Записать(НСтр("ru = 'Ошибка обновления правил ЭДО. Используются старые правила.'"),
УровеньЖурнала.Предупреждение);
КонецПопытки;
КонецЕсли;
// --- Конец изменений ---
// ... Остальной код формирования и отправки письма ...
Возврат Успешно;
КонецФункции
Мы советуем регулярно отслеживать обновления конфигурации и платформы, а также проверять наличие опубликованных патчей на портале 1С:ИТС или обращаться в вашу обслуживающую компанию для своевременной установки.
Таким образом, мы видим, что проблема долгого формирования письма для отправки в 1С:Бухгалтерии 3.0 является комплексной и требует системного подхода. Мы начали с диагностики с помощью замера производительности, что позволило выявить корневую причину – избыточные обращения к интернету для обновления правил ЭДО. Мы рассмотрели временные решения, такие как отключение ZIP-архивации и проверка сетевых настроек. И, наконец, определили путь к постоянному решению, который заключается в обращении к разработчику 1С с предоставлением всей необходимой информации и ожиданием официальных патчей, оптимизирующих работу модуля УправлениеПечатьюПереопределяемый и связанных с ним подсистем. Мы рекомендуем не игнорировать подобные задержки, а активно искать их причины и способы устранения, чтобы обеспечить комфортную и эффективную работу с системой.