8.х Сохранить скан документа в базе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем TODD22, 10 дек 2015.

  1. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Здравствуйте.

    Пытаюсь сохранить, а потом выгрузить файл из базы.

    Пишу так:
    Помещаю во временное хранилище
    Код:
    АдресВХ = ПоместитьВоВременноеХранилище(Файл.ПолноеИмя);
    
    Затем пишу так:

    Код:
    ЭлСпр.ДанныеДокумента = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХ));
    
    Но при выгрузке из базы у меня документ вешает 1Кб. Не могу понять почему.....
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Пути отладчиком проверьте
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Во временное хранилище нужно помещать и получать из него ДвоичныеДанные.
  4. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    У меня "Файл.ПолноеИмя" это полный путь до файла лежащего на диске.
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    И для чего серверу данная информация? Что он с ней должен сделать? :)
    Только вчера было обсуждение на подобную тему. В общем случае сервер про пути и имена файлов клиента вообще ничего не знает.
  6. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    У меня база файловая. Локально на диске лежит.
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Да без разницы, все-равно в двоичные данные нужно перегонять.
  8. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Так а поместить во временное хранилище это не двоичные данные?
    В общем что сделать нужно? Есть пример?
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    Платформа какая?
    --- Объединение сообщений, 10 дек 2015 ---
    и куда помещаешь? можно код? что бы понять?
  10. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    На просторах инета:
    Код:
    &НаСервере
    Функция ПолучитьФайл()
    Двоичное=Новый ДвоичныеДанные("C:\файл.bmp");
    Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
    Возврат Адрес
    КонецФункции
    
    &НаКлиенте
    Процедура Получить()
    Адрес=ПолучитьФайл();
    Описание=Новый ОписаниеПередаваемогоФайла("C:\FromServer.bmp",Адрес);
    МассивОписаний=Новый Массив;
    МассивОписаний.Добавить(Описание);
    ПолучитьФайлы(МассивОписаний,,,Ложь);
    КонецПроцедуры 
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    А что просто вот так не работает
    ЭлСпр.ДанныеДокумента = ПолучитьИзВременногоХранилища(АдресВХ);

    А если так
    XЗ= Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХ));
    ЭлСпр.ДанныеДокумента=ХЗ.Значение.Получить();
  12. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Зачем тебе данные из ХранилищаЗначения получать, если у тебя тип значения реквизита "ДанныеДокумента" = ХранилищеЗначения?
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    ну вот и я же по этому два варианта написал просто если поместитьво ВХ то тогда ПолучитьИзВременногоХранилища(АдресВХ) и все
    А если у тебя тип Хранилище значений то тогда ХЗ.Значение.Получить();
  14. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Эээ....тогда не понятно. Если во ВременноеХранилище помещаем значение типа ХранилищеЗначения, то:

    XЗ= Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХ));
    ЭлСпр.ДанныеДокумента=ХЗ.Значение.Получить();

    вообще не нужно,

    а если это ДвоичныеДанные, то:

    ЭлСпр.ДанныеДокумента = ПолучитьИзВременногоХранилища(АдресВХ); - не сработает и

    нужно сделать

    ЭлСпр.ДанныеДокумента = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХ), Новый СжатиеДанных(9));
  15. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Ничего не понял из написанного...

    У меня есть справочник. В него мне нужно загрузить скан документа. Весь код выполняется в модуле объекта обработки. То есть на сервере. Файлы то же лежат получается на сервере их на диск загружает с ftp процедура из того же модуля обработки. База файловая и лежит локально на ПК.

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Если все происходит на стороне сервера, то во временное хранилище что-то помещать нет необходимости.
    Сделай ДвоичныеДанные из полного пути к файлу и запихивай их в реквизит справочника ХранилищеЗначения.

    Код:
    ..........
    Если НЕ СканЗагружен(СканДок.Имя,СсылкаНаДок) Тогда
    
    ДвоичныеДанные = Новый ДвоичныеДанные(СканДок.ПолноеИмяФайла);
    ЗаписатьСканВДокумент(ДвоичныеДанные, СсылкаНаДок);
    КонецЕсли;
    .....
    
    Процедура ЗаписатьСканВДокумент(ДвоичныеДанные, СсылкаНаДок)
    ...........
    ЭлСпр.ДанныеДокумента = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
    ЭлСпр.Записать();
    ...........
    
    КонецПроцедуры
  17. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Спасибо попробую....
    Достали эти УФ и клиент-серверы..... :(
  18. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    не проканало :( Всё равно размер файла 1Кб после выгрузки из базы.
  19. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Кодом жестко полное имя файла укажи и отладь процесс прикрепления 1-го файла, где-то тело файла теряется
  20. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.757
    Симпатии:
    147
    Баллы:
    104
    Всё нормально. Спасибо. Всё заработало....

Поделиться этой страницей