Печать чека на ФР (без пробития)

1. AlexeyPapanov 460 17.06.16 21:49 Сейчас в теме
Всем привет! Боянистый вопрос у меня.
Есть УТ 10.3 и ФР ШТРИХ-МИНИ-ФР-К - нефискализированный - используется просто для печати чеков. На нем надо не пробить, а просто напечатать чек.
Я нашел два варианта:
1. В процедуре модуля формы ЧекаККМ есть функция Функция ПровестиИРаспечататьЧек(), где есть подходящий кусок:
Если УстановленЕНВДОрганизации()
	   И КассаККМ.ФормироватьНефискальныеЧеки Тогда
		ДокументЧекККМ  = Новый ТекстовыйДокумент();
		// и дальше пошло то, что нам надо
		// ...
		ОшибкаТО = ПолучитьСерверТО().ЗакрытьЧек(ФР, 0, 0);


Если я использую этот код, надо ли мне убрать последнюю строку с командой ЗакрытьЧек()?
Я боюсь, чтобы при таком раскладе сумма чека не вошла в X и Z отчеты.
Или без этой команды чек не вылезет?

2. А другой вариант у меня нашелся в одной из обработок.
Я так понимаю, суть кода такая же. Просто меня смущает, не повлияет ли команда ЗакрытьЧек на итоги продаж за день.

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

		ПолучитьСерверТО().ПечатьСтрокиЧека(ФР, ТаблицаПКО.Получить(0));
		
		// Закрыть чек
		СуммаНал = СсылкаНаОбъект.СуммаДокумента;
		ОшибкаТО = ПолучитьСерверТО().ЗакрытьЧек(ФР, СуммаНал, 0);
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
		Попытка
			Сообщить("Чек распечатан");	
		Исключение
			Ответ     = "Не удалось записать документ с установленными параметрами пробитого чека.";
			Отказ     = Истина;
			Результат = Ложь;
		КонецПопытки;
	Иначе
		Ответ     = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
		Отказ     = Истина;
		Результат = Ложь;
	КонецЕсли;
КонецПроцедуры
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. Cooler 22 18.06.16 00:43 Сейчас в теме
(1) El_Loco,
Я боюсь, чтобы при таком раскладе сумма чека не вошла в X и Z отчеты.
На форуме Штриха пишут следующее:
Собственно, когда вызывается метод "ЗакрытьЧек" происходит следующее: если ранее был открыт фискальный документ, то он закрывается с указанными в параметрах суммами оплаты - соответственно с записью в фискальную память. Если был открыт нефискальный чек, то производится просто протяжка и отрезка.
Внутри фискального чека можно выполнять регистрации позиций и печать нефискальных строк. Внутри нефискального чека могут печататься только нефискальные строки.

Правда, по шестому параметру "Истина" команды ОткрытьЧек() во втором примере я что-то сомневаюсь в его нефискальности.

Поэтому посоветую почитать приведенную ссылку и посмотреть в ней примеры кода.
Или без этой команды чек не вылезет?
Подозреваю, что если и вылезет, то отрезан не будет. Хотя и с этим вроде как можно побороться: http://forum.shtrih-m.ru/viewtopic.php?f=1&t=31568
Просто меня смущает, не повлияет ли команда ЗакрытьЧек на итоги продаж за день.
В конце концов, раз принтер нефискализирован, то святое дело взять да и попробовать разные варианты, предупредив собственника.
AlexeyPapanov; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1486 17.06.16 23:00 Сейчас в теме
(1) El_Loco, если вы хотите печатать от балды чеки, то просто сделай свою кнопку, которая заставит оборудование вывести его.
А вся мишура там, чтобы обратного пути не было.
4. AlexeyPapanov 460 18.06.16 00:50 Сейчас в теме
(2) Xershi, ну не от балды чеки надо будет печатать. Клиенту надо типа "преЧек" печатать. А когда надо, пробивают как обычно.
У меня нет под рукой фискальника, чтоб проверить код.
3. Cooler 22 18.06.16 00:43 Сейчас в теме
(1) El_Loco,
Я боюсь, чтобы при таком раскладе сумма чека не вошла в X и Z отчеты.
На форуме Штриха пишут следующее:
Собственно, когда вызывается метод "ЗакрытьЧек" происходит следующее: если ранее был открыт фискальный документ, то он закрывается с указанными в параметрах суммами оплаты - соответственно с записью в фискальную память. Если был открыт нефискальный чек, то производится просто протяжка и отрезка.
Внутри фискального чека можно выполнять регистрации позиций и печать нефискальных строк. Внутри нефискального чека могут печататься только нефискальные строки.

Правда, по шестому параметру "Истина" команды ОткрытьЧек() во втором примере я что-то сомневаюсь в его нефискальности.

Поэтому посоветую почитать приведенную ссылку и посмотреть в ней примеры кода.
Или без этой команды чек не вылезет?
Подозреваю, что если и вылезет, то отрезан не будет. Хотя и с этим вроде как можно побороться: http://forum.shtrih-m.ru/viewtopic.php?f=1&t=31568
Просто меня смущает, не повлияет ли команда ЗакрытьЧек на итоги продаж за день.
В конце концов, раз принтер нефискализирован, то святое дело взять да и попробовать разные варианты, предупредив собственника.
AlexeyPapanov; +1 Ответить
5. AlexeyPapanov 460 18.06.16 01:22 Сейчас в теме
(3) Cooler, спасибо, помогли. Если верить участникам ветки форума Штрих-М, то можно не бояться закрывать чек, главное - открыть нефискальный чек.

Меня еще озадачило - в обработке печати нефискального чека из формы документа есть такой код:
ОшибкаТО = ПолучитьСерверТО().ПечатьТекста(ФР, МассивСтрокЧека, КассаККМ.ШиринаЛенты);


а в коде модуля штриховской обработки ShtrihMFiscalPrinters_v2.epf нет такого метода ПечатьТекста(), но естьНапечататьСтроки().

// Функция осуществляет построчную печать нефискального чека из переданного массива строк.
// (API v2.0)
//
// Параметры:
//  Объект                         - <*>
//                                 - Объект драйвера ФР.
//
//  МассивСтрок                    - <Массив>
//                                 - Массив строк для печати.
//
//  Ширина                         - <Число>
//                                 - Ширина чековой ленты.
//
// Возвращаемое значение:
//  <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция НапечататьСтроки(Объект, МассивСтрок, Ширина) Экспорт
Показать



Выходит строки не напечатаются? Надо тогда исправить эту строку на
ОшибкаТО = ПолучитьСерверТО().НапечататьСтроки(ФР, МассивСтрокЧека, КассаККМ.ШиринаЛенты);


Короче, уже хотя бы что-то есть. А то знаете как-то не айс на ходу импровизировать ;)
6. CaptainMorgan 18.06.16 09:11 Сейчас в теме
(5) Вы пишите "главное - открыть нефискальный чек"
Вообще, если требуется печатать какую-то дополнительную информацию, а отдельного принтера для печати не имеется, то можно использовать замечательную внешнюю обработку:
"Печать нефискального чека на ККМпоУмолчанию"
http://infostart.ru/public/264405/

Так же её код можно использовать в качестве примера для собственных решений.

Ещё посмотрите:
http://infostart.ru/public/303456/
"Рабочее место кассира для УТ 11 с возможностью печати чека на нефискальный windows принтер"
AlexeyPapanov; +1 Ответить
7. AlexeyPapanov 460 19.06.16 09:34 Сейчас в теме
(6) CaptainMorgan, спасибо. Может пригодится. Сейчас, правда, в первую очередь интересует для УТ 10.3 сделать это.
8. jo0506 19 31.07.18 07:08 Сейчас в теме
У меня было так:
//Напечатать чек по бонусам

			МассивСтрокСлипЧека=Новый Массив;
			МассивСтрокСлипЧека.Добавить("Операция по бонусам Чек№"+НомерЧекаККМ);
			МассивСтрокСлипЧека.Добавить("Тут доп инфа...");
			
			Результат1 = ПолучитьСерверТО().ОткрытьЧек(ФР, "", ВидОперации =Перечисления.ВидыОперацийЧекККМ.Возврат, 0, НомерСменыККМ, Ложь);
			Если НЕ ЗначениеЗаполнено(Результат1) Тогда 
				Результат1 = ПолучитьСерверТО().ПечатьТекста(ФР, МассивСтрокСлипЧека, 80);
				Если НЕ ЗначениеЗаполнено(Результат1) Тогда 
					Результат1 = ПолучитьСерверТО().ЗакрытьЧек(ФР, 0, 0); 
				КонецЕсли; 
			КонецЕсли;			

Показать


Теперь вот грею голову, как это сделать для Онлайн кассы?????
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот