В работе с программой «1С:Документооборот» пользователи могут столкнуться с ситуацией, когда при попытке открыть список «Задачи от меня» система выдает ошибку, но при этом создание и отправка задач работают корректно. Характерной особенностью этой проблемы является то, что под пользователем с правами администратора ошибка не воспроизводится. Давайте подробно разберем, почему это происходит и какие шаги предпринять для устранения неисправности.
Текст ошибки обычно выглядит следующим образом:
Поле объекта не обнаружено (ФормаБизнесПроцессРешениеВопросовВыполненияЗадачЗадатьВопрос)
{Документ.Задача.Форма.Задачи.Форма(11081)}: Элементы.ФормаБизнесПроцессРешениеВопросовВыполненияЗадачЗадатьВопрос.Доступность =
{Документ.Задача.Форма.Задачи.Форма(7347)}: УстановитьДоступностьКомандПриложений();
Проанализируем эту ситуацию. Сообщение говорит нам о том, что программный код пытается обратиться к элементу формы с именем ФормаБизнесПроцессРешениеВопросовВыполненияЗадачЗадатьВопрос, чтобы изменить его свойство Доступность. Судя по названию, это, скорее всего, кнопка «Задать вопрос». Ошибка возникает потому, что для текущего пользователя (без прав администратора) этот элемент на форме по какой-то причине отсутствует, но код об этом «не знает» и пытается с ним работать, что и приводит к аварийному завершению операции.
Причин такого поведения может быть несколько. Рассмотрим их в порядке от самых простых и частых к более сложным, требующим вмешательства программиста.
Очень часто подобные ошибки, особенно после обновлений конфигурации, связаны с кешем метаданных. На компьютере пользователя хранятся временные файлы, описывающие структуру форм и объектов. Если на сервере структура изменилась, а на клиенте осталась старая, возникают конфликты. Очистка кеша заставит программу при следующем запуске скачать актуальные данные с сервера.
Выполним очистку кеша по шагам:
%AppData% и нажмите Enter. Вы попадете в папку C:\Users\Имя_пользователя\AppData\Roaming.1C и внутри него — папку 1cv8. В ней хранятся папки с длинными, непонятными именами (GUID). Удалите все эти папки. Не бойтесь, это безопасно, программа создаст их заново.%LocalAppData% и нажмите Enter. Вы попадете в папку C:\Users\Имя_пользователя\AppData\Local.1C и внутри нее — 1cv8. Удалите оттуда все папки с длинными именами.Этот способ помогает в большинстве случаев, когда ошибка «Поле объекта не обнаружено» появляется спонтанно.
Если очистка кеша не помогла, скорее всего, мы имеем дело с программной ошибкой в самой конфигурации «1С:Документооборот». Фирма «1С» регулярно выпускает исправления для таких ошибок в виде специальных расширений — патчей. Они имеют имена вида EF_....
Проблема, когда для пользователя без полных прав не создается элемент формы, а код к нему обращается, является классическим примером бага, который исправляется патчами. Проверим их наличие и установим.
После установки исправлений обязательно повторно очистите кеш у проблемного пользователя, как описано в первом решении, и проверьте результат.
Как показывает практика, описанная ошибка часто встречалась на более старых версиях технологической платформы 1С. Например, на версии 8.3.22.2283. В более новых релизах (например, 8.3.23 и выше) фирма «1С» исправляла множество ошибок, связанных с отрисовкой управляемых форм, работой расширений и видимостью элементов в зависимости от прав доступа.
Почему это важно: Платформа — это «движок», на котором работает ваша конфигурация. Иногда проблема кроется не в самой программе (конфигурации), а в движке. Обновление платформы может решить проблему без изменения конфигурации.
Что нужно сделать:
1С:Предприятие 8.3 (8.3.22.2283).Обновление платформы является хорошей практикой, так как это не только решает известные ошибки, но и повышает стабильность и производительность системы в целом.
Если по каким-то причинам обновиться или установить патчи нет возможности, а проблему нужно решить срочно, можно внести небольшое изменение в код. Этот способ требует доступа к конфигуратору и навыков программирования.
Идея исправления: Обернуть проблемную строку кода, вызывающую ошибку, в конструкцию Попытка ... Исключение ... КонецПопытки. Это позволит программе «проигнорировать» ошибку, если элемент на форме не найден, и продолжить выполнение кода.
Важно! Все изменения следует вносить через расширение конфигурации, чтобы не снимать основную конфигурацию с поддержки.
Порядок действий:
Документ.Задача.Форма.Задачи.УстановитьДоступностьКомандПриложений() и в ней строку, вызывающую ошибку. Исходный код выглядит примерно так:
// ... какой-то код
Элементы.ФормаБизнесПроцессРешениеВопросовВыполненияЗадачЗадатьВопрос.Доступность = ...;
// ... какой-то код
Изменим его, добавив проверку на существование элемента или блок обработки исключений. Более правильный и надежный вариант — с обработкой исключений:
// ... какой-то код
Попытка
Элементы.ФормаБизнесПроцессРешениеВопросовВыполненияЗадачЗадатьВопрос.Доступность = ...;
Исключение
// Элемент не найден, ничего не делаем, просто игнорируем ошибку
КонецПопытки;
// ... какой-то код
После внесения изменений сохраните расширение, обновите базу данных и проверьте работу под проблемным пользователем. Ошибка должна исчезнуть.
Таким образом, мы рассмотрели полный спектр решений: от самых простых пользовательских действий до программного вмешательства. Начинайте всегда с очистки кеша и установки официальных исправлений — в большинстве случаев этого будет достаточно для решения проблемы.