1С 7.7: Что делать, если при формировании кассовой книги возникает ошибка «Поле агрегатного объекта не обнаружено»?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

Работа в системе 1С:Предприятие 7.7 часто сопровождается возникновением ошибок, которые на первый взгляд кажутся критическими, но на деле имеют вполне логичное техническое объяснение. Одной из самых распространенных проблем при подготовке регламентированной отчетности является ошибка «Поле агрегатного объекта не обнаружено» в отчете «Кассовая книга». Давайте подробно разберем, почему это происходит и как исправить ситуацию несколькими способами.

Выясним причину возникновения ошибки

Для начала проанализируем суть сообщения об ошибке. В платформе 1С 7.7 объект Документ может иметь различные реквизиты шапки и табличной части. Отчет «Кассовая книга» программно перебирает все документы, которые создали движения (проводки) по счету 50 «Касса» за выбранный период. Для формирования печатной формы отчет обращается к конкретным полям этих документов, таким как ПринятоОт или ПолученоОт, чтобы вывести информацию о контрагенте или сотруднике.

Проблема возникает в тот момент, когда в выборку попадает документ, у которого в метаданных отсутствует искомый реквизит. Чаще всего таким «виновником» становится «Операция, введенная вручную». В отличие от стандартных кассовых ордеров (ПКО и РКО), у ручной операции нет жестко заданной структуры полей «Принято от» или «Выдано». Как только программный код пытается выполнить команду Док.ПринятоОт для такого объекта, система аварийно завершает работу, так как не находит указанного поля.

Способ 1: Поиск проблемного документа через Конфигуратор

Рассмотрим самый быстрый технический способ локализации ошибки. Если база данных позволяет запуск в режиме Конфигуратор, мы можем использовать встроенные средства отладки.

  1. Запустите Конфигуратор, а затем из него запустите базу в режиме «1С:Предприятие».
  2. Попытайтесь сформировать кассовую книгу, чтобы вызвать ошибку.
  3. Когда появится окно с сообщением об ошибке, не спешите его закрывать. В нижней части экрана (в окне сообщений) дважды кликните левой кнопкой мыши по строке с описанием ошибки.
  4. Система автоматически переключит вас в Конфигуратор и откроет модуль отчета именно на той строке кода, которая вызвала сбой.

Обычно проблемная строка выглядит примерно так:

ФИО = Док.ПринятоОт;

Способ 2: Использование отладочного вывода

Разберем ситуацию, когда визуально непонятно, на каком именно документе «споткнулась» программа. Мы можем временно модифицировать код отчета, чтобы он сам подсказал нам название документа. Для этого перед строкой, вызывающей ошибку, добавим команду Сообщить().

Рассмотрим пример кода:


// Вставляем диагностическое сообщение
Сообщить("Проверяем документ: " + Док.Вид() + " №" + Док.НомерДок);
// Строка, на которой возникает ошибка
ТекстОтКого = Док.ПринятоОт;

После добавления этой строки снова запустите отчет. В окне сообщений вы увидите список всех обработанных документов. Последний документ в списке перед строкой об ошибке и будет тем самым объектом, в котором отсутствует нужное поле. Чаще всего там будет написано Вид документа: Операция.

Способ 3: Исправление кода (универсальное решение)

Чтобы отчет работал стабильно, даже если в кассу попали нестандартные документы, необходимо добавить проверку на наличие реквизита. Проанализируем, как это сделать с помощью обращения к метаданным. Вместо прямого обращения к полю, мы сначала выясним, существует ли оно у данного вида документа.

Пример исправленного фрагмента кода:


// Определяем вид текущего документа
ВидДока = Док.Вид();
// Проверяем наличие реквизита "ПринятоОт" в метаданных этого вида документа
Если Метаданные.Документ(ВидДока).РеквизитШапки("ПринятоОт").Выбран() = 1 Тогда
    ТекстДанных = Док.ПринятоОт;
ИначеЕсли Метаданные.Документ(ВидДока).РеквизитШапки("ПолученоОт").Выбран() = 1 Тогда
    ТекстДанных = Док.ПолученоОт;
Иначе
    // Если полей нет (например, это Операция), берем содержание
    ТекстДанных = "Ручная операция: " + Док.Содержание;
КонецЕсли;

Такой подход делает отчет «стрессоустойчивым». Даже если в конфигурацию будут добавлены новые самописные документы, кассовая книга не перестанет работать.

Способ 4: Поиск через «Карточку счета» (без программирования)

Если вы бухгалтер и не имеете возможности менять программный код, проанализируем ситуацию через стандартные бухгалтерские отчеты. Порядок действий следующий:

  1. Откройте отчет «Карточка счета».
  2. Выберите счет 50 (можно по субсчетам, например, 50.1) за тот же период, за который не строится кассовая книга.
  3. Внимательно изучите графу «Документ».
  4. Ищите любые записи, отличные от «Приходный кассовый ордер» и «Расходный кассовый ордер».

Важный момент: Если вы нашли в карточке счета документ с названием «Операция», это и есть причина сбоя. В 1С 7.7 крайне не рекомендуется проводить движения по кассе через ручные операции. Рекомендуем удалить ручную проводку и переоформить её стандартным кассовым ордером. Это не только устранит ошибку, но и обеспечит правильное ведение кассовой дисциплины.

Особенности внешних отчетов (файлы .ert)

Посмотрим на техническую реализацию отчета. В 1С 7.7 отчет «Кассовая книга» часто является внешним файлом с расширением .ert, который хранится в папке ExtForms в каталоге вашей базы данных. Если ошибка появилась внезапно (например, после обновления), возможно, файл отчета KassBook.ert устарел или был поврежден.

В этом случае можно попробовать следующее:

Итоги

Мы разобрали, что ошибка «Поле агрегатного объекта не обнаружено» — это не поломка базы данных, а следствие нарушения логики учета или отсутствия проверки в коде отчета. Самым правильным решением будет сочетание двух подходов: программного (добавление проверки метаданных) и методологического (замена ручных операций на стандартные кассовые документы). Помните, что корректная работа типовых отчетов в 1С 7.7 напрямую зависит от того, насколько точно пользователь следует заложенной в конфигурацию бизнес-логике.

← На главную