Как организовать работу в 1С на одной или двух ККМ с НДС и без НДС без перезагрузки программы?

Программист 1С v8.3 (Обычные формы) Налоговый учет Торговля и дистрибуция
← На главную

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

Анализ проблемы: почему 1С требует перезагрузки?

Выясним причину, по которой приходится перезагружать программу. В КА 1.1 параметры подключения торгового оборудования инициализируются при запуске системы или при первом обращении к устройству. Если настройки НДС или системы налогообложения (СНО) хранятся в справочнике ПодключенноеОборудование или в константах, то при их изменении «на лету» уже открытый драйвер (объект драйвера) продолжает использовать старые значения из своей памяти. Чтобы избежать этого, нам необходимо внести изменения в логику работы документа ЧекККМ и связанной с ним обработки обслуживания.

Решение 1: Использование признака агента и разных ставок НДС в одном чеке

Проанализируем требования законодательства (54-ФЗ). Современные форматы фискальных документов (ФФД 1.05 и выше) позволяют пробивать в одном чеке позиции с разными ставками НДС и даже разные типы товаров (собственные и агентские). Если ваша организация находится на одной СНО (например, ОСНО), то разделять чеки физически не обязательно.

Рассмотрим, что нужно доработать в коде 1С, чтобы касса понимала, где товар комиссионный, а где ваш. Для этого в обработке обслуживания (обычно это файл с расширением .epf, например, ATOL_KKT_8.epf) нужно найти функцию ПечататьСтроку. Нам необходимо передавать в драйвер параметры тега 1222 (признак агента), 1224 (данные поставщика) и 1226 (ИНН поставщика).

Пример модификации кода для передачи признака агента:


// В процедуре формирования чека при обходе строк табличной части
Для Каждого СтрокаТЧ Из СсылкаНаОбъект.Товары Цикл
    ПараметрыСтроки = Новый Структура;
    ПараметрыСтроки.Вставить("Наименование", СтрокаТЧ.Номенклатура.Наименование);
    ПараметрыСтроки.Вставить("Количество",   СтрокаТЧ.Количество);
    ПараметрыСтроки.Вставить("Цена",         СтрокаТЧ.Цена);
    
    // Определяем ставку НДС из строки товара
    ПараметрыСтроки.Вставить("СтавкаНДС",    СтрокаТЧ.СтавкаНДС);
    
    // Если товар комиссионный, заполняем данные агента
    Если СтрокаТЧ.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.КомиссионныйТовар Тогда
        ПараметрыСтроки.Вставить("ПризнакАгента", 5); // 5 - это код комиссионера
        ПараметрыСтроки.Вставить("ИННПоставщика", СтрокаТЧ.Контрагент.ИНН);
    КонецЕсли;

    // Вызов функции драйвера
    Результат = ОбъектДрайвера.ПечататьСтроку(ОбъектККТ, ПараметрыСтроки);
КонецЦикла;

В этом случае касса напечатает все позиции в одном чеке, корректно указав для каждой строки свою ставку НДС и реквизиты поставщика, что полностью соответствует закону.

Решение 2: Программное управление СНО без смены настроек оборудования

Если же ситуация сложнее и вам необходимо использовать разные Системы Налогообложения (например, ОСНО для комиссии и УСН для своих товаров), то пробить их в одном чеке невозможно. В этом случае мы рекомендуем программно менять СНО непосредственно перед открытием фискального чека, не заставляя пользователя заходить в настройки.

Разберем, как это реализовать. Вместо того чтобы полагаться на галочку в интерфейсе, мы будем передавать параметр TaxVariant (или аналогичный в зависимости от драйвера) прямо в коде. Посмотрим на пример логики в обработке обслуживания:


// Перед вызовом метода драйвера ОткрытьЧек (OpenCheck)
Если ДокументОбъект.ЭтоКомиссионныйТовар Тогда
    // Устанавливаем ОСНО для комиссии
    ОбъектДрайвера.Параметры.TaxVariant = 0; 
Иначе
    // Устанавливаем УСН Доходы для собственных товаров
    ОбъектДрайвера.Параметры.TaxVariant = 1; 
КонецЕсли;

// Записываем параметры в драйвер без перезагрузки 1С
ОбъектДрайвера.УстановитьПараметры(ОбъектККТ);
ОбъектДрайвера.ОткрытьЧек(ОбъектККТ, ...);

Такой подход позволяет динамически менять настройки драйвера для каждого документа. Пользователь просто нажимает кнопку «Пробить чек», а система сама определяет, с какими параметрами СНО должно работать устройство в данный момент.

Решение 3: Работа с двумя логическими устройствами на одном порту

Если вы все же решили использовать две разные «Кассы ККМ» в справочнике 1С (одна для НДС, другая без), вы столкнетесь с ошибкой «Порт занят». Это происходит потому, что 1С при подключении первого устройства монопольно захватывает COM-порт.

Рассмотрим способы решения этой технической проблемы:

  1. Использование драйвера версии 10.х (Атол): Современные драйверы поддерживают работу через TCP/IP. Если подключить кассу не через COM-порт, а по сети (даже если она включена в USB, можно использовать службу Ethernet-over-USB), то драйвер позволит нескольким логическим устройствам обращаться к одной кассе одновременно.
  2. Освобождение порта: В коде 1С можно принудительно вызывать метод Отключить() для первого устройства перед тем, как подключать второе. Однако это замедляет работу, так как инициализация оборудования занимает время.
  3. Программный "перехват": В документе ЧекККМ переписать процедуру ПечатьЧека, чтобы она всегда обращалась к одному и тому же физическому идентификатору оборудования, но подменяла структуру ПараметрыПодключения в памяти непосредственно перед печатью.

Важные замечания по реквизитам чека (ФФД 1.05 / 1.2)

Проанализируем обязательные поля, которые должны появиться в чеке при продаже комиссионного товара с НДС, если основная деятельность идет без НДС:

Резюме: Для наиболее быстрой и комфортной работы кассира в КА 1.1 лучше всего отказаться от разделения на две ККМ в справочнике. Оптимальный путь для программиста — доработка внешней обработки обслуживания ККТ, чтобы она принимала ставку НДС и признак агента напрямую из табличной части документа ЧекККМ. Это исключит необходимость перезагрузки 1С и позволит печатать один смешанный чек, что значительно ускорит обслуживание покупателей.

← На главную