Где искать причину сбоя в 1С:Предприятии 8.3 и как её подтвердить
Содержание
Найти ошибку в 1С быстрее всего так: откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации), поставьте отбор по уровню «Ошибка» и периоду сбоя, и посмотрите полный текст события. Часто там уже видны модуль, строка кода и пользователь. Если журнал молчит, включают технологический журнал, отладчик или смотрят блокировки.
Частое заблуждение — что достаточно текста из окна сообщения. Окно показывает только верхний слой: Ошибка при вызове метода контекста (Записать). Настоящая причина лежит ниже, в подробном представлении ошибки, в журнале или в логах сервера. Проверять эти источники стоит по порядку: от простого к тяжёлому.
1. С чего начать поиск ошибок: окно сообщения и журнал регистрации
Подробный текст из окна ошибки
Когда 1С показывает окно с ошибкой, не закрывайте его сразу. В нём есть ссылка на подробный текст. Там видно:
- 📌 имя модуля, например
ОбщийМодуль.ОбменДаннымиСервер.Модуль; - 📌 номер строки и саму строку кода;
- 📌 цепочку вызовов (стек), если ошибка возникла глубоко во вложенных процедурах;
- 📌 исходное сообщение СУБД или операционной системы, если сбой пришёл оттуда.
Скопируйте этот текст целиком. Разработчику он нужен дословно, а не пересказом «что-то с записью».
Журнал регистрации
Журнал регистрации пишет платформа сама, его не нужно включать. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) он открывается из раздела Администрирование → Обслуживание. В Конфигураторе — через меню Администрирование → Журнал регистрации.
Как работать с журналом:
- Откройте отбор и задайте интервал: от пары минут до сбоя до пары минут после.
- В поле уровня оставьте только «Ошибка». Затем при необходимости добавьте «Предупреждение».
- Если сбой у конкретного сотрудника, отберите по пользователю или компьютеру.
- Откройте событие двойным щелчком. В поле комментария — полный текст ошибки, в поле данных — ссылка на документ или элемент.
- Посмотрите соседние события того же сеанса. Часто ошибке предшествует предупреждение, которое и объясняет причину.
| Уровень события | Что обычно означает |
|---|---|
| Ошибка | Исключение в коде, отказ СУБД, неудачная запись или проведение |
| Предупреждение | Нештатная ситуация без остановки: повторная попытка обмена, пропущенный объект |
| Информация | Вход, выход, запуск регламентного задания |
| Примечание | Служебные отметки, по умолчанию часто не пишутся |
Если журнал пустой или «обрезан», проверьте его настройку в Конфигураторе: Администрирование → Настройка журнала регистрации. Там задают, какие уровни писать и сколько хранить. Журнал, где пишутся только ошибки, бесполезен для разбора цепочки событий.
Физически журнал лежит в каталоге базы, в папке 1Cv8Log. В платформе 8.3 по умолчанию используется формат файлов .lgd (один файл SQLite), раньше был формат .lgf + .lgp. Если журнал вырос до десятков гигабайт, он начинает тормозить сам по себе — сокращайте его штатной командой Конфигуратора, а не удалением файлов на работающей базе.
Как сделать, чтобы ошибки собственного кода попадали в журнал
Если ошибки появляются в доработках, пусть код сам пишет в журнал полный текст исключения. Минимальный рабочий пример:
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации("Загрузка.Проведение",
УровеньЖурналаРегистрации.Ошибка,
ДокументОбъект.Метаданные(),
ДокументОбъект.Ссылка,
ТекстОшибки);
ВызватьИсключение;
КонецПопытки;
Своё имя события («Загрузка.Проведение») потом легко отобрать в журнале. ВызватьИсключение без параметров пробрасывает ошибку дальше, чтобы её не «проглотить» молча.
2. Технологический журнал: глубокая диагностика сбоев сервера
Технологический журнал (ТЖ) нужен, когда журнал регистрации ничего не показывает: падает рабочий процесс, клиент теряет связь с сервером, запросы идут минутами. ТЖ пишет события платформы на уровне процессов rphost, rmngr, ragent и клиентов.
Как включить технологический журнал
ТЖ включается файлом logcfg.xml. Его кладут в каталог conf платформы: общий C:\Program Files\1cv8\conf\ или bin\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>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
Параметр history — сколько часов хранить логи. Внутри каталога появятся папки по процессам, например rphost_4120, а в них файлы по часам вида 26100714.log.
Какие события ТЖ полезны при поиске ошибок
| Событие | Что ловит | Когда включать |
|---|---|---|
EXCP | Исключения платформы | Почти всегда, лёгкое |
PROC | Запуск и завершение процессов | Падения rphost |
CONN | Установка и разрыв соединений | Обрывы связи клиента с сервером |
TTIMEOUT | Таймаут ожидания управляемой блокировки | Ошибки «конфликт блокировок» |
TDEADLOCK | Взаимоблокировки | Ошибки со словом «взаимоблокировка» |
DBMSSQL / DBPOSTGRS | Запросы к СУБД | Медленные операции, только коротко |
Не оставляйте ТЖ с событиями DBMSSQL или TLOCK и property name="all" надолго на рабочем сервере. За час такой журнал легко занимает гигабайты и сам нагружает диск. Включили, воспроизвели сбой, отключили.
Как читать логи ТЖ
Каждая строка начинается со времени и длительности, затем имя события и свойства через запятую. Искать удобно по ключевому слову. В Windows:
findstr /s /i /c:"EXCP" D:\1C_TechLog\*.log > D:\excp.txt
То же в PowerShell с выводом имени файла и строки:
Get-ChildItem D:\1C_TechLog -Recurse -Filter *.log |
Select-String -Pattern "EXCP" |
Select-Object Path, LineNumber, Line
Свойство Descr в событии EXCP содержит текст ошибки, Usr — пользователя, Context — стек вызовов встроенного языка.
3. Отладка конфигурации и поиск ошибки в коде
Когда понятно, в каком модуле ошибка, но непонятно почему, нужен отладчик. Он запускается из Конфигуратора.
Пошагово: отладка в файловой базе
- Откройте базу в Конфигураторе.
- Найдите модуль из текста ошибки и поставьте точку останова на нужной строке клавишей
F9. - Запустите отладку клавишей
F5или через менюОтладка → Начать отладку. - В открывшемся клиенте повторите действие, которое приводит к ошибке.
- Выполнение остановится на точке. Шаг с заходом в процедуру —
F11, шаг через —F10. - Значения переменных смотрите в табло или окне вычисления выражения (
Shift+F9).
Если точное место неизвестно, включите в меню Отладка остановку по ошибке. Тогда отладчик сам остановится на строке, где возникло исключение.
Отладка на сервере 1С
В клиент-серверной базе серверный код выполняется в rphost. Чтобы туда можно было подключиться, отладка должна быть разрешена на сервере: служба агента запускается с ключом -debug. Этот ключ прописывают в параметрах запуска службы и перезапускают её.
Перезапуск службы агента сервера 1С обрывает сеансы всех пользователей всех баз на этом сервере. Делайте это вне рабочего времени и предупредите людей заранее.
Отлаживать удобнее на копии базы. На рабочей базе точка останова в общем модуле остановит каждого, кто зайдёт в этот код.
Замер производительности
Если «ошибка» на деле — зависание или таймаут, пригодится Отладка → Замер производительности. Он показывает, сколько раз выполнялась каждая строка и сколько времени она заняла. Одна строка с запросом в цикле на 40 000 итераций видна сразу.
4. Блокировки и ошибки базы данных
Ошибки вида Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки означают, что одна транзакция ждала другую дольше допустимого. Ищут не «ту, что упала», а ту, что держала блокировку.
Кто держит блокировку
- 🔍 Консоль администрирования серверов 1С: в информационной базе раздел «Блокировки» показывает, какой сеанс что заблокировал.
- 🔍 Там же «Сеансы»: длительность текущего вызова и время в СУБД выдают долгую транзакцию.
- 🔍 Из командной строки:
rac session list(подробности параметров —rac help session). - 🔍 В конфигурации на БСП:
Администрирование → Обслуживание → Активные пользователи.
Что смотреть на стороне СУБД
Для MS SQL Server видно, кто кого блокирует:
SELECT session_id, blocking_session_id, wait_type, wait_time, status
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Для PostgreSQL:
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, wait_event_type, query_start
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
Частые источники блокировок — регламентное задание закрытия месяца днём, массовая перепроводка документов, обмен, который пишет пачки по 10 000 объектов в одной транзакции.
Завершать «виновный» сеанс в консоли кластера можно, но пользователь потеряет несохранённые данные, а его транзакция откатится. Сначала свяжитесь с ним, если это не зависшая фоновая операция.
5. Проверка целостности базы, конфигурации и версии платформы
Когда ошибки «плавают» и связаны не с кодом, а с данными (Объект не найден, битые ссылки, расхождение итогов), проверяют саму базу.
Тестирование и исправление информационной базы
В Конфигураторе: Администрирование → Тестирование и исправление. Нужен монопольный доступ, поэтому все пользователи должны выйти.
| Режим | Что делает | Риск |
|---|---|---|
| Реиндексация таблиц | Перестраивает индексы | Низкий, долго на больших базах |
| Проверка логической целостности | Ищет нарушения структуры данных | Низкий |
| Проверка ссылочной целостности | Находит ссылки на несуществующие объекты | Зависит от выбранного действия |
| Пересчёт итогов | Пересчитывает итоги регистров | Низкий |
| Сжатие таблиц | Убирает удалённые записи | Средний |
Перед тестированием с исправлением сделайте выгрузку базы в .dt или резервную копию СУБД. Действие «удалять объекты» при битых ссылках необратимо.
Для файловой базы есть ещё утилита chdbfl.exe в каталоге bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD. Запускать её можно только когда с базой никто не работает
.
Проверка конфигурации
Конфигурация → Проверка конфигурации в Конфигураторе находит синтаксические ошибки модулей, неправильные ссылки в метаданных и вызовы, недоступные на клиенте или сервере. Отметьте нужные режимы (тонкий клиент, сервер, веб-клиент) и запустите. Это главный инструмент после ручных доработок и объединения конфигураций.
Версия платформы и кэш
Часть ошибок исчезает после смены версии платформы или очистки кэша. Номер версии смотрят в Справка → О программе. Для конфигурации есть минимальная версия платформы: если установленная ниже, обновление конфигурации
не применится или будет работать с ошибками.
Кэш клиента сбрасывают запуском с ключом:
"C:\Program Files\1cv8\common\1cestart.exe" /ClearCache
Помогает при странных ошибках форм после обновления конфигурации.
6. Автоматический поиск ошибок и типовые сценарии сбоев
Инструменты, которые ищут ошибки за вас
- 🤖 Встроенные проверки учёта. В Бухгалтерии 3.0 есть экспресс-проверка:
Отчёты → Анализ учета → Экспресс-проверка. Она ищет учётные ошибки: отрицательные остатки, нарушенную последовательность, незакрытые счета. - 🤖 Регламентные задания с отказами. Обработка списка регламентных и фоновых заданий в разделе
Администрирование → Обслуживаниепоказывает последнее выполнение и текст ошибки. - 🤖 Статический анализ кода. Для доработанных конфигураций используют BSL Language Server и SonarQube с плагином для 1С: они находят запросы в цикле, неиспользуемые переменные, ошибки синтаксиса до запуска.
- 🤖 Сервис отчётов об ошибках платформы. В новых версиях платформы окно ошибки предлагает сформировать отчёт; его можно отправлять на свой сервер сбора, и разработчик видит все падения с контекстом.
Типовой сценарий → куда смотреть
7. Ошибки, которые затягивают поиск
- ❌ Перезапуск сервера «на всякий случай». Сбой пропадает, логи прошлого сеанса теряются, через день всё повторяется.
- ❌ Скриншот вместо текста. Обрезанный текст без модуля и строки — полдня лишней работы разработчику.
- ❌ ТЖ «на всё» без фильтров. Гигабайты логов, в которых нужное событие не найти.
- ❌ Исправление на рабочей базе без копии. Тестирование с удалением битых объектов откатить нельзя.
- ❌
Попытка … Исключение … КонецПопыткис пустым обработчиком в своём коде. Ошибка исчезает из поля зрения, а данные остаются недописанными.