Příběh jedné aplikace: mobilní „1C: Management naší společnosti. Počáteční nastavení mobilní aplikace "1C-Rating: Mobilní číšník" Vyvolání provozu web serveru

  • tutorial

Ahoj zlato.

V tomto článku vám chci představit nový produkt „FBA Toolkit“, který výrazně zjednodušuje proces vývoje firemní mobilní aplikace na 1C + Android.
„FBA Toolkit“ je:
- vývoj "nativní" aplikace pro Android v nativním IDE v Javě;
- 1C: Enterprise 8.1 (8.2) jako zdroj dat, podnikový informační systém.

V první řadě bude framework užitečný pro 1C programátory, kteří by rádi vyvíjeli obchodní aplikace pro Android, ale mají potíže se zvládnutím nové platformy pro ně. K zahájení vývoje stačí základní znalost Javy. Dále vám ukážu, jak vytvořit funkční prototyp aplikace klient-server během několika hodin.

Příprava pracoviště Před zahájením samotného procesu vývoje je nutné připravit pracoviště vývojáře. Požadované:

1. Nainstalujte a nakonfigurujte:
- Java SDK + Eclipse + Android SDK;
- Webový server (IIS nebo Apache);
- 1C: Enterprise 8.1 (8.2)

2. Pro Eclipse importujte dva projekty knihoven: ActionBarSherlock a ru_profu1c_fba z úložiště SVN.

3. Nainstalujte konfigurační distribuční sadu FBA a zkombinujte ji s aplikačním řešením založeným na 1C.

Celý proces předkonfigurace je podrobně popsán v článcích:
Příprava pracoviště vývojáře
Instalace konfigurační distribuční sady „FBA“.
Kombinace konfigurace „FBA“ s aplikačním řešením a publikováním na webovém serveru

Nastavení by nemělo trvat dlouho a pravděpodobně již máte nainstalovaný nějaký potřebný software.

Popis aplikace Vytvořme mobilní aplikaci "Report to manager", která je určena k pravidelnému informování manažera o stavu v podniku. Aplikace se bude skládat ze 3 obrazovek:
  • „Přihlášení“ - oprávnění uživatele při spuštění programu.
  • „Seznam zpráv“ je hlavní obrazovka naší aplikace. Zobrazí se seznam dostupných zpráv s možností prohlížení a aktualizace dat z databáze 1C.
  • „Nastavení programu“ - zde uživatel nastavuje parametry autorizace a adresu serveru 1C, konfiguruje plán automatické výměny se serverem 1C.
  • Aplikace bude implementovat 2 možnosti pro příjem dat ze serveru 1C:

  • Report "Zboží na skladech". Je vygenerován na serveru a zkompilován jako HTML dokument, jednoduše se zobrazí v mobilní aplikaci. Nejjednodušší možnost, forma sestavy je pevná a nelze ji měnit.
  • Zpráva "Finanční ukazatele". Zde se získají výchozí data pro sestavu ve formě tabulky, podle které je následně sestava sestavena. Výhody této možnosti: libovolná forma výstupu sestavy vč. ve formě grafů a diagramů; instalace výběrů a řazení je možná.
  • Vytvoření šablony mobilní aplikace v 1C Vývoj mobilní aplikace začíná v 1C, což není překvapivé. Zde určíte složení metadat, nastavíte schéma výměny a znovu vytvoříte šablonu vaší budoucí mobilní aplikace.

    Vytvořte nový prvek v adresáři "Mobilní aplikace" s názvem "Report to manager" a identifikátorem SAMPLE_REPORT_HEAD .

    Vyberte skupinu "Externí data" v seznamu "Metadata" a klikněte na tlačítko "Přidat" na panelu nástrojů. Vyplňte parametry nové tabulky, jak je znázorněno na obrázku:

    "Indicator" - testovací znázornění indikátoru zprávy, řádek (250)
    "Value" - číselná hodnota ukazatele, číslo (15.2)
    Názvy sloupců a samotná tabulka jsou zde zpravidla nastaveny v ruštině, budou použity k vyplnění tabulky daty pomocí vestavěného jazyka 1C. Klikněte na OK, tabulka se přidá do stromu metadat, u mobilní aplikace jsou názvy automaticky přeloženy do latinky.

    Připravili jsme tedy strukturu tabulky hodnot (z hlediska 1C), do které budeme přenášet data pro výkaz „Finanční ukazatele“. U druhé sestavy "Zboží na skladech" se data přenesou jako externí soubor.

    Na záložce "Schéma výměny" zkontrolujte, zda je zaškrtnutý příznak "Nahrát". Příznak "Načítání" není důležitý, protože. nebudeme v 1C zpracovávat přijaté změny této tabulky z mobilní aplikace.

    Uložte změny. Klikněte na tlačítko "Šablona mobilní aplikace" na panelu nástrojů, nastavte parametry své mobilní aplikace

    "Adresář šablon" - cesta k adresáři, kam budou uloženy vygenerované soubory šablon mobilní aplikace.

    Na záložce "Základní" zadejte název balíčku, musí se jednat o jedinečný identifikátor. Pokud máte webovou stránku, použijte ji k vygenerování předpony. V tomto příkladu jsem zadal ru.profi1c.samples.report.head

    Na záložce Web Service je IP adresa 10.0.2.2, ve výchozím nastavení je to adresa vašeho počítače při přístupu z emulátoru Android. Do polí "Název webové služby" a "Podadresář aplikace" zadejte údaje, které byly zadány při publikování webové služby.

    Vezměte prosím na vědomí, že pro 1C 8.2 budete s největší pravděpodobností mít podadresář aplikace s dalším podadresářem /ws, tj. demoFba/ws, viz další podrobnosti.
    Klikněte na Vytvořit, vygeneruje se šablona projektu pro Android.

    Příprava počátečních dat pro sestavy v 1C Otevřete modul fbaEventSubscription v konfigurátoru 1C a přidejte následující kód do procedury BeforeSubmittingExternalTable:

    If Abbreviated LP(MobileApplication.Code) = "SAMPLE_REPORT_HEAD" Then If TableName = "ReportTo Manager" Then //dummy report data ListTemp = fbaGeneral.FromStringWithDelimiters("Hotovost,Vyrovnání s odpovědnými osobami,Celkové pohledávky,Zbytky zboží,Závazky, Objemový prodej"); RNG = Nový generátor náhodných čísel(123456789); Pro každou položku seznamu z cyklu ListTemp NewRow = ExternalTable.Add(); NewString.Indicator = ListItem.Value; NewString.Value = RNG.RandomNumber(0,999999) + Sin(RNG.RandomNumber(0,999)); EndCycle; EndIf; EndIf
    V tomto příkladu je tabulka naplněna fiktivními údaji, v reálné aplikaci zde můžete předávat libovolný počet ukazatelů sestavy.
    Data pro první zprávu jsme zjistili, na druhou zbývá se připravit. Ve stejném modulu fbaEventSubscription přidejte následující kód do procedury PrepareBinaryDataForSubmission:

    DD = nedefinováno; If ShortLP(MobileApp.Code) = "SAMPLE_REPORT_HEAD" Then If Identifier = "REPORT_PRODUCTS_IN_STOK" Then FileName = GetTemporaryFileName("html"); Report = Reports.GoodsInWarehouses.Create(); If Report.SaveReportTOHTML(FileName) Then DD = New BinaryData(FileName); DeleteFiles(FileName); EndIf; EndIf; EndIf; Návrat DD;
    Komentuji kód. Když si mobilní aplikace vyžádá libovolná data (ve formě souboru) s identifikátorem „REPORT_PRODUCTS_IN_STOK“, provede se report v 1C a jeho výsledek se uloží do dočasného souboru. Tento dočasný soubor je poté načten jako binární data a předán do mobilní aplikace. Dočasný soubor bude odstraněn.

    Jak se generuje html soubor v tomto případě není pro nás důležité. Můžete použít standardní mechanismus 1C pro uložení dokumentu tabulky jako HTML nebo vygenerovat HTML ručně. Ukázku výstupu můžete vidět v konfiguraci "FBA demo" sestava "Zboží na skladech".

    Se vším 1C se zaměříme na vývoj mobilní aplikace pro Android.

    Návrh aplikace pro Android Šablonu projektu Android vytvořenou v 1C importujeme do pracovního prostoru Eclipse.

    Spusťte Eclipse a importujte projekt: Soubor > Import… Ve skupině Android vyberte položku „Existuje Android Code Into Workspace“ klikněte na Další , zadejte cestu k adresáři šablon projektu Android a klikněte na Dokončit , nový projekt bude přidán do pracovní prostor. Pokud máte nějaké potíže, viz, postup je popsán na obrázcích.

    1. Vytvoříme sestavu „Finanční ukazatele“, pro kterou je zdrojem dat tabulka hodnot přijatých od 1C. Chcete-li to provést, přidejte novou třídu ToChiefReport.java, zde je úplný zdrojový kód:

    Ukázat

    /** * Příklad vytvoření sestavy založené na datech z místní databáze sqlite. Zdrojem * dat je externí tabulka “Report to Chief” * */ public class ToChiefReport rozšiřuje 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("Jejda, nebyla vytvořena žádná sestava!") ); ) super.build (kontext, builderResult); ) private void makeReport(kontext kontextu) vyvolá výjimku SQLException (pomocník DBHelper = new DBHelper(kontext); // Hlavička sestavy a tabulky setHeader2("Finanční ukazatele"); setTableHeader("Name ", "Částka, rub ."); // Řádky tabulky budou v pořadí, v jakém byly přidány Map mapData = new LinkedHashMap(); // Výběr dat z místní databáze sqlite, externí tabulka // "Nahlásit manažerovi" ExTableRaportRukovoditelyuDao dao = pomocník .getDao(ExTableRaportRukovoditelyu.class); Řádky seznamu = dao.select(); for (ExTableRaportRukovoditelyu řádek: rows) ( mapData.put(row.pokazatel, row.znachenie); ) setTableData(mapData); ))
    Komentuji kód. Abstraktní třída SimpleMapHtmlReport, ze které dědí, je navržena k vytvoření jednoduché HTML sestavy s dvousloupcovou tabulkou.
    První 2 metody getResIdIcon() a getResIdTitle() vracejí ikonu a název naší sestavy k zobrazení v seznamu. V obslužné rutině události "build" je volána metoda makeReport, ve které je naše implementace sestavování sestav.
    Při vytváření sestavy se nejprve nastaví hlavička sestavy a tabulky a poté se všechny záznamy z místní tabulky sqlite přečtou jako řádky tabulky sestavy. A nakonec v metodě setTableData() nastavíme data pro tabulku sestav. Uf, jak těžké je komentovat zřejmé věci.


    2. Vytvořte druhý přehled, zde je to ještě jednodušší:

    Ukázat

    /** * Příklad zkompilované sestavy, pouze výstupem souboru Html. V tomto příkladu byl * datový soubor vygenerován v 1C a přenesen do mobilního klienta během výměny * */ public class ProductsInStokReport rozšiřuje SimpleCompiledHtmlReport ( // Název, pod kterým je uložen přijatý soubor od 1C (viz postup výměny // MyExchangeTask) public static final String REPORT_FILE_NAME = "products_in_stok.html"; public ProductsInStokReport(soubor souboru) ( super(soubor); ) @Override public int getResIdIcon() ( return R.drawable.report_02; ) @Override public intTitles(ResI) ( return R.string.report_name_products_in_stok ; ) )


    3. Rozšiřme předdefinovanou výměnnou proceduru o 1C server, tzn. přidejme k tomu ještě jeden krok – získání dat pro naši druhou zprávu ve formě kompilovaného souboru. Přidejme třídu MyExchangeTask zděděnou z ExchangeTask:

    Ukázat

    /** * Standardní postup výměny doplněný o vlastní pravidla. * Navíc je získán jeden zkompilovaný soubor - zpráva. * */ veřejná třída MyExchangeTask rozšiřuje ExchangeTask ( // ID sestavy, jak je nastaveno v soukromém statickém konečném řetězci 1C ID_REPORT_PRODUCTS_IN_STOK = "REPORT_PRODUCTS_IN_STOK"; public MyExchangeTask(ExchangeVariant exchangeVariant, WSHelper wsrvHelper, DBOpenHelper,(exrvHelper) dbO super penHelper ); ) @Override protected boolean doExecute() vyvolá výjimku ( // Proveďte kroky výměny podle předdefinovaných pravidel boolean success = super.doExecute(); if (úspěch) ( // Získejte libovolná data – naše 2. zpráva onStepInfo("Získávání zpráv) ... "); Řetězec fPath = appSettings.getCacheDir().getAbsolutePath() + "/" + ProductsInStokReport.REPORT_FILE_NAME; Soubor f = wsHelper.getLargeData(ID_REPORT_PRODUCTS_IN_STOK, null, "", fPath); úspěch = (f !=) null); ) návrat úspěch; ) )
    K získání dat sestavy se používá metoda webové služby getLargeData, která v případě úspěchu uloží výsledek do souboru na zadané cestě. Pozor na identifikátor ID_REPORT_PRODUCTS_IN_STOK, musí být stejný jako v 1C v metodě PrepareBinaryDataToSend.


    4. Zobrazení seznamu sestav na hlavním formuláři. Otevřete soubor res\ activity_main.xml a přidejte listView, který zobrazí seznam sestav:

    V MainActiviy.java přidejte:

    A) lokální proměnná pro seznam
    soukromý seznam ListView;
    b) metoda inicializace
    private void init() ( list = (ListView) findViewById(android.R.id.list); // Vytvoří adaptér pro zobrazení seznamu sestav 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) ( // Zobrazit sestavu v dialogovém okně po kliknutí IReport report = (IReport) list.getItemAtPosition(position ) ; report.onShow(MainActivity.this); ) )); )
    a jeho volání v onCreate() po nastavení rozvržení formuláře
    setContentView(R.layout.activity_main); init();
    c) metoda inicializace seznamu sestav
    /* * Připravte seznam sestav */ private List createReportList() ( List lst = new ArrayList(); // Vytvořte první sestavu, dočasný adresář, kde je soubor uložen, je převzat z // sestava nastavení IReport = new ProductsInStokReport (new File(getAppSettings() .getCacheDir(), ProductsInStokReport.REPORT_FILE_NAME)); lst.add(report); // Vytvoření a přidání dalších sestav do seznamu lst.add(new ToChiefReport()); )
    d) postup pro spuštění burzy podle vašich pravidel
    /* * Spusťte výměnu podle mých pravidel. Upozorňujeme, že v plánovači * (pokud je nainstalován) výměna zůstala podle standardních pravidel */ private void startExchangeMyRules(ExchangeVariant variant,boolean cancelable) ( // pomocník pro volání metod webové služby WSHelper wsHelper = new WSHelper(getExchangeSettings())) ; MyExchangeTask task = new MyExchangeTask(variant, wsHelper, getHelper()); startExchange(task, cancelable); )
    A změňte volání procedury výměny startExchange(ExchangeVariant.FULL, true) v obslužné rutině onOptionsItemSelected na startExchangeMyRules(ExchangeVariant.FULL, true).

    Aplikace je připravena, autorizační formuláře a nastavení programu se vytvoří automaticky, nebudeme je měnit.
    Pojďme to otestovat na emulátoru. Pokud jste nikde neudělali chybu, aplikace se spustí. Místo autorizačního okna se však okamžitě zobrazí okno nastavení, protože autorizační údaje (uživatelské jméno a heslo) nejsou zadány.

    Zadejte uživatelské jméno: ivanov
    A heslo: 123456

    Spusťte databázi 1C a otevřete adresář Mobile Employees. Jako mobilní zařízení zadejte předdefinovaný prvek „Emulátor zařízení“, v tabulkové části „Mobilní aplikace“ přidejte aplikaci „Hlášení správci“ a nastavte shodné uživatelské jméno a heslo.

    Spusťte proceduru výměny na emulátoru (tlačítko se šipkou „Nahoru“ na panelu vpravo)

    Výsledek výměny se zobrazí v oznámení:

    Kliknutím na něj spustíte aplikaci (nebo zobrazíte podrobnosti o chybě, pokud se výměna nezdařila).

    Pojďme zkontrolovat, co se stalo. Klikněte na přehled v seznamu:

    Ukázat


    Skvělý! Zobrazují se hlášení, měřítko můžete měnit tlačítkem nebo gesty.


    Aplikace je připravena, ukázalo se, že je docela funkční a snadno rozšiřitelná. Přidání dalších přehledů nebude složité.
    Dokumenty můžete přenášet v různých formátech jako je *.doc nebo *.pdf a používat k jejich prohlížení externí aplikace. Podívejte se na zdrojový kód příkladu, existují 3 další sestavy:
    • graf pomocí Google Chart Tools
    • vykreslovat pomocí pluginu jQuery Plot
    • výstup PDF zprávy externí aplikací (PdfReport.java)
    Nebudu podrobně popisovat, a tak se článek ukázal jako velký. Pokud máte nějaké dotazy, jsem připraven odpovědět v komentářích. Zde je výsledek výstupu:

    Ukázat


    Kompletní ukázkový kód si můžete stáhnout na https://xp-dev.com/svn/fba_toolkit_public/samples/fbaSample4ReportHead/

    Použití HTML k vytváření sestav umožňuje vytvářet širokou škálu sestav, vč. a s interaktivními prvky. Například v jednom z našich projektů se používá následující zpráva:

    Ukázat

    • pro pole "Dluh" se používá podmíněné barevné schéma v závislosti na částce;
    • úplný seznam neuhrazených faktur se otevře pouze kliknutím na značku "Vše", standardně se zobrazí pouze poslední 4.

    A samozřejmě nejste ničím omezeni, pro zobrazování sestav a grafů můžete využít knihovny třetích stran, jako je achartengine, nebo si vytvořit vlastní graf/graf (příkladů je spousta, včetně těch v Android SDK) .

    To je vše, další příklady najdete na webu http://profi1c.ru.
    V blízké budoucnosti se plánuje přidání lekcí o interaktivních prvcích a adaptérech knihovny FBA a ukázka práce s off-line mapami mapsforge.

    Létání v masti Produkt FBA Toolkit je plánován na komerční distribuci, nyní je ve stavu „demo verze“. Můžete jej volně používat pro testování a učení.
    Omezení:
    • program přestane fungovat na konci licenčního období demo, tzn. po 31.12.13;
    • Při spuštění se zobrazí upozornění:

    V blízké budoucnosti (ne více než měsíc) bude komerční verze, informace o ceně a licenčním řízení budou přidány na naše webové stránky.

    Děkuji, že jste dočetli až do konce. Jste připraveni odpovědět na vaše otázky v komentářích pro 1C i Android.

    Štítky: Přidat štítky

    Na příkladu mobilní aplikace „1C: Managing our company“ (zkráceně UNF) chci ukázat vývoj mobilní obchodní aplikace od jejího vzniku a vydání úplně první verze až po současnost. Nyní má tato aplikace více než 220 000 stažení; aplikace je zdarma, ale má placené možnosti (implementované prostřednictvím nákupů v aplikaci).


    První verze mobilního UNF byla vyrobena na jedné z prvních verzí mobilní platformy 1C:Enterprise v roce 2012. V té době již existovala konfigurace klient-server „1C: Small Company Management“ (tehdy se tak jmenovalo), program pro automatizaci činností malé firmy – prodej, nákup, databáze zákazníků a dodavatelů, skladové hospodářství, výroba atd.

    Stejně jako většina mobilních aplikací napsaných na multiplatformní mobilní platformě 1C:Enterprise je mobilní UNF k dispozici pro iOS, Android a Windows.

    Úkol byl stanoven následovně: vyrobit mobilní aplikaci, která bude podporovat část pracovních scénářů „velkého“ UNF. Aplikace musí být schopna pracovat jak autonomně, tak synchronizovat data s „velkým“ UNF (dále slovo „velký“ ve vztahu k klient-server verzi UNF, budu psát bez uvozovek, abych nepřetěžoval text ). V případě práce s velkým UNF by měly být podporovány scénáře „mobilních“ zaměstnanců – obchodní zástupce, servisní technik, prodejce.

    První verze byla vytvořena za 1 člověk-měsíc. Při tvorbě mobilní aplikace byly některé z metadatových objektů (adresáře, dokumenty) implementovány na bázi velkých objektů UNF. Některé funkce však musely být naprogramovány od začátku, například proces výměny dat s velkým UNF. Pravda, ve vztahu k výměně dat jsme museli vlastně trochu programovat - používali jsme standardní mechanismy platformy (zejména výměnné plány), které omezují psaní kódu na minimum.

    Kromě zjednodušení práce se synchronizací dat platforma 1C výrazně usnadňuje návrh plnohodnotné mobilní aplikace tím, že poskytuje vývojáři takové komponenty rozhraní, jako jsou seznamy (tabulkové a hierarchické) s možností v nich prohledávat, vstupní pole s vyhledáváním , tabulky pro sestavy, široká nabídka grafů, možnost tisku na WiFi a Bluetooth tiskárnách atd.

    Vlastnosti mobilní verze Existují dvě hlavní strategie pro výběr funkčnosti mobilní aplikace. První z nich je „jedna aplikace – jedna funkce“. Například mobilní aplikace pro příjem zboží na sklad, která umí pouze naskenovat čárový kód zboží vestavěnou kamerou a odeslat informaci o přijatém zboží na server. Druhou strategií je vytvořit mobilní aplikaci s širokou funkčností vše v jednom. Oba přístupy mají právo na život; při psaní mobilního UNF jsme zvolili druhý přístup – naše aplikace pokrývá mnoho úkolů ve své tematické oblasti a může pracovat zcela autonomně a sloužit potřebám malé organizace. Další výhodou tohoto přístupu je, že uživatel může pracovat s několika vzájemně souvisejícími funkcemi z jedné aplikace.

    Mobile UNF široce využívá funkce mobilního zařízení, zejména:

    • Vestavěnou kameru zařízení lze použít k fotografování produktu při vyplňování produktové karty, ke čtení čárových a QR kódů
    • Fakturu k platbě je možné zaslat klientovi emailem nebo prostřednictvím SMS
    • Protistranu lze vybrat z adresáře mobilního zařízení
    • Pokud má protistrana telefonní číslo, můžete protistraně zavolat nebo poslat SMS jedním dotykem; pokud je uveden e-mail, poslat dopis; pokud je uvedena adresa, zobrazit ji na mapě
    • Dokáže tisknout dokumenty na tiskárnách přes WiFi a Bluetooth
    Existuje možnost zálohovat a obnovit mobilní databázi UNF na Yandex.Disk a odeslat databázi poštou.

    Konfigurace mobilního UNF vypadá docela spartánský (viz screenshot níže):

    • 8 referenčních knih (ve velkých referenčních knihách UNF - 273)
    • 7 dokumentů (ve velkém UNF - 125)
    • 3 deníky dokumentů (ve velkém UNF - 24)
    • 3 registry informací (ve velkém UNF - 357)
    • 4 akumulační registry (ve velkém UNF - 64)

    Hlavní objekty mobilního UNF

    Ale i přes tak malý počet aplikačních objektů se produkt ukázal jako docela funkční.

    Zajímavostí mobilního UNF je, že jej často používají lidé, kteří o 1C ještě neslyšeli (ano, i u nás se najdou), ti, kteří potřebovali mobilní aplikaci pro evidenci své malé firmy (např. domácí tvoření). Prostě to našli hledáním na Google Play nebo AppStore, přečetli si recenze a začali pracovat.

    Práce offline Tento scénář je navržen pro velmi malé organizace, kdy veškeré účtování probíhá výhradně na mobilním zařízení. Může to být například „domácí“ podnikání – výroba šperků doma a jejich prodej na stránce VKontakte. Nebo možná i malý obchod - osobně jsem viděl případ, kdy hračkářství specializované na prodej Lego konstruktérů vedlo záznamy výhradně na mobilní verzi UNF. Vzhledem k tomu, že mobilní UNF umí tisknout na WiFi a Bluetooth tiskárnách, lze s ním vyřešit poměrně velké množství úloh. Mobilní UNF podporuje zpracování objednávek, zadávání účtenek a odchozích faktur, účtování příjmů a výdajů peněz Práce v synchronizaci se serverem (první verze) především s objednávkami (příjem a plnění objednávek) a související činnosti (vedení adresářů protistran, zboží a služby atd.).

    Synchronizováno s velkým seznamem zboží a služeb, dodavatelů a objednávek UNF.


    Výměna dat mezi mobilními a velkými UNF v prvních verzích

    Objednávky zadané z mobilních zařízení končily ve velkém UNF a při synchronizaci skončily na mobilních zařízeních odpovědných za objednávky. Dokumenty jako pokladní doklady, prodej zboží atd. zadané na mobilních zařízeních šly do velkého UNF, ale nebyly mezi mobilními zařízeními synchronizovány. Veškerá práce v mobilní aplikaci v synchronizačním režimu probíhala hlavně kolem objednávek - jejich přijímání a provádění, zatímco plnohodnotné účtování na mobilním zařízení nebylo prováděno, k tomu bylo nutné použít velké UNF na počítači.

    Bylo tomu tak v prvních verzích, později jsme však situaci změnili a rozšířili seznam scénářů použití mobilního UNF, aby práce s ním byla pro uživatele pohodlnější.

    Něco málo o synchronizaci dat Výměna dat mezi mobilními a velkými UNF probíhá prostřednictvím webových služeb; mobilní UNF vyvolává webové služby nasazené na straně velkého UNF. Datové struktury ve velkých a mobilních UNF se liší; Při návrhu architektury jsme zvažovali 2 možnosti výměny dat:
  • Vytvořte datovou strukturu ve velkém UNF, duplikujte datovou strukturu mobilního UNF, a vyměňujte si data s mobilním UNF „one-to-one“. Při změně dat ve velkém UNF je nutné přenést nová/změněná data do této duplicitní struktury a po výměně dat s mobilním UNF převést data, která přišla z mobilního zařízení a umístěná v duplicitní struktuře, do velké Formát UNF.
  • Výměna dat přímo se strukturami velkého UNF, převod dat "za běhu" podle pravidel výměny.
  • Rozhodli jsme se pro druhou možnost. První varianta, byť slibovala některé výhody spojené s jednoduchostí vlastní výměny dat, špatně zvládla situaci, kdy se v nové verzi mobilního UNF změnila (rozšířila) struktura dat; aby vzájemná výměna dat nadále fungovala, bylo by nutné aktualizovat server, velké UNF. Což bylo z mnoha důvodů nepřijatelné.

    Mechanismy výměny dat implementované v platformě přebírají většinu práce při vytváření balíčků pro synchronizaci dat, což vám umožňuje omezit psaní kódu na minimum. V procesu výměny se používá standardní mechanismus platformy 1C: Enterprise - mechanismus výměny dat; pro každý mobilní UNF je vytvořen uzel pro výměnu dat ve velkém UNF, služba registrace změn se používá ve velkém a mobilním UNF ke sledování dat, která se změnila od poslední synchronizace atd.

    Mobilní aplikace zahájí výměnu dat, vytvoří výměnný balíček pomocí mechanismů platformy (obsahující identifikátor mobilní aplikace a data aktualizovaná na mobilním UNF od poslední synchronizace) a odešle ho velkému UNF. Na základě informací ve startovacím balíčku připraví velké UNF pro mobilní UNF data změněná ve velkém UNF od poslední synchronizace a zabalí je do paketů. Balíčky ve formátu XDTO jsou objekty metadat 1C serializované v XML; velikost každého balíčku není větší než 500 objektů.

    Mobile UNF bere tento datový paket po paketu. Po stažení posledního balíčku začne mobilní UNF zpracovávat přijatá data - zaúčtovat dokumenty, napsat referenční knihy atd. V případě přerušení spojení jsou pakety obnoveny; mechanismus životopisu pro UNF jsme napsali sami (není v platformě), ale protože je mobilní UNF dodáváno ve zdrojových kódech, mohou se vývojáři podívat na implementaci mechanismu a vypůjčit si ho pro své aplikace.

    Během počáteční synchronizace mobilního UNF s velkým UNF nemůžete pracovat v mobilním UNF - objeví se modální okno zobrazující průběh procesu. Všechny následné synchronizace jsou na pozadí a neblokují provoz mobilního UNF.

    Úplný seznam objektů vyměněných mezi mobilními a velkými UNF:

    • Referenční knihy:
      • Nomenklatura
      • Protistrany
      • seznam uživatelů
    • Dokumentace:
      • Objednávky kupujícího
      • Překontrolovat
      • Výdaj na pokladně
      • Doklad o nákupu
      • Prodejní faktura
      • Výroba
    • Registry (ale ne všechny ceny, ale pouze ty hlavní):
      • CenyDodavatelé
      • Ceny zboží
    • Podrobnosti o organizaci:
      • název
      • Daňové informace
    Ve velkém UNF má zboží obrázky - obrázky samotného zboží. Abychom minimalizovali návštěvnost, obrázky do mobilního UNF nenahráváme, načtou se na vyžádání – například když v mobilním UNF otevřeme produktovou kartu.


    Produktová karta s obrázkem produktu

    Vývoj aplikace – vývoj případů užití Typická situace – byznys roste a funkčnost mobilního UNF na jednom mobilním zařízení již nestačí. V podniku se objeví další zaměstnanec (nebo zaměstnanci), kteří také potřebují pracovat se zakázkami.

    V prvních verzích mobilního UNF byl scénář migrace poměrně jednoduchý - data zadaná v mobilním UNF byla zkopírována do databáze velkého UNF a uživatel musel od této chvíle vést záznamy na počítači. V tomto případě bude mobilní UNF pracovat v režimu práce s objednávkami a nebude již možné vést evidenci (jako na samostatné verzi mobilního UNF).

    To samozřejmě koncovému uživateli příliš nevyhovovalo – byl již zvyklý vést záznamy z mobilního zařízení a zde byl násilně nucen přejít na klávesnici počítače. Ne každý s tím bude spokojený.

    Proto jsme rozšířili seznam scénářů provozu mobilního UNF. Pomohl k tomu vznik naší cloudové služby http://1cfresh.com, založené na cloudové technologii 1cFresh. Bylo možné umístit velké UNF do cloudu. Popsali jsme tři scénáře používání mobilní aplikace, když podnikání uživatele roste:

  • Docela malý podnik. Účet je veden na jednom mobilním zařízení.
  • Obchod roste – objevili se zaměstnanci. Mobilní UNF můžete umístit na mobilní zařízení zaměstnanců. Zároveň musíte být schopni vyměňovat data mezi mobilními zařízeními pro synchronizaci dat; K tomu jsme se rozhodli nepoužívat výměnu přes soubory, ale použít k synchronizaci (a zároveň k zálohování) verzi velkého UNF umístěného v cloudu http://1cfresh.com. Když je tento skript povolen, v cloudu http://1cfresh.com se vytvoří velká instance UNF, jejíž základna bude sloužit k synchronizaci dat mezi mobilními zařízeními. Použití jednoho mobilního zařízení v tomto scénáři je bezplatné, za každé další zařízení účtujeme 75 rublů / měsíc, v tomto scénáři nemůžete použít více než tři zařízení. Zároveň lze uživatelům mobilních zařízení přiřadit předdefinované role - obchodní zástupce, servisní technik, prodejce (lze i detailně konfigurovat role); funkčnost mobilní aplikace bude odpovídajícím způsobem omezena. Můžete také pracovat prostřednictvím webového klienta nebo tenkého klienta s velkým UNF hostovaným v cloudu, ale funkčnost cloudového UNF bude omezena na funkčnost mobilního UNF. Není ale nutné pracovat přímo v cloudu UNF – veškerou práci lze provádět pouze z mobilních zařízení.
  • Podnik se rozrostl do velikosti průměrné firmy. V tomto případě má smysl pronajmout si plnohodnotnou verzi velkého UNF v cloudu s cílem získat (přes webového klienta nebo tenkého klienta) další funkcionalitu - CRM (plánuje se začlenění CRM do mobilního UNF, ale zatím jen ve velké verzi), skladové hospodářství, pokročilé naceňování, možnost spolupráce s bankami a. V tomto případě není počet mobilních zařízení pracujících s velkým UNF omezen (za každé zařízení je účtován příplatek dle tarifu jako za jedno pracoviště; 1 licence na UNF ve Fresh nebo na "krabicové" UNF dává právo na bezplatné používání a 1 mobilní aplikaci ).
  • Zkušenosti s monetizací aplikací Mobilní aplikace UNF, jak jsem již psal, je zdarma. Před časem jsme se rozhodli zpeněžit naši aplikaci (pomocí funkcionality nákupu v aplikaci implementované v mobilní platformě 1C:Enterprise verze 8.3.8), prodejem doplňkové funkcionality – produkce a možnosti synchronizace s dalšími mobilními zařízeními.


    Nákup funkce „Produkce“ je jednorázový nákup a možnost synchronizace s dalšími mobilními zařízeními je koncipována jako předplatné, které je třeba obnovovat každý měsíc. Zajímavé je, že pouhé 3 týdny po přidání funkcionality nákupu se mobilní UNF dostal do top 15 Google Play v prodejích aplikací pro firmy Závěr Mobile UNF je relativně malý (co do objemu zdrojového kódu), ale poměrně oblíbený produkt. Doufáme, že příběh o jeho vývoji bude užitečný pro tvůrce mobilních produktů pro koncové uživatele jak na technologiích 1C, tak na dalších vývojových nástrojích.

    Bylo by užitečné připomenout, že na mobilní platformě 1C můžete vytvářet aplikace, které komunikují nejen s backendem serveru 1C; protokoly používané pro výměnu dat v mobilních aplikacích na platformě 1C jsou platformově nezávislé (webové a HTTP služby, podpora XML a JSON atd.). Pokud tedy potřebujete rychle a dynamicky vyvinout mobilního klienta pro více platforem (Android, iOS, Windows) a se schopností pracovat offline bez neustálého připojení k internetu pro vaši firemní aplikaci, pak může být mobilní platforma 1C tou nejlepší. volba pro vás.

    Úvod

    Nová verze platformy 1C (8.3.5) má spoustu nových funkcí. Mimochodem, pro ty, kteří nevědí, existuje zdroj, na kterém vývojáři 1C popisují vznikající inovace v platformě. Jedním z nich je mechanismus. Upoutal moji pozornost, chtěl jsem realizovat něco pro zábavu. Okamžitě jsem přišel s nápadem udělat něco podobného jako jsou stránky, ale s tímto nápadem by mě nepochopili ani na infostartu, tak jsem to vyhodil z hlavy. Vypadalo to, že to zahodil, ale nápad se přetavil v něco ne tak rozsáhlého, co by mohlo najít skutečné uplatnění v životě – mobilní webovou aplikaci.
    Věřím, že lehce zatíženou a jednoduchou mobilní webovou aplikaci pro omezený počet uživatelů, například zaměstnanců, lze implementovat v 1C pomocí HTTP služeb.

    Mobilní webová aplikace "Kontakty"

    Začnu výsledkem. Mobilní webová aplikace Kontakty vypadá jednoduše a také je. Na začátku vidíte pouze pole pro vyhledání kontaktu.

    Pojďme někoho hledat (aby se spustilo hledání, je potřeba zadat alespoň 3 znaky). Někdo se našel.

    Zavoláme Alexovi.

    Pojďme napsat dopis Timoteovi.

    To je celá mobilní webová aplikace.

    Mimochodem, je velmi snadné se přizpůsobit jakékoli konfiguraci.

    Něco málo o realizaci

    Použité nástroje:
    - Mechanismus služeb HTTP platformy 1C (od verze 8.3.5)
    - jQuery JavaScript knihovna (http://jquery.com)
    - JavaScriptová knihovna jQuery mobile (http://jquerymobile.com)
    - 1C:JSON()

    Služba HTTP "Kontakty" přijímá všechny požadavky a předává je ke zpracování "KontaktyMVP". Veškerá logika mobilní webové aplikace je soustředěna do zpracování „Kontakty MVP“.

    Takto vypadá zpracování požadavku.

    Funkce HandleRequest(Request) Export If MatchesResource(Request, "/index.html") Then Return GetResourceIndexHTML(); ElseIf MatchesResource(Request, "/application.js") Then Return GetResourceApplicationJS(); ElseIf MatchesResource(Request, "/contacts.json") Then Return GetResourceContactsJSON(Request); EndIf; EndFunctions

    A tak vypadá například návrat stránky index.html.

    GetResourceIndexHTML() Function Response = New HTTPServiceResponse(200); Text = GetLayout("IndexHTML").GetText(); Answer.SetBodyFromString(Text); Answer.Headers.Insert("Typ obsahu", "text/html"); Zpětná odpověď; EndFunctions

    Nic složitého. Mechanismus si můžete podrobněji prostudovat stažením ContactsMVP.dt

    Funkce publikace

    Při publikování služby HTTP se vyskytly určité potíže, takže pro vás bylo jednodušší uvést některé poznámky:
    - O publikaci jsou poměrně podrobné popisy - čtěte pozorně.
    - Před publikováním nezapomeňte spustit konfigurátor jako správce.
    - Službu HTTP bylo možné spustit pouze s verzí souboru, u verze klient-server došlo k chybě.
    - Aby mobilní webová aplikace fungovala bez požadavku na autorizaci, pokud jsou v databázi registrovaní uživatelé, musí být po zveřejnění v souboru default.vrd přidány parametry Usr a Pwd do připojovacího řetězce (bod. ib).

    Závěr

    Doufám, že materiál článku bude pro vás užitečný.

    Děkuji za pozornost.

    Tento prototyp byl vytvořen pomocí Moqups– jednoduchá a pohodlná služba pro vytváření rozvržení a konceptů. Je docela vhodný pro rychlé prototypování malých aplikací pro Android. Pro serióznější projekty prototypování je lepší použít Photoshop a Android UI Design Kit!.

    Popis aplikace

    Aplikace se skládá ze 3 obrazovek:

    „Hlavní obrazovka aplikace“ – při spuštění se zobrazí seznam úkolů (termín, název úkolu a znamení jeho dokončení). Když je úkol dokončen, je v seznamu označen jako dokončený.

    Kliknutím na tlačítko „Výměna dat“ může zaměstnanec okamžitě zahájit proces přijímání nových úkolů ze serveru. Výměna dat se serverem je také prováděna automaticky jednou denně podle plánu zadaného v nastavení.

    „Nastavení programu“ - zde se nastavují parametry autorizace a adresa serveru 1C a zobrazuje se také jedinečné identifikační číslo tohoto zařízení. Zde lze také nastavit plán automatické výměny.

    Struktura dat vyměňovaných mezi mobilním klientem a serverem 1C

    Cestou bude tabulka hodnot (ve smyslu 1C), která obsahuje 3 sloupce:

    Vytvoření šablony mobilní aplikace v 1C

    Spusťte 1C a vyberte adresář "Mobilní aplikace", přidejte nový prvek, kde:

      Do pole „Identifikátor“ zadejte SAMPLE_APP_TASKS (nebo si vymyslete jakýkoli jiný), jedná se o jedinečný identifikátor aplikace ve vaší konfiguraci. Potřebné k jednoznačné identifikaci aplikace v procesu výměny, protože na jednom mobilním zařízení může stejný zaměstnanec používat několik aplikací.

      Do pole „Název“ zadejte název vaší mobilní aplikace, například Úkoly .

    Zapište prvek adresáře pomocí tlačítka Zapsat, poté vytvořte novou verzi a určete ji jako pracovní verzi pro vaši aplikaci.

    Vyberte skupinu "Externí data" v seznamu "Metadata" a klikněte na tlačítko "Přidat" na panelu nástrojů. Vyplňte parametry nové tabulky, jak je znázorněno na obrázku:

    Názvy sloupců a samotná tabulka jsou zde zpravidla nastaveny v ruštině, budou použity k vyplnění tabulky daty pomocí vestavěného jazyka 1C.

    Každá datová tabulka v mobilní aplikaci musí mít primární klíč (PRIMARY KEY z hlediska relačních databází) typu string. Pro všechny tabulky objektů (odkazy a dokumenty) je klíčem textová reprezentace odkazu (jedinečný identifikátor) a je automaticky vyplněn.

    U neobjektových tabulek, jako je "informační registr" nebo "externí tabulka", musí být programu sděleno, jak má být vyplněn. Jednou z možností je nastavit příznak "Index" pro jeden nebo více sloupců tabulky, což bylo provedeno v našem příkladu pro sloupce "Due Date" a "Task". To znamená, že tabulka nemůže obsahovat dva stejné úkoly pro stejné datum.

    Klikněte na OK, tabulka se přidá do stromu metadat, u mobilní aplikace jsou názvy automaticky přeloženy do latinky.

    [Jedno z pravidel FBA: v 1C píšeme zdrojový kód v ruštině, v Javě v latině. Absence ruských písmen v identifikátorech, názvech proměnných a třídách zabrání mnoha problémům při navrhování mobilního klienta]

    Přejmenujte názvy z latiny na angličtinu. V zásadě bylo možné opustit latinku, ale o jménech jsme již rozhodli (výše v tabulce).

    Uložte změny a klikněte na tlačítko Šablona mobilní aplikace na panelu nástrojů.

    "Adresář šablon" - zadejte cestu k adresáři, kam budou uloženy vygenerované soubory šablon mobilní aplikace.

    Na záložce "Základní" zadejte název balíčku, musí se jednat o jedinečný identifikátor. Pokud máte webovou stránku, použijte ji k vygenerování předpony. V našem příkladu je to ru.profi1c.samples.tasks

    Na záložce „Webová služba“ je adresa serveru 10.0.2.2, ve výchozím nastavení je to adresa vašeho počítače při přístupu z emulátoru Android.

    Do polí "Název webové služby" a "Podadresář aplikace" zadejte údaje, které byly zadány při publikování webové služby.

    Na záložce „O aplikaci“ vyplňte kontaktní údaje a doplňující informace o vaší aplikaci, nastavení na záložce „Generátor tabulek“ zůstává beze změny.

    Klikněte na Vytvořit, vygeneruje se šablona projektu pro Android. Zavřete okno průvodce generováním šablony, uložte změny a zavřete prvek adresáře "Mobilní aplikace".