При запуске общего журнала в платформе 1С 7.7 пользователи иногда сталкиваются с критической ошибкой: "Значение не представляет агрегатный объект (Выбран)". Из-за этого журнал документов перестает открываться, блокируя привычную работу в программе.
Рассмотрим подробно причины возникновения этой проблемы и проанализируем доступные способы ее решения.
Выясним причину сбоя. Ошибка обычно указывает на то, что программа пытается вызвать метод Выбран() или обратиться к свойству Выбран у переменной или элемента формы (например, КонтрагентДляОтбора), который в данный момент имеет примитивный тип данных (число 0, пустую строку "" или неинициализированное значение).
Это может произойти в следующих случаях:
Выбран() = 1. Если в коде написано КонтрагентДляОтбора.Выбран > 0, платформа ищет реквизит с таким именем, а не вызывает метод.КонтрагентДляОтбора потерял связь со справочником и стал обычным числом или строкой.Самым надежным способом устранения сбоя является редактирование модуля формы списка общего журнала в режимах Конфигуратор.
Разберем по шагам процесс внесения изменений:
Конфигурация — Открыть конфигурацию.Журналы — ЖурналОбщий (или соответствующий общий журнал вашей базы) и откройте ФормаСписка.ПриВыбореКонтрагента.Попытка ... Исключение, чтобы при возникновении сбоя программа автоматически сбрасывала отбор и не блокировала работу журнала.Посмотрим на пример исходного кода с ошибкой:
Процедура ПриВыбореКонтрагента()
Если КонтрагентДляОтбора.Выбран>0 Тогда
УстановитьОтбор("Контрагент", КонтрагентДляОтбора);
КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент;
Иначе
УстановитьОтбор("");
КонецЕсли;
КонецПроцедуры
Изменим данный фрагмент, добавив безопасный обработчик исключений:
Процедура ПриВыбореКонтрагента()
Попытка
Если КонтрагентДляОтбора.Выбран() = 1 Тогда
УстановитьОтбор("Контрагент", КонтрагентДляОтбора);
КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент;
Иначе
УстановитьОтбор("");
КонецЕсли;
Исключение
УстановитьОтбор("");
КонецПопытки;
КонецПроцедуры
Также можно выводить сообщение в журнал для отладки с помощью функции ОписаниеОшибки():
Процедура ПриВыбореКонтрагента()
Попытка
Если КонтрагентДляОтбора.Выбран() = 1 Тогда
УстановитьОтбор("Контрагент", КонтрагентДляОтбора);
КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент;
Иначе
УстановитьОтбор("");
КонецЕсли;
Исключение
Сообщить("Ошибка отбора по контрагенту: " + ОписаниеОшибки());
УстановитьОтбор("");
КонецПопытки;
КонецПроцедуры
Сохраните изменения в Конфигураторе и перезапустите программу в обычном режиме. Журнал успешно откроется.
Если нет возможности быстро изменить код в Конфигураторе, проанализируем вариант со сбросом сохраненных отборов пользователя.
usrdef) внутри каталога базы..flk, .spl, .lst (например, 1Cv7.flk, 1Cv7.lst). В этих файлах сохраняются текущие позиционирования, фильтры и отборы форм.1Cv7.cfg в каталоге базы (предварительно сделав его резервную копию).При следующем входе программа откроет общий журнал со значениями отборов по умолчанию, что позволит избежать ошибки вызова метода Выбран().