Первоначальные настройки мобильного приложения «1С-Рейтинг: Мобильный официант. Первоначальные настройки мобильного приложения «1С-Рейтинг: Мобильный официант Вызов операции веб-сервера

Введение

В новой версии платформы 1С (8.3.5) появилось много нового функционала. Кстати, для тех кто не знает, есть ресурс , на котором разработчики 1С описывают появляющиеся новшества в платформе. Одним из таких является механизм . Он привлек мое внимание, захотелось что-то реализовать for fun. Сразу пришла идея сделать что-то похожее на сайт, но с этой идеей меня не поняли бы даже на инфостарте, поэтому я выкинул ее из головы. Казалось, что выкинул, но идея трансформировалась в нечто не такое маштабное, что-то такое, что может найти реальное применение в жизни - мобильное веб-приложение.
Я считаю, что малонагруженное и простое мобильное веб-приложение, для ограниченного количества пользователей, например, сотрудников, может быть реализовано в 1С с помощью HTTP-сервисов.

Мобильное веб-приложение "Контакты"

Начну с результата. Мобильное веб-приложение "Контакты" выглядит просто, собственно таковым и является. В начале вы видите только поле для поиска контакта.

Поищем кого-нибудь (для того чтобы поиск начался нужно ввести не меньше 3 символов). Кто-то нашелся.

Позвоним Алексею.

Напишем письмо Тимофею.

Вот и всё мобильное веб-приложение.

Кстати, его очень просто адаптировать под любую конфигурацию.

Немного о реализации

Используемые средства:
- Механизм HTTP-сервисов платформы 1С (начиная с версии 8.3.5)
- JavaScript библиотека jQuery (http://jquery.com)
- JavaScript библиотека jQuery mobile (http://jquerymobile.com)
- 1С:JSON ()

HTTP-сервис "Конткаты" принимает все запросы и передает их в обработку "КонтактыМВП". В обработке "КонтактыМВП" сосредоточена вся логика мобильного веб-приложения.

Так выглядит обработка запроса.

Функция ОбработатьЗапрос(Запрос) Экспорт Если СоответствуетРесурсу(Запрос, "/index.html") Тогда Возврат ПолучитьРесурсIndexHTML(); ИначеЕсли СоответствуетРесурсу(Запрос,"/application.js") Тогда Возврат ПолучитьРесурсApplicationJS(); ИначеЕсли СоответствуетРесурсу(Запрос,"/contacts.json") Тогда Возврат ПолучитьРесурсContactsJSON(Запрос); КонецЕсли; КонецФункции

А так, например, выглядит возврат страницы index.html.

Функция ПолучитьРесурсIndexHTML() Ответ = Новый HTTPСервисОтвет(200); Текст = ПолучитьМакет("IndexHTML").ПолучитьТекст(); Ответ.УстановитьТелоИзСтроки(Текст); Ответ.Заголовки.Вставить("Content-Type", "text/html"); Возврат Ответ; КонецФункции

Ничего сложного. Более детально вы можете изучить механизм загрузив КонтактыМВП.dt

Особенности публикации

При публикации HTTP-сервиса возникли небольшие сложности, чтобы вам было проще изложу некоторые замечания:
- В есть достаточно подробные описания о публикации - читайте внимательнее.
- Не забывайте перед публикацией запустить конфигуратор от имени администратора.
- Запустить HTTP-сервис удалось только с файловой версией, с клиент-серверной возникала какая-то ошибка.
- Для того чтобы мобильное веб-приложение работало без запроса авторизации, если в базе есть заведенные пользователи, то после публикации, в файле default.vrd в строку подключения (point.ib) необходимо добавить параметры Usr и Pwd.

Заключение

Надеюсь материал статьи будет вам полезен.

Спасибо за внимание.

  • Tutorial

Здравствуйте, уважаемые.

В данной статье хочу познакомить вас с новым продуктом “FBA Toolkit”, который существенно облегчает процесс разработки корпоративного мобильного приложения на 1С + Android.
“FBA Toolkit” это:
- разработка «нативного» приложения Android в родной IDE на языке Java;
- 1С: Предприятие 8.1 (8.2) в роли источника данных, корпоративной информационной системы.

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

Подготавливаем рабочее место Прежде чем начать непосредственно процесс разработки, необходимо подготовить рабочее место разработчика. Потребуется:

1. Установить и настроить:
- Java SDK + Eclipse + Android SDK;
- Web-сервер (IIS или Apache);
- 1С: Предприятие 8.1 (8.2)

2. Для Eclipse произвести импорт двух библиотечный проектов: ActionBarSherlock и ru_profu1c_fba из хранилища SVN.

3. Установить дистрибутив конфигурации «FBA» и объединить ее с вашим прикладным решением на базе 1С.

Подробно весь процесс предварительной настройки описан в статьях:
Подготовка рабочего места разработчика
Установка дистрибутива конфигурации “FBA”
Объединение конфигурации “FBA” с прикладным решением и публикация на web-сервере

Настройка не должна занять много времени, и скорее всего, часть необходимого ПО у вас уже установлена.

Описание приложения Создадим мобильное приложение «Рапорт руководителю», предназначенное для регулярного информирования руководителя о состоянии дел на предприятии. Приложение будет состоять из 3-х экранов:
  • “Вход” - авторизация пользователя при запуске программы.
  • “Список отчетов” – основной экран нашего приложения. Отображается список доступных отчётов с возможностью просмотра и обновления данных из базы 1С.
  • “Настройки программы” – здесь пользователь задает параметры авторизации и адрес сервера 1С, настраивает расписание автоматического обмена с сервером 1С.
  • В приложении будет реализовано 2 варианта получения данных от сервера 1С:

  • Отчет «Товары на складах». Формируется на сервере и компилируется как HTML документ, в мобильном приложении просто отображается. Самый простой вариант, форма отчета фиксирована и не может быть изменена.
  • Отчет «Финансовые показатели». Здесь исходные данные для отчета получаются в виде таблицы, по которой затем строится отчет. Плюсы данного варианта: произвольная форма вывода отчета, в т.ч. в виде графиков и диаграмм; возможна установка отборов и сортировки.
  • Создание шаблона мобильного приложения в 1С Разработка мобильного приложения начинается в 1С, как это не удивительно. Здесь вы определяетесь с составом метаданных, настраиваете схему обмена и регенерируете шаблон вашего будущего мобильного приложения.

    Создайте новый элемент в справочнике «Мобильные приложения» с наименованием «Рапорт руководителю» и идентификатором SAMPLE_REPORT_HEAD .

    Выделите в списке “Метаданные” группу “Внешние данные” и нажмите кнопку “Добавить” на панели инструментов. Заполните параметры новой таблицы как показано на рисунке:

    «Показатель» - тестовое представление показателя отчета, строка (250)
    «Значение» - числовое значение показателя, число (15.2)
    Имена колонок и самой таблицы здесь, как правило, задаются на русском языке, по ним будет производиться заполнение таблицы данными средствами встроенного языка 1С. Нажмите ОК, таблица будет добавлена в дерево метаданных, для мобильного приложения имена автоматически переводятся в латиницу.

    Таким образом, мы подготовили структуру таблицы значений (в терминах 1С) в которой будем передавать данные для отчета «Финансовые показатели». Для второго отчета «Товары на складах» данные будут передаваться как внешний файл.

    На закладке «Схема обмена» проверьте, что отмечен флаг «Выгрузка». Флаг «Загрузка» не важен, т.к. мы не собираемся обрабатывать в 1С полученные изменения этой таблицы от мобильного приложения.

    Сохраните изменения. Нажмите на кнопку “Шаблон мобильного приложения” на панели инструментов, установите параметры вашего мобильного приложения

    «Каталог шаблонов» - путь к каталогу, в котором будут сохранены сгенерированные файлы шаблона мобильного приложения.

    На закладке «Основные» укажите имя пакета, это должен быть уникальный идентификатор. Если у вас есть сайт, используйте его для генерации префикса. В этом примере я указал ru.profi1c.samples.report.head

    На закладке «Web-сервис» указан IP-адрес 10.0.2.2, по умолчанию это адрес вашего компьютера при доступе с Android-эмулятора. В поля «Имя веб-сервиса» и «Подкаталог приложения» введите данные, которые были указаны при публикации веб-сервиса.

    Обратите внимание, что для 1С 8.2, скорее всего, подкаталог приложения у вас будет с дополнительным подкаталогом /ws , т.е demoFba/ws, подробнее см. .
    Нажмите Создать , шаблон Android-проекта будет сгенерирован.

    Подготовка исходных данных для отчетов в 1С Откройте в конфигураторе 1С модуль fbaПодпискаНаСобытия и добавьте следующий код в процедуру ПередОтправкойВнешнейТаблицы :

    Если СокрЛП(МобильноеПриложение.Код) = "SAMPLE_REPORT_HEAD" Тогда Если ИмяТаблицы = "РапортРуководителю" Тогда //фиктивные данные отчета СписокТемп = fbaОбщий.ИзСтрокиСРазделителями("Денежные средства,Расчеты с подотчетными лицами,Общая дебиторская задолженность,Остатки товаров,Кредиторская задолженность,Объем продаж"); ГСЧ = Новый ГенераторСлучайныхЧисел(123456789); Для каждого ЭлементСписка Из СписокТемп Цикл НоваяСтрока = ВнешняяТаблица.Добавить(); НоваяСтрока.Показатель = ЭлементСписка.Значение; НоваяСтрока.Значение = ГСЧ.СлучайноеЧисло(0,999999) + Sin(ГСЧ.СлучайноеЧисло(0,999)); КонецЦикла; КонецЕсли; КонецЕсли
    В этом примере таблица заполняется фиктивными данными, в реальном приложении здесь можете передавать произвольное количество показателей отчета.
    С данными для первого отчета разобрались, осталось подготовить для второго. В этом же модуле fbaПодпискаНаСобытия добавите в процедуру ПодготовитьДвоичныеДанныеДляОтправки следующий код:

    ДД = Неопределено; Если СокрЛП(МобильноеПриложение.Код) = "SAMPLE_REPORT_HEAD" Тогда Если Идентификатор = "REPORT_PRODUCTS_IN_STOK" Тогда ИмяФайла = ПолучитьИмяВременногоФайла("html"); Отчет = Отчеты.ТоварыНаСкладах.Создать(); Если Отчет.СохранитьОтчетВHTML(ИмяФайла) Тогда ДД = Новый ДвоичныеДанные(ИмяФайла); УдалитьФайлы(ИмяФайла); КонецЕсли; КонецЕсли; КонецЕсли; Возврат ДД;
    Прокомментирую код. Когда мобильное приложение запрашивает произвольные данные (в виде файла) с идентификатором «REPORT_PRODUCTS_IN_STOK», в 1С выполняется отчет и результат его сохраняется во временный файл. Затем этот временный файл считывается как двоичные данные и передается мобильному приложению. Временный файл удаляется.

    Как в данном случае генерируется html файл, нам не важно. Вы можете использовать штатный механизм 1С сохранения табличного документа в виде HTML или сформировать HTML вручную. Пример вывода можете посмотреть в конфигурации «FBA демо», отчет «Товары на складах».

    С 1С всё, переходим к разработке мобильного приложения на Android.

    Проектирование Android – приложения Созданный в 1С шаблон Android-проекта импортируем в рабочее пространство Eclipse.

    Запустите Eclipse и выполните импорт проекта: File > Import… В группе Android выберите элемент «Exists Android Code Into Workspace» нажмите Next , укажите путь к каталогу шаблона Android-проекта и нажмите Finish , новый проект будет добавлен в рабочее пространство. Если возникнут сложности см. , процесс описан в картинках.

    1. Создаем отчет «Финансовые показатели», источником данных для которого является таблица значений, полученная от 1С. Для этого добавьте новый класс ToChiefReport.java, вот полный исходный код:

    Показать

    /** * Пример построения отчета по данным из локальной базы sqlite. Источником * данных выступает внешняя таблица «Рапорт руководителю» * */ public class ToChiefReport extends SimpleMapHtmlReport { @Override public int getResIdIcon() { return R.drawable.report_01; } @Override public int getResIdTitle() { return R.string.report_name_to_chief; } @Override public void build(Context context, IReportBuilderResult builderResult) { try { makeReport(context); } catch (SQLException e) { e.printStackTrace(); setHeader1("Упс, отчет не создан!"); } super.build(context, builderResult); } private void makeReport(Context context) throws SQLException { DBHelper helper = new DBHelper(context); // Заголовок отчета и таблицы setHeader2("Финансовые показатели"); setTableHeader("Наименование ", "Сумма, руб."); // Строки таблицы будут в порядке добавления Map mapData = new LinkedHashMap(); // Выборка данных из локальной базы данных sqlite, внешняя таблица // «Рапорт руководителю» ExTableRaportRukovoditelyuDao dao = helper .getDao(ExTableRaportRukovoditelyu.class); List rows = dao.select(); for (ExTableRaportRukovoditelyu row: rows) { mapData.put(row.pokazatel, row.znachenie); } setTableData(mapData); } }
    Прокомментирую код. Абстрактный класс SimpleMapHtmlReport, от которого наследуется, предназначен для построения простого HTML отчета с таблицей из двух колонок.
    Первые 2 метода getResIdIcon() и getResIdTitle() возвращают иконку и название нашего отчета для отображения в списке. В обработчике события «build» вызывается метод makeReport, в котором наша реализация компиляции отчета.
    При построении отчета сначала устанавливается заголовок отчета и таблицы, затем все записи из локальной таблицы sqlite считываются как строки таблицы отчета. И наконец, в методе setTableData() устанавливаем данные для таблицы отчета. Уф, как сложно комментировать очевидные вещи.


    2.Создаем второй отчет, здесь все еще проще:

    Показать

    /** * Пример скомпилированного отчета, просто выводит Html файл. В этом примере * данных файл сгенерирован в 1С и передан мобильному клиенту во время обмена * */ public class ProductsInStokReport extends SimpleCompiledHtmlReport { // Имя, под которым сохраняется полученный файл от 1с (см. процедуру обмена // MyExchangeTask) public static final String REPORT_FILE_NAME = "products_in_stok.html"; public ProductsInStokReport(File file) { super(file); } @Override public int getResIdIcon() { return R.drawable.report_02; } @Override public int getResIdTitle() { return R.string.report_name_products_in_stok; } }


    3. Расширим предопределенную процедуру обмена с сервером 1С, т.е. добавим в нее еще один шаг - получение данных для нашего второго отчета в виде скомпилированного файла. Добавим класс MyExchangeTask наследник от ExchangeTask:

    Показать

    /** * Стандартная процедура обмена дополненная пользовательскими правилами. * Дополнительно получается один скомпилированный файл – отчет. * */ public class MyExchangeTask extends ExchangeTask { // Идентификатор отчета как он задан в 1С private static final String ID_REPORT_PRODUCTS_IN_STOK = "REPORT_PRODUCTS_IN_STOK"; public MyExchangeTask(ExchangeVariant exchangeVariant, WSHelper wsrvHelper, DBOpenHelper dbOpenHelper) { super(exchangeVariant, wsrvHelper, dbOpenHelper); } @Override protected boolean doExecute() throws Exception { // Выполнить шаги обмена по предопределенным правилам boolean success = super.doExecute(); if (success) { // Получить произвольные данные - наш 2-ой отчет onStepInfo("Получаю отчеты…"); String fPath = appSettings.getCacheDir().getAbsolutePath() + "/" + ProductsInStokReport.REPORT_FILE_NAME; File f = wsHelper.getLargeData(ID_REPORT_PRODUCTS_IN_STOK, null, "", fPath); success = (f != null); } return success; } }
    Для получения данных отчета используется метод веб-сервиса getLargeData , который в случае успеха сохраняет результат в файл по указанному пути. Обратите внимание на идентификатор ID_REPORT_PRODUCTS_IN_STOK, он должен быть таким же, как в 1С в методе ПодготовитьДвоичныеДанныеДляОтправки.


    4. Вывод списка отчетов на главной форме. Откройте файл res\ activity_main.xml и добавьте listView в котором будет отображать список отчетов:

    В MainActtiviy.java добавляем:

    А) локальную переменную для списка
    private ListView list;
    б) метод инициализации
    private void init() { list = (ListView) findViewById(android.R.id.list); // Создать адаптер для отображения списка отчетов ReportListAdapter adapter = new ReportListAdapter(this,createReportList()); list.setAdapter(adapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // Показываем отчет в диалоге по клику на нем IReport report = (IReport) list.getItemAtPosition(position); report.onShow(MainActivity.this); } }); }
    и вызов его в onCreate() после установки макета формы
    setContentView(R.layout.activity_main); init();
    в) метод инициализации списка отчетов
    /* * Подготовить список отчетов */ private List createReportList() { List lst = new ArrayList(); // Создать первый отчет, временный каталог где сохранен файл берем из // настроек IReport report = new ProductsInStokReport(new File(getAppSettings() .getCacheDir(), ProductsInStokReport.REPORT_FILE_NAME)); lst.add(report); // Создать и добавить в список прочие отчеты lst.add(new ToChiefReport()); }
    г) процедуру запуска обмена по вашим правилам
    /* * Запуск обмена по моим правилам. Обратите внимание, что в планировщике * (если установлен) обмен остался по стандартным правилам */ private void startExchangeMyRules(ExchangeVariant variant,boolean cancelable) { // хелпер для вызова методов web-сервиса WSHelper wsHelper = new WSHelper(getExchangeSettings()); MyExchangeTask task = new MyExchangeTask(variant, wsHelper, getHelper()); startExchange(task, cancelable); }
    И изменяем вызов процедуры обмена startExchange(ExchangeVariant.FULL, true) в обработчике onOptionsItemSelected на startExchangeMyRules(ExchangeVariant.FULL, true).

    Приложение готово , формы авторизации и настроек программы будут созданы автоматически, изменять их не будем.
    Давайте проверим его на эмуляторе. Если вы нигде не ошиблись, приложение запустится. Однако, вместо окна авторизации будет отображено сразу окно настроек, так как не указаны данные авторизации (имя пользователя и пароль).

    Укажите имя пользователя: ivanov
    И пароль: 123456

    Запустите базу 1С и откройте справочник «Мобильные сотрудники». В качестве мобильного устройства укажите предопределённый элемент «Эмулятор устройства», в табличную часть «Мобильные приложения» добавьте приложение «Рапорт руководителю» и установите идентичные имя и пароль пользователя.

    Запустите на эмуляторе процедуру обмена (кнопка со стрелочкой «Вверх» на панели справа)

    Результат работы обмена выводится в уведомлении:

    Нажмите на него для запуска вашего приложения (или для просмотра подробной информации об ошибке, если обмен завершился неудачно).

    Проверим, что получилось. Кликните мышкой по отчету в списке:

    Показать


    Отлично! Отчеты выводятся, можно изменять масштаб по кнопке или жестами.


    Приложение готово, получилось вполне функциональным и легко расширяемым. Добавление других отчетов не составит большого труда.
    Вы можете передавать документы в различных форматах, например *.doc или *.pdf и использовать внешние приложения для их просмотра. Смотрите исходный код примера, там есть еще 3 отчета:
    • диаграмма с использованием Google Chart Tools
    • график с использованием jQuery плагина Plot
    • вывод PDF-отчета внешним приложением (PdfReport.java)
    Детально описывать не буду, и так статья получилась большая. Если возникнут вопросы, готов ответить в комментариях. Вот результат вывода:

    Показать


    Полный код примера вы можете скачать по адресу https://xp-dev.com/svn/fba_toolkit_public/samples/fbaSample4ReportHead/

    Использование HTML для построения отчетов позволяет создавать весьма разнообразные отчеты, в т.ч. и с интерактивными элементами. Например, в одном нашем проекте используется вот такой отчет:

    Показать

    • для поля «Долг» используется условное цветовое оформление в зависимости от суммы;
    • полный список неоплаченных накладных открывается только при нажатии на маркер «Все», по умолчанию отображаются только 4 последних.

    И конечно, вы ничем не ограничены, можете использовать сторонние библиотеки для вывода отчетов и диаграмм, например achartengine или самостоятельно создать свой график/диаграмму (примеров полно, в т.ч. есть и в Android SDK).

    На этом все, с другими примерами вы можете ознакомиться на сайте http://profi1c.ru .
    В ближайшее время планируется добавить уроки по интерактивным элементам и адаптерам библиотеки FBA, а так же показать как работать с офф-лайн картами mapsforge .

    Ложка дегтя Продукт «FBA Toolkit» планируется распространять на коммерческой основе, сейчас он в статусе «демо-версии». Вы можете свободно использовать его для тестирования и изучения.
    Ограничения:
    • программа перестает работать по окончании срока демо-лицензии т.е. после 31.12.13;
    • при запуске выводится уведомление:

    В ближайшее время (не более месяца) будет коммерческая версия, информацию о стоимости и порядке лицензирования добавим на наш сайт.

    Спасибо, что дочитали до конца. Готов ответить на ваши вопросы в комментариях как по 1С, так и по Android.

    Теги: Добавить метки

    Практика разработки мобильного приложения 1С 8.3 (часть 1)

    В данной статье речь пойдет о том, что довелось перепробовать и на какие грабли наступить, прежде чем удалось сделать более-менее нормальное приложение для планшетников. Приложение изначально затачивалось только под Андроид, за основу взята конфигурация 1С: Заказы, и мобильное приложение для разработки.

    Изначально был выбран «неправильный» подход с компилированием приложения и закидыванием его на планшетник вручную. Напомню, что для сборки мобильных приложений используется «Помощник создания мобильного приложения» (MobileAppWizzard ). Затем на одном из форумов было найдено красивое решение с использованием мобильного приложения для разработки. Это приложение входит в комплект установки мобильной платформы. На момент разработки использовалась платформа версии 8.3.3.24. В папке «Android » можно найти файл 1cem.apk. Это и есть мобильное приложение для разработки. Его огромнейший плюс, сэкономивший нам уйму времени — в том, что можно опубликовать мобильное приложение на веб-сервере, а на планшетнике указать путь вида http://[ Адрес веб-сервера ]/[ Имя мобильного приложения ].

    На планшетном ПК, в настройках добавленного приложения можно отметить флажок «Обновлять из конфигуратора», и при каждом запуске приложение будет пытаться подключиться к веб-серверу и проверять обновления.

    После того, как мобильное приложение было развернуто, начался процесс его доработки.

    Что требовалось:

    1. Настроить обмен между центральной базой и мобильным устройством.

    2. Организовать асимметричную синхронизацию: из центральной базы выгружать данные о номенклатуре, контрагентах, остатках товаров на складе и взаиморасчетах, а из мобильного приложения загружать только заказы покупателей.

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

    На этапе тестирования использовалась промежуточная база «Управляемое приложение», ввиду того что демо-приложение 1С:Заказы изначально заточено на обмен именно с Управляемым приложением.

    Первый блин вышел комом. В прямом смысле. Для обмена с центральной базой был использован v82.ComConnector. Не буду вдаваться в подробности его настройки, об этом есть куча отдельных материалов. Пройдусь только по тем трудностям, с которыми столкнулся.

    1. Использование com- объектов на 64-битной серверной ОС. Для решения проблемы была использована обертка COM+ Applications, которая настраивается в Component Services.

    2. Удаленный вызов Com с другого сервера. Вызываемый сервер должен иметь роль Application Server, и у него должно быть настроено COM+ Network Access. Кроме того, сервер Apache должен иметь соответствующие права (т. е. запускаться как сервис от имени авторизованного пользователя)

    Намучившись с Ком-соединениями, решили переводить рабочую базу на web- сервисы.

    О публикации веб-сервисов также написано очень много, но там написано о том, как работает. Как НЕ работает, поделюсь ниже.

    Рабочая база развернута на платформе 8.2, мобильное приложение, соответственно, на 8.3.

    При публикации вначале приложения 8.3, а затем 8.2. периодически выхватывали глюк «Ошибка формата потока» в веб-клиенте 8.3, либо сообщение об ошибке «различаются версии платформы клиента и сервера». Перепубликация не помогает, равно как и перезапуск Apache. А вот отключение публикации и подключение заново — помогает.

    Далее, поймал забавную ошибку при авторизации пользователя (при создании ws Определения). При тестировании на компьютере, авторизация с длинным ФИО проходит легко. При попытке авторизации этого же пользователя с планшетника под управлением Android, авторизация заканчивалась, не начавшись. Экспериментальным путем удалось вычислить, что кириллицей длина логина ограничена 22 символами. При этом сочетание кириллических символов и цифр дало авторизоваться с логином длиной 27 символов. Есть подозрение, что это связано с преобразованием кириллических символов. Так, например, в браузере Firefox строка из Википедии « иво» преобразуется в « ».

    Технологически, мобильная платформа 8.3.3 на текущий момент имеет ряд ограничений. Самое ожидаемое, на мой взгляд, нововведение — это поддержка запросов. Но, поскольку произвольные запросы в динамических списках мобильная платформа пока не поддерживает, пришлось «пойти другим путем».

    Для решения задачи отображения справочника номенклатуры с ценами и остатками был использован следующий подход:

    1. В форме справочника номенклатуры созданы две таблицы. Первая — динамический список, собственно сам справочник. Фильтр динамического списка настроен так, чтобы выводились только группы. Вторая таблица — собственно остатки и цены. При активизации строки динамического списка, на сервере происходит заполнение таблицы значений, которая затем и выводится во вторую таблицу. При получении цен и остатков использовалась объектная модель. Все эти танцы с бубном были исполнены только потому, что привычного по толстому клиенту метода «при выводе строки» или «при получении данных» нет, и динамически нарисовать цифры в колонке нельзя.

    Аналогичный подход использовался и в форме подбора

    2. Для вывода строки с текущими ценами отлично подошла ФорматированнаяСтрока.

    Ниже — пример кода.

    &НаСервереБезКонтекста Функция ОстаткиПриАктивизацииСтрокиНаСервере(ном) НаборЗаписей = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Товар.Значение = ном; НаборЗаписей.Отбор.Товар.Использование = Истина; НаборЗаписей.Прочитать(); МассивФорматированныхСтрок = Новый Массив; Для Каждого СтрокаНабора Из НаборЗаписей Цикл МассивФорматированныхСтрок.Добавить(Новый ФорматированнаяСтрока(СтрокаНабора.ВидЦен.Наименование,WebЦвета.Синий)); МассивФорматированныхСтрок.Добавить(Новый ФорматированнаяСтрока(" " + Строка(СтрокаНабора.Цена) + " ")); КонецЦикла; Возврат Новый ФорматированнаяСтрока(МассивФорматированныхСтрок); // Вставить содержимое обработчика. КонецФункции

    3. Для загрузки справочников, остатков и цен в мобильное приложение был использован веб-сервис, который на входе получает структуру параметров, а на выходе возвращает хранилище значения. Еще одним неприятным открытием стал вылет обмена при слишком длительной обработке на стороне сервера. Сложилось впечатление, что имеется какой-то таймаут, после которого приложение «считает», что связь прервана (хотя на самом деле все еще идет обработка данных в рабочей базе через ws -соединение), и прекращает обмен с ошибкой.

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

    4. Для получения отчетов оставлен тот же подход, что и в конфигурации 1С: Заказы. Вызывается веб-сервис с параметрами, на стороне сервера рабочей базы формируется табличный документ, и затем уже готовый табличный документ возвращается в мобильное приложение.

    Предварительные настройки

    Перед началом работы на мобильном устройстве необходимо установить корневой сертификат сервиса «1С: Линк».

    В настройках мобильного приложения необходимо указать путь к информационной базе, опубликованной через «1С: Линк». Особенностью работы с мобильными приложениями через «1С: Линк» является то, что подключение к веб-сервисам осуществляется по их именам, а не по псевдонимам (алиасам). В некоторых мобильных приложениях (например, «1С: ДО») строка подключения формируется автоматически и не требует указания имени веб-сервиса.

    Особенности настройки мобильных приложений1С: Заказы
    • В информационной базе перейдите в раздел "Администрирование", выберите пункт меню "CRM и продажи", поставьте галочку "Разрешить синхронизацию данных с мобильным приложением 1С: Заказы клиентов", нажмите на ссылку "Настройки синхронизации" и добавьте настройку для пользователя.
    • Логин: логин пользователя 1С
    • Настройка "1С:ЛИНК" включена
    • Имя туннеля:
    • Настройка "SSL" должна быть включена для работы с ИБ по протоколу HTTPS и выключена для работы по HTTP
    • Каталог:
    Мобильный Документооборот
    • В настройках информационной базы включите работу с мобильным клиентом.
      Для этого зайдите в информационную базу под пользователем с правами администратора, выберите пункт меню "Настройка и администрирование" - "Настройка программы" - "Обмен данными" и поставьте галочку "Использовать мобильные клиенты"
    • Адрес подключения: https://.сайт/
    • Логин: логин пользователя 1С
    • Пароль: его пароль

    Обратите внимание, что для работы с мобильным приложением у вас должна быть установлена версия 1С: Документооборота 8 не ниже, чем 1.3.1.3 КОРП

    1С: УНФ
    • В настройках синхронизации мобильного приложения "1С: УНФ" перейдите в раздел "Другой сервис"
    • В поле "адрес приложения" укажите (без ru_RU)
    • Укажите логин и пароль пользователя информационной базы и нажмите кнопку "Войти".

    1С: Монитор ERP
    • Логин: логин пользователя 1С
    • Пароль: его пароль
    • Настройка "1С:ЛИНК" включена
    • Имя туннеля:
    • Каталог:

    Клиент бухгалтерии 1cfresh

    Для синхронизации с Бухгалтерией предприятия, опубликованной в 1С: Линк можно воспользоваться мобильным приложением "Клиент бухгалтерии 1cfresh".

    • В настройках мобильного приложения "Клиент бухгалтерии 1cfresh" перейдите в раздел "Другой сервис"
    • В поле "адрес базы для подключения" укажите https://имя туннеля.link.1c.ru/путь-веб-приложения (без ru_RU)
    • Укажите логин и пароль пользователя информационной базы и нажмите кнопку подключиться.


    Данный прототип был создан с помощью Moqups – простого и удобного сервиса создания макетов и концептов. Вполне подойдет для быстрого прототипирования небольших Android – приложений. Для прототипирования более серьезных проектов лучше использовать Photoshop и Android UI Design Kit! .

    Описание приложения

    Приложение состоит из 3 экранов:

    “Основной экран приложения” – при запуске отображается список задач (срок исполнения, наименование задачи и признак ее исполнения). По факту выполнения задачи она отмечается как исполненная в списке.

    По кнопке “Обмен данными” сотрудник может запустить процедуру получения с сервера новых задач немедленно. Обмен данными с сервером также производится в автоматическом режиме 1 раз в день, согласно заданному в настройках расписанию.

    “Настройки программы” – здесь задаются параметры авторизации и адрес сервера 1С, а также отображается уникальный идентификационный номер этого устройства. Здесь же может быть установлено расписание автоматического обмена.

    Структура данных, которыми обменивается мобильный клиент с сервером 1С

    Путь это будет таблица значений (в терминах 1С), которая содержит 3 колонки:

    Создание шаблона мобильного приложения в 1С

    Запустите 1С и выберите справочник “Мобильные приложения”, добавьте новый элемент, где:

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

      В поле “Наименование” укажите название вашего мобильного приложения, например Задачи .

    Запишите элемент справочника по кнопке Записать , после этого создайте новую версию и укажите ее в качестве рабочей для вашего приложения.

    Выделите в списке “Метаданные” группу “Внешние данные” и нажмите кнопку “Добавить ” на панели инструментов. Заполните параметры новой таблицы как показано на рисунке:

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

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

    Для необъектных таблиц, таких как «регистр сведений» или «внешняя таблица», программе надо указать, как его следует заполнять. Один из вариантов – это установка флага «Индексировать» для одной или нескольких колонок таблицы, что и было сделано в нашем примере для колонок «СрокИсполнения» и «Задача». Это значит, что в таблице не может быть двух одинаковых задач на одну и ту же дату.

    Нажмите ОК , таблица будет добавлена в дерево метаданных, для мобильного приложения имена автоматически переводятся в латиницу.

    [Одно из правил FBA: в 1С исходный код пишем на русском, в Java на латинице. Отсутствие русских букв в идентификаторах, именах переменных и классах позволит избежать многих проблем при проектировании мобильного клиента]

    Переименуйте имена из латиницы в английский. В принципе, можно было оставить и латиницу, но мы уже определились с именами (выше в таблице).

    Сохраните изменения и нажмите на кнопку “Шаблон мобильного приложения ” на панели инструментов.

    «Каталог шаблонов» – укажите путь к каталогу, в котором будут сохранены сгенерированные файлы шаблона мобильного приложения.

    На закладке «Основные» укажите имя пакета, это должен быть уникальный идентификатор. Если у вас есть сайт, используйте его для генерации префикса. В нашем примере это ru.profi1c.samples.tasks

    На закладке «Web-сервис» адрес сервера указан 10.0.2.2, по умолчанию это адрес вашего компьютера при доступе с Android-эмулятора.

    В поля «Имя веб-сервиса» и «Подкаталог приложения» введите данные которые были указаны при публикации веб-сервиса.

    На закладке «О программе» заполните контактные данные и дополнительную информацию о вашем приложении, настройки на закладке «Генератор таблиц» оставляем без изменения.

    Нажмите Создать , шаблон Android-проекта будет сгенерирован. Закройте окно мастера генерации шаблона, сохраните изменения и закройте элемент справочника «Мобильные приложения»