Что делать, если 1С 8.3 в клиент-серверном варианте зависает при печати?

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

Зависание платформы 1С:Предприятие 8.3 при попытке отправить документ на печать — это крайне неприятная проблема, с которой часто сталкиваются системные администраторы и пользователи. Симптомы обычно выглядят следующим образом: при нажатии на кнопку печати или при открытии предварительного просмотра форма «намертво» зависает. Более того, при принудительном завершении процесса через диспетчер задач повторный запуск 1С становится невозможен — программа зависает на этапе выбора информационной базы или ввода пароля. Помогает только полная перезагрузка рабочей станции.

В этой статье мы подробно проанализируем причины такого поведения системы, разберем сопутствующие ошибки в журнале событий Windows и рассмотрим пошаговые методы устранения этой проблемы.

Шаг 1. Анализ системных логов Windows и устранение ошибки inetpp.dll

При возникновении подобных зависаний первым делом необходимо изучить журнал событий Windows (раздел «Система» и «Приложение») на проблемном компьютере. Очень часто там обнаруживается следующая ошибка:

Код события: 512. Источник: PrintSpooler. Описание: Ошибка InitializePrintProvider для поставщика inetpp.dll. Это может происходить из-за нестабильности системы или нехватки системных ресурсов.

Выясним причину этой ошибки. Библиотека inetpp.dll отвечает за сетевую печать и работу с веб-принтерами. Данный сбой практически всегда связан с ограничением протокола NetBIOS на длину сетевого имени компьютера. Если имя рабочей станции (имя хоста в Windows) превышает 15 символов или содержит специфические символы (кириллицу, пробелы, подчеркивания), диспетчер печати Windows не может корректно обработать запросы сетевого окружения. Это приводит к каскадному сбою службы Spooler, которая за собой утягивает и зависший поток 1С.

Решение: Переименуйте компьютер пользователя в свойствах системы. Убедитесь, что новое имя состоит строго из латинских букв и цифр, а его длина не превышает 15 символов (например, Workstation-01 вместо длинных кириллических конструкций).

Шаг 2. Разрешение конфликтов с процессами печати 1С

Начиная с технологической платформы версии 8.3.16, разработчики 1С изменили архитектуру взаимодействия с принтерами. Функции работы с драйверами печати были вынесены во внешние исполняемые файлы — 1cv8p32.bin (для 32-битного клиента) и 1cv8p64.bin (для 64-битного клиента). Это было сделано для того, чтобы сбой нестабильного драйвера принтера не приводил к аварийному завершению всей сессии 1С.

Однако эта архитектура породила новые проблемы:

  1. Антивирусное программное обеспечение (включая встроенный Защитник Windows) может блокировать запуск исполняемых файлов с расширением .bin или подвергать их глубокой проверке при каждом обращении, что вызывает зависание диалога печати на длительное время.
  2. Локальные групповые политики безопасности (AppLocker или SRP) могут запрещать запуск исполняемых файлов из папок AppData или Program Files, где установлена платформа.

Решение: Добавьте каталог установки платформы 1С (обычно это C:\Program Files\1cv8 или C:\Program Files (x86)\1cv8), а также папки локального кэша пользователя (%localappdata%\1C) в исключения вашего антивирусного сканера. Проверьте, чтобы у пользователя были полные права на запуск файлов 1cv8p32.bin и 1cv8p64.bin.

Шаг 3. Отказ от использования виртуальных портов WSD

Современные версии Windows при автоматическом поиске принтеров в сети часто подключают их через так называемые порты WSD (Web Services for Devices). Это характерно для сетевых МФУ, таких как серия HP LaserJet M1530.

Порты WSD крайне нестабильны в корпоративной среде. Они часто уходят в «спящий режим», теряют связь с устройством или генерируют некорректные статусы принтера. Когда 1С запрашивает параметры страницы, драйвер пытается связаться с принтером через WSD, не получает быстрого ответа и отправляет поток 1С в бесконечное ожидание (блокировку).

Решение: Переведите принтер на классический TCP/IP порт:

  1. Откройте «Панель управления» -> «Устройства и принтеры».
  2. Кликните правой кнопкой мыши по проблемному принтеру и выберите «Свойства принтера».
  3. Перейдите на вкладку «Порты» и нажмите кнопку «Добавить порт».
  4. Выберите тип порта Standard TCP/IP Port и нажмите «Новый порт».
  5. Укажите статический IP-адрес вашего сетевого принтера в локальной сети и завершите настройку.

Шаг 4. Очистка диспетчера печати и переустановка драйверов

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

  1. Остановите службу печати. Для этого запустите командную строку от имени администратора и выполните: net stop spooler
  2. Перейдите в каталог по адресу %SystemRoot%\System32\spool\PRINTERS и полностью удалите все файлы из этой папки. Это очистит зависшие и поврежденные задания печати.
  3. Запустите службу печати обратно: net start spooler
  4. Замените проблемный драйвер. Драйверы класса PCL 6 (особенно универсальные драйверы HP UPD) часто некорректно обрабатывают сложные шрифты и таблицы, генерируемые платформой 1С. Установите вместо него более стабильный драйвер версии PCL 5 или оригинальный драйвер PostScript (PS).

Шаг 5. Исключение кириллицы из имени принтера

Платформа 1С очень чувствительна к спецсимволам и кириллическим буквам в названии принтера по умолчанию. Если ваш принтер называется, например, HP LaserJet M1530 MFP Series PCL 6 (копия 1), наличие русских букв и скобок может приводить к сбоям при парсинге имени устройства движком печати 1С.

Решение: Переименуйте принтер в системе, используя только латинские символы и нижнее подчеркивание вместо пробелов (например, HP_LJ_M1530). Убедитесь, что имя общего сетевого ресурса (если принтер опубликован в сети) также переименовано по этому принципу.

Шаг 6. Сброс кэша настроек печати в базе данных 1С

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

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

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

Решение 2 (Кардинальное решение для администратора):
Если первый способ не помог, необходимо очистить пользовательские настройки в самой базе данных 1С:

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

Шаг 7. Проверка программного кода на наличие критических функций

Если зависание происходит только при печати конкретного документа (например, расчетного листка в ЗУП или сложной спецификации в УНФ), проблема может кроться в самом программном коде печатной формы. Рассмотрим ситуацию, когда разработчики используют неоптимальные методы поиска областей в макете.

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

Проанализируем пример того, как делать не рекомендуется:


// Неоптимальный поиск области по текстовому маркеру, вызывающий зависание
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст("Итого к оплате");
Если НайденнаяОбласть <> Неопределено Тогда
    // Производятся операции с областью
КонецЕсли;

Вместо этого разработчикам следует использовать обращение к заранее именованным областям макета через метод ПолучитьОбласть, что работает мгновенно и не вызывает сбоев спулера печати:


// Оптимальное обращение к именованной области макета
ОбластьИтог = Макет.ПолучитьОбласть("Подвал|Итого");
ТабличныйДокумент.Вывести(ОбластьИтог);

Совместное применение предложенных административных и программных методов позволит полностью ликвидировать проблему зависания 1С при печати в клиент-серверном режиме.

← На главную