Переход на онлайн-кассы по требованиям 54-ФЗ вызвал множество вопросов у пользователей и разработчиков решений на базе 1С:Предприятие 7.7. Платформа 7.7 официально снята с активного развития, однако подключить современные фискальные регистраторы и работать в рамках закона возможно. Разберем практические способы интеграции ККТ с конфигурациями 1С 7.7 (включая типовую конфигурацию «Торговля + Склад 9.2»), посмотрим на примеры взаимодействия с драйверами через COM-объекты и разберем частые ошибки при работе с форматами фискальных данных (ФФД).
Подключение фискальных регистраторов нового образца к платформе 7.7 реализуется несколькими способами в зависимости от производителя кассы и степени доработки конфигурации:
DrvFR.dll от «Штрих-М» или FprnM1C.dll от «АТОЛ»).Рассмотрим пример кода на встроенном языке 1С 7.7, который выполняет установку соединения с фискальным регистратором, инициализирует таблицы налогов, реквизитов организации, признаков работы по 54-ФЗ и выполняет операцию открытия смены. В данном примере используется обращение к COM-объекту драйвера DrvFR:
Функция ОперацияОткрытьСмену(Объект, НомерЛУ, Пароль, ПараметрыККТ)
Результат = "";
Если Объект = Неопределено Тогда
Результат = "Торговое оборудование не подключено.";
Возврат Результат;
КонецЕсли;
Объект.НомерЛУ = НомерЛУ;
Объект.УстановитьАктивноеЛУ;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Возврат Результат;
КонецЕсли;
Объект.Пароль = Пароль;
Объект.УстановитьСвязь;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Возврат Результат;
КонецЕсли;
Если ПараметрыККТ.ККМФз54ОнЛайн Тогда
// Запись налоговых ставок в таблицу 6
Для НомерНалога = 1 По 6 Цикл
Объект.Пароль = Пароль;
Объект.TableNumber = 6;
Объект.RowNumber = НомерНалога;
Объект.FieldNumber = 1;
Объект.ValueofFieldInteger = ПараметрыККТ.ПолучитьАтрибут("Налог" + НомерНалога);
Объект.GetFieldStruct;
Объект.WriteTable;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Возврат Результат;
КонецЕсли;
КонецЦикла;
// Режим исчисления скидок (Таблица 17, Поле 3)
Объект.Пароль = Пароль;
Объект.TableNumber = 17;
Объект.RowNumber = 1;
Объект.FieldNumber = 3;
Объект.ValueofFieldInteger = 2;
Объект.GetFieldStruct;
Объект.WriteTable;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Возврат Результат;
КонецЕсли;
// Настройка печати бумажного чека (0 - печатать, 2 - только электронно)
Объект.Пароль = Пароль;
Объект.TableNumber = 17;
Объект.RowNumber = 1;
Объект.FieldNumber = 7;
Если ПараметрыККТ.ОтправлятьТолькоЭлектронно Тогда
Объект.ValueofFieldInteger = 2;
Иначе
Объект.ValueofFieldInteger = 0;
КонецЕсли;
Объект.GetFieldStruct;
Объект.WriteTable;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Возврат Результат;
КонецЕсли;
// Настройка системы налогообложения и реквизитов (Таблица 18)
Объект.Пароль = Пароль;
Объект.TableNumber = 18;
Объект.RowNumber = 1;
Объект.FieldNumber = 5;
Объект.ValueofFieldInteger = ПараметрыККТ.КодНалогооблажения;
Объект.GetFieldStruct;
Объект.WriteTable;
// Реквизиты организации и адреса
Объект.FieldNumber = 7;
Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.Организация));
Объект.GetFieldStruct;
Объект.WriteTable;
Объект.FieldNumber = 9;
Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.Адрес));
Объект.GetFieldStruct;
Объект.WriteTable;
Объект.FieldNumber = 14;
Объект.ValueofFieldString = ВРЕГ(СокрЛП(ПараметрыККТ.МестоРасчетов));
Объект.GetFieldStruct;
Объект.WriteTable;
// Передача ИНН кассира для ФФД 1.05 и выше (Тег 1203)
Если ПараметрыККТ.ФФД > 0 Тогда
Если ПустаяСтрока(ПараметрыККТ.ИННКассира) = 0 Тогда
Объект.Пароль = Пароль;
Объект.НомерТега = 1203;
Объект.ТипТега = 7;
Объект.ЗначениеТегаСтрока = СокрЛП(ПараметрыККТ.ИННКассира);
Объект.FNSendTagOperation;
Объект.СтрокаДляПечати = "";
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
Объект.РазорватьСвязь;
Возврат Результат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Выполнение команды открытия смены
Объект.ОткрытьСмену;
Если Объект.Результат <> 0 Тогда
Результат = Объект.ОписаниеРезультата;
КонецЕсли;
Объект.РазорватьСвязь;
Возврат Результат;
КонецФункции
Разберем типичные неполадки, возникающие при эксплуатации кассового оборудования под управлением 1С 7.7:
Во время формирования Z-отчета фискальный накопитель выполняет серию криптографических процедур и формирует итоговый фискальный документ для передачи в ОФД. Этот процесс занимает значительно больше времени, чем печать стандартного фискального чека. Если в модуле 1С установлен стандартный таймаут ожидания ответа устройства (100–300 мс), платформа 7.7 разрывает соединение по таймауту, не дождавшись подтверждения от ККТ. При этом печать чека прерывается.
Решение: перед выполнением команд ЗакрытьСмену или ПечатьОтчетаСГашением увеличьте таймаут порта драйвера (свойство Timeout) до 3000–5000 мс, а при подключении кассы через сеть (Ethernet, RNDIS) или через удаленный рабочий стол (RDP) — до 10000 мс.
Данная ошибка возникает в драйверах при попытке передать параметры формата ФФД 1.05/1.2 с помощью методов, предназначенных для простых атомарных реквизитов (например, вызов FNSendTagOperation для реквизитов агентских схем).
Решение: тег 1222 (признак агента по предмету расчета) относится к составным структурам (STLV-тегам) либо передается строго внутри структуры описания товарной позиции (предмета расчета). Кроме того, проверьте параметры фискализации аппарата: если при регистрации ККТ в накопителе не был включен признак работы в качестве агента, прошивка кассы будет возвращать ошибку неподдерживаемой команды на любые попытки передать агентские теги.
В зависимости от версии ФФД (1.00, 1.05, 1.2) и производителя ККТ меняется привязка секций к ставкам НДС. Убедитесь, что номера налоговых ставок в таблицах кассового аппарата (таблица 6 для «Штрих-М») строго соответствуют индексам ставок, передаваемым из модуля 1С 7.7.