Имя: Пароль:
1C
1С v8
Загрузка внешнего файла в базу данных
0 Новичок1С Учится
 
05.03.19
08:37
Добрый день. Прошу помочь разобраться в механизме загрузки внешнего файла в базу данных. Хранить двоичные данные буду в реквизите регистра сведений с типом "ХранилищеЗначения". Пытаюсь сделать по статье https://sites.google.com/site/1sspravocniktipovyhzadac/integracia-1s/rabota-s-fajlami/rabota-s-fajlami-v-8-3#TOC-WEB--
Первый момент который меня смущает это то что окно выбора файла открывается 2 раза. Первый раз на клиенте

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

            ЗаменаСуществующегоФайла(ЭтотОбъект, ДанныеВыполнения);
        Иначе
            ПродолжениеВызова(ДанныеВыполнения);    
        КонецЕсли;

И второй раз


&НаКлиенте
Процедура ПродолжениеВызова(ДанныеВыполнения)

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


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

        
        Записать();
        


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

Ну и самый главный вопрос в том что  в процедуре ЗаписатьВХранилищеЗаписьДанныхОФайлеВРегистр не формируется ни ФайлДвоичныхДанных ни ФайлХранилища

&НаСервере
Процедура ЗаписатьВХранилищеЗаписьДанныхОФайлеВРегистр(НовыйФайл, Отбор, ИмяФайла, ВидДокумента)
    
    

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

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

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

При этом никакие ошибки не возникают, запись в регистре формируется корректно. Так же не совсем понятно как формируется и передаётся навигационная ссылка... Объясните пожалуйста где и что я упустил.
1 Новичок1С Учится
 
05.03.19
08:42
Конфигурация Бухгалтерия 3.0