Как исправить ошибку «Слишком много фактических параметров» при закрытии смены в 1С:Управление торговлей 10.3.57.1?

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

При переходе на новые релизы программных продуктов семейства 1С пользователи и технические специалисты нередко сталкиваются со сбоями в работе торгового оборудования. Одним из таких критических сбоев стала ошибка закрытия кассовой смены на релизе конфигурации 1С:Управление торговлей 10.3.57.1. При попытке выполнить штатное закрытие смены система прерывает процесс и выдает системное сообщение:

Ошибка вызова метода <ОбъектДрайвера.ЗакрытьСмену>. Слишком много фактических параметров.

При этом сама кассовая смена на фискальном регистраторе (например, Штрих-М или Атол) фактически может закрыться (или распечатать Z-отчет), но в самой программе 1С статус смены не меняется, и документ «Отчет о розничных продажах» не формируется. В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы взаимодействия 1С с драйверами ККТ и предложим несколько вариантов решения этой проблемы — от официального патча до ручного исправления кода в конфигураторе.

Выясняем причину: конфликт стандартов и ревизий интерфейса

Для того чтобы понять суть проблемы, нам необходимо обратиться к стандартам интеграции подключаемого оборудования, которые разрабатывает фирма 1С для взаимодействия конфигураций с внешними драйверами ККТ. В разных версиях требований к разработке драйверов метод ЗакрытьСмену принимает разное количество аргументов:

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


Если ПараметрыПодключения.РевизияИнтерфейса > 2001 Тогда // Версия стандарта 2.2 (ОФД 1.0.5/1.1)
    Попытка
        ПараметрыОперации = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляОперации(ВходныеПараметры);
                
        Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.0.5/1.1)
            Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния);
        Иначе
            Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния, НомерСмены, НомерДокумента);
        КонецЕсли;

Рассмотрим эту ситуацию детально. Современные сертифицированные драйверы ККТ (включая популярные версии драйверов Штрих-М и Атол) используют стандарт интеграции версии 2.5, возвращая в платформу значение ревизии интерфейса, равное 2005.

При выполнении вышеуказанного кода программа проверяет условие: равен ли показатель РевизияИнтерфейса числу 3000 или более? Так как 2005 меньше 3000, выполнение программы переходит в ветку Иначе. В этой ветке код пытается передать драйверу ККТ 5 параметров вместо 3. Поскольку драйвер версии 2.5 строго ожидает только 3 параметра, происходит аварийное завершение транзакции с системной ошибкой переполнения фактических параметров.

Данная проблема была официально признана разработчиками 1С и зарегистрирована под кодом ошибки 00-00261739.

---

Способ 1. Официальное исправление (Обновление конфигурации)

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

Если у вас установлена типовая конфигурация, находящаяся на стандартной поддержке, выполните следующие действия:

  1. Создайте резервную копию вашей информационной базы (выгрузка файла .dt или копирование файла 1Cv8.1CD для файловых баз).
  2. Скачайте дистрибутив обновления конфигурации версии 10.3.57.2 (или более поздней) с официального портала технологической поддержки 1С.
  3. Запустите базу в режиме «Конфигуратор».
  4. Перейдите в меню Конфигурация -> Поддержка -> Обновить конфигурацию.
  5. Укажите путь к файлу обновления 1cv8.upd и завершите процесс обновления, следуя подсказкам помощника.
  6. Запустите базу в режиме «Предприятие» и дождитесь окончания выполнения обработок обновления данных.

---

Способ 2. Самостоятельное исправление кода в конфигураторе

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

Разберем процесс исправления по шагам:

  1. Откройте базу данных в режиме Конфигуратор.
  2. Откройте дерево конфигурации и найдите общий модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.
  3. Внутри модуля найдите процедуру ЗакрытьСмену. Для быстрого поиска нажмите клавиши Ctrl + F и введите текст: ОбъектДрайвера.ЗакрытьСмену.
  4. Найдите блок ветвления условий, который мы анализировали ранее.
  5. Нам необходимо скорректировать проверку условий таким образом, чтобы для ревизии интерфейса 2005 (стандарт 2.5) метод также вызывался с тремя параметрами. Измените код следующим образом:

Было:


Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.0.5/1.1)
    Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния);
Иначе
    Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния, НомерСмены, НомерДокумента);
КонецЕсли;

Стало (исправленный вариант):


Если (ПараметрыПодключения.РевизияИнтерфейса >= 3000) Или (ПараметрыПодключения.РевизияИнтерфейса = 2005) Тогда 
    Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния);
Иначе
    Результат = ОбъектДрайвера.ЗакрытьСмену(ПараметрыПодключения.ИДУстройства, ПараметрыОперации, ПараметрыСостояния, НомерСмены, НомерДокумента);
КонецЕсли;

После изменения кода сохраните конфигурацию (клавиша F7) и запустите 1С:Предприятие. Теперь при попытке закрытия смены система корректно распознает ревизию интерфейса 2005 и вызовет метод с тремя параметрами.

---

Способ 3. Откат версии драйвера торгового оборудования

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

Поскольку ошибка возникает из-за того, что современный установленный в системе драйвер ККТ сообщает платформе 1С о поддержке ревизии интерфейса 2005, мы можем установить более старую версию драйвера производителя оборудования (Штрих-М или Атол), которая работает по стандарту интеграции версии 2.2 и возвращает ревизию 2001 или 2002.

В этом случае платформа 1С отработает по ветке Иначе, передаст все 5 параметров, и старый драйвер примет их без ошибок.

Важное предупреждение: Использование устаревших драйверов ККТ может повлечь за собой проблемы с поддержкой новых реквизитов маркировки продукции (например, кодов маркировки систем «Честный Знак») или новых форматов фискальных данных (ФФД 1.2). Используйте данный метод исключительно как временную меру для экстренного закрытия текущей смены.

---

Дополнительная настройка: разбор параметров смены

Обратите внимание, что в релизе 10.3.57.1 также изменилась сигнатура серверного метода разбора XML-пакета фискальных данных. В строке вызова функции ПолучитьПараметрыСменыИзXMLПакета появился новый третий параметр:


ФискальныеДанныеСтруктура = МенеджерОборудованияВызовСервера.ПолучитьПараметрыСменыИзXMLПакета(ПараметрыСостояния, НомерСмены, ПараметрыПодключения.РевизияИнтерфейса);

Если после исправления вызова метода ЗакрытьСмену вы столкнетесь с ошибками при чтении параметров закрытой смены, убедитесь, что в коде общего модуля передаются все три параметра для корректной идентификации XML-пакета. При использовании ручного исправления кода по Способу 2, все фискальные данные будут корректно расшифрованы платформой автоматически.

← На главную