При автоматизации розничных или мелкооптовых продаж часто возникает необходимость выдавать покупателю компактный товарный чек на чековой ленте (шириной 58 мм или 80 мм) напрямую из оптового документа Реализация товаров и услуг. В конфигурациях на обычных формах, таких как 1С:Управление торговлей 10.3, стандартные печатные формы накладных ориентированы на формат листа А4. Рассмотрим, как разработать удобный макет, правильно настроить параметры табличного документа, избавиться от лишних отступов и автоматизировать вывод чека на печать.
Разберем по шагам создание макета табличного документа, адаптированного под узкую ленту чекового принтера. В отличие от стандартных таблиц накладных, чек имеет специфическую компактную структуру строк.
Количество * Цена = Сумма.Проанализируем частую проблему формирования комбинированных строк. Чтобы не писать громоздкие функции сложения строк в модуле, в свойствах ячеек макета 1С предусмотрен тип заполнения Шаблон.
Посмотрим на пример настройки ячейки в свойствах макета:
Текст или Параметр на Шаблон.[Количество] x [Цена] = [Сумма].При формировании печатной формы в коде модуля достаточно заполнить структуру параметров области, и платформа автоматически подставит значения в шаблон.
Выясним причину, почему при печати чеков на принтерах узкой ленты смещается текст или принтер отматывает пустую бумагу. По умолчанию табличный документ создается со стандартными полями (отступами) по 10 мм и включенными колонтитулами. Для чековой ленты шириной 58 мм такие поля оставляют слишком мало места под полезный текст.
Чтобы пользователю не приходилось настраивать параметры печати вручную при каждом формировании документа, зададим нулевые поля и параметры страницы программно в коде формирования отчета.
Рассмотрим пример кода процедуры формирования табличного документа:
Функция ПечатьЧека(ДокументСсылка) Экспорт
ТабДокумент = Новый ТабличныйДокумент;
// Привязываем уникальный ключ параметров печати к документу
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТоварныйЧек_Реализация";
// Обнуляем поля страницы
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСнизу = 0;
// Обнуляем колонтитулы во избежание лишней протяжки ленты
ТабДокумент.РазмерКолонтитулаСверху = 0;
ТабДокумент.РазмерКолонтитулаСнизу = 0;
// Получаем макет обработки или документа
Макет = ПолучитьМакет("МакетЧека");
// Вывод шапки документа
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Организация = ДокументСсылка.Организация;
ОбластьШапка.Параметры.Номер = ДокументСсылка.Номер;
ОбластьШапка.Параметры.Дата = Формат(ДокументСсылка.Дата, "ДФ=dd.MM.yyyy HH:mm");
ОбластьШапка.Параметры.Контрагент = ДокументСсылка.Контрагент;
ТабДокумент.Вывести(ОбластьШапка);
// Вывод строк табличной части
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара");
Для Каждого Стр Из ДокументСсылка.Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = Стр.Номенклатура.Наименование;
ОбластьСтрока.Параметры.Количество = Стр.Количество;
ОбластьСтрока.Параметры.Цена = Формат(Стр.Цена, "ЧДЦ=2");
ОбластьСтрока.Параметры.Сумма = Формат(Стр.Сумма, "ЧДЦ=2");
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
// Вывод подвала с итоговой суммой
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.СуммаДокумента = Формат(ДокументСсылка.СуммаДокумента, "ЧДЦ=2");
ОбластьПодвал.Параметры.Ответственный = ДокументСсылка.Ответственный;
ТабДокумент.Вывести(ОбластьПодвал);
Возврат ТабДокумент;
КонецФункции
Рассмотрим подробнее поведение строк номенклатуры с длинными названиями. Чтобы текст не обрезался по ширине ленты:
Номенклатура.Переносить.АвтоМасштаб, так как платформа может избыточно уменьшить размер шрифта.Для ускорения работы кассира или менеджера можно настроить мгновенную отправку сформированного чека на печать, минуя предварительный просмотр и диалоговое окно Windows.
Посмотрим на пример реализации прямой печати:
// Непосредственная отправка на печать
ТабДокумент.ИмяПринтера = "XP-58"; // Имя принтера в системе Windows
ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
Для последующего быстрого поиска реализации через сканер штрихкодов в подвал чека можно поместить штрихкод. Рассмотрим два способа его реализации:
Рисунок табличного документа, в который программно загружается сгенерированное изображение штрихкода (Code 128 или EAN-13).Чтобы не вносить изменения в типовую конфигурацию и не снимать объекты с поддержки, разработку товарного чека рекомендуется оформить как Внешнюю печатную форму (файл .epf). В модуль внешней обработки помещается функция Печать() с ключевым словом Экспорт, которая возвращает сформированный объект ТабличныйДокумент. Обработка регистрируется в справочнике Внешние обработки и становится доступной в меню «Печать» документа реализации.