Ситуация, когда внешняя печатная форма на большинстве компьютеров открывается за считанные секунды, а на избранных рабочих местах «зависает» на 30–60 секунд, является классической проблемой для администраторов и разработчиков 1С. В этой статье мы подробно разберем, почему возникают такие задержки, проанализируем влияние системных настроек и выясним, как оптимизировать процесс печати.
Первым делом проанализируем, как 1С работает с параметрами печати. В платформе существует механизм, который запоминает настройки принтера, ориентацию страницы и масштаб для конкретных форм. За это отвечают свойства ИмяПараметровПечати и КлючПараметровПечати. Когда эти параметры заданы, система пытается считать последние использованные настройки из системного хранилища.
Рассмотрим ситуацию: если в хранилище накопилось огромное количество записей или данные для конкретного пользователя повреждены, обращение к ним может вызвать значительную задержку. Разберем по шагам, как проверить влияние этого механизма:
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_СчетФактура";
Важно помнить, что удаление этой строки сбросит настройки печати (поля, принтер) к значениям по умолчанию для этого пользователя, но часто это является необходимым шагом для диагностики.
Если манипуляции с кодом не помогли, проанализируем состояние базы данных на уровне сервера. Все пользовательские настройки (расположение окон, выбранные принтеры, настройки колонок) хранятся в таблице SystemSettings. Со временем эта таблица может раздуваться, что замедляет выборку данных для конкретного пользователя.
Внимание! Любые действия с таблицами базы данных через SQL Management Studio должны выполняться только после создания резервной копии и при полном понимании процесса.
Для решения проблемы можно выполнить очистку настроек для проблемного пользователя. Выясним идентификатор пользователя и удалим его записи из таблицы SystemSettings. Это заставит 1С при следующем входе создать «чистые» настройки. Рассмотрим пример логики запроса:
-- Примерный запрос для очистки настроек конкретного пользователя
DELETE FROM dbo.SystemSettings
WHERE [UserUID] = 'ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ'
Если проблема носит массовый характер, системные администраторы иногда принимают решение о полной очистке этой таблицы, однако это приведет к тому, что всем пользователям придется заново настраивать интерфейс «под себя».
Проанализируем работу клиентского приложения. 1С активно использует локальное кэширование метаданных и конфигурации на жестком диске пользователя. Часто задержки в 30–60 секунд связаны с тем, что система не может быстро прочитать или записать временные файлы в папку пользователя.
Разберем алгоритм очистки кэша:
1cv8.exe.%AppData%\1C\1cv8\%LocalAppData%\1C\1cv8\Посмотрим на результат после перезапуска: при первом старте база может открываться чуть дольше обычного, так как кэш будет пересоздаваться, но «тормоза» при формировании печатных форм часто исчезают именно на этом этапе.
Зачастую задержка возникает не внутри 1С, а в момент передачи управления драйверу принтера. Рассмотрим специфическую проблему портов WSD (Web Services for Devices). Этот тип порта часто устанавливается Windows автоматически для сетевых принтеров. Однако WSD имеет свойство «засыпать» или долго опрашивать устройство перед отправкой задания.
Проанализируем настройки принтера на проблемных ПК:
Перевод принтера на TCP/IP порт — один из самых эффективных способов ускорить реакцию системы на команду «Печать».
Выясним интересный нюанс: 1С:Предприятие при формировании любого ТабличногоДокумента обращается к драйверу принтера по умолчанию. Это необходимо для того, чтобы корректно рассчитать разбиение на страницы, учитывая физические поля принтера и его разрешение.
Если принтер по умолчанию является сетевым и в данный момент недоступен (или находится в другом офисе), система будет ждать ответа от драйвера до тех пор, пока не сработает таймаут (обычно те самые 30–60 секунд).
Рекомендация: попробуем установить в качестве принтера по умолчанию виртуальный принтер (например, Microsoft Print to PDF). Если задержка исчезнет — значит, проблема в доступности или скорости работы драйвера физического сетевого принтера.
Если пользователи работают в режиме толстого клиента через удаленный рабочий стол, проанализируем технологию Easy Print. Эта технология позволяет не устанавливать драйверы принтеров на сервер, используя универсальный драйвер. Однако за универсальность приходится платить скоростью: задание печати переупаковывается в формат XPS, передается на клиентскую машину и там снова разворачивается.
Для ускорения работы в таких случаях рекомендуется:
Иногда замедление происходит на этапе программного расчета высоты строк. Если в коде часто вызывается метод ПроверитьВывод(), система каждый раз инициирует сложный расчет макета с учетом настроек принтера.
Рассмотрим пример оптимизации кода:
// Вместо вызова ПроверитьВывод() для каждой строки
Для Каждого Строка Из ДанныеПечати Цикл
// ... формирование секции ...
МассивСекций = Новый Массив;
МассивСекций.Добавить(ОбластьСтрока);
// Вызываем проверку вывода только когда это действительно необходимо
Если Не ТабДок.ПроверитьВывод(МассивСекций) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Постараемся минимизировать количество таких вызовов или проверить, не меняются ли настройки страницы (ориентация, масштаб) внутри цикла. Установка параметров страницы должна происходить один раз в начале или конце формирования документа.
Напоследок проанализируем состояние системной папки Temp. В процессе формирования спула печати Windows и 1С создают множество временных файлов. Если в папке %TEMP% скопилось 50–100 тысяч файлов, поиск свободного имени для нового файла замедляется. Обычная очистка временных папок пользователя может дать неожиданный прирост производительности в задачах печати.
Подводя итог, можно сказать, что «тормоза» при печати в 1С — это комплексная проблема, требующая последовательной проверки: от программного кода (ИмяПараметровПечати) до настроек операционной системы и сетевой инфраструктуры принтеров.