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



Отладка кода в андроид приложениях, кроме прямого пути через подключение отладки по 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.

5 Comments

  1. Xershi

    Какой-то суррогат.

    Для отладки без контекста мобильной платформы это не отладка. Как вы собрались геопозиционирование например отлаживать или работу мультимедиа?)

    А вот идея выполнения прозвольного кода без пересборки приложение самое то.

    Reply
  2. avalakh

    Можно вывести значения с помощью метода «Сообщить» или «СообщениеПользователю». Согласен сложновато для каких то крупных проектов, но если нужно какие то мелочи протестить и поправить, то помогает быстро проверить сделанные изменения, перед тем как их вносить в конфигурацию

    Reply
  3. L0z4

    это хорошо проходит и используется на системах которые должны работать 24*7 и не всегда способны обновляться динамически.

    А вот для мобильных приложений это использовать странно.

    во-первых, это не отладка, а способ багфикса.

    во-вторых, метод «выполнить» как я помню недоступен на iOS да и пересобрать приложение и отправить его пользователям это 5 минут.

    Reply
  4. avalakh

    (3) Возможно. Просто изначально реализовано было в рамках мобильного приложения, поэтому об этом написано в таком виде. Вариантов использования масса на самом деле

    Reply
  5. iliabvf

    Вот предложили бы вы сохраненние модулей в виде файлов, упорядоченных по какой-то логике, выполнение их в контексте мобильной платформы, возможность построчной отладки.

    А так тут заголовок статьи по сути не соответствует решению.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *