gifts2017

Сказ о том, как мы мобильное приложение писали. Часть 1. Двойной заголовок

Опубликовал Вадим Невзоров (vadnevzorov) в раздел Программирование - Мобильные приложения

Делимся опытом, как мы обходим ограничения мобильной платформы.

Введение

Мы разработали простое приложение для мобильной торговли – Контейнер. Приложение обладает множеством функций, с которыми вы можете ознакомиться на странице Google Play или App Store.

Почему “Контейнер”? Под Одессой (да, мы одесситы) расположен промтоварный рынок 7-й километр. Поначалу основная торговля велась из контейнеров, из которых были сделаны целые улицы. На сегодняшний день рынок превратился в крупнейшую торговую площадку Европы – теперь там находится порядка 15 тысяч торговых и складских объектов и работают около 60 тысяч человек, из которых 10 тысяч – частные предприниматели. Многие из них имеют как торговые точки на рынке, так и магазины в Одессе. Ежедневно рынок посещают около 200 тысяч человек, из которых минимум четверть – это оптовые покупатели.

Улица Розовая. Больше колоритных фото - здесь

Вот для этого контингента и делалось приложение.

В процессе разработки нам очень не хватало возможностей платформы. Это касается как глобальных недостатков (нет возможности работать с zip файлами, сохранять в pdf и xls, печатать на принтер, работать со сканерами ШК), так и мелочей (нельзя сделать ссылку неподчеркнутой, отловить событие поворота экрана и длительного нажатия, расположить элементы на форме так, как нам хочется и т.п.). Конечно без этих мелочей программа всё равно бы работала, но нашей целью было создание действительно простого и удобного приложения, чтобы даже те, кто ни разу не видел 1С, могли в нем разобраться. И сейчас, выпуская первый релиз, мы можем с уверенностью сказать, что выжали из платформы всё, и даже немножко больше.

Сто процентов любви –
Это грубый подсчет,
Сто процентов любви,
И немножко еще...

В этом цикле статей мы хотим поделиться решением проблем и ограничений, с которыми столкнулись. Надеемся, это сделает ваши приложения еще более красивыми и функциональными. :)

Проблема

Любой, кто хоть раз запускал приложение, написанное на платформе 1С, сталкивался с двойным заголовком.

 

Самое плохое в том, что:

  1. Он не несет никакой смысловой нагрузки, так как всегда дублирует заголовок приложения;
  2. Его невозможно скрыть;
  3. Его невозможно изменить;
  4. Он забирает целую строку формы, что особенно критично на небольших экранах.
Вопрос про заголовок даже задавали на официальном форуме разработчиков, на что был получен ответ:

Прошло более полутора лет. Ошибка осталась.

Решение

Признаюсь, у нас не было мыслей, как можно обойти это ограничение. Пробовали убрать автозаголовок у формы, а сам заголовок оставить пустым – не помогло. На этом идеи закончились.

Немного коснусь функционала нашего приложения. Мы решили, что раз уж на заголовок повлиять нельзя, то будем выводить туда полезную информацию – например, вместо “Новый Закупка товаров” – “Закупка товаров от 10.01.2015“. На Рабочем столе мы выводим курсы валют, а если их нет – пишем текущую дату в формате “Сегодня 10 января (суббота)”. При создании базы можно указать, что будет использоваться только одна валюта. Но если добавить еще одну валюту и установить курсы – то заголовок обновится, и вместо даты будут показаны курсы.

И тут, в процессе тестирования нашего приложения, я замечаю следующую картину:

Все в шоке! Как так получилось, почему заголовки стали отличаться? Начали разбираться. И вот к чему мы пришли: если на форме изменить заголовок после ее открытия, то меняется только нижний заголовок; заголовок приложения остается тем же.

Бинго! В событии ПриОткрытии мы навесили обработчик ожидания, который через 0,1 секунды вызывал процедуру установки нового заголовка – таким образом, при открытии вверху формы у нас было две разных надписи.

Но радость длилась недолго – как оказалось, этот способ работает только для рабочего стола. В остальных формах вместе с заголовком формы меняется и заголовок приложения. Это достижение вдохновило нас на дальнейшие поиски. Мы задумались о типовых настольных конфигурациях и вспомнили один момент. Ведь у настольной программы тоже есть заголовок (например, “Управление торговлей, редакция 11.1”). Но там кроме названия выводится еще и имя пользователя. Как они это делают?

Порывшись в коде, мы нашли интересную функцию – УстановитьКраткийЗаголовокПриложения. Смотрим в синтаксис–помощнике:

Добавляет краткий заголовок приложения. Текст размещается в заголовке окна приложения перед текстом системного заголовка и автоматически отделяется точкой.

Пробуем вывести текст “Проверка”:

Почти то, что нужно! Но вместе с нашим текстом выводится название конфигурации. А что, если после нашей строки добавить много пробелов, чтобы текст уехал за пределы экрана? Пробуем:

Хмм, ничего не изменилось. Видимо умная 1С считает, что пробелы не нужны, поэтому их обрезает. Думаю, вы уже догадались, что здесь можно сделать. :) Добавим в конце пробелов какой–то символ, например, точку:

Вот оно!

В 

Что особенно радует – метод работает на клиенте и при использовании не вызывает сервер, поэтому форма не перерисовывается. Правда есть небольшой побочный эффект – заголовок заканчивается тремя точками. Также метод не работает на iOS – он в принципе игнорируется. Мы зарегистрировали ошибку, и надеемся, что в одной из следующих версий она будет исправлена.

Вывод

Чтобы изменить заголовок приложения, следует воспользоваться методом УстановитьКраткийЗаголовокПриложения(). Иногда он сбрасывается (например, в формах выбора), поэтому рекомендуется устанавливать его каждый раз при открытии формы. Метод выполняется на клиенте без обращения к серверу, поэтому не вызывает перерисовки формы.

Недостатки:

  • В заголовке в самом конце появляется троеточие.
  • Метод игнорируется на iOS (зарегистрирована ошибка 30016576).

Послесловие

Вот так мы боремся с ограничениями в мобильной платформе. Не забывайте про нас. :) В следующей статье мы расскажем, как сделали невозможное – обработку события длительного нажатия на строку табличной части. И конечно же скачивайте наше приложение Контейнер (Googlу Play и App Store) - мы будем рады вашим замечаниям и пожеланиям.

Вадим Невзоров
ХВОЯ интегра, Одесса

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Константин Юрин (kostyaomsk) 01.02.15 08:41
2. Дмитрий Шерстобитов (DitriX) 01.02.15 14:27
Только вот прикол в том, что этот заголово таки можно скрыть :) И сделать запрет поворта экрана только для приожения 1С и много чего еще :)

А так - очень интересно вышло. Жду продолжений.
3. Геннадий Николаев (genayo) 01.02.15 14:39
(2) Тогда расскажите как скрыть заголовок, эта проблема достаточно многих волнует...
4. Ruslan (flyer) 01.02.15 18:31
Добейтесь пожалуйста от 1с чтобы с этим заголовком что нибудь сделали. низкий поклон будет Вам!
5. Дмитрий Шерстобитов (DitriX) 01.02.15 19:02
(3) Та очень просто, надо всего лишь добавить один тег в андроид манифест в момент компиляции.
Точно не подскажу, лень сейчас ковырять курсы, но тег отвечает за размеры приложения в области экрана, там же можно сделать, что бы приложение было вообще на весь экран, т.е. даже без верхней строки состояния андроида (как при запуске) или же просто убрать верхний дублирующий заголовок.

Та и в свете выхода 8.3.6 - не имеет смысла даже поднимать эти вопросы.
Но если прям очень очень надо, то могу конечно и поковырять это дело и вспомнить.

6. Дмитрий Шерстобитов (DitriX) 01.02.15 19:12
(3) о, вроде вспомнил по закладкам в браузере :)
android:theme="@android:style/Theme.NoTitleBar"
Вот это вам и надо.
Только вставить это надо в область:
activity
android:name="com.e1c.mobile.FormImpl"
Что бы применялось оно к формам 1С.

Вообще странно, что 1С не хотят прописать одну строчку в манифест. Но с другой стороны - и самим добавить ее не сложно :) А там еще куча плюшек всяких может быть :)
MRAK; clev; Redokov; genayo; vadnevzorov; +5 Ответить 2
7. Галина Орехова (orehova123) 01.02.15 20:28
Интересная статья. Только начинаю заниматься мобильной платформой, пишите еще, буду ждать
8. script Мальчинко (script) 02.02.15 01:11
Я конечно люблю поковырятся, но мне кажется что сейчас проще разобраться в разработке приложений на андроид и создать нормальное мобильное приложение, чем мучатся с огрызками от 1С, ну по крайней мере в ближайшие несколько лет.
yad; CrazyCD; AlX0id; KonstB; WhiteOwl; Persempre; rayastar; badboychik; eugeniezheludkov; +9 Ответить 2
9. Сергей (Che) Коцюра (CheBurator) 02.02.15 01:27
Попробуйте в заголовок не пробел впихнуть, а неразрывный пробел - символ с кодом 160 (0160)
10. Алексей Роза (DoctorRoza) 02.02.15 08:19
Следующее Ваше приложение будет называться - Привоз! :)
CrazyCD; Tangram; vlad.frost; AllexSoft; radomir; vadnevzorov; eugeniezheludkov; +7 Ответить 1
11. Марат Настоящий (rayastar) 02.02.15 11:18
(8) script, полностью согласен. мобильная платформа это как битрикс для 1с, в том смысле, что продукт негибкий
12. Алексей Белоусов (AllexSoft) 02.02.15 13:38
интересно, а как убрать заголовок то в в десктопной версии ?) вот задумался.. там манифеста как на андроиде нет ))
13. Алексей Шачнев (efin) 02.02.15 16:32
(6) DitriX, Подскажите, пожалуйста, где найти файл манифеста, который нужно править. Я знаю что это и зачем, но не могу найти его, чтобы изменить в 1С Моб приложение. что может быть если манифест подправил, собрал apk (в отладчике проверил что сборка идет с нужным манифестом), однако в приложении ничего не изменилось?
14. Дмитрий Шерстобитов (DitriX) 02.02.15 18:12
(13) а вы манифест где правили?
15. Дмитрий Шерстобитов (DitriX) 02.02.15 18:16
(8) а вы попробуйте для начала :)
По моему опыту - я три месяца потратил на обучание джаве, что бы написать хоть что-то, за эти 3 месяца мне не платили, скорость доработки хотелок - раз в 10 больше по времени, тем более что почти все хотят "как в 1С", так что - нет, не легче.

lx@; Rustig; +2 Ответить
16. Алексей Шачнев (efin) 02.02.15 18:39
(14) DitriX, Я поправил манифест в архиве с мобильной платформой, запаковал обратно как было и загрузил в сборщик мобильных приложений. Проверил, что сборка идет именно с "моей" версией платформы.
17. Дмитрий Завьялов (Demonic_NEW) 02.02.15 18:45
А в какую сторону планируется расширение? Ведь оно же планируется?
Планируется добавить возможность выгрузки в файл, который можно подцепить, скажем, на ПК - в основную версию базы?
Или подгрузка в каком-либо виде файла с закупками от поставщика. Через те же облачные диски...
18. Дмитрий Шерстобитов (DitriX) 02.02.15 18:56
(16) ок, щас запилю вам свою версию конфы по сборке, и там увидите.
19. Alexei Snitkovski (Snitkovski) 02.02.15 18:59
Скажите пожалуйста, а у вас на Контейнерах все только русскоговорящие работают?
Когда я там бывал во времена оны (да-а-авно-о-о дело было...) там было очень много "не наших" среди торговцев...
Собственно, вопрос про многоязычность приложения - на каких языках сегодня имеется интерфейс у "Контейнера" ?
20. Дмитрий Шерстобитов (DitriX) 02.02.15 19:33
(16) фиг его знает. Я собрал - у меня все вышло. Вот сюда приложу apk - проверите.
Попробуйте тогда в другие секции активити засунуть, та что выше идет той, которую я указал.

Прикрепленные файлы:
wer.wer.bbb-arm.apk
21. Геннадий Николаев (genayo) 02.02.15 21:30
(6) Спасибо, будем пробовать...
22. Ruslan (flyer) 03.02.15 08:44
а для ios как? мне ведь и там надо. за подсказку спасибо!
23. Вадим Невзоров (vadnevzorov) 03.02.15 14:01
(9) CheBurator, пробовали, и неразрывный пробел, и символ табуляции, и перенос каретки - эффект тот же самый. Так что решили уже сделать по-простому - обычными пробелами.
24. Вадим Невзоров (vadnevzorov) 03.02.15 14:02
(10) DoctorRoza, с фирменной единицей измерения - привозный килограмм.))
25. Вадим Невзоров (vadnevzorov) 03.02.15 14:03
(17) Demonic_NEW, Расширение планируется в разные стороны. Если вы спрашиваете конкретно про обмены - то он планируется через универсальный формат, с помощью которого можно будет обмениваться данными как с типовыми конфигурациями, так и с самописными.
26. Вадим Невзоров (vadnevzorov) 03.02.15 14:04
(19) Snitkovski, планируется перевод на английский + основные языки обитателей ареала 7км, в число которых входит молдавский, но не входит румынский. Однако мы можем пересмотреть наше решение при определенном уровне лоббирования ;)
Snitkovski; +1 Ответить 1
27. Вадим Невзоров (vadnevzorov) 03.02.15 14:06
(22) flyer, ну вот для iOS пока не нашли способа. Она игнорирует метод, который меняет заголовок - но так как 1С признала это ошибкой, то будем надеяться, что в ближайших версиях поправят.
28. Алексей Шачнев (efin) 03.02.15 16:08
(20) DitriX, Спасибо, все заработало, в т.ч. запрет смены ориентации экрана в приложении.
29. Дмитрий Шерстобитов (DitriX) 03.02.15 21:40
(28) ну вот и отлично. Только вы хоть уточните что вы там сделали, для наследия, так сказать :)
30. Alexei Snitkovski (Snitkovski) 03.02.15 23:12
(26) vadnevzorov,
"в число которых входит молдавский, но не входит румынский"
скажите пожалуйста, а как вы их различаете? 8-)
дело в том, что не все молдаване с румынами различают, а вы знаете какой-то секрет? 8-)))
а если серьезно - готовы не только полоббировать, но и поспособствовать! - обращайтесь!

и ждем с нетерпением следующих постов! ;-)
31. Вадим Латышев (pro1c@inbox.ru) 04.02.15 20:42
(2) DitriX,

Огромная ошибка повторять десктопный интерфейс на мобильной платформе!
Вся тонкость "взлета" мобильного приложения, как раз и состоит в том, чтобы сделать так, чтобы удобно было
на смартфонах и планшетах работать. В этом успех! Кто этого не понимает, обречен на неудачу! При любом функционале!
Для "чувствительных" пользователей, например, iOS - если приложение вываливается из привычного UI, даже смотреть не
будут!
Для Android пора уже посмотреть в сторону material design, еще чуть чуть и пользователи андрюши перестанут смотреть
на такие вот самоделки.
Набивая шишки и спотыкаясь делюсь лекарством от всего этого:
- Android ---> Java
- iOS ---> Objective-C, Swift
И только так. Все стальное - потеря времени.
32. Алексей Белоусов (AllexSoft) 05.02.15 10:07
(31) pro1c@inbox.ru, мне лично как пользователю Android в принципе все равно на дизайн и рюшки, для бизнес-приложений.. главное чтобы оно выполняло свои функции, было продумано и быстро
gigapevt; w-divin; +2 Ответить 2
33. Дмитрий Шерстобитов (DitriX) 05.02.15 11:54
(31) а почему это сообщение адресовано мне?
А в целом - посмотрим что будет с 8.3.6, так как мы сейчас смотрим на продукт, который начал свое развите, когда еще MD и в проекте не было, а стандарты менялись каждый месяц :)

(32) и то верно, есть ряд задач которые надо решить, а интерфейс, как бы это пахабно не звучало - не столь важен, во всяком случае - интерфейс служебных программ банков - еще то эпик фейл, но им пофиг как то на все это :) Ибо бизнес-есть бизнес.
34. Вадим Латышев (pro1c@inbox.ru) 05.02.15 13:11
(33) DitriX,

речь то не об интерфейсе, а об юзабилити.
для бизнеса, так для бизнеса... хотя ориентир все таки, по мне, на конечных пользователей должен быть!
Некоторые прекрасно совмещают эти вещи. (Inbox, Evernote)
http://habrahabr.ru/post/213097/
35. Вадим Латышев (pro1c@inbox.ru) 05.02.15 13:12
(32) AllexSoft,
"...было продумано и быстро..." - это не только логика и функционал.
36. Алексей Белоусов (AllexSoft) 05.02.15 13:31
(35) pro1c@inbox.ru, ну так и причем тут инструмент которым ты напишешь данный функционал? я не говорю что мобильные приложения в 1С это прям идеал, нет,они еще довольно сырые, но отметать 1С как инструмент разработки мобильных приложений ДЛЯ БИЗНЕСА тоже нельзя
37. Вадим Латышев (pro1c@inbox.ru) 05.02.15 13:52
(36) AllexSoft,
"...отметать 1С как инструмент разработки мобильных приложений ДЛЯ БИЗНЕСА тоже нельзя..."

так никто и не отметает! естественно, 1С отдает дань моде и предлагает мобильную платформу для ВОЗМОЖНОСТИ реализации!
я только лишь выразил возражение о том, что методы применяемые в разработке для десктопа НЕ ПРИЕМЛЕМЫ в мобильной разработке!
в данном приложении я это увидел!
38. Вадим Латышев (pro1c@inbox.ru) 05.02.15 14:11
(33) DitriX,
"А в целом - посмотрим что будет с 8.3.6, так как мы сейчас смотрим на продукт, который начал свое развите, когда еще MD и в проекте не было, а стандарты менялись каждый месяц :) "...
так вот в том то и дело, что мобильная разработка никогда не "устаканется" и будет всегда в стадии развития и совершенствования (сегодня один смартфон, завтра очки, послезавтра часы и т.д.), поэтому первоисточники (Java, Objective-C) выглядят более выгодным инструментом для разработки, т.к. являясь детищем своих же прородителей несут в себе все необходимые новшества. Чтобы за этим успеть, 1С надо клепать мобильную платформу чаще! Что затратно! Поэтому я и считаю реализацию на 1С под мобилы потерей времени.
Ну это так, лирическое отступление!
39. Дмитрий Шерстобитов (DitriX) 05.02.15 21:24
(38) ну а думаю, иначе, так как 1с таким макаром подкупает весь рынок потенциальный. Вот я разработал приложение 2 года назад и все круто, а теперь выйдет 8.3.6 - и я обновлюсь, у меня повится новый стильный дизайн, и может еще плюшки, но костяк то есть.
А обо все остальном - пусть 1с думает.

А если писать свое, то это значит и самому всегда надо следить за этим и ковырять, обновлять и т.д. А тут то главное - бизнесс логика, а обновление дизайна - не влияет на бизнесс процессы (ну это конечно в идеале, если пересадить с 7.7 на 8.3, то разница будет конечно ощутима).

Я это к чему - наша задача, что бы отчет строился правильный, а красоту пусть 1с нам сама рисует.
Видь для перехода с 8.2 на 8.3 - почти ничего не надо было делать, а столько полюшек получил, и все "на шару", никаких доработок.
Мы когда приложение разрабатывали под мобильник, нам только дизайн стоил около 2к уе, и это только наброски, которые потом еще перепиливали и перепиливали. Так как задачи приложения росли, иконки обновлять надо, и т.д. и т.п. А остановить развитие бизнесс приложений - не реально.
w-divin; AllexSoft; +2 Ответить 1
40. Вадим Латышев (pro1c@inbox.ru) 05.02.15 21:48
(39) DitriX,
Не, ну с таким подходом, можно вообще сайт замутить на PHP один на всех или
доступ по RDP на сервак выдать... пускай пальчиками там лазят, парятся... функционал ведь! логика!
и работает везде (десктоп, планшеты, смартфоны), где выход в инет имеется! вообще ничего делать не надо!
бизнес же! ничего личного!
41. Дмитрий Шерстобитов (DitriX) 05.02.15 23:34
(40) Ага, давайте посчитаем лицензии на рдп и 1с, а так же увеличим мощьность серверов на колиество этих пользователей :)
Но ничего страшного, работают и так, на 7.7, не маленькие фирмы, а крупные. И те, которые не могут позволить себе простой, поэтому им таки да, не рюшечки главное :)
Мало того, только так и работали вообще все, так как были доступны только терминалы на винце. И что? Многие вмс просто так и были заточены.
42. Алексей Белоусов (AllexSoft) 06.02.15 10:00
(40) pro1c@inbox.ru, а если инета нет? у нас например склады здоровые, закрытые как бункер, там с проводным инетом туго, не говоря о мобильном ) вот спасают планшеты с 1С-ками и wifi-сканеры штрихкодов )
44. poyson (poyson) 24.03.15 12:14
у нас появилась аналогичная задача. попробуем решить по вашим следам. спсибо
45. Олег Осипов (plastilin) 06.04.15 17:28
46. Олег Осипов (plastilin) 06.04.15 17:30
до realtime как до небес.....1с в своем репертуаре..втюхать кому нить свои поделки... есть много технологий которые позволяют делать все это быстрее, стабильнее и главное половина из этих технологий open sourse
47. Олег Осипов (plastilin) 06.04.15 17:31
годами пишут свои поделки..у меня такое ощущение что 1с большее время тратит на то чтобы целенаправленно писать баги..а потом их исправлять..за ваши деньги
48. Александр Бессарабов (shurubchik) 21.05.15 14:15
(20) DitriX, Добрый день. не подскажете - как править манифест мобильного приложения. - я его распаковал с помощью APK tools. но там какая то ерунда. мне бы понять направление хотя бы - можно ли править манифест для платформы мобильной без сборки приложения. Спасибо.
49. Дмитрий Шерстобитов (DitriX) 25.05.15 15:19
(48) так нельзя :) Можно распаковать, но нельзя просто так запаковать, потому что при компиляции - вы должны подписать приложение своим ключем :)
А как распаковать - ищите в инете, даже онлайн сервисы есть, и вот статьи хорошие всякие http://androidp1.ru/iz-chego-sostoit-prilozhenie-android/
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа