С развитием законодательства в области применения контрольно-кассовой техники (54-ФЗ), пользователи платформы 1С:Предприятие 7.7 столкнулись с серьезным вызовом. Последние изменения требуют передачи в чек дополнительных реквизитов, таких как наименование покупателя (тег 1227), ИНН покупателя (тег 1228), страна происхождения товара и регистрационный номер таможенной декларации (ГТД). Стандартные обработки обслуживания и старые драйверы зачастую не поддерживают этот функционал. В данной статье мы подробно разберем, как модернизировать систему под новые требования.
Проанализируем текущую ситуацию. Большинство внедрений на "семерке" исторически использовали драйвер Атол версии 8.х. Однако этот драйвер считается устаревшим и не поддерживает полноценную работу с новыми форматами фискальных данных (ФФД 1.05 и 1.2), а также передачу специфических тегов для B2B-расчетов. Основная рекомендация экспертов и разработчиков — переход на драйвер Атол 10-й версии (DTO 10).
Важно отметить, что драйвер 10-й версии прекрасно работает в среде 1С 7.7 через механизм COM. Он поддерживает современные операционные системы (от Windows XP до Windows 11) и позволяет гибко управлять всеми параметрами чека. Рассмотрим подробнее, как организовать это взаимодействие.
Первым шагом нам необходимо инициализировать объект драйвера. В отличие от 8-й версии, где использовалась компонента FprnM1C.dll, в 10-й версии мы создаем объект AddIn.Fptr10. Разберем пример кода для инициализации:
Попытка
ОбъектДрайвера = СоздатьОбъект("AddIn.Fptr10");
Сообщить("Драйвер Атол 10 успешно загружен");
Исключение
Предупреждение("Не удалось создать объект драйвера Атол 10. Проверьте регистрацию библиотеки.");
Возврат;
КонецПопытки;
После создания объекта необходимо установить параметры связи с кассой (порт, скорость, модель) и вызвать метод open(). Обратите внимание, что в 10-м драйвере параметры передаются не через свойства объекта, а через специализированные методы setParam.
Выясним, как передать данные контрагента при расчетах между юридическими лицами. Согласно 54-ФЗ, это обязательное требование с 2019 года. Нам понадобятся теги 1227 и 1228. В архитектуре DTO 10 это реализуется следующим образом:
setParam с соответствующим номером тега.utilFormTlv или напрямую передаем параметры в структуру регистрации.Посмотрим на пример формирования данных покупателя в коде 1С 7.7:
// Установка наименования покупателя (Тег 1227)
ОбъектДрайвера.setParam(1227, "ООО 'Ромашка'");
// Установка ИНН покупателя (Тег 1228)
ОбъектДрайвера.setParam(1228, "770123456789");
// Применение параметров покупателя
ОбъектДрайвера.utilFormTlv();
Проанализируем ситуацию с типами товаров и услуг. Теперь недостаточно просто указать наименование и цену. Нужно четко определить, что мы продаем: товар, подакцизный товар, услугу или аванс. Для этого используется тег 1212. Рассмотрим основные значения:
При регистрации позиции чека (метод registration) необходимо добавить этот параметр. Если этого не сделать, касса может подставить значение по умолчанию, что приведет к ошибкам в налоговой отчетности.
Работа с современными драйверами в устаревшей платформе имеет свои "подводные камни". Рассмотрим наиболее важные из них:
1. Типы данных: 1С 7.7 не всегда корректно передает числовые значения с плавающей точкой (Double) в COM-объекты. Иногда драйвер может округлить копейки некорректно. Чтобы избежать этого, рекомендуется передавать количество и цену, предварительно приведя их к строке или используя методы явного преобразования типа, предусмотренные в API Атола.
2. Работа с датами: Формат даты в 1С 7.7 отличается от того, что ожидает драйвер. При необходимости передачи даты (например, в чеках коррекции) следует формировать строку в формате ГГГГ.ММ.ДД или использовать VBScript в качестве прокладки для преобразования типов.
3. Передача сложных структур (ByteArray): Для работы с маркировкой товаров (тег 1162) требуется передача байтовых массивов. Поскольку "семерка" не поддерживает этот тип данных напрямую, используйте метод setParamStrHex(). Вы передаете строку, представляющую шестнадцатеричный код маркировки, а драйвер сам преобразует её в нужный формат для кассового аппарата.
Соберем все знания воедино и проанализируем полный цикл регистрации одной товарной позиции в чеке:
// Задаем параметры позиции
ОбъектДрайвера.setParam(ОбъектДрайвера.LIBFPTR_PARAM_COMMODITY_NAME, "Товар импортный");
ОбъектДрайвера.setParam(ОбъектДрайвера.LIBFPTR_PARAM_PRICE, 100.50);
ОбъектДрайвера.setParam(ОбъектДрайвера.LIBFPTR_PARAM_QUANTITY, 1);
ОбъектДрайвера.setParam(ОбъектДрайвера.LIBFPTR_PARAM_TAX_TYPE, ОбъектДрайвера.LIBFPTR_TAX_VAT20);
// Передаем Тег 1212 (Признак предмета расчета - Товар)
ОбъектДрайвера.setParam(1212, 1);
// Если товар импортный, передаем Страну (1230) и ГТД (1231)
ОбъектДрайвера.setParam(1230, "643"); // Код страны (Россия для примера)
ОбъектДрайвера.setParam(1231, "10101010/121212/0001234");
// Регистрация позиции
ОбъектДрайвера.registration();
Важно помнить, что программная часть в 1С — это только половина дела. Чтобы ККТ Атол корректно восприняла новые теги (особенно 1227 и 1228), аппарат должен работать на Платформе 5.0 (прошивка версии 5.х). На старых прошивках 2.5 даже при использовании 10-го драйвера некоторые реквизиты могут просто игнорироваться кассой.
Подведем итог: переход на DTO 10 в 1С 7.7 является единственным надежным способом обеспечить соответствие актуальным требованиям законодательства. Несмотря на то, что это требует переписывания модуля печати чеков, гибкость 10-го драйвера позволяет реализовать любые задачи — от простой розничной продажи до сложных B2B-расчетов и работы с маркировкой Честный ЗНАК.