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

Поместить файл во временное хранилище и прочитать его

Поместить файл во временное хранилище и прочитать его
Я
   ac13
 
03.04.19 - 13:32
[1c]Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
            
    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.МножественныйВыбор = Ложь;
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    
    Текст = Новый ТекстовыйДокумент();
    Текст.Прочитать(ПутьКФайлу);
    
КонецПроцедуры[/1c]

Выдает ошибку, что не может получить доступ к файлу.
Нужно получать файл через помещение его во временное хранилище.
Как это сделать?

[1c]АдресКФайлу = ПутьКФайлу;
ИмяФайла = ПолучитьИмяВременногоФайла(".csv");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКФайлу);
ДвоичныеДанные.Записать(ИмяФайла);[/1c]

Где что не так?
 
 
   Cyberhawk
 
1 - 03.04.19 - 13:48
С таким подходом к описанию ошибок далеко не уедешь
   ac13
 
2 - 03.04.19 - 13:53
(1)
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.МножественныйВыбор = Ложь; 
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;

    ПрочитатьФайлнаСервере(ПутьКФайлу);
    
КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайлнаСервере(ПутьКФайлу)
    
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);
    
КонецПроцедуры



{ВнешняяОбработка.ОткрытиеИЧтениеФайла.Форма.Форма.Форма(179)}: Ошибка при вызове метода контекста (Прочитать)
    Текст.Прочитать(ПутьКФайлу);
по причине:
Ошибка доступа к файлу '\\здесь_путь_к_файлу.csv'
   ac13
 
3 - 03.04.19 - 13:54
Файл нужно поместить и записать во временное хранилище, прочитать его оттуда и после удалить
   sqr4
 
4 - 03.04.19 - 13:55
Начатьпомещениефайла
   Cyberhawk
 
5 - 03.04.19 - 13:56
Ну нету у серверного контекста доступа на чтение к твоему файлу
   Cyberhawk
 
6 - 03.04.19 - 13:58
Если это сетевая шара, судя по пути, то дай к ней доступ всем локальным пользователям хоста.
А если сервер - это другой хост, нежели сама шара, то надо еще и кое-что сделать.
   Cyberhawk
 
7 - 03.04.19 - 13:58
Для проверки заведи шару локально на том же хосте, что сервер приложений
   Cyberhawk
 
8 - 03.04.19 - 13:59
В Винде нельзя в список пользователей, имеющих доступ к сетевой шаре, добавить локального пользователя с другого хоста, увы.
А пользователь службы агента (он же чаще всего совпадает с пользователем рабочего процесса) как правило локальный.
   Cyberhawk
 
9 - 03.04.19 - 14:00
Так что на шару доступ должен быть у локального пользователя, который будет дублем (по имени и по паролю) того же пользователя, от которого выполняется серверный код.
   ac13
 
10 - 03.04.19 - 14:01
(6) доступ ни к чему давать не могу, не имею права
   Cyberhawk
 
11 - 03.04.19 - 14:02
Ну тогда локальный файл копируй (передавай) на сервер, а не с сервера его пытайся читать
   ac13
 
12 - 03.04.19 - 14:03
Сделал так
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.МножественныйВыбор = Ложь; 
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;

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

&НаСервере
Процедура ПрочитатьФайлнаСервере(ПутьКФайлу)
    
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ПутьКФайлу);
    
КонецПроцедуры

Теперь пишет, что "Каталог не обнаружен `C:\Users\User567\AppData\Local\Temp\имя_временного_файла.csv`
   Cyberhawk
 
13 - 03.04.19 - 14:06
Переставай работать с одним и тем же файлом и на клиенте, и на сервере
   sqr4
 
14 - 03.04.19 - 14:08
(12) ахахах это только начало) 
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("csv"); 
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
Это все на сервер, передавай туда адрес, который не передастся ахахахаха
   Cyberhawk
 
15 - 03.04.19 - 14:13
(12) Зачем же ты файл из сетевой шары скопировал в локальный каталог клиентского хоста и пытаешься до него достучаться с хоста сервера? Херово, когда нет плана.
   ac13
 
16 - 03.04.19 - 14:22
Спасибо, получилось

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.МножественныйВыбор = Ложь; 
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    
    ТД = ПрочитатьФайлнаСервере();
    ТД.Прочитать(ПутьКФайлу);
    
КонецПроцедуры

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

   Cyberhawk
 
17 - 03.04.19 - 14:26
)))
   sqr4
 
18 - 03.04.19 - 14:26
(16) работает не трожь)

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