В конфигурации есть справочник "Хранилище файлов", есть основной реквизит с типом "Хранилище значений".
Файлы загружаются в этот справочник и при необходимости открываются.
Стоит задача обновить файл в хранилище.
На просторах... нашел

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

но не работает, общая тема выглядит так:

```1c
    &НаКлиенте
    Процедура ОбновитьФайл(Адрес, ИмяФайла)
    Оповещение = Новый ОписаниеОповещения("ЗаменаФайлаВХранилище", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
    КонецПроцедуры

    &НаСервере
    Функция ЗаменаФайлаВХранилище(Результат, ЛокНаименованиеЭлемента, ЛокПолноеИмяФайла, ДополнительныеПараметры) Экспорт
    Попытка
    ЛокХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ЛокПолноеИмяФайла));
    Исключение
    Возврат Null;
    КонецПопытки;
    ЛокСправочникХЗНСсылка = Справочники.БЗ_ХранилищеФайлов.НайтиПоНаименованию(ЛокНаименованиеЭлемента);
    Если ЛокСправочникХЗНСсылка.Пустая() Тогда
    Возврат Null;
    КонецЕсли;
    ЛокСправочникХЗН = ЛокСправочникХЗНСсылка.ПолучитьОбъект();
    ЛокСправочникХЗН.Хранилище = ЛокХранилище;
    Попытка
    ЛокСправочникХЗН.Записать();
    Возврат ЛокСправочникХЗН;
    Исключение
    Возврат Null;
    КонецПопытки;
    КонецФункции
```

Что не так? Почему не работает?
---
Спасибо за помощь, действительно натолкнули на правильные мысли. Работает вот так:

```1c
    &НаКлиенте
    Процедура ОбновитьФайл(Команда)
    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайлаЗамена", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
    КонецПроцедуры

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

    &НаСервереБезКонтекста
    Функция ЗаменаФайлаВХранилище(Адрес, Имя) Экспорт
    ОбнФайл = Справочники.БЗ_ХранилищеФайлов.НайтиПоНаименованию(Имя);
    ОбнФайлОбъект = ОбнФайл.ПолучитьОбъект();
    ОбнФайлОбъект.ДанныеХЗ = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
    ОбнФайлОбъект.Записать();
    КонецФункции
```
---
Мне кажется проблема тут:
```1c
    ЛокХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ЛокПолноеИмяФайла));
```

ЛокПолноеИмяФайла - содержит имя файла на клиенте, на сервере его нет.
---
Вероятно, должно быть так:
```1c
    ЛокХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ЛокНаименованиеЭлемента));
```
---
Истина где-то рядом, надо попробовать
---
Сообщение было скрыто модератором.
---
Спотыкается на этой строке:
ЛокСправочникХЗНСсылка = Справочники.БЗ_ХранилищеФайлов.НайтиПоНаименованию(ЛокНаименованиеЭлемента)

не могу понять, что надо передать в качестве параметра "ЛокНаименованиеЭлемента", если имя, то какое? или адрес файла в хранилище?
---
Спасибо за помощь, действительно натолкнули на правильные мысли. Работает вот так:

```1c
    &НаКлиенте
    Процедура ОбновитьФайл(Команда)
    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайлаЗамена", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
    КонецПроцедуры

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

    &НаСервереБезКонтекста
    Функция ЗаменаФайлаВХранилище(Адрес, Имя) Экспорт
    ОбнФайл = Справочники.БЗ_ХранилищеФайлов.НайтиПоНаименованию(Имя);
    ОбнФайлОбъект = ОбнФайл.ПолучитьОбъект();
    ОбнФайлОбъект.ДанныеХЗ = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));
    ОбнФайлОбъект.Записать();
    КонецФункции
```