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

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

Как найти ошибку в модуле 1С

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

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

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

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

Шаг 1. Разбор текста сообщения об ошибке

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

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

Поле объекта не обнаруженоНеверное обращение к реквизиту

Проверьте имя реквизита и тип объекта в этой строке

Метод объекта не обнаруженНет такой процедуры или функции

Проверьте имя метода, контекст вызова и директивы компиляции

Ошибка при выполнении запросаПроблема в тексте запроса

Проверьте имена полей, таблиц и параметры запроса

Нарушение прав доступаУ пользователя нет прав

Проверьте роли пользователя на объект и привилегированный режим

Шаг 2. Воспроизведение ошибки под контролем

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

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

Шаг 3. Отладчик и точки останова

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

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

Для пошагового прохода используйте «Шагнуть через» (F10), «Шагнуть в» (F11) и «Шагнуть из» (Shift+F11). Если ошибка возникает внутри цепочки вызовов, двигайтесь по стеку вызовов — окно стека показывает, из какой процедуры был сделан проблемный вызов и с какими параметрами.

Отладка серверного кода и фоновых заданий

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

Отладка внешних обработок и расширений

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

Порядок действий при отладке
  1. 1
    Скопируйте полный текст ошибки с кнопкой «Подробно»
  2. 2
    Сделайте копию базы или убедитесь, что работаете на тестовой
  3. 3
    Включите отладку и поставьте точку останова на строке из сообщения
  4. 4
    Воспроизведите сценарий и дождитесь остановки
  5. 5
    Проверьте значения переменных через табло и «Вычислить выражение»
  6. 6
    Пройдите код пошагово до места, где значение становится неверным
  7. 7
    Исправьте причину, а не симптом, и повторите сценарий

Шаг 4. Журнал регистрации и синтаксическая проверка

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

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

Шаг 5. Типичные причины ошибок в модулях

Обращение к пустой ссылке или «Неопределено» — самая частая причина. Функция возвращает «Неопределено», если не найден элемент справочника, а вызывающий код сразу обращается к реквизиту результата. Защитный приём — проверка перед обращением: Если ЗначениеЗаполнено(Ссылка) Тогда ... КонецЕсли; или явная проверка на «Неопределено».

Вторая группа — ошибки контекста. Код в модуле формы с директивой &НаКлиенте не может напрямую выполнять запросы к базе или обращаться к серверным общим модулям без права вызова. Типичное решение — вынести серверную логику в процедуру с директивой &НаСервере или в общий модуль с флагами «Сервер» и «Вызов сервера».

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

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

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

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

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

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

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

Исходный сценарий
Норма

Операция выполняется без сообщений об ошибке

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

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

Синтаксическая проверка модуля
Норма

Проверка завершается без ошибок

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

Остаются сообщения о неопределённых переменных или методах

Граничные данные
Норма

Код корректно работает с пустыми и незаполненными значениями

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

Сбой на документах с пустыми полями

Другие пользователи
Норма

Операция работает под типовыми ролями

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

Ошибка прав доступа у обычных пользователей

Когда искать причину не в коде

Не каждая «ошибка модуля» вызвана кодом. Если текст ошибки указывает на СУБД (например, конфликт блокировок, ошибка SQL), причина может быть в инфраструктуре: конкурентный доступ, недостаток ресурсов сервера, повреждённые индексы. Конфликт блокировок при параллельной работе обычно решается пересмотром логики транзакций, а не строки кода, указанной в сообщении.

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

Маршрут решения

Как выбрать действие

Ошибка стабильно воспроизводится и известна строка модуляЗапускайте отладчик с точкой останова и смотрите значения переменных
Ошибка плавающая, возникает у разных пользователейАнализируйте журнал регистрации и ищите зависимость от данных
Ошибка появилась после обновленияСравните модуль с предыдущей версией конфигурации
Текст ошибки указывает на СУБД или блокировкиПроверяйте серверную инфраструктуру и логику транзакций, а не только код
Ошибка только у одного пользователяПроверьте его права, роли и персональные настройки

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

Что делать, если в сообщении об ошибке нет номера строки?

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

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

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

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

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

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

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

Чем опасна конструкция «Попытка...Исключение» при поиске ошибок?

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

Как не потерять исправление при обновлении конфигурации?

Если конфигурация типовая, изменения в её модулях будут перезаписаны при обновлении. Ведите список всех доработок с указанием модулей и строк, либо переносите изменения в расширение конфигурации — оно сохраняется при обновлении основной конфигурации.

Итог

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

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