Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача Файла с Клиента на Сервер УПП

Передача Файла с Клиента на Сервер УПП
Я
   Eskeych
 
23.07.21 - 11:10
Здравствуйте, второй день мучаюсь с вопросом передачи файла между клиентом и сервером. Клиент это мой пк, Сервер Отдельная коробочка в другой стороне комнаты. База серверная. пробовал передать через временное хранилище, Адрес записывал как строку в рег.сведений, на сервере считывал, пытался получить через ПолучитьИзВременногоХранилища(), Но возвращает значение Неопределено. Что делать подскажите пж :) В какую сторону копать?
   ДенисЧ
 
1 - 23.07.21 - 11:12
Глобальный контекст (Global context)
ПоместитьФайл (PutFile)
Синтаксис:
ПоместитьФайл(<Адрес>, <НачальноеИмяФайла>, <ВыбранноеИмяФайла>, <Интерактивно>, <УникальныйИдентификаторФормы>)
   Eskeych
 
2 - 23.07.21 - 11:28
(1) как получить адрес с этой функции, если его не задавать. Что бы получить файл на сервере.
Или вот так нужно:
Адрес = ПоместитьВоВременноеХранилище(ПолноеИмяФайла, Идентификатор);
ПоместитьФайл(Адрес, ПолноеИмяФайла(Адрес на клиенте),Ложь, Идентификатор);
   ДенисЧ
 
3 - 23.07.21 - 11:31
(2) <Адрес> (необязательный)
Тип: Строка.
Адрес во временном хранилище, по которому должны быть помещены данные. Если значение параметра не задано или является пустой строкой, то будет создан новый файл. Расположение нового файла возвращается в данном параметре.

Последние два предложения.
   Мультук
 
4 - 23.07.21 - 11:35
   Eskeych
 
5 - 23.07.21 - 11:44
{ВнешняяОбработка.БК_РассылкаРасчетныхЛистов.Форма.Форма.Форма(112)}: Значение не является значением объектного типа (Записать)
Файл.Записать(Адрес);
Адрес - e1cib/tempstorage/e82344fa-77bc-43fa-9b36-f58f4800eb66?seanceId=7cf97e47-e9cf-4400-8a11-4ad5c086f2a9
Пробовал еще: C:\Users\user\AppData\Local\Temp\temp.pdf
   Eskeych
 
6 - 23.07.21 - 11:45
Адрес в формате строка
   Kassern
 
7 - 23.07.21 - 11:47
(6) в клиент серверном варианте это просто делается (работа со временным хранилищем)
На клиенте 
        ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
        Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
        ЗагрузитьФайлExсelКодовНаСервере(Адрес,Файл.Расширение);
На сервере

    ДД=ПолучитьИзВременногоХранилища(Адрес);
    ИмяФайла=ПолучитьИмяВременногоФайла(Расширение);
    ДД.Записать(ИмяФайла);
   Eskeych
 
8 - 23.07.21 - 12:00
(7) не работает ошибка та же  Значение не является значением объектного типа (Записать)
в обработку запихнул 
ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор); 
Адрес записал в рег сведений

в модуль регл задания
    ДД=ПолучитьИзВременногоХранилища(Адрес);
    ИмяФайла=ПолучитьИмяВременногоФайла(Расширение);
    ДД.Записать(ИмяФайла);
Адрес для записи получал из регистра сведений
   Eskeych
 
9 - 23.07.21 - 12:01
если клиент и сервер 2 разных пк. то временное хранилище действует только на клиенте, правильно?
   Kassern
 
10 - 23.07.21 - 12:03
(8) А зачем вам регистр и регламентное задание?
   Kassern
 
11 - 23.07.21 - 12:03
(9) откройте сп и почитайте про параметр адрес в ПоместитьВоВременноеХранилище
   Kassern
 
12 - 23.07.21 - 12:03
(11) откроете для себя много нового)
   Eskeych
 
13 - 23.07.21 - 12:08
(10) мне нужно отправлять сообщения на почту из 1с. Обработкой формирую файлы с отчетом, в регистр записываю подобие очереди. Регламентным заданием хочу рассылать сообщения, что бы пользователь не ждал пока все отправится ибо сообщений может быть 200+. Но что бы их отправлять нужно на  сервер передать файлы для отправки.
   Kassern
 
14 - 23.07.21 - 12:15
(13) чет костылями запахло...эх если уж решил так реализовывать, то передавай сразу на сервер, когда обработкой отчеты формируешь и в регистре храни путь до файла на сервере. Либо создай общую папку и туда скидывай. Когда речь идет про временное хранилище, то данные там хранятся лишь во время жизни сеанса, а порой и жизни формы. Можешь еще следующий велосипед сделать: Добавить в регистр реквизит с типом хранилище значений и туда пихать твои сообщения. В общем все на ваш страх и риск. С упп я плотно не работал. В других конфах есть для этого ЭлектронноеПисьмоВходящее/Исходящее, типовые рассылки отчетов и т.д.
   ДенисЧ
 
15 - 23.07.21 - 12:18
(14) В УПП тоже есть е-письма ))
Но их же тоже создать надо, а 200 штук - это многовато
   Smallrat
 
16 - 23.07.21 - 12:18
(9) действует в сеансе, в другой сеанс через временное хранилище ничего не передать. Если файл небольшой, а регистр свой проще сразу двоичные данные в регистр записать и прочитать их в задании.
   Eskeych
 
17 - 23.07.21 - 12:21
(14) в том то и дело, я не могу файл на сервер записать ))
   Kassern
 
18 - 23.07.21 - 12:22
(17) я же скидывал вам как в одном сеансе это делается. На клиенте передаете в хранилище, на сервере получаете по адресу из хранилища и записываете в временны файл на сервере.
   Kassern
 
19 - 23.07.21 - 12:23
(18) а вы зачем то начали адрес пихать в регистр, закрывать текущий сеанс и в регламентом задании ждали чуда)
   Serg_1960
 
20 - 23.07.21 - 12:25
УПП хоть и старая конфигурация, но БСП таки имеет:
ФайловаяСистемаКлиент.ЗагрузитьФайл()
ФайловаяСистемаКлиент.ЗагрузитьФайлы()
...
   Eskeych
 
21 - 23.07.21 - 12:25
(19) так я не закрывал сеанс) у меня все в ошибку падало %)
   Kassern
 
22 - 23.07.21 - 12:29
(21) ваше регламентное задание ничего не знает о данных во временном хранилище вашего сеанса. А судя по параметру 2 в "ПоместитьВоВременноеХранилище(ПолноеИмяФайла, Идентификатор);" то ваши данные  в хранилище живут, пока живет форма, а не сеанс.
   Eskeych
 
23 - 23.07.21 - 12:33
(21) Форма остается открытой. Сейчас попробую в регистр записать двоичные данные файла.
   Kassern
 
24 - 23.07.21 - 12:39
(23) блин вы читали СП или нет? Там же по русски все написано:
Примечание:
Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса.
Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.
Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском сеансе адресу, сразу после помещения становятся недоступными в фоновом сеансе.
   Kassern
 
25 - 23.07.21 - 12:40
(23) внимательно прочитайте первую строчку. А потом подумайте, как так сеанс регламентного задания не видит данные временного хранилища вашего сеанса)
   Eskeych
 
26 - 23.07.21 - 12:46
(24) Хорошо, а как тогда передать файл на сервер?)
Из двоичных данных собирать на севере файл?
   Kassern
 
27 - 23.07.21 - 12:48
(26) прочитайте еще раз  (18). В любом случае он будет из двоичных данных там собираться.
   Kassern
 
28 - 23.07.21 - 12:50
(26) Скину вам простой пример чтения файла экселя с клиента на сервере, может у вас появится понимание...
&НаКлиенте
Процедура Пуск(Команда)
    Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл Excel";
    Диалог.ПолноеИмяФайла = "";
    Диалог.ПредварительныйПросмотр = Истина;
    Диалог.Фильтр ="Формат Excel (*.xls;*.xlsx)|*.xls;*.xlsx|";
    ВыбранФайл=Диалог.Выбрать();
    Если ВыбранФайл Тогда 
        Файл=Новый Файл(Диалог.ПолноеИмяФайла);
        ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
        Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
        ЗагрузитьФайлExсelНаСервере(Адрес,Файл.Расширение);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьФайлExсelНаСервере(Адрес,Расширение)
    
    ДД=ПолучитьИзВременногоХранилища(Адрес);
    ИмяФайла=ПолучитьИмяВременногоФайла(Расширение);
    ДД.Записать(ИмяФайла);
    ТабДок=Новый ТабличныйДокумент;
    ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
   Kassern
 
29 - 23.07.21 - 12:50
(27) Директивы &НаКлиенте\&НаСервере как раз определяют, где будет вызываться код.
   Eskeych
 
30 - 23.07.21 - 12:54
(29) в УПП такого нет :) Там все пишется сплошняком. На управляемых формах это появилось, если не ошибаюсь
 
 
   Kassern
 
31 - 23.07.21 - 13:01
(30) вам же знающие УПП люди подсказывали в (20) пробовали?
   Eskeych
 
32 - 23.07.21 - 13:13
(31) Вот ифа с ИТС "Если в конфигурацию встроена Библиотека стандартных подсистем для помещения файлов во временное хранилище необходимо использовать процедуры ЗагрузитьФайл и ЗагрузитьФайлы общего модуля ФайловаяСистемаКлиент. Для сохранения данных файла между несколькими серверными вызовами необходимо использовать свойство ИдентификаторФормы параметра ПараметрыЗагрузки"
   Eskeych
 
33 - 23.07.21 - 14:11
В общем моё говнецо заработало
НА КЛИЕНТЕ (обработка)     
                         Результат = ФормаОтчета.ЭлементыФормы.Результат;
            
            ТабДок = Новый ТабличныйДокумент;
            ТабДок.АвтоМасштаб = Истина;
            ТабДок.Вывести(Результат);
            
            ПутьКФайлу = "C:\Users\Public\РасчетныеЛисты\";
            ИмяФайла = "РасчетныйЛист"+СотрудникОтбор+".pdf";
            ПолноеИмяФайла = ПутьКФайлу+ИмяФайла;
            ВыгрузитьТДвФайл(ТабДок, ПолноеИмяФайла);
            
            ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);//Из файла Делаем двоичные данные

            ХЗ = Новый ХранилищеЗначения(ДД);      //помещаем в хранилище


            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.Получатель = СотрудникОтбор;   
            НоваяЗапись.Почта = Почта;
            НоваяЗапись.ПутьХранения = ПолноеИмяФайла;
            //НоваяЗапись.АдресНаСервере = ИмяПромежуточногоФайла;

            НоваяЗапись.ДвоичныеДанные = ХЗ;//помещаем в регистр 

НА СЕРВЕРЕ (у меня в регл задании)
   
    ДД = ТабДок.Получить();//Получаем двоичные данные из хранилища

    ИмяФайла=ПолучитьИмяВременногоФайла(".pdf");
    ДД.Записать(ИмяФайла);
    
Письмо.Вложения.Добавить(ИмяФайла);
 Всем спасибо за подсказки :)
   серый КТУЛХУ
 
34 - 23.07.21 - 14:38


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.