Думаю многим приходилось работать с подарочными картами и реализовывать их учет в своей конфигурации. В большинстве найденных мной реализаций подарочные сертификаты учитывались как оплата за товар и пробивались на чеке соответсвующим образом. В нашем случае ПС рассмаотривался как единоразовая скикда на товар при продаже данного товара. Задача состояла в том, чтоб вывести общую скидку на товар, равную велечине подарочного сертификата. При этом скидка должна была вычитываться из итогов чека.
Проанализировал тот функционал, что есть в УТ 10.3 стало понятно, что имеющимися средставми без доработок вывести скидку на чек невозможно. После изучения интерфейса драйвера для 1с от штрих-и и протокола ФР было принято решение использовать для вывода скидки команду в 16 записи.
Для вывода скидки были внесены изменения в функцию ПечатьЧека(Идентификатор, Пароль, НомерЧека, НомерСмены, ОписаниеЧека, СуммаНал, СуммаБезнал, ПризнакВозврата), находящуюся в общем модуле обработки ТОСервер.
В данной функции перед коммандой ЗакрытьЧек(…) было добавлено выполнение команды к фискальному регистратору:
КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
DeviceControlHEX возвращает истина в случае успешного выполнения, в переменную РезультатКоманды возвращается ответ от ФР в виде 16 строки.
Теперь нам нужно сгенерировать команду для назначения скидки. В соответсвии с документацией длина команды составляет 54 байта. Приведу подробное описание команды:
КомандаКВыполнению = "86" //код команды на назначение скидки
+ " 00 00 00 00" // пароль кассира (число) задом наперед (4 байта)
+ " 00 00 00 00 00" //здесь должна быть сумма в мде в 16 записи задом наперед (5 байт)
+ " 00" //использование налога 1 (0 не использовать, 1-4 № налоговой группы)
+ " 00" //использование налога 2 (0 не использовать, 1-4 № налоговой группы)
+ " 00" //использование налога 3 (0 не использовать, 1-4 № налоговой группы)
+ " 00" //использование налога 4 (0 не использовать, 1-4 № налоговой группы)
+ " 00 00 00 00 00 00 00 00 00 00" //текст ( )
+ " 00 00 00 00 00 00 00 00 00 00" //текст ( )
+ " 00 00 00 00 00 00 00 00 00 00" //текст ( )
+ " 00 00 00 00 00 00 00 00 00 00"; //текст ( )
МДЕ здесь означает минимальная денежная еденица, т.е. сумму надо передавать в копейках. Пример строки для суммы скидки в 370 рублей: «88 90 00 00 00». Пример пароля касиира 30: «1E 00 00 00». В последние четыре строки нужно посимвольно ввести выводимый текст, где вместо 00 нужно подставить корректный код символа. Код можно посмотреть в обычной таблице символов windows, выбрав в данной таблице для просмотра system.
Данную команду можно выполнить многократно, при каждом выполнении в чек будет добавляться новая скидка.
P.S. Штрих-М выпустило обновление драйвера, в котором вывод скидки теперь можно сделать через печать нефискальной строки, пример команды:
Объект.Драйвер.НапечататьНефискСтроку(Объект.ИДУстройства, "&discount;100;0;0;0;0;Скидка 100 руб;");
Формат строки для вывода скидки должен быть следующим: «&discount;Сумма;Налог1;Налог2;Налог3;Налог4;Текст;».
Версия драйвера, с которой работает данная команда: 4.10_312
Ссылка на скачку: https://cloud.mail.ru/public/916fda3cda3a/DrvFR_4.10_312.exe