«Ошибка при вызове метода контекста» в 1С: как найти настоящую причину
Встроенный метод платформы (Записать, Выполнить, Заблокировать, ПолучитьОбъект и другие) завершился исключением. Сама фраза только сообщает, какой метод упал, а причина записана в тексте после двоеточия или на следующих строках.
Текст ошибки
Причины
- Ошибка при записи объекта: не заполнены обязательные поля, отказ в обработчике ПередЗаписью, нарушение уникальности
- Ошибка в тексте запроса при вызове Выполнить()
- Нехватка прав на операцию с данными
- Конфликт блокировок или объект заблокирован другим сеансом
- Ошибка СУБД, нехватка места или проблемы с файлами
- Ошибка внешнего ресурса: файл, COM-объект, HTTP-соединение
Читайте сообщение целиком
Типичный вид ошибки:
{Документ.РеализацияТоваров.МодульОбъекта(42)}: Ошибка при вызове метода контекста (Записать)
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Нарушение прав доступа!
Главное здесь — то, что идёт после слов «по причине». Именно эту часть нужно искать и исправлять. Если причин несколько, последняя в цепочке обычно ближе всего к источнику.
Частые варианты и что делать
- Записать: проверьте заполнение обязательных реквизитов и сообщения обработчиков
ПередЗаписьюиОбработкаПроверкиЗаполнения. При проведении смотрите контроль остатков и движения. - Выполнить у запроса: в причине будет синтаксическая ошибка с позицией в тексте запроса вида
{(12, 5)}— строка и колонка. Откройте запрос в конструкторе или консоли запросов. - Заблокировать: объект редактируется в другом сеансе или идёт конфликт управляемых блокировок.
- ПолучитьОбъект, Удалить: «битая» ссылка или нехватка прав.
Для разработчика: получить полный текст ошибки
Если исключение перехватывается, сохраните подробное описание в журнал регистрации, а не только краткое. Для этого подходит функция ПодробноеПредставлениеОшибки(); в новых версиях платформы есть и расширенные методы ОбработкаОшибок.ПодробноеПредставлениеОшибки(), которые учитывают настройки отображения ошибок.
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации("Проведение документов",
УровеньЖурналаРегистрации.Ошибка,
ДокументОбъект.Метаданные(),
ДокументОбъект.Ссылка,
ТекстОшибки);
ВызватьИсключение;
КонецПопытки;
Не глотайте исключение молча: без ВызватьИсключение пользователь не узнает, что операция не выполнена, а в транзакции это приведёт к ошибке «В данной транзакции уже происходили ошибки».
Для пользователя
- Нажмите в окне ошибки ссылку на подробности и скопируйте текст полностью.
- Если в причине есть понятная подсказка (не заполнено поле, недостаточно остатка, нет прав), исправьте данные.
- Если ошибка выглядит технической, откройте журнал регистрации (раздел «Администрирование» или «Все функции» → Стандартные → Журнал регистрации), найдите событие по времени и передайте текст администратору.
Частые вопросы
Это ошибка программы или моих данных?
Сама фраза ничего не говорит о причине. Решает текст после «по причине»: если там про обязательные поля, остатки или права, проблема в данных или настройках; если про синтаксис или отсутствующие методы, нужен разработчик.
Где найти полный текст ошибки, если окно уже закрыто?
В журнале регистрации: отберите события с уровнем «Ошибка» за нужное время. Там сохраняются текст и стек вызовов.