Смена ставки НДС с 18% на 20% в свое время вызвала немало технических сложностей у пользователей классической платформы 1С v7.7 (Торговля и Склад). Одной из самых распространенных проблем при работе с фискальными регистраторами «Штрих-М» стала ошибка «Программирование невозможно», возникающая при попытке пробить чек. В этой статье мы подробно разберем, почему возникает эта ситуация, как правильно настроить таблицы налогов в кассе и какие изменения необходимо внести в программный код 1С.
Давайте разберем внутреннюю логику работы драйвера ККТ. Ошибка «Программирование невозможно» (часто сопровождаемая пояснением, что смена открыта) возникает в тот момент, когда драйвер обнаруживает несоответствие между налоговыми ставками, передаваемыми из 1С, и ставками, записанными в памяти (таблицах) кассового аппарата.
Проанализируем ситуацию по шагам. Когда 1С отправляет команду на печать чека, она передает значение налога (например, 18). Если в таблице налогов кассы в первой строке уже прописано 20, драйвер «Штрих-М» автоматически пытается перезаписать таблицу кассы, чтобы синхронизировать данные. Однако по требованиям законодательства и протоколам работы фискальных накопителей, изменение системных таблиц запрещено при открытой кассовой смене. Именно поэтому первый чек после закрытия смены может пройти успешно (так как драйвер успевает перепрограммировать таблицу), а все последующие блокируются ошибкой.
Прежде чем приступать к правке кода в 1С, нам необходимо убедиться, что сама касса настроена корректно. Рассмотрим порядок действий в утилите «Тест драйвера ККТ» (рекомендуется использовать версию 4.14 или выше):
После внесения изменений в таблицы необходимо закрыть и заново открыть смену, чтобы параметры вступили в силу.
Теперь рассмотрим, как адаптировать программную часть 1С 7.7. Основная проблема типовых обработок (таких как frSHTRIH54_comm.ert) заключается в том, что они пытаются передать в драйвер числовое значение ставки (18 или 20), в то время как современные прошивки под ФФД 1.05 ожидают порядковый номер налоговой группы.
Выясним, какие изменения нужно внести в код. Нам необходимо найти фрагмент, где заполняется объект налога перед печатью строки чека. Вместо прямой передачи ставки, мы будем передавать индекс строки из Таблицы №6, которую мы настроили ранее.
Пример модификации кода в процедуре ПечатьЧека:
// Было (передача значения ставки):
// Объект.Tax1 = 18;
// Стало (передача индекса налоговой группы):
Если СтавкаНДС = Перечисление.СтавкиНДС.НДС20 Тогда
Объект.Tax1 = 1; // 1 — это индекс строки с 20% в таблице №6 ККТ
ИначеЕсли СтавкаНДС = Перечисление.СтавкиНДС.НДС10 Тогда
Объект.Tax1 = 2; // 2 — это индекс строки с 10% в таблице №6 ККТ
КонецЕсли;
Обратите внимание, что тип параметра должен быть Integer. Если передать строку "1" вместо числа 1, драйвер может выдать ошибку типа параметров.
Если использование стандартных 1С-овских библиотек (например, SMDrvFR1CLib20.dll) продолжает вызывать ошибки синхронизации, разберем альтернативный и более надежный метод — прямое обращение к COM-объекту драйвера AddIn.DrvFR.
Этот метод позволяет избежать посредничества «интерфейсных» библиотек 1С, которые часто выполняют избыточные проверки. Проанализируем пример кода для печати позиции товара напрямую:
Процедура ПродатьТовар(Товар, Цена, Колво, Ставка)
// Инициализация объекта драйвера напрямую
Драйвер = СоздатьОбъект("AddIn.DrvFR");
Драйвер.Password = 30; // Пароль администратора по умолчанию
Драйвер.Quantity = Колво;
Драйвер.Price = Цена;
Драйвер.StringForPrinting = Товар.Наименование;
// Указываем тип налога как индекс из таблицы №6
Если Ставка = 20 Тогда
Драйвер.TaxType1 = 1;
ИначеЕсли Ставка = 10 Тогда
Драйвер.TaxType1 = 2;
КонецЕсли;
Драйвер.Sale(); // Команда продажи
КонецПроцедуры
Использование TaxType1 (или аналогичных свойств в зависимости от версии драйвера) напрямую указывает кассе, какую налоговую ставку из своего внутреннего списка применить к позиции. Это исключает попытки драйвера «переучить» кассу прямо во время продажи.
Рассмотрим еще один важный нюанс — выбор конкретной версии DLL. Опыт показывает, что для стабильной работы с новыми прошивками (НДС 20% и ФФД 1.05) в среде 7.7 лучше всего подходят связки:
SMDrvFR1CLib24.dll (версия 4.14.721 и выше).SMDrvFR1C20.Если ваша касса подключена через USB-RNDIS, проанализируйте настройки сетевого интерфейса в Таблице №21. Часто сбои возникают из-за того, что касса пытается одновременно использовать и COM-порт, и сетевой протокол. Для стабильности рекомендуется принудительно установить один тип интерфейса в параметрах ККТ.
Подводя итог, можно сказать, что решение проблемы «Программирование невозможно» кроется в отказе от передачи числовых значений ставок в пользу передачи их индексов и тщательной предварительной настройке налоговых таблиц самого аппарата. Это гарантирует, что 1С и касса будут «разговаривать на одном языке», не пытаясь изменить настройки друг друга в процессе торговой операции.