К статье
Практический материал

Разработка и Конфигурация · 10 мин

Ошибка времени выполнения в 1С: что это и как её исправить

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

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

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

Текст сообщения обычно содержит указание на модуль, строку кода и описание проблемы: «Поле объекта не обнаружено», «Деление на ноль», «Значение не является значением объектного типа». Умение читать эти сообщения — первый шаг к быстрой диагностике.

Чем ошибка времени выполнения отличается от других ошибок 1С

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

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

Типичные причины и тексты сообщений

Большинство ошибок времени выполнения сводится к нескольким повторяющимся сценариям. Знание типовых формулировок помогает сразу понять, где искать проблему.

«Поле объекта не обнаружено» — код обращается к реквизиту или свойству, которого нет у объекта. Частая причина — опечатка в имени реквизита, обращение к реквизиту, удалённому при обновлении конфигурации, либо запрос вернул выборку без нужного поля.

«Значение не является значением объектного типа» — попытка обратиться через точку к значению примитивного типа или к неопределённому значению. Классический случай: функция вернула Неопределено, а вызывающий код сразу пытается прочитать её свойство.

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

Поле объекта не обнаруженоОшибка в коде или структуре данных

Имя реквизита в указанной строке модуля и состав полей запроса

Значение не является объектного типаПеременная содержит Неопределено или примитив

Что возвращает функция, результат которой используется в строке ошибки

Объект не найденБитая ссылка в базе

Наличие удалённых объектов и ссылочную целостность через ТиИ

Деление на нольНезаполненные или нулевые данные

Значения показателей, участвующих в расчёте

Как найти место ошибки: пошаговая диагностика

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

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

Когда ошибка возникает у пользователя и не воспроизводится у разработчика, сравните окружения: права доступа, версии платформы, состав данных. Ошибка, которая проявляется только у менеджера с ограниченными правами, почти всегда связана с тем, что запрос не вернул данные из-за RLS, и код получил пустую выборку.

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

Как исправить: код, данные или права

Способ устранения определяется причиной. Если проблема в данных — например, в документе не заполнен обязательный для расчёта реквизит — достаточно исправить данные, но правильнее дополнительно добавить в код проверку с понятным сообщением пользователю вместо аварийного прерывания.

Если проблема в коде, добавьте защитные проверки. Перед обращением к результату функции убедитесь, что он не Неопределено; перед делением проверьте знаменатель; перед обращением к полю выборки убедитесь, что выборка не пустая. Для участков, где сбой допустим и обрабатывается, используйте конструкцию Попытка ... Исключение ... КонецПопытки, но не скрывайте ошибки молча: записывайте описание в журнал регистрации.

«Битые ссылки» устраняются штатно: тестирование и исправление информационной базы с включённой проверкой ссылочной целостности. Операцию выполняйте только на копии или после резервного копирования — режимы ТиИ могут удалять объекты с нарушенными ссылками.

bsl
Попытка
	Цена = Сумма / Количество;
Исключение
	ЗаписьЖурналаРегистрации("РасчетЦены", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
	ВызватьИсключение "Не удалось рассчитать цену: проверьте количество в документе";
КонецПопытки;

Частые ошибки при самостоятельном устранении

Самая распространённая ошибка — правка кода «вслепую» по тексту сообщения без воспроизведения ситуации. В результате устраняется следствие, а не причина: проверка на Неопределено прячет тот факт, что функция в принципе не должна была его вернуть.

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

Типичные ошибки
01
Правка кода без воспроизведения — устраняется симптом, причина остаётся и проявляется в другом месте
02
Пустой обработчик Исключение — ошибки скрываются, данные рассогласовываются незаметно
03
Тестирование и исправление без резервной копии — риск необратимого удаления объектов
04
Исправление только в рабочей базе без переноса в хранилище — при следующем обновлении ошибка возвращается

Когда проблема не в коде

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

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

Маршрут решения

Как выбрать действие

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

Что важно запомнить

Ошибка времени выполнения — это сбой из-за данных или контекста, а не синтаксиса. Диагностика строится на тексте сообщения, журнале регистрации и отладке; устранение — на исправлении данных, защитных проверках в коде и восстановлении ссылочной целостности, всегда с резервной копией.

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

Чем ошибка времени выполнения отличается от синтаксической ошибки?

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

Можно ли продолжать работать, если ошибка появляется периодически?

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

Где посмотреть историю ошибок, если пользователь не сохранил текст?

В журнале регистрации (в конфигураторе: Администрирование → Журнал регистрации, либо через обработку в режиме предприятия). Отфильтруйте события с уровнем «Ошибка» по времени и пользователю — там сохраняются описание, контекст и данные, с которыми работал сеанс.

Что делать, если ошибка появилась после обновления конфигурации?

Сначала проверьте, завершилось ли обновление полностью: незавершённые обработчики обновления данных — частая причина сбоев. Затем сравните проблемный модуль с предыдущей версией. Если ошибка критична и мешает работе, рассмотрите откат на резервную копию до выяснения причины.

Почему ошибка есть у пользователя, но не воспроизводится у разработчика?

Чаще всего дело в правах доступа или данных. Ограничения RLS могут сделать выборку запроса пустой именно для этого пользователя, и код получает значение, которое не умеет обрабатывать. Проверяйте сценарий под тем же пользователем и на тех же данных, а не под администратором.