Поиск ошибок в 1С:Предприятии 8.3 — от текста сообщения до техжурнала

· 11 мин

Содержание

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

Порядок важен: от дешёвых проверок к дорогим. Прочитать сообщение — минута. Включить техжурнал на рабочем сервере — час работы и риск забить диск. Алгоритм ниже одинаков для Бухгалтерии, ЗУП, УТ и любой другой конфигурации: это инструменты платформы 8.3, а не прикладного решения.

Какой инструмент выбрать под симптом

Сначала определите, к какому типу относится проблема. От этого зависит, куда смотреть.

СимптомГде искатьСколько времени
Окно с текстом ошибки при проведении, печати, открытии формыПодробный текст ошибки, затем отладчик5–30 минут
Ошибка была у пользователя, воспроизвести не удаётсяЖурнал регистрации10–20 минут
Программа закрывается без сообщения, «Сеанс отсутствует или удалён»Технологический журнал, дампыот часа
Ошибки чтения данных, «битые» ссылки, неверные остаткиТестирование и исправление базы15 минут – несколько часов
База не запускается, ругается на лицензиюПроверка лицензий и ключа10–30 минут
Форма открывается криво, после обновления «всё сломалось» у одного пользователяОчистка кэша5 минут
Диагностика: выберите симптом

Шаг 1. Читаем сообщение об ошибке целиком

Пользователь обычно присылает скриншот первой строки: Ошибка при вызове метода контекста. Этого мало. В окне ошибки нажмите «Подробнее» (или ссылку с подробным текстом) и скопируйте всё содержимое.

В подробном тексте ищите три вещи:

  • 📍 Место ошибки — строка вида {Документ.РеализацияТоваровУслуг.МодульОбъекта(245)}. В фигурных скобках — объект и модуль, в круглых — номер строки.
  • 🧵 Стек вызовов — цепочка модулей снизу вверх. Нижняя строка — откуда всё началось, верхняя — где упало.
  • 📝 Текст исключения — что именно не понравилось платформе.

Самые частые тексты и что они значат:

ТекстЧто это обычно значит
Поле объекта не обнаружено (...)Обращение к реквизиту, которого нет: опечатка, удалённый реквизит, другая версия конфигурации
Значение не является значением объектного типаВ переменной Неопределено вместо ссылки — не заполнено поле или не найдена запись
Деление на 0В расчёте нулевая база: количество, курс, коэффициент
Конфликт блокировок при выполнении транзакцииДва сеанса одновременно меняют одни и те же данные
Ошибка при выполнении запросаОшибка в тексте запроса или проблема на стороне СУБД — смотрите следующие строки

Если место ошибки указывает на расширение конфигурации или внешнюю обработку, проблема почти наверняка в доработке, а не в типовой конфигурации. Это сразу сужает круг поиска.

В новых версиях платформы окно ошибки предлагает сформировать отчёт об ошибке. Сохраните его: там уже собраны версия платформы, конфигурации, текст и стек. Такой файл удобно передать разработчику.

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

Шаг 2. Отладка и трассировка кода в Конфигураторе

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

Запуск отладки

  1. Откройте копию базы в Конфигураторе.
  2. Найдите модуль из подробного текста ошибки. Быстро перейти к строке можно сочетанием Ctrl+G.
  3. Поставьте точку останова на строку чуть выше места ошибки — F9.
  4. Запустите 1С:Предприятие в режиме отладки: меню Отладка → Начать отладку или F5.
  5. Повторите действия пользователя. Выполнение остановится на точке останова.

Что делать в точке останова

  • F10 — шаг через строку, F11 — шаг с заходом в процедуру. Так вы проходите код построчно и видите, где значение становится неправильным.
  • Shift+F9 — «Вычислить выражение». Можно посмотреть содержимое переменной, результат запроса, таблицу значений.
  • Табло и окно локальных переменных показывают значения без лишних кликов.
  • Стек вызовов (Ctrl+Alt+C) показывает, кто вызвал текущую процедуру.

Остановка по ошибке

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

В окне остановки по ошибке можно задать фильтр по тексту. Удобно, когда в базе много «шумных» перехваченных исключений, а вас интересует одно.

Отладка серверного кода

В файловой базе серверный код отлаживается сразу. В клиент-серверном варианте сервер 1С должен быть запущен с разрешённой отладкой: в параметрах службы агента сервера ragent добавляют ключ -debug. Для отладки по протоколу HTTP — ещё -http, и тот же протокол выбирают в параметрах отладки Конфигуратора.

Чтобы поменять параметры службы, её перезапускают. Все сеансы пользователей на этом сервере оборвутся. Делайте это вне рабочего времени и не держите отладку включённой на рабочем сервере постоянно.

Замер производительности

Если «ошибка» — это зависание или многоминутное проведение, вместо точек останова используйте Отладка → Замер производительности. Включите замер, выполните медленное действие, выключите. Конфигуратор покажет строки кода, отсортированные по времени выполнения. Обычно виноваты две-три строки: запрос в цикле или обращение к реквизиту через точку в большой выборке.

Шаг 3. Журнал регистрации: кто, когда и что сделал

Журнал регистрации пишет события базы: входы и выходы, изменения данных, ошибки сеансов. Он нужен, когда ошибка случилась не у вас и повторить её сразу нельзя.

Где открыть:

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

Режим «Все функции» включается в параметрах программы (Главное меню → Сервис → Параметры, флажок «Отображать команду Все функции»).

Как фильтровать

Без отбора в журнале десятки тысяч строк. Настройте отбор:

  1. Период — от момента, когда пользователь последний раз работал без ошибки, до звонка в поддержку.
  2. Пользователь — тот, у кого ошибка.
  3. Важность — только «Ошибка». Это сразу отсекает 95% записей.
  4. Событие или метаданные — если известен документ, отберите по нему.

В строке с ошибкой есть комментарий с текстом исключения, компьютер, приложение (тонкий клиент, фоновое задание, веб-клиент) и данные — ссылка на объект. По ней можно открыть тот самый документ.

Ошибки фоновых и регламентных заданий видны только здесь. Если «не загружается курс валют» или «не уходят данные в ЭДО», ищите в журнале события с приложением «Фоновое задание».

Настройка уровня записи

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

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

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

Перед началом:

  1. Сделайте резервную копию: выгрузку в .dt или копию каталога файловой базы. Исправление удаляет и меняет данные, откатить его нельзя.
  2. Завершите сеансы пользователей: тестирование требует монопольного доступа.

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

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

Для битых ссылок выберите действие. «Не изменять» — только посмотреть список. «Создавать объекты» — платформа создаст пустые элементы-заглушки, которые потом найдёте и исправите вручную. Удалять ссылки безопаснее только когда вы точно понимаете, что теряете.

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

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

В клиент-серверной базе часть проблем лечится средствами СУБД: проверка базы в SQL Server или PostgreSQL. Этим занимается администратор СУБД.

Шаг 6. Ошибки лицензирования

Если база не запускается с сообщением Не обнаружена лицензия для использования программного продукта, ищите не в коде, а в лицензиях. Без лицензии платформа базу не запустит (кроме учебной версии).

Что проверить по порядку:

  1. Программная лицензия. Файлы .lic лежат в C:\ProgramData\1C\licenses\. Если папка пуста после переустановки Windows или замены оборудования, лицензию активируют заново пин-кодом из комплекта.
  2. Аппаратный ключ. Для USB-ключей должен работать менеджер лицензий HASP. Его веб-панель открывается в браузере по адресу http://localhost:1947: там видно, найден ли ключ и сколько мест занято.
  3. Число занятых лицензий. В клиент-серверном варианте лицензии выдаёт сервер. Список сеансов с лицензиями показывает команда rac session list --licenses или консоль кластера.
  4. Зависшие сеансы. Пользователь закрыл программу аварийно, а сеанс остался и держит лицензию. Его видно в консоли кластера.

Принудительное завершение сеанса в консоли кластера оборвёт работу пользователя без сохранения. Уточните, что сеанс действительно брошен.

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

Шаг 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 или загрузкой файлов: там остаются заблокированные копии.

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

Почему ошибка есть в рабочей базе, а в копии не повторяется?
Копия отличается окружением: другим пользователем с другими правами, кэшем, версией клиента, данными на дату. Повторите действия под тем же пользователем и на той же дате документа.
Можно ли отлаживать код, если конфигурация на поддержке без возможности изменения?
Да. Точки останова не меняют конфигурацию, их можно ставить в любом модуле. Для изменения кода конфигурацию снимают с замка или делают доработку в расширении.
Где посмотреть ошибки регламентных заданий?
В журнале регистрации с отбором по важности «Ошибка» и приложению «Фоновое задание». В типовых конфигурациях есть и список регламентных заданий в разделе администрирования с датой последнего запуска и результатом.
Ошибка исчезла после перезапуска 1С — надо ли что-то делать?
Если она повторяется хотя бы раз в неделю, да. Включите журнал регистрации на полный уровень и дождитесь повтора. Разовые сбои часто оказываются ранним признаком повреждения данных или проблем с сетью.
Что отправить в поддержку, чтобы ответили быстрее?
Подробный текст ошибки или отчёт об ошибке, версии платформы и конфигурации, точную последовательность действий и время события. Для падений — дамп и фрагмент технологического журнала за эту минуту.