При автоматизации розничной торговли и сферы услуг, в частности в конфигурации «1С:Салон красоты» (разработки компании «Хеликс»), пользователи часто сталкиваются с неудобством при печати ценников и этикеток. Программа отправляет документ напрямую на принтер, не открывая стандартное диалоговое окно настройки печати. В результате невозможно изменить принтер, настроить поля, выбрать нужный формат бумаги или изменить ориентацию страницы. Ценники могут съезжать, печататься некорректно или выходить на обычном офисном принтере вместо специализированного принтера этикеток.
В этой статье мы подробно разберем, почему возникает эта проблема, как локализовать ее в коде конфигурации и какими способами ее можно решить как программным путем, так и с помощью стандартных пользовательских настроек без изменения кода.
В платформе «1С:Предприятие» за вывод печатных форм отвечает объект ТабличныйДокумент. Этот объект обладает методом Напечатать(), который отправляет сформированный макет на принтер. Поведение этого метода напрямую зависит от переданных в него параметров.
Синтаксис метода выглядит следующим образом:
ТабличныйДокумент.Напечатать(РежимИспользованияДиалогаПечати)
Параметр РежимИспользованияДиалогаПечати определяет, будет ли программа показывать пользователю стандартное системное окно выбора принтера и настройки параметров перед отправкой данных на печать. Данный параметр принимает значения из системного перечисления:
Проанализируем ситуацию и рассмотрим все возможные пути исправления этой проблемы.
---
Если вы имеете доступ к конфигуратору и база находится не на поддержке (или изменения вносятся через механизм расширений), этот способ является наиболее надежным. Нам нужно найти строчку кода, которая отвечает за непосредственную отправку табличного документа на принтер, и изменить параметры вызова метода.
Разберем по шагам, как быстро найти нужный участок кода с помощью встроенного инструмента «Замер производительности»:
.Напечатать(.Вы обнаружите строку, которая выглядит примерно так:
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
// Или в более старых конфигурациях:
ТабДок.Напечатать(Ложь);
Чтобы программа начала показывать диалоговое окно перед печатью ценников, замените эту строку кода на следующую:
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
// Или для старых версий платформы:
ТабДок.Напечатать(Истина);
После сохранения изменений при каждом нажатии на кнопку печати ценников перед отправкой на принтер будет появляться стандартное системное окно настройки печати.
---
Иногда показывать диалог настройки принтера при каждом нажатии кнопки неудобно (требуется делать слишком много лишних кликов). Более элегантное решение — выводить ценники на экран в режиме предварительного просмотра. Из этого окна пользователь сможет визуально оценить макет, настроить параметры страницы через меню «Файл — Параметры страницы» и отправить документ на печать вручную.
Для реализации этого подхода найдите в коде процедуру вывода печатной формы и замените вызов метода Напечатать() на метод Показать():
// Вместо прямой отправки на принтер:
// ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
// Выводим документ на экран в отдельном окне:
ТабДок.ТолькоПросмотр = Истина; // Защищаем документ от случайного редактирования пользователем
ТабДок.Показать("Печать ценников и этикеток");
Этот способ хорош тем, что пользователь видит реальное расположение ценников на листе перед тем, как переводить бумагу или дорогостоящую ленту этикеток.
---
Если ваша задача — сделать так, чтобы печать происходила в «один клик», но при этом параметры страницы (поля, размеры, масштаб) определялись корректно без участия пользователя, вы можете задать эти свойства табличного документа непосредственно в коде перед вызовом печати.
Рассмотрим пример настройки табличного документа под стандартную ленту принтера этикеток размером 40х30 мм с нулевыми полями:
// Задаем имя принтера, чтобы документ отправлялся на правильное устройство
ТабДок.ИмяПринтера = "Xprinter XP-365B";
// Устанавливаем автонастройку масштаба, чтобы ценник автоматически вписывался в границы
ТабДок.Автомасштаб = Истина;
// Задаем ориентацию страницы (Портрет или Ландшафт)
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// Задаем нестандартный размер бумаги в миллиметрах
ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 40; // Ширина 40 мм
ТабДок.ВысотаСтраницы = 30; // Высота 30 мм
// Обнуляем поля, чтобы область печати использовалась максимально эффективно
ТабДок.Поля.Лево = 0;
ТабДок.Поля.Право = 0;
ТабДок.Поля.Верх = 0;
ТабДок.Поля.Низ = 0;
// Теперь отправляем на печать без вывода лишних окон
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
Такой подход полностью автоматизирует процесс работы кассира или администратора салона красоты: программа сама подставит нужные размеры и отправит документ на правильный принтер.
---
Если у вас нет возможности редактировать код программы, изменять конфигурацию или привлекать программиста, решить проблему с некорректными полями и размерами при «слепой» печати можно стандартными средствами платформы 1С.
Выясним, какие пользовательские механизмы управления печатью нам доступны.
В конфигурации «1С:Салон красоты» и других современных решениях на базе БСП (Библиотеки Стандартных Подсистем) в форме печати этикеток часто присутствует флажок «Печать без предварительного просмотра» (или аналогичный ему «Печать на принтер напрямую»). Проанализируйте форму настроек обработки:
Платформа 1С сохраняет настройки параметров страниц для каждого типа документов индивидуально в локальном кэше пользователя на компьютере. Мы можем заставить систему запомнить правильные настройки для автоматической печати. Выполним следующие шаги:
После этой процедуры платформа запишет данные настройки в ваш пользовательский профиль. При следующей быстрой печати ценников (даже вслепую без вызова диалога) программа автоматически применит именно эти сохраненные параметры.
Если принтер был заменен, а программа продолжает отправлять ценники со старыми настройками или выдает ошибку печати, необходимо очистить кэш настроек печати в пользовательских настройках:
Используя приведенные программные методы изменения параметров ТабличныйДокумент или воспользовавшись хитростями кэширования настроек печати в самой платформе, вы сможете легко добиться корректной и быстрой печати ценников в «1С:Салон красоты».