Откуда берутся сбои в 1С:Предприятии 8.3 и как найти их причину

· 11 мин

Содержание

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

Методы исправления сильно отличаются по риску. Очистка кэша и перезапуск сеанса безопасны. Тестирование базы требует монопольного режима и свежей копии. Правка кода или настроек сервера — уже работа администратора. Поэтому диагностика всегда идёт первой: она экономит лишние действия и не даёт «починить» то, что не ломалось.

Классификация сбоев и первичный осмотр

Любая ошибка в 1С попадает в одну из нескольких групп. По группе сразу понятно, кто её устраняет и с какого инструмента начинать.

ГруппаТипичный текстГде искать причинуКто исправляет
🖥️ Клиент и кэшОшибка формата потока, зависание при открытии формылокальный кэш, профиль пользователяпользователь или админ
🧩 Код конфигурацииПоле объекта не обнаружено, Значение не является значением объектного типа, Ошибка при вызове метода контекстамодуль из подробного текста ошибкипрограммист
🗂️ Данные<Объект не найден>, расхождения в отчётах, документ не проводитсяжурнал регистрации, тестирование базыадмин, бухгалтер
🔒 БлокировкиКонфликт блокировок при выполнении транзакции, Превышено максимальное время ожидания предоставления блокировкитехнологический журнал, СУБДадмин
🗄️ СУБД и серверОшибка СУБД, Недостаточно памяти, Сервер 1С:Предприятия не обнаруженлоги СУБД, консоль кластера, сетьадмин
🔑 ЛицензииНе обнаружена лицензия для использования программыменеджер лицензий, ключиадмин

Что сделать в первые пять минут

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

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

Клиентский уровень: очистка кэша

Кэш конфигурации на клиенте хранится в папках с именами-идентификаторами внутри %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. Быстрый способ — запустить 1С с параметром /ClearCache:

"C:\Program Files\1cv8\common\1cestart.exe" /ClearCache

Второй вариант — закрыть все сеансы 1С на компьютере и удалить эти папки вручную. Список баз в стартовом окне при этом сохраняется, потому что он лежит в файле ibases.v8i, а не в кэше.

Журнал регистрации: где искать след ошибки

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

Как открыть журнал

ГдеПуть
БП 3.0, ЗУП 3.1, УТ 11Администрирование → Обслуживание → Журнал регистрации
КонфигураторАдминистрирование → Журнал регистрации
Любая конфигурация в режиме «Все функции»Стандартные → Журнал регистрации

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

Как отфильтровать нужное

  1. Установите отбор по периоду: 10–15 минут вокруг времени сбоя.
  2. В отборе по уровню оставьте только «Ошибка» и «Предупреждение».
  3. Добавьте отбор по пользователю, если ошибка была у конкретного человека.
  4. Откройте найденную запись. В поле комментария лежит тот же текст, что видел пользователь, а в поле данных — ссылка на объект.

Для ошибок проведения смотрите события «Данные. Проведение» и «Данные. Изменение» рядом с ошибкой: по ним видно, какой документ и кто трогал перед сбоем.

Настройка и размер журнала

Уровень записи меняют в Конфигураторе: Администрирование → Настройка журнала регистрации. Там же журнал можно разделить на периоды и сократить, выгрузив старые записи в файл.

Файлы журнала лежат в папке 1Cv8Log:

  • 📁 файловая база — рядом с файлом 1Cv8.1CD;
  • 📁 клиент-серверная база — в каталоге кластера srvinfo\reg_1541\<идентификатор базы>\1Cv8Log.

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

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

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

Как включить ТЖ

ТЖ настраивается файлом logcfg.xml. Его кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\, на том компьютере, где работает процесс 1С: на сервере для клиент-серверной базы, на клиенте для файловой. Платформа перечитывает файл примерно раз в минуту, перезапуск не нужен.

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

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\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 задаёт, сколько часов хранить файлы. Логи раскладываются по папкам процессов, а внутри — по часовым файлам с именем вида ГГММДДЧЧ.log.

Какие события что означают

СобытиеЧто фиксируетКогда включать
EXCPисключения платформы, включая те, что видел пользовательлюбая непонятная ошибка
TTIMEOUTпревышение времени ожидания управляемой блокировки«Конфликт блокировок…»
TDEADLOCKвзаимоблокировку двух сеансовошибки взаимоблокировки
TLOCKвсе управляемые блокировкиразбор, кто кого держит
DBMSSQL, DBPOSTGRSтекст запросов к СУБД и их длительностьмедленные операции, ошибки СУБД
CALLсерверные вызовы и потребление памятиутечки памяти, тяжёлые вызовы

TLOCK и DBMSSQL без отборов на нагруженной базе дают гигабайты логов за час и сами замедляют работу. Включайте их на короткое время, с отбором по базе (p:processName) или по длительности (duration), и следите за свободным местом на диске. После разбора уберите лишние события из logcfg.xml.

Как читать запись

Строка ТЖ начинается со времени и длительности, затем идёт имя события и набор свойств. Для поиска причины важны:

  • 🔍 Usr — пользователь;
  • 🔍 Context — стек вызовов в коде конфигурации;
  • 🔍 Descr — текст исключения;
  • 🔍 WaitConnections в TTIMEOUT — номера соединений, которые держали блокировку.

По WaitConnections находите в том же интервале событие с этим номером соединения — так видно, чей код удерживал данные.

Блокировки и ошибки на стороне СУБД

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

Два вида блокировок

Платформа работает в автоматическом или управляемом режиме блокировок. Режим виден в Конфигураторе в свойствах корня конфигурации, параметр «Режим управления блокировкой данных». Типовые конфигурации на 8.3 работают в управляемом режиме.

  • 🔐 Управляемые блокировки ставит платформа 1С. Их ожидание видно в ТЖ событиями TLOCK, TTIMEOUT, TDEADLOCK.
  • 🗄️ Блокировки СУБД ставит сама СУБД. Их видно средствами MS SQL Server или PostgreSQL.

Кто кого блокирует в MS SQL Server

SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

Кто кого блокирует в PostgreSQL

SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

Номер сеанса СУБД связывается с сеансом 1С через консоль кластера: в списке сеансов есть колонки с соединением и номером процесса СУБД. Так выясняется пользователь и операция.

Что делать с найденной блокировкой

  1. Выясните, что за операция держит данные и сколько ей осталось. Если это закрытие месяца, часто проще дождаться.
  2. Если сеанс завис, завершите его через консоль администрирования кластера. Пользователь потеряет несохранённые данные этого сеанса — предупредите его.
  3. Перенесите тяжёлые регламентные операции (обмены, перепроведение, пересчёт) на нерабочее время.
  4. Повторяющиеся конфликты на одном и том же документе — повод отдать программисту стек из Context: обычно транзакция в коде слишком длинная.

Не завершайте процессы СУБД напрямую и не останавливайте службу сервера 1С в рабочее время: оборвутся сеансы всех пользователей, а незавершённые транзакции откатятся.

Тестирование и исправление информационной базы

Битые ссылки, <Объект не найден> в документах, расхождения итогов регистров и ошибки чтения таблиц лечатся встроенным механизмом проверки.

Перед запуском

  • 💾 Сделайте резервную копию: выгрузку .dt через Конфигуратор или копию средствами СУБД.
  • 🚪 Отключите пользователей и регламентные задания: режим требует монопольного доступа к базе.
  • ⏱️ Заложите время. На базе в десятки гигабайт проверка идёт часами.

Запуск

Откройте Конфигуратор и выберите Администрирование → Тестирование и исправление. Отметьте нужные пункты:

ПунктЧто делаетКогда нужен
Реиндексация таблицперестраивает индексыошибки чтения, медленный поиск
Проверка логической целостностиищет несоответствия в служебных структурахпосле аварийного отключения
Проверка ссылочной целостностинаходит ссылки на несуществующие объекты<Объект не найден>
Пересчёт итоговпересчитывает итоги регистроврасхождение отчётов и движений
Сжатие таблицуменьшает файловую базуфайловая база сильно выросла

Для битых ссылок выберите действие. Безопасный вариант — «Создавать объекты»: платформа создаст пометки-заглушки, и вы увидите, какие документы ссылались на потерянный элемент. Режим «Очищать ссылки» удаляет данные из реквизитов без возможности восстановить их иначе как из копии.

Запускайте сначала режим «Тестирование», без исправления, и читайте отчёт. Исправление — вторым проходом, когда понятно, что именно будет изменено.

Если файловая база не открывается

Для файловой базы есть утилита chdbfl.exe в каталоге bin установленной платформы. Она проверяет физическую целостность файла 1Cv8.1CD.

  1. Закройте все сеансы, работающие с базой.
  2. Скопируйте папку базы целиком.
  3. Запустите chdbfl.exe, укажите файл 1Cv8.1CD, сначала без флажка исправления.
  4. Если найдены ошибки, повторите с исправлением на копии и проверьте результат.

Для клиент-серверной базы физическую целостность проверяют средствами СУБД, например DBCC CHECKDB в MS SQL Server.

Проверка конфигурации

Если ошибка в коде появилась после доработки или установки расширения, запустите в Конфигураторе Конфигурация → Проверка конфигурации. Она находит синтаксические ошибки и ссылки на удалённые объекты метаданных до того, как с ними столкнутся пользователи.

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

Как сделать, чтобы ошибки 1С возникали реже

Большую часть повторяющихся сбоев снимает регулярное обслуживание.

Регламент для СУБД

  • 📊 MS SQL Server: еженедельное обновление статистик, перестроение или реорганизация индексов, контроль роста журнала транзакций.
  • 📊 PostgreSQL: VACUUM ANALYZE по расписанию и контроль работы autovacuum.
  • 💾 Резервные копии по расписанию и пробное восстановление хотя бы раз в квартал. Копия, которую ни разу не разворачивали, может оказаться нерабочей.

Обновление платформы и конфигурации

  1. Перед обновлением конфигурации проверьте требования к платформе: в описании релиза указан минимальный номер платформы. Ставьте платформу с номером не ниже требуемого.
  2. Обновляйте сначала тестовую копию базы, проверяйте проведение типовых документов и закрытие месяца.
  3. На сервере держите одну версию платформы для всех клиентов. Разные версии клиента и сервера дают ошибку несоответствия версий при подключении.
  4. Не пропускайте релизы конфигурации: обновляться с большим разрывом приходится цепочкой промежуточных версий.

Окружение

  • 💽 Свободного места на диске с базой и временными файлами — не меньше размера самой большой таблицы.
  • 🛡️ Каталоги баз, кэша и ТЖ стоит исключить из проверки антивирусом в реальном времени: блокировка файла антивирусом даёт ошибки чтения файловой базы.
  • 🌐 Файловую базу по сети открывать не больше чем нескольким пользователям одновременно. При росте числа пользователей — переход на клиент-серверный вариант.
Ежемесячная профилактика
Выполнено: 0 / 5

Если ошибка не уходит

Когда стандартные шаги не помогли, порядок такой:

  1. Проверьте расширения. Отключите их по одному в разделе администрирования конфигурации (Администрирование → Печатные формы, отчеты и обработки → Расширения в БП 3.0) и повторите действие. Ошибка пропала — виновато расширение.
  2. Воспроизведите на копии с отладкой. В копии базы включите отладку и пройдите по стеку из подробного текста ошибки. Так видно, на каких данных падает код.
  3. Сравните с чистой типовой. Если конфигурация доработана, проверьте ту же операцию в демо-базе той же версии. Нет ошибки в типовой — причина в доработке.
  4. Соберите пакет для поддержки. Отчёт об ошибке, фрагмент ТЖ за минуту сбоя, версию платформы и конфигурации, порядок действий для воспроизведения. С таким пакетом разбор занимает часы, а не дни.

Не исправляйте проведённые документы прямой правкой регистров только ради того, чтобы «ушла ошибка». Отчёты станут расходиться с первичкой, и следующую ошибку будет найти ещё сложнее.

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

Можно ли очистить журнал регистрации полностью?
Можно через Администрирование → Настройка журнала регистрации в Конфигураторе, но лучше сократить его с выгрузкой в файл: старые записи понадобятся при расследовании ошибок и спорных изменений.
Сколько места занимает технологический журнал?
Зависит от событий и нагрузки. Только EXCP — мегабайты в сутки, DBMSSQL без отбора на нагруженной базе — десятки гигабайт за несколько часов. Поэтому history и отборы задают всегда.
Почему ошибка есть в рабочей базе, но нет в копии?
Копия работает без нагрузки, без других пользователей и часто на другом компьютере. Значит, причина в блокировках, правах, кэше или окружении, а не в данных.
Нужно ли выгонять пользователей для просмотра журнала регистрации?
Нет. Журнал регистрации и технологический журнал смотрят при работающих пользователях. Монопольный режим нужен для тестирования и исправления базы.
Помогает ли от ошибок обновление платформы?
Если ошибка известна и исправлена в новой сборке — да. Но обновлять стоит только до версии, которую поддерживает текущий релиз конфигурации, и сначала на тестовой копии.