Имя: Пароль:
1C
 
Выбор файла в тонком клиенте
0 33554432
 
11.04.17
10:47
У меня есть обработка по загрузке xml, у меня она работает, но я запускаю локально в файловой базе. У клиента серверная база и файл открывается с тонкого клиента, пишется что файл не найден по указанному пути. Что я делаю не так? Код выбора файла такой

&НаКлиенте
Процедура Загрузить(Команда)
    ЗагрузитьНаСервере(ФайлПоставкиXML);
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере(ФайлПоставкиXML)
    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ФайлПоставкиXML);
1 Strogg
 
11.04.17
10:49
(0) если процедура компилируется на сервере - то и файловую систему он серверную видит. ТАк что файлик надо закидывать в соотв. каталог именно на сервере :)
2 Мыш
 
11.04.17
11:22
(1) +
Или передавать файл с клиента на сервер )
3 spiller26
 
11.04.17
11:30
(2) Передавай файл на Сервер.

    ПутьВременногоФайлаXML = ПолучитьИмяВременногоФайла("xml");
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Объект.ИмфФайлаНаКлиенте);    
    ДвоичныеДанные.Записать(ПутьВременногоФайлаXML);

Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ПутьВременногоФайлаXML);
...        
        УдалитьФайлы(ПутьВременногоФайлаXML);

Немного теории:
Как только с клиента переходит все на &НаСервере все выполняется на сервере (у него нет доступа больше к вашем ресурсам)
Теперь что долно происходит:
файл передается на сервак, который временно его пихает в temp, потом обрабатывает его там, затем нужно его удалить, чтобы мусор не собирался.
4 33554432
 
11.04.17
11:53
(2,3)
Идею понял, что надо на сервер с клиента файл передать. С кодом не совсем понятно, что пишется на клиенте, а что на сервере.
5 sapphire
 
11.04.17
11:55
Двоичные данные и так спокойно передаются с клиента на сервер без хранилища.
6 spiller26
 
11.04.17
12:02
(4) Это все на Сервере
Файл он берет из этого реквизита Объект.ИмфФайлаНаКлиенте - где валяется файл на клиентской машине
7 33554432
 
11.04.17
12:08
(6)
у меня так пишется, что неправильный путь к файлу
8 spiller26
 
11.04.17
12:08
Вот как у меня происходит
//Объект.ФайлEXCEL - строка
//Объект.КлючФайлаEXCEL - Произвольный

&НаКлиенте
Процедура ФайдEXCELНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);
    
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.Фильтр                      = "Файлы Excel (*.xlsx) |*.xlsx";
    ДиалогОткрытияФайла.Заголовок                   = "Выберите файл таблицы Excel";
    ДиалогОткрытияФайла.ПредварительныйПросмотр     = Ложь;
    ДиалогОткрытияФайла.МножественныйВыбор          = Ложь;
    ДиалогОткрытияФайла.Расширение                  ="xls;xlsx";
    ДиалогОткрытияФайла.ИндексФильтра               = 0;
    ДиалогОткрытияФайла.ПолноеИмяФайла              = Объект.ФайлEXCEL;
    ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
    
    НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл
        Объект.ФайлEXCEL = ПереданныйФайл.Имя;
        Объект.КлючФайлаEXCEL = ПереданныйФайл.Хранение;
    КонецЦикла;
    
КонецПроцедуры // ()

&НаКлиенте
Процедура ФайлВТаблицу(Команда)
    
    ФайлВТаблицуНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ФайлВТаблицуНаСервере()
    
    ТаблицаРезультат = ЗагрузитьМетодом_1C836(); // Считать весь файл.
КонецПроцедуры

Функция ЗагрузитьМетодом_1C836(Знач ФайлEXCEL)
    ПутьВременногоФайлаEXCEL = ПолучитьИмяВременногоФайла("xlsx");
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Объект.КлючФайлаEXCEL);    
    ДвоичныеДанные.Записать(ПутьВременногоФайлаEXCEL);
    ТабличныйДокумент = Новый ТабличныйДокумент;
    Попытка
        // СпособЧтенияЗначенийТабличногоДокумента - новый параметр платформы 8.3.6. Второе значение "Текст".
        //ТабличныйДокумент.Прочитать(ФайлEXCEL, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
        ТабличныйДокумент.Прочитать(ПутьВременногоФайлаEXCEL, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        УдалитьФайлы(ПутьВременногоФайлаEXCEL);
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат Новый ТаблицаЗначений;
    КонецПопытки;
    ТаблицаРезультат = Новый ТаблицаЗначений;
// обработка таблицы
    Возврат ТаблицаРезультат;
    
КонецФункции
9 33554432
 
11.04.17
13:43
Блин, у меня все варианты глючат, можете предложить рабочий код, на основании входных данных (0) ?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс