Обзор базовой функциональности работы с оборудованием "Принтер чеков 1С" через БПО

01.12.24

Интеграция - Периферийные устройства

Предлагается небольшой практический обзор возможностей работы с принтерами чеков 1С в рамках типовых БПО.

Введение

Доброго времени всем! Этот материал-обзор создан на базе небольшой выполненной практической задачи - "работы с принтером чеков 1С с возможностью индивидуальной настройки и печати". Описание функционала данной статьи основано на типовой "Библиотеке подключаемого оборудования" (БПО). Версия БПО (на момент написания статьи - ноябрь 2024 г.) немного "устарела" - это 2.1, но она, я думаю, по-прежнему будет актуальна, поскольку многие работают на "старых", УТ 11.5, где еще используется версия БПО 2.1. В последних версиях - используется версия 3.*.

Данный материал подготавливался на типовой конфигурации Управление торговлей 11.5 (11.5.8.367), использую платформу 1С:Предприятие 8.3.24.1586. В материале, как и в других, автор старается описывать только практическую часть - взял - применил - все заработало!

В статье рассматриваются самые базовые вещи - как подключение "Принтера чеков 1С" к рабочему месту, его программное определение, печать строки, печать массива строк, печать штрихкодов, печать qr-кодов, смешанная печать на пречеке.

Отмечу, что здесь НЕ затрагиваются "фискальные" операции, которые в последнее время отменили в БПО 3.* на подобных устройствах.

Переходим к разделам:

1.Подключение "Принтера чеков 1С" и его "программное обнаружение" на рабочем месте.

Для полноты картины, ваш принтер должен быть установлен в системе прилагаемым драйвером и подключен на рабочее место через типовой функционал "НСИ и администрирование - РМК и оборудование - Подключаемое оборудование". Выглядит это вот так:

 

Рис.1. "1С:Принтер чеков" на рабочем месте "Администратор".

 

настройки принтера вот такие (я использую windows pos printer через эмуляцию ком, у меня самая типовая модель - RP80 Printer):

 

Рис.2. Настройки принтера RP80 Printer и "тест подключения".

 

Далее, мы создадим обработку - в итоге будет выглядеть вот так - рис.3 и "обвяжем кодом" работу с этим подключенным устройством:

 

Рис.3. Шаблон функциональной обработки.

 

Далее, напишем код, с помощью которого определим этот принтер на рабочем месте:

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

 

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЭтаФорма.ТекРабМст  		= МенеджерОборудованияКлиентПовтИсп.ПолучитьРабочееМестоКлиента();
	ЭтаФорма.ПринтерЧековККМ 	= ПолучимПринтерЧековККМ(ЭтаФорма.ТекРабМст);
	
КонецПроцедуры

&НаСервере
Функция ПолучимПринтерЧековККМ(РабМст)
	
	ПринтерЧековККМ = Справочники.ПодключаемоеОборудование.ПустаяСсылка();

	ПоискПринтера = Новый Запрос("ВЫБРАТЬ
	                             |	ПодключаемоеОборудование.Ссылка КАК Ссылка
	                             |ИЗ
	                             |	Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
	                             |ГДЕ
	                             |	ПодключаемоеОборудование.РабочееМесто = &РабочееМесто
	                             |	И ПодключаемоеОборудование.ТипОборудования = ЗНАЧЕНИЕ(Перечисление.ТипыПодключаемогоОборудования.ПринтерЧеков)
	                             |	И ПодключаемоеОборудование.УстройствоИспользуется = ИСТИНА
	                             |	И ПодключаемоеОборудование.ПометкаУдаления = ЛОЖЬ");
	
	ПоискПринтера.УстановитьПараметр("РабочееМесто", РабМст);
		
	НашлиПринтер1 = ПоискПринтера.Выполнить().Выбрать();
	
	Если НашлиПринтер1.Следующий() Тогда
		ПринтерЧековККМ = НашлиПринтер1.ССылка;
	КонецЕсли;
	
	Возврат ПринтерЧековККМ;
	
КонецФункции

 

Затем, мы переходим к опросу данного устройства.

 

2.Пример печати текстовой строки, массива строк, штрихкода, qr-кода, комбинированная печать.

Для печати текстовой строки, пишем "на клиенте" вот такой код - процедура "НачатьПечатьТекста(ОповещениеПриЗавершении, УникальныйИдентификатор, Текст, ИдентификаторУстройства = Неопределено, ТипОборудования = Неопределено)"

 
 НачатьПечатьТекста(ОповещениеПриЗавершении, УникальныйИдентификатор, Текст, ИдентификаторУстройства = Неопределено, ТипОборудования = Неопределено)

 


&НаКлиенте
Процедура РаспечатьТекст(Команда)

	Если НЕ СокрЛП(ЭтаФорма.ПринтерЧековККМ) = "" Тогда
		Текст1 = СокрЛП(ЭтаФорма.НапечатьТекст);
		ОповещениеПриЗавершении = Новый ОписаниеОповещения("ФУ_КомандаВыполнитьЗавершение", ЭтотОбъект);
		МенеджерОборудованияКлиент.НачатьПечатьТекста(ОповещениеПриЗавершении, УникальныйИдентификатор, Текст1,ЭтаФорма.ПринтерЧековККМ);
	Иначе
		Сообщить("Не найден принтер чеков!");
	КонецЕсли;	

КонецПроцедуры

 &НаКлиенте
Процедура ФУ_КомандаВыполнитьЗавершение(РезультатВыполнения, Параметры) Экспорт
	
	ОчиститьСообщения();
	
КонецПроцедуры

 

 

Для печати массива строк (документов) нам потребуется процедура "НачатьПечатьТекстовыхДокументов(ОповещениеПриЗавершении, УникальныйИдентификатор, НефискальныеДокументы, ИдентификаторУстройства = Неопределено, ТипОборудования = Неопределено)"

НачатьПечатьТекстовыхДокументов(...
&НаКлиенте
Процедура РаспечатьТаблицу(Команда)
	
	Если НЕ СокрЛП(ЭтаФорма.ПринтерЧековККМ) = "" Тогда
		
		ПозицииЧека = Новый Массив;
		
		Для Каждого Стр ИЗ ТаблицаДляПечати Цикл					
			
			СтрокаОписания = СокрЛП(Стр.Наименование)+" - "+ СокрЛП(Стр.Количество)+" шт.";
			
			СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыТекстовойСтрокиЧека(СтрокаОписания);
			СтрокаЧека.Выравнивание = "Лево"; // Выравнивание на ленте, возможные значения: "Лево", "Право", "Центр"
			СтрокаЧека.ПереносСтроки = Истина;
			ПозицииЧека.Добавить(СтрокаЧека);
			
		КонецЦикла;		
		
		ДанныеДляПечати = Новый Массив;
		ДанныеДляПечати.Добавить(ПозицииЧека);	
			
		ОповещениеПриЗавершении = Новый ОписаниеОповещения("ФУ_КомандаВыполнитьЗавершение", ЭтотОбъект);
		МенеджерОборудованияКлиент.НачатьПечатьТекстовыхДокументов(ОповещениеПриЗавершении, УникальныйИдентификатор, ДанныеДляПечати,ЭтаФорма.ПринтерЧековККМ);
		
	Иначе
		Сообщить("Не найден принтер чеков!");
	КонецЕсли;	

КонецПроцедуры

 &НаКлиенте
Процедура ФУ_КомандаВыполнитьЗавершение(РезультатВыполнения, Параметры) Экспорт
	
	ОчиститьСообщения();
	
КонецПроцедуры

 

 

Если необходим напечатать штрихкод - "ПолучитьШаблонЧекаПечатиШтрихкодов()"

ПолучитьШаблонЧекаПечатиШтрихкодов()
&НаКлиенте
Процедура ПечатьШтрихкода(Команда)

	Если НЕ СокрЛП(ЭтаФорма.ПринтерЧековККМ) = "" Тогда
		
		ДанныеДляПечати = ПолучитьШаблонЧекаПечатиШтрихкодов();
		
		ОповещениеПриЗавершении = Новый ОписаниеОповещения("ФУ_КомандаВыполнитьЗавершение", ЭтотОбъект);
		МенеджерОборудованияКлиент.НачатьПечатьТекста(ОповещениеПриЗавершении, УникальныйИдентификатор, ДанныеДляПечати,ЭтаФорма.ПринтерЧековККМ);

	Иначе
		Сообщить("Не найден принтер чеков!");
	КонецЕсли;		
		
КонецПроцедуры

&НаКлиенте
Функция ПолучитьШаблонЧекаПечатиШтрихкодов()
	
	Текст = "";
		
// обратите внимание как обрабатывается штрихкод

	Текст = Текст + Символы.ПС + "|ШтрихКод|EAN13|" + ЭтаФорма.ШтрихКод;
	
	Возврат Текст;
	
КонецФункции 


&НаКлиенте
Процедура ФУ_КомандаВыполнитьЗавершение(РезультатВыполнения, Параметры) Экспорт
	
	ОчиститьСообщения();
	
КонецПроцедуры

 

 

Для печати строки с qr-кодом - "ПолучитьШаблонЧекаПечатиQR()"

ПолучитьШаблонЧекаПечатиQR()
&НаКлиенте
Функция ПолучитьШаблонЧекаПечатиQR()
	
	Текст = "";
		
	Текст = Текст + Символы.ПС + "|ШтрихКод|QR|" + ЭтаФорма.QRКод;
	
	Возврат Текст;
	
КонецФункции

&НаКлиенте
Процедура ПечатьQR(Команда)

	Если НЕ СокрЛП(ЭтаФорма.ПринтерЧековККМ) = "" Тогда
		
		ДанныеДляПечати = ПолучитьШаблонЧекаПечатиQR();
		
		ОповещениеПриЗавершении = Новый ОписаниеОповещения("ФУ_КомандаВыполнитьЗавершение", ЭтотОбъект);
		МенеджерОборудованияКлиент.НачатьПечатьТекста(ОповещениеПриЗавершении, УникальныйИдентификатор, ДанныеДляПечати,ЭтаФорма.ПринтерЧековККМ);

	Иначе
		Сообщить("Не найден принтер чеков!");
	КонецЕсли;		
	
КонецПроцедуры

&НаКлиенте
Процедура ФУ_КомандаВыполнитьЗавершение(РезультатВыполнения, Параметры) Экспорт
	
	ОчиститьСообщения();
	
КонецПроцедуры

 

 

Для "комбинированной" печати - на каждую строку мне нужно добавить штрихкод, я воспользуюсь вот такой процедурой:

 
&НаКлиенте
Процедура РаспечатьТаблицуСоШтрихкодом(Команда)

	Если НЕ СокрЛП(ЭтаФорма.ПринтерЧековККМ) = "" Тогда
		
		ПозицииЧека = Новый Массив;
		
		Для Каждого Стр ИЗ ТаблицаДляПечати Цикл					
			
			СтрокаОписания = СокрЛП(Стр.Наименование)+" - "+ СокрЛП(Стр.Количество)+" шт.";
			
			СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыТекстовойСтрокиЧека(СтрокаОписания);
			СтрокаЧека.Выравнивание = "Лево"; // Выравнивание на ленте, возможные значения: "Лево", "Право", "Центр"
			СтрокаЧека.ПереносСтроки = Истина;
			ПозицииЧека.Добавить(СтрокаЧека);
			
			СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыШтрихкодВСтрокеЧека("EAN13",ЭтаФорма.ШтрихКод,Base64Значение(ЭтаФорма.ШтрихКод));

			ПозицииЧека.Добавить(СтрокаЧека);		
			
		КонецЦикла;	
		
		ДанныеДляПечати = Новый Массив;
		ДанныеДляПечати.Добавить(ПозицииЧека);	
		
		ОповещениеПриЗавершении = Новый ОписаниеОповещения("ФУ_КомандаВыполнитьЗавершение", ЭтотОбъект);
		МенеджерОборудованияКлиент.НачатьПечатьТекстовыхДокументов(ОповещениеПриЗавершении, УникальныйИдентификатор, ДанныеДляПечати,ЭтаФорма.ПринтерЧековККМ);
		
	Иначе
		Сообщить("Не найден принтер чеков!");
	КонецЕсли;	

КонецПроцедуры


&НаКлиенте
Процедура ФУ_КомандаВыполнитьЗавершение(РезультатВыполнения, Параметры) Экспорт
	
	ОчиститьСообщения();
	
КонецПроцедуры

 

 

Как результат - я получаю вот такие "пречеки":

 

Рис.4. Здесь изображаются - обычная текстовая строка, строка "массив" и чередование текста и штрихкода в каждой строке.

 

Рис.5. Здесь - вывод штрихкода и qr-кода на пречеках.

 

На этом, пожалуй, все. Теперь перейдем к заключениям и выводам по данному практическом обзору:

 

Заключение и выводы по статье:

Данная статья дает базовое понимание по программному "опросу" устройства "Принтер чеков 1с" через БПО. Рассмотрен основной, часто необходимый функционал, - вывод строк, массивов, кодов и их форматирование на листе чековой ленты.

Функционал по фискальным операциям для данного типа устройств в последних БПО 3.* запрещен, хотя в старых - как в данном примере - БПО 2.1 - разрешен. Стоит ли рассматривать его в настоящее время - не знаю.....

Уверен, что данный материал будет полезен всем интересующимся, всем, кто работает с оборудованием, кто хочет получить понимание о "совместимости" устройств с программами 1с.

Если Вы используете подобные принтеры для печати неких расширенных отчетов на чековой ленте - этот функционал для Вас. Развитие темы - на Ваше усмотрение... Спасибо за прочтение и внимание. Вы так же можете ознакомиться с другими полезными обработками и статьями автора.

Отмечу, что абсолютно ВСЕ обработки автора имеют программную актуальность и практическую ценность - все они рабочие! Обновляются автором по мере практической необходимости.

 

Другие статьи и полезные практические обработки автора:

Автозапуск по расписанию внешней обработки - автозавершение пользовательских серверных сеансов

Пример запроса чеков по кассам от оператора Платформа.ОФД по API

Массовая загрузка контрагентов в базу по ИНН

Пример внешней печатной формы с предварительным выводом параметров

Рабочий пример применения шаблонов печатных форм WORD из БСП. Демо-обработка

Гибкие отборы через СКД на управляемых формах. Демо-обработка

 

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

Принтер чеков 1с Библиотека подключаемого оборудования базовый фуцкционал

См. также

Периферийные устройства Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 Россия Абонемент ($m)

Пример работы для разработчика с оборудованием принтер чеков в рамках новейшей библиотеки подключаемого оборудования.

10 стартмани

14.11.2024    554    1    aximo    0    

3

Периферийные устройства Системный администратор Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Простая в использовании обработка https://infostart.ru/1c/tools/1001819/ в целом решает поставленную задачу, но имеет явный недостаток - взаимодействует только с принтерами, подключенными к серверу. Доработанная версия позволяет работать как с принтерами на клиенте, так и на сервере

1 стартмани

30.08.2024    412    3    Sergey1CSpb    0    

4

Периферийные устройства Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Расширение для вывода информации для покупателя из РМК на второй монитор. Также реализован вывод картинок из каталога в левую часть экрана покупателя. Разработано для УТ 11.5, УНФ 3.0.6 и 3.0.9.

1 стартмани

12.08.2024    1160    23    Rastopchinss    15    

3

Периферийные устройства Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

02.08.2024    709    0    AlOkt    0    

5

Периферийные устройства Программист Пользователь Платформа 1С v8.3 1С:Розница 3.0 Абонемент ($m)

Пример работы с эмулятором дисплея покупателя через библиотеку БПО.

6 стартмани

10.07.2024    733    5    aximo    0    

3

Периферийные устройства Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Речь пойдет не о сканерах штрихкодов 2D/3D/RF/распознавании лиц и прочего, а о старом добром аппарате, позволяющем считать страницу и отправить ее образ в ПК через COM/USB порт. Рассмотрим, как можно подключить и использовать сканер в типовых 1С-конфигурациях. И что делать, если никак не найти команду настройки сканера.

1 стартмани

28.05.2024    1079    Sergey1CSpb    2    

7

Периферийные устройства Пользователь Платформа 1С v8.3 1С:Розница 2 Россия Абонемент ($m)

Расширение для 1С: Розница 2.3 версий 2.3.15.ХХХ и выше. Удобный способ изменения принтера по умолчанию во встроенной обработке печати ценников и этикеток. Только для операционной системы Windows.

1 стартмани

13.05.2024    1048    5    independ    0    

5

Периферийные устройства Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

15.04.2024    8381    madonov    60    

38
Оставьте свое сообщение