Откуда берутся сбои в 1С:Предприятии 8.3 и как найти их причину
Содержание
Чтобы убрать ошибку 1С, сначала определите её тип по тексту сообщения, затем найдите событие в журнале регистрации (Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и ЗУП 3.1) и только после этого исправляйте. Клиентские сбои чаще всего лечатся очисткой кэша, ошибки данных — тестированием и исправлением базы, конфликты блокировок — разбором технологического журнала и запросов к СУБД.
Методы исправления сильно отличаются по риску. Очистка кэша и перезапуск сеанса безопасны. Тестирование базы требует монопольного режима и свежей копии. Правка кода или настроек сервера — уже работа администратора. Поэтому диагностика всегда идёт первой: она экономит лишние действия и не даёт «починить» то, что не ломалось.
Классификация сбоев и первичный осмотр
Любая ошибка в 1С попадает в одну из нескольких групп. По группе сразу понятно, кто её устраняет и с какого инструмента начинать.
| Группа | Типичный текст | Где искать причину | Кто исправляет |
|---|---|---|---|
| 🖥️ Клиент и кэш | Ошибка формата потока, зависание при открытии формы | локальный кэш, профиль пользователя | пользователь или админ |
| 🧩 Код конфигурации | Поле объекта не обнаружено, Значение не является значением объектного типа, Ошибка при вызове метода контекста | модуль из подробного текста ошибки | программист |
| 🗂️ Данные | <Объект не найден>, расхождения в отчётах, документ не проводится | журнал регистрации, тестирование базы | админ, бухгалтер |
| 🔒 Блокировки | Конфликт блокировок при выполнении транзакции, Превышено максимальное время ожидания предоставления блокировки | технологический журнал, СУБД | админ |
| 🗄️ СУБД и сервер | Ошибка СУБД, Недостаточно памяти, Сервер 1С:Предприятия не обнаружен | логи СУБД, консоль кластера, сеть | админ |
| 🔑 Лицензии | Не обнаружена лицензия для использования программы | менеджер лицензий, ключи | админ |
Что сделать в первые пять минут
- Скопируйте полный текст сообщения. В окне ошибки откройте подробный текст: там есть имя модуля, номер строки и стек вызовов.
- Зафиксируйте время сбоя с точностью до минуты, имя пользователя и действие (провёл документ, сформировал отчёт, запустил обмен).
- Проверьте, повторяется ли ошибка у другого пользователя и на другом компьютере. Если нет — проблема на клиенте.
- Проверьте, повторяется ли она в копии базы. Если в копии всё в порядке, ищите причину в окружении: сервер, сеть, права.
- Если в окне ошибки есть команда формирования отчёта об ошибке, сохраните его. Отчёт содержит версию платформы, конфигурации и стек — его ждёт любой специалист поддержки.
Ошибка, которая воспроизводится у всех и в копии базы, почти всегда связана с кодом или данными. Ошибка «только у Иванова» — с его кэшем, правами или настройками.
Клиентский уровень: очистка кэша
Кэш конфигурации на клиенте хранится в папках с именами-идентификаторами внутри %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. Быстрый способ — запустить 1С с параметром /ClearCache:
"C:\Program Files\1cv8\common\1cestart.exe" /ClearCache
Второй вариант — закрыть все сеансы 1С на компьютере и удалить эти папки вручную. Список баз в стартовом окне при этом сохраняется, потому что он лежит в файле ibases.v8i, а не в кэше.
Журнал регистрации: где искать след ошибки
Журнал регистрации — первый инструмент после текста сообщения. Он фиксирует, кто, когда и с каким объектом работал, и записывает ошибки с уровнем «Ошибка».
Как открыть журнал
| Где | Путь |
|---|---|
| БП 3.0, ЗУП 3.1, УТ 11 | Администрирование → Обслуживание → Журнал регистрации |
| Конфигуратор | Администрирование → Журнал регистрации |
| Любая конфигурация в режиме «Все функции» | Стандартные → Журнал регистрации |
Режим «Все функции» включается в параметрах программы (меню с шестерёнкой в заголовке окна). Он нужен, если в конфигурации нет пункта администрирования.
Как отфильтровать нужное
- Установите отбор по периоду: 10–15 минут вокруг времени сбоя.
- В отборе по уровню оставьте только «Ошибка» и «Предупреждение».
- Добавьте отбор по пользователю, если ошибка была у конкретного человека.
- Откройте найденную запись. В поле комментария лежит тот же текст, что видел пользователь, а в поле данных — ссылка на объект.
Для ошибок проведения смотрите события «Данные. Проведение» и «Данные. Изменение» рядом с ошибкой: по ним видно, какой документ и кто трогал перед сбоем.
Настройка и размер журнала
Уровень записи меняют в Конфигураторе: Администрирование → Настройка журнала регистрации. Там же журнал можно разделить на периоды и сократить, выгрузив старые записи в файл.
Файлы журнала лежат в папке 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С через консоль кластера: в списке сеансов есть колонки с соединением и номером процесса СУБД. Так выясняется пользователь и операция.
Что делать с найденной блокировкой
- Выясните, что за операция держит данные и сколько ей осталось. Если это закрытие месяца, часто проще дождаться.
- Если сеанс завис, завершите его через консоль администрирования кластера. Пользователь потеряет несохранённые данные этого сеанса — предупредите его.
- Перенесите тяжёлые регламентные операции (обмены, перепроведение, пересчёт) на нерабочее время.
- Повторяющиеся конфликты на одном и том же документе — повод отдать программисту стек из
Context: обычно транзакция в коде слишком длинная.
Не завершайте процессы СУБД напрямую и не останавливайте службу сервера 1С в рабочее время: оборвутся сеансы всех пользователей, а незавершённые транзакции откатятся.
Тестирование и исправление информационной базы
Битые ссылки, <Объект не найден> в документах, расхождения итогов регистров и ошибки чтения таблиц лечатся встроенным механизмом проверки.
Перед запуском
- 💾 Сделайте резервную копию: выгрузку
.dtчерез Конфигуратор или копию средствами СУБД. - 🚪 Отключите пользователей и регламентные задания: режим требует монопольного доступа к базе.
- ⏱️ Заложите время. На базе в десятки гигабайт проверка идёт часами.
Запуск
Откройте Конфигуратор и выберите Администрирование → Тестирование и исправление. Отметьте нужные пункты:
| Пункт | Что делает | Когда нужен |
|---|---|---|
| Реиндексация таблиц | перестраивает индексы | ошибки чтения, медленный поиск |
| Проверка логической целостности | ищет несоответствия в служебных структурах | после аварийного отключения |
| Проверка ссылочной целостности | находит ссылки на несуществующие объекты | <Объект не найден> |
| Пересчёт итогов | пересчитывает итоги регистров | расхождение отчётов и движений |
| Сжатие таблиц | уменьшает файловую базу | файловая база сильно выросла |
Для битых ссылок выберите действие. Безопасный вариант — «Создавать объекты»: платформа создаст пометки-заглушки, и вы увидите, какие документы ссылались на потерянный элемент. Режим «Очищать ссылки» удаляет данные из реквизитов без возможности восстановить их иначе как из копии.
Запускайте сначала режим «Тестирование», без исправления, и читайте отчёт. Исправление — вторым проходом, когда понятно, что именно будет изменено.
Если файловая база не открывается
Для файловой базы есть утилита chdbfl.exe в каталоге bin установленной платформы. Она проверяет физическую целостность файла 1Cv8.1CD.
- Закройте все сеансы, работающие с базой.
- Скопируйте папку базы целиком.
- Запустите
chdbfl.exe, укажите файл1Cv8.1CD, сначала без флажка исправления. - Если найдены ошибки, повторите с исправлением на копии и проверьте результат.
Для клиент-серверной базы физическую целостность проверяют средствами СУБД, например DBCC CHECKDB в MS SQL Server.
Проверка конфигурации
Если ошибка в коде появилась после доработки или установки расширения, запустите в Конфигураторе Конфигурация → Проверка конфигурации. Она находит синтаксические ошибки и ссылки на удалённые объекты метаданных до того, как с ними столкнутся пользователи.
Как сделать, чтобы ошибки 1С возникали реже
Большую часть повторяющихся сбоев снимает регулярное обслуживание.
Регламент для СУБД
- 📊 MS SQL Server: еженедельное обновление статистик, перестроение или реорганизация индексов, контроль роста журнала транзакций.
- 📊 PostgreSQL:
VACUUM ANALYZEпо расписанию и контроль работы autovacuum. - 💾 Резервные копии по расписанию и пробное восстановление хотя бы раз в квартал. Копия, которую ни разу не разворачивали, может оказаться нерабочей.
Обновление платформы и конфигурации
- Перед обновлением конфигурации проверьте требования к платформе: в описании релиза указан минимальный номер платформы. Ставьте платформу с номером не ниже требуемого.
- Обновляйте сначала тестовую копию базы, проверяйте проведение типовых документов и закрытие месяца.
- На сервере держите одну версию платформы для всех клиентов. Разные версии клиента и сервера дают ошибку несоответствия версий при подключении.
- Не пропускайте релизы конфигурации: обновляться с большим разрывом приходится цепочкой промежуточных версий.
Окружение
- 💽 Свободного места на диске с базой и временными файлами — не меньше размера самой большой таблицы.
- 🛡️ Каталоги баз, кэша и ТЖ стоит исключить из проверки антивирусом в реальном времени: блокировка файла антивирусом даёт ошибки чтения файловой базы.
- 🌐 Файловую базу по сети открывать не больше чем нескольким пользователям одновременно. При росте числа пользователей — переход на клиент-серверный вариант.
Если ошибка не уходит
Когда стандартные шаги не помогли, порядок такой:
- Проверьте расширения. Отключите их по одному в разделе администрирования конфигурации (
Администрирование → Печатные формы, отчеты и обработки → Расширенияв БП 3.0) и повторите действие. Ошибка пропала — виновато расширение. - Воспроизведите на копии с отладкой. В копии базы включите отладку и пройдите по стеку из подробного текста ошибки. Так видно, на каких данных падает код.
- Сравните с чистой типовой. Если конфигурация доработана, проверьте ту же операцию в демо-базе той же версии. Нет ошибки в типовой — причина в доработке.
- Соберите пакет для поддержки. Отчёт об ошибке, фрагмент ТЖ за минуту сбоя, версию платформы и конфигурации, порядок действий для воспроизведения. С таким пакетом разбор занимает часы, а не дни.
Не исправляйте проведённые документы прямой правкой регистров только ради того, чтобы «ушла ошибка». Отчёты станут расходиться с первичкой, и следующую ошибку будет найти ещё сложнее.
Частые вопросы
Можно ли очистить журнал регистрации полностью?
Администрирование → Настройка журнала регистрации в Конфигураторе, но лучше сократить его с выгрузкой в файл: старые записи понадобятся при расследовании ошибок и спорных изменений.