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


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

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


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

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

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

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



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

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

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

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

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

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

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

&НаСервере
Функция ПрочитатьФайлнаСервере()
    
    Текст = Новый ТекстовыйДокумент;    
    Возврат Текст;
    
КонецФункции
17 Cyberhawk
 
03.04.19
14:26
)))
18 sqr4
 
03.04.19
14:26
(16) работает не трожь)