Фискальный регистратор
Библиотека подключаемого оборудования, Версия 1.0
Сканер штрихкода
Считыватель магнитных карт
Терминал сбора данных
Дисплей покупателя
Фискальный регистратор
Эквайринговый терминал
Электронные весы
Весы с печатью этикеток
ККМ офлайн
Фискальный регистратор (ФР) – это устройство для регистрации торговых операций и печати чеков. Данные для печати чеков и записи в фискальную память программно передаются в устройство. Кроме того, в фискальной памяти фискального регистратора фиксируются операции Внесения/Выемки денежный средств и выводится на печать соответствующие чеки.
Отчет с гашением формируется при закрытии кассовой смены. Отчет без гашения распечатывается по команде кассира и не влечет изменения состояния фискальной памяти регистратора. Возможность Печати произвольного текста используется при печати дополнительных отчетов или слип-чека при проведении оплат по платежной карте (см. раздел Эквайринговый терминал).
При всех операциях следует подключить оборудование перед вызовом соответствующей команды и отключить после завершения действия. Команды фискального регистратора и методики работы с ними приведены ниже:
Печать чека
Печать чека при помощи ФР производится в несколько этапов: подключение, заполнение входных параметров, передача команды, отключение.
Подключение ФР
Для подключения ФР необходимо вызвать соответствующую функцию подсистемы БПО и передать ей уникальный идентификатор экземпляра формы, идентификатор устройства и пустое значение переменной ОписаниеОшибки. Функция возвращает значение “Истина”, если подключить оборудование удалось. В противном случае, в параметре ОписаниеОшибки будет передано текстовое описание ошибки.
Результат = МенеджерОборудованияКлиент.ПодключитьОборудованиеПоИдентификатору(УникальныйИдентификатор, ИдентификаторУстройстваФР, ОписаниеОшибки);
Подготовка входных данных
Если подключение успешно выполнено, то можно приступать к формированию входных параметров. Для печати чека устройству необходимо передать массив, содержащий три таблицы: таблица товаров, таблица оплат и таблица общих параметров. Если необходимо оформить чек на продажу, то в параметре “Тип чека” указывается значение “0”, а если возврат – “1”. Заполнение входных параметров производится следующим образом:
ВходныеПараметры = Новый Массив; ВыходныеПараметры = Неопределено; // ПОДГОТОВКА ТАБЛИЦЫ ТОВАРОВ ТаблицаТоваров = Новый Массив(); НомерСекции = 1; // Добавляем все строки табличной части документа-чека Для Каждого СтрокаТЧ Из Объект.Товары Цикл СтрокаТаблицыТоваров = Новый СписокЗначений(); СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.Наименование); // 1 - Наименование СтрокаТаблицыТоваров.Добавить(""); // 2 - Штрихкод СтрокаТаблицыТоваров.Добавить(""); // 3 - Артикул СтрокаТаблицыТоваров.Добавить(НомерСекции); // 4 - Номер отдела СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.Цена); // 5 - Цена за позицию без скидки СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.КоличествоУпаковок); // 6 - Количество СтрокаТаблицыТоваров.Добавить(""); // 7 - Наименование скидки/наценки СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.СуммаСкидки); // 8 - Сумма скидки/наценки СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.ПроцентСкидки); // 9 - Процент скидки/наценки СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.Сумма); // 10 - Сумма позиции со скидкой СтрокаТаблицыТоваров.Добавить(0); // 11 - Номер налога (1) СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.СуммаНДС); // 12 - Сумма налога (1) СтрокаТаблицыТоваров.Добавить(СтрокаТЧ.СтавкаНДС * 100); // 13 - Процент налога (1) СтрокаТаблицыТоваров.Добавить(0); // 14 - Номер налога (2) СтрокаТаблицыТоваров.Добавить(0); // 15 - Сумма налога (2) СтрокаТаблицыТоваров.Добавить(0); // 16 - Процент налога (2) СтрокаТаблицыТоваров.Добавить(""); // 17 - Наименование секции форматирования товарной строки ТаблицаТоваров.Добавить(СтрокаТаблицыТоваров); КонецЦикла; // ПОДГОТОВКА ТАБЛИЦЫ ОПЛАТ ТаблицаОплат = Новый Массив(); // Наличные СтрокаОплаты = Новый СписокЗначений(); СтрокаОплаты.Добавить(0); СтрокаОплаты.Добавить(Объект.НалОплаты[0].Сумма); СтрокаОплаты.Добавить("Наличная оплата"); СтрокаОплаты.Добавить(""); ТаблицаОплат.Добавить(СтрокаОплаты); // Безналичные СтрокаОплаты = Новый СписокЗначений(); СтрокаОплаты.Добавить(1); СтрокаОплаты.Добавить(Объект.БезНалОплаты[0].Сумма); СтрокаОплаты.Добавить("Безналичная оплата"); СтрокаОплаты.Добавить(""); ТаблицаОплат.Добавить(СтрокаОплаты); // ПОДГОТОВКА ТАБЛИЦЫ ОБЩИХ ТОВАРОВ ТипЧека = ?(Объект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийЧекККМ.Возврат"),1,0); ОбщиеПараметры = Новый Массив(); ОбщиеПараметры.Добавить(ТипЧека); // 1 - Тип чека (0-продажа, 1-возврат) ОбщиеПараметры.Добавить(Истина); // 2 - Признак фискального чека ОбщиеПараметры.Добавить(Неопределено); // 3 - Печать на подкладном документе ОбщиеПараметры.Добавить(Объект.СуммаДокумента); // 4 - Сумма по чеку без скидок/наценок ОбщиеПараметры.Добавить(Объект.СуммаДокумента); // 5 - Сумма по чеку с учетом всех скидок/наценок ОбщиеПараметры.Добавить(""); // 6 - Номер дисконтной карты ОбщиеПараметры.Добавить(""); // 7 - Текст шапки ОбщиеПараметры.Добавить(""); // 8 - Текст подвала ОбщиеПараметры.Добавить(0); // 9 - Номер смены (для копии чека) ОбщиеПараметры.Добавить(0); // 10 - Номер чека (для копии чека) ОбщиеПараметры.Добавить(0); // 11 - Номер документа (для копии чека) ОбщиеПараметры.Добавить(0); // 12 - Дата документа (для копии чека) ОбщиеПараметры.Добавить(""); // 13 - Имя кассира (для копии чека) ОбщиеПараметры.Добавить(""); // 14 - Пароль кассира ОбщиеПараметры.Добавить(0); // 15 - Номер шаблона ОбщиеПараметры.Добавить(""); // 16 - Наименование секции форматирования шапки ОбщиеПараметры.Добавить(""); // 17 - Наименование секции форматирования подвала ВходныеПараметры.Добавить(ТаблицаТоваров); ВходныеПараметры.Добавить(ТаблицаОплат); ВходныеПараметры.Добавить(ОбщиеПараметры);
Команда «Печать чека»
Когда готовы входные параметры можно передавать устройству команду на печать чека. По завершении исполнения, функция вернёт на выходе значение “Истина”, если печать завершилась успешно и заполнит переменную ВыходныеПараметры, которая на вход передавалась пустой (значение “Неопределено”). Программисту необходимо интерпретировать выходные данные в зависимости от того, удалась печать чека или нет:
РезультатФР = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР, "PrintReceipt", ВходныеПараметры, ВыходныеПараметры); Если РезультатФР Тогда // Запишем полученное значение номера чека в документ Объект.НомерСменыККМ = ВыходныеПараметры[0]; // Номер смены в кассе ККМ Объект.НомерЧекаККМ = ВыходныеПараметры[1]; // Номер чека в кассе ККМ // Итоговое действие. Например, проведение документа чека.... Иначе ТекстСообщения = НСтр("ru = 'При печати чека произошла ошибка. |Чек не напечатан на фискальном регистраторе. |Дополнительное описание: |%ДополнительноеОписание%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", ВыходныеПараметры[1]); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли;
Отключение ФР
Независимо от того, удалась печать или нет, необходимо отключить устройство, передавая на входе функции те же параметры, что и при подключении:
МенеджерОборудованияКлиент.ОтключитьОборудованиеПоИдентификатору(УникальныйИдентификатор, ИдентификаторУстройстваФР);
Отчёт с гашением
Данный отчёт формируется, как правило, при закрытии кассовой смены. Устройство подключается, ему передаётся команда PrintZReport, затем оно отключается. Подключение и отключение устройства производится так же, как и при печати чека. Команда для печати отчёта передаётся, а результат обрабатывается следующим образом:
ВходныеПараметры = Неопределено; ВыходныеПараметры = Неопределено; РезультатФР = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР, "PrintZReport", ВходныеПараметры, ВыходныеПараметры); Если Не РезультатФР Тогда ТекстСообщения = НСтр("ru = 'При снятии отчета на фискальном регистраторе произошла ошибка. |""%ОписаниеОшибки%"" |Отчет на фискальном регистраторе не сформирован.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%", ВыходныеПараметры[1]); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли;
Отчёт без гашения
Отчет без гашения используется кассиром для получения итоговых показателей счетчиков фискального регистратора перед закрытием смены. Код, использующий функцию, аналогичен коду формирования отчета с гашением, за исключением наименования самого метода: вместо PrintZReport необходимо передавать PrintXReport.
Печать чека внесения/выемки денежных средств
Факт внесения/выемки денежный средств фиксируется в фискальной памяти ФР и выводится на печать соответствующий чек. Операции внесения и выемки выполняются по одной и той же команде ФР. Отличаются они только знаком суммы: если сумма положительная, то это внесение, а если отрицательная – выемка. Непосредственно перед печатью необходимо подключить оборудование, затем передать команду Encash и сумму внесения/выемки. В заключение необходимо отключить устройство. Подключение и отключение устройства уже описывалось выше. Передача параметров, вызов команды и обработка её результатов для внесении/выемки денежных средств приведено ниже:
ВходныеПараметры = Новый Массив(); ВыходныеПараметры = Неопределено; ВходныеПараметры.Добавить(1); ВходныеПараметры.Добавить(Сумма); // Сумма внесения/выемки // Печатаем чек. РезультатФР = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР, "Encash", ВходныеПараметры, ВыходныеПараметры); Если РезультатФР Тогда // Итоговое действие. Например, создание документа движения денежных средств... Иначе ТекстСообщения = НСтр("ru = 'При печати чека произошла ошибка. |Чек не напечатан на фискальном регистраторе. |Дополнительное описание: |%ДополнительноеОписание%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", ВыходныеПараметры[1]); КонецЕсли;
Печать текста
У фискального регистратора есть возможность печатать произвольный текст. В процедуре печати необходимо подключить устройство, вызвать метод печати и отключить устройство. Подключение и отключение устройства производится так же, как и при печати чека. Передача команды для печати выполняется следующим образом:
ВходныеПараметры = Новый Массив(); ВходныеПараметры.Добавить(Текст); // Произвольный текст для печати в чеке ВыходныеПараметры = Неопределено; РезультатФР = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР, "PrintText", ВходныеПараметры, ВыходныеПараметры); Если Не РезультатФР Тогда ТекстСообщения = НСтр("ru = 'При печати слип-чека возникла ошибка: |""%ОписаниеОшибки%"".'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "% ОписаниеОшибки %", ВыходныеПараметры[1]); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли;