Как отправить нестандартный тип оплаты из 1С в ККТ Атол и какие существуют ограничения?

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

При работе с контрольно-кассовой техникой (ККТ) и системой 1С часто возникают вопросы по интеграции и передаче данных. Один из таких вопросов касается возможности отправки в ККТ нестандартных, или "своих", типов оплаты, которые не предусмотрены стандартным набором 1С. Рассмотрим эту ситуацию на примере ККТ Атол и программы 1С.

Представим сценарий: в драйвере ККТ Атол (например, в "Тесте драйвера ККТ") мы видим возможность выбора типов оплаты от 0 до 9. При этом тип 0 жестко закреплен за "Наличными". Однако в конфигурации 1С, например, в разделе Секция оплат (Payments), доступны только пять стандартных типов оплаты: Cash, ElectronicPayment, PrePayment, PostPayment и Barter. Возникает закономерный вопрос: как отправить оплату на "Тип оплаты 6" или любой другой нестандартный тип, если 1С предлагает лишь ограниченный набор?

Ограничения стандартной интеграции 1С с ККТ Атол

Давайте проанализируем текущую ситуацию. Мы выясняем, что стандартные 1С-совместимые драйверы ККТ обычно поддерживают ограниченный набор типов оплат. Эти типы строго соответствуют внутренним механизмам 1С. Как правило, они отображаются на первые пять типов оплаты в драйвере Атол:

  1. Cash (или 0) – Наличными
  2. ElectronicPayment (или 1) – Безналичными
  3. PrePayment (или 2) – Предварительная оплата (Аванс)
  4. PostPayment (или 3) – Последующая оплата (Кредит)
  5. Barter (или 4) – Иная форма оплаты (Встречное предоставление)

Если мы попытаемся передать произвольный номер типа оплаты, например, "6", напрямую через стандартный 1С-совместимый драйвер, то столкнемся с ограничением: такая возможность, как правило, не предусмотрена. Синтаксис 1С для записи данных в XML-структуру (например, ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличные));) жестко привязан к предопределенным названиям типов ("Cash", "ElectronicPayment" и т.д.), а не к числовым кодам драйвера Атол.

Важно понимать, что существует принципиальная разница между синтаксисом, который ожидает Атоловский драйвер (например, "type": 6 для прямого указания номера типа), и синтаксисом, используемым 1С-совместимыми драйверами. Последние абстрагируются от низкоуровневых команд ККТ и работают с обобщенными понятиями оплат 1С, которые затем транслируются в команды драйвера ККТ. Из-за этой абстракции прямая передача произвольного номера типа оплаты в большинство 1С-совместимых драйверов напрямую невозможна.

Почему не удается отправить "Тип оплаты 6" напрямую из 1С?

Мы видим, что в утилите "Тест драйвера ККТ" от Атол в выпадающем списке "Тип оплаты / Закрытия" действительно может быть до девяти типов (от 0 до 8). Это может ввести в заблуждение, поскольку кажется, что можно использовать любой из них. Однако проблема заключается в уровне интеграции:

  1. Стандартный драйвер 1С: Он разработан для унификации взаимодействия с различным оборудованием и предоставляет стандартизированный интерфейс. Этот интерфейс оперирует только пятью упомянутыми нами типами оплат 1С.
  2. Внутреннее отображение: Стандартный драйвер 1С самостоятельно сопоставляет свои пять типов с первыми пятью фискальными типами ККТ (0-4). Он не предоставляет механизма для указания произвольных типов, выходящих за этот диапазон.
  3. Бизнес-задача: Например, если нам нужна кнопка "Наличные 2" в РМК Розницы, чтобы на кассе можно было отделить одни наличные от других. Это отличная управленческая задача, но для ее решения средствами фискальных типов оплаты на уровне 1С-ККТ интеграции нам потребуется другой подход.

Таким образом, если наша цель – добиться, чтобы фискальный регистратор Атол печатал в чеке и учитывал в отчетах "Тип оплаты 6" как отдельный фискальный тип именно через стандартный механизм, то, к сожалению, средствами 1С-совместимого драйвера это невозможно.

Решение проблемы: Использование "Секций" (Торговых отделов) на ККТ

Когда прямая передача произвольных фискальных типов оплаты невозможна, самым распространенным и поддерживаемым способом разделения потоков денежных средств при схожих типах оплаты (например, "Наличные 1" и "Наличные 2") является использование "секций" или "торговых отделов" на ККТ. Фискальные регистраторы Атол и другие современные ККТ позволяют вести учет по нескольким секциям (обычно до 4 или 8, в зависимости от модели и прошивки), что находит свое отражение в X-отчетах и Z-отчетах.

Давайте разберем этот подход подробнее:

  1. Что такое секции ККТ?

    Секции (или отделы) на ККТ – это встроенный механизм для разделения выручки и продаж по разным категориям. Каждая позиция чека или даже весь чек может быть "приписан" к определенной секции. Это позволяет детализировать отчеты ККТ. Например, мы можем иметь две секции: "Основной отдел" и "Дополнительный отдел". При пробитии чека мы указываем, к какой секции относится каждая товарная позиция или вся сумма оплаты.

  2. Как это решает нашу задачу?

    Если мы хотим отделить "Наличные 1" от "Наличных 2", мы можем использовать одну фискальную форму оплаты (например, стандартные "Наличные" – тип 0) и при этом распределять их по разным секциям. Например, "Наличные 1" будут пробиваться через Секцию 1, а "Наличные 2" – через Секцию 2. В X-отчете и Z-отчете мы увидим детализацию по секциям: сколько наличных поступило через Секцию 1, и сколько – через Секцию 2. С точки зрения фискализации это будут все те же "Наличные", но на уровне управленческого учета и отчетности ККТ мы получим необходимое разделение.

  3. Реализация в 1С: доработка кода

    Для реализации использования секций в 1С нам потребуется доработка кода. Обычно это делается в общих модулях, отвечающих за работу с кассой, например, в функции ПробитьЧекВыполнить или аналогичных в модулях РМК (Рабочего Места Кассира) конфигурации 1С:Розница.

    Нам необходимо определить, по какому критерию та или иная оплата (или даже позиция чека) должна быть отнесена к определенной секции. Критериями могут быть:

    • Вид оплаты в 1С: Мы можем создать в 1С "Виды оплат" с названиями "Наличные (Секция 1)" и "Наличные (Секция 2)". При выборе кассиром соответствующего вида оплаты, программно будет устанавливаться нужный номер секции.
    • Вид номенклатуры: Если нам нужно разделять продажи по секциям в зависимости от категории товара.
    • Настройки пользователя/кассы: Возможно, для каждой кассы или пользователя будет жестко закреплена определенная секция.

    В коде, перед вызовом метода печати чека на ККТ, нам нужно будет установить номер секции. Конкретный механизм установки секции зависит от используемого драйвера ККТ, но в общем виде это может выглядеть как установка значения определенного параметра объекта, передаваемого в драйвер. Например, в объекте ФискальныеДанныеЧека или НаборПараметровЧека может быть свойство НомерСекции или Department. Мы должны будем присвоить ему соответствующее числовое значение (1, 2, 3 и т.д.).

    
    // Пример схематичного кода в 1С (может отличаться в зависимости от конфигурации и версии драйвера)
    // Допустим, у нас есть переменная ТекущийНомерСекции, полученная на основе логики
    ПередаваемыеПараметры = Новый Соответствие;
    ПередаваемыеПараметры.Вставить("ТипОплаты", "Cash"); // Всегда используем стандартный тип 1С для наличных
    ПередаваемыеПараметры.Вставить("Сумма", СуммаНаличные);
    // !!! Вот здесь мы устанавливаем номер секции !!!
    ПередаваемыеПараметры.Вставить("НомерСекции", ТекущийНомерСекции); // Например, 1 или 2
    // ... далее передаем эти параметры в драйвер ККТ
    

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

Настройка "Видов оплат" в 1С

В 1С существует справочник "Виды оплат", который мы активно используем для настройки различных методов оплаты, таких как наличные, платежные карты, подарочные сертификаты, бонусы, авансы и так далее. Каждый "Вид оплаты" в 1С имеет "Способ оплаты" и может быть помечен как "Фискальный". Эти виды оплат используются в документах 1С, например, в "Отчете о розничных продажах", и для удобства кассира в РМК.

Для корректной работы с ККТ необходимо выполнить сопоставление "Видов оплат" 1С с типами оплаты в драйвере ККТ. Это делается в настройках подключаемого оборудования 1С для ККТ. Обычно это выглядит как таблица, где для каждого вида оплаты из справочника 1С мы указываем соответствующий код или тип оплаты ККТ (0-4 для Атол).

Если мы требуем фискализации нестандартного типа оплаты, то:

  1. Мы можем создать новый элемент в справочнике "Виды оплат" 1С.
  2. При настройке кассы ККМ мы должны будем связать его с одним из доступных фискальных типов оплаты на ККТ, поддерживаемых 1С (т.е. 0-4). Мы не сможем напрямую назначить ему "Тип оплаты 6".

Именно здесь и проявляется необходимость использовать секции: новый "Вид оплаты" 1С (например, "Наличные по акции") будет связан с фискальным типом "Наличные" (тип 0), но в коде 1С при его выборе будет устанавливаться определенный номер секции для ККТ (например, Секция 3), чтобы разделить отчетность.

Использование внешних механизмов или прямое взаимодействие с драйвером Атол (сложные варианты)

В некоторых очень специфических и редких случаях, когда стандартная интеграция 1С абсолютно не позволяет достигнуть требуемого результата, возможны более глубокие кастомизации. Это может включать:

  1. Прямое обращение к API драйвера ККТ: Некоторые продвинутые системы могут демонстрировать возможность прямого указания "номера в устройстве" (из утилиты "Тест драйвера" Атол) для нестандартных типов оплат. Это означает, что 1С не использует свой стандартный "промежуточный" драйвер, а напрямую взаимодействует с компонентой Атол (например, FprnM1C.dll или аналогичной), передавая ей низкоуровневые команды. В этом случае, если драйвер Атол предоставляет такую возможность, можно занять неиспользуемые строчки в таблице типов оплат.
  2. Разработка собственных обработок: Такой подход обычно требует разработки собственных обработок или изменения существующих модулей 1С, которые взаимодействуют с драйвером ККТ, минуя стандартные механизмы 1С-совместимых драйверов. Это значительно усложняет поддержку системы и требует глубоких знаний как 1С, так и API драйвера ККТ.

Важно: Применение такого метода выходит за рамки стандартных возможностей 1С и ее совместимых драйверов. Это сложный путь, который сопряжен с высокими рисками при обновлении конфигурации 1С и драйверов ККТ. Мы настоятельно не рекомендуем использовать этот подход без крайней необходимости и без тщательного анализа всех рисков.

Подключение и настройка ККТ Атол в 1С

Для корректной работы с ККТ Атол в 1С необходимо выполнить несколько обязательных шагов, которые обеспечивают базовую интеграцию:

  1. Установка актуального драйвера Атол: Прежде всего, убедитесь, что на компьютере, к которому подключена ККТ, установлен актуальный драйвер ККТ от Атол. Драйверы регулярно обновляются, и новые версии могут содержать исправления ошибок и улучшения совместимости.
  2. Настройка в 1С: Откройте раздел "Администрирование -> Подключаемое оборудование" в вашей конфигурации 1С. Здесь вам необходимо:
    • Добавить новый экземпляр подключаемого оборудования типа "ККТ с передачей данных".
    • Выбрать соответствующий драйвер (например, "АТОЛ:ККТ с передачей данных").
    • Настроить параметры подключения ККТ (COM-порт, скорость обмена и т.д.).
    • Выполнить тест подключения, чтобы убедиться в работоспособности связки 1С-ККТ.
    • Сопоставить "Виды оплат" 1С с типами оплаты, поддерживаемыми драйвером ККТ (как обсуждалось ранее, это будут первые 5 типов).

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

Резюме и заключение

Давайте подведем итоги нашего анализа. Если ваша задача состоит в том, чтобы фискальный регистратор Атол печатал в чеке и учитывал в отчетах "Тип оплаты 6" как *отдельный фискальный тип*, который не является одним из пяти стандартных типов 1С, то средствами стандартного 1С-совместимого драйвера это, скорее всего, невозможно. Стандартные механизмы 1С и ее драйверов работают с ограниченным, унифицированным набором типов оплат.

Однако, если бизнес-потребность заключается в разделении учета схожих типов оплат (например, "Наличные 1" и "Наличные 2"), то рекомендуемым и поддерживаемым подходом является использование "секций" (торговых отделов) на ККТ. Этот метод позволяет:

  1. Использовать один из стандартных фискальных типов оплаты (например, "Наличные").
  2. Программно устанавливать номер секции в 1С для каждой операции или позиции чека, основываясь на вашей управленческой логике.
  3. Получать детализированные отчеты по секциям (X- и Z-отчеты), что обеспечивает необходимое разделение данных для управленческого учета.

Для реализации этого подхода потребуется доработка кода 1С, в частности, в модулях, отвечающих за формирование и печать чеков. Нам придется определить условия, при которых выбирается та или иная секция, и передавать соответствующий номер секции в драйвер ККТ. Такой подход обеспечивает гибкость и позволяет достигнуть поставленной цели, оставаясь при этом в рамках поддерживаемых механизмов интеграции.

Всегда помните о необходимости использования актуальных драйверов ККТ и тщательной настройки подключаемого оборудования в 1С для обеспечения стабильной и корректной работы всей системы.

← На главную