При работе в конфигурации 1С:Бухгалтерия предприятия 3.0 (особенно на платформе версии 8.3.22 и выше) разработчики часто сталкиваются с ситуацией, когда программа выдает критическую ошибку, но отладчик в конфигураторе её игнорирует. Это вызывает сложности при диагностике, особенно если ошибка происходит внутри механизмов загрузки банковских выписок. В этой статье мы подробно разберем, как правильно настроить инструменты отладки и устранить конкретную ошибку преобразования типов, связанную с внедрением Единого Налогового Счета (ЕНС).
Первая и самая частая причина, по которой отладчик «не видит» ошибку или точку останова — это выполнение кода в фоновом режиме. В современных типовых конфигурациях многие длительные процессы, такие как загрузка данных из банка, выполняются не в основном сеансе пользователя, а через механизм ДлительныеОперации в фоновом задании.
Проанализируем шаги, которые необходимо выполнить, чтобы отладчик начал реагировать на код в фоновых процессах:
После включения этой настройки при запуске любого фонового процесса (например, распознавания выписки) конфигуратор автоматически «подцепится» к новому сеансу, и ваши точки останова сработают. Посмотрим на важный нюанс: если вы используете клиент-серверный вариант базы, убедитесь, что сервер 1С запущен с ключом -debug, иначе отладка на стороне сервера будет невозможна даже при включении галочки фоновых заданий. В файловом варианте достаточно настроек в конфигураторе.
Рассмотрим ситуацию, когда после включения отладки фоновых заданий программа начинает останавливаться в «неожиданных» местах. Это часто пугает начинающих разработчиков. Выясним причину такого поведения.
В типовых конфигурациях 1С (таких как БП 3.0) разработчики часто используют конструкцию Попытка...Исключение...КонецПопытки. Если в настройках отладки (меню Отладка — Настройка остановки по ошибке) включен режим Останавливаться по ошибке, конфигуратор будет прерывать выполнение на любой ошибке, даже если она предусмотрена логикой программы и обрабатывается в блоке Исключение.
Как с этим работать:
F5, пока не дойдете до нужного фрагмента кода.Теперь перейдем к технической сути проблемы, возникающей при загрузке выписок. Текст ошибки обычно выглядит так: {ОбщийМодуль.ЕдиныйНалоговыйСчетВызовСервера.Модуль(51)}:НалогУплачиваетсяОтдельно = Не (СвойстваКонтрагента.ГосударственныйОрган). Разберем, почему это происходит.
Причиной является некорректная работа алгоритма сопоставления контрагентов при внедрении функционала ЕНС. Рассмотрим цепочку событий:
ЕдиныйНалоговыйСчетВызовСервера.НалогУплачиваетсяОтдельно, которая обращается к реквизитам контрагента.Неопределено вместо структуры со значением Истина/Ложь.Не к значению, отличному от Булево, платформа выдает фатальную ошибку.Выясним причину плохого поиска контрагентов-госорганов. В отличие от обычных поставщиков, госорганы часто имеют одинаковые расчетные счета (казначейские счета). Программа может ошибаться при автоматическом создании таких контрагентов из файла выписки, так как для них требуется правильно заполнить признак Государственный орган и указать его вид.
Способ 1. Корректное заполнение справочников
Прежде чем приступать к правке кода, проверим данные. Убедитесь, что все налоговые инспекции и фонды, в которые вы отправляете платежи, созданы в справочнике Контрагенты вручную с заполненными ИНН и КПП, а их вид установлен как Государственный орган. Это позволит механизму распознавания выписки корректно подтянуть объект и избежать пустого значения в реквизите.
Способ 2. Исправление через расширение конфигурации
Если конфигурация находится «на замке» (типовая), наиболее правильным техническим решением будет создание расширения. Мы можем обернуть проблемный участок в безопасную проверку. Рассмотрим пример кода, который можно внедрить в модуль ЗагрузкаВыпискиПоБанковскомуСчету (метод ХозяйственнаяОперацияНалог):
&После("ХозяйственнаяОперацияНалог")
Процедура ИН_ХозяйственнаяОперацияНалог(Параметры, Результат)
Попытка
// Здесь выполняется оригинальная логика проверки налога
// Если переменная ВидНалога заполнена некорректно или контрагент пуст,
// мы перехватываем ошибку преобразования типов.
Если ЗначениеЗаполнено(Результат.ХозяйственнаяОперация) Тогда
// Дополнительная проверка или логгирование
КонецЕсли;
Исключение
// Ошибка подавляется, чтобы загрузка выписки не прерывалась
ЗаписьЖурналаРегистрации("ЗагрузкаВыписки", УровеньЖурналаРегистрации.Предупреждение, , ,
"Ошибка при определении параметров ЕНС: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Однако более элегантно будет перехватить вызов в самом модуле ЕдиныйНалоговыйСчетВызовСервера. Проанализируем, как можно изменить логику на более устойчивую:
// Вместо прямого отрицания: Не (СвойстваКонтрагента.ГосударственныйОрган)
// Используем безопасную проверку типа
Если СвойстваКонтрагента.Свойство("ГосударственныйОрган")
И ТипЗнч(СвойстваКонтрагента.ГосударственныйОрган) = Тип("Булево") Тогда
НалогУплачиваетсяОтдельно = Не СвойстваКонтрагента.ГосударственныйОрган;
Иначе
НалогУплачиваетсяОтдельно = Ложь; // По умолчанию считаем, что это не спец. налог
КонецЕсли;
Такой подход гарантирует, что даже если в структуре СвойстваКонтрагента не окажется нужного поля или оно будет равно NULL (например, при левом соединении в запросе), программа не завершится аварийно.
Для успешного решения проблем с отладкой в БП 3.0 всегда начинайте с проверки автоматического подключения к фоновым заданиям. Если вы столкнулись с ошибкой преобразования типа Булево в блоке ЕНС — это верный признак того, что система не смогла идентифицировать контрагента как «Государственный орган». Сочетание правильной настройки нормативно-справочной информации и небольшого корректирующего расширения позволит вам восстановить работоспособность загрузки банковских выписок в кратчайшие сроки.