Всем привет. Такая задача. У справочника есть на форме есть 2 кнопки. По первой загружается файл. По второй открывается. Этот файл одинаковый на все элементы справочника. Типо описания. Есть код в модуле формы. При попытке открыть файл выдается ошибка
{Справочник.Товарищи.Форма.ФормаЭлемента.Форма(2163)}: Ошибка при вызове метода контекста (ПолучитьФайл)
 ПолучитьФайл(Адрес, ПолучитьКонстантуНаСервере(), Истина);
по причине:
Неправильный путь к файлу 'e1c://filev/C/Users/я/Documents/InfoBase/e1cib/data/Справочник.Товарищи.Файл?ref=a537000a5e6556ac11de071cce2e4
Вот такой код -

```1c
    Процедура ЗагрузитьВБазу(Команда)
    Перем ВыбранноеИмя;
    Перем АдресВременногоХранилища;
    АдресВХранилище = ";
    Если ПоместитьФайл(АдресВременногоХранилища, ", ВыбранноеИмя, Истина) Тогда
    УстановитьКонстантуНаСервере(ВыбранноеИмя);
    ПоместитьФайлОбъекта(АдресВременногоХранилища);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ОткрытьФайл(Команда)
    Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ФайлОписания");
    ПолучитьФайл(Адрес, ПолучитьКонстантуНаСервере(), Истина);
    КонецПроцедуры

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

    &НаСервере
    Процедура УстановитьКонстантуНаСервере(ВыбранноеИмя)
    Константы.ИмяФайлаКлиента.Установить(ВыбранноеИмя);
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьКонстантуНаСервере()
    Возврат Константы.ИмяФайлаКлиента.Получить()
    КонецФункции
```

Помогите пожалуйста..
---
Вот рабочий вариант.

Создана общая форма. На ней три кнопки.
Модуль формы:

```1c
    #Область Сохранение_файла

    &НаКлиенте
    Процедура СохранитьФайл(Команда)

    НачатьПомещениеФайла(Новый ОписаниеОповещения("СохранитьФайлЗавершение", ЭтотОбъект),,, Истина, УникальныйИдентификатор);

    КонецПроцедуры

    &НаКлиенте
    Процедура СохранитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Файл = Новый Файл(ВыбранноеИмяФайла);

    СохранитьФайлВКонстантуНаСервереБезКонтекста(Адрес, Файл.Имя);

    КонецПроцедуры // СохранитьФайлЗавершение

    &НаСервереБезКонтекста
    Процедура СохранитьФайлВКонстантуНаСервереБезКонтекста(Адрес, ИмяФайла)

    ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);

    СтруктураДанныхФайла = Новый Структура;
    СтруктураДанныхФайла.Вставить("ИмяФайла", ИмяФайла);
    СтруктураДанныхФайла.Вставить("ДанныеФайла", ДанныеФайла);

    Константы.ДанныеФайла.Установить(Новый ХранилищеЗначения(СтруктураДанныхФайла));

    КонецПроцедуры // СохранитьФайлВКонстантуНаСервереБезКонтекста

    #КонецОбласти

    #Область Открытие_файла

    &НаКлиенте
    Процедура ОткрытьФайл(Команда)

    Если ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста() Тогда

    НачатьПолучениеКаталогаДокументов(Новый ОписаниеОповещения("КаталогДокументовЗавершение", ЭтотОбъект));

    Иначе

    СообщениеПользователю = Новый СообщениеПользователю;
    СообщениеПользователю.Текст = "Файл не был загружен в константу.";
    СообщениеПользователю.Сообщить();

    КонецЕсли;

    КонецПроцедуры

    &НаКлиенте
    Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт

    Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ИмяФайла = ";

    ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла);

    ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;

    МассивПолучаемыхФайлов = Новый Массив;
    МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));

    НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);

    КонецПроцедуры // КаталогДокументовЗавершение

    &НаКлиенте
    Процедура ОткрытьФайлЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПолученныеФайлы = Неопределено
    И Не (ТипЗнч(ПолученныеФайлы) = Тип("Массив")
    И ПолученныеФайлы.Количество()) Тогда
    Возврат;
    КонецЕсли;

    НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);

    КонецПроцедуры // ОткрытьФайлЗавершение

    &НаКлиенте
    Процедура НачатьЗапускПриложенияЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт

    // Заглушка

    КонецПроцедуры // НачатьЗапускПриложенияЗавершение

    &НаСервереБезКонтекста
    Процедура ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла)

    СтруктураФайла = Константы.ДанныеФайла.Получить().Получить();

    ИмяФайла = СтруктураФайла.ИмяФайла;

    ПоместитьВоВременноеХранилище(СтруктураФайла.ДанныеФайла, Адрес);

    КонецПроцедуры // ПолучитьДанныеФайлаНаСервереБезКонтекста

    #КонецОбласти

    #Область Удаление_файла

    &НаКлиенте
    Процедура УдалитьФайл(Команда)

    Если ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста() Тогда

    ПоказатьВопрос(Новый ОписаниеОповещения("УдалитьФайлЗавершение", ЭтотОбъект),
    "Данные файла будут безвозвратно удалены.
    |Продолжить?", РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да,, КодВозвратаДиалога.Нет);

    Иначе

    СообщениеПользователю = Новый СообщениеПользователю;
    СообщениеПользователю.Текст = "Файл не был загружен в константу.";
    СообщениеПользователю.Сообщить();

    КонецЕсли;

    КонецПроцедуры

    &НаКлиенте
    Процедура УдалитьФайлЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт

    Если Не РезультатВопроса = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;

    УдалитьФайлНаСервереБезКонтекста();

    КонецПроцедуры // УдалитьФайлЗавершение

    &НаСервереБезКонтекста
    Процедура УдалитьФайлНаСервереБезКонтекста()

    Константы.ДанныеФайла.Установить(Неопределено);

    КонецПроцедуры // УдалитьФайлНаСервереБезКонтекста

    #КонецОбласти

    &НаСервереБезКонтекста
    Функция ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста()

    ДанныеФайла = Константы.ДанныеФайла.Получить();

    Возврат Не ДанныеФайла.Получить() = Неопределено;

    КонецФункции // ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста
```
---
Причем когда я сначала сделала так, что у каждого элемента справочника свой файл то все работало. Это было вот так

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

    &НаКлиенте
    Процедура ОткрытьФайл(Команда)
    Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ФайлОписания");
    ПолучитьФайл(Адрес, Объект.ИмяФайла, Истина);
    КонецПроцедуры

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

```1c
    &НаКлиенте
    Процедура ЗагрузитьВБазу(Команда)
    Перем ВыбранноеИмя;
    Перем АдресВременногоХранилища;
    АдресВХранилище = ";
    НовыйОбъект = Объект.Ссылка.Пустая();
    Если ПоместитьФайл(АдресВременногоХранилища, ", ВыбранноеИмя, Истина) Тогда
    УстановитьКонстантуНаСервере(ВыбранноеИмя);
    ПоместитьФайлОбъекта(АдресВременногоХранилища);
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ОткрытьФайл(Команда)
    Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФайлОписания");
    ПолучитьФайл(Адрес, ПолучитьКонстантуНаСервере(), Истина);
    КонецПроцедуры

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

    &НаСервереБезКонтекста
    Процедура УстановитьКонстантуНаСервере(ВыбранноеИмя)
    Константы.ИмяФайлаКлиента.Установить(ВыбранноеИмя);
    КонецПроцедуры

    &НаСервере
    Функция ПолучитьКонстантуНаСервере()
    Возврат Константы.ИмяФайлаКлиента.Получить()
    КонецФункции
```
---
Вот рабочий вариант.

Создана общая форма. На ней три кнопки.
Модуль формы:

```1c
    #Область Сохранение_файла

    &НаКлиенте
    Процедура СохранитьФайл(Команда)

    НачатьПомещениеФайла(Новый ОписаниеОповещения("СохранитьФайлЗавершение", ЭтотОбъект),,, Истина, УникальныйИдентификатор);

    КонецПроцедуры

    &НаКлиенте
    Процедура СохранитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    Если Не Результат Тогда
    Возврат;
    КонецЕсли;

    Файл = Новый Файл(ВыбранноеИмяФайла);

    СохранитьФайлВКонстантуНаСервереБезКонтекста(Адрес, Файл.Имя);

    КонецПроцедуры // СохранитьФайлЗавершение

    &НаСервереБезКонтекста
    Процедура СохранитьФайлВКонстантуНаСервереБезКонтекста(Адрес, ИмяФайла)

    ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес);

    СтруктураДанныхФайла = Новый Структура;
    СтруктураДанныхФайла.Вставить("ИмяФайла", ИмяФайла);
    СтруктураДанныхФайла.Вставить("ДанныеФайла", ДанныеФайла);

    Константы.ДанныеФайла.Установить(Новый ХранилищеЗначения(СтруктураДанныхФайла));

    КонецПроцедуры // СохранитьФайлВКонстантуНаСервереБезКонтекста

    #КонецОбласти

    #Область Открытие_файла

    &НаКлиенте
    Процедура ОткрытьФайл(Команда)

    Если ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста() Тогда

    НачатьПолучениеКаталогаДокументов(Новый ОписаниеОповещения("КаталогДокументовЗавершение", ЭтотОбъект));

    Иначе

    СообщениеПользователю = Новый СообщениеПользователю;
    СообщениеПользователю.Текст = "Файл не был загружен в константу.";
    СообщениеПользователю.Сообщить();

    КонецЕсли;

    КонецПроцедуры

    &НаКлиенте
    Процедура КаталогДокументовЗавершение(ИмяКаталогаДокументов, ДополнительныеПараметры) Экспорт

    Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ИмяФайла = ";

    ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла);

    ПолноеИмяФайла = ИмяКаталогаДокументов + ИмяФайла;

    МассивПолучаемыхФайлов = Новый Массив;
    МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Адрес));

    НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект), МассивПолучаемыхФайлов,, Ложь);

    КонецПроцедуры // КаталогДокументовЗавершение

    &НаКлиенте
    Процедура ОткрытьФайлЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПолученныеФайлы = Неопределено
    И Не (ТипЗнч(ПолученныеФайлы) = Тип("Массив")
    И ПолученныеФайлы.Количество()) Тогда
    Возврат;
    КонецЕсли;

    НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), ПолученныеФайлы[0].Имя);

    КонецПроцедуры // ОткрытьФайлЗавершение

    &НаКлиенте
    Процедура НачатьЗапускПриложенияЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт

    // Заглушка

    КонецПроцедуры // НачатьЗапускПриложенияЗавершение

    &НаСервереБезКонтекста
    Процедура ПолучитьДанныеФайлаНаСервереБезКонтекста(Адрес, ИмяФайла)

    СтруктураФайла = Константы.ДанныеФайла.Получить().Получить();

    ИмяФайла = СтруктураФайла.ИмяФайла;

    ПоместитьВоВременноеХранилище(СтруктураФайла.ДанныеФайла, Адрес);

    КонецПроцедуры // ПолучитьДанныеФайлаНаСервереБезКонтекста

    #КонецОбласти

    #Область Удаление_файла

    &НаКлиенте
    Процедура УдалитьФайл(Команда)

    Если ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста() Тогда

    ПоказатьВопрос(Новый ОписаниеОповещения("УдалитьФайлЗавершение", ЭтотОбъект),
    "Данные файла будут безвозвратно удалены.
    |Продолжить?", РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да,, КодВозвратаДиалога.Нет);

    Иначе

    СообщениеПользователю = Новый СообщениеПользователю;
    СообщениеПользователю.Текст = "Файл не был загружен в константу.";
    СообщениеПользователю.Сообщить();

    КонецЕсли;

    КонецПроцедуры

    &НаКлиенте
    Процедура УдалитьФайлЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт

    Если Не РезультатВопроса = КодВозвратаДиалога.Да Тогда
    Возврат;
    КонецЕсли;

    УдалитьФайлНаСервереБезКонтекста();

    КонецПроцедуры // УдалитьФайлЗавершение

    &НаСервереБезКонтекста
    Процедура УдалитьФайлНаСервереБезКонтекста()

    Константы.ДанныеФайла.Установить(Неопределено);

    КонецПроцедуры // УдалитьФайлНаСервереБезКонтекста

    #КонецОбласти

    &НаСервереБезКонтекста
    Функция ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста()

    ДанныеФайла = Константы.ДанныеФайла.Получить();

    Возврат Не ДанныеФайла.Получить() = Неопределено;

    КонецФункции // ПроверитьНаличиеФайлаВКонстантеНаСервереБезКонтекста
```
---
Ого! Какой код! А мой нельзя было как то поменять?
---
AlenkaInt, Иногда лучше написать с 0 :) Тем более что там что-то не так :)
---
dj_serega, знать бы когда это иногда :-) Бывает кажется что вот вот и получится. И это вот-вот длится очень долго, и потом понимаешь, надо было с 0 :-))
---
Спасибо тебе брат
---
Да, этот код работает. Огромное спасибо! Мой получается вообще мимо был..
---
Пробую добавить вознаграждение.