Быстрое изменение кода без обновления конфы на мобильных приложениях 1С и не только

Публикация № 1102725

Программирование - Инструментарий

14
Отладка кода в андроид приложениях, кроме прямого пути через подключение отладки по http, возможна несколькими другими путями. Один из них мы и рассмотрим.

Для самой простой и быстро настраиваемой отладки кода предлагаю воспользоваться методом "Выполнить" и web-сервисом для размещения кода, который собственно будем выполнять. 

Создаем справочник "ХранилищеКода", в котором будем хранить код. Добавляем в него реквизиты для поиска "Модуль", "Процедура" и собственно реквизит для кода "ТекстМодуля".

Создаем простейший web-сервис. Добавляем в него одну операцию "GetModuleText" с двумя переменными "module","proc" (Имена объектов примерные, вы можете использовать любые). В операции прописываем процедуру:

Функция GetModuleText(module, proc)
	Если module="" ИЛИ proc="" Тогда
		Возврат ":)";
	КонецЕсли;
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ХранилищеКода.ТекстМодуля КАК ТекстМодуля
	|ИЗ
	|	Справочник.ХранилищеКода КАК ХранилищеКода
	|ГДЕ
	|	ХранилищеКода.Модуль = &Модуль
	|	И ХранилищеКода.Процедура = &Процедура");
	Запрос.УстановитьПараметр("Модуль",module);
	Запрос.УстановитьПараметр("Процедура",proc);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		ModuleText = Выборка.ТекстМодуля;
	Иначе
		ModuleText = Неопределено;
	КонецЕсли;
	Возврат ModuleText;
КонецФункции

И собственно все это дело публикуем на веб сервере.

 

В мобильном приложении для удобства подключения создаем WS-ссылку на web-сервис и вставляем процедуру получения этого кода:

Функция ПолучитьТекстПроцедуры(ИмяМодуля,ИмяПроцедуры) Экспорт
	
	ХранилищеКода = WSСсылки.CodeStorage.СоздатьWSПрокси("http://www.1с.ru","main","mainSoap",,,Новый ЗащищенноеСоединениеOpenSSL);
	ХранилищеКода.Пользователь = "User";
	ХранилищеКода.Пароль = "xххххххххххххх";
	ModuleText = ХранилищеКода.GetModuleText(ИмяМодуля,ИмяПроцедуры);
	
	Возврат ModuleText;
	
КонецФункции

И вызываем в процедурах и функциях которые хотим отладить:

Если Константы.ИспользоватьКодОтладки().Получить() Тогда
	ТекстМодуль = МодульОтладки.ПолучитьТекстПроцедуры("ОбщийКлиент","ОткрытьФайл");
	Выполнить(ТекстМодуль);
	Если НЕ ПустаяСтрока(ТекстМодуль) Тогда
		Возврат;
	КонецЕсли;
КонецЕсли;

В итоге при необходимости мы всегда можем этот код изменять налету, без необходимости пересобирать приложение. Кроме того, этот способ можно использовать не только для отладки, но и для работы (и не только с мобильным приложением), что бы оперативно обновлять код всех подключенных пользователей. Для работы в режиме офлайн достаточно добавить похожий справочник в мобильную конфигурацию и записывать в него код например при получении с сервера, или разово по нажатию кнопки. И если интернета нет, то просто получать и исполнять код, находящийся в локальном справочнике.

Проверено на платформе 8.3.13.1690.

14

Скачать файлы

Наименование Файл Версия Размер
Конфигурация для хранения кода с веб-сервисом (8.3.13.1690)
.cf 24,89Kb
02.08.19
0
.cf 24,89Kb Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Xershi 694 03.08.19 04:21 Сейчас в теме
Какой-то суррогат.
Для отладки без контекста мобильной платформы это не отладка. Как вы собрались геопозиционирование например отлаживать или работу мультимедиа?)
А вот идея выполнения прозвольного кода без пересборки приложение самое то.
2. avalakh 312 03.08.19 09:31 Сейчас в теме
Можно вывести значения с помощью метода "Сообщить" или "СообщениеПользователю". Согласен сложновато для каких то крупных проектов, но если нужно какие то мелочи протестить и поправить, то помогает быстро проверить сделанные изменения, перед тем как их вносить в конфигурацию
3. L0z4 03.08.19 16:11 Сейчас в теме
это хорошо проходит и используется на системах которые должны работать 24*7 и не всегда способны обновляться динамически.
А вот для мобильных приложений это использовать странно.
во-первых, это не отладка, а способ багфикса.
во-вторых, метод "выполнить" как я помню недоступен на iOS да и пересобрать приложение и отправить его пользователям это 5 минут.
4. avalakh 312 03.08.19 16:14 Сейчас в теме
(3) Возможно. Просто изначально реализовано было в рамках мобильного приложения, поэтому об этом написано в таком виде. Вариантов использования масса на самом деле
5. iliabvf 04.08.19 06:31 Сейчас в теме
Вот предложили бы вы сохраненние модулей в виде файлов, упорядоченных по какой-то логике, выполнение их в контексте мобильной платформы, возможность построчной отладки.
А так тут заголовок статьи по сути не соответствует решению.
Оставьте свое сообщение