При работе в программе 1С:Бухгалтерия предприятия, редакция 3.0 пользователи и разработчики иногда сталкиваются с неожиданным аварийным завершением работы системы при попытке записать или провести документ Платежное поручение. Программа выбрасывает неприятное системное исключение:
{ОбщийМодуль.РаботаСДоговорамиКонтрагентовБП.Модуль(665)}: Метод объекта не обнаружен (НаличиеСуммыНДС)
Эта проблема способна парализовать работу финансового отдела, особенно если платежки создаются в массовом порядке или загружаются из систем клиент-банка. В данной статье мы подробно разберем, почему возникает эта ошибка, как быстро локализовать ее причину с помощью конфигуратора и какие существуют способы ее окончательного устранения.
Давайте проанализируем фрагмент кода программного кода общего модуля РаботаСДоговорамиКонтрагентовБП, на который указывает конфигуратор:
Функция ДокументСНДС(ТекущийДокумент) Экспорт
Если НЕ ЗначениеЗаполнено(ТекущийДокумент) Тогда
Возврат Истина;
КонецЕсли;
Возврат Документы[ТекущийДокумент.Метаданные().Имя].НаличиеСуммыНДС(ТекущийДокумент);
КонецФункции
В этой функции разработчики фирмы «1С» используют механизм динамического обращения к менеджеру документа. Программа берет имя метаданных переданного документа (параметр ТекущийДокумент), находит соответствующий менеджер в коллекции Документы и пытается вызвать у него экспортную функцию НаличиеСуммыНДС().
Суть проблемы крайне проста: в переменной ТекущийДокумент оказывается документ такого типа, в модуле менеджера которого функция НаличиеСуммыНДС() попросту отсутствует (не предусмотрена конфигурацией или затерта при некорректном обновлении). Платформа «1С:Предприятие» не находит нужный метод и прерывает выполнение операции с ошибкой.
Чаще всего в качестве «проблемного» документа выступают:
ОперацияБух);Подобные документы физически не имеют и не должны иметь функционала проверки НДС в своих менеджерах, однако логика программы по какой-то причине пытается передать их в данную функцию.
Чтобы понять, какой именно документ вызывает сбой, нам потребуется запустить сеанс отладки. Давайте проделаем этот путь по шагам:
Возврат Документы[ТекущийДокумент.Метаданные().Имя].НаличиеСуммыНДС(ТекущийДокумент);.ТекущийДокумент и нажмем клавишу Enter.В столбце «Значение» мы увидим конкретную ссылку на документ, который привел к сбою. Например, там может быть указано: "Ввод остатков расчетов с поставщиками №0001 от 01.01.2023". Теперь мы точно знаем врага в лицо!
Как только мы выяснили, какой документ заставляет систему падать, нам нужно понять, как он попал в цепочку расчетов платежного поручения. Рассмотрим основные места проверки:
Если в процессе отладки выяснилось, что в переменной ТекущийДокумент находится вполне стандартный документ (например, обычный «Счет на оплату покупателю»), у менеджера которого обязан быть этот метод, но ошибка все равно возникает — дело в кэше. Такое часто случается при динамическом обновлении конфигурации базы данных без перезапуска сервера.
Для исправления ситуации выполним следующие действия:
srvinfo) либо очистим локальный кэш пользователя, удалив базу из списка запуска и добавив её заново под тем же путем.Если вы являетесь программистом 1С и хотите раз и навсегда обезопасить конфигурацию от подобных падений, оптимальным решением будет написание небольшого расширения, которое сделает функцию ДокументСНДС устойчивой к непредвиденным типам данных. Мы можем обернуть вызов метода менеджера в безопасный блок Попытка ... Исключение.
Давайте посмотрим на пример программного кода, который решает эту задачу:
&Вместо("ДокументСНДС")
Функция ИСПР_ДокументСНДС(ТекущийДокумент)
Если НЕ ЗначениеЗаполнено(ТекущийДокумент) Тогда
Возврат Истина;
КонецЕсли;
ИмяМетаданных = ТекущийДокумент.Метаданные().Имя;
МенеджерДокумента = Документы[ИмяМетаданных];
Попытка
// Пытаемся вызвать типовой метод менеджера
Возврат МенеджерДокумента.НаличиеСуммыНДС(ТекущийДокумент);
Исключение
// Если метод в менеджере не найден, перехватываем ошибку.
// Возвращаем Ложь, сигнализируя системе, что у данного документа нет НДС.
Возврат Ложь;
КонецПопытки;
КонецФункции
Преимущество данного решения: конфигурация остается полностью типовой и обновляемой, так как все изменения вынесены в безопасное расширение. Программа больше никогда не аварийно завершит работу, даже если пользователи выберут самый экзотический документ-основание.
Рекомендуем также своевременно обновлять конфигурацию «Бухгалтерия предприятия» до актуальных релизов. Подобные недочеты оперативно устраняются разработчиками фирмы «1С» в последующих пакетах обновлений и патчей.