Поиск ошибок в 1С:Предприятии 8.3 — от текста сообщения до техжурнала
Содержание
Искать ошибку в 1С начинают с полного текста сообщения: кнопка «Подробнее» в окне ошибки показывает модуль, номер строки и стек вызовов. Дальше путь зависит от симптома. Ошибка в коде — отладчик Конфигуратора. Ошибка «где-то у кого-то вчера» — журнал регистрации. Падение без внятного текста — технологический журнал и проверка базы. Проблемы с запуском — лицензия или кэш.
Порядок важен: от дешёвых проверок к дорогим. Прочитать сообщение — минута. Включить техжурнал на рабочем сервере — час работы и риск забить диск. Алгоритм ниже одинаков для Бухгалтерии, ЗУП, УТ и любой другой конфигурации: это инструменты платформы 8.3, а не прикладного решения.
Какой инструмент выбрать под симптом
Сначала определите, к какому типу относится проблема. От этого зависит, куда смотреть.
| Симптом | Где искать | Сколько времени |
|---|---|---|
| Окно с текстом ошибки при проведении, печати, открытии формы | Подробный текст ошибки, затем отладчик | 5–30 минут |
| Ошибка была у пользователя, воспроизвести не удаётся | Журнал регистрации | 10–20 минут |
| Программа закрывается без сообщения, «Сеанс отсутствует или удалён» | Технологический журнал, дампы | от часа |
| Ошибки чтения данных, «битые» ссылки, неверные остатки | Тестирование и исправление базы | 15 минут – несколько часов |
| База не запускается, ругается на лицензию | Проверка лицензий и ключа | 10–30 минут |
| Форма открывается криво, после обновления «всё сломалось» у одного пользователя | Очистка кэша | 5 минут |
Шаг 1. Читаем сообщение об ошибке целиком
Пользователь обычно присылает скриншот первой строки: Ошибка при вызове метода контекста. Этого мало. В окне ошибки нажмите «Подробнее» (или ссылку с подробным текстом) и скопируйте всё содержимое.
В подробном тексте ищите три вещи:
- 📍 Место ошибки — строка вида
{Документ.РеализацияТоваровУслуг.МодульОбъекта(245)}. В фигурных скобках — объект и модуль, в круглых — номер строки. - 🧵 Стек вызовов — цепочка модулей снизу вверх. Нижняя строка — откуда всё началось, верхняя — где упало.
- 📝 Текст исключения — что именно не понравилось платформе.
Самые частые тексты и что они значат:
| Текст | Что это обычно значит |
|---|---|
Поле объекта не обнаружено (...) | Обращение к реквизиту, которого нет: опечатка, удалённый реквизит, другая версия конфигурации |
Значение не является значением объектного типа | В переменной Неопределено вместо ссылки — не заполнено поле или не найдена запись |
Деление на 0 | В расчёте нулевая база: количество, курс, коэффициент |
Конфликт блокировок при выполнении транзакции | Два сеанса одновременно меняют одни и те же данные |
Ошибка при выполнении запроса | Ошибка в тексте запроса или проблема на стороне СУБД — смотрите следующие строки |
Если место ошибки указывает на расширение конфигурации или внешнюю обработку, проблема почти наверняка в доработке, а не в типовой конфигурации. Это сразу сужает круг поиска.
В новых версиях платформы окно ошибки предлагает сформировать отчёт об ошибке. Сохраните его: там уже собраны версия платформы, конфигурации, текст и стек. Такой файл удобно передать разработчику.
Последний шаг этапа — воспроизвести ошибку. Запишите точные действия: какой документ, какие поля, какая кнопка. Ошибку, которую нельзя повторить, нельзя и отладить. Тогда переходите к журналу регистрации.
Шаг 2. Отладка и трассировка кода в Конфигураторе
Когда место в коде известно, его смотрят под отладчиком. Отлаживайте на копии базы, а не на рабочей: остановка в точке останова держит транзакцию и блокировки, а остальные пользователи в это время ждут.
Запуск отладки
- Откройте копию базы в Конфигураторе.
- Найдите модуль из подробного текста ошибки. Быстро перейти к строке можно сочетанием
Ctrl+G. - Поставьте точку останова на строку чуть выше места ошибки —
F9. - Запустите 1С:Предприятие в режиме отладки: меню
Отладка → Начать отладкуилиF5. - Повторите действия пользователя. Выполнение остановится на точке останова.
Что делать в точке останова
F10— шаг через строку,F11— шаг с заходом в процедуру. Так вы проходите код построчно и видите, где значение становится неправильным.Shift+F9— «Вычислить выражение». Можно посмотреть содержимое переменной, результат запроса, таблицу значений.- Табло и окно локальных переменных показывают значения без лишних кликов.
- Стек вызовов (
Ctrl+Alt+C) показывает, кто вызвал текущую процедуру.
Остановка по ошибке
Если не знаете, где поставить точку, включите Отладка → Остановка по ошибке. Отладчик сам остановится в момент исключения, даже если ошибка перехвачена в Попытка ... Исключение. Это главный приём для случаев, когда типовой код «глотает» ошибку и выводит невнятное сообщение.
В окне остановки по ошибке можно задать фильтр по тексту. Удобно, когда в базе много «шумных» перехваченных исключений, а вас интересует одно.
Отладка серверного кода
В файловой базе серверный код отлаживается сразу. В клиент-серверном варианте сервер 1С должен быть запущен с разрешённой отладкой: в параметрах службы агента сервера ragent добавляют ключ -debug. Для отладки по протоколу HTTP — ещё -http, и тот же протокол выбирают в параметрах отладки Конфигуратора.
Чтобы поменять параметры службы, её перезапускают. Все сеансы пользователей на этом сервере оборвутся. Делайте это вне рабочего времени и не держите отладку включённой на рабочем сервере постоянно.
Замер производительности
Если «ошибка» — это зависание или многоминутное проведение, вместо точек останова используйте Отладка → Замер производительности. Включите замер, выполните медленное действие, выключите. Конфигуратор покажет строки кода, отсортированные по времени выполнения. Обычно виноваты две-три строки: запрос в цикле или обращение к реквизиту через точку в большой выборке.
Шаг 3. Журнал регистрации: кто, когда и что сделал
Журнал регистрации пишет события базы: входы и выходы, изменения данных, ошибки сеансов. Он нужен, когда ошибка случилась не у вас и повторить её сразу нельзя.
Где открыть:
| Где | Путь |
|---|---|
| Бухгалтерия 3.0, ЗУП 3.1, УТ 11 | Администрирование → Обслуживание → Журнал регистрации |
| Любая конфигурация в режиме «Все функции» | Все функции → Стандартные → Журнал регистрации |
| Конфигуратор | Администрирование → Журнал регистрации |
Режим «Все функции» включается в параметрах программы (Главное меню → Сервис → Параметры, флажок «Отображать команду Все функции»).
Как фильтровать
Без отбора в журнале десятки тысяч строк. Настройте отбор:
- Период — от момента, когда пользователь последний раз работал без ошибки, до звонка в поддержку.
- Пользователь — тот, у кого ошибка.
- Важность — только «Ошибка». Это сразу отсекает 95% записей.
- Событие или метаданные — если известен документ, отберите по нему.
В строке с ошибкой есть комментарий с текстом исключения, компьютер, приложение (тонкий клиент, фоновое задание, веб-клиент) и данные — ссылка на объект. По ней можно открыть тот самый документ.
Ошибки фоновых и регламентных заданий видны только здесь. Если «не загружается курс валют» или «не уходят данные в ЭДО», ищите в журнале события с приложением «Фоновое задание».
Настройка уровня записи
В Конфигураторе: Администрирование → Настройка журнала регистрации. Если стоит «Не регистрировать» или только «Ошибки», история изменений данных потеряна. Для расследований нужен уровень «Регистрировать все события».
Файлы журнала лежат в каталоге базы, в папке 1Cv8Log. Старые журналы можно сократить через ту же настройку, указав дату, до которой удалять записи. Перед этим выгрузите их в файл, если история может понадобиться.
Шаг 4. Технологический журнал для «тихих» падений
Если клиент вылетает без сообщения, а в журнале регистрации пусто, нужен технологический журнал. Он пишет события на уровне платформы: исключения, вызовы СУБД, блокировки, перезапуски процессов.
Настраивается файлом 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="D:\1c_techlog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="PROC"/>
</event>
<property name="all"/>
</log>
<dump create="1" location="D:\1c_dumps" type="0"/>
</config>
Что здесь происходит:
EXCP— исключительные ситуации, в том числе те, что приводят к аварийному завершению.PROC— старт и завершение процессов. Видно, когда и почему перезапустился рабочий процесс.history="24"— хранить 24 часа логов, старые удаляются.<dump>— сохранять дамп при падении. Его отправляют разработчику или в поддержку.
Платформа подхватывает файл без перезапуска, обычно в течение минуты. Для расследования блокировок добавляют события TLOCK, TTIMEOUT, TDEADLOCK, для медленных запросов — DBMSSQL с отбором по длительности.
Технологический журнал без отборов на нагруженном сервере пишет гигабайты в час. Выносите каталог логов на отдельный диск, ставьте отборы по событиям и удаляйте logcfg.xml, как только поймали ошибку.
Логи — текстовые файлы по часам. Ищут в них по времени ошибки, которое знаете из журнала регистрации, или по строке EXCP. Для больших объёмов удобны консольные findstr (Windows) и grep (Linux).
Шаг 5. Проверка целостности базы
Ошибки вида «Нарушена целостность структуры конфигурации», «Объект не найден», неверные остатки после сбоя питания говорят о повреждении данных. Лечат штатным инструментом.
Перед началом:
- Сделайте резервную копию: выгрузку в
.dtили копию каталога файловой базы. Исправление удаляет и меняет данные, откатить его нельзя. - Завершите сеансы пользователей: тестирование требует монопольного доступа.
Запуск: Конфигуратор → Администрирование → Тестирование и исправление. Отметьте нужные проверки:
| Проверка | Когда нужна |
|---|---|
| Реиндексация таблиц | Ошибки индексов, тормоза поиска после сбоя |
| Проверка логической целостности | Общая проверка структуры данных |
| Проверка ссылочной целостности | «Объект не найден», битые ссылки в документах |
| Пересчёт итогов | Остатки в отчётах не сходятся с движениями |
| Сжатие таблиц | Файловая база сильно выросла после удаления данных |
Для битых ссылок выберите действие. «Не изменять» — только посмотреть список. «Создавать объекты» — платформа создаст пустые элементы-заглушки, которые потом найдёте и исправите вручную. Удалять ссылки безопаснее только когда вы точно понимаете, что теряете.
Для файловой базы есть ещё утилита физической проверки chdbfl.exe в каталоге bin платформы. Она работает с закрытой базой и проверяет сам файл 1Cv8.1CD. Запускают её, если Конфигуратор не может открыть базу
.
Отдельно проверьте сам код: Конфигурация → Проверка конфигурации. Она находит синтаксические ошибки, ссылки на несуществующие объекты и неиспользуемые процедуры. Полезно после ручных доработок и объединения конфигураций.
В клиент-серверной базе часть проблем лечится средствами СУБД: проверка базы в SQL Server или PostgreSQL. Этим занимается администратор СУБД.
Шаг 6. Ошибки лицензирования
Если база не запускается с сообщением Не обнаружена лицензия для использования программного продукта, ищите не в коде, а в лицензиях. Без лицензии платформа базу не запустит (кроме учебной версии).
Что проверить по порядку:
- Программная лицензия. Файлы
.licлежат вC:\ProgramData\1C\licenses\. Если папка пуста после переустановки Windows или замены оборудования, лицензию активируют заново пин-кодом из комплекта. - Аппаратный ключ. Для USB-ключей должен работать менеджер лицензий HASP. Его веб-панель открывается в браузере по адресу
http://localhost:1947: там видно, найден ли ключ и сколько мест занято. - Число занятых лицензий. В клиент-серверном варианте лицензии выдаёт сервер. Список сеансов с лицензиями показывает команда
rac session list --licensesили консоль кластера. - Зависшие сеансы. Пользователь закрыл программу аварийно, а сеанс остался и держит лицензию. Его видно в консоли кластера.
Принудительное завершение сеанса в консоли кластера оборвёт работу пользователя без сохранения. Уточните, что сеанс действительно брошен.
Какую лицензию получил текущий сеанс, видно в окне «О программе» (открывается из главного меню). Если там указан не тот ключ, который вы ждёте, клиент подхватил лицензию с другого компьютера сети.
Шаг 7. Кэш и временные файлы
Когда ошибка есть у одного пользователя, а у других нет, первым делом чистят кэш. Платформа хранит на клиенте метаданные конфигурации и настройки. После обновления или сбоя они могут не совпасть с базой.
Самый простой способ — запуск с ключом /ClearCache. В окне запуска выберите базу, нажмите «Изменить» и на последнем шаге впишите ключ в поле дополнительных параметров запуска. Или из командной строки:
"C:\Program Files\1cv8\common\1cestart.exe" /ClearCache
Ручная очистка надёжнее. Закройте все сеансы 1С на компьютере и удалите содержимое двух папок:
%APPDATA%\1C\1cv8
%LOCALAPPDATA%\1C\1cv8
Удаляйте только подпапки с длинными именами-идентификаторами. Файлы .v8i (список баз) и настройки рядом с ними не трогайте, иначе пользователь потеряет список информационных баз.
Серверный кэш — папки snccntx... в каталоге кластера srvinfo. Его очищают только при остановленной службе сервера 1С.
Остановка службы сервера 1С завершает работу всех пользователей всех баз на этом сервере. Планируйте на нерабочее время и предупредите людей заранее.
Временные файлы Windows (%TEMP%) тоже стоит почистить, если ошибка связана с печатью, выгрузкой в Excel или загрузкой файлов: там остаются заблокированные копии.