При отладке программного кода в управляемом приложении разработчики 1С иногда сталкиваются с ситуацией: при пошаговом прохождении (по клавише F11) выполнение просто проскакивает вызов серверного метода и сразу переходит к следующей строке на клиенте. При этом визуально создается впечатление, что программа игнорирует серверную функцию.
Рассмотрим подробно причины, почему платформа «1С:Предприятие» не проваливается в серверный контекст, и проанализируем варианты решения этой проблемы.
В клиент-серверном варианте работы отладка серверного кода по умолчанию выключена для экономии ресурсов. Если агент сервера 1С (процесс ragent.exe) запущен без специального параметра -debug, отладчик Конфигуратора не сможет подключиться к серверному сеансу. На клиенте код будет выполняться, но провалиться внутрь процедуры или функции с директивой &НаСервере не удастся.
Разберем по шагам, как включить режим отладки на сервере 1С:
ragent.exe).-debug в конец строки параметров запуска.Пример командной строки запуска службы с включенным режимом отладки:
"C:\Program Files\1cv8\8.3.10.2252\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Даже если на сервере включен режим отладки, Конфигуратор должен быть настроен на автоматический перехват серверных предметов отладки. Проанализируем настройки отладчика:
Если разработка ведется во внешней обработке (файл .epf), платформа 1С может кэшировать старую версию модуля в оперативной памяти сеанса. В результате хэш-код модуля в Конфигураторе и в запущенном сеансе различается, из-за чего отладчик проскакивает точки останова.
Чтобы решить проблему с кэшированием внешних обработок, выполним следующие действия:
Повреждение или устаревание временных файлов платформы на рабочем столе разработчика также может блокировать корректную работу предметов отладки.
Для очистки кэша выполните очистку содержимого каталогов:
%appdata%\1C\1Cv8%localappdata%\1C\1Cv8Посмотрим на пример вызова серверной функции из модуля формы:
&НаСервере
Функция Команда1НаСервере()
ФизЛицо = Объект.СсылкаНаОбъект.ФизическоеЛицо;
Для Каждого Строка Из ФизЛицо.КонтактнаяИнформация Цикл
Если Строка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
И Строка.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации Тогда
Адрес = Строка.Представление;
КонецЕсли;
КонецЦикла;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Если при выполнении серверного кода происходит ошибка (например, у реквизита ФизическоеЛицо отсутствует табличная часть КонтактнаяИнформация или реквизит не заполнен), а в Конфигураторе не включена остановка по ошибке, вызов может завершаться досрочно.
Чтобы выявить такие проблемы, включите режим Отладка — Остановка по ошибке и активируйте опцию Останавливаться по ошибке. Это позволит сразу увидеть строку, на которой возникает исключительная ситуация.