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