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