Разработка и Конфигурация · 9 мин
Как проверить функцию в 1С: пошаговое руководство
Как проверить функцию в 1С: отладка через точки останова, проверка возвращаемых значений, типовые ошибки и тестирование на реальных данных.
Проверка функции в 1С — это не только запуск кода и взгляд на результат. Корректная проверка включает отладку по шагам, контроль входных параметров, анализ возвращаемого значения и тестирование граничных случаев: пустых ссылок, незаполненных реквизитов, нулевых значений. Без этого функция может «работать» на тестовом примере и падать в реальной базе.
Инструменты зависят от контекста: для кода в конфигураторе используют отладчик, для оценки выражений — табло и консоль кода, для проверки логики на данных — консоль запросов и отчёты. Ниже разобраны рабочие сценарии: от простого просмотра значения до проверки функции общего модуля на копии базы.
Что значит «проверить функцию» и какие есть способы
Под проверкой функции обычно понимают три задачи: убедиться, что функция вызывается в нужный момент, что она получает ожидаемые параметры и что возвращает корректный результат. Для каждой задачи есть свой инструмент, и выбор зависит от того, где находится код — в модуле объекта, общем модуле, форме или внешней обработке.
Основные способы проверки: отладчик конфигуратора (точки останова, шаги, табло), вывод промежуточных значений через Сообщить() или запись в журнал регистрации, консоль кода для вызова функции напрямую с произвольными параметрами, а также консоль запросов — если функция строит запрос и нужно проверить его результат.
Сравнение способов проверки
Полный контроль: шаги, стек вызовов, значения переменных. Требует настройки отладки и права на неё.
Быстро и без настройки, но засоряет код и не показывает контекст вызова.
Позволяет вызвать функцию с любыми параметрами напрямую. Подходит для серверных функций общих модулей; требует внешней обработки.
Незаменима, если функция формирует или выполняет запрос, — виден сам запрос и его результат.
Проверка функции через отладчик
Отладка — основной и самый надёжный способ. В конфигураторе включите отладку (меню «Отладка» → «Начать отладку» или клавиша F5), предварительно убедившись, что в свойствах информационной базы разрешена отладка. Для клиент-серверного режима отладку нужно включить и на сервере 1С (параметр -debug в командной строке службы агента).
Поставьте точку останова (F9) на первой строке тела функции. Когда выполнение дойдёт до неё, код остановится, и вы сможете идти по шагам: F11 — шаг с заходом в вызываемые процедуры и функции, F10 — шаг без захода, Shift+F11 — выход из текущей функции. Так видно, какая именно ветка условий срабатывает и где логика расходится с ожиданиями.
Если функция не останавливается на точке — значит, она либо не вызывается вовсе, либо выполняется в другом контексте (например, на сервере при отладке только клиента). Проверьте настройку «Отладка» → «Подключение» и типы подключаемых предметов отладки.
- 1Откройте модуль с функцией и поставьте точку останова на первой исполняемой строке.
- 2Запустите отладку (F5) и выполните действие, которое вызывает функцию.
- 3Когда выполнение остановится, откройте табло (Ctrl+Alt+W) и добавьте туда параметры функции.
- 4Пройдите код по шагам (F10/F11), наблюдая изменение переменных.
- 5На строке Возврат проверьте итоговое значение в табло до выхода из функции.
- 6Снимите точки останова и завершите отладку после проверки.
Контроль значений: табло и стек вызовов
Табло (окно «Вычислить выражение», Shift+F9, и «Табло», Ctrl+Alt+W) — главный инструмент проверки. В табло можно добавить параметры функции, локальные переменные и любые выражения, включая обращения к свойствам объектов: например, Параметры.Документ.СуммаДокумента. Значения обновляются на каждом шаге.
Стек вызовов показывает, откуда функция была вызвана. Это критично, когда функция вызывается из нескольких мест и возвращает разные результаты в зависимости от контекста. Двойной щелчок по строке стека переводит к точке вызова — можно проверить, какие аргументы реально передаются.
Для коллекций (массивов, таблиц значений, выборок запроса) в табло доступен просмотр содержимого. Если функция возвращает таблицу значений, проверьте не только количество строк, но и типы колонок и значения в ключевых строках — ошибки типов данных часто всплывают именно здесь.
Быстрая проверка без отладчика
Когда отладка недоступна (нет прав, рабочая база, серверный код без настроенной отладки), используют вывод промежуточных значений. Классический приём — вставить Сообщить() в ключевых точках функции: на входе (значения параметров), перед возвратом (результат) и внутри условных веток.
Для серверного кода, где сообщения пользователю неудобны, лучше писать в журнал регистрации через ЗаписьЖурналаРегистрации() — записи потом фильтруются по событию. Это безопаснее: сообщения не мешают пользователям, а история сохраняется.
После проверки все отладочные вставки нужно удалить или закомментировать. Оставленный Сообщить() в цикле обработки тысяч строк документов способен заметно замедлить работу пользователей и засорить окно сообщений.
// Временная диагностика внутри функции
ЗаписьЖурналаРегистрации("ПроверкаФункции", УровеньЖурналаРегистрации.Информация, , , "Вход: " + Строка(Параметр1) + "; результат: " + Строка(Результат));Проверка функции с произвольными параметрами
Часто нужно проверить функцию из общего модуля, не запуская всю бизнес-логику. Для этого удобна внешняя обработка «консоль кода»: в ней пишется вызов функции с нужными аргументами, а результат выводится или инспектируется. Так можно проверить граничные случаи: пустая ссылка, Неопределено, нулевое количество, дата на границе периода.
Обязательно проверяйте функцию на «плохих» данных: незаполненный реквизит объекта, документ без строк, отменённый проведением документ. Большинство реальных ошибок возникает не на корректных данных, а на неожиданных. Если функция обращается к реквизитам объекта, убедитесь, что она корректно обрабатывает ситуацию, когда объект не найден по ссылке (битая ссылка).
Проверка результата и типичные ошибки
Функция считается проверенной, когда подтверждены три вещи: она вызывается в нужный момент, получает ожидаемые значения параметров и возвращает корректный результат для всех проверенных сценариев, включая граничные. Если хотя бы один пункт не подтверждён, причина ошибки остаётся неустановленной.
Частая ситуация: функция возвращает правильное значение в отладчике, но вызывающий код получает другое. Причины — потеря значения при передаче между клиентом и сервером, изменение параметра по ссылке (параметр с Знач и без него), либо повторный вызов функции с уже изменёнными данными. Проверяйте значение и внутри функции, и сразу после вызова.
Ограничения и когда нужна помощь
Не весь код доступен для проверки одинаково. Функции в модулях с признаком «Привилегированный» выполняются без проверки прав, но отлаживаются так же. Код внешних компонентов и запросы к СУБД напрямую в отладчике не видны — их проверяют косвенно, по входным и выходным данным.
Если функция является частью типовой конфигурации на поддержке, изменять её для отладочных вставок не стоит — используйте отладчик или расширение конфигурации. При подозрении на ошибку в типовом коде сначала проверьте, не исправлена ли она в свежем релизе, и воспроизведите проблему на копии.
Что важно запомнить
Проверка функции в 1С строится на трёх шагах: убедиться, что функция вызывается; проконтролировать входные параметры; проверить возвращаемое значение на типовых и граничных данных. Основной инструмент — отладчик с табло, запасной — журнал регистрации и консоль кода. Любые проверки с изменением данных выполняйте только на копии базы.
Частые вопросы
Почему точка останова в функции не срабатывает?
Чаще всего функция выполняется в контексте, который не подключён к отладке: например, код серверный, а отладка настроена только на клиент. Проверьте диалог «Отладка» → «Подключение» и включите нужные типы предметов отладки. Вторая причина — функция действительно не вызывается: проверьте условие, внутри которого стоит вызов.
Как проверить функцию, если нет прав на отладку?
Используйте запись в журнал регистрации через ЗаписьЖурналаРегистрации() в ключевых точках функции — это работает без права «Отладка». Либо попросите администратора выдать право отладки или скопировать базу для тестирования в отдельном контуре.
Как посмотреть, что возвращает функция, не меняя код?
В отладчике дойдите до строки с оператором Возврат и вычислите выражение результата в табло (Shift+F9). Альтернатива — вызвать функцию из консоли кода с теми же параметрами и вывести результат напрямую.
Функция возвращает Неопределено, хотя должна вернуть значение. Что проверить?
Проверьте, что во всех ветках логики есть оператор Возврат: если ни один Возврат не выполнился, функция вернёт Неопределено. Также убедитесь, что переменная результата не перезаписывается после присвоения — пройдите код по шагам и отследите её значение в табло.
Можно ли проверять функции прямо на рабочей базе?
Отладка и чтение данных — да, с осторожностью: точки останова останавливают сеанс и могут мешать работе. Любые функции, которые записывают данные, проводят документы или изменяют регистры, проверяйте только на копии базы — последствия в рабочей базе могут быть необратимыми.