Как исправить ошибку «Поле объекта не обнаружено (ПрименяетсяПБУ18)» в 1С:УТ 11.4 при вводе начальных остатков

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Налоговый учет IT и автоматизация бизнеса
← На главную

При работе с типовыми конфигурациями «1С:Управление торговлей», «1С:ERP» или «1С:Комплексная автоматизация» версии 11.4 (особенно релизов 11.4.4.84 и 11.4.4.88) пользователи нередко сталкиваются с досадной технической ошибкой. При попытке создать или открыть документ Ввод начальных остатков по разделу Прочие расходы система аварийно завершает работу с сообщением: Поле объекта не обнаружено (ПрименяетсяПБУ18). Рассмотрим детально, почему это происходит и как мы можем исправить ситуацию собственными силами, не дожидаясь глобальных обновлений.

Анализируем причину возникновения ошибки

Для начала разберем программный контекст. Ошибка возникает в модуле формы документа ВводОстатков, конкретно в форме ФормаПрочиеРасходы. Проблема локализована в процедуре, которая отвечает за установку видимости полей в зависимости от настроек учетной политики организации. Проанализируем фрагмент кода, на который указывает конфигуратор:


ПараметрыУчетнойПолитики = РегистрыСведений.УчетнаяПолитикаОрганизаций.ПараметрыУчетнойПолитики(Объект.Организация, Объект.Дата);
ПрименяетсяПБУ18 = Истина;
ВедетсяУчетПостоянныхИВременныхРазниц = Истина;
Если ПараметрыУчетнойПолитики <> Неопределено Тогда
    ПрименяетсяПБУ18 = ПараметрыУчетнойПолитики.ПрименяетсяПБУ18; // Здесь происходит авария
    ВедетсяУчетПостоянныхИВременныхРазниц = ПараметрыУчетнойПолитики.ВедетсяУчетПостоянныхИВременныхРазниц;
КонецЕсли;

Выясним причину: функция ПараметрыУчетнойПолитики менеджера регистра сведений возвращает структуру. В данных релизах разработчики 1С провели рефакторинг API учетной политики. В результате, в зависимости от версии ПБУ 18/02 или даты документа, структура может не содержать поле ПрименяетсяПБУ18. Поскольку код обращается к свойству структуры напрямую через точку, а само свойство отсутствует, платформа выбрасывает исключение.

Это классический случай рассинхронизации между измененным программным интерфейсом (общим модулем или менеджером регистра) и экранными формами, которые не были адаптированы под эти изменения.

Вариант решения №1: Безопасное изменение кода (рекомендуется)

Самый надежный способ исправить код — это уйти от прямого обращения к свойству структуры и использовать метод Свойство(). Это позволит коду работать корректно, даже если поле отсутствует. Проанализируем, как должен выглядеть исправленный фрагмент:


ПараметрыУчетнойПолитики = РегистрыСведений.УчетнаяПолитикаОрганизаций.ПараметрыУчетнойПолитики(Объект.Организация, Объект.Дата);
ПрименяетсяПБУ18 = Ложь; // Устанавливаем значение по умолчанию
ВедетсяУчетПостоянныхИВременныхРазниц = Ложь;

Если ПараметрыУчетнойПолитики <> Неопределено Тогда
    // Проверяем наличие свойств перед обращением
    Если ПараметрыУчетнойПолитики.Свойство("ПрименяетсяПБУ18") Тогда
        ПрименяетсяПБУ18 = ПараметрыУчетнойПолитики.ПрименяетсяПБУ18;
    КонецЕсли;
    
    Если ПараметрыУчетнойПолитики.Свойство("ВедетсяУчетПостоянныхИВременныхРазниц") Тогда
        ВедетсяУчетПостоянныхИВременныхРазниц = ПараметрыУчетнойПолитики.ВедетсяУчетПостоянныхИВременныхРазниц;
    КонецЕсли;
КонецЕсли;

Такой подход исключает возникновение ошибки Поле объекта не обнаружено и является хорошим тоном программирования в 1С при работе со структурами, состав которых может динамически меняться.

Вариант решения №2: Использование расширения конфигурации

Если ваша база находится на поддержке и вы не хотите вносить изменения непосредственно в основную конфигурацию, создадим Расширение. Это позволит сохранить возможность типового обновления и одновременно исправит баг. Разберем шаги по реализации расширения:

  1. Создадим новое расширение (или используем существующее).
  2. Добавим в расширение документ ВводОстатков и его форму ФормаПрочиеРасходы.
  3. Найдем процедуру, вызывающую ошибку (обычно это часть ПриЧтенииСозданииНаСервере или связанная с ней УстановитьВидимость).
  4. Используем аннотацию &Вместо для полной замены процедуры или &ИзменениеИКонтроль для точечного исправления.
  5. Вставим исправленный код с использованием метода Свойство(), как было показано выше.

Также можно перехватить саму функцию ПараметрыУчетнойПолитики в менеджере регистра сведений с помощью аннотации &После и принудительно добавлять недостающее поле в структуру, если его там нет:


&После("ПараметрыУчетнойПолитики")
Функция Расш_ПараметрыУчетнойПолитики(Организация, Период)
    Результат = ПродолжитьВызов(Организация, Период);
    Если ТипЗнч(Результат) = Тип("Структура") Тогда
        Если Не Результат.Свойство("ПрименяетсяПБУ18") Тогда
            Результат.Вставить("ПрименяетсяПБУ18", Ложь);
        КонецЕсли;
    КонецЕсли;
    Возврат Результат;
КонецФункции

Вариант решения №3: Официальные патчи и обновления

Фирма 1С признала данную ошибку (баг 00-00155099). Если ваша конфигурация поддерживает автоматическую загрузку исправлений (патчей) через интернет, убедитесь, что эта функция включена. Посмотрим, как это проверить:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Найдем пункт Обновление программы.
  3. Проверим наличие установленных патчей (исправлений). В списке должен присутствовать патч, исправляющий работу документа ВводОстатков.

Если патч недоступен, радикальным решением будет обновление на релиз 11.4.5.x или выше, где структура параметров учетной политики и формы документов приведены к единообразию.

Почему поддержка 1С не всегда видит проблему?

Проанализируем ситуацию, когда техподдержка утверждает, что ошибка «не воспроизводится». Это происходит из-за зависимости структуры ПараметрыУчетнойПолитики от данных конкретной информационной базы. Если в тестовой базе консультанта 1С создана запись учетной политики с другими датами или иным вариантом настройки ПБУ 18/02, алгоритм может пойти по другой ветке, где поле существует. Поэтому при обращении в поддержку крайне важно указывать дату документа ввода остатков и прикладывать скриншот настроек учетной политики из регистра УчетнаяПолитикаОрганизаций.

Резюме: Мы выяснили, что ошибка носит чисто программный характер и вызвана обращением к несуществующему полю структуры. Наилучшим способом оперативного исправления является создание небольшого расширения с безопасным методом Свойство(), что позволит бухгалтеру продолжить ввод начальных остатков без ожидания выхода следующего релиза.

← На главную