При работе с системой ВетИС (Меркурий) в конфигурации 1С:Управление торговлей 11.4 пользователи часто сталкиваются с критической ошибкой на этапе настройки нового подключения. В процессе заполнения данных авторизации и попытке получить остатки продукции система выдает сообщение: «Не удалось заполнить виды продукции по группам приказа Ветис по причине: "Индекс находится за границами массива"». Эта проблема блокирует дальнейшую работу с электронными ветеринарными сопроводительными документами (ЭВСД).
В данной статье мы подробно разберем причины возникновения этой ошибки, проанализируем программный код, вызывающий сбой, и рассмотрим несколько способов решения проблемы — от быстрого обхода до полноценного исправления в конфигураторе.
Проанализируем ситуацию: корень проблемы кроется в механизме обработки классификаторов продукции, которые 1С загружает из внутреннего макета. В версиях 11.4.8.х и аналогичных релизах ERP и КА программный код ожидает определенный формат строк в макете ПереченьПродукцииУполномоченныхЛиц. Каждая строка должна содержать код и наименование, разделенные точкой (например, "1. Продукция животноводства").
Ошибка возникает из-за того, что в последних строках макета или при получении обновленных данных формат строки нарушается (отсутствует точка или строка пуста). Функция СтрРазделить, разбивающая строку по символу точки, возвращает массив из одного элемента вместо ожидаемых двух. Когда программа пытается обратиться к элементу с индексом [1] (второй элемент), происходит аварийное завершение работы, так как в массиве есть только индекс [0].
Рассмотрим наиболее надежный вариант решения, который заключается в добавлении проверки количества элементов в массиве перед обращением к ним. Это позволит программе корректно обрабатывать строки любого формата.
Нам потребуется внести изменения в общий модуль ДопустимыеЦелиВЕТИС. Выясним алгоритм действий:
ПереченьПродукцииАттестованныхСпециалистов в общем модуле ДопустимыеЦелиВЕТИС.Проанализируем пример кода, который необходимо внедрить. Вместо прямого обращения к индексу, мы сначала сохраним результат разделения в переменную и проверим количество полученных частей:
// Было:
ГруппаПриказаСтрока = СокрЛП(Макет.Область(НомерСтроки, 1).Текст);
ГруппаПриказаСтрока = СокрЛП(СтрРазделить(ГруппаПриказаСтрока, ".")[1]);
// Стало:
ТекстОбласти = Макет.Область(НомерСтроки, 1).Текст;
ЧастиСтрокиГруппыПриказа = СтрРазделить(ТекстОбласти, ".");
Если ЧастиСтрокиГруппыПриказа.Количество() > 1 Тогда
ГруппаПриказаСтрока = СокрЛП(ЧастиСтрокиГруппыПриказа[1]);
ИначеЕсли ЧастиСтрокиГруппыПриказа.Количество() = 1 Тогда
ГруппаПриказаСтрока = СокрЛП(ЧастиСтрокиГруппыПриказа[0]);
Иначе
ГруппаПриказаСтрока = "";
КонецЕсли;
Такой подход гарантирует, что даже если в строке отсутствует точка, программа не «упадет», а корректно обработает имеющиеся данные. Этот код успешно применяется в последних релизах конфигурации 1С:Розница и полностью совместим с УТ 11.4.
Если вы не хотите менять программный код, можно попробовать исправить непосредственно данные, которые вызывают сбой. Разберем по шагам, как отредактировать макет:
КлассификаторыВЕТИС.ПереченьПродукцииУполномоченныхЛиц.Важный момент: правка макета может быть временным решением, так как при последующем обновлении конфигурации макет может быть перезаписан стандартными данными, и ошибка вернется.
Компания 1С признала данную ошибку и выпустила соответствующие исправления. Если ваша база находится на поддержке, выполните следующие действия:
EF_0014xxxx (номер может варьироваться в зависимости от конкретного подрелиза).Использование официальных патчей является приоритетным методом для систем, работающих в типовом режиме без внесения изменений в основную конфигурацию.
Рассмотрим ситуацию, когда доступ к конфигуратору ограничен, а подключение нужно настроить срочно. Некоторые пользователи обнаружили «хитрость» при настройке:
Однако помните, что этот метод помогает не всегда, так как ошибка может возникнуть позже, при первой же попытке системы классифицировать продукцию для формирования ЭВСД.
Выясним, как избежать подобных проблем в будущем. Ошибка с индексами массивов при парсинге строк — классическая проблема при интеграции с государственными системами, где форматы данных могут меняться динамически. Мы рекомендуем:
Ветис.API постоянно дорабатываются вслед за изменениями на стороне серверов Россельхознадзора.Таким образом, мы проанализировали проблему и нашли несколько путей ее решения. Наиболее стабильным является исправление логики в модуле ДопустимыеЦелиВЕТИС, что обеспечит устойчивость программы к любым изменениям в текстовых макетах классификаторов.