Как исправить ошибку Программирование невозможно при настройке НДС 20% в 1С 7.7 для касс Штрих-М

Программист 1С v7.7 Налоговый учет Торговля и дистрибуция
← На главную

Смена ставки НДС с 18% на 20% в свое время вызвала немало технических сложностей у пользователей классической платформы 1С v7.7 (Торговля и Склад). Одной из самых распространенных проблем при работе с фискальными регистраторами «Штрих-М» стала ошибка «Программирование невозможно», возникающая при попытке пробить чек. В этой статье мы подробно разберем, почему возникает эта ситуация, как правильно настроить таблицы налогов в кассе и какие изменения необходимо внести в программный код 1С.

Анализ причины ошибки Программирование невозможно

Давайте разберем внутреннюю логику работы драйвера ККТ. Ошибка «Программирование невозможно» (часто сопровождаемая пояснением, что смена открыта) возникает в тот момент, когда драйвер обнаруживает несоответствие между налоговыми ставками, передаваемыми из 1С, и ставками, записанными в памяти (таблицах) кассового аппарата.

Проанализируем ситуацию по шагам. Когда 1С отправляет команду на печать чека, она передает значение налога (например, 18). Если в таблице налогов кассы в первой строке уже прописано 20, драйвер «Штрих-М» автоматически пытается перезаписать таблицу кассы, чтобы синхронизировать данные. Однако по требованиям законодательства и протоколам работы фискальных накопителей, изменение системных таблиц запрещено при открытой кассовой смене. Именно поэтому первый чек после закрытия смены может пройти успешно (так как драйвер успевает перепрограммировать таблицу), а все последующие блокируются ошибкой.

Настройка таблиц в драйвере Штрих-М

Прежде чем приступать к правке кода в 1С, нам необходимо убедиться, что сама касса настроена корректно. Рассмотрим порядок действий в утилите «Тест драйвера ККТ» (рекомендуется использовать версию 4.14 или выше):

  1. Запустим утилиту и установим связь с кассой.
  2. Перейдем в раздел «Настройка параметров» или «Параметры ККТ».
  3. Откроем пункт «Таблицы».
  4. Найдем Таблицу №6 «Налоговые ставки».
  5. Проверим содержимое строк. Для корректной работы по новым стандартам обычно устанавливается следующий порядок:
    • Строка 1: 20.00 (НДС 20%)
    • Строка 2: 10.00 (НДС 10%)
    • Строка 3: 0.00 (НДС 0%)
    • Строка 4: Без НДС (или аналогично настройкам учета)
  6. Важно зафиксировать порядковые номера (индексы) этих строк, так как именно их мы будем использовать в коде.

После внесения изменений в таблицы необходимо закрыть и заново открыть смену, чтобы параметры вступили в силу.

Изменение обработки обслуживания frSHTRIH54_comm.ert

Теперь рассмотрим, как адаптировать программную часть 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, драйвер может выдать ошибку типа параметров.

Работа через прямой доступ к драйверу DrvFR.dll

Если использование стандартных 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 лучше всего подходят связки:

Если ваша касса подключена через USB-RNDIS, проанализируйте настройки сетевого интерфейса в Таблице №21. Часто сбои возникают из-за того, что касса пытается одновременно использовать и COM-порт, и сетевой протокол. Для стабильности рекомендуется принудительно установить один тип интерфейса в параметрах ККТ.

Подводя итог, можно сказать, что решение проблемы «Программирование невозможно» кроется в отказе от передачи числовых значений ставок в пользу передачи их индексов и тщательной предварительной настройке налоговых таблиц самого аппарата. Это гарантирует, что 1С и касса будут «разговаривать на одном языке», не пытаясь изменить настройки друг друга в процессе торговой операции.

← На главную