Многие компании до сих пор успешно используют надежную платформу 1С 7.7 для ведения торгового учета, например, в конфигурации "Торговля и Склад". Однако законодательство не стоит на месте: вводятся новые форматы фискальных данных (ФФД 1.2), обязательная маркировка через "Честный знак" и новые ставки НДС. Производители кассового оборудования, такие как АТОЛ, переводят свои новые устройства на Платформу 5.0, которая работает исключительно с Драйвером ККТ версии 10 (ДТО 10). Старые драйверы (ДТО 8) больше не поддерживают новые требования и оборудование.
Разберем по шагам, как подружить современную кассу АТОЛ с классической 1С 7.7, какие подводные камни нас ожидают и как правильно написать код для нативного взаимодействия с драйвером.
Проанализируем ситуацию с разрядностью операционных систем и платформы 1С. Важно помнить, что 1С 7.7 является исключительно 32-битным (x86) приложением. Это означает, что даже если на вашем компьютере установлена современная 64-битная версия Windows, драйвер кассы для связи с 1С должен быть строго 32-битным.
Рассмотрим порядок действий при установке:
ЗагрузитьВнешнююКомпоненту. Зачастую это приводит к ошибкам.addin_fptr10_x86.dll с помощью утилиты RegSvr32. Путь к файлу обычно выглядит так: C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\addin_fptr10_x86.dll.После успешной регистрации библиотеки в системе, компонента станет доступна для прямого вызова из кода 1С через COM-объект.
Посмотрим на пример кода, который позволит нам инициализировать драйвер и подключиться к кассе. Использовать будем так называемые "нативные" обращения напрямую к методам объекта AddIn.Fptr10. Этот способ работает значительно стабильнее, чем использование различных XML-оберток.
Создадим процедуру инициализации:
Процедура ПодключениеККМ()
// Создаем COM-объект драйвера
FR = СоздатьОбъект("AddIn.Fptr10");
// Устанавливаем модель ККТ (АВТО)
FR.setSingleSetting(FR.LIBFPTR_SETTING_MODEL, Строка(FR.LIBFPTR_MODEL_ATOL_AUTO));
// Указываем тип порта (COM-порт или USB, эмулирующий COM)
FR.setSingleSetting(FR.LIBFPTR_SETTING_PORT, Строка(FR.LIBFPTR_PORT_COM));
// Указываем номер COM-порта (например, берем из настроек пользователя)
FR.setSingleSetting(FR.LIBFPTR_SETTING_COM_FILE, глПользователь.ККТ.ПортПодключения);
// Применяем настройки
FR.applySingleSettings();
// Пытаемся открыть соединение
Если FR.open() <> 0 Тогда
Сообщить("Ошибка подключения ККМ: " + FR.errorDescription());
Возврат;
КонецЕсли;
Сообщить("ККТ успешно подключена!");
КонецПроцедуры
Важно: Обратите внимание на метод applySingleSettings(). Без его вызова драйвер не применит переданные параметры порта и модели, и соединение не будет установлено.
Переход на ДТО 10 жизненно необходим для тех, кто продает маркированные товары (обувь, одежда, вода, молочная продукция, табак). Выясним причину: работа по протоколу ФФД 1.2 требует сложной валидации кодов маркировки перед печатью чека.
Огромный плюс работы с объектом AddIn.Fptr10 заключается в том, что драйвер берет всю сложную работу на себя. Вам не нужно писать в 1С 7.7 громоздкие алгоритмы перекодировки штрихкода в массив байтов для передачи в тег 1162. Вы просто передаете строку с кодом маркировки в соответствующий метод драйвера, а он сам разбирает структуру кода и отправляет нужные запросы в "Честный знак" через ОФД.
Аналогичная ситуация и с новыми ставками НДС (например, 5% или 7%). В драйверах старых поколений они отсутствуют, в то время как 10-я версия драйвера позволяет передавать их встроенными константами.
Разберем, как реализовать отправку электронного чека (на телефон или почту), что также является обязательным требованием по просьбе покупателя. В ДТО 10 это делается предельно просто перед моментом пробития чека.
Нам необходимо передать контактные данные в Тег 1008. В коде 1С это выглядит как передача параметра:
// Передаем телефон или email покупателя
FR.setParam(1008, "+79991234567");
// Или FR.setParam(1008, "client@email.com");
Проанализируем ситуацию с закрытием авансов и предоплат. 10-й драйвер очень строго следит за логическим контролем сумм. Если вы пробиваете чек на отгрузку в счет ранее внесенного аванса, вам необходимо перебрать все строки (товары) документа.
Для каждой позиции нужно корректно передать "Признак способа расчета" (например, полный расчет, частичная предоплата и т.д.) и "Признак предмета расчета" (товар, услуга, платеж).
Строгий контроль: Сумма всех товарных строк в чеке должна математически до копейки сходиться с суммами, переданными в блоке оплаты. Если клиент платит часть наличными, часть банковской картой, а часть закрывается зачетом аванса — вы должны передать все эти три суммы в соответствующие типы оплат драйвера. Если будет расхождение хотя бы на 1 копейку, чек будет аннулирован с ошибкой ФН.
Если вам поручили доработать интеграцию в 1С 7.7, но сама касса находится на торговой точке, не отчаивайтесь. Разберем, как тестировать код. В экосистеме драйверов АТОЛ 10-й версии присутствует встроенный режим эмуляции.
Вы можете выбрать модель ККТ как "Эмулятор". В этом режиме драйвер будет принимать все ваши команды из 1С, проверять логическую целостность (включая совпадение сумм, корректность тегов и работу с частичными оплатами) и выводить итоговый фискальный чек просто на экран компьютера в виде текстового окна. Это идеальный инструмент для программиста 1С 7.7, чтобы безопасно отладить код без расхода чековой ленты и создания тестовых фискальных документов в реальной кассе.