Как исправить ошибку «Слишком много фактических параметров» при печати чека на ККМ АТОЛ в 1С:Бухгалтерии?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Торговля и дистрибуция
← На главную

При настройке торгового оборудования и печати фискальных чеков из документов (например, из Приходного кассового ордера) в конфигурации «1С:Бухгалтерия предприятия 2.0» разработчики и администраторы могут столкнуться с платформенной ошибкой: «Слишком много фактических параметров». Разберем причины возникновения этой проблемы и способы ее устранения.

Анализ причины возникновения ошибки

Рассмотрим, почему возникает данная ошибка. При вызове метода внешней компоненты драйвера ККТ платформа 1С сверяет количество аргументов, передаваемых из кода, с сигнатурой метода, зарегистрированной во внешней библиотеке (DLL).

В старых версиях драйверов АТОЛ (например, АТОЛ 8.х) и обработки обслуживания ATOLkkt.epf метод СформироватьЧек принимал 8 параметров, среди которых явным образом передавалось имя кассира:


Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, Кассир, Электронно, 
                ДанныеЧека, НомерЧека, НомерСмены, ФискальныйПризнак, АдресСайтаПроверки);

Однако при переходе на новые версии драйверов (например, АТОЛ 9.х или 10.х) сигнатура функций работы с чеками изменилась. В драйвере 9.х ФИО и ИНН кассира передаются непосредственно внутрь структуры XML-пакета ДанныеЧека (теги CashierName и CashierINN), а отдельный параметр Кассир из вызова метода был убран. В результате обновленный метод принимает меньше параметров.

Если обработка обслуживания пытается вызывать метод драйвера по старому образцу с 8 параметрами, платформа 1С генерирует исключение «Слишком много фактических параметров».

Способ 1. Корректировка кода вызова в обработке обслуживания

Проанализируем вариант исправления вызова метода в коде обработки обслуживания. Если в системе используется драйвер версии 9.х, необходимо изменить вызов метода и убрать из него передачу кассира отдельным аргументом.

Посмотрим на пример вызова метода ProcessCheck:


Результат = ОбъектДрайвера.ProcessCheck(ПараметрыПодключения.ИДУстройства, Электронно, 
                ДанныеЧека, НомерЧека, НомерСмены, ФискальныйПризнак, АдресСайтаПроверки);

Выясним важный момент: при удалении аргумента Кассир из вызова функции убедитесь, что данные кассира корректно формируются внутри XML-структуры ДанныеЧека, иначе они не отобразятся в фискальном чеке.

Способ 2. Приведение в соответствие версий драйвера и обработки

Если доработка кода вручную не требуется, разберем альтернативные шаги по решению проблемы:

  1. Проверить версию драйвера в параметрах подключения: Убедитесь, что выбранная в 1С обработка обслуживания соответствует установленному драйверу. Если используется обработка под 8-ю версию драйвера (ATOLkkt.epf), в параметрах подключения ККМ должен быть указан драйвер АТОЛ 8.х, а не 9.х.
  2. Использовать подходящую обработку обслуживания: При работе с драйверами АТОЛ 9.х следует использовать версию обработки обслуживания, адаптированную под API 9-й серии драйверов.
  3. Очистить кэш временных файлов: При работе в терминальном режиме (RDP) платформа 1С может распаковывать DLL внешней компоненты во временные папки пользователя. При смене версий драйверов очистите каталог %TEMP% и кэш 1С, чтобы заставить платформу загрузить актуальную версию библиотеки.
← На главную