При работе с типовыми конфигурациями, такими как Бухгалтерия предприятия 3.0, разработчики часто сталкиваются с ситуацией, когда после обновления платформы или самой конфигурации стабильно работавшее ранее расширение начинает выдавать ошибки. Одна из самых распространенных проблем — исключение Поле объекта не обнаружено при обращении к элементам формы, в частности к полю СчетБанк в документах по движению денежных средств. Рассмотрим подробно, почему это происходит и как устранить проблему.
Ошибка Поле объекта не обнаружено (СчетБанк) возникает в тот момент, когда программный код (чаще всего в общем модуле ПоступлениеНаРасчетныйСчетФормы) пытается обратиться к элементу управления на форме, которого в данной коллекции Элементы не существует. Проанализируем основные факторы, которые приводят к исчезновению элемента:
БанковскиеСчета или конкретные записи в нем), платформа автоматически удаляет связанные с этим объектом поля с формы.СчетБанк, который на данной конкретной форме может называться иначе или отсутствовать в силу специфики интерфейса.Как показывает практика и обсуждение проблемы, наиболее эффективным методом является «обновление» состава расширения. Разберем по шагам, как это сделать:
Во-первых, проанализируем текущий состав расширения. Если ошибка указывает на отсутствие поля СчетБанк, а вы точно видите его в конфигураторе, значит, связь между расширением и основной конфигурацией нарушена. Попробуйте удалить заимствованный реквизит или элемент формы из расширения и добавить его заново из основной конфигурации.
Во-вторых, если в расширение добавлена вся форма целиком, попробуйте обновить ее структуру. В некоторых случаях помогает полное удаление формы из расширения и ее повторное заимствование. Это принудительно синхронизирует структуру элементов с обновленной типовой конфигурацией.
Важный момент: При повторном заимствовании проверьте свойство Использовать всегда для реквизитов формы. Установка этого флага гарантирует, что данные будут подтянуты с сервера, даже если элемент управления не отображается на экране.
Часто поле СчетБанк исчезает из-за того, что в базе не включена опция использования нескольких банковских счетов. Проанализируем ситуацию в конфигураторе:
СчетБанк (или соответствующий элемент формы) в метаданных основной конфигурации.Если в пользовательском режиме значение этой опции «Ложь» (например, у организации только один расчетный счет), то программный код, обращающийся к Элементы.СчетБанк, должен содержать проверку на существование элемента. Если типовой код этой проверки не содержит, а ваше расширение меняет поведение формы, вам придется добавить эту проверку самостоятельно через &Вместо или &Перед.
Чтобы избежать аварийного завершения работы программы, рекомендуется использовать безопасный метод поиска элементов. Вместо прямого обращения через точку, рассмотрим пример использования метода Найти():
// Вместо прямой установки параметров:
// Элементы.СчетБанк.ПараметрыВыбора = ...
// Используем безопасный подход в расширении:
ЭлементСчетБанк = Форма.Элементы.Найти("СчетБанк");
Если ЭлементСчетБанк <> Неопределено Тогда
НовыйМассивПараметров = Новый Массив;
// ... логика заполнения массива параметров ...
ЭлементСчетБанк.ПараметрыВыбора = Новый ФиксированныйМассив(НовыйМассивПараметров);
КонецЕсли;
Этот код предотвратит падение системы, даже если поле было удалено платформой из-за настроек интерфейса или отсутствия прав.
Если проблема проявляется только у определенных пользователей (как в описанном случае, где у админа все работает), разберем влияние ролей. Проверьте, что новая роль в расширении имеет права не только на сам документ, но и на:
БанковскиеСчета.Хозрасчетный.Что касается очистки кэша: хотя в облачных версиях это сделать сложнее, процедура остается актуальной. Некорректный локальный кэш метаданных может заставлять платформу «думать», что структура формы осталась прежней, игнорируя изменения в расширении. В облаке для этого обычно требуется обращение в техподдержку или использование встроенных инструментов очистки кэша в настройках запуска приложения.
Подводя итог, можно сказать, что в 90% случаев проблема Поле объекта не обнаружено (СчетБанк) после обновления лечится перезаимствованием реквизитов в расширение. Платформа 1С 8.3 крайне чувствительна к актуальности структуры метаданных в расширениях, и после любого значимого обновления конфигурации «Бухгалтерия предприятия» необходимо проверять работоспособность форм, заимствованных в расширения.