Как организовать отправку электронного чека по 54-ФЗ на e-mail покупателя средствами 1С?

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

При переходе на онлайн-кассы по требованиям Федерального закона № 54-ФЗ у многих организаций возникает потребность отправлять кассовые чеки покупателям в электронном виде на e-mail. Зачастую операторы фискальных данных (ОФД) берут дополнительную плату за отправку сообщений, поэтому логичным решением становится отправка писем напрямую из программы 1С. Разберем подробно, что должно быть в таком письме, как правильно передавать данные в ККТ и как реализовать этот механизм в конфигурации.

Требования законодательства к содержимому электронного письма

Проанализируем требования ст. 1.2 и ст. 4.7 закона № 54-ФЗ. Простое текстовое уведомление или XML-пакет кассы отправлять покупателю нельзя. Закон строго регламентирует два допустимых варианта содержимого электронного письма:

  1. Полная электронная копия кассового чека (в виде HTML-письма, форматированного текста или прикрепленного PDF-файла). В ней должны присутствовать все обязательные реквизиты:
    1. Наименование организации или ИП, ИНН и применяемая система налогообложения.
    2. Признак расчета (приход, возврат прихода, расход, возврат расхода).
    3. Список товарных позиций, количество, цена за единицу, итоговая сумма, а также ставки и суммы НДС.
    4. Форма расчета (наличные или безналичные/электронные средства).
    5. Должность и ФИО лица, осуществившего расчет (кассира).
    6. Регистрационный номер ККТ (РН ККТ) и заводской номер фискального накопителя (ФН).
    7. Номер фискального документа (ФД), фискальный признак (ФП / ФПД), номер смены и порядковый номер чека за смену.
    8. Дата, время и адрес осуществления расчета.
    9. Адрес сайта ФНС или ОФД для проверки подлинности чека.
  2. Сведения для идентификации чека со ссылкой на ОФД. Письмо может содержать краткие данные (наименование продавца, дату, время, сумму, номера ФН, ФД, ФПД) и прямую ссылку на просмотр и скачивание фискального чека на сервере оператора фискальных данных.

Обязательные действия при фискализации чека в кассе

Рассмотрим порядок взаимодействия 1С с кассовым аппаратом при формировании электронного чека:

  1. Передача тега 1008 («Адрес покупателя»). Независимо от того, кто физически отправляет письмо (ОФД или 1С), номер телефона или адрес электронной почты клиента обязательно должен быть передан в ККТ до закрытия чека. Это требование формата фискальных данных (ФФД), так как реквизит должен записаться в память фискального накопителя и уйти в налоговую.
  2. Управление печатью на бумажной ленте. Если чек пробивается исключительно в электронном виде, в драйвер кассы передается флаг электронного чека (булево значение отказа от печати на ленте). В таком случае ККТ фискализирует операцию в ФН без расхода кассовой ленты.
  3. Получение фискальных параметров. Формировать и отправлять письмо клиенту необходимо строго после того, как драйвер ККТ успешно закрыл чек и вернул в 1С фискальные реквизиты (номер ФД, фискальный признак ФПД, дату и время фискализации).

Архитектура отправки чеков в типовых решениях 1С

Посмотрим, как устроен типовой механизм в решениях на базе Библиотеки подключаемого оборудования (БПО). При самостоятельной доработке конфигураций (например, 1С:Управление торговлей 10.3) рекомендуется придерживаться аналогичной схемы:

  1. Настройка способа отправки. В параметрах кассы ККМ предусматривается выбор: отправлять чек через ОФД или средствами конфигурации.
  2. Регистрация в очереди отправки. При успешной фискализации чека создается запись в служебном регистре сведений (например, ОчередьЭлектронныхЧеков), куда записываются адрес получателя, ссылка на документ и полученные от кассы фискальные реквизиты.
  3. Асинхронная отправка писем. Отправка выполняется регламентным заданием или в фоновом потоке, чтобы исключить задержки на кассовом узле при возможных сбоях почтового сервера или медленном интернет-соединении.
  4. Формирование HTML-письма. Текст письма собирается по заранее подготовленному HTML-шаблону, в который подставляются строки чека и фискальные данные.

Пример реализации очереди и отправки письма средствами 1С

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


// Формирование и отправка электронного чека покупателю
Процедура ОтправитьЭлектронныйЧек(АдресПолучателя, ПараметрыЧека, ФискальныеДанные) Экспорт

    // 1. Настройка почтового профиля
    Профиль = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP = "smtp.yandex.ru";
    Профиль.ПортSMTP          = 465;
    Профиль.ПользовательSMTP  = "kassa@company.ru";
    Профиль.ПарольSMTP        = "СпециальныйПарольПриложения";
    Профиль.ИспользоватьSSLSMTP = Истина;

    // 2. Формирование тела письма с фискальными реквизитами
    ТекстПисьма = "<html><body>";
    ТекстПисьма = ТекстПисьма + "<h2>Кассовый чек № " + СокрЛП(ФискальныеДанные.НомерЧека) + "</h2>";
    ТекстПисьма = ТекстПисьма + "<p><strong>Организация:</strong> " + ПараметрыЧека.ОрганизацияНаименование + "<br>";
    ТекстПисьма = ТекстПисьма + "<strong>ИНН:</strong> " + ПараметрыЧека.ОрганизацияИНН + "<br>";
    ТекстПисьма = ТекстПисьма + "<strong>Дата и время:</strong> " + Формат(ФискальныеДанные.ДатаВремя, "ДФ='dd.MM.yyyy HH:mm:ss'") + "<br>";
    ТекстПисьма = ТекстПисьма + "<strong>Сумма чека:</strong> " + Формат(ПараметрыЧека.СуммаДокумента, "ЧДЦ=2") + " руб.</p>";
    
    ТекстПисьма = ТекстПисьма + "<hr><p><strong>Фискальные данные:</strong><br>";
    ТекстПисьма = ТекстПисьма + "РН ККТ: " + ФискальныеДанные.РН_ККТ + "<br>";
    ТекстПисьма = ТекстПисьма + "Заводской № ФН: " + ФискальныеДанные.НомерФН + "<br>";
    ТекстПисьма = ТекстПисьма + "Номер ФД: " + ФискальныеДанные.НомерФД + "<br>";
    ТекстПисьма = ТекстПисьма + "ФПД: " + ФискальныеДанные.ФискальныйПризнак + "</p>";
    
    // Ссылка на проверку чека
    ТекстПисьма = ТекстПисьма + "<p>Проверить чек можно на сайте: <a href='https://service.nalog.ru/check-receipt/'>ФНС России</a></p>";
    ТекстПисьма = ТекстПисьма + "</body></html>";

    // 3. Подготовка почтового сообщения
    Письмо = Новый ИнтернетПочтовоеСообщение;
    Письмо.ИмяОтправителя = "Касса " + ПараметрыЧека.ОрганизацияНаименование;
    Письмо.Отправитель.Адрес = "kassa@company.ru";
    Письмо.Получатели.Добавить(АдресПолучателя);
    Письмо.Тема = "Электронный кассовый чек № " + СокрЛП(ФискальныеДанные.НомерЧека);
    
    Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);

    // 4. Отправка сообщения
    Почта = Новый ИнтернетПочта;
    Попытка
        Почта.Подключиться(Профиль);
        Почта.Послать(Письмо);
        Почта.Отключиться();
    Исключение
        Почта.Отключиться();
        ЗаписьЖурналаРегистрации("Отправка электронного чека", УровеньЖурналаРегистрации.Ошибка,,, 
            ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Рекомендации по стабильной работе механизма

Для предотвращения ошибок и блокировок учтем следующие нюансы:

  1. Использование паролей приложений. Современные почтовые сервисы (Yandex, Mail.ru, Gmail) запрещают авторизацию по обычному паролю учетной записи. Обязательно сгенерируйте в личном кабинете почты отдельный «Пароль для внешних приложений».
  2. Валидация адресов. Перед отправкой адреса в кассу и почтовый модуль выполняйте синтаксическую проверку строки на корректность e-mail адреса, чтобы предотвратить сбои драйвера ККТ.
  3. Повторные попытки при сбоях. При использовании фоновой очереди предусмотрите счетчик попыток отправки: если почтовый сервер временно недоступен, регламентное задание должно повторить отправку через несколько минут.
← На главную