Где 1С хранит сообщения об ошибках и как их прочитать

· 10 мин

Содержание

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

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

Где смотретьКто пользуетсяЧто покажетКогда выбирать
Окно ошибки и панель сообщенийПользовательТекст ошибки, модуль и строкуОшибка воспроизводится на экране
Журнал регистрацииБухгалтер, администраторКто, когда, в каком документеОшибка была в прошлом или у другого пользователя
Попытка … ИсключениеПрограммистСвою запись в журнал или понятное сообщениеНужно перехватить и обработать сбой
ОтладчикПрограммистЗначения переменных в момент сбояНужно понять причину в коде
Технологический журнал, логи WindowsАдминистраторИсключения сервера, блокировки, падения процессовОшибка на сервере, в фоне, без окна

Что показывает 1С на экране при ошибке

Платформа выводит ошибку двумя способами. Первый — модальное окно со стоп-сигналом. Второй — строка в панели сообщений внизу формы, обычно после неудачной записи или проведения.

Окно ошибки

В окне виден краткий текст. Полный текст скрыт за ссылкой на подробности под ним. Раскройте её — там стек вызовов, и он полезнее заголовка.

Типичная строка выглядит так:

{Документ.РеализацияТоваровУслуг.МодульОбъекта(214)}: Поле объекта не обнаружено (СкладОтгрузки)

Как её читать:

  • 📍 в фигурных скобках — модуль, где упал код: объект метаданных, вид модуля и номер строки в скобках;
  • 🧩 после двоеточия — суть ошибки;
  • 🔎 в круглых скобках в конце — имя поля, метода или переменной, на котором споткнулась платформа.

Если строк в фигурных скобках несколько, первая сверху — место падения, остальные — цепочка вызовов, которая к нему привела. Номер строки сразу ведёт программиста к нужному месту в Конфигураторе.

Не пересказывайте ошибку своими словами. Скопируйте подробный текст целиком (Ctrl+A, Ctrl+C в поле с текстом) и приложите к обращению. Половина вопросов «у меня ошибка при проведении» без текста не решается.

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

Панель сообщений

Сообщения проверок заполнения и отказов при проведении выводятся внизу формы. Двойной щелчок по сообщению переводит курсор в поле, к которому оно привязано. Так быстро находится незаполненный реквизит в табличной части на 300 строк.

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

Журнал регистрации: как найти ошибку задним числом

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

Где открыть журнал регистрации

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

Команда «Все функции» по умолчанию скрыта. Включите её в параметрах клиентского приложения: главное меню (кнопка с тремя полосками) → Сервис → Параметры, флажок «Отображать команду “Все функции”». В новых версиях платформы этот пункт находится в меню Настройки → Параметры.

Для просмотра нужны административные права. Обычный пользователь журнал не откроет.

Как отфильтровать ошибки

Журнал растёт быстро: в базе на 20 пользователей за день набирается десятки тысяч записей. Без отбора искать бесполезно.

  1. Откройте журнал и нажмите кнопку установки отбора в командной панели.
  2. Задайте интервал: день и примерное время, когда случилась ошибка.
  3. В поле уровня оставьте только «Ошибка». Уровни в журнале четыре: «Информация», «Предупреждение», «Ошибка», «Примечание».
  4. Если знаете виновника — укажите пользователя. Если знаете документ — заполните отбор по данным или по метаданным.
  5. Примените отбор и откройте запись двойным щелчком. В поле комментария — тот же текст, что видел пользователь, с модулем и строкой.

Ищете, кто изменил документ перед ошибкой? Снимите отбор по уровню и оставьте отбор по данным: увидите все записи и проведения этого документа по порядку.

Почему в журнале пусто

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

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

Сокращение журнала необратимо. Сначала сохраните удаляемый период в файл.

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

  • 📁 Файловая база: папка 1Cv8Log внутри каталога базы.
  • 🗄 Клиент-серверная база : srvinfo\reg_1541\<идентификатор базы>\1Cv8Log на сервере 1С.

В новых базах журнал — один файл 1Cv8.lgd. В старых — файл 1Cv8.lgf и набор файлов .lgp по периодам. Если журнал разросся до гигабайт, форма открывается минутами — это повод сократить его.

Перехват и вывод ошибки в коде

Программист сам решает, что показать пользователю и что записать в журнал. Для этого в языке 1С есть конструкция Попытка … Исключение … КонецПопытки.

Базовый шаблон

Попытка
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    ИнфоОбОшибке = ИнформацияОбОшибке();

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

    // Короткий текст — пользователю
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтрШаблон("Документ № %1 не проведён: %2",
        ДокументОбъект.Номер,
        КраткоеПредставлениеОшибки(ИнфоОбОшибке));
    Сообщение.Сообщить();
КонецПопытки;

Что здесь происходит:

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

С версии платформы 8.3.17 те же функции есть в менеджере ОбработкаОшибок: ОбработкаОшибок.ПодробноеПредставлениеОшибки() и ОбработкаОшибок.КраткоеПредставлениеОшибки(). Старый вариант тоже работает. Если нужен просто текст — подойдёт ОписаниеОшибки().

Своё исключение и проброс выше

Чтобы остановить выполнение со своим текстом, используйте ВызватьИсключение:

Если НЕ ЗначениеЗаполнено(Склад) Тогда
    ВызватьИсключение "Не указан склад отгрузки";
КонецЕсли;

Внутри блока Исключение оператор ВызватьИсключение; без параметров пробрасывает исходную ошибку дальше. Так делают, когда нужно записать сбой в журнал, но не «проглотить» его.

Три ловушки

  • ⚠️ Пустой блок Исключение без записи в журнал. Ошибка случилась, но о ней никто не узнает. Это худший вариант.
  • ⚠️ Транзакция. Если ошибка возникла внутри НачатьТранзакцию(), в блоке Исключение вызовите ОтменитьТранзакцию(). Иначе следующая запись упадёт с текстом В данной транзакции уже происходили ошибки, и исходная причина потеряется.
  • ⚠️ Фоновые задания. Сообщение.Сообщить() в фоне на экран не попадёт. Сообщения читают методом ПолучитьСообщенияПользователю() фонового задания, а ошибки ищут в журнале регистрации.

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

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

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

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

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

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

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

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

Чтобы применить ключ, службу сервера 1С перезапускают. Все сеансы пользователей оборвутся, несохранённые данные пропадут. Делайте это вне рабочего времени и только на тестовом сервере. На рабочем сервере отладку не держат включённой.

Безопаснее разбирать ошибку на копии базы: выгрузите .dt, разверните её на тестовом сервере или как файловую и отлаживайте там.

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

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

Как включить технологический журнал

Он настраивается файлом 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_TechLog" history="24">
        <event>
            <eq property="name" value="EXCP"/>
        </event>
        <property name="all"/>
    </log>
</config>
  • location — папка для логов. Выберите диск с запасом места.
  • history — сколько часов хранить файлы. Здесь 24 часа.
  • EXCP — события исключений.

Платформа подхватывает файл без перезапуска, обычно за минуту. Логи раскладываются по папкам процессов: rphost_…, ragent_…, rmngr_…. Внутри — файлы по часам.

Другие полезные события:

СобытиеЧто ловит
EXCPИсключения, в том числе необработанные
TLOCKУправляемые блокировки
TTIMEOUTТаймауты ожидания блокировки
TDEADLOCKВзаимоблокировки
DBMSSQLЗапросы к MS SQL Server

Не собирайте все события без отбора на рабочем сервере: лог за час займёт гигабайты и заполнит диск.

После разбора уберите logcfg.xml или сузьте настройку.

Журнал Windows и консоль кластера

Если процесс сервера упал целиком, след остаётся в журнале событий Windows. Откройте eventvwr.msc, раздел Журналы Windows → Приложение, и ищите записи с источником, связанным с 1С, на время сбоя.

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

Где искать вашу ошибку?

Как понять текст типовой ошибки

Тексты ошибок 1С повторяются. По формулировке почти всегда ясно, куда копать.

Текст ошибкиЧто значитКуда смотреть
Поле объекта не обнаруженоКод обращается к реквизиту, которого нетИмя в скобках, расширения и доработки после обновления
Метод объекта не обнаруженВызван несуществующий методКод доработки, версия БСП после обновления
Значение не является значением объектного типаОбращение через точку к пустой ссылке или примитивуПустой реквизит в документе: склад, договор, контрагент
Деление на 0В расчёте знаменатель равен нулюНулевое количество или курс в строке документа
Недостаточно прав для …У пользователя нет нужной ролиПрофиль групп доступа пользователя
Конфликт блокировок при выполнении транзакцииДва пользователя меняют одни данныеТехнологический журнал, события TLOCK и TTIMEOUT
Ошибка формата потокаПовреждён файл или кэшКэш клиента, затем проверка базы

Как действовать по типу ошибки

  • 🧑‍💼 Ошибки данных («Значение не является значением объектного типа», «Деление на 0») чаще всего лечатся заполнением реквизита. Откройте документ из журнала регистрации и проверьте строку, упомянутую в тексте.
  • 🧑‍💻 Ошибки кода («Поле объекта не обнаружено», «Метод объекта не обнаружен») появляются после обновления, когда расширение или внешняя обработка ссылается на удалённый реквизит. Отключите расширение на копии базы и повторите действие.
  • 🔐 Ошибки прав решаются в карточке пользователя: Администрирование → Настройки пользователей и прав → Пользователи, затем группы доступа.
  • 🗄 Ошибки платформы и сервера разбираются по технологическому журналу. Без него администратор гадает.

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

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

Как отправить ошибку в поддержку, чтобы её быстро разобрали?
Приложите полный подробный текст из окна ошибки, время сбоя, имя пользователя, версию платформы и конфигурации из окна «О программе». Скриншот без текста почти бесполезен.
Можно ли выгрузить журнал регистрации в файл?
Да. При сокращении журнала в Конфигураторе удаляемые записи можно сохранить в файл. Для разбора на другом компьютере проще скопировать папку 1Cv8Log целиком.
Почему ошибка видна у одного пользователя и не видна у другого?
Обычно из-за прав или разных данных: у одного пустой реквизит, у другого заполнен. Реже — из-за повреждённого кэша на конкретном компьютере. Сравните записи журнала регистрации по обоим пользователям.
Где посмотреть ошибки обмена данными?
В журнале регистрации с отбором по событиям обмена данными. В типовых конфигурациях форма синхронизации данных в разделе Администрирование показывает состояние последнего обмена и предупреждения.
Чем журнал регистрации отличается от технологического журнала?
Журнал регистрации пишет прикладные события: кто, что и когда сделал в базе. Технологический журнал пишет события платформы и сервера: исключения, блокировки, запросы к СУБД. Первый обычно работает постоянно, второй включают на время разбора.