Пришлось подключать данный регистратор к точке с довольно интенсивным клиентопотоком. В стандартных обработках обнаружен ряд моментов, через которые регистратор мог отказать в печати чека, проигнорировать строку или просто зависнуть.
В создании данной обработки благодарен ребятам из поста 376254
Работает на платформе 1С не ниже 8.3.7
Конфигурации: Розница 1.0, Управление торговлей для Украины 2.0 (обычные формы)
Основной функционал:
-
- Удаление перед отправкой по http всех неподдерживаемых символов протоколом JSON
-
- Обязательная проверка результата успешной/неуспешной печати от РРО
-
- Возможность печати Z Отчет По Товарам
-
- Правильная печать чеков возврата
-
- Код товара в памяти РРО соответсвует коду товара в 1С (избегаем ошибку продажи одного товара а печати другого)
-
- Через структуру "СтруктураДопРеквизитов" в параметр "ЭтоПодакцизныйТовар" можем передавать признак акцизного товара и соответсвенно печатать акцизную ставку налога.
-
-Закомментирована функция "Вывод" в процедуре "ПечататьСтроку", существенно ускоряет процесс печати чека, выводит на экран только итоговую информацию о чеке без построчного вывода.
Особенности установки:
Для того, чтобы передать в обработку параметры Кода товара, признак акциза необходимо доработать обработку конфигурации "ТОСервер".
Процедура "ПечатьЧека". У меня имеет следующий вид:
Функция ПечатьЧека(Идентификатор, НомерЧека, НомерСмены,
ОписаниеЧека, СуммаНал, СуммаБезнал, ПризнакВозврата) Экспорт
Обработка = Неопределено;
Объект = Неопределено;
Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);
/// +
СтруктураДопРеквизитов = Новый Структура("ЭтоПодакцизныйТовар, Код");
/// -
// Проверим использование кода
фИспользоватьКод = Объект.Параметры.Свойство("ИспользоватьКод");
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.ОткрытьЧек(Объект, "", ПризнакВозврата, НомерЧека, НомерСмены, Истина);
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Позиция = Неопределено;
Для Каждого Позиция Из ОписаниеЧека Цикл
ЗначениеСкидки = Позиция.Количество * Позиция.Цена * Позиция.Скидка * 0.01;
СуммаСоСкидкой1С = Окр(Позиция.Количество * Позиция.Цена - ЗначениеСкидки, 2);
СуммаСоСкидкойФР = Окр(Позиция.Количество * Позиция.Цена - Окр(ЗначениеСкидки, 2), 2);
Объект.Параметры.Вставить("Весовой", Позиция.Весовой);
/// +
Объект.Параметры.Вставить("Код", Позиция.Код);
СтруктураДопРеквизитов.ЭтоПодакцизныйТовар = Позиция.ЭтоПодакцизныйТовар;
/// -
СтруктураДопРеквизитов.СтавкаНДССтрокой = Позиция.СтавкаНДССтрокой;
СтруктураДопРеквизитов.ЭтоПодакцизныйТовар = Позиция.ЭтоПодакцизныйТовар;
СтруктураДопРеквизитов.Код = Позиция.Код;
Если СуммаСоСкидкой1С = СуммаСоСкидкойФР Тогда
текКоличество = Позиция.Количество;
текЦена = Позиция.Цена;
текСкидка = Позиция.Скидка;
Иначе
текКоличество = 1;
текЦена = СуммаСоСкидкой1С;
текСкидка = 0;
КонецЕсли;
Если фИспользоватьКод Тогда
Результат = Обработка.ПечататьСтроку(Объект,
Позиция.Наименование,
текКоличество,
текЦена,
текСкидка,
Позиция.НомерСекции,
Позиция.СтавкаНДС,
Позиция.Код);
Иначе
Результат = Обработка.ПечататьСтроку(Объект,
Позиция.Наименование,
Позиция.Количество,
Позиция.Цена,
Позиция.Скидка,
Позиция.НомерСекции,
Позиция.СтавкаНДС);
КонецЕсли;
Если ЗначениеЗаполнено(Результат) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал);
КонецЕсли;
КонецЕсли;
мОписаниеОшибки = Объект.ОписаниеОшибки;
Иначе
мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ФР");
КонецЕсли;
Возврат Результат;
КонецФункции // ПечатьЧека()
Передаете в обработку или в виде Объект.Параметры, или СтруктураДопРеквизитов код товара. Код товара должен содержать только цифры, без буквенных значений. Данный код будет записываться в качестве кода товара в память РРО.
С помощью параметра ЭтоПодакцизныйТовар, можно управлять формированием отдельной налоговой ставки для подакцизных товаров. Для этого сделайте X-отчет на РРО, проверьте на какой ставке Центр сервисного обслуживания установил налоговые ставки для подакцизных товаров и пропишите их в процедуре "ПечататьСтроку" самой обработки.
// Расчет акциза
Если СтруктураДопРеквизитов <> Неопределено Тогда
Попытка
Если СтруктураДопРеквизитов.ЭтоПодакцизныйТовар = Истина Тогда
НалоговаяГруппа = 2; // ставка Б
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;