Введение
Мы разработали простое приложение для мобильной торговли – Контейнер. Приложение обладает множеством функций, с которыми вы можете ознакомиться на странице Google Play или App Store.
Почему “Контейнер”? Под Одессой (да, мы одесситы) расположен промтоварный рынок 7-й километр. Поначалу основная торговля велась из контейнеров, из которых были сделаны целые улицы. На сегодняшний день рынок превратился в крупнейшую торговую площадку Европы – теперь там находится порядка 15 тысяч торговых и складских объектов и работают около 60 тысяч человек, из которых 10 тысяч – частные предприниматели. Многие из них имеют как торговые точки на рынке, так и магазины в Одессе. Ежедневно рынок посещают около 200 тысяч человек, из которых минимум четверть – это оптовые покупатели.
Улица Розовая. Больше колоритных фото - здесь
Вот для этого контингента и делалось приложение.
В процессе разработки нам очень не хватало возможностей платформы. Это касается как глобальных недостатков (нет возможности работать с zip файлами, сохранять в pdf и xls, печатать на принтер, работать со сканерами ШК), так и мелочей (нельзя сделать ссылку неподчеркнутой, отловить событие поворота экрана и длительного нажатия, расположить элементы на форме так, как нам хочется и т.п.). Конечно без этих мелочей программа всё равно бы работала, но нашей целью было создание действительно простого и удобного приложения, чтобы даже те, кто ни разу не видел 1С, могли в нем разобраться. И сейчас, выпуская первый релиз, мы можем с уверенностью сказать, что выжали из платформы всё, и даже немножко больше.
Сто процентов любви –
Это грубый подсчет,
Сто процентов любви,
И немножко еще...
В этом цикле статей мы хотим поделиться решением проблем и ограничений, с которыми столкнулись. Надеемся, это сделает ваши приложения еще более красивыми и функциональными. :)
Проблема
Любой, кто хоть раз запускал приложение, написанное на платформе 1С, сталкивался с двойным заголовком.
Самое плохое в том, что:
- Он не несет никакой смысловой нагрузки, так как всегда дублирует заголовок приложения;
- Его невозможно скрыть;
- Его невозможно изменить;
- Он забирает целую строку формы, что особенно критично на небольших экранах.
Прошло более полутора лет. Ошибка осталась.
Решение
Признаюсь, у нас не было мыслей, как можно обойти это ограничение. Пробовали убрать автозаголовок у формы, а сам заголовок оставить пустым – не помогло. На этом идеи закончились.
Немного коснусь функционала нашего приложения. Мы решили, что раз уж на заголовок повлиять нельзя, то будем выводить туда полезную информацию – например, вместо “Новый Закупка товаров” – “Закупка товаров от 10.01.2015“. На Рабочем столе мы выводим курсы валют, а если их нет – пишем текущую дату в формате “Сегодня 10 января (суббота)”. При создании базы можно указать, что будет использоваться только одна валюта. Но если добавить еще одну валюту и установить курсы – то заголовок обновится, и вместо даты будут показаны курсы.
Все в шоке! Как так получилось, почему заголовки стали отличаться? Начали разбираться. И вот к чему мы пришли: если на форме изменить заголовок после ее открытия, то меняется только нижний заголовок; заголовок приложения остается тем же.
Бинго! В событии ПриОткрытии мы навесили обработчик ожидания, который через 0,1 секунды вызывал процедуру установки нового заголовка – таким образом, при открытии вверху формы у нас было две разных надписи.
Но радость длилась недолго – как оказалось, этот способ работает только для рабочего стола. В остальных формах вместе с заголовком формы меняется и заголовок приложения. Это достижение вдохновило нас на дальнейшие поиски. Мы задумались о типовых настольных конфигурациях и вспомнили один момент. Ведь у настольной программы тоже есть заголовок (например, “Управление торговлей, редакция 11.1”). Но там кроме названия выводится еще и имя пользователя. Как они это делают?
Порывшись в коде, мы нашли интересную функцию – УстановитьКраткийЗаголовокПриложения. Смотрим в синтаксис–помощнике:
“Добавляет краткий заголовок приложения. Текст размещается в заголовке окна приложения перед текстом системного заголовка и автоматически отделяется точкой.”
Пробуем вывести текст “Проверка”:
Почти то, что нужно! Но вместе с нашим текстом выводится название конфигурации. А что, если после нашей строки добавить много пробелов, чтобы текст уехал за пределы экрана? Пробуем:
Хмм, ничего не изменилось. Видимо умная 1С считает, что пробелы не нужны, поэтому их обрезает. Думаю, вы уже догадались, что здесь можно сделать. :) Добавим в конце пробелов какой–то символ, например, точку:
Вот оно!
Что особенно радует – метод работает на клиенте и при использовании не вызывает сервер, поэтому форма не перерисовывается. Правда есть небольшой побочный эффект – заголовок заканчивается тремя точками. Также метод не работает на iOS – он в принципе игнорируется. Мы зарегистрировали ошибку, и надеемся, что в одной из следующих версий она будет исправлена.
Вывод
Чтобы изменить заголовок приложения, следует воспользоваться методом УстановитьКраткийЗаголовокПриложения(). Иногда он сбрасывается (например, в формах выбора), поэтому рекомендуется устанавливать его каждый раз при открытии формы. Метод выполняется на клиенте без обращения к серверу, поэтому не вызывает перерисовки формы.
Недостатки:
- В заголовке в самом конце появляется троеточие.
- Метод игнорируется на iOS (зарегистрирована ошибка 30016576).
Послесловие
Вот так мы боремся с ограничениями в мобильной платформе. Не забывайте про нас. :) В следующей статье мы расскажем, как сделали невозможное – обработку события длительного нажатия на строку табличной части. И конечно же скачивайте наше приложение Контейнер (Googlу Play и App Store) - мы будем рады вашим замечаниям и пожеланиям.