Ошибка «Поле агрегатного объекта не обнаружено» — это одна из классических проблем в платформе 1С:Предприятие 7.7. Она возникает в те моменты, когда программный код пытается обратиться к реквизиту или табличной части объекта (документа, справочника), которого в текущей конфигурации базы данных попросту нет, либо он был переименован или удален.
Давайте вместе разберем, как локализовать эту ошибку и какие шаги предпринять, чтобы заставить вашу обработку или отчет снова работать корректно.
Первым делом нам нужно понять, на каком именно документе или строке данных «спотыкается» ваша обработка. Не всегда понятно, какой объект вызывает проблему, если в коде идет перебор большого количества документов.
Рассмотрим метод внедрения проверочного сообщения в модуль. Для этого нам нужно открыть внешнюю обработку или отчет в Конфигураторе. Нажмите Файл -> Открыть, выберите нужный файл и перейдите на вкладку Модуль. Используйте сочетание клавиш Ctrl+Shift+L, чтобы быстро перейти к строке, на которой система выдает ошибку (она указывается в сообщении системы).
Перед проблемной строкой вставьте следующий код:
Сообщить("Текущий документ: " + Строка(ТекущийДокумент.Вид()) + " № " + Строка(ТекущийДокумент.НомерДок));
После этого запустите обработку заново. В окне служебных сообщений 1С вы увидите название последнего успешно обработанного или текущего документа. Это позволит вам точно определить, в каком документе отсутствует нужный реквизит.
Если вы определили, что проблема возникает на конкретном виде документа, необходимо проверить, существует ли в нем реквизит, к которому обращается код (в нашем случае это Товар). Выполните следующие действия:
Товар там нет, значит, код пытается обратиться к несуществующему объекту.Если реквизит был удален случайно, как в некоторых описанных случаях, вы можете восстановить структуру метаданных через объединение конфигураций, используя архивную копию базы данных, созданную до внесения изменений.
Если вы не хотите менять конфигурацию базы, можно программно «обойти» ошибку, добавив проверку в код обработки. Это позволит программе не «вылетать», а просто пропускать документы, в которых нужный реквизит отсутствует.
Разберем пример внедрения проверки:
// В цикле обхода документа
Попытка
Если Док.Товар = Ит.Операция.Дебет.Субконто(1) Тогда
// Ваши действия
КонецЕсли;
Исключение
Сообщить("В документе " + Док + " не найден реквизит Товар, пропуск...");
КонецПопытки;
Такой подход делает работу отчета более стабильной, так как программа выполняет проверку на каждом шаге цикла.
Иногда причина кроется не в базе, а в самой внешней обработке (файле .ERT). Бывает, что файл повреждается или «закеширован». В такой ситуации самым простым и эффективным решением будет замена текущего файла обработки на его резервную копию.
Проанализируйте папку, где лежит ваш отчет. Часто рядом с файлом КОПИЯ ТОВАРНЫЙ ОТЧЕТ.ERT лежит оригинал ТОВАРНЫЙ ОТЧЕТ.ERT. Попробуйте использовать чистую версию файла. Если у вас нет резервной копии, попробуйте заново сохранить текст модуля в новый файл из Конфигуратора.
Работа с кодом требует осторожности, особенно если вы не являетесь профессиональным программистом:
Следование этим простым шагам поможет вам диагностировать проблему самостоятельно и, в большинстве случаев, устранить её без привлечения сторонних специалистов.