Задача:
Была написана небольшая конфигурация для ведения простенького учёта на планшете (android). Смотрины и тестирование решили провести на эмуляторе (чтобы в случае неудовлетворительного результата не тратиться на планшет). Посмотрели, повносили данные и вроде как решили положительно. Купили планшет, и захотелось сохранить внесенные на эмуляторе данные (данных немного, но хотелось). Так как “поделка” находилась в ещё непонятном состоянии, никаких механизмов выгрузки реализовано не было. Пошарив “яндекс” и/или “гугл” - выяснилось, что базы мобильной 1С есть ни что иное, как файлы 1Cv8.1CD, и находятся они тут:
\data\data\com.e1c.mobile\files\ … \xxxx-xxx …. xxxx\1Cv8.1CD
Неплохо бы его забрать с эмулятора и закинуть на рабочий планшет, заодно в будущем решить задачу бэкапа данных через яндекс диск, например, - с минимальными трудозатратами.
Проблема:
Заглянув “проводником” по указанному выше пути. ничего не обнаружим, и это понятно - нужен “root”. Рутирование устройства android - не вариант.
Решение:
Углубленно в особенности системы безопасности android вдаваться не будем, но отметим, что само приложение имеет доступы к файлам в “своей папке”, а 1С даже в мобильном варианте “умеет” вполне себе неплохо работать с файлами. Поэтому почему бы не написать конфигурацию, которая будет работать с файлами других конфигураций.
Создаём конфигурацию для мобильного приложения, создаем общую форму, размещаем на форме поле ввода для указания "папки обмена" и список значений для вывода найденных баз:
&НаКлиенте
Процедура ОбновитьСписокБаз()
СписокБаз.Очистить();
МасП = НайтиФайлы(
"/data/data/com.e1c.mobile/files/",
"*.1CD",
Истина
);
Для каждого СтрМ Из МасП Цикл
СписокБаз.Добавить(СтрМ.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПутьКПапке = "/sdcard/1cbackup"
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбновитьСписокБаз();
КонецПроцедуры
Создадим команду "Забрать базу" и "Восстановить базу"
&НаКлиенте
Процедура ЗабратьБазу(Команда)
Попытка
КопироватьФайл(
Элементы.СписокБаз.ТекущиеДанные.Значение,
ПутьКПапке + "/1Cv8.1CD"
);
Исключение
Сообщить("Ошибка копирования базы (" + ОписаниеОшибки()+")");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВостановитьБазу(Команда)
Если Вопрос("Востановить базу ?",РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Попытка
КопироватьФайл(
ПутьКПапке + "/1Cv8.1CD",
Элементы.СписокБаз.ТекущиеДанные.Значение
);
Исключение
Сообщить("Ошибка Востановления базы (" + ОписаниеОшибки()+")");
КонецПопытки;
КонецПроцедуры
Публикуем конфигурацию и добавляем приложение в 1С