Работая с платформой 1С, вы можете столкнуться с двумя распространенными ошибками: “Ошибка при установке значения атрибута контекста” и “Ошибка при получении значения атрибута контекста” . Эти ошибки могут возникать по разным причинам, но их корректное понимание и устранение — важный шаг на пути к успешному программированию в 1С. В этой статье мы подробно разберем причины этих ошибок, приведем примеры и предложим способы их решения.
Ошибка при установке значения атрибута контекста
Эта ошибка указывает на то, что система не может присвоить выбранное значение определенному атрибуту информационного объекта. Как правило, в детальном описании ошибки можно прочитать, с чем именно она связана. Поэтому каждую такую ошибку приходится расследовать отдельно, зачастую используя отладчик, логирование, анализ журнала регистрации. А потому универсального решения не существует. Ниже примеры, как можно воспроизвести такую ошибку.
Здесь мы получим ошибку при попытке установить свойство “ПутьКДанным” именем несуществующего реквизита:

&НаСервере Процедура Ошибка1НаСервере() элемент = Элементы.Добавить("Ошибочный", Тип("ПолеФормы")); элемент.ПутьКДанным = "несуществующийПуть"; КонецПроцедуры &НаКлиенте Процедура Ошибка1(Команда) Ошибка1НаСервере(); КонецПроцедуры
А здесь мы получим ошибку по причине несоответствия типов:

&НаСервере Процедура Ошибка4НаСервере() ЭтаФорма.АвтоЗаголовок = ТекущаяДата(); КонецПроцедуры &НаКлиенте Процедура Ошибка4(Команда) Ошибка4НаСервере(); КонецПроцедуры
Ошибка при получении значения атрибута контекста
Похожая ошибка, но уже при попытке получения значения атрибута. Рассмотрим пару примеров, как ее легко воспроизвести, чтобы вы могли самостоятельно научиться такие ошибки отлавливать и диагностировать.
Здесь мы пытаемся получить несуществующие метаданные:

&НаСервере Процедура Ошибка2НаСервере() Сообщить(Метаданные.ОсновнаяРоль); КонецПроцедуры &НаКлиенте Процедура Ошибка2(Команда) Ошибка2НаСервере(); КонецПроцедуры
А в этом примере ошибка связана с тем, что мы пытаемся получить не инициализированный параметр сеанса:

&НаСервере Процедура Ошибка3НаСервере() Ошибка = ПараметрыСеанса.ОшибочныйСеанс; КонецПроцедуры &НаКлиенте Процедура Ошибка3(Команда) Ошибка3НаСервере(); КонецПроцедуры
Подводя итог, можно сказать, что данные ошибки – одни из самых неприятных, из-за того, что причины у них могут быть самые различные, и единого универсального решения не существует. Где-то нужно проверять права, где-то нужно убедиться, что инициализирован нужный параметр сеанса, где-то – следить, чтобы устанавливались значения подходящего типа данных, и т.п.
Но благодаря информативным сообщениям об ошибках, а также при помощи отладчика и внимательного анализа кода, вы наверняка научитесь с такими ошибками справляться.