Где ломается код 1С и как это вычислить: отладчик, журналы, проверка данных
Содержание
Чтобы найти ошибку в модуле 1С, начните с окна ошибки: нажмите ссылку «Подробно» и прочитайте строку вида {ОбщийМодуль.ИмяМодуля.Модуль(128)}. Там указаны модуль и номер строки, где платформа остановилась. Дальше откройте этот модуль в Конфигураторе, поставьте точку останова (F9) на несколько строк выше и запустите отладку (F5).
Номер строки показывает место, где ошибка проявилась. Причина часто лежит выше по стеку вызовов или в данных базы. Поэтому порядок такой: прочитать ошибку, воспроизвести её, пройти код отладчиком, проверить данные, а журналы подключать, когда воспроизвести на своей машине не получается.
С чего начать поиск ошибки: читаем сообщение и воспроизводим сбой
Первые пять минут решают больше, чем час в отладчике. Соберите факты до того, как открывать код.
Что взять из окна ошибки
Окно ошибки в режиме 1С:Предприятие содержит краткий текст. Ссылка «Подробно» раскрывает полный текст и стек. Типичная строка выглядит так:
{Документ.РеализацияТоваровУслуг.МодульОбъекта(412)}: Деление на 0
{ОбщийМодуль.ПроведениеСервер.Модуль(88)}: ...
- 📍 Верхняя строка — место, где возникло исключение.
- 🔗 Строки ниже — кто вызвал этот код. По ним видно цепочку вызовов.
- 🧩 Имя объекта подсказывает слой:
МодульОбъекта,МодульМенеджера,МодульФормы,ОбщийМодуль.
Скопируйте полный текст целиком (кнопкой копирования в окне или выделением). Перескажут его словами — потеряете номер строки.
Пять вопросов перед открытием кода
- Ошибка у всех пользователей или у одного? У одного — смотрите права и его настройки.
- Повторяется ли она на одном документе или на любом? На одном — почти наверняка данные.
- Что менялось накануне: обновление конфигурации , новое расширение, новая обработка?
- Где выполняется код: на клиенте или на сервере? Это видно по директивам
&НаКлиенте/&НаСерверев модуле формы. - Воспроизводится ли ошибка в копии базы? Если да, ищите в копии, а не в рабочей.
Отладку с остановкой выполнения ведите в копии базы. Остановленный на точке останова серверный вызов держит транзакцию и блокировки, и другие пользователи рабочей базы будут ждать.
Отладка кода 1С: от проверки синтаксиса до отладчика на сервере
Инструменты стоит включать по нарастанию сложности. Ниже то, что есть в Конфигураторе платформы 8.3.
| Инструмент | Когда помогает | Как вызвать |
|---|---|---|
| Проверка синтаксиса модуля | Опечатки, незакрытые блоки, неизвестные переменные | Ctrl+F7 в открытом модуле |
| Проверка конфигурации | Ошибки во всех модулях сразу, недоступные на клиенте методы | Конфигурация → Проверка конфигурации |
| Точки останова и пошаговое выполнение | Логические ошибки, неверные значения | F9, затем F5 |
| Остановка по ошибке | Исключение «тонет» в Попытка…Исключение | Отладка → Остановка по ошибке |
| Замер производительности | Код не падает, а работает минутами | Отладка → Замер производительности |
Проверка конфигурации
В окне проверки включите режимы для тонкого клиента , веб-клиента и сервера. Платформа покажет вызовы серверных методов из клиентского контекста и обращения к несуществующим объектам. Флажок расширенной проверки находит ещё и неправильные ссылки на объекты.
Это ловит ошибки, которые проявятся только у пользователя веб-клиента или только в режиме внешнего соединения.
Пошаговая отладка
- Откройте модуль из стека ошибки, перейдите на строку (
Ctrl+G— переход к строке). - Поставьте точку останова
F9на 5–10 строк выше места падения. - Запустите
Отладка → Начать отладку → Тонкий клиент(илиF5). - Повторите действие пользователя. Выполнение остановится на точке.
- Шагайте:
F11— с заходом в процедуру,F10— без захода,Shift+F11— выйти из процедуры. - Выделите переменную и нажмите
Shift+F9— окно «Вычислить выражение» покажет её значение и тип.
💡 Если точка срабатывает слишком часто (цикл на 5000 строк), поставьте её с условием через контекстное меню строки: например, Стр.НомерСтроки = 317. Останов будет только на нужной итерации.
Когда ошибку «съедает» Попытка
Код вида Попытка … Исключение … КонецПопытки гасит исключение и выдаёт пользователю общее «Не удалось выполнить операцию». Включите Отладка → Остановка по ошибке и отметьте остановку для всех ошибок. Отладчик встанет ровно на строке, где исключение возникло, ещё до перехода в блок Исключение.
Отладка серверного кода в клиент-серверной базе
В файловой базе серверный код отлаживается сразу. В клиент-серверной службу агента сервера 1С нужно запустить с ключом -debug, иначе точки останова в серверных процедурах не сработают.
Перезапуск службы агента обрывает сеансы всех пользователей кластера. Делайте это на тестовом сервере или в нерабочее время после предупреждения коллег.
Клиент можно запустить в режиме отладки и без Конфигуратора — ключом командной строки:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" ENTERPRISE /S"srv01\buh_test" /DEBUG
Номер версии в пути подставьте свой. После запуска подключитесь к сеансу через Отладка → Подключение.
Где в коде 1С искать типичные ошибки
Тексты ошибок повторяются. По ним быстро понять, что проверять в строке, на которой остановился отладчик.
ЗначениеЗаполнено() и выясните, почему значение пустое.Количество() - 1.Места, где ошибки прячутся чаще всего
- 🔁 Удаление в цикле. Удаление строк таблицы в прямом цикле пропускает элементы. Правильно — обратный цикл:
Для Сч = 1 По ТЗ.Количество() Цикл Стр = ТЗ[ТЗ.Количество() - Сч]; … КонецЦикла. - 🧮 Склейка числа со строкой.
"Строка " + 1250даст «1 250» с неразрывным пробелом и сломает сравнение. ИспользуйтеФормат(Число, "ЧГ=0"). - 🖥️ Контекст вызова. На клиенте недоступны запросы и объекты базы. Код с
Новый Запросв процедуре&НаКлиентеупадёт. - 📄 Тексты запросов. Ошибка в запросе сообщает строку текста запроса, а не модуля. Скопируйте текст в консоль запросов и выполните отдельно.
- 🗂️ Обработчики подписок на события. Код подписки выполняется при записи любого подходящего объекта. В стеке он виден как общий модуль, хотя пользователь «просто проводил документ».
Журнал регистрации, технологический журнал и дампы
Если ошибку не удаётся повторить в копии, ищите следы в журналах рабочей базы.
Журнал регистрации
В БП 3.0, ЗУП 3.1 и УТ 11 он открывается через Администрирование → Поддержка и обслуживание → Журнал регистрации. В Конфигураторе — Администрирование → Журнал регистрации.
- Установите отбор по уровню «Ошибка».
- Сузьте период до времени, когда пользователь увидел сбой.
- Отберите по пользователю и компьютеру.
- Откройте запись: в поле комментария будет полный текст ошибки со стеком.
💡 Чтобы ошибки фоновых заданий и обменов попадали в журнал с подробностями, пишите их туда явно:
Попытка
ЗагрузитьДанныеОбмена(Параметры);
Исключение
Инфо = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("Обмен.Загрузка",
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(Инфо));
ВызватьИсключение;
КонецПопытки;
ВызватьИсключение без параметров пробрасывает исходную ошибку дальше. Так она и записана, и не проглочена.
Технологический журнал
Он нужен для плавающих ошибок, блокировок и падений процессов. Настраивается файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf\). Минимальная настройка для поиска исключений:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\techlog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
- 📂 Платформа подхватит файл без перезапуска, примерно через минуту.
- ⏱️
history="24"хранит логи 24 часа — диск не переполнится за выходные. - 🧹 После поиска удалите или переименуйте файл: полный журнал на нагруженном сервере пишет гигабайты.
В событиях EXCP есть свойство Context — тот же стек вызовов модулей, что и в окне ошибки.
Дампы памяти
Дамп появляется, когда падает сам процесс: клиент закрывается без сообщения или «вылетает» рабочий процесс сервера. Клиентские дампы лежат в профиле пользователя, в подкаталоге 1C\1cv8\dumps локальных данных приложений. Создание серверных дампов включается элементом <dump> в том же logcfg.xml.
Дамп разбирает не программист конфигурации, а фирма-разработчик платформы. Ваша задача — найти действие, после которого он появляется. Частые причины на стороне кода: бесконечная рекурсия и огромные коллекции в памяти.
Ошибки в расширениях и внешних обработках
Типовая конфигурация обычно не падает сама по себе. Чаще ломается доработка поверх неё.
Как проверить расширения
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Снимите флажок «Активно» у подозрительного расширения в копии базы.
- Перезапустите сеанс и повторите действие.
Ошибка ушла — ищите в расширении. Самое частое — расширение собрано под прежний релиз, а после обновления конфигурации поменялось имя процедуры или реквизита. Платформа сообщает об этом при применении расширения. Откройте его в Конфигураторе (Конфигурация → Расширения конфигурации) и проверьте синтаксис.
Аннотации &Перед, &После и &ИзменениеИКонтроль перехватывают типовые процедуры. При &ИзменениеИКонтроль расширение не применится, если типовой текст процедуры изменился. Перенесите правку на новый текст.
Как отладить внешнюю обработку или отчёт
- Откройте файл
.epfили.erfв Конфигураторе черезФайл → Открыть. - Поставьте точки останова в модуле обработки.
- Запустите отладку и откройте в режиме 1С:Предприятие этот же файл с того же пути.
Если обработка подключена в справочник дополнительных обработок, база хранит её копию. Точки останова в открытом файле сработают, только если вы открываете файл из каталога через Файл → Открыть, а не из списка обработок.
Ошибки, которые сидят в данных, а не в коде
Код может быть верным, а данные — нет. Признак: ошибка возникает на одном документе, а соседние проводятся.
- 🔗 Битые ссылки. В полях видно
<Объект не найден>с идентификатором. Объект удалили напрямую, а ссылки остались. - 📉 Пустые обязательные реквизиты. Документ загружен обменом без счёта учёта или ставки НДС.
- 🔢 Нарушенная последовательность или итоги. Остатки в отчёте не совпадают с движениями.
Как проверять:
- Откройте документ и пройдите по реквизитам и табличным частям: пустые поля и
<Объект не найден>видны сразу. - Отберите похожие проблемные записи консолью запросов (обработка для отладки запросов есть на диске ИТС и в составе многих конфигураций как внешняя).
- Для структурных повреждений запустите в Конфигураторе
Администрирование → Тестирование и исправление.
Тестирование и исправление требует монопольного режима и меняет данные. Перед запуском сделайте выгрузку базы в .dt и запускайте сначала только в режиме проверки, без исправления.
Сбои интеграции: веб-сервисы, HTTP, COM и оборудование
Ошибки обмена коварны: код в 1С может быть исправен, а сломана другая сторона.
Веб-сервисы и HTTP-запросы
- Сохраните код ответа:
Ответ.КодСостояния. 401 — неверная авторизация, 404 — не тот адрес, 500 — ошибка на стороне сервера. - Тело ответа получите через
Ответ.ПолучитьТелоКакСтроку()и запишите в журнал регистрации. Там обычно написана реальная причина. - Если 1С сама публикует сервис, проверьте публикацию на веб-сервере и журнал регистрации базы-приёмника: ошибка там, а не в базе-отправителе.
COM-соединение
Ошибки COM возникают на стороне внешней базы, а исключение приходит к вам с кратким текстом. Проверьте:
- разрядность: 32-битный клиент не создаст 64-битный COM-объект и наоборот;
- регистрацию компоненты
comcntr.dllтой версии платформы, что у базы-источника; - права пользователя, под которым идёт подключение, в обеих базах.
Для отладки кода, исполняемого через внешнее соединение, удобнее перенести логику в обработку и запустить её отладчиком прямо во внешней базе.
Торговое оборудование
Ошибка «Не удалось подключить устройство» почти всегда о драйвере, а не о модуле. Проверьте устройство в карточке подключаемого оборудования кнопкой теста. Тест не проходит — дело в драйвере, порте или правах ОС. Проходит — ищите в коде вызова.
Когда стоит передать задачу специалисту
Самостоятельный поиск оправдан, пока вы видите стек и можете повторить ошибку. Есть случаи, когда время лучше отдать тем, у кого есть доступ и опыт.
| Ситуация | Кому передать |
|---|---|
| Ошибка в типовом коде без доработок и расширений | Партнёру 1С или на линию поддержки с текстом ошибки и номером релиза |
| Падение процесса с дампом | Администратору сервера, затем в поддержку платформы с дампом |
| Конфликты блокировок и таймауты под нагрузкой | Специалисту по производительности (нужен анализ техжурнала) |
| Ошибка в чужой доработке без исходников | Автору доработки |
| Повреждение файлов базы | Администратору с резервными копиями |
Передавайте сразу комплект: полный текст ошибки со стеком, номер релиза конфигурации и платформы, шаги воспроизведения и список расширений. Без этого первый ответ будет вопросом.
Частые вопросы
Почему номер строки в ошибке не совпадает с текстом модуля?
Отладчик не останавливается на точке останова. Что проверить?
-debug у агента сервера.