Povestea unei aplicații: mobil „1C: Gestionarea companiei noastre. Setările inițiale ale aplicației mobile „1C-Rating: Mobile waiter Calling a web server operation

  • Tutorial

Bună, dragilor.

În acest articol, aș dori să vă prezint noul produs „FBA Toolkit”, care simplifică semnificativ procesul de dezvoltare a unei aplicații mobile corporative pe 1C + Android.
„Setul de instrumente FBA” este:
- dezvoltarea unei aplicații Android „native” într-un IDE nativ în Java;
- 1C: Enterprise 8.1 (8.2) ca sursă de date, sistem de informații corporative.

În primul rând, cadrul va fi util programatorilor 1C care ar dori să dezvolte aplicații de afaceri pentru Android, dar au dificultăți în stăpânirea unei noi platforme pentru ei. Pentru a începe dezvoltarea, vor fi suficiente cunoștințe de bază despre Java. În continuare, vă voi arăta cum să creați un prototip funcțional al unei aplicații client-server în doar câteva ore.

Pregătirea locului de muncă Înainte de a începe procesul de dezvoltare în sine, este necesară pregătirea locului de muncă al dezvoltatorului. Necesar:

1. Instalați și configurați:
- SDK Java + Eclipse + SDK Android;
- server web (IIS sau Apache);
- 1C: Enterprise 8.1 (8.2)

2. Pentru Eclipse, importați două proiecte de bibliotecă: ActionBarSherlock și ru_profu1c_fba din depozitul SVN.

3. Instalați distribuția de configurare „FBA” și combinați-o cu soluția dvs. de aplicație bazată pe 1C.

Întregul proces de pre-configurare este descris în detaliu în articole:
Pregătirea locului de muncă al dezvoltatorului
Instalarea distribuției de configurare „FBA”.
Combinarea configurației „FBA” cu o soluție de aplicație și publicarea acesteia pe un server web

Configurarea nu ar trebui să dureze mult timp și, cel mai probabil, aveți deja instalat unele dintre software-ul necesar.

Descrierea aplicației Vom crea o aplicație mobilă „Raport to the Manager”, menită să informeze în mod regulat managerul despre starea de afaceri a întreprinderii. Aplicația va consta din 3 ecrane:
  • „Login” - autorizarea utilizatorului la pornirea programului.
  • „Lista de rapoarte” este ecranul principal al aplicației noastre. Este afișată o listă de rapoarte disponibile cu posibilitatea de a vizualiza și actualiza datele din baza de date 1C.
  • „Setări program” - aici utilizatorul setează parametrii de autorizare și adresa serverului 1C, configurează programul pentru schimbul automat cu serverul 1C.
  • Aplicația va implementa 2 opțiuni pentru primirea datelor de la serverul 1C:

  • Raportul „Mărfuri în depozite”. Este generat pe server și compilat ca document HTML, este pur și simplu afișat în aplicația mobilă. Cea mai simplă opțiune este că formularul de raport este fix și nu poate fi modificat.
  • Raport „Indicatori financiari”. Aici, datele sursă pentru raport sunt obținute sub forma unui tabel, care este apoi folosit pentru a construi raportul. Avantajele acestei opțiuni: o formă gratuită de ieșire a raportului, incl. sub formă de grafice și diagrame; este posibil să se instaleze selecții și sortare.
  • Crearea unui șablon de aplicație mobilă în 1C Dezvoltarea aplicației mobile începe în 1C, așa cum nu este surprinzător. Aici determinați compoziția metadatelor, configurați schema de schimb și regenerați șablonul viitoarei aplicații mobile.

    Creați un nou element în directorul „Aplicații mobile” cu numele „Raportați managerului” și identificatorul SAMPLE_REPORT_HEAD.

    Selectați grupul „Date externe” din lista „Metadate” și faceți clic pe butonul „Adăugați” din bara de instrumente. Completați parametrii noului tabel așa cum se arată în figură:

    „Indicator” - reprezentarea de test a indicatorului de raport, linia (250)
    „Valoare” - valoarea numerică a indicatorului, numărul (15.2)
    Numele coloanelor și tabelul însuși aici, de regulă, sunt specificate în rusă, acestea vor fi folosite pentru a completa tabelul cu datele folosind limbajul 1C încorporat. Faceți clic pe OK, tabelul va fi adăugat în arborele de metadate, pentru aplicația mobilă numele sunt traduse automat în latină.

    Astfel, am pregătit structura tabelului de valori (în termeni de 1C) în care vom transfera date pentru raportul „Indicatori financiari”. Pentru al doilea raport „Mărfuri în depozite”, datele vor fi transferate ca fișier extern.

    În fila „Schema de schimb”, verificați dacă indicatorul „Încărcare” este bifat. Steagul „Încărcare” nu este important, deoarece Nu vom procesa modificările primite la acest tabel din aplicația mobilă din 1C.

    Salvați modificările. Faceți clic pe butonul „Șablon de aplicație mobilă” din bara de instrumente, setați parametrii aplicației dvs. mobile

    „Director șablon” - calea către directorul în care vor fi salvate fișierele șablon ale aplicației mobile generate.

    În fila „De bază”, specificați numele pachetului; acesta trebuie să fie un identificator unic. Dacă aveți un site web, utilizați-l pentru a genera prefixul. În acest exemplu am specificat ru.profi1c.samples.report.head

    În fila „Serviciu web”, adresa IP este 10.0.2.2 în mod implicit, aceasta este adresa computerului dvs. atunci când este accesat de la un emulator Android; În câmpurile „Nume serviciu web” și „Subdirectorul aplicației”, introduceți datele care au fost specificate la publicarea serviciului web.

    Vă rugăm să rețineți că pentru 1C 8.2, cel mai probabil, veți avea un subdirector de aplicație cu un subdirector suplimentar /ws, adică demoFba/ws, vedeți pentru mai multe detalii.
    Faceți clic pe Creare, va fi generat șablonul de proiect Android.

    Pregătirea datelor sursă pentru rapoarte în 1C Deschideți modulul fba Event Subscription în configuratorul 1C și adăugați următorul cod la procedura Înainte de a trimite tabel extern:

    If AbbrLP(MobileApp.Code) = "SAMPLE_REPORT_HEAD" Then If TableName = "Raport to the Manager" Then // date fictive ale raportului ListTemp = fbaTotal.FromLineWithSeparators("Numerar, Conturi de plătit, Total conturi de încasat, Solduri bunuri, Conturi de plătit, Volum vânzări"); RNG = NewRandomNumberGenerator(123456789); Pentru fiecare ListElement din ciclul ListTemp NewRow = ExternalTable.Add(); NewRow.Indicator = ListElement.Value; NewRow.Value = RNG.RandomNumber(0,999999) + Sin(RNG.RandomNumber(0,999)); EndCycle; endIf; EndIf
    În acest exemplu, tabelul este umplut cu date fictive într-o aplicație reală, puteți trece aici un număr arbitrar de indicatori de raport.
    Am aranjat datele pentru primul raport, nu mai rămâne decât să îl pregătim pentru al doilea. În același modul de abonament fbaEvent, adăugați următorul cod la procedura Pregătire date binare pentru trimitere:

    DD = nedefinit; If AbbrLP(MobileApp.Code) = "SAMPLE_REPORT_HEAD" Apoi If Identifier = "REPORT_PRODUCTS_IN_STOK" Then FileName = GetTemporaryFileName("html"); Raport = Reports.ProductsInWarehouses.Create(); Dacă Report.SaveReportInHTML(FileName) Atunci DD = New BinaryData(FileName); DeleteFiles(FileName); endIf; endIf; endIf; Retur DD;
    Voi comenta codul. Când o aplicație mobilă solicită date arbitrare (sub formă de fișier) cu identificatorul „REPORT_PRODUCTS_IN_STOK”, un raport este executat în 1C și rezultatul acestuia este salvat într-un fișier temporar. Acest fișier temporar este apoi citit ca date binare și transferat în aplicația mobilă. Fișierul temporar este șters.

    Modul în care este generat fișierul html în acest caz nu este important pentru noi. Puteți utiliza mecanismul standard 1C pentru salvarea unui document de foaie de calcul ca HTML sau pentru a genera HTML manual. Puteți vedea un exemplu de rezultat în configurația „Demo FBA”, raportul „Produse în depozite”.

    Gata cu 1C, să trecem la dezvoltarea unei aplicații mobile pe Android.

    Proiectarea unei aplicații Android Importăm șablonul de proiect Android creat în 1C în spațiul de lucru Eclipse.

    Lansați Eclipse și importați proiectul: Fișier > Import... În grupul Android, selectați elementul „Există codul Android în spațiul de lucru”, faceți clic pe Următorul, specificați calea către directorul șablonului proiectului Android și faceți clic pe Terminare, noul proiect va fi adăugat la spațiul de lucru. Dacă apar dificultăți, vezi, procesul este descris în imagini.

    1. Creați un raport „Indicatori financiari”, a cărui sursă de date este tabelul cu valorile primite de la 1C. Pentru a face acest lucru, adăugați o nouă clasă ToChiefReport.java, aici este codul sursă complet:

    Spectacol

    /** * Un exemplu de construire a unui raport folosind date dintr-o bază de date locală sqlite. * Sursa de date este tabelul extern „Raport la Manager” * */ public class ToChiefReport extinde 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("Oops, raportul nu a fost creat!"); ) super.build (context, builderResult ) private void makeReport(Context context) aruncă SQLException ( DBHelper helper = new DBHelper(context); // Antetul raportului și tabelului setHeader2("Indicatori financiari"); setTableHeader("Nume ", "Amount, rub . "); // Rândurile din tabel vor fi în ordinea în care au fost adăugate Map mapData = new LinkedHashMap(); // Selectarea datelor dintr-o bază de date locală sqlite, tabel extern // „Raportați managerului ” ExTableRaportRukovoditelyuDao dao = helper .getDao(ExTableRaportRukovoditelyu.class); Listă rânduri = dao.select(); pentru (ExTableRaportRukovoditelyu rând: rânduri) ( mapData.put(row.pokazatel, row.znachenie); ) setTableData(mapData); ) )
    Voi comenta codul. Clasa abstractă SimpleMapHtmlReport, de la care este moștenită, este destinată construirii unui raport HTML simplu cu un tabel de două coloane.
    Primele 2 metode getResIdIcon() și getResIdTitle() returnează pictograma și titlul raportului nostru pentru a fi afișate în listă. În handlerul de evenimente „build”, este apelată metoda makeReport, care este implementarea noastră a compilarii rapoartelor.
    La construirea unui raport, raportul și titlul tabelului sunt mai întâi setate, apoi toate înregistrările din tabelul sqlite local sunt citite ca rânduri de tabel de raport. Și, în sfârșit, în metoda setTableData() setăm datele pentru tabelul de raport. Uf, cât de greu este să comentezi lucruri evidente.


    2.Creează un al doilea raport, totul este și mai simplu aici:

    Spectacol

    /** * Un exemplu de raport compilat, pur și simplu scoate un fișier HTML. În acest exemplu * fișierul de date a fost generat în 1C și transferat către clientul mobil în timpul schimbului * */ public class ProductsInStokReport extinde SimpleCompiledHtmlReport ( // Numele sub care este salvat fișierul primit de la 1C (vezi procedura de schimb // MyExchangeTask) ) public static final String REPORT_FILE_NAME = "products_in_stok.html" public ProductsInStokReport(Fișier fișier) ( super(fișier); ) @Override public int getResIdIcon() ( return R.drawable.report_02; ) @Override public int getResIdTitle () return R.string.report_name_products_in_stok ) )


    3. Să extindem procedura de schimb predefinită cu serverul 1C, adică. Să mai adăugăm un pas la acesta - obținerea datelor pentru al doilea raport sub forma unui fișier compilat. Să adăugăm clasa MyExchangeTask, un descendent al ExchangeTask:

    Spectacol

    /** * Procedura standard de schimb completată cu reguli personalizate. * În plus, se obține un fișier compilat - un raport. * */ public class MyExchangeTask extinde ExchangeTask ( // Raport ID-ul definit în 1C private static String final ID_REPORT_PRODUCTS_IN_STOK = "REPORT_PRODUCTS_IN_STOK"; public MyExchangeTask(ExchangeVariant exchangeVariant, WSHelper wsrvHelper, DBOpenHelperHelper, dbOpenHelperHelperHelper, dbOpenHelperHelper per); @Override boolean protejat doExecute() aruncă o excepție ( // Execută pașii de schimb conform regulilor predefinite succes boolean = super.doExecute(); if (succes) ( // Primește date arbitrare - al doilea raport onStepInfo ("Primirea rapoartelor... "); String fPath = appSettings.getCacheDir().getAbsolutePath() + "/" + ProductsInStokReport.REPORT_FILE_NAME; Fișier f = wsHelper.getLargeData(ID_REPORT_PRODUCTS_IN_STOK, null, "", fPath); succes = (f != null); ) returnează succesul ) )
    Pentru a obține date de raport, se folosește metoda serviciului web getLargeData, care, dacă are succes, salvează rezultatul într-un fișier la calea specificată. Fiți atenți la identificatorul ID_REPORT_PRODUCTS_IN_STOK, ar trebui să fie același ca în 1C din metoda Pregătire date binare pentru trimitere.


    4. Afișați o listă de rapoarte în formularul principal. Deschideți fișierul res\activity_main.xml și adăugați un listView care va afișa o listă de rapoarte:

    În MainActiviy.java adăugăm:

    A) o variabilă locală pentru listă
    listă ListView privată;
    b) metoda de initializare
    private void init() ( list = (ListView) findViewById(android.R.id.list); // Creați un adaptor pentru a afișa o listă de rapoarte ReportListAdapter adaptor = new ReportListAdapter(this,createReportList()); list.setAdapter( adaptor); list.setOnItemClickListener(new OnItemClickListener() ( @Override public void onItemClick(AdapterView parent, View view, int position, long id) ( // Afișați raportul în caseta de dialog când faceți clic pe el IReport report = (IReport) list.getItemAtPosition(poziție) ; report.onShow(MainActivity.this);
    și apelând-o în onCreate() după setarea aspectului formularului
    setContentView(R.layout.activity_main); init();
    c) metoda de initializare a listei de rapoarte
    /* * Pregătește o listă de rapoarte */ list private createReportList() ( List lst = new ArrayList(); // Creați primul raport, directorul temporar în care este salvat fișierul este preluat din // IReport settings report = new ProductsInStokReport (new File(getAppSettings() .getCacheDir(), ProductsInStokReport.REPORT_FILE_NAME)); lst.add(report // Creați și adăugați alte rapoarte la lista lst.add(new ToChiefReport());
    d) procedura de lansare a unui schimb conform regulilor dumneavoastră
    /* * Începerea unui schimb conform regulilor mele. Vă rugăm să rețineți că în planificatorul * (dacă este instalat) schimbul a rămas conform regulilor standard */ private void startExchangeMyRules(ExchangeVariant variant,boolean cancelable) ( // ajutor pentru apelarea metodelor de servicii web WSHelper wsHelper = new WSHelper(getExchangeSettings()) ; sarcină MyExchangeTask = new MyExchangeTask(variant, wsHelper, getHelper());
    Și modificați apelul la procedura de schimb startExchange(ExchangeVariant.FULL, true) în handler-ul onOptionsItemSelected pentru a startExchangeMyRules(ExchangeVariant.FULL, true).

    Aplicația este gata, formularele de autorizare și setările programului vor fi create automat, nu le vom modifica.
    Să-l testăm pe un emulator. Dacă nu ați făcut greșeli nicăieri, aplicația se va lansa. Totuși, în locul ferestrei de autorizare, va fi afișată imediat fereastra de setări, deoarece datele de autorizare (nume de utilizator și parolă) nu sunt specificate.

    Vă rugăm să introduceți numele dvs. de utilizator: ivanov
    Și parola: 123456

    Lansați baza de date 1C și deschideți directorul „Angajați mobili”. Ca dispozitiv mobil, specificați elementul predefinit „Emulator de dispozitiv”, adăugați aplicația „Raportați managerului” la secțiunea tabelară „Aplicații mobile” și setați un nume de utilizator și o parolă identice.

    Începeți procedura de schimb pe emulator (buton cu săgeata „Sus” în panoul din dreapta)

    Rezultatul schimbului este afișat în notificare:

    Faceți clic pe el pentru a lansa aplicația (sau pentru a vedea detaliile erorii dacă schimbul nu a avut succes).

    Să verificăm ce s-a întâmplat. Faceți clic pe raportul din listă:

    Spectacol


    Grozav! Rapoartele sunt afișate, puteți schimba scala folosind un buton sau gesturi.


    Aplicația este gata, s-a dovedit a fi destul de funcțională și ușor de extins. Adăugarea altor rapoarte nu va fi dificilă.
    Puteți transfera documente în diferite formate, cum ar fi *.doc sau *.pdf, și puteți utiliza aplicații externe pentru a le vizualiza. Vedeți exemplul de cod sursă, există încă 3 rapoarte:
    • grafic folosind instrumentele Google Chart
    • complot folosind pluginul jQuery Plot
    • ieșirea unui raport PDF de către o aplicație externă (PdfReport.java)
    Nu o voi descrie în detaliu, așa că articolul s-a dovedit a fi lung. Dacă aveți întrebări, sunt gata să vă răspund în comentarii. Iată rezultatul:

    Spectacol


    Puteți descărca codul exemplu complet de la https://xp-dev.com/svn/fba_toolkit_public/samples/fbaSample4ReportHead/

    Utilizarea HTML pentru a crea rapoarte vă permite să creați o mare varietate de rapoarte, inclusiv. și cu elemente interactive. De exemplu, într-unul dintre proiectele noastre se utilizează următorul raport:

    Spectacol

    • pentru câmpul „Datorie” se folosește o schemă de culori condiționată în funcție de sumă;
    • lista completă a facturilor neplătite se deschide numai atunci când dați clic pe marcatorul „Toate”, în mod implicit sunt afișate doar ultimele 4.

    Și, desigur, nu sunteți limitat de nimic, puteți folosi biblioteci terțe pentru a afișa rapoarte și diagrame, de exemplu achartengine, sau vă creați propriul grafic/diagramă (există o mulțime de exemple, inclusiv cele din Android SDK).

    Atâta tot, puteți găsi alte exemple pe site-ul http://profi1c.ru.
    În viitorul apropiat, este planificat să se adauge lecții despre elementele interactive și adaptoarele bibliotecii FBA, precum și să se arate cum să lucrezi cu hărți off-line mapsforge.

    Fly in the Unguent Produsul FBA Toolkit este planificat să fie distribuit pe bază comercială, acum este în starea de „versiune demo”. Sunteți liber să îl utilizați pentru testare și învățare.
    Restrictii:
    • programul încetează să funcționeze după expirarea licenței demo, adică după 31.12.13;
    • La pornire, se afișează o notificare:

    În viitorul apropiat (nu mai mult de o lună) vor fi adăugate pe site-ul nostru informații despre costuri și procedura de licențiere.

    Vă mulțumesc că ați citit până la capăt. Sunt gata să vă răspund la întrebările în comentarii referitoare atât la 1C, cât și la Android.

    Etichete: Adăugați etichete

    Folosind exemplul aplicației mobile „1C: Managing Our Company” (abreviat UNF), vreau să arăt evoluția unei aplicații mobile de afaceri de la origini și lansarea primei versiuni până în prezent. Aplicația are în prezent peste 220.000 de descărcări; Aplicația este gratuită, dar are opțiuni plătite (implementate prin achiziții în aplicație).


    Prima versiune a UNF mobil a fost realizată pe una dintre primele versiuni ale platformei mobile 1C:Enterprise în 2012. La acel moment, exista deja o configurație client-server „1C: Managementul unei companii mici” (atunci numele era așa), un program de automatizare a activităților unei companii mici - vânzări, achiziții, bază de clienți și furnizori, depozit management, producție etc.

    La fel ca majoritatea aplicațiilor mobile scrise pe platforma mobilă multiplatformă 1C:Enterprise, mobil UNF este disponibil pe iOS, Android și Windows.

    Sarcina a fost pusă după cum urmează: să creeze o aplicație mobilă care să suporte o parte din scenariile de lucru ale „marilor” UNF. Aplicația trebuie să poată funcționa atât autonom, cât și să sincronizeze datele cu UNF-ul „mare” (în continuare voi scrie cuvântul „mare” în raport cu versiunea client-server a UNF-ului fără ghilimele pentru a nu supraîncărca textul). În cazul lucrului cu un CNF mare, trebuie susținute scenarii de angajați „mobili” - reprezentant de vânzări, inginer service, agent de vânzări.

    Prima versiune a fost creată în 1 om-lună. La crearea unei aplicații mobile, unele obiecte de metadate (directoare, documente) au fost implementate pe baza obiectelor UNF-ului mare. Dar unele dintre funcționalități trebuiau programate de la zero, de exemplu, procesul de schimb de date cu un UNF mare. Adevărat, în legătură cu schimbul de date, a trebuit de fapt să facem puțină programare - am folosit mecanisme standard ale platformei (în special, planuri de schimb), care reduc codificarea la minimum.

    Pe lângă simplificarea muncii cu sincronizarea datelor, platforma 1C facilitează semnificativ munca de construire a unei aplicații mobile cu funcții complete, oferind dezvoltatorului componente de interfață precum liste (tabulare și ierarhice) cu posibilitatea de a le căuta, câmpuri de introducere. cu căutare, tabele pentru rapoarte, o gamă largă de diagrame, posibilitatea de a imprima pe imprimante WiFi și Bluetooth etc.

    Caracteristicile versiunii mobile Există două strategii principale pentru alegerea funcționalității unei aplicații mobile. Prima este „o aplicație – o funcție”. De exemplu, o aplicație mobilă pentru primirea mărfurilor la un depozit, care poate doar scana codul de bare al unui produs cu o cameră încorporată și poate trimite informații despre produsul primit la server. A doua strategie este de a crea o aplicație mobilă cu o funcționalitate largă „tot-în-unul”. Ambele abordări sunt valabile; Când scriem un UNF mobil, am ales a doua abordare - aplicația noastră acoperă multe sarcini din domeniul său de activitate și poate funcționa complet autonom, servind nevoile unei organizații mici. Un alt avantaj al acestei abordări este că utilizatorul poate lucra cu mai multe funcții interconectate dintr-o singură aplicație.

    Mobile UNF utilizează pe scară largă funcționalitatea unui dispozitiv mobil, în special:

    • Camera încorporată a dispozitivului poate fi folosită pentru a fotografia produsul atunci când completați cardul produsului, pentru a citi coduri de bare și coduri QR
    • O factura de plata poate fi trimisa clientului prin email sau SMS
    • Contrapartea poate fi selectată din agenda de adrese a dispozitivului mobil
    • Dacă contrapartea are un număr de telefon, puteți suna contrapartea sau trimiteți un SMS cu o singură atingere, dacă este specificată o scrisoare, afișați-o pe hartă;
    • Puteți imprima documente pe imprimante prin WiFi și Bluetooth
    Există o opțiune de backup și restaurare a bazei de date mobile UNF pe Yandex.Disk și de a trimite baza de date prin poștă.

    Configurația UNF-ului mobil arată destul de spartan (vezi captura de ecran de mai jos):

    • 8 cărți de referință (în UNF mare există 273 cărți de referință)
    • 7 documente (în UNF mare – 125)
    • 3 reviste de documente (în UNF mare – 24)
    • 3 registre de informații (în UNF mare - 357)
    • 4 registre de acumulare (în UNF mare - 64)

    Obiectele principale ale UNF mobile

    Dar, în ciuda unui număr atât de mic de obiecte de aplicație, produsul s-a dovedit a fi destul de funcțional.

    O caracteristică interesantă a UNF-ului mobil este că de multe ori a început să fie folosit de oameni care nu au auzit niciodată de 1C până acum (da, există așa ceva la noi), cei care au nevoie de o aplicație mobilă pentru a ține evidența afacerii mici ( de exemplu, home crafting). Pur și simplu l-au găsit căutând pe Google Play sau AppStore, au citit recenziile și au început să lucreze.

    Funcționare offline Acest scenariu de lucru este destinat organizațiilor foarte mici, când toată contabilitatea este efectuată exclusiv pe un dispozitiv mobil. Aceasta ar putea fi, de exemplu, o afacere „acasă” - realizarea de bijuterii acasă și vânzarea lor pe pagina VKontakte. Sau poate chiar un mic magazin – eu personal am văzut un caz în care un magazin de jucării specializat în vânzarea de constructori Lego a ținut evidențe exclusiv pe versiunea mobilă a UNF. Având în vedere că UNF-ul mobil poate imprima pe imprimante WiFi și Bluetooth, acesta poate fi folosit pentru a rezolva un număr destul de mare de probleme. Mobile UNF acceptă procesarea comenzilor, introducerea facturilor și a facturilor, contabilizarea încasărilor și cheltuielilor de bani Lucrul în modul de sincronizare cu serverul (primele versiuni) În modul de sincronizare cu serverul în UNF mobil în versiunile anterioare, funcționalitatea de contabilitate a devenit indisponibilă. în cadrul acestuia s-a desfășurat în principal cu comenzi (primirea și onorarea comenzilor) și activități conexe (ținerea directoarelor contrapărților, bunurilor și serviciilor etc.).

    Directoarele de bunuri și servicii, contractori și comenzi au fost sincronizate cu marele UNF.


    Schimb de date între mobil și UNF mare în primele versiuni

    Comenzile introduse de pe dispozitivele mobile au ajuns într-un UNF mare, iar când au fost sincronizate, au ajuns pe dispozitivele mobile ale celor responsabili de comenzi. Documente precum încasările de numerar, vânzările de mărfuri etc., introduse pe dispozitivele mobile, mergeau la marele UNF, dar nu erau sincronizate între dispozitivele mobile. Toate lucrările din aplicația mobilă în modul de sincronizare au fost efectuate în principal în jurul comenzilor - acceptarea și execuția lor completă nu a fost efectuată pe dispozitivul mobil pentru aceasta a fost necesară utilizarea unui CNF mare pe computer;

    Acesta a fost cazul în primele versiuni, dar ulterior am schimbat situația și am extins lista de scenarii pentru utilizarea CNF mobil pentru a face lucrul cu acesta mai convenabil pentru utilizatori.

    Câteva lucruri despre sincronizarea datelor Schimbul de date între mobil și UNF mare are loc prin intermediul serviciilor web; UNF mobil apelează servicii web desfășurate pe partea mare a UNF. Structurile de date în CNF mari și mobile sunt diferite; La proiectarea arhitecturii, am luat în considerare 2 opțiuni pentru schimbul de date:
  • Creați o structură de date într-un CNF mare care dublează structura de date a unui CNF mobil și faceți schimb de date cu CNF mobil one-to-one. Când schimbați datele într-un UNF mare, trebuie să transferați datele noi/modificate în această structură duplicată și, după ce faceți schimb de date cu UNF mobil, convertiți datele care au venit de la dispozitivul mobil și aflate în structura duplicată în UNF mare. format.
  • Schimbați date direct cu structurile unui UNF mare, conversia datelor „din mers” conform regulilor de schimb.
  • Am decis să mergem cu a doua variantă. Prima variantă, deși promitea unele avantaje asociate cu simplitatea schimbului de date în sine, nu a gestionat bine situația când structura datelor s-a schimbat (extins) în noua versiune a UNF mobil; Pentru ca schimbul de date unu-la-unu să continue să funcționeze, ar fi necesară actualizarea serverului, UNF mare. Ceea ce, din multe motive, era inacceptabil.

    Mecanismele de schimb de date implementate în platformă preiau cea mai mare parte a muncii de a crea pachete pentru sincronizarea datelor, permițându-vă să reduceți codificarea la minimum. În timpul procesului de schimb este utilizat mecanismul standard al platformei 1C:Enterprise - mecanismul de schimb de date; pentru fiecare UNF mobil, se creează un nod de schimb de date în UNF mare în UNF mare și mobil, se utilizează un serviciu de înregistrare a modificărilor pentru a urmări datele modificate de la ultima sincronizare etc.

    Aplicația mobilă inițiază schimbul de date, folosind mecanismele platformei, generează un pachet de schimb (conținând identificatorul aplicației mobile și date actualizate pe UNF mobil de la ultima sincronizare) și îl trimite către UNF mare. Pe baza informațiilor din pachetul de pornire, CNF-ul mare pregătește pentru CNF-ul mobil datele modificate în CNF-ul mare de la ultima sincronizare și le împachetează în pachete. Pachetele în format XDTO sunt obiecte de metadate 1C serializate în XML; Dimensiunea fiecărui pachet nu depășește 500 de obiecte.

    Mobile UNF colectează acest pachet de date cu pachet. După descărcarea ultimului pachet, UNF mobil începe să proceseze datele primite - procesează documente, directoare de înregistrare etc. În cazul unei întreruperi a conexiunii, este acceptată reluarea pachetelor; Am scris singuri mecanismul de reluare pentru CNF (nu se află în platformă), dar deoarece CNF mobil este furnizat în cod sursă, dezvoltatorii pot analiza implementarea mecanismului și îl pot împrumuta pentru aplicațiile lor.

    În timpul sincronizării inițiale a unui CNF mobil cu un CNF mare, nu puteți lucra în CNF mobil - apare o fereastră modală care arată progresul procesului. Toate sincronizările ulterioare sunt în fundal și nu blochează funcționarea UNF mobil.

    Lista completă a obiectelor schimbate între mobil și UNF mare:

    • Directoare:
      • Nomenclatură
      • Contrapartide
      • o listă de utilizatori
    • Documentație:
      • Comenzile clienților
      • Chitanță la casierie
      • Cheltuieli din casa de marcat
      • Chitanta
      • Factură de vânzare
      • Productie
    • Înregistrări (dar nu toate prețurile, ci doar pe cele principale):
      • Preturi Furnizori
      • Preturile produselor
    • Informații despre organizație:
      • Nume
      • Informații fiscale
    În UNF mare, produsele au imagini - imagini ale produselor reale. Pentru a minimiza traficul, nu încărcăm imagini în UNF mobil, acestea sunt încărcate la cerere - de exemplu, când deschidem un card de produs în UNF mobil;


    Fișă de produs cu imaginea produsului

    Evoluția aplicației - dezvoltarea cazurilor de utilizare O situație tipică - o afacere este în creștere, iar funcționalitatea CNF mobil pe un dispozitiv mobil nu mai este suficientă. Un alt angajat (sau angajați) apare în afacere și, de asemenea, trebuie să lucreze cu comenzi.

    În primele versiuni ale UNF mobil, scenariul de mișcare a fost destul de simplu - datele introduse în UNF mobil au fost copiate în baza de date a UNF mare, iar utilizatorul trebuia acum să păstreze înregistrări pe computer. În acest caz, UNF mobil va funcționa în modul de lucru cu comenzi și nu va mai fi posibilă păstrarea înregistrărilor (ca în versiunea independentă a UNF mobil).

    Acest lucru, desigur, nu era în întregime convenabil pentru utilizatorul final - era deja obișnuit să țină înregistrări de pe un dispozitiv mobil, dar aici a fost forțat să stea la tastatura computerului. Nu toată lumea va fi mulțumită de asta.

    Prin urmare, am extins lista de scenarii pentru funcționarea UNF mobil. Apariția serviciului nostru cloud http://1cfresh.com, bazat pe tehnologia cloud 1cFresh, ne-a ajutat în acest sens. Acum este posibil să plasați CNF mari în cloud. Am descris trei scenarii pentru utilizarea unei aplicații mobile pe măsură ce afacerea utilizatorului crește:

  • O afacere destul de mică. Contabilitatea se face pe un singur dispozitiv mobil.
  • Afacerea este în creștere - au apărut angajați. Puteți instala UNF mobil pe dispozitivele mobile ale angajaților. În același timp, trebuie să puteți face schimb de date între dispozitivele mobile pentru a sincroniza datele; Pentru aceasta, am decis să nu folosim schimbul de fișiere, ci să folosim pentru sincronizare (și în același timp pentru backup) o versiune a UNF-ului mare aflat în cloud-ul http://1cfresh.com. Când activați acest script, este creată o instanță a unui CNF mare în cloud http://1cfresh.com, a cărui bază de date va fi utilizată pentru sincronizarea datelor între dispozitivele mobile. Folosirea unui dispozitiv mobil în acest scenariu este gratuită, pentru fiecare dispozitiv suplimentar percepem 75 de ruble/lună, nu puteți folosi mai mult de trei dispozitive în acest scenariu. În același timp, utilizatorilor dispozitivelor mobile li se pot atribui roluri predefinite - reprezentant de vânzări, inginer service, agent de vânzări (este posibilă și configurarea detaliată a rolurilor); Funcționalitatea aplicației mobile va fi limitată în consecință. De asemenea, puteți lucra printr-un client web sau un client subțire cu un CNF mare găzduit în cloud, dar funcționalitatea cloud CNF va fi redusă la funcționalitatea CNF mobil. Dar nu este necesar să lucrați direct în cloud UNF - toate lucrările pot fi făcute numai de pe dispozitive mobile.
  • Afacerea a crescut la dimensiunea unei firme mijlocii. În acest caz, este logic să închiriați o versiune completă a unui UNF mare în cloud pentru a primi (prin intermediul unui client web sau client subțire) funcționalitate suplimentară - CRM (planurile includ includerea CRM în UNF mobil, dar pentru acum este disponibil doar în versiunea mare), managementul depozitului, formarea extinsă a prețurilor, capacitatea de a lucra cu băncile și. În acest caz, numărul de dispozitive mobile care lucrează cu un CNF mare nu este limitat (pentru fiecare dispozitiv se percepe o taxă suplimentară conform tarifului, ca pentru un loc de muncă; 1 licență pentru CNF în Fresh sau pentru un CNF „la cutie” oferă dreptul de utilizare gratuită a unei aplicații mobile).
  • Experiență de monetizare a aplicațiilor Aplicația mobilă UNF, așa cum am scris deja, este gratuită. Cu ceva timp în urmă, am decis să monetizăm aplicația noastră (folosind funcționalitatea de achiziție în aplicație implementată în platforma mobilă 1C:Enterprise versiunea 8.3.8), vânzând funcționalitate suplimentară - producție și capacitatea de sincronizare cu dispozitive mobile suplimentare.


    Funcționalitatea de producție este o achiziție unică, iar capacitatea de sincronizare cu dispozitive mobile suplimentare este ambalată ca un abonament care trebuie reînnoit în fiecare lună. Interesant este că la doar 3 săptămâni după adăugarea funcționalității de cumpărături, UNF mobil a fost în top 15 pe Google Play pentru vânzările de aplicații de afaceri Concluzie Mobile UNF este un produs relativ mic (în ceea ce privește volumul codului sursă), dar destul de popular. Sperăm că povestea despre evoluția sa va fi utilă creatorilor de produse mobile pentru utilizatorii finali atât folosind tehnologii 1C, cât și alte instrumente de dezvoltare.

    Ar fi util să vă reamintim că pe platforma mobilă 1C puteți realiza aplicații care interacționează nu doar cu backend-ul serverului 1C; protocoalele utilizate pentru schimbul de date în aplicațiile mobile de pe platforma 1C sunt independente de platformă (servicii web și HTTP, suport pentru XML și JSON etc.). Deci, dacă aveți nevoie să dezvoltați rapid și dinamic un client mobil multiplatform (Android, iOS, Windows), cu posibilitatea de a lucra offline fără o conexiune constantă la internet pentru aplicația dvs. de afaceri, atunci platforma mobilă 1C poate fi cea mai bună alegere Pentru dumneavoastră.

    Introducere

    Noua versiune a platformei 1C (8.3.5) are o mulțime de funcționalități noi. Apropo, pentru cei care nu știu, există o resursă pe care dezvoltatorii 1C descriu inovațiile emergente în platformă. Unul dintre acestea este mecanismul. Mi-a atras atenția și am vrut să implementez ceva pentru distracție. Ideea mi-a venit imediat să fac ceva asemănător cu un site, dar această idee nu ar fi fost înțeleasă nici la infostart, așa că am dat-o din cap. Părea că a fost aruncat, dar ideea a fost transformată în ceva nu atât de mare, ceva care ar putea găsi aplicație reală în viață - o aplicație web mobilă.
    Consider că o aplicație web mobilă simplă și cu încărcare redusă pentru un număr limitat de utilizatori, de exemplu, angajați, poate fi implementată în 1C folosind servicii HTTP.

    Aplicația web mobilă „Contacte”

    Voi începe cu rezultatul. Aplicația web mobilă „Contacte” pare simplă și, de fapt, este. La început, vedeți doar un câmp pentru a căuta un contact.

    Să căutăm pe cineva (pentru a începe căutarea, trebuie să introduceți cel puțin 3 caractere). Cineva a fost găsit.

    Să-l sunăm pe Alexey.

    Să scriem o scrisoare lui Timofey.

    Asta este tot ce este aplicația web mobilă.

    Apropo, este foarte ușor să-l adaptezi la orice configurație.

    Un pic despre implementare

    Instrumente folosite:
    - Mecanismul serviciilor HTTP ale platformei 1C (începând cu versiunea 8.3.5)
    - Biblioteca JavaScript jQuery (http://jquery.com)
    - Biblioteca JavaScript jQuery mobile (http://jquerymobile.com)
    - 1C:JSON ()

    Serviciul HTTP „ContactsMVP” acceptă toate solicitările și le transferă la procesarea „ContactsMVP”. Toată logica aplicației web mobilă este concentrată în procesarea „ContactsMVP”.

    Așa arată procesarea cererilor.

    Funcția ProcessRequest(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; EndFunction

    Și așa arată, de exemplu, revenirea paginii index.html.

    Funcția GetResourceIndexHTML() Response = HTTPServiceResponse nou (200); Text = GetLayout("IndexHTML").GetText(); Answer.SetBodyFromString(Text); Response.Headings.Insert("Content-Type", "text/html"); Întoarceți răspunsul; EndFunction

    Nimic complicat. Puteți studia mecanismul mai detaliat descărcând ContactsMVP.dt

    Caracteristicile publicației

    Au existat câteva dificultăți minore la publicarea serviciului HTTP, așa că pentru a vă fi mai ușor, voi sublinia câteva note:
    - Există descrieri destul de detaliate despre publicație - citiți mai atent.
    - Nu uitați să rulați configuratorul ca administrator înainte de a publica.
    - A fost posibilă lansarea serviciului HTTP numai cu versiunea fișierului a apărut o eroare cu versiunea client-server;
    - Pentru ca aplicația web mobilă să funcționeze fără cerere de autorizare, dacă în baza de date sunt utilizatori înregistrați, atunci după publicare, în fișierul default.vrd, parametrii Usr și Pwd trebuie adăugați în șirul de conexiune (punctul. ib).

    Concluzie

    Sper că materialul articolului vă va fi de folos.

    Vă mulțumim pentru atenție.

    Acest prototip a fost creat folosind Moqups– un serviciu simplu și convenabil pentru crearea machetelor și conceptelor. Este destul de potrivit pentru prototiparea rapidă a aplicațiilor Android mici. Pentru prototipuri de proiecte mai serioase, este mai bine să utilizați Photoshop și Android UI Design Kit!.

    Descrierea aplicației

    Aplicația constă din 3 ecrane:

    „Ecranul principal al aplicației” – la lansare, este afișată o listă de sarcini (data scadentă, numele sarcinii și indicarea finalizării acesteia). Odată ce o sarcină este finalizată, aceasta este marcată ca finalizată în listă.

    Făcând clic pe butonul „Schimb de date”, un angajat poate începe imediat procedura de primire a sarcinilor noi de la server. Schimbul de date cu serverul se realizează și automat o dată pe zi, conform programului specificat în setări.

    „Setări program” - aici setați parametrii de autorizare și adresa serverului 1C și afișează, de asemenea, numărul unic de identificare al acestui dispozitiv. Aici poate fi setat și un program de schimb automat.

    Structura datelor schimbate între clientul mobil și serverul 1C

    Calea va fi un tabel de valori (în termeni 1C), care conține 3 coloane:

    Crearea unui șablon de aplicație mobilă în 1C

    Lansați 1C și selectați directorul „Aplicații mobile”, adăugați un element nou, unde:

      În câmpul „Identificator”, specificați SAMPLE_APP_TASKS (sau gândiți-vă la oricare altul), acesta este un identificator unic de aplicație în configurația dvs. Este necesar să se identifice în mod unic aplicația în timpul procesului de schimb, deoarece Același angajat poate folosi mai multe aplicații pe un dispozitiv mobil.

      În câmpul „Nume”, introduceți numele aplicației dvs. mobile, de exemplu Sarcini.

    Notați elementul din director folosind butonul Scrie, apoi creați o versiune nouă și specificați-o ca versiune de lucru pentru aplicația dvs.

    Selectați grupul „Date externe” din lista „Metadate” și faceți clic pe butonul „Adăugați” din bara de instrumente. Completați parametrii noului tabel așa cum se arată în figură:

    Numele coloanelor și tabelul însuși aici, de regulă, sunt specificate în rusă, acestea vor fi folosite pentru a completa tabelul cu datele folosind limbajul 1C încorporat.

    Fiecare tabel de date dintr-o aplicație mobilă trebuie să aibă o cheie primară (PRIMARY KEY în ceea ce privește bazele de date relaționale) de tip șir. Pentru toate tabelele de obiecte (directoare și documente), cheia este reprezentarea text a link-ului (un identificator unic) ​​și este completată automat.

    Pentru tabelele non-obiect, cum ar fi un „registru de informații” sau un „tabel extern”, programul trebuie să indice cum trebuie completat. O opțiune este să setați indicatorul „Index” pentru una sau mai multe coloane de tabel, ceea ce a fost făcut în exemplul nostru pentru coloanele „Data scadentă” și „Sarcina”. Aceasta înseamnă că tabelul nu poate avea două sarcini identice pentru aceeași dată.

    Faceți clic pe OK, tabelul va fi adăugat în arborele de metadate, pentru aplicația mobilă numele sunt traduse automat în latină.

    [Una dintre regulile FBA: în 1C scriem codul sursă în rusă, în Java în latină. Absența literelor rusești în identificatori, nume de variabile și clase va evita multe probleme la proiectarea unui client mobil]

    Redenumiți numele din latină în engleză. În principiu, a fost posibil să părăsim alfabetul latin, dar ne-am hotărât deja asupra numelor (mai sus în tabel).

    Salvați modificările și faceți clic pe butonul „Șablon de aplicație mobilă” din bara de instrumente.

    „Director șablon” – specificați calea către directorul în care vor fi salvate fișierele șablon ale aplicației mobile generate.

    În fila „De bază”, specificați numele pachetului; acesta trebuie să fie un identificator unic. Dacă aveți un site web, utilizați-l pentru a genera prefixul. În exemplul nostru, acesta este ru.profi1c.samples.tasks

    În fila „Serviciu web”, adresa serverului este indicată implicit ca 10.0.2.2, aceasta este adresa computerului dvs. atunci când este accesat de la un emulator Android;

    În câmpurile „Nume serviciu web” și „Subdirectorul aplicației”, introduceți datele care au fost specificate la publicarea serviciului web.

    În fila „Despre program”, completați informațiile de contact și informații suplimentare despre aplicația dvs. lăsați neschimbate setările din fila „Generator de masă”.

    Faceți clic pe Creare, va fi generat șablonul de proiect Android. Închideți fereastra expertului de generare a șablonului, salvați modificările și închideți elementul din directorul „Aplicații mobile”.