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