В процессе работы с конфигурацией «1С:Управление нашей фирмой» версии 1.6.25 (особенно в диапазоне релизов от 1.6.25.139 до 1.6.25.157) технические специалисты часто сталкиваются с неприятной ошибкой при попытке записать изменения в карточке организации. Система выдает системное сообщение: «Поле объекта не обнаружено (ЗаданиеВыполнено)». Давайте подробно разберем, почему это происходит и как устранить проблему с помощью небольшого программного исправления.
Проанализируем ситуацию: ошибка локализована в общем модуле КалендарьОтчетности, а именно в функции ЗапуститьЗаполнениеВФоне. В указанных релизах УНФ произошел переход на новые механизмы Библиотеки стандартных подсистем (БСП) для работы с длительными операциями. При записи организации, особенно если меняются такие реквизиты, как ИНН, КПП или система налогообложения, конфигурация инициирует фоновый пересчет календаря налогов и отчетности.
Рассмотрим механику процесса: вызывающий код ожидает, что функция вернет структуру, содержащую логический флаг ЗаданиеВыполнено. Однако, из-за особенностей работы менеджера заданий на платформе 1С:Предприятие 8.3.18 и выше, функция ДлительныеОперации.ЗапуститьВыполнениеВФоне (которую вызывает типовой код) может вернуть структуру со свойством Статус, но без свойства ЗаданиеВыполнено, если задача завершилась синхронно или имеет специфическое состояние очереди.
Когда основной программный код пытается обратиться к отсутствующему свойству напрямую через точку, происходит аварийное завершение работы процедуры. Это типичный «баг» переходного периода между версиями БСП внутри конфигурации.
Для исправления этой ошибки без внесения изменений в основную конфигурацию (чтобы сохранить поддержку), мы рекомендуем использовать механизм расширений. Создадим расширение и добавим в него общий модуль КалендарьОтчетности, где перехватим проблемную функцию ЗапуститьЗаполнениеВФоне с помощью аннотации &Вместо.
Посмотрим на пример реализации кода, который проверяет наличие необходимых свойств и корректно заполняет их, предотвращая падение системы:
&Вместо("ЗапуститьЗаполнениеВФоне")
Функция дор_ЗапуститьЗаполнениеВФоне(ИдентификаторФормы, Организация, ИзменилсяВидОрганизации)
// Сначала вызываем основную логику типового решения
Результат = ПродолжитьВызов(ИдентификаторФормы, Организация, ИзменилсяВидОрганизации);
// Проверяем, вернула ли типовая функция ожидаемое свойство
// Если свойства "ЗаданиеВыполнено" нет, но есть "Статус", заполняем его вручную
Если НЕ Результат.Свойство("ЗаданиеВыполнено") И Результат.Свойство("Статус") Тогда
// Сравниваем статус в нижнем регистре для исключения ошибок типизации
Результат.Вставить("ЗаданиеВыполнено", НРег(Результат.Статус) = "выполнено");
КонецЕсли;
Возврат Результат;
КонецФункции
Давайте подробно выясним, что именно делает этот код и почему он эффективен:
ПродолжитьВызов: Мы позволяем системе выполнить всю штатную логику. В большинстве случаев она отработает корректно, но вернет «неполную» структуру.Свойство(): Использование этого метода — стандарт безопасного программирования в 1С. Мы не обращаемся к Результат.ЗаданиеВыполнено напрямую, чтобы не вызвать ту самую ошибку, которую лечим.Статус: В современных версиях БСП статус фонового задания передается строкой (например, "Выполнено", "Ошибка", "Выполняется").НРег: Мы приводим значение статуса к нижнему регистру ("выполнено"), чтобы гарантировать корректное сравнение, независимо от того, как платформа вернула строку.ЗаданиеВыполнено со значением Истина. Это именно то, что ждет вызывающая процедура в модуле формы организации.Проанализируем ситуацию глубже. Если после применения этой «заплатки» вы все еще сталкиваетесь с проблемами при записи организации, стоит обратить внимание на следующие моменты:
Версия платформы: Если вы используете платформу версии 8.3.18.х и выше, убедитесь, что в свойствах конфигурации (или расширения) установлен корректный режим совместимости. Строгая типизация в новых версиях платформы делает подобные ошибки более частыми.
Другие места возникновения: Аналогичная логика работы с фоновыми заданиями используется в «Мониторе налогов и отчетности». Если вы видите похожую ошибку там, проанализируйте общий модуль КалендарьОтчетностиВызовСервера. В нем также может потребоваться аналогичная проверка через Результат.Свойство().
Идентификатор задания: В некоторых случаях структура может содержать ИдентификаторЗадания. Если ваше расширение предполагает сложную обработку, полезно добавить логику проверки и этого поля, чтобы система могла корректно отслеживать прогресс выполнения, если задача не завершилась мгновенно.
Помните, что данное решение является временным («костылем») и предназначено для тех, кто не может оперативно обновить конфигурацию до версии 1.6.26 или перейти на УНФ 3.0, где данная ошибка исправлена разработчиками 1С на уровне ядра библиотеки.