Имя: Пароль:
1C
 
Обработка загрузки файла
0 Eeelena
 
03.03.21
11:09
Клиент серверная база ERP , на сервере операционка Linux

Есть обработка самописная, которая считывает данные из Ексель. При выборе файла для загрузки на клиенте ругается, что нет доступа к файлу. Если эту же базу сделать файловой на Винде, загрузка проходит без проблем.
Подскажите куда копать ? По серверной части не очень разбираюсь.
1 ДенисЧ
 
03.03.21
11:10
На клиенте получать имя файла, пихать его в ХЗ, ХЗ передавать на сервер.
На сервере получать из ХЗ, записывать во временный, полученный временный обрабатывать.
2 kzot
 
03.03.21
11:35
(1) и удалять после обработки на сервере... они же скорее всего его заполняют и правят, не лучше прочитать на клиенте ?
3 Михаил Козлов
 
03.03.21
11:58
Если файл на клиенте, примерно так:
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)    
    ОчиститьСообщения();
    АдресФайлаВоВременномХранилище = "";    
    ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьДанныеЗавершение", ЭтотОбъект);
    НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,Объект.ВыбранноеИмяФайла,, УникальныйИдентификатор);        
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьДанныеЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    Если Результат Тогда        
        //Состояние(Нстр("ru = 'Выполняется загрузка данных. Пожалуйста, подождите...'"));
        Объект.ВыбранноеИмяФайла = ВыбранноеИмяФайла;
        Файл = Новый Файл(ВыбранноеИмяФайла);
        Если Не Файл.Существует() Тогда            
            ТекстСообщения = Нстр("ru = 'Указанный файл не существует'");
            СообщитьПользователю(ТекстСообщения);
            Возврат;            
        КонецЕсли;        
        ЗагрузитьДанныеНаСервере(Адрес, Файл.Расширение);
    КонецЕсли;    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДанныеНаСервере(АдресФайлаВоВременномХранилище, Расширение)    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
    ДвоичныеДанные.Записать(ИмяВременногоФайла);                
    Объект.табДокумент.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);    
    Файл = Новый Файл(ИмяВременногоФайла);
    Если Файл.Существует() Тогда            
        УдалитьФайлы(ИмяВременногоФайла);
    КонецЕсли;
    //СообщитьПользователю(Нстр("ru = 'Загрузка данных успешно завершена'"));    
КонецПроцедуры
4 Eeelena
 
05.03.21
07:31
(1) (2) (3) Благодарю, за помощь. Попробую (3)
5 kzot
 
05.03.21
08:04
(4) может толстого клиента как костыль ? )
6 hhhh
 
05.03.21
08:26
Загадочная вещь, табдок.Прочитать() на тонком клиенте нельзя, а табдок.Записать() можно.