Как исправить ошибку «Недостаточно фактических параметров» при открытии смены в 1С:УНФ и ККТ Viki Print

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

При работе с торговым оборудованием в старых релизах 1С:Управление нашей фирмой (УНФ), таких как 1.6.8.28, пользователи часто сталкиваются с критической ошибкой при попытке открыть кассовую смену. Проблема проявляется внезапно: даже если вчера всё работало корректно, сегодня система может выдать сообщение: «Ошибка вызова метода <ОбъектДрайвера.ОткрытьСмену>. Недостаточно фактических параметров». Особенно часто это происходит при использовании фискальных регистраторов семейства Viki Print (57Ф, 80Ф) от компании Дримкас.

В данной статье мы подробно разберем, почему возникает этот программный конфликт, проанализируем внутренний код системы и подготовим пошаговый план решения проблемы.

Выясняем причину возникновения ошибки

Давайте проанализируем ситуацию. Ошибка Недостаточно фактических параметров на языке 1С означает, что вызываемая функция или метод ожидает на вход определенное количество значений (аргументов), а программный код передает их меньше, чем требуется.

Рассмотрим, как развивалась Библиотека подключаемого оборудования (БПО), которая встроена в вашу 1С. В старых стандартах (ревизия интерфейса 1.04 и ниже) метод ОткрытьСмену принимал только один параметр — ИДУстройства. Однако с развитием законодательства и обновлением драйверов производителями оборудования (в частности, переход на драйверы версии 1.2.х от Дримкас), метод был модернизирован. Теперь он требует два или более параметров (например, добавляется выходной параметр для массива данных ответа от ККТ).

Конфигурация УНФ 1.6.8 — это достаточно старый релиз. Ее программный код «застыл» на этапе использования одного параметра. Когда вы обновляете драйвер ККТ на компьютере или в системе регистрируется новая компонента AddIn.DRVFR, старый код 1С пытается вызвать метод по-старому, а новая библиотека драйвера «отказывается» работать, так как не получила ожидаемого второго параметра.

Проверка программного кода

Давайте заглянем «под капот» системы. Обратим внимание на общий модуль ПодключаемоеОборудованиеУниверсальныйДрайвер. Именно там происходит формирование команды к драйверу. Проанализируем типичный фрагмент кода, где возникает сбой:


ИначеЕсли ПараметрыПодключения.ТипОборудования = "ФискальныйРегистратор" Тогда
    // Ветка на стандарт 1.4. Поддержка команды драйвера "ОткрытьСмену".
    Если ПараметрыПодключения.РевизияИнтерфейса > 1004 Тогда
        Попытка
            Результат = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства);
        Исключение
            Результат = Ложь;
            ВыходныеПараметры.Очистить();
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.ОткрытьСмену>.'") + Символы.ПС + ОписаниеОшибки());
            Возврат Результат;
        КонецПопытки;

В строке Результат = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства); мы видим передачу только одного аргумента. Если установленная в Windows внешняя компонента (DLL) драйвера Viki Print ожидает два аргумента, выполнение сразу уходит в блок Исключение, и мы получаем ту самую ошибку.

Способ 1: Откат и чистая установка драйвера (рекомендуемый)

Если вы не хотите вносить изменения в конфигурацию 1С (снимать ее с поддержки), самым правильным решением будет принудительное использование старой, стабильной ветки драйверов 1.1.0. Разберем этот процесс по шагам:

  1. Полное удаление ПО: Удалите текущий драйвер Viki Print через «Панель управления» -> «Программы и компоненты».
  2. Очистка реестра и системных папок: Это критический шаг. Часто после удаления драйвера в системе остается зарегистрированная DLL. Откройте командную строку от имени администратора и выполните команду: regsvr32 /u AddIn.DRVFR.dll (если вы знаете путь к файлу). Также обязательно удалите содержимое папок:
    • %AppData%\Roaming\1C\1cv8\ExtCompT
    • %AppData%\Local\Temp
  3. Установка корректной версии: Установите драйвер версии 1.1.0.520. Именно эта версия считается наиболее стабильной для работы с релизами 1С 2017–2018 годов.
  4. Перенастройка в 1С: Зайдите в раздел «Администрирование» -> «Подключаемое оборудование». Удалите текущее устройство «Фискальный регистратор» и создайте его заново. При выборе драйвера убедитесь, что версия компоненты отображается как 1.1.

Способ 2: Программная корректировка вызова (для разработчиков)

Если обновление драйвера невозможно (например, вам требуются функции новых версий для работы с ФФД 1.05 или 1.2), необходимо адаптировать код 1С под требования драйвера. Для этого нам потребуется внести изменения в модуль ПодключаемоеОборудованиеУниверсальныйДрайвер.

Рассмотрим вариант исправления. Нам нужно добавить второй параметр в вызов метода ОткрытьСмену. Даже если этот параметр не будет использоваться конфигурацией в дальнейшем, его наличие позволит драйверу успешно выполнить команду.

Скорректированный код будет выглядеть так:


// Добавляем переменную для приема выходных параметров, если это требуется драйвером
ВыходныеДанныеДрайвера = Неопределено; 
Попытка
    // Вызываем метод с двумя параметрами
    Результат = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства, ВыходныеДанныеДрайвера);
Исключение
    // Если драйвер совсем старый и не принял два параметра, пробуем вызвать с одним (fallback-вариант)
    Попытка
        Результат = ОбъектДрайвера.ОткрытьСмену(ПараметрыПодключения.ИДУстройства);
    Исключение
        // Здесь уже обрабатываем окончательную ошибку
        Результат = Ложь;
        // ... (код очистки ВыходныеПараметры как в оригинале)
    КонецПопытки;
КонецПопытки;

Использование конструкции Попытка...Исключение внутри другой попытки позволяет сделать код универсальным для разных версий драйверов Dreamkas.

Особенности режима «Без передачи данных»

Важно отметить ситуацию, когда ККТ используется в режиме без ОФД (сообщение 9 в теме). В 1С такое оборудование часто регистрируется как «Фискальный регистратор», а не «ККТ с передачей данных». Для «Фискальных регистраторов» 1С использует упрощенные алгоритмы взаимодействия.

Проанализируем настройки оборудования: если вы используете современную версию драйвера (ветка 1.2), но при этом работаете в автономном режиме, попробуйте в настройках драйвера внутри 1С принудительно установить «Ревизию интерфейса» в значение 2001 или выше, если это позволяет драйвер. Это может заставить 1С использовать более современные методы обращения к компоненте. Однако для УНФ 1.6.8 этот путь редко бывает успешным без обновления самой БПО.

Резюме и рекомендации

Подводя итог, можно сказать, что проблема носит чисто технический характер и связана с «конфликтом поколений» программного обеспечения.

Основные выводы:

Помните, что любые манипуляции с оборудованием и кодом лучше проводить после создания резервной копии базы данных.

← На главную