Почему в 1С 7.7 при работе с АТОЛ ДТО 10 в чек не передается e-mail клиента (тег 1008)?

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

При обновлении кассового оборудования и переходе с драйверов торгового оборудования АТОЛ 8-й версии (ДТО 8) на современную ветку ДТО 10 разработчики конфигураций на платформе 1С:Предприятие 7.7 часто сталкиваются с ситуацией, когда данные покупателя перестают попадать в чек. В частности, перестает передаваться реквизит тег 1008 (адрес электронной почты или номер телефона покупателя), из-за чего ОФД не может доставить электронный чек клиенту.

Рассмотрим, в чем кроется принципиальная разница в логике работы драйверов ДТО 8 и ДТО 10, как правильно выстроить последовательность команд при фискализации, и разберем сопутствующие тонкости платформы 1С 7.7.

Причина проблемы: изменение модели состояний в ДТО 10

Проанализируем архитектурные отличия библиотек. В старых версиях ДТО 8 драйвер прощал разработчикам вольности в порядке вызова свойств и методов: присвоение значения тегу 1008 могло производиться практически в любой момент до закрытия документа — в начале чека, между регистрацией позиций или непосредственно перед командой закрытия.

В ДТО 10 взаимодействие с ККТ строго регламентировано конечным автоматом состояний драйвера:

  1. Параметры, относящиеся ко всему чеку в целом (включая данные покупателя), должны быть установлены строго до открытия чека — до вызова метода openReceipt().
  2. Если попытаться передать тег 1008 после вызова метода открытия чека, драйвер либо проигнорирует реквизит, либо вернет ошибку некорректного состояния ККТ.
  3. Аналогичное правило жесткой последовательности распространяется и на другие реквизиты контрагента: тег 1227 (наименование покупателя) и тег 1228 (ИНН покупателя) при расчетах между юридическими лицами и ИП также передаются до открытия чека.

Реализация передачи данных покупателя в 1С 7.7

Посмотрим на пример правильной последовательности команд при прямой работе с COM-объектом драйвера AddIn.Fptr10. Обратим внимание, что в платформе 1С 7.7 отсутствует встроенный тип данных Булево, поэтому числовые константы 1 и 0 используются вместо Истина и Ложь.

Разберем по шагам типовой алгоритм:


// Инициализация объекта драйвера ККТ
Драйвер = СоздатьОбъект("AddIn.Fptr10");

// Подключение к устройству
Драйвер.open();

// 1. Указываем тип чека и базовые параметры
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_RECEIPT_TYPE, Драйвер.LIBFPTR_RT_SELL);

// 2. ПЕРЕД открытием чека передаем тег 1008 (e-mail или телефон)
ЭлПочта = СокрЛП(КлиентЭлПочта);
Если ПустаяСтрока(ЭлПочта) = 0 Тогда
    // Записываем адрес покупателя в параметры
    Драйвер.setParam(1008, ЭлПочта);
    
    // Если нужно полностью подавить печать бумажного чека:
    // Драйвер.setParam(Драйвер.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, 1);
КонецЕсли;

// 3. Открываем фискальный чек
Драйвер.openReceipt();

// 4. Регистрация позиций (товаров/услуг)
// ... вызовы registration() ...

// 5. Оплата и закрытие чека
// ... вызовы payment() и closeReceipt() ...

Важные нюансы и сопутствующие факторы

Если код вызова скорректирован, но чек по-прежнему не уходит клиенту, выясним причину, проверив следующие моменты:

  1. Валидация формата данных (тег 1008): В современных прошивках ККТ и версиях ДТО 10 реализован жесткий контроль формата. Адрес электронной почты должен быть очищен от концевых пробелов, кавычек и спецсимволов. Если вместо e-mail передается номер телефона, он должен соответствовать маске международного формата без скобок, пробелов и дефисов (например, +79990000000). Некорректный формат приводит к отбрасыванию реквизита.
  2. Признак электронного чека: Параметр LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY определяет, печатать ли бумажный чек. Если он не передан или равен 0, касса напечатает обычный чек на ленте, но тег 1008 всё равно зафиксируется в ФН и передастся в ОФД. Если же касса должна работать исключительно в электронном режиме (экономия бумаги), этот параметр выставляется в 1 до вызова openReceipt().
  3. Тариф и настройки ОФД: Оператор фискальных данных принимает тег 1008 из чека, однако фактическая доставка письма или SMS зависит от настроек личного кабинета ОФД. Некоторые операторы требуют подключения отдельного пакета услуг для отправки сообщений либо ручной активации опции отправки чеков покупателям.
  4. Использование JSON-интерфейса: Альтернативным способом интеграции в 1С 7.7 является вызов метода processJson(). При передаче документа единым JSON-пакетом данные клиента указываются в блоке clientInfo (поле emailOrPhone), что полностью исключает ошибки последовательности вызова отдельных низкоуровневых методов драйвера.
← На главную