Перевод старых конфигураций 1С 7.7, таких как «Торговля и Склад», на современные требования ФФД (форматов фискальных данных) 1.05 и выше часто вызывает вопросы у разработчиков. Основная сложность заключается в выборе подходящей библиотеки (DLL) и реализации сложной логики чека, когда клиент платит одновременно наличными, картой и частью аванса. Разберем подробно, как решить эту задачу, используя оборудование Атол.
Рассмотрим ситуацию с версиями драйверов. В среде разработчиков 1С 7.7 долгое время стандартом была 8-я серия ДТО (Драйвер Торгового Оборудования). ДТО 9 была признана тупиковой ветвью развития и практически не используется для интеграции с 7.7. ДТО 10 является актуальной версией, но требует значительного переписывания кода обработки обслуживания, так как работает через другой COM-объект — AddIn.Fptr10.
Проанализируем опыт участников сообщества: для реализации ФФД 1.05 в 1С 7.7 оптимальным выбором остается ДТО 8.16. Эта версия стабильна, поддерживает передачу необходимых тегов и работает через привычную библиотеку FPrnM1C.dll с программным идентификатором AddIn.FprnM45.
Типичная задача для магазина (например, мебельного): покупатель внес предоплату, а при получении товара доплачивает остаток наличными и картой. Нам необходимо выбить чек «Полный расчет», в котором будут указаны три формы оплаты. Выясним, как это реализовать программно.
Посмотрим на пример кода, который позволяет передать разные суммы по разным типам оплаты. Важно помнить, что метод Payment() должен вызываться для каждого вида оплаты отдельно после того, как были зарегистрированы все товары методом Registration().
// Пример распределения сумм по типам оплаты в 1С 7.7
Если Док.ПолученоНаличными <> 0 Тогда
Объект.TypeClose = 0; // 0 - Наличные
Объект.Summ = Док.ПолученоНаличными;
Объект.Payment();
КонецЕсли;
Если Док.ОплатаПоКарте <> 0 Тогда
Объект.TypeClose = 1; // 1 - Безналичные (Электронными)
Объект.Summ = Док.ОплатаПоКарте;
Объект.Payment();
КонецЕсли;
Если Док.СуммаПредоплаты <> 0 Тогда
Объект.TypeClose = 2; // 2 - Предварительная оплата (Зачетом аванса)
Объект.Summ = Док.СуммаПредоплаты;
Объект.Payment();
КонецЕсли;
Важный нюанс: индексы TypeClose жестко привязаны к настройкам таблиц в самом кассовом аппарате. Если при установке TypeClose = 2 касса всё равно выдает «Наличные», необходимо через «Тест драйвера» проверить вкладку «Параметры ККТ» — «Оплата» и убедиться, что тип оплаты №2 фискализирован как «Аванс» или «Предварительная оплата».
Для корректной работы в режиме ФФД 1.05 недостаточно просто распределить суммы. Нужно указать ККТ, что именно мы продаем: аванс это или закрытие предоплаты. Для этого используется свойство PaymentMode. Рассмотрим основные значения этого признака:
В коде 1С перед регистрацией каждой товарной позиции (метод Registration()) необходимо устанавливать это свойство. Проанализируем пример:
// Установка признака способа расчета для позиции
Объект.Name = ТоварНаименование;
Объект.Price = ТоварЦена;
Объект.Quantity = ТоварКолво;
Объект.Department = 1;
// Устанавливаем режим (например, 4 - Полный расчет)
Объект.PaymentMode = 4;
Объект.Registration();
Иногда возникают ситуации, когда код написан верно, но касса продолжает работать «по-старому». Разберем причины, по которым это происходит. Кассовые аппараты Атол хранят многие настройки в энергонезависимой памяти, и изменения в таблицах или режимах ФФД могут потребовать закрытия и открытия смены. Если вы изменили программную логику или настройки в драйвере, обязательно выполните операцию Z-отчета и откройте новую смену, чтобы параметры применились.
Также стоит проверить актуальность прошивки самого аппарата. Для работы с ФФД 1.05 и корректного отображения типов оплаты «Зачетом аванса», прошивка ККТ должна быть версии не ниже 5199 (для платформы 2.5).
Если ваша организация занимается продажей маркированных товаров (обувь, одежда, духи и т.д.), следует знать, что 8-я версия драйвера не поддерживает работу с ФФД 1.2. В этом случае переход на ДТО 10 неизбежен. При переходе на 10-й драйвер в 1С 7.7 структура вызовов изменится. Вместо свойств объекта часто используются методы установки параметров через setParam.
Подводя итог: для классической торговли без маркировки в 1С 7.7 использование Атол ДТО 8.16 является рабочим и наиболее простым решением. Главное — четко разделять вызовы Payment() по типам оплаты и не забывать про установку PaymentMode для каждой позиции чека.