В каком формате передавать номер телефона и электронную почту покупателя в фискальном чеке (тег 1008)?

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

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

Законодательные требования и тег 1008

Согласно Приказу ФНС России, формат фискальных данных (ФФД) строго регламентирует структуру передаваемых полей. За адрес покупателя отвечает тег 1008 («адрес покупателя»). Проанализируем основные требования к этому полю:

  1. Тип данных: Строка.
  2. Максимальная длина: 64 символа.
  3. Содержание: Либо номер телефона, либо адрес электронной почты.

Важно понимать, что тег 1008 является обязательным в составе фискального документа только в том случае, если покупатель до момента расчета предоставил свои данные для получения чека в электронном виде. Если данные не переданы, тег может отсутствовать в печатной форме, но в электронном виде для ОФД его формат должен быть безупречен.

Правила форматирования номера телефона

Разберем, какой вид должен иметь номер телефона при передаче в драйвер ККТ. Многие начинающие разработчики совершают ошибку, передавая номер так, как он записан в карточке контрагента (со скобками, тире и пробелами). Однако ФФД требует жесткого соответствия шаблону +{Ц}, где {Ц} — это последовательность цифр.

Основные правила:

Пример корректного формата: +79123456789. Если передать номер в формате 89123456789 или +7 (912) 345-67-89, современные драйверы (например, АТОЛ 10-й версии) вернут ошибку «Неверный формат параметра» еще на стадии формирования чека в памяти ККТ.

Правила форматирования адреса электронной почты

Для e-mail формат более привычен, но также имеет свои ограничения. Шаблон определяется как {С}@{С}, где {С} — набор допустимых символов строки. Несмотря на кажущуюся гибкость, следует придерживаться стандарта RFC 5322. Максимальная длина в 64 символа накладывает серьезное ограничение на длинные корпоративные адреса — это нужно учитывать при валидации данных в 1С перед отправкой на кассу.

Реализация очистки данных в 1С

Проанализируем ситуацию: в базе 1С телефон часто хранится в виде +7 (999) 000-11-22. Нам необходимо написать функцию, которая «причешет» эту строку перед передачей в объект ДанныеЧека. Посмотрим на пример кода, который решает эту задачу:


Функция ПодготовитьТелефонДляККТ(Знач ИсходныйТелефон) Экспорт
    // Удаляем все символы, кроме цифр
    ЧистыйНомер = "";
    Для Индекс = 1 По СтрДлина(ИсходныйТелефон) Цикл
        Символ = Сред(ИсходныйТелефон, Индекс, 1);
        Если Найти("0123456789", Символ) > 0 Тогда
            ЧистыйНомер = ЧистыйНомер + Символ;
        КонецЕсли;
    КонецЦикла;
    
    // Обработка префикса
    Если Лев(ЧистыйНомер, 1) = "8" Тогда
        ЧистыйНомер = "7" + Сред(ЧистыйНомер, 2);
    КонецЕсли;
    
    Если Лев(ЧистыйНомер, 1) <> "7" И СтрДлина(ЧистыйНомер) = 10 Тогда
        ЧистыйНомер = "7" + ЧистыйНомер;
    КонецЕсли;

    Возврат "+" + ЧистыйНомер;
КонецФункции

Рассмотрим, что делает этот код: мы итерируем по строке, оставляя только цифры. Затем проверяем первый символ. Если пользователь ввел номер с «восьмерки», мы заменяем её на «7», так как международный формат требует именно код страны. В конце обязательно добавляем «+».

Особенности работы с Библиотекой подключаемого оборудования (БПО)

Если вы используете типовые конфигурации 1С, работа с кассой обычно идет через БПО. В структуре ДанныеЧека (или ПараметрыЧека) есть поле CustomerEmailPhone. Выясним важный нюанс: современные версии БПО пытаются автоматически форматировать строку, но полагаться на это на 100% не стоит. Если вы разрабатываете собственное расширение, лучше передать уже очищенную строку, чтобы избежать двусмысленности.

Почему нельзя передать несколько адресов?

Иногда клиенты просят отправлять чек сразу и на телефон, и на почту. Однако текущий протокол ФФД (включая версии 1.1 и 1.2) не поддерживает передачу нескольких значений в теге 1008. В это поле записывается только один идентификатор. Если вы попытаетесь передать строку вида +79123456789, test@mail.ru, драйвер ККТ выдаст ошибку, так как символ запятой или точки с запятой недопустим для формата телефона, а наличие «+» и цифр в начале не соответствует формату e-mail.

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

Валидация и ответственность

Некорректный формат данных в теге 1008 может привести к серьезным последствиям:

Подведем итог: всегда очищайте строку от лишних символов, проверяйте наличие знака «+» для телефонов и символа «@» для почты. Длина строки не должна превышать 64 символа. Соблюдение этих простых правил гарантирует корректную работу вашей системы с любым ОФД и фискальным регистратором.

← На главную