Диалог сохранения файла для мобильного приложения
Как возможно реализовать возможность сохранения файла в мобильном приложении ?
Или хотя бы как вариант: если доступен сервер 1С по сети, то отадавал-бы данные туда и получал готовый файл.
Пока что у меня такой код:
Код этот без возможности указать путь сохранения
Или хотя бы как вариант: если доступен сервер 1С по сети, то отадавал-бы данные туда и получал готовый файл.
Пока что у меня такой код:
&НаКлиенте
Процедура СохранитьВФайлExcel(ТабДок)
Каталог = КаталогВременныхФайлов();
Попытка
УдалитьФайлы(Каталог,"tmp*.xls*");
Исключение
КонецПопытки;
Попытка
СоздатьКаталог(Каталог);
Имя = "tmp_"+Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd-чч-мм-сс")+".xls";
ИмяФайла = Каталог + Имя;
ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.TXT);
ЗапуститьПриложение(ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьВExcel(ТекстЗапроса,Отбор,Параметры) Экспорт
ТабДок = ВExcel(ТекстЗапроса,Отбор,Параметры);
СохранитьВФайлExcel(ТабДок)
КонецПроцедуры
ПоказатьКод этот без возможности указать путь сохранения
По теме из базы знаний
- Выбор файлов и каталогов на мобильном устройстве. Мобильная платформа 8.3
- Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)
- Тикеты - система учета задач/Service Desk в 1С (+ мобильное приложение)
- Работа с файлами (обычная и управляемая форма)
- Библиотека для работы с Bitrix24: живая лента, задачи, файлы и личные сообщения
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
// У меня так:
&НаКлиенте
Процедура ФайлИзХранилища(Команда)
Если ОбщегоНазначенияКлиент.ЭтоВебКлиент() тогда
// если веб-морда
ВыбратьФайлНаВебКлиентеПриВыгрузке();
Иначе
// Толстый, тонкий или мобильный клиент
ВыбратьФайлНаКлиентеПриВыгрузке();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаВебКлиентеПриВыгрузке()
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";
Адрес = ПоместитьРеквизитВовременноеХранилищеНаСервере();
НачатьПолучениеФайлаССервера(Адрес, ИмяФайла, ВыборКаталогаСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузке()
ДополнительныеПараметры = Новый Структура;
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ВыборКаталогаСохранения.ПолноеИмяФайла = ИмяФайла;
ВыборКаталогаСохранения.МножественныйВыбор = ложь;
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";
ОписаниеОповещенияДиалогаВыбора = Новый ОписаниеОповещения("ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ВыборКаталогаСохранения.Показать(ОписаниеОповещенияДиалогаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение(ВыбранныеЗначение, ДопПараметры) Экспорт
Если ВыбранныеЗначение = Неопределено или ВыбранныеЗначение.Количество()=0 тогда
Возврат;
КонецЕсли;
ИмяФайлаДляСохранения = ВыбранныеЗначение[0];
АдресВХ = ПоместитьРеквизитВовременноеХранилищеНаСервере();
ДД = ПолучитьИзВременногоХранилища(АдресВХ);
Если не ЗначениеЗаполнено(ДД) тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Данные не найдены");
ВОзврат;
КонецЕсли;
ДД.Записать(ИмяФайлаДляСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ФайлИзХранилища(Команда)
Если ОбщегоНазначенияКлиент.ЭтоВебКлиент() тогда
// если веб-морда
ВыбратьФайлНаВебКлиентеПриВыгрузке();
Иначе
// Толстый, тонкий или мобильный клиент
ВыбратьФайлНаКлиентеПриВыгрузке();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаВебКлиентеПриВыгрузке()
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";
Адрес = ПоместитьРеквизитВовременноеХранилищеНаСервере();
НачатьПолучениеФайлаССервера(Адрес, ИмяФайла, ВыборКаталогаСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузке()
ДополнительныеПараметры = Новый Структура;
ИмяФайла= объект.ИмяФайла;
ВыборКаталогаСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ВыборКаталогаСохранения.ПолноеИмяФайла = ИмяФайла;
ВыборКаталогаСохранения.МножественныйВыбор = ложь;
ВыборКаталогаСохранения.Заголовок = "Укажите каталог сохранения файла";
ОписаниеОповещенияДиалогаВыбора = Новый ОписаниеОповещения("ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ВыборКаталогаСохранения.Показать(ОписаниеОповещенияДиалогаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлНаКлиентеПриВыгрузкеЗавершение(ВыбранныеЗначение, ДопПараметры) Экспорт
Если ВыбранныеЗначение = Неопределено или ВыбранныеЗначение.Количество()=0 тогда
Возврат;
КонецЕсли;
ИмяФайлаДляСохранения = ВыбранныеЗначение[0];
АдресВХ = ПоместитьРеквизитВовременноеХранилищеНаСервере();
ДД = ПолучитьИзВременногоХранилища(АдресВХ);
Если не ЗначениеЗаполнено(ДД) тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Данные не найдены");
ВОзврат;
КонецЕсли;
ДД.Записать(ИмяФайлаДляСохранения);
КонецПроцедуры
У меня немного конфликтует код:
&НаКлиенте
Процедура СохранитьВФайл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)}: Процедура или функция с указанным именем не определена (ПоместитьРеквизитВовременноеХранилищеНаСервере)
АдресВХ = <<?>>ПоместитьРеквизитВовременноеХранилищеНаСервере(); (Проверка: Мобильное приложение-клиент)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот