Как в 1С 7.7 на кассах Атол реализовать печать ИНН и наименования покупателя

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

С вступлением в силу изменений в 54-ФЗ (согласно 192-ФЗ), при расчетах между организациями и индивидуальными предпринимателями в чеке стали обязательными реквизиты покупателя: наименование (тег 1227) и ИНН (тег 1228). Для пользователей устаревшей, но все еще надежной платформы 1С:Предприятие 7.7, это стало серьезным вызовом. В данной статье мы подробно разберем, как реализовать передачу этих данных на кассовых аппаратах Атол, используя драйверы версии 8.16.x.

Выбор драйвера и требования к оборудованию

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

  1. Прошивка ККТ: Версия внутреннего ПО кассы должна быть не ниже 7733 (для платформы 2.5). Если вам требуются также теги 1230 (код страны) и 1231 (номер ГТД), то ориентироваться стоит на прошивку 7942 и выше.
  2. Код защиты: Для работы функционала ФФД 1.05 и печати новых реквизитов на старых прошивках должен быть введен «Код защиты №10».
  3. Версия ФФД: Касса должна быть фискализирована под формат фискальных данных 1.05 или 1.1.

Подключение кассы через внешнюю компоненту

Рассмотрим стандартный способ инициализации объекта драйвера в 1С 7.7. Мы используем программный идентификатор AddIn.FprnM45. Обратите внимание на использование компоненты FprnM1C.dll. Опытные разработчики рекомендуют копировать бесплатную версию этой DLL (из папки Bin_Free драйвера) непосредственно в каталог базы данных или в системную папку 1С.


Процедура ПодключитьККМ()
    Попытка
        Объект = СоздатьОбъект("AddIn.FprnM45");
        Сообщить("Драйвер ККМ загружен успешно.");
    Исключение
        Предупреждение("Ошибка при создании объекта драйвера Атол!");
        Возврат;
    КонецПопытки;

    Объект.DeviceEnabled = 1;
    Если Объект.ResultCode <> 0 Тогда
        Сообщить("Не удалось занять порт ККМ: " + Объект.ResultDescription);
    КонецЕсли;
КонецПроцедуры

Подготовка данных контрагента

Существует важный нюанс при передаче ИНН. Согласно требованиям форматов, ИНН юридического лица должен содержать 10 цифр, а индивидуального предпринимателя — 12 цифр. При работе с драйвером 8.x иногда требуется дополнять ИНН юридического лица двумя пробелами справа, чтобы общая длина строки составляла 12 символов. Выясним это на практике, проанализировав код подготовки:


// Подготовка ИНН покупателя
ИННКонтр = СокрЛП(Контрагент.ИНН);
Если СтрДлина(ИННКонтр) = 10 Тогда
    // Для ЮЛ иногда требуется дополнение до 12 знаков
    ИННКонтр = ИННКонтр + "  "; 
КонецЕсли;

НаимКонтрагента = СокрЛП(Контрагент.ПолноеНаименование);

Главный секрет: правильный порядок методов

Многие программисты сталкиваются с тем, что код написан верно, ошибок нет, но ИНН в чеке не печатается. Проанализируем ситуацию: атрибуты покупателя должны передаваться строго после открытия чека методом OpenCheck(), но до его закрытия. Если вы попытаетесь записать атрибуты до формирования документа, касса их проигнорирует.

Рассмотрим правильный алгоритм действий в коде обработки печати чека:


// 1. Открываем чек (тип 0 - продажа)
Объект.Password = 30; // Пароль кассира по умолчанию
Объект.CheckType = 0;
Объект.OpenCheck();

// 2. Сразу после открытия записываем атрибуты покупателя
// Тег 1227 - Наименование покупателя
Объект.AttrNumber = 1227;
Объект.AttrValue = НаимКонтрагента;
Объект.AttrPrint = 1; // Указываем, что нужно печатать на чеке
Объект.WriteAttribute();

// Тег 1228 - ИНН покупателя
Объект.AttrNumber = 1228;
Объект.AttrValue = ИННКонтр;
Объект.AttrPrint = 1;
Объект.WriteAttribute();

// 3. Регистрация позиций (товаров/услуг)
// Здесь идет цикл по табличной части документа
// Объект.Name = ... Объект.Price = ... Объект.Quantity = ...
// Объект.Registration();

Важный момент: Некоторые разработчики отмечают, что на определенных версиях прошивок атрибуты лучше «залетают», если их передавать в самом конце, перед методом CloseCheck(), но после всех оплат. Если первый вариант не сработал, попробуйте переместить блок записи атрибутов вниз.

Дополнительные реквизиты: Признак предмета расчета

Часто в чеках по умолчанию печатается «ТОВАР», хотя организация оказывает услуги. Разберем, как это изменить с помощью свойства ItemType. Это свойство устанавливается для каждой позиции чека перед вызовом метода Registration().

Основные значения ItemType для драйвера 8.16:


// Пример регистрации услуги
Объект.Name = "Консультационные услуги";
Объект.Price = 1000;
Объект.Quantity = 1;
Объект.ItemType = 4; // Указываем, что это услуга
Объект.Registration();

Сложные случаи: Оплата кредитом и авансом

Если ваша торговая операция подразумевает частичную оплату или зачет аванса, необходимо использовать метод Payment() с указанием типа закрытия TypeClose. Посмотрим на пример кода, где часть суммы оплачивается наличными, а часть — зачетом аванса:


// Сумма наличными
Объект.Summ = 500;
Объект.TypeClose = 0; // Наличные
Объект.Payment();

// Зачет аванса (предоплаты)
Объект.Summ = 200;
Объект.TypeClose = 3; // Аванс
Объект.Payment();

// Закрытие чека
Объект.CloseCheck();

Резюме

Для успешной реализации печати ИНН покупателя в 1С 7.7 на драйверах Атол ДТО 8 выполните следующие шаги:

  1. Убедитесь, что прошивка ККТ актуальна (7733+).
  2. Используйте ДТО 8.16.x.
  3. Вызывайте WriteAttribute() для тегов 1227 и 1228 внутри открытого чека (после OpenCheck).
  4. Проверьте формат ИНН (10 или 12 символов).

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

← На главную