Фиксация ошибок 1С: от журнала регистрации до отчёта разработчику

· 9 мин

Содержание

Чтобы зарегистрировать ошибку в конфигурации 1С, сначала найдите её в журнале регистрации (Администрирование → Обслуживание → Журнал регистрации, отбор по уровню «Ошибка»), затем сохраните подробный текст ошибки, версии платформы и конфигурации и шаги воспроизведения. Для повторяющихся сбоев добавьте программную запись через ЗаписьЖурналаРегистрации, а падения процессов ловите технологическим журналом и дампами.

Типичная ситуация: бухгалтер пишет «документ не проводится, выскочило окно и пропало». Текста нет, скриншота нет, повторить не получается. Ниже — способы, которые превращают такое сообщение в зарегистрированную ошибку с понятной причиной. Всё описанное относится к платформе 1С:Предприятие 8.3 и работает в любой конфигурации: БП 3.0, ЗУП 3.1, УТ 11 и других.

Журнал регистрации: где ошибка уже записана

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

Как открыть журнал

  • 🖥 В пользовательском режиме (БП 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Журнал регистрации. Нужны права администратора.
  • 🛠 В Конфигураторе: Администрирование → Журнал регистрации.

Как найти нужную запись

  1. Нажмите кнопку Установить отбор в командной панели журнала.
  2. Задайте интервал: время сбоя плюс-минус 10–15 минут.
  3. Укажите пользователя, у которого возникла ошибка.
  4. В поле уровня оставьте только «Ошибка».
  5. Откройте запись двойным щелчком. В поле «Комментарий» — полный текст исключения, включая модуль и строку, если она есть.

Если записей нет вообще, проверьте настройку журнала. В Конфигураторе: Администрирование → Настройка журнала регистрации. Уровень должен быть не ниже «Регистрировать ошибки». Вариант «Не регистрировать» встречается в старых базах, которые когда-то «ускоряли».

Где лежат файлы журнала

Журнал хранится в каталоге 1Cv8Log:

Вариант базыГде искать
Файловая1Cv8Log внутри каталога базы (рядом с 1Cv8.1CD)
Клиент-сервернаяsrvinfo\reg_1541\<идентификатор базы>\1Cv8Log на сервере 1С

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

Отладчик: как поймать ошибку в момент возникновения

Журнал говорит, что случилось. Отладчик показывает, почему: значения переменных, стек вызовов, ветку кода. Это способ для того, у кого есть доступ к Конфигуратору и тестовой копии базы.

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

  1. Откройте Конфигуратор на копии базы и запустите Отладка → Начать отладку → 1С:Предприятие (или тонкий клиент).
  2. В Конфигураторе откройте Отладка → Остановка по ошибке.
  3. Включите флажок Останавливаться по ошибке. При необходимости задайте фрагмент текста ошибки в фильтре — тогда отладчик не будет тормозить на каждом мелком исключении.
  4. Повторите действия пользователя. Как только возникнет исключение, отладчик остановится на строке, где оно произошло.
  5. Посмотрите Отладка → Стек вызовов и вычислите выражения (Shift+F9), которые кажутся подозрительными.

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

Отладка серверного кода

В клиент-серверном варианте серверный код можно отлаживать, только если сервер 1С запущен с ключом -debug. Ключ добавляют в параметры службы агента сервера (ragent). После изменения службу нужно перезапустить.

Перезапуск службы агента разорвёт все сеансы пользователей на этом сервере. Делайте это вне рабочего времени и предупредите людей заранее.

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

Программная регистрация через ЗаписьЖурналаРегистрации

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

Шаблон обработки исключения

Попытка
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    ИнфоОбОшибке = ИнформацияОбОшибке();
    ЗаписьЖурналаРегистрации(
        "Проведение.ОшибкаПроведения",
        УровеньЖурналаРегистрации.Ошибка,
        ДокументОбъект.Метаданные(),
        ДокументОбъект.Ссылка,
        ПодробноеПредставлениеОшибки(ИнфоОбОшибке));
    ВызватьИсключение КраткоеПредставлениеОшибки(ИнфоОбОшибке);
КонецПопытки;

Что делает каждый параметр:

ПараметрЧто передаёмЗачем
Имя события"Проведение.ОшибкаПроведения"По нему удобно ставить отбор в журнале
УровеньУровеньЖурналаРегистрации.ОшибкаЗапись попадёт в отбор по ошибкам
МетаданныеДокументОбъект.Метаданные()Видно, к какому объекту относится сбой
ДанныеДокументОбъект.СсылкаИз журнала можно открыть сам документ
Комментарийподробное представлениеПолный стек с модулями и строками

В последних версиях платформы для подробного текста есть также ОбработкаОшибок.ПодробноеПредставлениеОшибки(). Старая глобальная функция продолжает работать.

Три правила, без которых запись бесполезна

  • 🔁 Пробрасывайте исключение дальше (ВызватьИсключение), если операция действительно не выполнилась. Иначе пользователь решит, что всё прошло.
  • 🧾 Пишите подробное представление, а не краткое. Краткое даёт только текст, без модуля и строки.
  • 🏷 Используйте иерархию в имени события через точку: «Обмен.Загрузка», «Обмен.Выгрузка». Так в журнале легко собрать все сбои одной подсистемы.

В транзакции запись журнала по умолчанию делается независимо от неё. Если транзакция откатится, запись останется. За это отвечает последний параметр РежимТранзакции — без особой причины его не трогайте.

Технологический журнал и дампы памяти

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

Настройка технологического журнала

Журнал включают файлом 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:\1c_logs\tj" history="24">
        <event>
            <eq property="name" value="EXCP"/>
        </event>
        <event>
            <eq property="name" value="EXCPCNTX"/>
        </event>
        <property name="all"/>
    </log>
    <dump create="1" location="D:\1c_logs\dumps" type="3"/>
</config>
  • 📁 location — куда писать логи. Каталог должен существовать, а у пользователя службы 1С должны быть права на запись.
  • ⏳ history="24" — хранить 24 часа, потом удалять.
  • 💥 EXCP — исключения, EXCPCNTX — контекст, в котором они возникли.
  • 🧠 Блок dump включает создание дампов при аварийном завершении процесса.

Платформа перечитывает logcfg.xml примерно раз в минуту, перезапуск не нужен.

Не оставляйте свойство all включённым надолго на нагруженном сервере. Логи растут на гигабайты в час и занимают весь диск. Собрали данные за нужный период — уберите файл или сузьте отбор.

Что делать с дампом

Файл .mdmp — это снимок процесса в момент падения. Самостоятельно его разбирают отладчиком Windows (WinDbg), но для пользователя полезнее другое: дамп — главное вложение к обращению в поддержку, если падает сама платформа.

Без настройки клиентские дампы обычно попадают в %LOCALAPPDATA%\1C\1cv8\dumps профиля пользователя, под которым работал процесс. Ищите файл по времени создания, совпадающему со сбоем.

Что упалоЧто собирать
Клиент на одном компьютереДамп из профиля пользователя, версия платформы, ОС
Рабочий процесс сервера (rphost)Дамп из каталога настройки, ТЖ за 10–15 минут до сбоя
Только при определённой операцииТЖ с EXCP + шаги воспроизведения

Отправка ошибок во внешнюю систему через HTTP

Когда баз много или работа идёт удалённо, журнал регистрации неудобен: в каждую базу нужно заходить отдельно. Решение — собирать ошибки в одном месте.

Встроенный отчёт об ошибке

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

Своя отправка из кода

Второй путь — отправлять ошибку из обработчика исключения на свой сервис (система заявок, сервер мониторинга):

Процедура ОтправитьОшибку(ТекстОшибки) Экспорт
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    Данные = Новый Структура;
    Данные.Вставить("base", СтрокаСоединенияИнформационнойБазы());
    Данные.Вставить("user", ИмяПользователя());
    Данные.Вставить("error", ТекстОшибки);
    ЗаписатьJSON(Запись, Данные);

    Соединение = Новый HTTPСоединение("monitor.example.local", 443,,,, 10,
        Новый ЗащищенноеСоединениеOpenSSL);
    Запрос = Новый HTTPЗапрос("/api/errors");
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8);

    Попытка
        Соединение.ОтправитьДляОбработки(Запрос);
    Исключение
        ЗаписьЖурналаРегистрации("Мониторинг.ОтправкаНеУдалась",
            УровеньЖурналаРегистрации.Предупреждение,,,
            КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
КонецПроцедуры

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

Обратное направление: HTTP-сервис в конфигурации

Бывает наоборот: внешняя программа (сайт, мобильное приложение, обработчик обмена) должна сообщить 1С о своей ошибке. Для этого в конфигурацию добавляют HTTP-сервис, публикуют его на веб-сервере, а в обработчике метода POST разбирают JSON и вызывают ЗаписьЖурналаРегистрации. Тогда сбои интеграции видны в том же журнале, что и ошибки самой базы.

Карточка ошибки: как зарегистрировать сбой вручную

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

Что собрать перед обращением

  1. Версии. Откройте Справка → О программе (в главном меню «Такси» — через кнопку с тремя полосками). Перепишите версию платформы и точное название и номер релиза конфигурации.
  2. Текст ошибки. В окне ошибки откройте подробный текст и скопируйте его целиком, а не скриншотом.
  3. Шаги. Пронумерованный список: что открыли, что заполнили, на какую кнопку нажали.
  4. Ожидание и факт. Что должно было произойти и что произошло.
  5. Частота. Всегда, иногда, только у одного пользователя, только в одной базе.
  6. Данные. Ссылка на документ или выгрузка проблемного объекта, если разработчику нужна точно такая же ситуация.
  7. Доработки. Есть ли в базе расширения или изменения типовой конфигурации. Включите проверку на чистой демобазе того же релиза.
Карточка ошибки готова к отправке
Выполнено: 0 / 6

Как проверить, ваша ли это ошибка

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

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

Внутренний реестр ошибок

Если в компании свой программист, удобно завести справочник или регистр сведений «Инциденты» прямо в базе или в отдельной служебной базе. Минимальный набор полей: дата, пользователь, база, текст ошибки, статус (новая / в работе / исправлена), ответственный, релиз с исправлением. Так ошибки не теряются в мессенджерах, а повторные обращения видно сразу.

Какой способ выбрать под вашу ситуацию

Что у вас происходит?

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

Сколько хранится журнал регистрации?
Пока его не сократят. При просмотре журнала в Конфигураторе есть действие сокращения, которое удаляет записи до указанной даты и может сохранить их в файл. Без чистки журнал занимает гигабайты и медленно открывается.
Можно ли смотреть журнал регистрации без входа в базу?
Да. Файлы .lgd — это база SQLite, её можно открыть сторонним просмотрщиком на копии файла. Удобнее, впрочем, скопировать каталог 1Cv8Log и отправить разработчику целиком.
Почему в журнале ошибка без номера строки?
Номер строки есть, когда исключение возникло во встроенном языке. Если сбой случился внутри самой платформы или модуль поставлен без исходного текста, в записи будет только описание. Тогда помогает технологический журнал с событием EXCPCNTX.
Нужны ли права администратора для записи в журнал?
Нет. Метод ЗаписьЖурналаРегистрации работает под любым пользователем. Права нужны только чтобы журнал смотреть.
Влияет ли технологический журнал на скорость работы?
Да, при широком отборе заметно. Включайте только нужные события, ограничивайте history и выключайте журнал после сбора данных.