Всем привет! Боянистый вопрос у меня.
Есть УТ 10.3 и ФР ШТРИХ-МИНИ-ФР-К - нефискализированный - используется просто для печати чеков. На нем надо не пробить, а просто напечатать чек.
Я нашел два варианта:
1. В процедуре модуля формы ЧекаККМ есть функция Функция ПровестиИРаспечататьЧек(), где есть подходящий кусок:
Если УстановленЕНВДОрганизации()
И КассаККМ.ФормироватьНефискальныеЧеки Тогда
ДокументЧекККМ = Новый ТекстовыйДокумент();
// и дальше пошло то, что нам надо
// ...
ОшибкаТО = ПолучитьСерверТО().ЗакрытьЧек(ФР, 0, 0);
Если я использую этот код, надо ли мне убрать последнюю строку с командой ЗакрытьЧек()?
Я боюсь, чтобы при таком раскладе сумма чека не вошла в X и Z отчеты.
Или без этой команды чек не вылезет?
2. А другой вариант у меня нашелся в одной из обработок.
Я так понимаю, суть кода такая же. Просто меня смущает, не повлияет ли команда ЗакрытьЧек на итоги продаж за день.
Процедура ПечатьНФЧ()
РучнойРежимПечати = Ложь;
Результат = Истина;
Ответ = "";
МассивФР = ПолучитьСерверТО().ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
СсылкаНаОбъект.КассаККМ);
ФР = Неопределено;
СписокФР = Новый СписокЗначений();
Вид = Неопределено;
Представление = Неопределено;
Для каждого ФР Из МассивФР Цикл
ПолучитьСерверТО().ПолучитьПредставлениеУстройства(ФР, Вид, Представление);
СписокФР.Добавить(ФР, Представление);
КонецЦикла;
КоличествоФР = СписокФР.Количество();
Если КоличествоФР = 0 Тогда
Ответ = "";
Отказ = Истина;
Результат = Истина;
Сообщить("Нет ФР");
Возврат;
ИначеЕсли КоличествоФР = 1 Тогда
ФР = СписокФР[0].Значение;
Иначе
ФР = СписокФР.ВыбратьЭлемент("Необходимо выбрать фискальный регистратор");
Если ФР = Неопределено Тогда
Ответ = "Операция отменена пользователем.";
Отказ = Истина;
Результат = Ложь;
Возврат;
Иначе
ФР = ФР.Значение;
КонецЕсли;
КонецЕсли;
// ФиоМенеджера = ОбщегоНазначения.ИнициалыФизЛицаФамилия(Менеджер.Ссылка);
ОшибкаТО = Перечисления.ТООшибкиОбщие.ПустаяСсылка();
// Открыть нефискальный чек
НомерЧекаККМ = 0;
НомерСменыККМ = 0;
ОшибкаТО = ПолучитьСерверТО().ОткрытьЧек(ФР, "",
СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат,
НомерЧекаККМ, НомерСменыККМ, Истина);
Сообщить(ОшибкаТО);
Если Не ЗначениеЗаполнено(ОшибкаТО) Тогда
Стр = "";
Для Каждого Позиция Из СсылкаНаОбъект.Товары Цикл
Стр =Стр + " " + Лев(Позиция.Номенклатура.Наименование,60) + Символы.ПС + Позиция.Количество + "х" + Позиция.Цена + Символы.ПС + Позиция.Сумма + Символы.ПС;
КонецЦикла;
//Если ЗначениеЗаполнено(СсылкаНаОбъект.Менеджер) тогда
// МассивСтрокЧека= Новый Массив;
// МассивСтрокЧека.Добавить("Менеджер: " + Символы.ПС + СокрЛП(СсылкаНаОбъект.Менеджер.Наименование)+ Символы.ПС + Стр);
// ОшибкаТО = ПолучитьСерверТО().ПечатьТекста(ФР, МассивСтрокЧека, 60);
//Иначе
// МассивСтрокЧека= Новый Массив;
// МассивСтрокЧека.Добавить("Менеджер: " + Символы.ПС + Лев(СокрЛП(СсылкаНаОбъект.Менеджер.Наименование),60)+ Символы.ПС + Стр);
// ОшибкаТО = ПолучитьСерверТО().ПечатьТекста(ФР, МассивСтрокЧека, 60);
//КонецЕсли;
//*********
ТаблицаПКО = Новый ТаблицаЗначений();
ТаблицаПКО.Колонки.Добавить("Наименование");
ТаблицаПКО.Колонки.Добавить("НомерСекции");
ТаблицаПКО.Колонки.Добавить("Цена");
ТаблицаПКО.Колонки.Добавить("Количество");
ТаблицаПКО.Колонки.Добавить("Скидка");
ТаблицаПКО.Колонки.Добавить("СтавкаНДС");
//ТаблицаПКО.ВыбратьСтроку();
СтрокаТаблицы = ТаблицаПКО.Добавить();
СтрокаТаблицы.Наименование ="Всего на сумму";
СтрокаТаблицы.НомерСекции = 1;
СтрокаТаблицы.Цена = СсылкаНаОбъект.СуммаДокумента;
СтрокаТаблицы.СтавкаНДС = 0;
СтрокаТаблицы.Количество = 1;
СтрокаТаблицы.Скидка = 0;
ПолучитьСерверТО().ПечатьСтрокиЧека(ФР, ТаблицаПКО.Получить(0));
// Закрыть чек
СуммаНал = СсылкаНаОбъект.СуммаДокумента;
ОшибкаТО = ПолучитьСерверТО().ЗакрытьЧек(ФР, СуммаНал, 0);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОшибкаТО) Тогда
Попытка
Сообщить("Чек распечатан");
Исключение
Ответ = "Не удалось записать документ с установленными параметрами пробитого чека.";
Отказ = Истина;
Результат = Ложь;
КонецПопытки;
Иначе
Ответ = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(ОшибкаТО);
Отказ = Истина;
Результат = Ложь;
КонецЕсли;
КонецПроцедуры
Собственно, когда вызывается метод "ЗакрытьЧек" происходит следующее: если ранее был открыт фискальный документ, то он закрывается с указанными в параметрах суммами оплаты - соответственно с записью в фискальную память. Если был открыт нефискальный чек, то производится просто протяжка и отрезка.
Внутри фискального чека можно выполнять регистрации позиций и печать нефискальных строк. Внутри нефискального чека могут печататься только нефискальные строки.
Правда, по шестому параметру "Истина" команды ОткрытьЧек() во втором примере я что-то сомневаюсь в его нефискальности.
Поэтому посоветую почитать приведенную ссылку и посмотреть в ней примеры кода.
(1) El_Loco, если вы хотите печатать от балды чеки, то просто сделай свою кнопку, которая заставит оборудование вывести его.
А вся мишура там, чтобы обратного пути не было.
(2) Xershi, ну не от балды чеки надо будет печатать. Клиенту надо типа "преЧек" печатать. А когда надо, пробивают как обычно.
У меня нет под рукой фискальника, чтоб проверить код.
Собственно, когда вызывается метод "ЗакрытьЧек" происходит следующее: если ранее был открыт фискальный документ, то он закрывается с указанными в параметрах суммами оплаты - соответственно с записью в фискальную память. Если был открыт нефискальный чек, то производится просто протяжка и отрезка.
Внутри фискального чека можно выполнять регистрации позиций и печать нефискальных строк. Внутри нефискального чека могут печататься только нефискальные строки.
Правда, по шестому параметру "Истина" команды ОткрытьЧек() во втором примере я что-то сомневаюсь в его нефискальности.
Поэтому посоветую почитать приведенную ссылку и посмотреть в ней примеры кода.
(5) Вы пишите "главное - открыть нефискальный чек"
Вообще, если требуется печатать какую-то дополнительную информацию, а отдельного принтера для печати не имеется, то можно использовать замечательную внешнюю обработку:
"Печать нефискального чека на ККМпоУмолчанию"
http://infostart.ru/public/264405/
Так же её код можно использовать в качестве примера для собственных решений.
Ещё посмотрите:
http://infostart.ru/public/303456/ "Рабочее место кассира для УТ 11 с возможностью печати чека на нефискальный windows принтер"
//Напечатать чек по бонусам
МассивСтрокСлипЧека=Новый Массив;
МассивСтрокСлипЧека.Добавить("Операция по бонусам Чек№"+НомерЧекаККМ);
МассивСтрокСлипЧека.Добавить("Тут доп инфа...");
Результат1 = ПолучитьСерверТО().ОткрытьЧек(ФР, "", ВидОперации =Перечисления.ВидыОперацийЧекККМ.Возврат, 0, НомерСменыККМ, Ложь);
Если НЕ ЗначениеЗаполнено(Результат1) Тогда
Результат1 = ПолучитьСерверТО().ПечатьТекста(ФР, МассивСтрокСлипЧека, 80);
Если НЕ ЗначениеЗаполнено(Результат1) Тогда
Результат1 = ПолучитьСерверТО().ЗакрытьЧек(ФР, 0, 0);
КонецЕсли;
КонецЕсли;
Показать
Теперь вот грею голову, как это сделать для Онлайн кассы?????