Где 1С записывает ошибки и как включить подробный лог

· 10 мин

Содержание

Чтобы 1С записывала ошибки, включите уровень «Регистрировать ошибки» (или подробнее) в журнале регистрации: в Конфигураторе это Администрирование → Настройка журнала регистрации. Для глубокой диагностики платформы добавьте файл logcfg.xml в каталог conf — тогда заработает технологический журнал. А если ошибку нужно сделать самому, для теста, — вызовите её в коде командой ВызватьИсключение.

Всё это работает одинаково в Бухгалтерии, ЗУП, УТ и любой другой конфигурации на платформе 1С:Предприятие 8.3. Настройки относятся к платформе, а не к конкретной программе.

Куда 1С пишет ошибки: четыре источника

У платформы несколько механизмов регистрации. Они не заменяют друг друга, а ловят разное.

ИнструментЧто фиксируетКто настраиваетКогда включать
Журнал регистрацииСобытия базы: вход, запись, удаление, ошибки прикладного кодаАдминистратор базыВсегда, постоянно
Технологический журнал (ТЖ)Исключения платформы, запросы к СУБД, блокировки, соединенияАдминистратор сервераНа время расследования
ОтладчикПошаговое выполнение кода, значения переменныхПрограммистНа тестовой копии
ДампыСостояние процесса в момент аварийного паденияАдминистратор сервераПри вылетах 1С без сообщения

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

Журнал регистрации: как включить запись ошибок в 1С

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

Настройка уровня в Конфигураторе

  1. Откройте базу в режиме Конфигуратор.
  2. Выберите Администрирование → Настройка журнала регистрации.
  3. Отметьте нужный уровень.
  4. Нажмите «ОК». Перезапуск базы не нужен.

Уровни вложены друг в друга, каждый следующий включает предыдущие:

  • 🚫 Не регистрировать — журнал пуст. Для рабочей базы так делать нельзя.
  • ❌ Регистрировать ошибки — только события уровня «Ошибка».
  • ⚠️ Регистрировать ошибки и предупреждения.
  • ℹ️ Регистрировать ошибки, предупреждения и информацию — сюда попадают входы пользователей, запись и удаление объектов.
  • 📝 Регистрировать все события — плюс примечания. Самый подробный вариант.

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

В том же окне задаётся разделение журнала по периодам — по дням, неделям, месяцам. При разделении старые файлы легко удалить или убрать в архив. Там же есть кнопка «Сократить» — она удаляет записи до выбранной даты.

Перед сокращением журнала сохраните удаляемые записи в файл (это предлагается в том же диалоге). Восстановить удалённую историю потом будет не из чего.

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

  • 📁 Файловая база — подкаталог 1Cv8Log в каталоге базы.
  • 🖥️ Клиент-серверная база — srvinfo\reg_1541\<идентификатор базы>\1Cv8Log на сервере 1С. Путь к srvinfo зависит от параметров службы сервера.

С версии 8.3.5 журнал по умолчанию хранится в одном файле формата SQLite с расширением .lgd. Старый формат — это файлы .lgf и .lgp.

Как найти ошибку в журнале

В пользовательском режиме журнал открывается двумя путями:

  • через Администрирование → Обслуживание — в БП 3.0, ЗУП 3.1 и УТ 11 там есть ссылка «Журнал регистрации»;
  • через Главное меню → Функции для технического специалиста → Стандартные → Журнал регистрации (в старых релизах платформы этот пункт назывался «Все функции»).

Откройте отбор и выставьте:

  1. Интервал — время, когда пользователь увидел ошибку, с запасом 10–15 минут.
  2. Уровень — «Ошибка».
  3. Пользователя, если ошибка возникла у конкретного человека.

В колонке «Комментарий» будет текст ошибки и стек вызовов: модуль, строка, процедура. С этим текстом уже можно идти к программисту или искать решение.

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

Технологический журнал: настройка logcfg.xml

Технологический журнал (ТЖ) пишет то, что журнал регистрации не видит: исключения внутри платформы, долгие запросы к СУБД, взаимоблокировки, разрывы соединений. По умолчанию он выключен. Включается он одним XML-файлом.

Куда положить файл

Файл называется logcfg.xml. Его кладут в каталог conf платформы:

  • общий для всех версий — C:\Program Files\1cv8\conf\;
  • для конкретной версии — C:\Program Files\1cv8\<номер версии>\bin\conf\.

Для клиент-серверной базы файл нужен на сервере 1С, а не на компьютере пользователя. Платформа перечитывает файл примерно раз в минуту, перезапуск службы не требуется.

Минимальная настройка для ошибок

Этот вариант ловит только исключения и ничего лишнего:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1c_techlog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="EXCPCNTX"/>
    </event>
    <property name="all"/>
  </log>
</config>

Что здесь важно:

  • location — папка для логов. Выбирайте диск со свободным местом, не системный.
  • history — сколько часов хранить файлы. 24 часа хватает для разовой ошибки.
  • EXCP — исключения платформы, EXCPCNTX — контекст, в котором они возникли.
  • property name="all" — писать все свойства события.

Какие события добавить под задачу

ЗадачаСобытия
Ошибки и паденияEXCP, EXCPCNTX
Ошибки блокировок, «конфликт блокировок»TLOCK, TTIMEOUT, TDEADLOCK
Медленные запросы к MS SQLDBMSSQL
Ошибки запросов к PostgreSQLDBPOSTGRS
Проблемы соединения с серверомCONN, PROC
Долгие серверные вызовыCALL

Файлы ТЖ — обычный текст. Каждый процесс пишет в свою подпапку (rphost_<номер>, 1cv8c_<номер> и т. д.), файлы разбиты по часам. Ищите текст ошибки поиском по папке или командой findstr в Windows.

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

Когда расследование закончено, удалите logcfg.xml или переименуйте его. Без этого журнал продолжит писать.

Отладка в Конфигураторе: остановка на ошибке

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

Запуск отладки

  1. В Конфигураторе выберите Отладка → Начать отладку (клавиша F5).
  2. Откроется база в пользовательском режиме, подключённая к отладчику.
  3. В Конфигураторе включите Отладка → Остановка по ошибке и поставьте флажок «Останавливаться по ошибке».
  4. Повторите в базе действия, которые приводят к ошибке.

Выполнение остановится ровно на строке, где возникло исключение. Видны значения переменных, а через «Стек вызовов» — цепочка процедур, которая к ней привела.

Шаги и точки останова

  • F9 — поставить или снять точку останова на строке.
  • F11 — шагнуть внутрь процедуры.
  • F10 — шагнуть через процедуру.
  • Shift+F11 — выйти из текущей процедуры.

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

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

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

Изменение параметров службы требует её перезапуска — все сеансы пользователей оборвутся. Делайте это в нерабочее время и не оставляйте -debug на рабочем сервере постоянно.

Замер производительности

Если «ошибка» — это зависание или очень долгая операция, включите Отладка → Замер производительности. После выполнения операции 1С покажет, сколько раз и сколько времени выполнялась каждая строка кода. Узкое место видно сразу.

Дампы памяти: когда 1С падает без сообщения

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

Как включить создание дампов

Дампы настраиваются в том же logcfg.xml, отдельным элементом:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <dump create="true" location="D:\1c_dumps" type="3"/>
</config>
  • location — папка для дампов.
  • type — объём сохраняемых данных. Чем больше значение, тем подробнее дамп и тем больше файл.

Файлы имеют расширение .mdmp и в имени содержат название процесса и номер версии платформы, например rphost_8.3.xx.xxxx_…mdmp.

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

  1. Посмотрите имя процесса. rphost — упал рабочий процесс сервера, 1cv8c — тонкий клиент, 1cv8 — толстый клиент или Конфигуратор.
  2. Сопоставьте время файла с жалобами пользователей и с записями журнала регистрации.
  3. Если падения повторяются, обновите платформу на актуальный релиз вашей ветки — часть аварий исправляется именно так.
  4. Если не помогло — передайте дамп и описание шагов партнёру 1С или в техподдержку платформы. Самостоятельно дамп разбирают отладчиком WinDbg, но без исходников платформы вывод даёт немного.

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

Как сделать ошибку в 1С намеренно: код для тестов

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

Вызов собственной ошибки

Если Сумма <= 0 Тогда
	ВызватьИсключение "Сумма платежа должна быть больше нуля";
КонецЕсли;

Выполнение прервётся, пользователь увидит окно с этим текстом, а событие попадёт в журнал регистрации с уровнем «Ошибка».

Перехват, запись в журнал и проброс дальше

Этот шаблон полезен в регламентных заданиях и обменах, где ошибку никто не видит на экране:

Процедура ВыполнитьОбмен() Экспорт

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

КонецПроцедуры

Что делает каждая часть:

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

Ошибка без исключения: отказ при записи

Если нужно не прервать код, а запретить запись документа с понятным сообщением, используйте параметр Отказ в модуле объекта:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

	Если Не ЗначениеЗаполнено(Контрагент) Тогда
		ОбщегоНазначения.СообщитьПользователю(
			"Не заполнен контрагент", ЭтотОбъект, "Контрагент", , Отказ);
	КонецЕсли;

КонецПроцедуры

Процедура ОбщегоНазначения.СообщитьПользователю есть в типовых конфигурациях на БСП. Она выводит сообщение с переходом к полю и сама выставляет Отказ = Истина.

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

Что именно нужно зафиксировать?

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

Чаще всего логи «не пишутся» не из-за платформы, а из-за мелочей в настройке.

Диагностика: выберите симптом

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

Почему обычный пользователь не видит журнал регистрации?
Для просмотра нужно право на журнал регистрации, оно входит в роль администратора. Рядовым пользователям его обычно не дают: в журнале видны действия всех сотрудников.
Влияет ли подробный журнал регистрации на скорость 1С?
Заметно — нет, если журнал разделён по периодам и диск не переполнен. Тормоза дают огромный неразделённый файл журнала и включённый без фильтров технологический журнал.
Где смотреть ошибки фонового и регламентного задания?
В журнале регистрации, отбор по событию фонового задания или по имени, которое задано в ЗаписьЖурналаРегистрации. Если задание упало молча, ошибка обычно перехвачена в коде без записи — нужен шаблон с повторным ВызватьИсключение.
Как отправить ошибку разработчику?
Скопируйте полный текст записи из журнала регистрации с колонкой «Комментарий», добавьте время, пользователя и шаги для повторения. В новых версиях платформы в окне ошибки есть команда формирования отчёта об ошибке — её архив тоже стоит приложить.
Нужно ли удалять logcfg.xml после диагностики?
Да. Технологический журнал не выключается сам: пока файл лежит в каталоге conf, платформа продолжает писать логи и создавать дампы.