При работе в конфигурации 1С:Управление торговлей 11 (УТ 11) пользователи часто сталкиваются с ситуацией, когда при открытии или обновлении Платежного календаря система выдает критическую ошибку: Поле объекта не обнаружено (Остаток). Особенность этой проблемы заключается в том, что она может проявляться у одного пользователя и отсутствовать у другого, даже если им назначены одинаковые роли доступа. В данной статье мы подробно разберем причины возникновения этой ошибки и пошагово рассмотрим методы её устранения.
Согласно стеку вызовов, ошибка чаще всего возникает в общем модуле ДенежныеСредстваКлиентСервер или в модуле объекта обработки ПлатежныйКалендарь. Проанализируем типичный фрагмент кода, где происходит сбой:
// Фрагмент из общего модуля ДенежныеСредстваКлиентСервер
НачальныйОстаток = СтрокаДерева.Остаток;
ДенежныеСредстваКлиентСервер.ПересчитатьПодчиненныеСтрокиДерева(СтрокаДерева, ДнейПланирования);
Причина ошибки кроется в том, что объект СтрокаДерева (элемент дерева значений, на котором строится интерфейс календаря) в данный момент не содержит колонку Остаток. В 1С:УТ 11 структура этого дерева формируется динамически. Состав колонок зависит от функциональных опций, настроек самого календаря и прав доступа пользователя к регистрам накопления. Если в системе сохранены старые или некорректные настройки формы, алгоритм пытается обратиться к полю, которое не было создано при текущем запуске.
Это самый эффективный метод, решающий проблему в 90% случаев. Поскольку настройки колонок и видимости элементов формы сохраняются в системном хранилище для каждого пользователя индивидуально, «битые» настройки могут блокировать работу даже при наличии полных прав. Выясним, как их удалить:
Платежный календарь (может называться «Форма» или «Настройки формы»).После этой процедуры при следующем открытии Платежного календаря система сформирует дерево значений с «чистого листа», используя стандартный программный алгоритм, и колонка Остаток будет корректно инициализирована.
Структура данных в казначействе УТ 11 жестко привязана к включенным функциональным опциям. Если вы недавно обновляли систему или меняли настройки учета, это могло повлиять на состав реквизитов обработки. Рассмотрим, какие опции критичны для работы календаря:
Проанализируем раздел НСИ и администрирование — Казначейство и взаиморасчеты. Должны быть активны следующие флаги:
Если опции включены, но ошибка сохраняется, попробуйте временно их выключить и включить снова (в нерабочее время), чтобы система принудительно обновила связанные метаданные.
Если очистка настроек внутри 1С не помогла, вероятно, проблема кроется в локальном кэше конфигурации на компьютере пользователя. Кэш может содержать устаревшее описание типов данных дерева значений. Выполним следующие действия:
/ClearCache. Для этого в окне запуска нажмем «Изменить», перейдем на последнюю вкладку и в поле «Дополнительные параметры запуска» впишем указанную команду.Иногда отсутствие поля Остаток может быть следствием работы механизма RLS (Record Level Security). Если роль пользователя позволяет видеть обработку, но ограничивает доступ к конкретным счетам или кассам, программный код может «споткнуться» при расчете итогов. Проверим следующие моменты:
ДенежныеСредстваНаличные, ДенежныеСредстваБезналичные и ДенежныеСредстваКВыплате.Банковские счета организаций и Кассы.Казначей. Как показывает практика, создание «самописных» ролей для казначейства часто приводит к пропуску важных скрытых прав, необходимых для формирования сложных аналитических отчетов.Если вы опытный пользователь или программист, рассмотрим, как точно локализовать место ошибки через конфигуратор. Основная сложность в том, что расчет данных в последних версиях УТ 11 часто уходит в фоновые задания. Чтобы «поймать» ошибку, выполните следующие шаги:
Обработка.ПлатежныйКалендарь.Форма.Форма найдем процедуру ОбновитьСпискиНаСервере(). Проанализируем вызов расчета данных:
// Пример кода инициализации расчета
ПараметрыРасчета = ПараметрыРасчетаКалендаря(ИзмененыРеквизиты);
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.РассчитатьДанныеКалендаря(ПараметрыРасчета);
Если отладчик останавливается на строке НачальныйОстаток = СтрокаДерева.Остаток, внимательно посмотрите в табло переменную СтрокаДерева. Разверните её и проверьте наличие колонки. Если её нет, поднимитесь выше по стеку вызовов к месту, где дерево значений инициализируется и заполняется колонками. Скорее всего, вы увидите условие (Если... Тогда), которое не выполняется из-за отсутствия какой-либо настройки или права доступа, в результате чего колонка просто не добавляется в структуру дерева.
Резюме: В большинстве случаев проблема не в коде, а в данных. Начните с очистки настроек пользователя и кэша. Если это не помогает, проверьте права на регистры денежных средств. Использование типовой роли Казначей является наиболее надежным способом избежать подобных ошибок в будущем.