Имя: Пароль:
1C
1С v8
Не сохраняются файлы из базы на веб-сервере
0 MAPATNK2
 
naïve
21.05.21
13:42
Всем доброго дня. Есть УТ 11.4, раньше была на собственном серваке, а сейчас базу забрали и мы подключаемся к нем через веб-сервер. Много обработок в ней по выгрузке Excel, txt, xml, пока была на нашем серваке, все выгружалось. А теперь, на веб-сервере постоянно вылазит ошибка мол "Файл не обнаружен путь к файлу". Что делать? Куда смотреть? Даже не знаю как сформулировать проблему, чтобы админам веб сервера написать.
1 MAPATNK2
 
naïve
21.05.21
13:53
Может для веб клиента какой то особый способ сохранения фалов программно есть?
2 MAPATNK2
 
naïve
21.05.21
13:55
Ну да, нашел методы сохранения на веб клиент. https://infostart.ru/1c/articles/274969/
Может это поможет.
3 sikuda
 
21.05.21
15:01
Если код на сервере, то и сохраняет на сервер 1С - мешает профиль безопасности разбирайся.
На клиенте в Web-клиенте по умолчанию доступа к локальному жесткому диску нет. Но есть "1C расширения для работы с файлами" и все локальные файлы тебе станут доступны! И может быть не только тебе ;)
4 MAPATNK2
 
naïve
26.05.21
13:19
(3) Т.е. данные сохраняются на веб сервере, если я пишу такой код:

        ФайлTXT    = Новый ТекстовыйДокумент;
    ФайлTXT.УстановитьТекст(ТекстовыеДанные);
    ФайлTXT.Записать(
    Объект.СсылкаНаФайл + "\НоменклатураОстаткиИЦены.txt", // путь для сохранения
    КодировкаТекста.UTF8, // кодировка
    Символы.ВК + Символы.ПС // разделитель строк
    );


Но проблема в том, что нам облако не позволит выгружать что либо к ним на сервер. Нам необходимо выгружать все локально, на наш пк.
Может кто нибудь описать, как мне правильно сохранить тектовый файл программно из базы через при подключении через веб клиент?
5 MAPATNK2
 
naïve
26.05.21
14:15
В общем файл на сервер сохранить нельзя. Можно ли как то записать во временное харнилище файл в виде текстового документа, а потом его забрать на клиент?
6 MAPATNK2
 
naïve
26.05.21
14:48
&НаКлиенте
Процедура ВыгрузитьДанные(Команда)
    
    СтруктураДан = ВыгрузитьДанныеНаСервере();
    
    ФайлTXT    = Новый ТекстовыйДокумент;
    ФайлTXT.УстановитьТекст(СтруктураДан.ТекстовыеДанные);
    
    ФайлTXT2 = Новый ТекстовыйДокумент;
    ФайлTXT2.УстановитьТекст(СтруктураДан.ТекстовыеДанныеСПроверкой);
    
    Адрес = ВыгрузкаДанныхЛокально(ФайлTXT);
    ПолучитьФайл(Адрес, "C:\Users\User\Desktop\Apple\тестирование\from_server.txt");

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

Функция ВыгрузкаДанныхЛокально(Данные)
    
    ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
    Данные.Записать(ИмяПромежуточногоФайла);
    Возврат ИмяПромежуточногоФайла;    
    
КонецФункции

Делал так, пишет, что "Неправильный путь к файлу '/file://C:\Users\User\AppData\Local\Temp\v8_83BC_28.txt'"
7 MAPATNK2
 
naïve
26.05.21
14:49
Файл C:\Users\User\AppData\Local\Temp\v8_83BC_28.txt   есть и в нем нужная инфа.
8 MAPATNK2
 
naïve
26.05.21
14:55
Почему процедура ПолучитьФайл не работает тут...не пойму.
9 MAPATNK2
 
naïve
26.05.21
21:02
Итак. Передача текстового файла с сервера на клиент и сохранение его на локальный ПК:

&НаКлиенте
Процедура     ВыгрузитьДанные(Команда)
    
    СтруктураДан = ВыгрузитьДанныеНаСервере();
    
    ФайлTXT    = Новый ТекстовыйДокумент;
    ФайлTXT.УстановитьТекст(СтруктураДан.ТекстовыеДанные);
    
    Адрес  = ВыгрузкаДанныхЛокально(ФайлTXT);
    ВыгрузитьНаЛокальныйПк(Адрес,"\ОстаткиИЦены.txt");
    
    ФайлTXT2 = Новый ТекстовыйДокумент;
    ФайлTXT2.УстановитьТекст(СтруктураДан.ТекстовыеДанныеСПроверкой);
    
    Если Объект.ПроверкаЗаполнения = Истина тогда
        Адрес1 = ВыгрузкаДанныхЛокально(ФайлTXT2);
        ВыгрузитьНаЛокальныйПк(Адрес1,"\Проверка.txt");
    КонецЕсли;
    
    ТекстСообщения    = "Выгрузка завершена!";
    КлючДанных        = Неопределено;
    Поле            = "";
    ПутьКДанным        = "";
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, КлючДанных, Поле, ПутьКДанным);
    
КонецПроцедуры

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

Функция     ВыгрузкаДанныхЛокально(Данные)
    
    ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
    Данные.Записать(ИмяПромежуточногоФайла);
    Возврат ИмяПромежуточногоФайла;    
    
КонецФункции

&НаКлиенте
Процедура     ВыполнитьПослеНеудачиПолученияФайлов(Информация, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
    
    ТекстСообщения    = "Ошибка!" + ДополнительныеПараметры;
    КлючДанных        = Неопределено;
    Поле            = "";
    ПутьКДанным        = "";
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, КлючДанных, Поле, ПутьКДанным);
    
КонецПроцедуры

&НаСервере
Процедура     ПолучитьДанныеФайла(АдресФайла, ПутьКФайлуНаСервере, РезультатПоискаФайла = "") Экспорт
    
    МассивФайлов = НайтиФайлы(ПутьКФайлуНаСервере);     
    Если МассивФайлов.Количество() > 0 Тогда    
        ПутьФайла = МассивФайлов[0].ПолноеИмя;    
        Попытка        
            ДанныеФайла = Новый ДвоичныеДанные(ПутьФайла);        
            ПоместитьВоВременноеХранилище(ДанныеФайла, АдресФайла);        
        Исключение        
            АдресФайла = Неопределено;
            РезультатПоискаФайла = " Не удалось прочитать файл на сервере!";
        КонецПопытки;
    Иначе
        АдресФайла = Неопределено;
        РезультатПоискаФайла = " На сервере не найден файл " + ПутьКФайлуНаСервере + "!";        
    КонецЕсли;
    
КонецПроцедуры // ПолучитьДанныеФайла