К статье
Практический материал

Разработка и Конфигурация · 10 мин

Отладка в 1С 8.3: как быстро найти ошибку

Практическое руководство по отладке в 1С 8.3: точки останова, конфигуратор, замеры производительности, журнал регистрации и типичные приёмы поиска ошибок.

Ошибка в 1С 8.3 почти всегда воспроизводима — значит, её можно локализовать системно, а не перебором догадок. Правильный подход: сначала зафиксировать условия появления сбоя (пользователь, документ, операция, дата), затем подключить отладчик конфигуратора и пройти проблемный участок кода по шагам, контролируя значения переменных. В большинстве случаев причина находится за 15–30 минут, если действовать последовательно.

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

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

Подготовка: включение отладки и воспроизведение ошибки

Прежде чем искать причину, убедитесь, что отладка вообще разрешена. В конфигураторе откройте меню «Сервис → Параметры» и на вкладке «Запуск 1С:Предприятия» проверьте настройки отладки. Для клиент-серверного режима отладку нужно разрешить на сервере 1С — служба агента сервера запускается с ключом отладки, иначе точки останова в серверном коде срабатывать не будут.

Второй шаг — стабильное воспроизведение. Запишите точную последовательность действий: какой документ открывается, какие поля заполняются, на какой кнопке происходит сбой. Если ошибка возникает только у конкретного пользователя, проверьте его права и настройки — причина может быть в RLS или в персональных отборах, а не в коде.

Если ошибка плавающая и не воспроизводится по шагам, снимите скриншот сообщения об ошибке и найдите соответствующие записи в журнале регистрации за то же время. Текст ошибки и имя пользователя сильно сузят область поиска.

Точки останова и пошаговое выполнение кода

Точка останова ставится кликом по левому полю строки в модуле или клавишей F9. После запуска отладки (F5 или «Отладка → Начать отладку») выполните в предприятии действие, вызывающее ошибку, — выполнение остановится на вашей точке. Дальше двигайтесь по коду управляемо: F11 — шаг с заходом в процедуры, F10 — шаг через вызов, Shift+F11 — выход из текущей процедуры.

Ключевой приём — не листать весь код, а сокращать область поиска. Поставьте точку в начале подозрительного обработчика: если ошибка возникает до остановки — причина раньше, если после — дальше. Таким «делением пополам» за несколько итераций вы локализуете проблемную строку даже в большом модуле.

Для ошибок, которые происходят глубоко внутри типовых механизмов, полезна остановка по ошибке: «Отладка → Остановка по ошибке». Отладчик прервётся ровно в том месте, где возникло исключение, и покажет стек вызовов — цепочку процедур, приведших к сбою. Часто виновата не та строка, где упал код, а переданный в неё неверный параметр из вызывающей процедуры.

Порядок действий при поиске ошибки в коде
  1. 1
    Сделайте копию базы и воспроизведите ошибку на ней
  2. 2
    Включите отладку: Отладка → Начать отладку (F5)
  3. 3
    Включите остановку по ошибке или поставьте точку останова в подозрительном модуле
  4. 4
    Выполните в предприятии действие, вызывающее сбой
  5. 5
    Изучите стек вызовов и значения переменных через табло (Shift+F9)
  6. 6
    Пройдите проблемный участок по шагам (F10/F11) и найдите строку, где значение становится неверным
  7. 7
    Исправьте код, обновите конфигурацию базы данных и повторите сценарий для проверки

Контроль значений: табло, вычисление выражений и стек вызовов

Табло (Ctrl+Alt+W или «Отладка → Табло») показывает текущие значения переменных и произвольных выражений. Добавьте в него ключевые переменные: ссылку на документ, результат запроса, параметры процедуры. Для объектов раскрывайте структуру — можно посмотреть табличные части, движения, свойства вложенных объектов.

Окно «Вычислить выражение» (Shift+F9) позволяет выполнить произвольный код в контексте остановки: проверить результат функции, выполнить запрос, посмотреть значение функциональной опции. Это безопасно для чтения, но помните: присваивания здесь реально меняют данные в памяти, а иногда и в базе.

Стек вызовов («Отладка → Стек вызовов») отвечает на вопрос «кто сюда пришёл». Если процедура вызывается из десяти мест и падает только в одном сценарии, поднимайтесь по стеку и смотрите аргументы на каждом уровне — неверное значение обычно формируется выше по цепочке.

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

Отладка запросов и ошибок в данных

Значительная часть «ошибок кода» в 1С — на самом деле ошибки запросов: не те отборы, лишние соединения, потеря строк из-за внутреннего соединения вместо левого. Скопируйте текст запроса в консоль запросов, подставьте реальные параметры из табло и выполните — сразу станет видно, что возвращает выборка на проблемных данных.

Типичные признаки проблем с запросом: пустой результат при наличии данных (проверьте отборы и соединения), задвоение строк (соединение с таблицей, где ключ не уникален), неправильные итоги (не тот период или виртуальная таблица без отбора по измерениям). Левое соединение с проверкой на NULL помогает увидеть, какие строки «теряются».

Для ошибок в данных — битых ссылок, отрицательных остатков, расхождений итогов — используйте «Тестирование и исправление» (Администрирование → Обслуживание) на копии базы и типовые отчёты для сверки. Объекты с битыми ссылками находятся поиском по строке вида «<Объект не найден>» в журнале регистрации и универсальными отчётами.

Контрольные точки

Как проверить результат исправления

Повторение исходного сценария
Норма

Действие выполняется без исключения, результат корректен

Тревожный признак

Ошибка возникает снова или появилась новая

Смежные сценарии
Норма

Похожие документы и операции работают как раньше

Тревожный признак

Исправление сломало соседний функционал

Данные после операции
Норма

Движения, остатки и отчёты сходятся

Тревожный признак

Появились расхождения или лишние записи

Журнал регистрации и замеры производительности

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

Если жалоба звучит как «всё тормозит», а не «вылетает ошибка», включайте замер производительности («Отладка → Замер производительности»). После воспроизведения операции вы получите таблицу: какие строки кода и запросы заняли больше всего времени. Оптимизируйте точечно — обычно 80% времени занимает один запрос в цикле или обращение к базе внутри перебора строк.

Для серверной базы полезен и технологический журнал — он фиксирует запросы к СУБД, блокировки и исключения на уровне платформы. Настройка требует правки конфигурационного файла logcfg.xml, поэтому привлекайте администратора, если нет опыта.

Типичные ошибки при отладке
01
Отладка на боевой базе — остановленная транзакция блокирует работу пользователей, а правка данных ломает учёт
02
Поиск по месту падения вместо места причины — исключение возникает там, где используется неверное значение, а не там, где оно появилось
03
Игнорирование стека вызовов — без него не видно, кто передал неверный параметр
04
Забытые точки останова и вставленные сообщения в коде — после исправления их оставляют, и пользователи видят лишние окна
05
Исправление без проверки смежных сценариев — починили один документ, сломали три других

Частые сценарии ошибок и как их разбирать

«Ошибка при вызове метода контекста»

Такое сообщение означает, что метод вызван с неверными аргументами или в неверном состоянии объекта. Остановитесь по ошибке, посмотрите в табло значения всех аргументов: чаще всего один из них — Неопределено или значение не того типа. Поднимитесь по стеку и найдите, где этот аргумент должен был быть заполнен.

Документ не проводится

Откройте обработчик «ОбработкаПроведения» модуля объекта и поставьте точку останова на «Отказ = Истина» — таких мест может быть несколько, поставьте точки на все. Проведите документ: остановка покажет конкретную проверку, которая не проходит, и значения, на которых она срабатывает. Дальше проверяйте данные: остатки, заполненность реквизитов, дату запрета изменения.

Ошибка только у одного пользователя

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

FAQ

Точка останова не срабатывает, хотя код точно выполняется. Что делать?

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

Как отладить код, который выполняется на сервере в клиент-серверной базе?

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

Можно ли найти ошибку без конфигуратора?

Частично. Журнал регистрации покажет текст ошибки, пользователя и контекст; типовые отчёты и тестирование-исправление помогут с данными. Но для анализа логики кода без конфигуратора доступны только внешние обработки с выводом диагностики, что существенно медленнее.

Ошибка возникает только периодически, воспроизвести не получается. Как её искать?

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

Чем замер производительности отличается от обычной отладки?

Обычная отладка ищет логическую ошибку — почему результат неверный. Замер производительности отвечает на вопрос, где тратится время: какие строки кода и запросы выполнялись дольше всего. Используйте его, когда система работает правильно, но медленно.

Безопасно ли менять значения переменных в табло во время отладки?

На копии базы — да, это удобный способ проверить гипотезу: подставить «правильное» значение и продолжить выполнение. На рабочей базе так делать нельзя: изменённые объекты могут быть записаны, и вы получите данные, которых никто осознанно не вводил.

Итог

Что важно запомнить

Работайте на копии базы, воспроизводите ошибку стабильно, используйте остановку по ошибке и стек вызовов, контролируйте значения через табло, а для проблем с данными и производительностью подключайте журнал регистрации, консоль запросов и замер производительности. После исправления всегда проверяйте смежные сценарии.