При подключении нового фискального регистратора АТОЛ 30Ф (или других современных моделей ККТ от компании АТОЛ) в относительно старых релизах конфигурации 1С:Розница 2.2 (например, версии 2.2.2.x – 2.2.4.x) пользователи часто сталкиваются с неприятной ситуацией. Тест связи с оборудованием в настройках торгового оборудования проходит успешно, однако при попытке открыть смену система аварийно завершает операцию и выводит критическое сообщение об ошибке:
При выполнении операции произошла ошибка. Ошибка вызова метода <ОбъектДрайвера.ОткрытьСмену> {ОбщийМодуль.ПодключаемоеОборудованиеУниверсальныйДрайверКлиентМодуль(490)} Недостаточно фактических параметров.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы взаимодействия платформы 1С с драйверами торгового оборудования и рассмотрим несколько надежных способов устранения этой ошибки без обязательного (и часто невозможного по разным причинам) обновления всей информационной базы до самого последнего релиза.
Для того чтобы понять суть проблемы, нам необходимо обратиться к архитектуре взаимодействия 1С с фискальными регистраторами. Фирма «1С» разрабатывает так называемую Библиотеку подключаемого оборудования (БПО), которая встраивается во все типовые конфигурации (включая «1С:Розница», «1С:Управление торговлей» и др.).
Каждый производитель торгового оборудования (в данном случае АТОЛ) поставляет свою внешнюю компоненту (драйвер), которая должна соответствовать стандартам БПО определенной версии. С течением времени стандарты БПО развиваются, поддерживая новые требования законодательства (например, 54-ФЗ, требования ФФД 1.05 и 1.2). Соответственно, меняются и сигнатуры (набор ожидаемых параметров) программных методов внешних компонент.
Проанализируем программный код старой БПО, который пытается вызвать метод открытия смены. В модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент (или аналогичном модуле интеграции) вызов выглядит следующим образом:
Если ПараметрыПодключения.Свойство("РевизияИнтерфейса") И ПараметрыПодключения.РевизияИнтерфейса > 1004 Тогда
Попытка
Ответ = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства);
// ...
Обратите внимание: в устаревшей версии БПО метод ОткрытьСмену() вызывается всего с одним параметром — уникальным идентификатором устройства (ПараметрыПодключения.ИДУстройства).
Однако современные драйверы ККТ АТОЛ (начиная с версий ДТО 8.14, 9.11, а также актуальная 10-я платформа драйверов), разработанные под требования стандартов БПО ревизий 2.0 и выше, ожидают в этом методе совершенно другую структуру данных:
(ИДУстройства, Кассир, НомерСмены, НомерДокумента).(ИДУстройства, ПараметрыОперации, ПараметрыСостояния, НомерСмены, НомерДокумента).Когда старая конфигурация 1С передает новой компоненте драйвера АТОЛ всего один параметр вместо требуемых четырех или пяти, внешняя компонента сообщает о критической ошибке нехватки данных: «Недостаточно фактических параметров». Драйвер просто «не понимает» усеченную команду и блокирует выполнение операции на кассе.
Рассмотрим детально три основных способа решения этой проблемы.
Если у вас используется не базовая, а Проф-версия «1С:Розница», конфигурацию можно снять с поддержки (или включить возможность изменения с сохранением поддержки). Это позволит нам внести точечные изменения непосредственно в код общего модуля, адаптировав его под новые требования драйвера АТОЛ.
Разберем по шагам, как это сделать:
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ОткрытьСмену). Ориентируйтесь по номеру строки из вашей ошибки.В зависимости от версии установленного драйвера, вам потребуется передать 4 или 5 параметров. Наиболее универсальный способ для ДТО 9 / ДТО 10 — передача четырех параметров. Перепишем этот блок кода следующим образом:
// Объявим локальные переменные для хранения возвращаемых драйвером значений
НомерСмены = 0;
НомерДокумента = 0;
// В качестве кассира передадим имя текущего пользователя системы
// (в реальных условиях здесь должно быть ФИО ответственного лица)
ИмяКассира = СокрЛП(ПараметрыПодключения.ПараметрыСовместимости.АвторизованныйПользователь);
Если ПустаяСтрока(ИмяКассира) Тогда
ИмяКассира = "Администратор";
КонецЕсли;
Попытка
// Вызываем метод с 4 параметрами, удовлетворяя требования нового драйвера
Ответ = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства, ИмяКассира, НомерСмены, НомерДокумента);
Если НЕ Ответ Тогда
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
КонецЕсли;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ОткрытьСмену>.'") + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
Важное примечание: Если драйвер требует строго ревизию 2.2 (5 параметров), вам потребуется инициализировать структуры для параметров операции и состояния. Однако в 90% случаев для драйверов АТОЛ 9.x достаточно описанного выше четырехпараметрического вызова. После внесения изменений сохраните конфигурацию БД и проверьте работу в режиме предприятия.
Если вы не хотите или не имеете возможности вносить изменения в программный код конфигурации (например, у вас базовая версия «1С:Розница», в которой редактирование кода запрещено на уровне платформы), единственным жизнеспособным решением будет замена версии драйвера ККТ.
Нам необходимо установить именно ту версию ДТО АТОЛ, которая сертифицировалась разработчиками «1С» под ваш конкретный (старый) релиз БПО. На тот момент драйверы еще поддерживали обратную совместимость и умели обрабатывать метод ОткрытьСмену() с единственным параметром.
Выполним следующие действия:
Этот способ позволяет быстро вернуть систему в рабочее состояние, но помните о его существенном ограничении: старые драйверы могут некорректно работать с новыми реквизитами маркировки (если вы торгуете табаком, обувью или другими маркированными товарами) и могут не поддерживать актуальный формат фискальных данных ФФД 1.2.
Бывают ситуации, когда администратор уже удалил новый драйвер и установил старый (или наоборот — обновил конфигурацию 1С), но ошибка «Недостаточно фактических параметров» продолжает упорно появляться. Происходит это из-за механизма кэширования внешних компонент платформой 1С.
При первом подключении оборудования 1С копирует библиотеку драйвера (файл .dll) во внутренний локальный каталог пользователя и в дальнейшем обращается именно к этой копии, игнорируя системные обновления. Чтобы исправить это, произведем принудительную очистку кэша компонент:
%appdata%\1C\1cv8\ExtCompT\ (обычно это папка вида C:\Users\ИмяПользователя\AppData\Roaming\1C\1cv8\ExtCompT\).ExtCompT. Именно здесь хранятся «залипшие» версии интеграционных библиотек ККТ.В процессе обсуждения подобных проблем на форумах часто звучит совет: «Не трогайте код, просто пробейте первый чек — касса сама автоматически откроет смену!».
Мы настоятельно не рекомендуем использовать этот обходной путь в реальной торговле по следующим причинам:
Таким образом, правильным подходом является обеспечение штатного и бесконфликтного открытия смены непосредственно из интерфейса 1С с использованием одного из детально описанных выше методов.