Как исправить ошибку при вызове Хранилища дополнительной информации для самописного справочника в 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Разберем подробно, почему возникает данная ошибка, как правильно связать самописный справочник со стандартным хранилищем файлов и какие нюансы настройки метаданных и прав доступа необходимо учесть.

Причины возникновения ошибки

Проанализируем механику работы типового механизма. При открытии формы присоединенных файлов типовая процедура общего модуля устанавливает отбор в форме списка справочника ХранилищеДополнительнойИнформации по реквизиту Объект:


ФормаХранилища = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФормуСписка();
ФормаХранилища.Отбор.Объект.Значение = СсылкаНаОбъект;
ФормаХранилища.Отбор.Объект.Использование = Истина;
ФормаХранилища.Открыть();

Исключение при установке свойства Значение возникает в следующих ситуациях:

  1. Недостаточно прав доступа к реквизиту или объекту. Если у текущей роли пользователя нет прав на чтение самописного справочника или закрыт доступ на уровне реквизита Объект справочника ХранилищеДополнительнойИнформации, платформа блокирует передачу ссылки в контекст формы.
  2. Тип нового справочника не включен в составной тип реквизита Объект. Реквизит Объект в справочнике ХранилищеДополнительнойИнформации имеет составной тип данных. Если тип ссылки нового справочника не отмечен в метаданных, попытка присвоить такое значение отбору вызовет ошибку несовместимости типов.
  3. Передача неверного типа данных. Если в параметр передается строка (например, наименование элемента) или структура вместо прямой ссылки на объект СправочникСсылка.ИмяСправочника, отбор не сможет принять значение.
  4. Попытка открыть файлы для нового (не записанного) элемента. Если ссылка на объект еще не сформирована в базе данных (ЭтоНовый() = Истина), передача пустой или невалидной ссылки может привести к сбою типовых проверок.

Пошаговое решение проблемы

Разберем по шагам, как корректно настроить конфигурацию для устранения ошибки.

  1. Проверяем права доступа к объектам. Перейдем в дерево метаданных, откроем используемые роли и убедимся, что для роли пользователя установлены права на чтение и просмотр как нового справочника, так и реквизита Объект справочника ХранилищеДополнительнойИнформации.
  2. Расширяем составной тип реквизита Объект. В дереве метаданных найдем справочник ХранилищеДополнительнойИнформации, откроем свойства реквизита Объект и в списке типов установим флаг напротив ссылки нашего самописного справочника: СправочникСсылка.НашСправочник.
  3. Проверяем передаваемое значение в коде. Убедимся, что при вызове процедуры передачи передается ссылка на объект базы данных, а не строковое представление или реквизит формы.

Посмотрим на пример правильной организации вызова формы присоединенных файлов из формы элемента справочника:


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

Проверка критериев отбора

В некоторых конфигурациях открытие присоединенных файлов выполняется через типовые критерии отбора. Если в конфигурации используется критерий отбора (например, КритерийОтбора.ФайлыДополнительнойИнформации), необходимо убедиться, что новый справочник добавлен в состав этого критерия отбора в дереве метаданных. После добавления объекта в состав метаданных и корректировки прав доступа ошибка при установке значения атрибута контекста будет полностью устранена.

← На главную