В процессе работы с конфигурацией «1С:Управление торговлей» версии 11.5 (а также в ERP и КА) технические специалисты часто сталкиваются со специфической ошибкой при попытке пользователя открыть обработку «Платежный календарь». Проблема проявляется внезапно и, как правило, только у одного или нескольких сотрудников, в то время как у остальных отчет работает штатно. Система выдает сообщение: Поле объекта не обнаружено (День0ВВалюте), после чего работа с формой становится невозможной.
В данной статье мы подробно разберем, почему возникает этот сбой, проанализируем программный код, вызывающий исключение, и рассмотрим пошаговые инструкции по восстановлению работоспособности системы.
Давайте проанализируем программный код, на который указывает стек ошибки. Обычно это общий модуль ДенежныеСредстваКлиентСервер или модуль самой обработки ПлатежныйКалендарь. Ошибка происходит в процедурах, отвечающих за пересчет данных в дереве значений формы. Рассмотрим типичный фрагмент кода, где возникает сбой:
// Пример участка кода из общего модуля
СтрокаДерева["День" + Инд] = СтрокаДерева["День" + Инд + "ВВалюте"];
Выясним причину такого поведения. Платежный календарь строится динамически. Колонки в нем (например, «День0», «День1», «День0ВВалюте» и так далее) не заданы жестко в метаданных, а создаются программно в зависимости от выбранного горизонта планирования и настроек отображения валют. Если алгоритм по какой-то причине пропускает создание колонки ДеньNВВалюте, но при этом индекс Инд указывает на ее необходимость, система выбрасывает исключение. Подобная логика часто используется, когда формируется чистый денежный поток по статьям ДДС и валютам, где колонки также зависят от настроек отчета. Для такого анализа подойдёт внешний отчет для анализа чистого денежного потока по статьям ДДС и валютам.
Проанализируем ситуацию через отладчик. Как отмечают специалисты, у «проблемного» пользователя цикл инициализации может начинаться с индекса 0, в то время как структура колонок была сформирована иначе. Это часто связано с тем, что в Хранилище настроек данных форм сохранилась старая структура дерева, которая конфликтует с текущими функциональными опциями или данными системы.
Самый эффективный и быстрый метод решения проблемы — полная очистка настроек формы для конкретного пользователя и их замена на заведомо исправные. Разберем этот процесс по шагам:
Платежный календарь и выполним команду Очистить.Важный нюанс: Иногда простая очистка не помогает, так как при первом же открытии система пытается восстановить настройки из кэша.
Проанализируем ситуацию глубже. Ошибка часто связана с использованием мультивалютности. Если в настройках системы (НСИ и администрирование — Казначейство) включена опция «Несколько валют», календарь пытается строить колонки для валютных сумм.
Выясним, какие настройки внутри самого календаря могут влиять на появление поля День0ВВалюте:
День0.Рекомендуем пользователю зайти в настройки самого календаря и убедиться, что горизонт планирования установлен корректно.
Рассмотрим неочевидную причину: данные Производственного календаря. Поскольку расчет колонок День0, День1 и так далее опирается на рабочие дни, отсутствие данных в календаре РФ на текущий или следующий год может привести к тому, что функция ПараметрыРасчетаКалендаря вернет некорректный массив дат.
Выполним проверку:
Если программные методы не помогают, стоит рассмотреть возможность локального повреждения кэша конфигурации. После очистки кэша полезно проверить, как выводятся движения денежных средств по подразделениям в других отчетах, чтобы исключить общие проблемы с отображением данных.
Проанализировав проблему, можно сделать вывод, что ошибка Поле объекта не обнаружено (День0ВВалюте) является следствием рассинхронизации между сохраненными настройками формы пользователя и актуальным алгоритмом построения дерева значений в УТ 11.5.
Наиболее надежный алгоритм решения выглядит так: Очистка настроек пользователя -> Копирование настроек от администратора -> Проверка актуальности производственного календаря и валют. В редких случаях требуется внесение правок в общий модуль для добавления проверки существования колонки перед обращением к ней, однако в типовых конфигурациях достаточно вышеописанных административных мер.