Диалог сохранения файла для мобильного приложения

1. user1345957 12.06.20 15:26 Сейчас в теме
Как возможно реализовать возможность сохранения файла в мобильном приложении ?
Или хотя бы как вариант: если доступен сервер 1С по сети, то отадавал-бы данные туда и получал готовый файл.

Пока что у меня такой код:
&НаКлиенте
Процедура СохранитьВФайлExcel(ТабДок)
	Каталог = КаталогВременныхФайлов();
	Попытка
		УдалитьФайлы(Каталог,"tmp*.xls*");
	Исключение
	КонецПопытки;
	Попытка
		СоздатьКаталог(Каталог); 
		Имя = "tmp_"+Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd-чч-мм-сс")+".xls";
		ИмяФайла =  Каталог + Имя; 
		ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.TXT);
		ЗапуститьПриложение(ИмяФайла);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СохранитьВExcel(ТекстЗапроса,Отбор,Параметры) Экспорт
	ТабДок = ВExcel(ТекстЗапроса,Отбор,Параметры);
	СохранитьВФайлExcel(ТабДок)
КонецПроцедуры
Показать


Код этот без возможности указать путь сохранения
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. simonovich 12.06.20 16:34 Сейчас в теме
// У меня так:
&НаКлиенте
Процедура ФайлИзХранилища(Команда)
Если ОбщегоНазначенияКлиент.ЭтоВебКлиент() тогда
// если веб-морда
ВыбратьФайлНаВебКлиентеПриВыгрузке();
Иначе
// Толстый, тонкий или мобильный клиент
ВыбратьФайлНаКлиентеПриВыгрузке();
КонецЕсли;

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


&НаКлиенте
Процедура ВыбратьФайлНаВебКлиентеПриВыгрузке()
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";

Адрес = ПоместитьРеквизитВовременноеХранилищеНаСервере();

НачатьПолучениеФайлаССервера(Адрес, ИмяФайла, ВыборКаталогаСохранения);
КонецПроцедуры



&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузке()
ДополнительныеПараметры = Новый Структура;
ИмяФайла= объект.ИмяФайла;

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

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


&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение(ВыбранныеЗначение, ДопПараметры) Экспорт

Если ВыбранныеЗначение = Неопределено или ВыбранныеЗначение.Количество()=0 тогда
Возврат;
КонецЕсли;

ИмяФайлаДляСохранения = ВыбранныеЗначение[0];
АдресВХ = ПоместитьРеквизитВовременноеХранилищеНаСервере();

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

КонецПроцедуры
4. user1345957 12.06.20 16:51 Сейчас в теме
(2) мне похоже ваш код надо было вставить в общий модуль "ОбщегоНазначения"
и я ваш код в данный модуль вставил. А были ли заданы еще какие-то реквизиты на форме ?
5. user1345957 12.06.20 19:01 Сейчас в теме
(2)извините, я не понял куда именно вы вставляли код ? Создавали ли реквизиты и процедуры на форме ?
Ведь мой код находится в обработке.
Поэтому не понимая что вы именно сделали и куда вставили код, у меня ничего не работает(((
6. user1345957 13.06.20 11:16 Сейчас в теме
(2)

&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузке()
ДополнительныеПараметры = Новый Структура;
ИмяФайла= объект.ИмяФайла;


У меня не бсп
3. user1345957 12.06.20 16:41 Сейчас в теме
У меня немного конфликтует код:

&НаКлиенте
Процедура СохранитьВФайлExcel(ТабДок)
	Каталог = КаталогВременныхФайлов();
	Попытка
		УдалитьФайлы(Каталог,"tmp*.xls*");
	Исключение
	КонецПопытки;
	Попытка
		СоздатьКаталог(Каталог); 
		Имя = "tmp_"+Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd-чч-мм-сс")+".xls";
		ИмяФайла =  Каталог + Имя; 
		ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS97);//только для пк-версии. На мобильной поддерживаются лишь mxl u pdf
		ЗапуститьПриложение(ИмяФайла);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СохранитьВExcel(ТекстЗапроса,Отбор,Параметры) Экспорт
	ТабДок = ВExcel(ТекстЗапроса,Отбор,Параметры);
	СохранитьВФайлExcel(ТабДок)
КонецПроцедуры

&НаСервере
Процедура СформироватьОтборы(РезОтбор,ЭлементыОтбор, Родитель = Неопределено) Экспорт
	Если Родитель <> Неопределено Тогда
		Для каждого Эл  Из ЭлементыОтбор Цикл
			НовыйЭл = Родитель.Элементы.Добавить(Тип(Эл));
			ЗаполнитьЗначенияСвойств(НовыйЭл,Эл);
			Если Тип(Эл)= Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
				СформироватьОтборы(РезОтбор,Эл.Элементы, НовыйЭл);
			КонецЕсли
		КонецЦикла;
		Возврат;
	КонецЕсли;
	Для Каждого ЭлементОтбора Из ЭлементыОтбор Цикл 
		Если ЭлементОтбора.Использование Тогда
			ТипЭлементаОтбора = Тип(ЭлементОтбора);
			Если ТипЭлементаОтбора = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
				НовыйОтбор = РезОтбор.Добавить(ТипЭлементаОтбора); 
				ЗаполнитьЗначенияСвойств(НовыйОтбор,ЭлементОтбора);
			ИначеЕсли ТипЭлементаОтбора = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
				НовыйОтбор = РезОтбор.Добавить(ТипЭлементаОтбора); 
				ЗаполнитьЗначенияСвойств(НовыйОтбор,ЭлементОтбора);
				СформироватьОтборы(РезОтбор,ЭлементОтбора.Элементы, НовыйОтбор);
			КонецЕсли;	
		КонецЕсли; 
	КонецЦикла; 
КонецПроцедуры



//---------------------------------------------------------------------------------------
// Сохранение/Восстановление значений параметров
&НаСервере
Процедура СохранитьНастройкиНаСервере()
	//Настройки = Новый Структура("ПодстрокаПоиска");
	//Настройки.ПодстрокаПоиска = ПодстрокаПоиска;
	//ИмяОбработки =  РеквизитФормыВЗначение("Объект");
	//
	//ХранилищеОбщихНастроек.Сохранить(ИмяОбработки,"Настройки",Настройки);
КонецПроцедуры

&НаСервере
Процедура ВосстановитьНастройкиНаСервере()
	//Попытка
	//	ИмяОбработки =  РеквизитФормыВЗначение("Объект");
	//	Настройки = ХранилищеОбщихНастроек.Загрузить(ИмяОбработки, "Настройки");
	//	ПодстрокаПоиска = ?(ЗначениеЗаполнено(Настройки.ПодстрокаПоиска),Настройки.ПодстрокаПоиска,"");
	//Исключение
	//КонецПопытки;
КонецПроцедуры


//---------------------------------------------------------------------------------------
// Функция возвращает табличный документ, сформированный исходя из переданных
// параметров динамического списка:
//    ТекстЗапроса
//    Отбор - коллекция отборов, установленных для динамического списка
//    Параметры - параметры запроса
&НаСервере
Функция ВExcel(ТекстЗапроса,Отбор,Параметры) Экспорт
	ТабДок = Новый ТабличныйДокумент;
	// Сформируем структуру колонок
	Запрос = Новый Запрос;
	Для каждого Парам Из Параметры.Элементы Цикл
		Запрос.УстановитьПараметр(Парам.Параметр,Парам.Значение); 
	КонецЦикла;
	Запрос.Текст = СтрЗаменить(ТекстЗапроса,"ВЫБРАТЬ","ВЫБРАТЬ ПЕРВЫЕ 1");
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	СКД = Новый СхемаКомпоновкиДанных;
	ИД = СКД.ИсточникиДанных.Добавить();
	ИД.Имя = "ИсточникДанных";
	ИД.ТипИсточникаДанных = "Local";
	НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	НаборДанных.Имя = "НаборДанных1";
	НаборДанных.Запрос = ТекстЗапроса;
	НаборДанных.ИсточникДанных = "ИсточникДанных";
	
	// Добавим параметры запроса в СКД
	Если Параметры.Элементы.Количество() > 0 Тогда
		Шрифт = Новый Шрифт("Arial",10);
		Секция = ТабДок.ПолучитьОбласть("R1");
		Область1 = Секция.Область("R1C1");
		Область2 = Секция.Область("R1C2");
		Область1.Шрифт = Шрифт;
		Область2.Шрифт = Шрифт;
		Область1.Текст = "Параметры запроса:";		
		ТабДок.Вывести(Секция);
		Область1.Текст = "";		
		ЭлементыСКД = СКД.ВариантыНастроек[0].Настройки.ПараметрыДанных.Элементы;
		Для каждого Парам Из Параметры.Элементы Цикл
			НовыйПарам =  ЭлементыСКД.Добавить();
			НовыйПарам.Параметр = Парам.Параметр;
			НовыйПарам.Значение = Парам.Значение;
			НовыйПарам.Использование = Истина;
			
			Область2.Текст = Строка(Парам.Параметр)+" = " + Строка(Парам.Значение);		
			ТабДок.Вывести(Секция);
		КонецЦикла;
	КонецЕсли;
	
	Для каждого Колонка Из ТЗ.Колонки Цикл
		Имя = Колонка.Имя;
		Поле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Поле = Имя;
		Поле.ПутьКДанным = Имя;
		Поле.Заголовок = Имя;
	КонецЦикла; 
	
	Настройки = СКД.НастройкиПоУмолчанию;
	ГруппировкаДет = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ГруппировкаДет.Использование = Истина;
	ВыбранныеПоля = ГруппировкаДет.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	ВыбранныеПоля.Использование = Истина;
	
	//Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВыводитьПараметрыДанных", ТипВыводаТекстаКомпоновкиДанных.Выводить);
	
	
	Для каждого Колонка Из ТЗ.Колонки Цикл
		Имя = Колонка.Имя;
		ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранныеПоля.Использование = Истина;
		ВыбранныеПоля.Заголовок = Имя;
		ВыбранныеПоля.Поле = Новый ПолеКомпоновкиДанных(Имя);	
	КонецЦикла; 
	
	ЭлементыОтбораСКД = Настройки.Отбор.Элементы;
	СформироватьОтборы(ЭлементыОтбораСКД,Отбор.Элементы);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	//МакетКомпоновки = КомпоновщикМакета.Выполнить( СКД , СКД.НастройкиПоУмолчанию ,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	МакетКомпоновки = КомпоновщикМакета.Выполнить( СКД , Настройки ,,, Тип("ГенераторМакетаКомпоновкиДанных"));
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать( МакетКомпоновки ,  );
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ТабДок);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	Возврат ТабДок;
КонецФункции

&НаСервере
Функция ПолучитьТекстЗапроса()
	Возврат Список.ТекстЗапроса;
КонецФункции

&НаСервере
Функция ПолучитьОтбор()
	Возврат Список.Отбор;
КонецФункции

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

&НаКлиенте
Процедура КомандаExcel(Команда)
	СохранитьВExcel(ПолучитьТекстЗапроса(),ПолучитьОтбор(),ПолучитьПараметры());
КонецПроцедуры

&НаСервере
Процедура ОбновитьПараметрПодстрокаПоиска()
	Список.Параметры.УстановитьЗначениеПараметра("ПодстрокаПоиска",  ПодстрокаПоиска);
КонецПроцедуры

&НаКлиенте
Процедура ПодстрокаПоискаПриИзменении(Элемент)
	ОбновитьПараметрПодстрокаПоиска();
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ВосстановитьНастройкиНаСервере();
	//Список.Параметры.УстановитьЗначениеПараметра("ПодстрокаПоиска",  ПодстрокаПоиска);
КонецПроцедуры

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

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

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

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


&НаКлиенте
Процедура ВыбратьФайлНаВебКлиентеПриВыгрузке()
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";

Адрес = ПоместитьРеквизитВовременноеХранилищеНаСервере();

НачатьПолучениеФайлаССервера(Адрес, ИмяФайла, ВыборКаталогаСохранения);
КонецПроцедуры



&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузке()
ДополнительныеПараметры = Новый Структура;
ИмяФайла= объект.ИмяФайла;

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

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


&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение(ВыбранныеЗначение, ДопПараметры) Экспорт

Если ВыбранныеЗначение = Неопределено или ВыбранныеЗначение.Количество()=0 тогда
Возврат;
КонецЕсли;

ИмяФайлаДляСохранения = ВыбранныеЗначение[0];
АдресВХ = ПоместитьРеквизитВовременноеХранилищеНаСервере();

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

КонецПроцедуры
Показать




{Обработка.ОбработкаДинСписок.Форма.Форма.Форма(282,11)}: Процедура или функция с указанным именем не определена (ПоместитьРеквизитВовременноеХранилищеНаСервере)
АдресВХ = <<?>>ПоместитьРеквизитВовременноеХранилищеНаСервере(); (Проверка: Тонкий клиент)
{Обработка.ОбработкаДинСписок.Форма.Форма.Форма(235,6)}: Переменная не определена (ОбщегоНазначенияКлиент)
Если <<?>>ОбщегоНазначенияКлиент.ЭтоВебКлиент() тогда (Проверка: Мобильное приложение-клиент)
{Обработка.ОбработкаДинСписок.Форма.Форма.Форма(286,1)}: Переменная не определена (ОбщегоНазначенияКлиентСервер)
<<?>>ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Данные не найдены"); (Проверка: Мобильное приложение-клиент)
{Обработка.ОбработкаДинСписок.Форма.Форма.Форма(252,9)}: Процедура или функция с указанным именем не определена (ПоместитьРеквизитВовременноеХранилищеНаСервере)
Адрес = <<?>>ПоместитьРеквизитВовременноеХранилищеНаСервере(); (Проверка: Мобильное приложение-клиент)
{Обработка.ОбработкаДинСписок.Форма.Форма.Форма(282,11)}: Процедура или функция с указанным именем не определена (ПоместитьРеквизитВовременноеХранилищеНаСервере)
АдресВХ = <<?>>ПоместитьРеквизитВовременноеХранилищеНаСервере(); (Проверка: Мобильное приложение-клиент)
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот