Как исправить ошибку «Метод объекта не обнаружен (НаличиеСуммыНДС)» при записи платежного поручения в 1С

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

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

{ОбщийМодуль.РаботаСДоговорамиКонтрагентовБП.Модуль(665)}: Метод объекта не обнаружен (НаличиеСуммыНДС)

Эта проблема способна парализовать работу финансового отдела, особенно если платежки создаются в массовом порядке или загружаются из систем клиент-банка. В данной статье мы подробно разберем, почему возникает эта ошибка, как быстро локализовать ее причину с помощью конфигуратора и какие существуют способы ее окончательного устранения.

Выясняем техническую причину ошибки

Давайте проанализируем фрагмент кода программного кода общего модуля РаботаСДоговорамиКонтрагентовБП, на который указывает конфигуратор:


Функция ДокументСНДС(ТекущийДокумент) Экспорт
    Если НЕ ЗначениеЗаполнено(ТекущийДокумент) Тогда
        Возврат Истина;
    КонецЕсли;
        
    Возврат Документы[ТекущийДокумент.Метаданные().Имя].НаличиеСуммыНДС(ТекущийДокумент);
КонецФункции

В этой функции разработчики фирмы «1С» используют механизм динамического обращения к менеджеру документа. Программа берет имя метаданных переданного документа (параметр ТекущийДокумент), находит соответствующий менеджер в коллекции Документы и пытается вызвать у него экспортную функцию НаличиеСуммыНДС().

Суть проблемы крайне проста: в переменной ТекущийДокумент оказывается документ такого типа, в модуле менеджера которого функция НаличиеСуммыНДС() попросту отсутствует (не предусмотрена конфигурацией или затерта при некорректном обновлении). Платформа «1С:Предприятие» не находит нужный метод и прерывает выполнение операции с ошибкой.

Чаще всего в качестве «проблемного» документа выступают:

Подобные документы физически не имеют и не должны иметь функционала проверки НДС в своих менеджерах, однако логика программы по какой-то причине пытается передать их в данную функцию.

Пошаговая диагностика с помощью отладчика в Конфигураторе

Чтобы понять, какой именно документ вызывает сбой, нам потребуется запустить сеанс отладки. Давайте проделаем этот путь по шагам:

  1. Откроем базу данных в режиме Конфигуратора под учетной записью с правами администратора (разработчика).
  2. В главном меню перейдем в раздел Отладка и выберем пункт Настройка отладки....
  3. В открывшемся окне нажмем кнопку Добавить (или настроим реакцию на ошибку) и установим флажок Останавливаться по ошибке. Это заставит конфигуратор мгновенно прервать работу программы в точке возникновения сбоя.
  4. Запустим сеанс отладки «1С:Предприятие», нажав клавишу F5 на клавиатуре.
  5. В открывшемся пользовательском режиме воссоздадим аварийную ситуацию — зайдем в платежное поручение и попытаемся его записать.
  6. Система автоматически перенаправит нас обратно в Конфигуратор и подсветит стрелкой проблемную строку: Возврат Документы[ТекущийДокумент.Метаданные().Имя].НаличиеСуммыНДС(ТекущийДокумент);.
  7. Теперь вызовем окно просмотра значений (Табло). Для этого нажмем сочетание клавиш Ctrl + Alt + W (или выберем в меню Отладка -> Табло).
  8. В поле ввода выражения вставим текст: ТекущийДокумент и нажмем клавишу Enter.

В столбце «Значение» мы увидим конкретную ссылку на документ, который привел к сбою. Например, там может быть указано: "Ввод остатков расчетов с поставщиками №0001 от 01.01.2023". Теперь мы точно знаем врага в лицо!

Способ 1. Исправление данных на стороне пользователя

Как только мы выяснили, какой документ заставляет систему падать, нам нужно понять, как он попал в цепочку расчетов платежного поручения. Рассмотрим основные места проверки:

Способ 2. Очистка кэша метаданных

Если в процессе отладки выяснилось, что в переменной ТекущийДокумент находится вполне стандартный документ (например, обычный «Счет на оплату покупателю»), у менеджера которого обязан быть этот метод, но ошибка все равно возникает — дело в кэше. Такое часто случается при динамическом обновлении конфигурации базы данных без перезапуска сервера.

Для исправления ситуации выполним следующие действия:

  1. Завершим работу всех активных пользователей в информационной базе.
  2. Очистим кэш конфигурации на сервере приложений 1С (путем удаления временных файлов из папки srvinfo) либо очистим локальный кэш пользователя, удалив базу из списка запуска и добавив её заново под тем же путем.
  3. В Конфигураторе запустим процедуру тестирования и исправления: Администрирование -> Тестирование и исправление.... Установим флажки на пунктах «Проверка логической целостности» и «Проверка ссылочной целостности», после чего запустим процесс выполнения.

Способ 3. Безопасная доработка кода (создание расширения)

Если вы являетесь программистом 1С и хотите раз и навсегда обезопасить конфигурацию от подобных падений, оптимальным решением будет написание небольшого расширения, которое сделает функцию ДокументСНДС устойчивой к непредвиденным типам данных. Мы можем обернуть вызов метода менеджера в безопасный блок Попытка ... Исключение.

Давайте посмотрим на пример программного кода, который решает эту задачу:


&Вместо("ДокументСНДС")
Функция ИСПР_ДокументСНДС(ТекущийДокумент)
    
    Если НЕ ЗначениеЗаполнено(ТекущийДокумент) Тогда
        Возврат Истина;
    КонецЕсли;
    
    ИмяМетаданных = ТекущийДокумент.Метаданные().Имя;
    МенеджерДокумента = Документы[ИмяМетаданных];
    
    Попытка
        // Пытаемся вызвать типовой метод менеджера
        Возврат МенеджерДокумента.НаличиеСуммыНДС(ТекущийДокумент);
    Исключение
        // Если метод в менеджере не найден, перехватываем ошибку.
        // Возвращаем Ложь, сигнализируя системе, что у данного документа нет НДС.
        Возврат Ложь;
    КонецПопытки;
    
КонецФункции

Преимущество данного решения: конфигурация остается полностью типовой и обновляемой, так как все изменения вынесены в безопасное расширение. Программа больше никогда не аварийно завершит работу, даже если пользователи выберут самый экзотический документ-основание.

Рекомендуем также своевременно обновлять конфигурацию «Бухгалтерия предприятия» до актуальных релизов. Подобные недочеты оперативно устраняются разработчиками фирмы «1С» в последующих пакетах обновлений и патчей.

← На главную