В процессе работы кассира в режиме Рабочее место кассира (РМК) конфигурации 1С:Розница может возникнуть критический сбой: при попытке пробить и распечатать чек платформа выдает исключение «Индекс значения за пределами массива». При этом проведение и печать аналогичного документа «Чек ККМ» непосредственно из журнала продаж в разделе «Продажи» проходит без ошибок. Разберем причины такого поведения и способы устранения этой неисправности.
Техническая причина возникновения ошибки
С технической точки зрения ошибка Индекс значения за пределами массива означает, что программный код пытается обратиться к элементу коллекции Массив по порядковому номеру (индексу), которого не существует в памяти. Например, код запрашивает Массив[2], в то время как коллекция содержит только 2 элемента с допустимыми индексами 0 и 1.
Разница между пробитием чека из журнала «Продажи» и из интерфейса РМК заключается в механизме формирования данных:
Печать из журнала «Продажи»: программа формирует печатную форму на основе уже записанного и проведенного документа базы данных, где все суммы, таблицы оплат и реквизиты четко распределены.
Печать из РМК: данные перед отправкой на фискальный регистратор собираются «на лету» во временные структуры данных и массивы в оперативной памяти (включая строки чека, вида оплат, скидки и данные слип-чека). В некоторых релизах 1С:Розница (в частности, ветки 2.2.6.x) алгоритмы подготовки данных для торгового оборудования содержали ошибки, из-за которых массив параметров формировался неполного размера.
Основные причины сбоя в режиме РМК
Проанализируем ситуации, которые чаще всего провоцируют данное исключение в программе:
Сложные или комбинированные оплаты: при оформлении покупки с одновременным использованием нескольких видов расчета (наличные, эквайринг, бонусные баллы или подарочные сертификаты) алгоритм разбивает суммы по массивам. Если один из типов оплаты не имеет заполненных параметров, индекс массива вылетает за границы.
Сбой интеграции с эквайринговым терминалом или ККМ: при получении ответа от драйвера оборудования (например, строк слип-чека) обработчик 1С ожидает строго определенное количество элементов. Если драйвер возвращает пустой массив строк, обращение к нему по фиксированному индексу вызывает сбой.
Использование кастомного шаблона чека: если для кассы ККМ задан пользовательский макет чека, обращающийся к дополнительным параметрам, которые отсутствуют в текущем массиве печатных строк.
Повреждение кэша платформы: накопление некорректных временных файлов 1С:Предприятия на рабочем месте кассира.
Способы решения проблемы
1. Обновление конфигурации (Основное решение)
Как показывает практика, наиболее эффективным способом устранения данной проблемы является обновление конфигурации 1С:Розница до актуального релиза. Разработчики 1С исправляют выявленные ошибки в модулях интеграции с оборудованием и добавляют необходимые проверки длины коллекций перед обращением к их индексам.
2. Поиск ошибки с помощью отладки в Конфигураторе
Если быстрое обновление конфигурации невозможно, проанализируем место сбоя через режим отладки:
Откроем информационную базу в режиме Конфигуратор.
В меню откроем раздел Отладка > Настройки отладки... и установим флаг Останавливаться по ошибке.
Запустим сеанс 1С:Предприятие под правами кассира и воспроизведем операцию пробития чека в РМК.
При возникновении ошибки платформа автоматически остановит выполнение кода на проблемной строке модуля (обычно в модулях МенеджерОборудованияКлиент или ФормаРМК).
Посмотрим значение массива в окне табло и выясним, какой именно элемент или параметр не был передан.
Пример корректной проверки длины массива в коде перед обращением к элементу:
Если МассивПараметров.Количество() > ИндексЭлемента Тогда
ЗначениеПараметра = МассивПараметров[ИндексЭлемента];
Иначе
ЗначениеПараметра = Неопределено;
КонецЕсли;
3. Дополнительные профилактические действия
Если обновление конфигурации откладывается, выполним следующие шаги для локализации неполадки:
Перевыбор оборудования: в карточке рабочего места кассира перевыберите используемый фискальный регистратор и эквайринговый терминал, затем сохраните настройки.
Установка стандартного шаблона чека: переключите настройки печати чека ККМ на стандартный (типовой) шаблон.
Очистка кэша: удалите временные файлы 1С:Предприятия на рабочем месте кассира или передобавьте базу в списке запуска.
Обновление драйвера ККМ: обновите драйвер фискального регистратора и интеграционную библиотеку подключаемого оборудования до актуальных версий.