Почему зависает внешняя печатная форма при выводе на просмотр в 1С и как это исправить?

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

Разработчики и администраторы систем на платформе 1С:Предприятие часто сталкиваются с ситуацией, когда внешняя печатная форма (ВПФ), которая годами работала без нареканий, внезапно начинает «намертво» завешивать сеанс пользователя. Особенно неприятно, когда это происходит периодически, только на определенных компьютерах и только для конкретных документов. Пользователь нажимает кнопку «Печать», программа уходит в бесконечную задумчивость, а в диспетчере задач процесс 1С получает статус «Не отвечает».

В этой статье мы подробно разберем, почему возникает этот неприятный эффект, проанализируем неочевидные баги платформы (в частности, ветки 8.3.16) и найдем несколько практических путей решения этой проблемы без кардинального изменения кода конфигурации.

Симптомы и локализация проблемы

Рассмотрим классический сценарий. В нашей системе (например, в 1С:Управление нашей фирмой) зарегистрирована внешняя печатная форма для документа Заказ покупателя. Код формирования печатной формы выглядит стандартно:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм, 
        "КоммерческоеПредОкна", 
        "Коммерческое предложение окна", 
        СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)
    );
    
КонецПроцедуры

Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КоммерческоеПредОкна";
    Макет = ПолучитьМакет("КоммерческоеПредОкна");
    // Здесь происходит заполнение областей макета параметрами
    Возврат ТабличныйДокумент;
КонецФункции

При тестировании этой формы в режиме отладки через отдельную обработку вызова метода Показать() документ формируется мгновенно и без ошибок. Однако при интеграции ВПФ в справочник «Дополнительные отчеты и обработки» и вызове через стандартную форму предварительного просмотра БСП (Библиотеки Стандартных Подсистем) система зависает. Очистка кэша конфигурации, тестирование и исправление (ТиИ) базы данных не приносят никаких результатов.

Выясним истинные причины такого поведения платформы и разберем варианты решения.

Решение 1. Даунгрейд версии платформы (Временный обходной путь)

Практика показывает, что корень проблемы часто кроется в багах рендеринга табличных документов конкретных релизов платформы. В частности, на релизе 8.3.16.1063 (и смежных версиях этой ветки) наблюдаются критические ошибки графической подсистемы при взаимодействии с драйверами принтеров в режиме управляемых форм.

Если специфика вашей конфигурации позволяет использовать предыдущую стабильную ветку платформы, наиболее быстрым решением будет откат на платформу версии 8.3.15. Как подтверждает опыт многих специалистов, после перехода на версию 8.3.15 зависания при формировании предварительного просмотра полностью исчезают.

Однако если ваши расширения или метаданные конфигурации требуют строго платформы версии 8.3.16 и выше, перейдем к разбору внутренних механизмов платформы и точечным исправлениям.

Решение 2. Проверка блокировки вспомогательных процессов печати

Начиная с версии 8.3.16, архитектура взаимодействия 1С с принтерами претерпела изменения. Чтобы сбойные драйверы печати не приводили к аварийному завершению работы всего сеанса 1С, опрос очереди печати и получение параметров страницы были вынесены во внешние процессы:

  1. 1cv8p32.bin (для 32-разрядных клиентов)
  2. 1cv8p64.bin (для 64-разрядных клиентов)

В момент вывода окна предпросмотра платформа пытается запустить один из этих исполняемых файлов из своего каталога установки. В этот момент могут происходить следующие коллизии:

Что делать: Добавьте исполняемые файлы 1cv8p32.bin и 1cv8p64.bin (находящиеся в подпапке bin установленной платформы 1С) в белый список (исключения) вашего антивирусного ПО и убедитесь, что у пользователей операционной системы есть права на их запуск.

Решение 3. Устранение эффекта бесконечного пересчета страниц («Вместе со следующим»)

Еще один коварный баг графического движка 1С проявляется при расчете высоты строк табличного документа. Если в свойствах строк макета или у отдельных ячеек включено свойство «Параграф -> Вместе со следующим» (Keep with next), это может привести к бесконечному циклу расчета разрывов страниц.

Сценарий зависания:

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

Решение:

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

Решение 4. Очистка кэша настроек принтеров (Реестр и параметры Moxel)

Платформа 1С сохраняет индивидуальные параметры печати для каждого пользователя и для каждого типа печатной формы отдельно в базе данных и системном реестре. Эти данные хранятся в так называемых настройках Moxel.

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

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

  1. Запустите информационную базу под проблемным пользователем в режиме «1С:Предприятие».
  2. Перейдите в меню Администрирование -> Настройки пользователей и прав -> Персональные настройки (или в карточку текущего пользователя).
  3. Найдите пункт Очистить настройки печати табличных документов и выполните очистку.
  4. Также рекомендуется проверить имя принтера по умолчанию в операционной системе Windows. Если имя содержит кириллические символы, переименуйте принтер, используя только латиницу (в старых релизах платформы существовал баг зависания из-за некорректного декодирования русских имен принтеров).

Решение 5. Лайфхак для шаблонов этикеток и ценников (пропадающие тексты в УНФ)

Разработчики, использующие платформу версии 8.3.16 совместно с конфигурацией «Управление нашей фирмой» (УНФ) или «1С:Розница», часто сталкивались со схожим сопутствующим багом: при выводе ценников штрихкод отображается корректно, а сопутствующий текст (наименование товара, артикул, цена) полностью исчезает с экрана.

Этот баг графического рендеринга также обходится простым действием в макете шаблона:

  1. Откройте шаблон ценника или этикетки в режиме редактирования.
  2. Выделите область ячеек, в которых настроены границы (рамки).
  3. Через контекстное меню или панель инструментов выполните команду Очистить границы.
  4. Если рамки необходимы по дизайну, попробуйте нарисовать их с помощью графических линий (рисунков), а не свойствами границ ячеек. Это решает проблему пропадания текста на платформе 8.3.16.

Применяя указанные методы последовательно, вы сможете локализовать причину зависания вашей внешней печатной формы и восстановить стабильную работу пользователей без отката на устаревшие версии платформы.

← На главную