Как исправить ошибку «Индекс находится за границами массива» при подключении к Ветис.API в 1С:УТ 11.4

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

При работе с системой ВетИС (Меркурий) в конфигурации 1С:Управление торговлей 11.4 пользователи часто сталкиваются с критической ошибкой на этапе настройки нового подключения. В процессе заполнения данных авторизации и попытке получить остатки продукции система выдает сообщение: «Не удалось заполнить виды продукции по группам приказа Ветис по причине: "Индекс находится за границами массива"». Эта проблема блокирует дальнейшую работу с электронными ветеринарными сопроводительными документами (ЭВСД).

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

Причина возникновения ошибки

Проанализируем ситуацию: корень проблемы кроется в механизме обработки классификаторов продукции, которые 1С загружает из внутреннего макета. В версиях 11.4.8.х и аналогичных релизах ERP и КА программный код ожидает определенный формат строк в макете ПереченьПродукцииУполномоченныхЛиц. Каждая строка должна содержать код и наименование, разделенные точкой (например, "1. Продукция животноводства").

Ошибка возникает из-за того, что в последних строках макета или при получении обновленных данных формат строки нарушается (отсутствует точка или строка пуста). Функция СтрРазделить, разбивающая строку по символу точки, возвращает массив из одного элемента вместо ожидаемых двух. Когда программа пытается обратиться к элементу с индексом [1] (второй элемент), происходит аварийное завершение работы, так как в массиве есть только индекс [0].

Способ 1: Исправление программного кода (Рекомендуется)

Рассмотрим наиболее надежный вариант решения, который заключается в добавлении проверки количества элементов в массиве перед обращением к ним. Это позволит программе корректно обрабатывать строки любого формата.

Нам потребуется внести изменения в общий модуль ДопустимыеЦелиВЕТИС. Выясним алгоритм действий:

  1. Откроем конфигуратор и найдем функцию ПереченьПродукцииАттестованныхСпециалистов в общем модуле ДопустимыеЦелиВЕТИС.
  2. Найдем фрагмент кода, где происходит разделение строки (ориентировочно строка 479).
  3. Заменим проблемный участок кода на более защищенный вариант.

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


// Было:
ГруппаПриказаСтрока = СокрЛП(Макет.Область(НомерСтроки, 1).Текст);
ГруппаПриказаСтрока = СокрЛП(СтрРазделить(ГруппаПриказаСтрока, ".")[1]);

// Стало:
ТекстОбласти = Макет.Область(НомерСтроки, 1).Текст;
ЧастиСтрокиГруппыПриказа = СтрРазделить(ТекстОбласти, ".");

Если ЧастиСтрокиГруппыПриказа.Количество() > 1 Тогда
    ГруппаПриказаСтрока = СокрЛП(ЧастиСтрокиГруппыПриказа[1]);
ИначеЕсли ЧастиСтрокиГруппыПриказа.Количество() = 1 Тогда
    ГруппаПриказаСтрока = СокрЛП(ЧастиСтрокиГруппыПриказа[0]);
Иначе
    ГруппаПриказаСтрока = "";
КонецЕсли;

Такой подход гарантирует, что даже если в строке отсутствует точка, программа не «упадет», а корректно обработает имеющиеся данные. Этот код успешно применяется в последних релизах конфигурации 1С:Розница и полностью совместим с УТ 11.4.

Способ 2: Редактирование макета классификатора

Если вы не хотите менять программный код, можно попробовать исправить непосредственно данные, которые вызывают сбой. Разберем по шагам, как отредактировать макет:

  1. Перейдем в обработку КлассификаторыВЕТИС.
  2. Найдем макет ПереченьПродукцииУполномоченныхЛиц.
  3. Проанализируем последние строки таблицы. Часто там находятся пустые строки или строки с некорректным форматированием.
  4. Удалите последние две строки или исправьте их так, чтобы они соответствовали формату «Цифра.Текст».

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

Способ 3: Официальные патчи и обновления

Компания 1С признала данную ошибку и выпустила соответствующие исправления. Если ваша база находится на поддержке, выполните следующие действия:

  1. Перейдите в раздел Администрирование — Обслуживание — Обновление программы.
  2. Проверьте наличие установленных исправлений (патчей).
  3. Найдите и установите патч с префиксом EF_0014xxxx (номер может варьироваться в зависимости от конкретного подрелиза).

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

Альтернативный обходной путь (без конфигуратора)

Рассмотрим ситуацию, когда доступ к конфигуратору ограничен, а подключение нужно настроить срочно. Некоторые пользователи обнаружили «хитрость» при настройке:

  1. При создании Настройки подключения к ВЕТИС.API снимите флажок «Получить остатки продукции и непогашенные ветеринарно-сопроводительные документы».
  2. Нажмите «Далее» и завершите создание настройки. Поскольку программа не будет пытаться заполнить виды продукции немедленно, ошибка «Индекс находится за границами массива» может не проявиться.
  3. После того как объект настройки будет сохранен в системе, попробуйте выполнить синхронизацию данных уже из формы самого подключения или через регламентные задания.

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

Рекомендации по дальнейшей работе

Выясним, как избежать подобных проблем в будущем. Ошибка с индексами массивов при парсинге строк — классическая проблема при интеграции с государственными системами, где форматы данных могут меняться динамически. Мы рекомендуем:

Таким образом, мы проанализировали проблему и нашли несколько путей ее решения. Наиболее стабильным является исправление логики в модуле ДопустимыеЦелиВЕТИС, что обеспечит устойчивость программы к любым изменениям в текстовых макетах классификаторов.

← На главную