Почему отладчик 1С не заходит в процедуру ОбработкаЗаполнения при вводе на основании и как это исправить?

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

При разработке и кастомизации конфигураций на платформе 1С:Предприятие 8 разработчики часто сталкиваются с типовой проблемой: при создании документа на основании другого объекта точка останова в процедуре ОбработкаЗаполнения игнорируется отладчиком. Программа открывает форму нового документа, реквизиты заполняются (или не заполняются из-за ошибки в коде), но отладчик просто проходит мимо установленной точки останова.

Давайте подробно разберем, почему так происходит, как устроена клиент-серверная архитектура в этот момент и какие шаги необходимо предпринять, чтобы гарантированно поймать выполнение кода в процедуре ОбработкаЗаполнения.

Выясняем причину: почему отладчик «пролетает» мимо кода?

Главная причина кроется в архитектуре платформы 1С:Предприятие 8.3. Процедура ОбработкаЗаполнения выполняется исключительно на стороне сервера. Когда пользователь нажимает кнопку «Создать на основании», на клиенте еще нет самого объекта документа. Платформа обращается к серверу, создает там экземпляр нового документа, инициализирует его и вызывает процедуру ОбработкаЗаполнения в модуле объекта. Только после того, как объект заполнен, его данные передаются обратно на клиент для отображения в форме.

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

Рассмотрим пошагово все действия, которые необходимо выполнить для решения этой проблемы.

Шаг 1. Включение режима отладки на сервере 1С (ключ -debug)

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

Для серверов под управлением ОС Windows:

  1. Откроем оснастку «Службы» (команда services.msc в строке выполнения Windows).
  2. Найдем службу сервера 1С, например, «Агент сервера 1С:Предприятия 8.3».
  3. Посмотрим свойства службы и обратим внимание на поле «Исполняемый файл». Нам нужно добавить туда ключ -debug.
  4. Для этого запустим редактор реестра regedit.
  5. Перейдем по пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название ветки может немного отличаться в зависимости от версии платформы).
  6. Найдем параметр ImagePath.
  7. Добавим в конец строки значение -debug через пробел. Исходная строка выглядит примерно так:
    "C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
    После редактирования она должна выглядеть следующим образом:
    "C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
  8. Перезапустим службу Агента сервера 1С.

Для серверов под управлением ОС Linux:

Если серверная часть системы работает на Linux, то реестра Windows у нас нет. Нам нужно отредактировать конфигурационный файл службы:

  1. Откроем конфигурационный файл службы srv1cv83. В зависимости от дистрибутива он может находиться по пути /etc/sysconfig/srv1cv83 (для RedHat/CentOS) или /etc/default/srv1cv83 (для Ubuntu/Debian).
  2. Найдем строку SRV1CV8_DEBUG= и установим ей значение 1 (раскомментировав ее при необходимости):
    SRV1CV8_DEBUG=1
  3. Перезапустим службу сервера 1С с помощью терминальной команды:
    systemctl restart srv1cv83

Шаг 2. Настройка автоматического подключения в Конфигураторе

Даже если сервер запущен с ключом -debug, Конфигуратор не начнет автоматически отлаживать серверный код, пока мы явно не укажем ему это делать. Настроим автоматическое подключение:

  1. Откроем нашу информационную базу в режиме Конфигуратор.
  2. В главном меню перейдем в раздел Отладка — Подключение...
  3. В открывшемся окне нажмем кнопку Автоматическое подключение.
  4. В появившемся диалоговом окне обязательно установим флажок напротив пункта «Клиентские и внешние соединения на сервере».
  5. Также рекомендуется установить флажок «Фоновые задания», так как заполнение документов иногда может инициироваться платформой в фоновых потоках.
  6. Нажмем кнопку «ОК» для сохранения настроек.

Теперь при запуске отладки (клавишей F5) Конфигуратор будет автоматически цепляться ко всем серверным вызовам, происходящим в рамках вашего сеанса.

Шаг 3. Проверка соответствия протоколов отладки

Современные версии платформы 1С:Предприятие 8.3 поддерживают два типа протоколов для обмена данными отладки: классический TCP/IP и более современный HTTP (через локальный или удаленный сервер отладки dbg). Если протокол, настроенный на сервере, отличается от протокола в Конфигураторе, точки останова работать не будут.

Проанализируем настройки в Конфигураторе:

  1. Перейдем в меню Сервис — Параметры.
  2. Откроем вкладку Отладка.
  3. Посмотрим, какой протокол выбран в поле «Способ отладки».
  4. Если используется протокол HTTP, то в параметрах запуска службы сервера 1С также должен быть указан HTTP-сервер отладки (с использованием параметров -http). Если используется классическая отладка, убедимся, что на сервере 1С не включен принудительный HTTP-режим. Протоколы должны совпадать!

Шаг 4. Брандмауэр и сетевые ограничения

При отладке по протоколу TCP/IP сервер 1С должен иметь возможность инициировать обратное сетевое подключение к компьютеру разработчика. Для этого используется стандартный диапазон портов (по умолчанию 1560–1591).

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

  1. Откроем Брандмауэр защитника Windows на компьютере разработчика.
  2. Перейдем в «Дополнительные параметры» и выберем «Правила для входящих подключений».
  3. Создадим новое правило для порта.
  4. Укажем диапазон портов 1560-1591 (для TCP/IP отладки) или конкретный порт отладки для HTTP (обычно 1550).
  5. Разрешим подключение для всех профилей сети.

Шаг 5. Контроль сигнатуры и расположения процедуры

Если все сетевые настройки выполнены верно, но точка останова все равно выглядит блеклой или перечеркнутой (красный кружок с вопросительным знаком), проблема может заключаться в самом коде. Проверим правильность объявления процедуры ОбработкаЗаполнения.

Про процедуру важно знать следующее:

Рассмотрим правильный пример объявления процедуры в модуле объекта документа:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    // Проверим тип входящих данных
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
        
        // Алгоритм заполнения реквизитов нового документа
        Автор = ПараметрыСеанса.ТекущийПользователь;
        Сделка = ДанныеЗаполнения;
        Контрагент = ДанныеЗаполнения.Контрагент;
        ДоговорКонтрагента = ДанныеЗаполнения.ДоговорКонтрагента;
        
        // Заполнение табличной части "Товары"
        Для Каждого СтрокаИсточника Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = Товары.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсточника);
        КонецЦикла;
        
    КонецЕсли;

КонецПроцедуры

Обратите внимание на параметр ДанныеЗаполнения. Именно в него платформа передает ссылку на объект-основание (в нашем примере это ЗаказПокупателя), из которого мы программно переносим данные в наш новый документ.

Шаг 6. Обновление конфигурации базы данных и очистка кэша

Бывают ситуации, когда вы только что написали процедуру, поставили точку останова, нажали F5, но отладчик не останавливается. Возможно, конфигурация базы данных просто не была обновлена. Нажмите клавишу F7 в Конфигураторе или синюю кнопку на панели инструментов («Обновить конфигурацию базы данных»), чтобы изменения вступили в силу.

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

Резюме

Для успешной отладки процедуры ОбработкаЗаполнения нам необходимо помнить три золотых правила разработчика 1С:

  1. Код инициализации при вводе на основании работает на сервере.
  2. Сервер 1С должен быть запущен с флагом -debug.
  3. В Конфигураторе в меню подключений обязательно должно быть настроено автоподключение к серверным соединениям.
← На главную