При внедрении контрольно-кассовой техники (ККТ) нового образца по требованиям 54-ФЗ программисты и системные администраторы сталкиваются с комплексом задач: от организационного момента перехода с обычного фискального регистратора на онлайн-кассу до специфических программных сбоев при передаче налоговых ставок, контактов клиентов и реквизитов чека. Разберем ключевые вопросы и технические решения по шагам.
Рассмотрим ситуацию: на рабочем месте кассира подключен старый фискальный регистратор (ФР), и требуется переключить продажи на новую онлайн-ККТ. Ждать окончания отчетного периода или следующего дня не требуется. Законодательство ограничивает лишь максимальную продолжительность смены — она не может превышать 24 часа. Закрывать смену и снимать Z-отчет можно в любое время.
Разберем регламент переключения оборудования в течение одной смены:
Частая проблема организаций на специальных налоговых режимах (УСН, ЕНВД, Патент) — при попытке пробить чек без налога касса выводит на печать НДС 0% вместо Без НДС (НДС не облагается). С точки зрения налогового законодательства это разные ставки (0% — это ставка НДС для экспорта и отдельных льготных операций).
Проанализируем причину: если в параметрах строки чека передать пустую строку "" или числовое значение 0, драйвер фискального регистратора (в частности, АТОЛ и ШТРИХ-М с актуальными прошивками) интерпретирует это как ставку 0%. В соответствии со стандартами разработки подключаемого оборудования 1С (БПО) для передачи признака отсутствия налога необходимо явно указывать служебное значение none.
Посмотрим на пример правильного формирования ставки в модуле фискализации:
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС") Тогда
РезультатСтавки = "none";
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС0") Тогда
РезультатСтавки = "0";
Иначе
РезультатСтавки = УчетНДС.ПолучитьСтавкуНДС(СтавкаНДС);
КонецЕсли;
СтрокаЧека.СтавкаНДС = РезультатСтавки;
Важно: если после установки значения none возникает ошибка внешней компоненты («Недопустимое значение параметра»), необходимо обновить интеграционную компоненту (DLL-библиотеку драйвера ККТ) в составе конфигурации 1С или каталоге торгового оборудования, так как старые версии библиотек не поддерживали строковый идентификатор none.
Рассмотрим структуру XML-пакета (CheckPackage), который передается в метод драйвера СформироватьЧек. Данный формат используется в большинстве типовых и нетиповых конфигураций на платформе 1С:
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
<Parameters PaymentType="1" TaxVariant="1" SenderEmail="kassa@company.ru" CustomerEmail="client@mail.ru" CustomerPhone=""/>
<Positions>
<FiscalString Name="Оказание услуг" Quantity="1" Price="1500.00" Amount="1500.00" Department="1" Tax="none"/>
<TextString Text="Номер договора: 123-А"/>
</Positions>
<Payments Cash="1500.00" CashLessType1="0" CashLessType2="0" CashLessType3="0"/>
</CheckPackage>
При программном вызове метода формирования чека обратите особое внимание на типизацию параметров:
// Переменная Кассир должна быть строго строкового типа, а не ссылкой на СправочникСсылка.Пользователи
КассирСтрока = Строка(ОбщиеПараметры.Кассир);
Результат = ОбъектДрайвера.СформироватьЧек(
ПараметрыПодключения.ИДУстройства,
КассирСтрока,
Электронно,
ДанныеЧекаXML,
НомерЧека,
НомерСмены,
ФискальныйПризнак,
АдресСайтаПроверки
);
Если в параметр Кассир передается объект ссылочного типа, метод внешней компоненты аварийно завершает работу с общей ошибкой вызова метода контекста.
Выясним причину сбоя: при пробитии чека с указанием контактных данных клиента (email или телефон для отправки электронного чека) возникает ошибка: 4Fh, Неверный пароль администратора. При этом чек без контактов пробивается корректно.
При передаче контактных данных (тег 1008) драйвер выполняет обращение к служебным таблицам ККТ, для записи в которые требуются права системного администратора. По умолчанию в настройках подключения 1С может передаваться пароль кассира (значение 1 или 0), а пароль системного администратора остается пустым.
Разберем по шагам, как исправить ошибку:
30).30 (или актуальный пароль, заданный в таблицах устройства).