Разработка и Конфигурация · 10 мин
Как найти строку с ошибкой в 1С
Как найти строку с ошибкой в 1С: разбор сообщения об ошибке, конфигуратор, отладчик, журнал регистрации и технологический журнал. Практические шаги для пользователя и разработчика.
Когда 1С выводит сообщение об ошибке, главная задача — быстро понять, в каком месте кода или каком объекте она возникла. В большинстве случаев платформа уже содержит подсказку: номер строки модуля, имя метода или ссылку на объект, при работе с которым произошёл сбой. Умение правильно читать это сообщение экономит часы поиска.
Способ поиска зависит от вашей роли и доступа. Пользователь без конфигуратора ограничен текстом сообщения и журналом регистрации, разработчик дополнительно использует отладчик, поиск по модулям и технологический журнал. Ниже разобраны все рабочие варианты — от простого к сложному.
Чтение сообщения об ошибке: где спрятан номер строки
Типовое сообщение об ошибке в 1С содержит ссылку на место возникновения в фигурных скобках, например: {ОбщийМодуль.РасчетЦен.Модуль(145)}: Деление на значение типа Число равное нулю невозможно. Здесь «ОбщийМодуль.РасчетЦен.Модуль» — это общий модуль «РасчетЦен», а 145 — точный номер строки, где выполнение прервалось.
Обращайте внимание и на текст после номера строки. Формулировки вида «Поле объекта не обнаружено (СуммаДокумента)» означают, что в указанной строке код обращается к несуществующему свойству объекта — чаще всего из-за переименования реквизита или обращения к реквизиту, которого нет у данного типа значения. Ошибки «Метод объекта не обнаружен» указывают на вызов несуществующей процедуры или функции.
Если ошибка возникла при проведении документа или записи элемента, в сообщении может быть указан сам объект. Сначала откройте его и проверьте заполнение полей — иногда «строкой с ошибкой» оказывается не код, а некорректные данные, которые код не смог обработать.
Как открыть нужную строку в конфигураторе
Если у вас есть доступ к конфигуратору, переход к строке занимает секунды. В окне сообщений конфигуратора (например, после проверки конфигурации или при ошибке, пойманной в отладке) достаточно дважды щелкнуть по строке сообщения — редактор модулей откроется ровно на том месте, которое указано в фигурных скобках.
Когда сообщение скопировано из пользовательского режима, откройте конфигуратор и найдите указанный модуль в дереве конфигурации: общие модули — в ветке «Общие → Общие модули», модули документов и справочников — в соответствующих объектах. Затем используйте сочетание Ctrl+G и введите номер строки — курсор встанет точно на неё.
Учтите важный нюанс: номер строки в сообщении соответствует той версии модуля, которая была загружена в момент ошибки. Если после этого конфигурация обновлялась, строка могла «съехать». В таком случае ищите по тексту ошибки или по имени метода через глобальный поиск (Ctrl+Shift+F).
- 1Скопируйте полный текст сообщения об ошибке, включая часть в фигурных скобках
- 2Откройте конфигуратор и найдите указанный модуль в дереве конфигурации
- 3Нажмите Ctrl+G и введите номер строки из сообщения
- 4Если строка сместилась после обновления — найдите метод по имени через Ctrl+Shift+F
- 5Проверьте, что найденная строка логически соответствует тексту ошибки
Поиск ошибки через журнал регистрации
Журнал регистрации — основной инструмент, когда ошибка произошла у другого пользователя или в фоновом задании, и «живого» сообщения уже нет. Откройте его из режима 1С:Предприятие («Администрирование → Обслуживание → Журнал регистрации») или из конфигуратора («Администрирование → Журнал регистрации»).
Установите отбор: уровень «Ошибка», период — время возникновения проблемы, при необходимости — конкретный пользователь или компьютер. В колонке «Комментарий» обычно виден тот же текст с указанием модуля и строки, что и в сообщении пользователю. Для ошибок фоновых заданий журнал — часто единственный источник информации, потому что сообщения фонового задания пользователю не показываются.
Дополнительно журнал помогает восстановить контекст: какое действие выполнял пользователь перед ошибкой, какой документ проводил, какой отчёт формировал. Последовательность событий перед записью об ошибке часто подсказывает причину быстрее, чем анализ кода.
Отладчик: остановка ровно в момент ошибки
Отладчик — самый точный способ, когда ошибку можно воспроизвести. Включите отладку в конфигураторе («Отладка → Начать отладку») и установите флажок «Остановка по ошибке» через меню «Отладка → Остановка по ошибке». После этого выполните в режиме предприятия действие, которое приводит к сбою: выполнение прервётся точно на проблемной строке, и конфигуратор покажет её подсветкой.
В момент остановки доступны три ключевых инструмента. Табло (Shift+F9) показывает текущие значения переменных — сразу видно, какая переменная пуста или содержит не тот тип. Стек вызовов («Отладка → Стек вызовов») показывает цепочку вызовов, приведшую к строке. Окно «Вычислить выражение» (Alt+F9) позволяет проверить произвольные выражения на текущих данных.
Для ошибок в фоновых заданиях и на сервере включите в настройках отладки пункт «Автоматическое подключение» с отметкой «Фоновые задания» и при необходимости «HTTP-сервисы, веб-сервисы». Без этого отладчик не остановится в серверном коде, и вы будете искать причину вслепую.
Когда номера строки нет: технологический журнал и внешние обработки
Некоторые ошибки не содержат ссылки на строку: падения платформы, ошибки СУБД, таймауты запросов, проблемы COM-соединений. В таких случаях помогает технологический журнал — текстовый лог платформы, который включается через файл настроек logcfg.xml в каталоге конфигурации сервера или в каталоге технологического журнала клиента. В нём фиксируются события EXCP (исключения) с контекстом, запросы к СУБД и длительные операции.
Отдельная ситуация — ошибка внутри внешней обработки или отчёта. Сообщение укажет строку модуля внешнего файла, но номер в нём может не совпадать с тем, что вы видите в конфигураторе, если открыта другая версия файла. Откройте именно тот файл обработки, который запускался, через «Файл → Открыть», и только потом переходите по номеру строки.
Для ошибок расширений конфигурации сообщение содержит имя расширения и модуля внутри него. Строка указывается относительно модуля расширения, а не основной конфигурации — открывайте модуль через дерево именно этого расширения.
Как выбрать способ поиска
Частые ошибки при поиске строки и как их избежать
Самая распространённая ошибка — анализировать не ту версию кода. Номер строки из сообщения относится к конфигурации базы данных, а разработчик часто смотрит конфигурацию поставщика или старую выгрузку. Перед поиском убедитесь, что смотрите актуальный модуль рабочей базы.
Вторая типичная ошибка — исправлять строку, не поняв причину. Например, при «Делении на ноль» добавляют проверку делителя, но реальная проблема — в том, что регистр не вернул данных из-за отсутствия записей. Всегда смотрите значения переменных в отладчике или логику получения данных, а не только саму строку.
Третья ошибка — игнорировать стек вызовов. Строка в общем модуле может быть корректной для одних вызовов и ошибочной для других. Без анализа стека легко «починить» один сценарий и сломать три других.
Проверка результата после исправления
После правки кода обновите конфигурацию базы данных (F7) и повторите исходное действие на тех же данных, где ошибка воспроизводилась. Успешное выполнение — первый, но не единственный признак результата.
Проверьте журнал регистрации за период повторной проверки: новых записей с уровнем «Ошибка» по этому сценарию быть не должно. Если исправляли расчёт или проведение — сверьте итоговые данные (суммы, движения по регистрам) с ожидаемыми, потому что отсутствие ошибки не гарантирует корректность результата.
FAQ: частые вопросы о поиске строки с ошибкой
Что означает запись вида {МодульОбъекта(250)} в сообщении?
Это ссылка на место ошибки: модуль объекта (документа, справочника или обработки) и строка 250 в нём. В конфигураторе откройте соответствующий объект, его модуль объекта и перейдите к строке через Ctrl+G.
Почему номер строки в сообщении не совпадает с тем, что я вижу в модуле?
Чаще всего конфигурация после ошибки обновлялась, и строки сместились. Также возможно, что вы смотрите модуль расширения или внешней обработки другой версии. Ищите по имени метода и тексту ошибки через глобальный поиск.
Как найти ошибку, если она возникает только у одного пользователя?
Откройте журнал регистрации с отбором по этому пользователю и уровню «Ошибка». Если сообщения недостаточно — попросите пользователя повторить действие с включённой отладкой под его сеансом или проверьте, не связана ли ошибка с его правами, настройками или данными, к которым он обращается.
Можно ли найти строку ошибки без доступа к конфигуратору?
Частично. Журнал регистрации доступен из режима 1С:Предприятие при наличии прав администратора и показывает модуль и строку. Но открыть и исправить код без конфигуратора нельзя — потребуется разработчик или администратор с соответствующим доступом.
Ошибка возникает периодически и не воспроизводится. Что делать?
Включите технологический журнал с записью событий EXCP и длительных операций, регулярно просматривайте журнал регистрации на предмет закономерностей (время, пользователь, операция). Периодические ошибки часто связаны с конкурентным доступом к данным или регламентными заданиями.
Что делать, если ошибка указывает на строку в стандартном модуле конфигурации?
Сначала проверьте, не вызвана ли она некорректными данными, которые ваш код передал в типовую процедуру, — посмотрите стек вызовов. Если причина действительно в типовом коде, проверьте наличие обновлений конфигурации: известные ошибки поставщики исправляют в новых релизах.
Что важно запомнить
Номер строки ошибки почти всегда указан в самом сообщении в фигурных скобках. Двойной щелчок по сообщению или Ctrl+G в конфигураторе открывают нужное место. Когда номера нет — помогают журнал регистрации, отладчик с остановкой по ошибке и технологический журнал. Всегда проверяйте актуальность версии модуля и анализируйте причину через значения переменных и стек вызовов, а не только саму строку.