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

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

Как отладить ошибку в 1С: практическая инструкция

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

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

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

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

Шаг 1. Зафиксируйте симптомы и условия воспроизведения

Первое действие при любой ошибке — сделать скриншот или скопировать полный текст сообщения. Формулировки вроде «Поле объекта не обнаружено» или «Ошибка при вызове метода контекста» содержат имя объекта, и именно оно указывает направление поиска. Укороченный пересказ «программа ругается» лишает вас главной улики.

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

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

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

Проверьте кэш, права доступа и настройки клиента

Ошибка на одном документеПроблема данных

Проверьте заполненность реквизитов и ссылки

Ошибка после обновленияПроблема кода или расширения

Сравните поведение до и после, проверьте расширения

Плавающая ошибка без закономерностиИнфраструктура

Проверьте сервер, сеть, СУБД и блокировки

Шаг 2. Прочитайте текст ошибки правильно

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

Сообщение «Объект не найден» или битая ссылка вида «<Объект не найден> (123:abc...)» говорит о том, что в базе осталась ссылка на удалённый объект. Это не ошибка кода, а проблема целостности данных, и лечится она иначе — восстановлением объекта или очисткой ссылки.

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

Шаг 3. Проверьте журнал регистрации

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

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

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

Шаг 4. Используйте отладчик конфигуратора

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

Когда выполнение остановлено, смотрите три вещи. Во-первых, стек вызовов — цепочку процедур, которая привела к проблемной строке; часто ошибка в строке лишь следствие неверных данных, подготовленных выше по стеку. Во-вторых, значения переменных — наведите курсор на переменную или добавьте её в табло (Shift+F9), чтобы увидеть фактическое содержимое. В-третьих, тип значения: многие ошибки возникают из-за того, что в переменной оказался не тот тип, который ожидал разработчик — например, Неопределено вместо ссылки.

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

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

Шаг 5. Типовые сценарии и их разбор

Ошибка «Поле объекта не обнаружено»

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

Битые ссылки и «Объект не найден»

Битая ссылка возникает, когда объект удалили физически (например, при обмене или обработкой удаления), а ссылки на него остались. Диагностируется запросом к реквизиту: если ссылка не равна пустой, но выборка по ней не возвращает данных — ссылка битая. Лечение: восстановить объект из копии или очищать такие ссылки регламентной обработкой, предварительно сделав резервную копию.

Ошибки после обновления конфигурации

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

Ошибки в фоновых и регламентных заданиях

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

Чем диагностировать: выбор инструмента

Журнал регистрации

Подходит для фоновых заданий, обменов и ошибок без диалогового окна. Не показывает значения переменных.

Отладчик конфигуратора

Даёт полный контроль: стек, переменные, пошаговое выполнение. Требует прав и воспроизводимой ошибки.

Тестирование и исправление

Находит битые ссылки и нарушения целостности ИБ. Не диагностирует логические ошибки кода.

Замер производительности

Нужен, когда проблема в медленной работе и таймаутах, а не в явном исключении.

Шаг 6. Исправление и проверка результата

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

После исправления проверьте три вещи: исходный сценарий выполняется без ошибки; смежные сценарии (тот же документ с другими данными, тот же отчёт за другой период) не сломались; в журнале регистрации нет новых ошибок. Если исправление затрагивает проведение документов или расчёт итогов — прогоните его на копии базы, а не на рабочих данных.

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

Частые вопросы

Что делать, если ошибка не воспроизводится повторно?

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

Можно ли отладить ошибку без доступа к конфигуратору?

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

Ошибка возникает только в тонком клиенте, а в толстом работает. В чём дело?

Чаще всего код использует функциональность, недоступную в тонком клиенте: модальные вызовы, работу с файловой системой без расширения, COM-объекты. Смотрите директивы компиляции (&НаКлиенте, &НаСервере) в проблемном модуле и переносите недопустимые вызовы на сервер.

Как понять, что виновато расширение конфигурации?

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

Что делать при ошибке «Конфликт блокировок»?

Это не ошибка логики, а конкуренция за данные. Найдите в журнале регистрации, какой сеанс удерживает блокировку, проверьте длительные транзакции (проведение больших документов, групповые обработки в рабочее время). Краткосрочно помогает повтор операции; системно — оптимизация транзакций и перенос тяжёлых операций в нерабочие часы.

Безопасно ли запускать «Тестирование и исправление»?

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

Итог

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

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