Интеграция типовой конфигурации с мобильным приложением

16.09.13

Интеграция - Перенос данных 1C

В данной статье речь пойдет о том, как быстро наладить взаимодействие конфигурации УТ 11 из мобильной конфигурацией, написанной на 1С 8.3. В качестве примера мы вместе разработаем отчет «Валовая прибыль по месяцам», который сможем запускать из смартфона или планшета под управлением операционной системы Android 4.2. Взаимодействие между информационной базой и мобильным приложением будет осуществляется с помощью web-сервиса.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файлы
.zip 15,90Kb ver:1
37
37 Скачать (1 SM) Купить за 1 850 руб.

Вот уже второй месяц я тружусь над логистическим решением, которое основано на взаимодействии мобильной платформы Android и конфигурации УТ 11. Разработку под Android осуществляет подрядчик, но мне всегда тоже очень хотелось написать приложение для модного «гаджета». К счастью, компания 1С, в стремлении сделать свои продуты более мобильными и облачными, выпустила платформу 8.3, с которой мы и будем играть в «мобильное приложение».

Принцип работы приложения представлен на схеме.

Схема работы приложения

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

РАЗРАБОТКА WEB-СЕРВИСА

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

Создадим XDTO-пакет из наименованием CrossProfit следующей структуры.

Пакет XDTO

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

В объект OrganizationList мы записываем список организаций, другими словами он фактически является массивом организаций.

Объект Item содержит информацию о валовой прибыли организации за месяц. Соответственно GUID – это уникальный идентификатор элемента справочника, Period – дата, на которую мы получаем оборот, а Revenue и Cost – значения итогов.

Создадим веб-сервис в конфигурации (под таким же именем, как и пакет XDTO). В нашем сервисе будет всего два

  1. GetOrganizationList – метод, который возвращает список организаций. Тип возвращаемого значения OrganizationList.
  2. GetData – метод возвращает информацию по оборотам организаций. Тип возвращаемого значения Items.

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

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

Функция GetOrganizationList()

   
OrganizationList = СоздатьФабрикуXDTOПоИмени("OrganizationList");

   
Запрос = Новый Запрос("ВЫБРАТЬ
                          | Ссылка          КАК Ссылка,
                          | Наименование    КАК Наименование
                          |ИЗ
                          | Справочник.Организации
                          |ГДЕ
                          | Не ПометкаУдаления"
);

   
Выборка = Запрос.Выполнить().Выбрать();

    Пока
Выборка.Следующий() Цикл
       
Organization      = СоздатьФабрикуXDTOПоИмени("Organization");
       
Organization.GUID = Строка(Выборка.Ссылка.УникальныйИдентификатор());
       
Organization.Name = Выборка.Наименование;
       
OrganizationList.Organization.Добавить(Organization);
    КонецЦикла;

    Возврат
OrganizationList;

КонецФункции

Функция
GetData()

   
Items = СоздатьФабрикуXDTOПоИмени("Items");

   
Запрос = Новый Запрос("ВЫБРАТЬ
                |   ВыручкаИСебестоимостьПродажОбороты.Период КАК Период,
                |   АналитикаУчета.Организация КАК Организация,
                |   СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) КАК Выручка,
                |   СУММА(ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) КАК Себестоимость
                |ИЗ
                |   РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , Месяц, ) КАК ВыручкаИСебестоимостьПродажОбороты
                |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаУчета
                |       ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам = АналитикаУчета.КлючАналитики

                |СГРУППИРОВАТЬ ПО
                |   ВыручкаИСебестоимостьПродажОбороты.Период,
                |   АналитикаУчета.Организация
                |
                |УПОРЯДОЧИТЬ ПО
                |   ВыручкаИСебестоимостьПродажОбороты.Период,
                |   АналитикаУчета.Организация.Наименование"
);

   
Выборка = Запрос.Выполнить().Выбрать();

    Пока
Выборка.Следующий() Цикл
       
Item = СоздатьФабрикуXDTOПоИмени("Item");
       
Item.GUID       = Строка(Выборка.Организация.УникальныйИдентификатор());
       
Item.Period     = Выборка.Период;
       
Item.Revenue    = Выборка.Выручка;
       
Item.Cost       = Выборка.Себестоимость;
       
Items.Item.Добавить(Item);
    КонецЦикла;

    Возврат
Items;

КонецФункции


Функция
СоздатьФабрикуXDTOПоИмени(Имя)

   
ТипФабрики = ФабрикаXDTO.Тип("http://www.avtomat.biz/crossprofit", Имя);
    Возврат
ФабрикаXDTO.Создать(ТипФабрики);

КонецФункции
// СоздатьФабрикуXDTOПоИмени()
 

В примере с веб-сервисом будет работать пользователь из полными правами, однако целесообразно создать дополнительное право, на использование операций веб сервиса.

Осталось только осталось провести публикацию на веб-сервере. Я использую Apache 2.2.

Публикация веб-сервиса на веб-сервере

В случае успешной публикации мы сможем получить WSDL описание нашего веб-сервиса с помощью браузера, по ссылке http://127.0.0.1/yt/ws/CrossProfit?wsdl

WSDL описание веб-сервиса

Все наш веб-сервис готов, переходим к разработки клиентского приложения.

РАЗРАБОТКА КЛИЕНТСКОГО ПРИЛОЖЕНИЯ

Как создавать и собирать приложения для Android с помощью 1С 8.3, я не стану, в интернете есть много статей на эту тему, например вот здесь.

Сначала создадим объект конфигурации WS-ссылка, он нам необходим будет для связи с основной информационной базой. При создании система нас спросит адрес, где работает наш веб сервис. Нам нужно прописать тот же адрес, что мы использовали для тестирования сервиса.

WS ссылка

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

Модель данных веб-сервиса

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


Процедура ЗагрузитьДанныеВРегистр() Экспорт

   
ВебСервис = ПодключитьВебСервис();

   
СписокОрганизаций = ВебСервис.GetOrganizationList().ПолучитьСписок("Organization");

    Для каждого
Организация Из СписокОрганизаций Цикл

       
ИдентификаторОрганизации = Новый УникальныйИдентификатор(Организация.GUID);
       
ОрганизацияСсылка        = Справочники.Организации.ПолучитьСсылку(ИдентификаторОрганизации);

        Если
ПустаяСтрока(ОрганизацияСсылка.ВерсияДанных) Тогда
           
СоздатьЭлементСправочникаОрганизации(ОрганизацияСсылка, Организация.Name);
        КонецЕсли;

    КонецЦикла;

   
Данные       = ВебСервис.GetData().ПолучитьСписок("Item");
   
НаборЗаписей = РегистрыСведений.ВаловаяПрибыль.СоздатьНаборЗаписей();
   
НаборЗаписей.Записать();

    Для каждого
ДанныеЗапись ИЗ Данные Цикл
       
ИдентификаторОрганизации = Новый УникальныйИдентификатор(ДанныеЗапись.GUID);
       
ОрганизацияСсылка        = Справочники.Организации.ПолучитьСсылку(ИдентификаторОрганизации);
        Если
ПустаяСтрока(ОрганизацияСсылка.ВерсияДанных) Тогда
            Продолжить;
        КонецЕсли;
       
НаборЗаписей = РегистрыСведений.ВаловаяПрибыль.СоздатьНаборЗаписей();
       
НаборЗаписей.Отбор.Период.Установить(ДанныеЗапись.Period);
       
НаборЗаписей.Отбор.Организация.Установить(ОрганизацияСсылка);
       
Запись                  = НаборЗаписей.Добавить();
       
Запись.Период           = ДанныеЗапись.Period;
       
Запись.Организация      = ОрганизацияСсылка;
       
Запись.Выручка          = ДанныеЗапись.Revenue;
       
Запись.Себестоимость    = ДанныеЗапись.Cost;
       
НаборЗаписей.Записать();
    КонецЦикла;

КонецПроцедуры




// Служебные процедуры и функции

Функция ПодключитьВебСервис()
   
Прокси              = WSСсылки.CrossProfit.СоздатьWSПрокси("http://www.avtomat.biz/crossprofit","CrossProfit", "CrossProfitSoap12");
   
Прокси.Пользователь = Константы.Пользователь.Получить();
   
Прокси.Пароль       = Константы.Пароль.Получить();
    Возврат
Прокси;
КонецФункции

Процедура
СоздатьЭлементСправочникаОрганизации(ОрганизацияСсылка, Наименование)

   
ЭлементСправочник              = Справочники.Организации.СоздатьЭлемент();
   
ЭлементСправочник.Наименование = Наименование;

   
ЭлементСправочник.УстановитьСсылкуНового(ОрганизацияСсылка);
   
ЭлементСправочник.Записать();

КонецПроцедуры

Функцию ПодключитьВебСервис используем для создания объекта WSПрокси, заполняются данные для регистрации из соответствующих констант. Процедура ЗагрузитьДанныеВРегистр анализирует полученные данные и записывает их в нужные справочники и регистры.

В конфигурации есть еще три общих формы.

Форма меню, она размещается в рабочей области начальной страницы.

Форма меню программы

Форма настройки, используется для сохранения настроек пользователя.

Форма настроек авторизации

Ну и сама форма отчета.

Форма отчета мобильного приложения

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

&НаКлиенте
Процедура СформироватьОтчет(Команда)
    Если
ПустаяСтрока(Месяц) Тогда
       
Сообщение = Новый СообщениеПользователю;
       
Сообщение.Текст = НСтр("ru='Необходимо указать месяц'");
       
Сообщение.Поле = "Месяц";
       
Сообщение.Сообщить();
        Возврат;
    КонецЕсли;
    Если
Год < 1 Тогда
       
Сообщение = Новый СообщениеПользователю;
       
Сообщение.Текст = НСтр("ru='Необходимо указать год'");
       
Сообщение.Поле = "Год";
       
Сообщение.Сообщить();
        Возврат;
    КонецЕсли;
   
СформироватьОтчетНаСервере();
КонецПроцедуры


&НаСервере
Процедура СформироватьОтчетНаСервере()

   
Макет            = ПолучитьОбщийМакет("МакетОтчета");
   
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   
ОбластьСтроки    = Макет.ПолучитьОбласть("Строки");

   
Период = Дата(Формат(Год, "ЧГ=0") + ПолучитьНомерМесяца() + "01000000");

   
НаборЗаписей = РегистрыСведений.ВаловаяПрибыль.СоздатьНаборЗаписей();
   
НаборЗаписей.Отбор.Период.Установить(Период);

   
НаборЗаписей.Прочитать();

   
Результат.Вывести(ОбластьЗаголовок);

    Для каждого
Запись ИЗ НаборЗаписей Цикл
       
ОбластьСтроки.Параметры.Заполнить(Запись);
       
ОбластьСтроки.Параметры.Прибыль = Запись.Выручка - Запись.Себестоимость;
       
Результат.Вывести(ОбластьСтроки);
    КонецЦикла;

КонецПроцедуры
// СформироватьОтчетНаСервере()

&НаСервере
Функция ПолучитьНомерМесяца()

    Если
Месяц = "Январь" Тогда
        Возврат
"01";
    КонецЕсли;

    Если
Месяц = "Февраль" Тогда
        Возврат
"02";
    КонецЕсли;

    Если
Месяц = "Март" Тогда
        Возврат
"03";
    КонецЕсли;

    Если
Месяц = "Апрель" Тогда
        Возврат
"04";
    КонецЕсли;

    Если
Месяц = "Май" Тогда
        Возврат
"05";
    КонецЕсли;

    Если
Месяц = "Июнь" Тогда
        Возврат
"06";
    КонецЕсли;

    Если
Месяц = "Июль" Тогда
        Возврат
"07";
    КонецЕсли;

    Если
Месяц = "Август" Тогда
        Возврат
"08";
    КонецЕсли;

    Если
Месяц = "Сентябрь" Тогда
        Возврат
"09";
    КонецЕсли;

    Если
Месяц = "Октябрь" Тогда
        Возврат
"10";
    КонецЕсли;

    Если
Месяц = "Ноябрь" Тогда
        Возврат
"11";
    КонецЕсли;

    Если
Месяц = "Декабрь" Тогда
        Возврат
"12";
    КонецЕсли;

    Возврат
"00";

КонецФункции
// ПолучитьНомерМесяца()

Как видите, основным неудобством мобильной платформы является отсутствие запросов и СКД, с которыми так удобно работать. Скомпилируем базу и посмотрим что у нас получилось.

Форма меню основного окна программы и настроек авторизации.

Основное меню программы Форма авторизации

Форма отчета из данными.

Форма отчета Форма отчета

В файле к статье прикреплены файл конфигурации и XML схема пакета XDTO.

Статья написана по материалам сайта avtomat.biz

Мобильное приложение веб-сервис веб-сервер 8.3

См. также

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    166463    333    277    

373

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141517    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24020    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51255    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36589    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56208    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171174    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186876    589    509    

526
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DitriX 2102 16.09.13 11:55 Сейчас в теме
"Хорошо что месяцев 12" (с)
НаименованиеМесяца = Формат(НовДата, "ДФ=MMMM");

Та и вообще - слишком уж вы усложнили все.
При передачи данных с 1С в 1С - используется минимум кода.
Ваш подход не совсем верный, если вы использовали такие сложные механизмы для примера, то я не увидел этот пример.
Если по не знанию более легкого пути решения, то рекомендую помыслить креативно, тут вся ваша зада уложится в десяток строк кода и пустой веб сервис.
3. awk 744 18.09.13 22:51 Сейчас в теме
(1) DitriX, Если он покреативит, то для таких вещей и 1С на андроиде не нужно будет. Достаточно синхронизации отчетов (exel на андроиде есть) почта, фтп, облака. Фот если бы данные в андроиде вводить, а потом передавать в 1С - это куда более интересно.
4. DitriX 2102 18.09.13 23:12 Сейчас в теме
(3) это была шутка?
Это основная цель веб сервисов - отправка и получение данных.
Выбирая организацю - вы же должны как то ее передать в 1с что бы отбор по ней сделать.
И то, что вы этого не поняли - еще один камень в огород этой статьи :)
5. awk 744 18.09.13 23:26 Сейчас в теме
(4) DitriX,
1. Шутка, но грустная... Так как если сесть и подумать, не абстрактно, а применительно к ситуации и людям, то смысл в таких отчетах через 1С мобильное приложение?
2.Посмотри функции веб сервисов (GetOrganizationList, Getdata). 1С уже умеет угадывать параметры? ;)
6. DitriX 2102 19.09.13 09:54 Сейчас в теме
(5)1. При чем тут отчеты? Вы таким образом можете гонять произвольные данные.
2. А этим вы пытались подтвердить сказанное мною выше?
2. detro 47 16.09.13 16:30 Сейчас в теме
"WSСсылки.CrossProfit.СоздатьWSПрокси("http://www.avtomat.biz"
пароль будет передан "в открытую"
7. BenderOstap 16.11.13 15:07 Сейчас в теме
"Интеграция типовой конфигурации из мобильным приложением". Может хватит уже над языком издеваться?
Прикрепленные файлы:
8. akomar 458 16.11.13 15:48 Сейчас в теме
Оставьте свое сообщение