Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

1C_ERR_CONTEXT_DELETE 1С:Предприятие и СУБД

Ошибка 1С: Ошибка при вызове метода контекста (Удалить) — Решение

Обновлено: 25.08.2026 · Официальная документация ↗
  • Аварийный сбой при программном вызове метода Объект.Удалить() или Коллекция.Удалить(Индекс).
  • Сообщение об ошибке: {Модуль(Строка)}: Ошибка при вызове метода контекста (Удалить): Ошибка блокировки / Нарушение ссылочной целостности.
  • Сбой при интерактивном удалении помеченных объектов или очистке строк таблиц.

1. Архитектура удаления объектов в 1С

Метод Удалить() используется в двух контекстах встроенного языка:

  • Удаление объектов БД (СправочникОбъект, ДокументОбъект): Физическое непосредственное удаление записи из таблиц СУБД (в обход корзины пометок на удаление);
  • Удаление элементов коллекций (ТаблицаЗначений, Массив, СписокЗначений): Удаление строки или элемента по индексу или ссылке на строку.

2. Методы решения типовых сбоев

Сценарий 1: Прямое удаление объекта БД (контроль ссылочной целостности)

Прямой вызов Объект.Удалить() крайне опасен, так как может оставить битые ссылки (<Объект не найден>). Вместо прямого удаления рекомендуется устанавливать пометку удаления:

// БЕЗОПАСНЫЙ ПОДХОД (пометка на удаление):
СправочникОбъект = Ссылка.ПолучитьОбъект();
СправочникОбъект.УстановитьПометкуУдаления(Истина);

// НЕПОСРЕДСТВЕННОЕ УДАЛЕНИЕ (только если нет ссылок!):
Попытка
    СправочникОбъект = Ссылка.ПолучитьОбъект();
    СправочникОбъект.Удалить(); // Может упасть, если объект заблокирован или открыт
Исключение
    ЗаписьЖурналаРегистрации("Ошибка удаления", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;

Сценарий 2: Ошибки удаления из Таблицы Значений по индексу

Если в цикле передать несуществующий индекс или удалять элементы в прямом порядке:

// СБОЙ:
Для Индекс = 0 По Таблица.Количество() - 1 Цикл
    Таблица.Удалить(Индекс); // Ошибка: Индекс за границами!
КонецЦикла;

// ИСПРАВЛЕНИЕ: Удаление с конца
Для Индекс = -(Таблица.Количество() - 1) По 0 Цикл
    Таблица.Удалить(-Индекс);
КонецЦикла;

// ИЛИ полная очистка коллекции:
Таблица.Очистить();
💡 Практика специалистов: Никогда не используйте непосредственное удаление Объект.Удалить() в регламентных заданиях без проверки НайтиПоСсылкам(), иначе это приведет к появлению сотен битых ссылок в регистрах учета.

Частые вопросы (FAQ)

Как программно проверить ссылки на объект перед удалением?

Используйте метод НайтиПоСсылкам(МассивСсылок). Если результирующая ТаблицаЗначений не пуста — объект используется в других документах/регистрах и прямое удаление недопустимо.

Можно ли отменить действие метода Объект.Удалить()?

Нет. Метод физически удаляет запись из базы данных. Восстановление возможно только из резервной копии (бэкапа СУБД).

Чем отличается Удалить() от Очистить() для коллекций?

Метод Удалить() удаляет ровно один конкретный элемент по индексу или ссылке. Метод Очистить() атомарно и максимально быстро освобождает всю коллекцию целиком.

Почему метод Удалить() падает при попытке удаления проведенного документа?

Перед непосредственным физическим удалением проведенного документа платформа требует предварительной отмены его проведения (ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения)).

Полезные материалы
Рекомендуем