Где 1С хранит сообщения об ошибках и как их прочитать
Содержание
Ошибку в 1С можно вывести и найти в пяти местах: в окне сообщения на экране, в журнале регистрации (Администрирование → Обслуживание → Журнал регистрации), в коде через Попытка … Исключение, в отладчике Конфигуратора и в технологическом журнале сервера. Пользователю и бухгалтеру обычно хватает первых двух. Программисту и администратору — всех пяти.
Выбор простой. Ошибка видна прямо сейчас — читайте окно и копируйте подробный текст. Ошибка была вчера или у другого сотрудника — открывайте журнал регистрации. Ошибка «плавает», падает фоновое задание или сервер — нужен технологический журнал.
| Где смотреть | Кто пользуется | Что покажет | Когда выбирать |
|---|---|---|---|
| Окно ошибки и панель сообщений | Пользователь | Текст ошибки, модуль и строку | Ошибка воспроизводится на экране |
| Журнал регистрации | Бухгалтер, администратор | Кто, когда, в каком документе | Ошибка была в прошлом или у другого пользователя |
Попытка … Исключение | Программист | Свою запись в журнал или понятное сообщение | Нужно перехватить и обработать сбой |
| Отладчик | Программист | Значения переменных в момент сбоя | Нужно понять причину в коде |
| Технологический журнал, логи Windows | Администратор | Исключения сервера, блокировки, падения процессов | Ошибка на сервере, в фоне, без окна |
Что показывает 1С на экране при ошибке
Платформа выводит ошибку двумя способами. Первый — модальное окно со стоп-сигналом. Второй — строка в панели сообщений внизу формы, обычно после неудачной записи или проведения.
Окно ошибки
В окне виден краткий текст. Полный текст скрыт за ссылкой на подробности под ним. Раскройте её — там стек вызовов, и он полезнее заголовка.
Типичная строка выглядит так:
{Документ.РеализацияТоваровУслуг.МодульОбъекта(214)}: Поле объекта не обнаружено (СкладОтгрузки)
Как её читать:
- 📍 в фигурных скобках — модуль, где упал код: объект метаданных, вид модуля и номер строки в скобках;
- 🧩 после двоеточия — суть ошибки;
- 🔎 в круглых скобках в конце — имя поля, метода или переменной, на котором споткнулась платформа.
Если строк в фигурных скобках несколько, первая сверху — место падения, остальные — цепочка вызовов, которая к нему привела. Номер строки сразу ведёт программиста к нужному месту в Конфигураторе.
Не пересказывайте ошибку своими словами. Скопируйте подробный текст целиком (Ctrl+A, Ctrl+C в поле с текстом) и приложите к обращению. Половина вопросов «у меня ошибка при проведении» без текста не решается.
Если после ошибки клиент закрылся аварийно, платформа может предложить сформировать отчёт об ошибке. Его тоже стоит сохранить: в нём версия платформы, конфигурации и та же цепочка вызовов.
Панель сообщений
Сообщения проверок заполнения и отказов при проведении выводятся внизу формы. Двойной щелчок по сообщению переводит курсор в поле, к которому оно привязано. Так быстро находится незаполненный реквизит в табличной части на 300 строк.
Панель закрывается крестиком, а сообщения исчезают при следующей записи. Если текст нужен для поддержки — копируйте сразу.
Журнал регистрации: как найти ошибку задним числом
Журнал регистрации — главный инструмент разбора. Платформа пишет туда входы и выходы пользователей, запись и проведение документов, ошибки и предупреждения. Пользователь может давно закрыть окно, а запись останется.
Где открыть журнал регистрации
- 🖥 В БП 3.0, ЗУП 3.1, УТ 11:
Администрирование → Обслуживание → Журнал регистрации. - 🛠 В Конфигураторе:
Администрирование → Журнал регистрации. - 📂 В любой конфигурации:
Все функции → Стандартные → Журнал регистрации.
Команда «Все функции» по умолчанию скрыта. Включите её в параметрах клиентского приложения: главное меню (кнопка с тремя полосками) → Сервис → Параметры, флажок «Отображать команду “Все функции”». В новых версиях платформы этот пункт находится в меню Настройки → Параметры.
Для просмотра нужны административные права. Обычный пользователь журнал не откроет.
Как отфильтровать ошибки
Журнал растёт быстро: в базе на 20 пользователей за день набирается десятки тысяч записей. Без отбора искать бесполезно.
- Откройте журнал и нажмите кнопку установки отбора в командной панели.
- Задайте интервал: день и примерное время, когда случилась ошибка.
- В поле уровня оставьте только «Ошибка». Уровни в журнале четыре: «Информация», «Предупреждение», «Ошибка», «Примечание».
- Если знаете виновника — укажите пользователя. Если знаете документ — заполните отбор по данным или по метаданным.
- Примените отбор и откройте запись двойным щелчком. В поле комментария — тот же текст, что видел пользователь, с модулем и строкой.
Ищете, кто изменил документ перед ошибкой? Снимите отбор по уровню и оставьте отбор по данным: увидите все записи и проведения этого документа по порядку.
Почему в журнале пусто
Журнал пишет только то, что разрешено настройкой. Она находится в Конфигураторе: Администрирование → Настройка журнала регистрации. Если там выбрано «Не регистрировать» или «Регистрировать ошибки» с узким набором, часть событий пропадёт.
Там же журнал сокращают: удаляют записи старше выбранной даты, при желании сохранив их в файл.
Сокращение журнала необратимо. Сначала сохраните удаляемый период в файл.
Где лежат файлы журнала
- 📁 Файловая база: папка
1Cv8Logвнутри каталога базы. - 🗄 Клиент-серверная база
:
srvinfo\reg_1541\<идентификатор базы>\1Cv8Logна сервере 1С.
В новых базах журнал — один файл 1Cv8.lgd. В старых — файл 1Cv8.lgf и набор файлов .lgp по периодам. Если журнал разросся до гигабайт, форма открывается минутами — это повод сократить его.
Перехват и вывод ошибки в коде
Программист сам решает, что показать пользователю и что записать в журнал. Для этого в языке 1С есть конструкция Попытка … Исключение … КонецПопытки.
Базовый шаблон
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ИнфоОбОшибке = ИнформацияОбОшибке();
// Полный текст со стеком — в журнал, для разработчика
ЗаписьЖурналаРегистрации("Загрузка.Проведение",
УровеньЖурналаРегистрации.Ошибка,
ДокументОбъект.Метаданные(),
ДокументОбъект.Ссылка,
ПодробноеПредставлениеОшибки(ИнфоОбОшибке));
// Короткий текст — пользователю
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Документ № %1 не проведён: %2",
ДокументОбъект.Номер,
КраткоеПредставлениеОшибки(ИнфоОбОшибке));
Сообщение.Сообщить();
КонецПопытки;
Что здесь происходит:
ИнформацияОбОшибке()возвращает объект с описанием, модулем, номером строки и причиной;ПодробноеПредставлениеОшибки()даёт текст со стеком вызовов — его место в журнале;КраткоеПредставлениеОшибки()даёт одну строку — её не стыдно показать бухгалтеру;ЗаписьЖурналаРегистрации()создаёт запись, которую потом найдут по имени события «Загрузка.Проведение».
С версии платформы 8.3.17 те же функции есть в менеджере ОбработкаОшибок: ОбработкаОшибок.ПодробноеПредставлениеОшибки() и ОбработкаОшибок.КраткоеПредставлениеОшибки(). Старый вариант тоже работает. Если нужен просто текст — подойдёт ОписаниеОшибки().
Своё исключение и проброс выше
Чтобы остановить выполнение со своим текстом, используйте ВызватьИсключение:
Если НЕ ЗначениеЗаполнено(Склад) Тогда
ВызватьИсключение "Не указан склад отгрузки";
КонецЕсли;
Внутри блока Исключение оператор ВызватьИсключение; без параметров пробрасывает исходную ошибку дальше. Так делают, когда нужно записать сбой в журнал, но не «проглотить» его.
Три ловушки
- ⚠️ Пустой блок
Исключениебез записи в журнал. Ошибка случилась, но о ней никто не узнает. Это худший вариант. - ⚠️ Транзакция. Если ошибка возникла внутри
НачатьТранзакцию(), в блокеИсключениевызовитеОтменитьТранзакцию(). Иначе следующая запись упадёт с текстомВ данной транзакции уже происходили ошибки, и исходная причина потеряется. - ⚠️ Фоновые задания.
Сообщение.Сообщить()в фоне на экран не попадёт. Сообщения читают методомПолучитьСообщенияПользователю()фонового задания, а ошибки ищут в журнале регистрации.
В типовых конфигурациях на БСП для вывода сообщения есть готовая процедура ОбщегоНазначения.СообщитьПользователю(). Она умеет привязать текст к полю формы.
Отладка: поймать ошибку в момент падения
Журнал говорит, где упало. Отладчик показывает, почему: какие значения были в переменных в эту секунду.
Запуск отладки
- Откройте базу в Конфигураторе.
- Выберите
Отладка → Начать отладку → Тонкий клиент(или клавишуF5). - В меню
Отладкавключите режим остановки по ошибке. - Повторите в клиенте действие, которое вызывает ошибку.
- Отладчик остановится на строке, где возникло исключение. Наведите курсор на переменную или откройте окно вычисления выражения (
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 целиком.Почему ошибка видна у одного пользователя и не видна у другого?
Где посмотреть ошибки обмена данными?
Администрирование показывает состояние последнего обмена и предупреждения.