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