Печать произвольного QR кода в текстовом документе ККМ

22.07.24

Разработка - БСП (Библиотека стандартных подсистем)

Описание возможности печати произвольного QR-кода в текстовом (не фискальном) документе ККМ с помощью типовых функций БПО.

Библиотека стандартных подсистем версии 3.1.9.302
Библиотека подключаемого оборудования версии 3.2.2.32

Конфигурация Розница, редакция 3.0 (3.0.7.122)

 

Возникла необходимость печати произвольного QR-кода в текстовом документа ККМ. На форуме удалось найти следующее решение, но можно добиться необходимого результат другим путем.

В текстовую строку для печати необходимо добавить строчку:

"|ШтрихКод|QR|" + данные, которые необходимо закодировать в QR

и, подготовив данные, вызвать типовую процедуру ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПечатьТекста.

Пример использования:
 

&НаКлиенте
Процедура Печать(Команда)
		
	ОповещениеПриЗавершении = Новый ОписаниеОповещения("ЗавершитьПечатьКопииЧека", ЭтотОбъект);
	
	Если ЗначениеЗаполнено(ФискальныйРегистратор) Тогда 
		
		ПодключенноеУстройство	= МенеджерОборудованияКлиент.ПолучитьПодключенноеУстройство(ФискальныйРегистратор);
		ПараметрыПодключения	= МенеджерОборудованияКлиентСервер.ПараметрыПодключения(ПодключенноеУстройство); 
		
		ШиринаСтроки = ?(ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0, ПараметрыПодключения.ШиринаСтроки, 32); 
		
		ПараметрыОперации = ПодготовитьДанные();
		
		ТекстЧека = ПодготовитьТекстЧека(ШиринаСтроки, ПараметрыОперации);
	
		ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатиТекста(ТекстЧека);
		
		ТекстЧека = ТекстЧека + Символы.ПС + "|ШтрихКод|QR|" + "Сюда мы поместим 
		|нужную информацию для чека ООО Рога и Копыта" + Символы.ПС;
		
		ПараметрыОперацииТекст = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатиТекста(ТекстЧека);
		
		ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПечатьТекста(ОповещениеПриЗавершении,
			ЭтаФорма, ФискальныйРегистратор, ПараметрыОперацииТекст);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПодготовитьДанные()
	
	ОбщиеПараметры = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека();
	
	ОбщиеПараметры.ТорговыйОбъект		= "ООО Рога и Копыт"; 	
	ОбщиеПараметры.Организация 		= "ООО Рога и Копыт";
	ОбщиеПараметры.ОрганизацияНазвание 	= "ООО Рога и Копыт";
	ОбщиеПараметры.ОрганизацияИНН 		= "3556662747";
	ОбщиеПараметры.ОрганизацияКПП 		= "11111111";
	ОбщиеПараметры.НомерКассы     		= "00001";
	ОбщиеПараметры.НомерСмены     		= "1";
	
	ТекстСтрокиПозицииЧека	= СтрШаблон(НСтр("ru = '%1%2%3%4 x %5 = %6'"), "Мотор", Символы.ПС, Символы.ПС, 2, 3, 6);	
	СтрокаПозицииЧека	= ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыТекстовойСтрокиЧека(ТекстСтрокиПозицииЧека);	
	
	ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаПозицииЧека); 
	
	Возврат ОбщиеПараметры;
	
КонецФункции

&НаСервереБезКонтекста
Функция ПодготовитьТекстЧека(ШиринаСтроки, ПараметрыОперации);
	
	Шаблон		= ШаблоныФискальныхДокументов.ШаблонКассовыйЧек(ШиринаСтроки, ПараметрыОперации);
	ТекстЧека	= ШаблоныФискальныхДокументов.ВывестиКакТекст(Шаблон);
	
	Возврат ТекстЧека;
	
КонецФункции

&НаКлиенте
Процедура ЗавершитьПечатьКопииЧека(РезультатВыполнения, ПараметрДействия) Экспорт
	
	Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(РезультатВыполнения, "Результат") И НЕ РезультатВыполнения.Результат Тогда
		
		ТекстСообщения = СтрШаблон(НСтр("ru = 'Произошла ошибка при попытке повторной печати фискального чека.
			|Причина: %1'"), РезультатВыполнения.ОписаниеОшибки);
		ПоказатьПредупреждение(, ТекстСообщения);
		
	КонецЕсли;
	
КонецПроцедуры

Обновление: Спасибо пользователю за замечание. Дополнил пример для большего понимания решаемой задачи.

См. также

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    2908    John_d    10    

47

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    4325    PROSTO-1C    12    

49

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример шаблона для многопоточного выполнения фонового задания на основе БСП. Шаблоны сделаны для процедуры и функции.

2 стартмани

03.05.2024    1571    24    Hitcher    3    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Torin 803 22.07.24 10:14 Сейчас в теме
(0) "типовых функций БСП" - или БПО ?
KirillZ44; RocKeR_13; +2 Ответить
2. KirillZ44 12 22.07.24 10:36 Сейчас в теме
(1) Вы правы. Считал, что все это часть БСП. Спасибо за ликбез и прошу прощения за неточность, сейчас поправлю.
3. RocKeR_13 1348 22.07.24 13:42 Сейчас в теме
(2) Там же есть процедура непосредственно для печати QR-кодов:

	
	ОписаниеОповещениеПриЗавершении  = Новый ОписаниеОповещения("ПечатьКода_Завершение", ЭтотОбъект); // обработка результата печати
	
	ПараметрыОперации = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПечатиQRКодаНаФискальномУстройстве();
		
	ПараметрыОперации.QRКод.ЗначениеКода  = "Эта строка будет зашифрована в QR-коде"; // текстовое значение QR-кода
	ПараметрыОперации.QRКод.ТекстПользователя = НСтр("ru='Отксканируйте QR-код и будет вам счастье!'");

	ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьПечатьQRКодаНаФискальномУстройстве(
		ОписаниеОповещениеПриЗавершении,
		Новый УникальныйИдентификатор, // или идентификатор формы, откуда печатаете
		ККТ, // СправочникСсылка.ПодключаемоеОборудование
		ПараметрыОперации);
Показать
KirillZ44; +1 Ответить
4. KirillZ44 12 22.07.24 13:54 Сейчас в теме
(3) Спасибо

Данный функционал видел, но тогда сделал вывод, что мне он не подходит. Требовалось напечатать текстовый документ по аналогии с фискальным и в нижней его части разместить QR с определенной информацией.

Возможно, если переопределить значение свойства QRКод.ТекстПользователя, то это тоже сработает.
5. RocKeR_13 1348 22.07.24 13:57 Сейчас в теме
(4) Конкретно для вашего примера как раз подойдет: в ТекстПользователя пишите "Отсканируйте QR-код" и будет в точности как у вас на картинке)
KirillZ44; +1 Ответить
6. KirillZ44 12 22.07.24 14:05 Сейчас в теме
(5) Для примера из статьи да, подходит. Но изначально решаемая задача была другой. Проблема в оформлении мною статьи. Возьму на заметку и в будущем буду оформлять лучше, а так же постараюсь исправить на более наглядный пример.
RocKeR_13; +1 Ответить
Оставьте свое сообщение