Почему печать из 1С на некоторых компьютерах занимает слишком много времени и как это исправить

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

Ситуация, когда внешняя печатная форма на большинстве компьютеров открывается за считанные секунды, а на избранных рабочих местах «зависает» на 30–60 секунд, является классической проблемой для администраторов и разработчиков 1С. В этой статье мы подробно разберем, почему возникают такие задержки, проанализируем влияние системных настроек и выясним, как оптимизировать процесс печати.

Анализ программного кода: параметры сохранения настроек

Первым делом проанализируем, как 1С работает с параметрами печати. В платформе существует механизм, который запоминает настройки принтера, ориентацию страницы и масштаб для конкретных форм. За это отвечают свойства ИмяПараметровПечати и КлючПараметровПечати. Когда эти параметры заданы, система пытается считать последние использованные настройки из системного хранилища.

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

  1. Откроем модуль внешней печатной формы.
  2. Найдем строку, где устанавливается имя параметров печати. Обычно это выглядит так:
    
    ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_СчетФактура";
    
  3. Попробуем временно закомментировать (заремить) эту строку. Если после этого скорость печати восстановится, значит, проблема в накопленных настройках.

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

Очистка системных настроек в базе данных (SQL)

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

Внимание! Любые действия с таблицами базы данных через SQL Management Studio должны выполняться только после создания резервной копии и при полном понимании процесса.

Для решения проблемы можно выполнить очистку настроек для проблемного пользователя. Выясним идентификатор пользователя и удалим его записи из таблицы SystemSettings. Это заставит 1С при следующем входе создать «чистые» настройки. Рассмотрим пример логики запроса:


-- Примерный запрос для очистки настроек конкретного пользователя
DELETE FROM dbo.SystemSettings 
WHERE [UserUID] = 'ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ'

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

Локальный кэш пользователя: скрытая угроза

Проанализируем работу клиентского приложения. 1С активно использует локальное кэширование метаданных и конфигурации на жестком диске пользователя. Часто задержки в 30–60 секунд связаны с тем, что система не может быстро прочитать или записать временные файлы в папку пользователя.

Разберем алгоритм очистки кэша:

  1. Полностью завершим работу всех процессов 1cv8.exe.
  2. Перейдем в каталоги:
    • %AppData%\1C\1cv8\
    • %LocalAppData%\1C\1cv8\
  3. Удалим все папки с длинными буквенно-цифровыми именами (идентификаторы баз).

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

Влияние инфраструктуры печати и портов принтера

Зачастую задержка возникает не внутри 1С, а в момент передачи управления драйверу принтера. Рассмотрим специфическую проблему портов WSD (Web Services for Devices). Этот тип порта часто устанавливается Windows автоматически для сетевых принтеров. Однако WSD имеет свойство «засыпать» или долго опрашивать устройство перед отправкой задания.

Проанализируем настройки принтера на проблемных ПК:

  1. Зайдем в «Устройства и принтеры» — «Свойства принтера» — вкладка «Порты».
  2. Если используется порт WSD, создадим новый порт типа Standard TCP/IP Port и укажем IP-адрес принтера.
  3. Отключим опцию «Разрешить двусторонний обмен данными», если она не является критически важной.

Перевод принтера на TCP/IP порт — один из самых эффективных способов ускорить реакцию системы на команду «Печать».

Принтер по умолчанию и расчет макета

Выясним интересный нюанс: 1С:Предприятие при формировании любого ТабличногоДокумента обращается к драйверу принтера по умолчанию. Это необходимо для того, чтобы корректно рассчитать разбиение на страницы, учитывая физические поля принтера и его разрешение.

Если принтер по умолчанию является сетевым и в данный момент недоступен (или находится в другом офисе), система будет ждать ответа от драйвера до тех пор, пока не сработает таймаут (обычно те самые 30–60 секунд).

Рекомендация: попробуем установить в качестве принтера по умолчанию виртуальный принтер (например, Microsoft Print to PDF). Если задержка исчезнет — значит, проблема в доступности или скорости работы драйвера физического сетевого принтера.

Работа в терминальном режиме (RDP)

Если пользователи работают в режиме толстого клиента через удаленный рабочий стол, проанализируем технологию Easy Print. Эта технология позволяет не устанавливать драйверы принтеров на сервер, используя универсальный драйвер. Однако за универсальность приходится платить скоростью: задание печати переупаковывается в формат XPS, передается на клиентскую машину и там снова разворачивается.

Для ускорения работы в таких случаях рекомендуется:

Проверка вывода и расчет областей

Иногда замедление происходит на этапе программного расчета высоты строк. Если в коде часто вызывается метод ПроверитьВывод(), система каждый раз инициирует сложный расчет макета с учетом настроек принтера.

Рассмотрим пример оптимизации кода:


// Вместо вызова ПроверитьВывод() для каждой строки
Для Каждого Строка Из ДанныеПечати Цикл
    // ... формирование секции ...
    МассивСекций = Новый Массив;
    МассивСекций.Добавить(ОбластьСтрока);
    
    // Вызываем проверку вывода только когда это действительно необходимо
    Если Не ТабДок.ПроверитьВывод(МассивСекций) Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

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

Очистка временных файлов системы

Напоследок проанализируем состояние системной папки Temp. В процессе формирования спула печати Windows и 1С создают множество временных файлов. Если в папке %TEMP% скопилось 50–100 тысяч файлов, поиск свободного имени для нового файла замедляется. Обычная очистка временных папок пользователя может дать неожиданный прирост производительности в задачах печати.

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

← На главную