При работе в конфигурации «Комплексная автоматизация 1.1» (КА 1.1) или аналогичных решениях на обычных формах (УПП 1.3) часто возникает ситуация, когда одна организация совмещает продажу собственных товаров (например, без НДС) и товаров по договору субкомиссии (с НДС). Основная сложность заключается в том, что стандартные настройки торгового оборудования в старых версиях 1С часто привязаны к глобальным параметрам сессии. Разберем, как уйти от ручного переключения галочек и перезагрузки системы, настроив автоматическую передачу нужных параметров в драйвер ККТ.
Выясним причину, по которой приходится перезагружать программу. В КА 1.1 параметры подключения торгового оборудования инициализируются при запуске системы или при первом обращении к устройству. Если настройки НДС или системы налогообложения (СНО) хранятся в справочнике ПодключенноеОборудование или в константах, то при их изменении «на лету» уже открытый драйвер (объект драйвера) продолжает использовать старые значения из своей памяти. Чтобы избежать этого, нам необходимо внести изменения в логику работы документа ЧекККМ и связанной с ним обработки обслуживания.
Проанализируем требования законодательства (54-ФЗ). Современные форматы фискальных документов (ФФД 1.05 и выше) позволяют пробивать в одном чеке позиции с разными ставками НДС и даже разные типы товаров (собственные и агентские). Если ваша организация находится на одной СНО (например, ОСНО), то разделять чеки физически не обязательно.
Рассмотрим, что нужно доработать в коде 1С, чтобы касса понимала, где товар комиссионный, а где ваш. Для этого в обработке обслуживания (обычно это файл с расширением .epf, например, ATOL_KKT_8.epf) нужно найти функцию ПечататьСтроку. Нам необходимо передавать в драйвер параметры тега 1222 (признак агента), 1224 (данные поставщика) и 1226 (ИНН поставщика).
Пример модификации кода для передачи признака агента:
// В процедуре формирования чека при обходе строк табличной части
Для Каждого СтрокаТЧ Из СсылкаНаОбъект.Товары Цикл
ПараметрыСтроки = Новый Структура;
ПараметрыСтроки.Вставить("Наименование", СтрокаТЧ.Номенклатура.Наименование);
ПараметрыСтроки.Вставить("Количество", СтрокаТЧ.Количество);
ПараметрыСтроки.Вставить("Цена", СтрокаТЧ.Цена);
// Определяем ставку НДС из строки товара
ПараметрыСтроки.Вставить("СтавкаНДС", СтрокаТЧ.СтавкаНДС);
// Если товар комиссионный, заполняем данные агента
Если СтрокаТЧ.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.КомиссионныйТовар Тогда
ПараметрыСтроки.Вставить("ПризнакАгента", 5); // 5 - это код комиссионера
ПараметрыСтроки.Вставить("ИННПоставщика", СтрокаТЧ.Контрагент.ИНН);
КонецЕсли;
// Вызов функции драйвера
Результат = ОбъектДрайвера.ПечататьСтроку(ОбъектККТ, ПараметрыСтроки);
КонецЦикла;
В этом случае касса напечатает все позиции в одном чеке, корректно указав для каждой строки свою ставку НДС и реквизиты поставщика, что полностью соответствует закону.
Если же ситуация сложнее и вам необходимо использовать разные Системы Налогообложения (например, ОСНО для комиссии и УСН для своих товаров), то пробить их в одном чеке невозможно. В этом случае мы рекомендуем программно менять СНО непосредственно перед открытием фискального чека, не заставляя пользователя заходить в настройки.
Разберем, как это реализовать. Вместо того чтобы полагаться на галочку в интерфейсе, мы будем передавать параметр TaxVariant (или аналогичный в зависимости от драйвера) прямо в коде. Посмотрим на пример логики в обработке обслуживания:
// Перед вызовом метода драйвера ОткрытьЧек (OpenCheck)
Если ДокументОбъект.ЭтоКомиссионныйТовар Тогда
// Устанавливаем ОСНО для комиссии
ОбъектДрайвера.Параметры.TaxVariant = 0;
Иначе
// Устанавливаем УСН Доходы для собственных товаров
ОбъектДрайвера.Параметры.TaxVariant = 1;
КонецЕсли;
// Записываем параметры в драйвер без перезагрузки 1С
ОбъектДрайвера.УстановитьПараметры(ОбъектККТ);
ОбъектДрайвера.ОткрытьЧек(ОбъектККТ, ...);
Такой подход позволяет динамически менять настройки драйвера для каждого документа. Пользователь просто нажимает кнопку «Пробить чек», а система сама определяет, с какими параметрами СНО должно работать устройство в данный момент.
Если вы все же решили использовать две разные «Кассы ККМ» в справочнике 1С (одна для НДС, другая без), вы столкнетесь с ошибкой «Порт занят». Это происходит потому, что 1С при подключении первого устройства монопольно захватывает COM-порт.
Рассмотрим способы решения этой технической проблемы:
Отключить() для первого устройства перед тем, как подключать второе. Однако это замедляет работу, так как инициализация оборудования занимает время.ЧекККМ переписать процедуру ПечатьЧека, чтобы она всегда обращалась к одному и тому же физическому идентификатору оборудования, но подменяла структуру ПараметрыПодключения в памяти непосредственно перед печатью.Проанализируем обязательные поля, которые должны появиться в чеке при продаже комиссионного товара с НДС, если основная деятельность идет без НДС:
Резюме: Для наиболее быстрой и комфортной работы кассира в КА 1.1 лучше всего отказаться от разделения на две ККМ в справочнике. Оптимальный путь для программиста — доработка внешней обработки обслуживания ККТ, чтобы она принимала ставку НДС и признак агента напрямую из табличной части документа ЧекККМ. Это исключит необходимость перезагрузки 1С и позволит печатать один смешанный чек, что значительно ускорит обслуживание покупателей.