|
Прочитать файл во внешнем отчёте в клиент-серверном варианте | ☑ | ||
---|---|---|---|---|
0
РыбаАист
06.12.23
✎
15:42
|
ЗГУ 3.1. Платформа 8.3. Клиент-серверный вариант.
Сделали внешний отчёт, который берёт данные из указанного пользователем файла, отбирает нужные данные из базы и компонует в нужном виде. Отчёт работает, файл считывается, но только в файловом режиме. В клиент-серверном же ошибка: Каталог не обнаружен: "путь к каталогу" Я так понимаю, что на клиенте мы указываем каталог, а считать он его пытается на сервере и там, собственно и не находит его, в этом загвоздка. Так вот вопрос: Как передать файл с клиента на сервер, чтобы там его считать? Пробовал через ПоместитьВоВременноеХранилище, не сработало. |
|||
1
РыбаАист
06.12.23
✎
15:46
|
Файл читаю так:
ТабличныйДокумент.Прочитать(ПолучитьИзВременногоХранилища(Адрес), СпособЧтенияЗначенийТабличногоДокумента.Значение); |
|||
2
unenu
06.12.23
✎
15:48
|
(0) передать можно через временное хранилище, но проще использовать пути в формате
\\...\...\МойФайл.тхт если политики безопасности позволяют и права есть. |
|||
3
SleepyHead
гуру
06.12.23
✎
15:49
|
(0) Отчет наверняка по умолчанию исполняется в фоне, а там свои тонкости с передачей значений через временное хранилище. Посмотри типовую общую форму "ФормаОтчета", как там передается, сделай так же.
|
|||
4
SleepyHead
гуру
06.12.23
✎
15:50
|
Если отчет со своей формой, и файл небольшой, можно в модуле формы просто скопировать файл в папку, видимую с сервера, и работать уже с этим файлом.
|
|||
5
РыбаАист
06.12.23
✎
15:58
|
(4) А как я скопирую файл с клиента на сервер, если серверу надо увидеть файл, чтоб скопировать к себе в каталог?
Или я что-то не понимаю, и копировать можно и на клиенте? Или просто при указании каталога надо учитывать что путь с сервера к этому каталогу просто выглядит иначе, то есть узнать имя машины, на которой этот файл и попытаться выстроить путь с сервера к этому клиентскому каталогу... |
|||
6
Chai Nic
06.12.23
✎
16:00
|
(2) "пути в формате \\...\...\"
Вообще не правильно. Клиенте не обязан быть доступен с сервера. Он может например за NAT находиться или за файрволлом. |
|||
7
lis58
06.12.23
✎
16:03
|
На клиенте
АдресФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Файл)); На сервере ИмяВременногоФайла = "D:\*.*"; ДвоичныеДанныеФайлаИзХранилища = ПолучитьИзВременногоХранилища(АдресФайла); ДвоичныеДанныеФайлаИзХранилища.Записать(ИмяВременногоФайла); Как-то так вроде делал |
|||
8
Chai Nic
06.12.23
✎
16:03
|
Самый простой но не самый правильный способ - это сериализовать двоичные данные и передать их в серверную процедуру как строку. А там обратно десериализовать.
|
|||
9
РыбаАист
06.12.23
✎
16:05
|
(7) Уже пробовал через поместитьВоВременноеХранилище
Не то же самое, что у меня написано? |
|||
10
lis58
06.12.23
✎
16:05
|
(9) Нет. У меня копирует файл на сервер и там открывает
|
|||
11
РыбаАист
06.12.23
✎
16:08
|
(10) Теперь понял. Сейчас попробуем.
|
|||
12
Chai Nic
06.12.23
✎
16:14
|
(10) И так тоже не надо делать. Забудьте, что сервер может быть доступен с клиента иначе как через средства 1с.
|
|||
13
РыбаАист
06.12.23
✎
16:22
|
(10) Задумка интересная, сделать получилось. Но тоже не уверен, что оно того стоит. Там у клиента всё-таки всякая супер-пупер секретность и безопасность. Если перекидывать файлы на сервер - потом по башке настучат.
Но признаю, я сам спросил как перекинуть файл на сервер, так что соответствующий ответ и получил, так что спасибо. |
|||
14
Donkey_hot
06.12.23
✎
16:30
|
(0) Если эксель или текстовик, можно прочитать на клиенте и передавать уже считанные данные, а не сам файл.
|
|||
15
lis58
06.12.23
✎
16:38
|
(12) Это понятно, но вопрос был именно как передать файл на сервер
|
|||
16
РыбаАист
06.12.23
✎
16:51
|
(14) Так считается он только на сервере. Я так и делал.
|
|||
17
SleepyHead
гуру
07.12.23
✎
06:03
|
(13) После чтения удаляйте файл с сервера.
|
|||
18
Web00001
07.12.23
✎
07:49
|
(16)Считаться он может где угодно. В этом по большей части, нет никакой проблемы. В(14) имеется ввиду что сначала можно считать файл в какую то коллекцию на клиенте, И потом передать ее на сервер. Таким образом на сервер попадут только те данные которые должны туда попасть а не весь файл. Если все там так секьюрно, что нельзя на полсекунды файл создать во временной папке.
|
|||
19
Chai Nic
07.12.23
✎
08:01
|
(15) "именно как передать файл на сервер"
Загрузить на клиенте в двоичные данные, а далее два способа передать на сервер - или через сериализацию, или через временное хранилище. Проблема в том, что процедуры работы с временным хранилищем сейчас асинхронные, и не хочется с ними связываться. Если файл небольшой, я бы тупо сериализовал через ЗначениеВСтрокуВнутр и передал как строку на сервер. |
|||
20
banco
07.12.23
✎
10:40
|
(0) ФайловаяСистемаКлиент.ЗагрузитьФайл
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |