При доработке типовых конфигураций 1С (таких как Управление торговлей 10.3, Комплексная автоматизация 1.1 или Управление производственным предприятием 1.3) часто возникает задача подключить механизм прикрепления файлов и изображений к новым справочникам. В этих конфигурациях для хранения присоединенных файлов используется справочник ХранилищеДополнительнойИнформации. Однако при попытке открыть список прикрепленных файлов по аналогии с типовыми объектами (например, из формы справочника Контрагенты) разработчики нередко сталкиваются с ошибкой: Ошибка при установке значения атрибута контекста (Значение).
Разберем подробно, почему возникает данная ошибка, как правильно связать самописный справочник со стандартным хранилищем файлов и какие нюансы настройки метаданных и прав доступа необходимо учесть.
Проанализируем механику работы типового механизма. При открытии формы присоединенных файлов типовая процедура общего модуля устанавливает отбор в форме списка справочника ХранилищеДополнительнойИнформации по реквизиту Объект:
ФормаХранилища = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФормуСписка();
ФормаХранилища.Отбор.Объект.Значение = СсылкаНаОбъект;
ФормаХранилища.Отбор.Объект.Использование = Истина;
ФормаХранилища.Открыть();
Исключение при установке свойства Значение возникает в следующих ситуациях:
Объект справочника ХранилищеДополнительнойИнформации, платформа блокирует передачу ссылки в контекст формы.Объект. Реквизит Объект в справочнике ХранилищеДополнительнойИнформации имеет составной тип данных. Если тип ссылки нового справочника не отмечен в метаданных, попытка присвоить такое значение отбору вызовет ошибку несовместимости типов.СправочникСсылка.ИмяСправочника, отбор не сможет принять значение.ЭтоНовый() = Истина), передача пустой или невалидной ссылки может привести к сбою типовых проверок.Разберем по шагам, как корректно настроить конфигурацию для устранения ошибки.
Объект справочника ХранилищеДополнительнойИнформации.Объект. В дереве метаданных найдем справочник ХранилищеДополнительнойИнформации, откроем свойства реквизита Объект и в списке типов установим флаг напротив ссылки нашего самописного справочника: СправочникСсылка.НашСправочник.Посмотрим на пример правильной организации вызова формы присоединенных файлов из формы элемента справочника:
Процедура ДействияФормыФайлы(Кнопка)
// Проверяем, записан ли текущий объект в базу данных
Если ЭтоНовый() Тогда
Предупреждение("Перед просмотром и добавлением файлов необходимо записать объект!");
Возврат;
КонецЕсли;
// Получаем форму списка хранилища и настраиваем отбор
ФормаСписка = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФормуСписка();
ФормаСписка.Отбор.Объект.ВидСравнения = ВидСравнения.Равно;
ФормаСписка.Отбор.Объект.Значение = ЭтотОбъект.Ссылка;
ФормаСписка.Отбор.Объект.Использование = Истина;
// Устанавливаем доступность изменения отбора пользователем при необходимости
ФормаСписка.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Объект.Доступность = Ложь;
ФормаСписка.Открыть();
КонецПроцедуры
В некоторых конфигурациях открытие присоединенных файлов выполняется через типовые критерии отбора. Если в конфигурации используется критерий отбора (например, КритерийОтбора.ФайлыДополнительнойИнформации), необходимо убедиться, что новый справочник добавлен в состав этого критерия отбора в дереве метаданных. После добавления объекта в состав метаданных и корректировки прав доступа ошибка при установке значения атрибута контекста будет полностью устранена.