Ошибка в 1С: от текста сообщения до причины и исправления
Содержание
Чтобы обработать ошибку в 1С, начните с полного текста сообщения: нажмите в окне ошибки «Подробнее» и скопируйте всё, что там написано, включая модуль и номер строки. Дальше по тексту определяете слой, где случился сбой: код конфигурации, данные, база и СУБД, сервер или сеть. Для каждого слоя свой инструмент: журнал регистрации, технологический журнал, тестирование и исправление базы, консоль кластера.
Ниже порядок, по которому работают специалисты сопровождения на платформе 8.3. Он общий для всех конфигураций: БП 3.0, ЗУП 3.1, УТ 11 и других. Различаются только пути к журналу регистрации внутри программы, их я указываю отдельно.
1. С чего начать: прочитать и классифицировать сообщение об ошибке
Первое окно с ошибкой почти всегда показывает только верхнюю строку. Вся полезная информация спрятана глубже.
Что сохранить сразу
- Нажмите «Подробнее» (или ссылку «Подробный текст ошибки») в окне сообщения.
- Скопируйте текст целиком:
Ctrl+A,Ctrl+C. Скриншот хуже, его нельзя искать по словам. - Запишите, что делали: какой документ, какая кнопка, какая дата, под каким пользователем.
- Проверьте, повторяется ли ошибка у другого пользователя и на другом компьютере.
Начиная с релизов платформы 8.3.17 в окне ошибки есть возможность сформировать отчёт об ошибке. Он сохраняется архивом с описанием среды и текстом. Такой архив удобно отправить программисту или на линию поддержки.
Как читать текст
В подробном тексте обычно есть три части:
- 📍 Место:
{Документ.РеализацияТоваровУслуг.МодульОбъекта(245)}— объект, модуль и номер строки. - 🧩 Суть:
Поле объекта не обнаружено (Склад)илиЗначение не является значением объектного типа. - 🗄 Нижний уровень (если есть):
Ошибка СУБД:,Microsoft SQL Server Native Client,server_addr=...,descr=....
По этим частям ошибка сразу попадает в одну из групп:
| Признак в тексте | Слой | Куда смотреть дальше |
|---|---|---|
| Модуль и номер строки, без «Ошибка СУБД» | Код конфигурации или данные | Журнал регистрации, отладка |
Ошибка СУБД, Ошибка при выполнении операции с информационной базой | База данных | Тестирование базы, журнал СУБД |
Конфликт блокировок, Превышено максимальное время ожидания предоставления блокировки | Параллельная работа | Технологический журнал |
Сервер 1С:Предприятия не обнаружен, Ошибка соединения с сервером | Сервер и сеть | Консоль кластера, порты |
Неверный формат потока, Ошибка формата потока | Кэш клиента или повреждённые данные | Очистка кэша |
Нарушение прав доступа | Права пользователя | Профили групп доступа |
Если в тексте есть модуль общего модуля типовой конфигурации, а база не дорабатывалась, ищите текст ошибки вместе с номером релиза. Типовые ошибки релизов обычно уже описаны и исправлены в следующем обновлении.
2. Журнал регистрации и технологический журнал: где искать следы
Журнал регистрации
Журнал регистрации пишет каждая база по умолчанию. Он показывает, кто, когда и с каким объектом работал, и фиксирует ошибки с уровнем «Ошибка».
Где открыть:
| Где | Путь |
|---|---|
| БП 3.0, ЗУП 3.1, УТ 11 | Администрирование → Обслуживание → Журнал регистрации |
| Конфигуратор | Администрирование → Журнал регистрации |
| Любая конфигурация | Все функции → Стандартные → Журнал регистрации |
Чтобы быстро найти нужную запись:
- Откройте отбор журнала.
- Укажите интервал: 10–15 минут вокруг момента ошибки.
- Отметьте уровень важности «Ошибка».
- При необходимости ограничьте пользователя.
- Откройте запись двойным щелчком: в поле комментария будет полный текст ошибки.
Если ошибка у пользователя «пропала», а он не скопировал текст, журнал регистрации почти всегда её сохранил. Это первое место для расследования задним числом.
Журнал хранится в каталоге базы, в папке 1Cv8Log. Если файлов там много, журнал открывается долго. Срок хранения задают в Конфигураторе, в настройках журнала регистрации.
Технологический журнал
Журнал регистрации видит бизнес-события. Технологический журнал (ТЖ) видит работу самой платформы: исключения, запросы к СУБД, блокировки, вызовы сервера. Он нужен, когда ошибка плавающая или текст непонятен.
ТЖ включается файлом 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="C:\v8logs" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="TLOCK"/>
</event>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
Что значат события:
- ❗
EXCP— исключения платформы, включая те, что не дошли до пользователя. - 🔒
TLOCK— управляемые блокировки. - ⏳
TTIMEOUT— превышение времени ожидания блокировки. - 💥
TDEADLOCK— взаимоблокировки. - 🗄
DBMSSQL,DBPOSTGRS— запросы к MS SQL и PostgreSQL. Включайте их коротко: лог растёт очень быстро.
history="24" означает хранить логи 24 часа. Логи ТЖ пишутся текстовыми файлами по часам, их удобно искать через findstr или любой редактор.
Не оставляйте полный ТЖ включённым надолго. Событие DBMSSQL с property name="all" на рабочей базе может занять десятки гигабайт за день и затормозить сервер. Собрали данные — удалите или переименуйте logcfg.xml.
3. Типовые ошибки выполнения и как их устранить
Ошибки выполнения — это сбои в коде или данных. Их видно по модулю и номеру строки.
Очистка кэша клиента
Кэш лечит много «странных» ошибок после обновления. Два способа:
- Добавить в строку запуска ключ
/ClearCache. В окне запуска: «Изменить» → последний шаг → поле «Дополнительные параметры запуска». - Закрыть 1С и удалить папки с GUID-именами из
%APPDATA%\1C\1cv8и%LOCALAPPDATA%\1C\1cv8.
Второй способ сбрасывает кэш всех баз на компьютере. Список баз хранится отдельно в файле ibases.v8i и не пострадает.
Отладка для программиста
Если ошибка в доработке, номер строки из текста ведёт прямо к месту. В Конфигураторе откройте модуль, перейдите к строке (Ctrl+G), поставьте точку останова и запустите отладку. Для серверного кода в клиент-серверной базе отладка на сервере должна быть разрешена в настройках сервера.
4. Обработка ошибок в коде: Попытка–Исключение
Если «обработать ошибку» — это задача программиста, речь о конструкции Попытка … Исключение. Она перехватывает исключение, не даёт прервать весь процесс и позволяет сохранить подробности.
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ИнфоОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("Загрузка документов",
УровеньЖурналаРегистрации.Ошибка,
ДокументОбъект.Метаданные(),
ДокументОбъект.Ссылка,
ПодробноеПредставлениеОшибки(ИнфоОбОшибке));
Сообщить("Документ не проведён: " + КраткоеПредставлениеОшибки(ИнфоОбОшибке));
КонецПопытки;
Правила, которые экономят время при разборе:
- 📝 В журнал пишите
ПодробноеПредставлениеОшибки: там стек вызовов и номера строк. Пользователю показывайте краткое. - 🚫 Не оставляйте пустой блок
Исключение … КонецПопытки. Ошибка исчезнет без следа, а данные останутся неполными. - 🔁 Внутри транзакции после исключения транзакцию нужно отменить (
ОтменитьТранзакцию()) или пробросить исключение дальше черезВызватьИсключение;. Иначе следующая запись упадёт с ошибкой «В данной транзакции уже происходили ошибки». - 🎯 Попытку ставьте вокруг одной рискованной операции, а не вокруг всей процедуры.
5. Ошибки базы данных и СУБД
Признак — слова Ошибка СУБД или Ошибка при выполнении операции с информационной базой в тексте. Порядок действий зависит от типа базы.
Файловая база
- Попросите всех выйти из базы.
- Сделайте копию каталога базы (файл
1Cv8.1CD) или выгрузку в.dt. - Откройте Конфигуратор:
Администрирование → Тестирование и исправление. - Начните с режима «Проверка логической целостности информационной базы» без исправлений, только «Тестирование».
- Если найдены ошибки, повторите с режимом «Тестирование и исправление».
Для физических повреждений файла есть утилита chdbfl.exe в каталоге bin платформы. Она проверяет сам файл 1Cv8.1CD, база при этом должна быть закрыта.
Перед «Тестированием и исправлением» обязательно сделайте копию базы. Режим может удалить битые ссылки или заменить их на объекты-заглушки. Отменить это нельзя. Тестирование и исправление требует монопольного доступа: все пользователи должны выйти.
Клиент-серверная база
Здесь первоисточник — сама СУБД. Текст после descr= в сообщении обычно содержит исходную ошибку MS SQL или PostgreSQL.
| Что в тексте | Вероятная причина | Что проверить |
|---|---|---|
| Нет места, переполнен журнал транзакций | Закончился диск | Свободное место на сервере СУБД, модель восстановления, бэкап журнала |
| Таймаут, ожидание блокировки | Долгие запросы или блокировки | ТЖ с TLOCK, TTIMEOUT; планы запросов |
| Ошибка проверки целостности, повреждение страниц | Сбой диска или питания | Проверка базы средствами СУБД, восстановление из копии |
| Отказ в доступе к базе | Пароль или права пользователя СУБД | Параметры базы в консоли кластера |
Тестирование и исправление из Конфигуратора работает и для серверной базы, но на большой базе оно идёт часами. Сначала проверьте целостность средствами СУБД.
6. Сбои связи клиента с сервером и сеть
Схема соединения: клиент обращается к агенту сервера (порт 1540), затем к менеджеру кластера (1541) и рабочим процессам. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию 1560:1591. Если хоть один порт закрыт, клиент получает ошибку соединения.
Типовые тексты и проверки:
- 🌐
Сервер 1С:Предприятия не обнаружен— проверьте, запущена ли служба агента сервера, правильно ли указано имя сервера, открыт ли порт1540. - 🔌
Ошибка соединения с сервером 1С:Предприятия— проверьте порты1541и диапазон рабочих процессов в брандмауэре. Имя сервера должно разрешаться с клиента в правильный IP. - 🧷
Сеанс отсутствует или удалён— сеанс завершил администратор или перезапустился рабочий процесс. Перезайдите в базу. - ⚙️ Версия клиента не совпадает с сервером — на клиенте и на сервере должна стоять одинаковая версия платформы.
Проверка порта с клиента в PowerShell:
Test-NetConnection -ComputerName srv1c -Port 1541
Список сеансов из командной строки через сервер администрирования:
rac cluster list
rac session list --cluster=<id_кластера>
Если rac подключается к серверу, а клиент нет, проблема в портах рабочих процессов или в разрешении имени сервера.
Перезапуск службы агента сервера и очистка серверного кэша (папки snccntx* в каталоге srvinfo) обрывают сеансы всех пользователей. Делайте это вне рабочего времени или после того, как все вышли, и сначала остановите службу.
7. Профилактика: как реже сталкиваться с ошибками
Большую часть повторяющихся ошибок закрывает регулярное обслуживание.
Отдельно про обновления. Ошибки вида Поле объекта не обнаружено массово появляются после обновления, если не обновили внешние обработки и печатные формы. Ведите их список и проверяйте каждую после смены релиза.
Частые вопросы
Где найти текст ошибки, если пользователь закрыл окно?
Почему ошибка появляется только у одного пользователя?
Можно ли включить технологический журнал без перезапуска сервера?
logcfg.xml примерно в течение минуты. Так же и выключение: удалите или переименуйте файл.Что делать, если ошибка появилась сразу после обновления?
/ClearCache, проверьте, что обновление структуры базы данных прошло до конца, и проверьте внешние обработки. Если ошибка в типовом модуле, найдите её текст вместе с номером релиза.