Где искать причину сбоя в 1С:Предприятии 8.3 и как её подтвердить

· 10 мин

Содержание

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

Частое заблуждение — что достаточно текста из окна сообщения. Окно показывает только верхний слой: Ошибка при вызове метода контекста (Записать). Настоящая причина лежит ниже, в подробном представлении ошибки, в журнале или в логах сервера. Проверять эти источники стоит по порядку: от простого к тяжёлому.

1. С чего начать поиск ошибок: окно сообщения и журнал регистрации

Подробный текст из окна ошибки

Когда 1С показывает окно с ошибкой, не закрывайте его сразу. В нём есть ссылка на подробный текст. Там видно:

  • 📌 имя модуля, например ОбщийМодуль.ОбменДаннымиСервер.Модуль;
  • 📌 номер строки и саму строку кода;
  • 📌 цепочку вызовов (стек), если ошибка возникла глубоко во вложенных процедурах;
  • 📌 исходное сообщение СУБД или операционной системы, если сбой пришёл оттуда.

Скопируйте этот текст целиком. Разработчику он нужен дословно, а не пересказом «что-то с записью».

Журнал регистрации

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

Как работать с журналом:

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

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

Физически журнал лежит в каталоге базы, в папке 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. Отладка конфигурации и поиск ошибки в коде

Когда понятно, в каком модуле ошибка, но непонятно почему, нужен отладчик. Он запускается из Конфигуратора.

Пошагово: отладка в файловой базе

  1. Откройте базу в Конфигураторе.
  2. Найдите модуль из текста ошибки и поставьте точку останова на нужной строке клавишей F9.
  3. Запустите отладку клавишей F5 или через меню Отладка → Начать отладку.
  4. В открывшемся клиенте повторите действие, которое приводит к ошибке.
  5. Выполнение остановится на точке. Шаг с заходом в процедуру — F11, шаг через — F10.
  6. Значения переменных смотрите в табло или окне вычисления выражения (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. Ошибки, которые затягивают поиск

  • ❌ Перезапуск сервера «на всякий случай». Сбой пропадает, логи прошлого сеанса теряются, через день всё повторяется.
  • ❌ Скриншот вместо текста. Обрезанный текст без модуля и строки — полдня лишней работы разработчику.
  • ❌ ТЖ «на всё» без фильтров. Гигабайты логов, в которых нужное событие не найти.
  • ❌ Исправление на рабочей базе без копии. Тестирование с удалением битых объектов откатить нельзя.
  • ❌ Попытка … Исключение … КонецПопытки с пустым обработчиком в своём коде. Ошибка исчезает из поля зрения, а данные остаются недописанными.

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

Можно ли посмотреть журнал регистрации без Конфигуратора и без прав администратора?
Как правило, нет: просмотр журнала доступен администраторам или пользователям с отдельной ролью на его просмотр. Обычному пользователю нужно передать администратору время сбоя и текст ошибки.
Сколько хранить журнал регистрации?
Ориентир — 1–3 месяца для рабочей базы. Больший срок нужен для аудита, но тогда журнал лучше выгружать в архив и сокращать в базе.
Чем технологический журнал отличается от журнала регистрации?
Журнал регистрации пишет события прикладного уровня: кто, что и с каким объектом сделал. Технологический журнал пишет события платформы и сервера: исключения процессов, запросы к СУБД, блокировки, соединения.
Можно ли отлаживать базу 1С через веб-клиент или тонкий клиент по HTTP?
Да, в платформе 8.3 есть отладка по протоколу HTTP через сервер отладки. Её настраивают в параметрах отладки Конфигуратора и при запуске клиента.
Что делать, если ошибка воспроизводится только в рабочей базе, а в копии нет?
Сравните окружение: версию платформы, режим (файловый или клиент-серверный), права пользователя и нагрузку. Если дело в нагрузке, включите ТЖ с EXCP и TTIMEOUT на рабочем сервере на время воспроизведения.