Почему отладчик в 1С не останавливается на точке останова и как исправить ошибку преобразования к типу Булево при загрузке выписки

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

При работе в конфигурации 1С:Бухгалтерия предприятия 3.0 (особенно на платформе версии 8.3.22 и выше) разработчики часто сталкиваются с ситуацией, когда программа выдает критическую ошибку, но отладчик в конфигураторе её игнорирует. Это вызывает сложности при диагностике, особенно если ошибка происходит внутри механизмов загрузки банковских выписок. В этой статье мы подробно разберем, как правильно настроить инструменты отладки и устранить конкретную ошибку преобразования типов, связанную с внедрением Единого Налогового Счета (ЕНС).

Настройка автоматического подключения отладчика к фоновым заданиям

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

Проанализируем шаги, которые необходимо выполнить, чтобы отладчик начал реагировать на код в фоновых процессах:

  1. Откроем Конфигуратор и перейдем в меню Отладка.
  2. Выберем пункт Подключение....
  3. В открывшемся окне нажмем кнопку Автоматическое подключение....
  4. В появившемся списке обязательно установим флажок напротив пункта Фоновые задания.

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

Особенности режима «Останавливаться по ошибке»

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

В типовых конфигурациях 1С (таких как БП 3.0) разработчики часто используют конструкцию Попытка...Исключение...КонецПопытки. Если в настройках отладки (меню Отладка — Настройка остановки по ошибке) включен режим Останавливаться по ошибке, конфигуратор будет прерывать выполнение на любой ошибке, даже если она предусмотрена логикой программы и обрабатывается в блоке Исключение.

Как с этим работать:

Разбор ошибки «Преобразование значения к типу Булево не может быть выполнено»

Теперь перейдем к технической сути проблемы, возникающей при загрузке выписок. Текст ошибки обычно выглядит так: {ОбщийМодуль.ЕдиныйНалоговыйСчетВызовСервера.Модуль(51)}:НалогУплачиваетсяОтдельно = Не (СвойстваКонтрагента.ГосударственныйОрган). Разберем, почему это происходит.

Причиной является некорректная работа алгоритма сопоставления контрагентов при внедрении функционала ЕНС. Рассмотрим цепочку событий:

  1. Программа читает файл выписки и пытается найти получателя платежа.
  2. Если получатель является налоговым органом или фондом, 1С пытается определить, должен ли этот налог уплачиваться отдельно или он входит в состав ЕНС.
  3. Для этого вызывается функция ЕдиныйНалоговыйСчетВызовСервера.НалогУплачиваетсяОтдельно, которая обращается к реквизитам контрагента.
  4. Если контрагент не был найден в базе по ИНН/КПП или был найден «битый» объект, функция получения реквизитов возвращает Неопределено вместо структуры со значением Истина/Ложь.
  5. При попытке выполнить логическую операцию Не к значению, отличному от Булево, платформа выдает фатальную ошибку.

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

Методы решения проблемы

Способ 1. Корректное заполнение справочников

Прежде чем приступать к правке кода, проверим данные. Убедитесь, что все налоговые инспекции и фонды, в которые вы отправляете платежи, созданы в справочнике Контрагенты вручную с заполненными ИНН и КПП, а их вид установлен как Государственный орган. Это позволит механизму распознавания выписки корректно подтянуть объект и избежать пустого значения в реквизите.

Способ 2. Исправление через расширение конфигурации

Если конфигурация находится «на замке» (типовая), наиболее правильным техническим решением будет создание расширения. Мы можем обернуть проблемный участок в безопасную проверку. Рассмотрим пример кода, который можно внедрить в модуль ЗагрузкаВыпискиПоБанковскомуСчету (метод ХозяйственнаяОперацияНалог):


&После("ХозяйственнаяОперацияНалог")
Процедура ИН_ХозяйственнаяОперацияНалог(Параметры, Результат)
    Попытка
        // Здесь выполняется оригинальная логика проверки налога
        // Если переменная ВидНалога заполнена некорректно или контрагент пуст,
        // мы перехватываем ошибку преобразования типов.
        Если ЗначениеЗаполнено(Результат.ХозяйственнаяОперация) Тогда
             // Дополнительная проверка или логгирование
        КонецЕсли;
    Исключение
        // Ошибка подавляется, чтобы загрузка выписки не прерывалась
        ЗаписьЖурналаРегистрации("ЗагрузкаВыписки", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Ошибка при определении параметров ЕНС: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Однако более элегантно будет перехватить вызов в самом модуле ЕдиныйНалоговыйСчетВызовСервера. Проанализируем, как можно изменить логику на более устойчивую:


// Вместо прямого отрицания: Не (СвойстваКонтрагента.ГосударственныйОрган)
// Используем безопасную проверку типа
Если СвойстваКонтрагента.Свойство("ГосударственныйОрган") 
    И ТипЗнч(СвойстваКонтрагента.ГосударственныйОрган) = Тип("Булево") Тогда
    НалогУплачиваетсяОтдельно = Не СвойстваКонтрагента.ГосударственныйОрган;
Иначе
    НалогУплачиваетсяОтдельно = Ложь; // По умолчанию считаем, что это не спец. налог
КонецЕсли;

Такой подход гарантирует, что даже если в структуре СвойстваКонтрагента не окажется нужного поля или оно будет равно NULL (например, при левом соединении в запросе), программа не завершится аварийно.

Резюме

Для успешного решения проблем с отладкой в БП 3.0 всегда начинайте с проверки автоматического подключения к фоновым заданиям. Если вы столкнулись с ошибкой преобразования типа Булево в блоке ЕНС — это верный признак того, что система не смогла идентифицировать контрагента как «Государственный орган». Сочетание правильной настройки нормативно-справочной информации и небольшого корректирующего расширения позволит вам восстановить работоспособность загрузки банковских выписок в кратчайшие сроки.

← На главную