Подключение принтеров чеков для печати чеков? УТ11

Клиент захотел иметь возможность печати чеков на принтер чеков.

Вдохновившись статьей про подключение принтеров чеков в УТ, попробовал повторить.

Ничего в коде не менял, просто в элементе справочника «Настройки РМК» поменял:

  1. Выбрал нужное рабочее место в поле «Рабочее место»
  2. В табличной части Кассы выбрал кассу организации и подключаемое оборудование принтера чеков на этом рабочем месте.
  3. В табличной части «Кассы ККМ» выбрал кассу ККМ и подключаемое оборудование принтера чеков на этом рабочем месте.

Сама касса ККМ имеет тип «Фискальный регистратор».

После этого оборудование подключилось:

Но при пробитии чека или открытии смены возникала ошибка:

Я пробовал остановиться в модуле ОборудованиеЧекопечатающиеУстройства и в параметрах операции сбросить галочку «Автономная ККТ» или «Принтер чеков»:

Но тогда получаю ошибку:

При открытии смены произошла ошибка.
Смена не открыта на фискальном устройстве.
Дополнительное описание:
Ошибка вызова метода драйвера <НапечататьТекстовыйДокумент>.
Значение не является значением объектного типа (Количество)
{ОбщийМодуль.ПодключаемоеОборудованиеДрайверКлиент.Модуль(1851)}:Если ДанныеОперации.Свойство("ТестовыеЧеки") И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда
{ОбщийМодуль.ПодключаемоеОборудованиеДрайверКлиент.Модуль(1999)}:РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера,  ПараметрыПодключения, ДанныеОперации);
{ОбщийМодуль.ПодключаемоеОборудованиеДрайверКлиент.Модуль(25)}:РезультатВыполнения = Ждать ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
{ОбщийМодуль.ПодключаемоеОборудованиеДрайверКлиент.Модуль(1044)}:Результат = Ждать ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации);
{ОбщийМодуль.МенеджерОборудованияКлиент.Модуль(1942)}:ОбработчикДрайвера.НачатьВыполнениеКоманды(ОписаниеОповещения, ПодключенноеУстройство, Команда, ДанныеОперации);
{ОбщийМодуль.МенеджерОборудованияКлиент.Модуль(2098)}:ВыполнениеКомандыОбработчика(ПодключенноеУстройство, ПараметрыВыполнениеКоманды);
{ОбщийМодуль.ОборудованиеЧекопечатающиеУстройстваКлиент.Модуль(149)}:МенеджерОборудованияКлиент.НачатьВыполнениеКоманды(Оповещение, ИдентификаторКлиента, ИдентификаторУстройства,
{ОбщийМодуль.РозничныеПродажиКлиент.Модуль(133)}:ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьОткрытиеСменыНаФискальномУстройстве(
{ОбщийМодуль.РозничныеПродажиКлиент.Модуль(67)}:ВыполнитьОбработкуОповещения(ОповещениеЗавершенияОперации, Неопределено);
{ОбщийМодуль.РозничныеПродажиКлиент.Модуль(1034)}:ОткрытьКассовуюСмену(
{mngcore/MessageBox.clf(4)}:Close(-100);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

В общем подумал, что проще самому формировать текст чека, делать чек проведенным и отправлять на Win-принтер. Менее затратно. Правда, если это не Win-принтер, может имеет смысл и «побороться».

UPD: В итоге сделал формирование текста чека программно:


&НаСервере
Процедура пчккм_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	Привязка = Элементы.ФормаПробитьЧек;   
	
	ИмяКоманды = "пчккм_Предчек";
	Команда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
	Команда.Заголовок = "Предчек";
	Команда.Действие  = ИмяКоманды;                
	//Команда.Картинка = БиблиотекаКартинок.ИмяКартинки;
	Команда.Отображение = ОтображениеКнопки.КартинкаИТекст;
	
	КнопкаФормы = ЭтаФорма.Элементы.Вставить(ИмяКоманды, Тип("КнопкаФормы"),Привязка.Родитель, Привязка);
	КнопкаФормы.ИмяКоманды = ИмяКоманды;   
	
	
	
	Привязка = Элементы.ШапкаПраво;
	ИмяЭлемента = "пчккм_НапечатанПредчек";
	Элемент = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), Привязка);
	Элемент.Вид = ВидПоляФормы.ПолеФлажка;
	Элемент.ПутьКДанным = "Объект.пчккм_НапечатанПредчек";
	Элемент.ТолькоПросмотр = Не РольДоступна("АдминистраторСистемы");
	
	
КонецПроцедуры




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

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

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

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


&НаСервере
Функция пчккм_ПредчекНаСервере() Экспорт 
	
	Р = Новый Структура("ОК, Текст", ложь, "");

	Основание = Объект.ДокументОснование;
	Если ТипЗнч(Основание) <> ТИп("ДокументСсылка.ЗаказНаряд") Тогда
		Р.Текст = "Предчек возможен только на основании заказа-наряда";
		Возврат Р;		
	КонецЕсли;          
	
	СуммаВсего = 0;
	
	ТекстЧека = "";

	Для Каждого Строка ИЗ Основание.Товары Цикл
		ТекстЧека = ТекстЧека + Строка(Строка.Номенклатура)  +   " " + Строка(Строка.Цена) + " * " + Строка(Строка.Количество) + " " + Строка(Строка.ЕдиницаИзмерения) + " = " + Строка(Строка.СуммаВсего) + Символы.ПС;
		СуммаВсего = СуммаВсего + Строка.СуммаВсего;
	КонецЦикла;

	Для Каждого Строка ИЗ Основание.Автоработы Цикл
		ТекстЧека = ТекстЧека + Строка(Строка.Авторабота)  +   " " + Строка(Строка.Цена) + " * " + Строка(Строка.Количество) + " " + "шт." + " = " + Строка(Строка.СуммаВсего) + Символы.ПС;;
		СуммаВсего = СуммаВсего + Строка.СуммаВсего;
	КонецЦикла;                     
	
	ТекстЧека = ТекстЧека + "Сумма итого: " + Строка(СуммаВсего) + Символы.ПС;
	
	Р.Вставить("ТекстЧека", ТекстЧека);
	
	Сообщить(ТекстЧека);           
	
	Р.ОК = Истина;
	
	Возврат Р;
	
КонецФункции

Правда, PDF-принтер и PDF-24 принтеры не показывают текст чека (у них и при подключении оборудования тест чека не проходит), можно увидеть только на реально принтере чеков:

Среда: 11.5.21.125

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 2

  1. Марат:

    Добрый день? получилось побороть проблему?

    • нет, написал код, чтобы печатал не фискальные строки на принтер. Несложный получился.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *