Фискальный регистратор

Печать (Ctrl+P)

Библиотека подключаемого оборудования, Версия 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]);
  ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Previous Article
Next Article

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.