Bir uygulamanın hikayesi: mobil “1C: Şirketimizi yönetmek. Mobil uygulamanın başlangıç ​​ayarları “1C-Rating: Mobil garson Web sunucusunu çağırma işlemi

  • öğretici

Merhaba sevgili varlıklar.

Bu yazıda sizleri 1C + Android üzerinde kurumsal mobil uygulama geliştirme sürecini önemli ölçüde kolaylaştıran yeni ürün “FBA Toolkit” ile tanıştırmak istiyorum.
“FBA Araç Takımı”:
- Java'daki yerel bir IDE'de "yerel" bir Android uygulamasının geliştirilmesi;
- 1C: Veri kaynağı olarak Kurumsal 8.1 (8.2), kurumsal bilgi sistemi.

Her şeyden önce çerçeve, Android için iş uygulamaları geliştirmek isteyen ancak onlar için yeni bir platformda uzmanlaşmakta zorluk çeken 1C programcıları için faydalı olacaktır. Geliştirmeye başlamak için temel Java bilgisi yeterli olacaktır. Daha sonra size bir istemci-sunucu uygulamasının çalışan bir prototipinin yalnızca birkaç saat içinde nasıl oluşturulacağını göstereceğim.

Çalışma ortamının hazırlanması Geliştirme sürecine başlamadan önce geliştiricinin çalışma ortamını hazırlamak gerekir. Gerekli:

1. Kurun ve yapılandırın:
- Java SDK'sı + Eclipse + Android SDK'sı;
- Web sunucusu (IIS veya Apache);
- 1C: Kurumsal 8.1 (8.2)

2. Eclipse için iki kütüphane projesini içe aktarın: SVN deposundan ActionBarSherlock ve ru_profu1c_fba.

3. “FBA” konfigürasyon dağıtımını kurun ve bunu 1C tabanlı uygulama çözümünüzle birleştirin.

Tüm ön yapılandırma süreci makalelerde ayrıntılı olarak açıklanmaktadır:
Geliştiricinin çalışma ortamını hazırlamak
“FBA” yapılandırma dağıtımını yükleme
“FBA” konfigürasyonunun bir uygulama çözümü ile birleştirilmesi ve bir web sunucusunda yayınlanması

Kurulum fazla zaman almayacaktır ve büyük ihtimalle gerekli yazılımlardan bazıları zaten yüklüdür.

Uygulamanın açıklaması Yöneticiyi işletmenin durumu hakkında düzenli olarak bilgilendirmek için tasarlanmış bir "Yöneticiye Rapor Ver" mobil uygulaması oluşturacağız. Uygulama 3 ekrandan oluşacaktır:
  • “Giriş” - programı başlatırken kullanıcı yetkilendirmesi.
  • “Raporların listesi” uygulamamızın ana ekranıdır. 1C veritabanındaki verileri görüntüleme ve güncelleme olanağıyla birlikte mevcut raporların bir listesi görüntülenir.
  • “Program ayarları” - burada kullanıcı yetkilendirme parametrelerini ve 1C sunucusunun adresini ayarlar, 1C sunucusuyla otomatik değişim programını yapılandırır.
  • Uygulama, 1C sunucusundan veri almak için 2 seçenek uygulayacaktır:

  • “Depolardaki mallar” raporunu verin. Sunucuda oluşturulur ve HTML belgesi olarak derlenir; mobil uygulamada kolayca görüntülenir. En basit seçenek rapor formunun sabit olması ve değiştirilememesidir.
  • "Finansal göstergeler" raporunu verin. Burada raporun kaynak verileri bir tablo biçiminde elde edilir ve bu daha sonra raporu oluşturmak için kullanılır. Bu seçeneğin avantajları: ücretsiz bir rapor çıktısı biçimi, dahil. grafikler ve diyagramlar şeklinde; seçimleri ve sıralamayı yüklemek mümkündür.
  • 1C'de mobil uygulama şablonu oluşturma Mobil uygulama geliştirme, şaşırtıcı olmadığı gibi 1C'de başlar. Burada meta verilerin bileşimini belirler, değişim planını yapılandırır ve gelecekteki mobil uygulamanızın şablonunu yeniden oluşturursunuz.

    “Mobil Uygulamalar” dizininde “Yöneticiye Rapor Ver” adında ve SAMPLE_REPORT_HEAD tanımlayıcısıyla yeni bir öğe oluşturun.

    “Meta Veriler” listesinden “Harici Veriler” grubunu seçin ve araç çubuğundaki “Ekle” düğmesini tıklayın. Yeni tablonun parametrelerini şekilde gösterildiği gibi doldurun:

    “Gösterge” - rapor göstergesinin test gösterimi, satır (250)
    “Değer” - göstergenin sayısal değeri, sayı (15.2)
    Buradaki sütunların ve tablonun adları, kural olarak Rusça olarak belirtilmiştir, yerleşik 1C dilini kullanarak tabloyu verilerle doldurmak için kullanılacaklardır. Tamam'ı tıkladığınızda tablo meta veri ağacına eklenecektir, mobil uygulama için adlar otomatik olarak Latince'ye çevrilecektir.

    Böylece “Finansal Göstergeler” raporu için verileri aktaracağımız değerler tablosunun (1C açısından) yapısını hazırladık. İkinci rapor olan “Depolardaki mallar” için veriler harici bir dosya olarak aktarılacaktır.

    “Değişim Planı” sekmesinde “Yükleme” bayrağının işaretli olup olmadığını kontrol edin. “Yükleniyor” bayrağı önemli değil çünkü Bu tabloya alınan değişiklikleri 1C'deki mobil uygulamadan işlemeyeceğiz.

    Değişikliklerinizi kaydedin. Araç çubuğundaki “Mobil Uygulama Şablonu” butonuna tıklayın, mobil uygulamanızın parametrelerini ayarlayın

    “Şablon dizini” - oluşturulan mobil uygulama şablon dosyalarının kaydedileceği dizinin yolu.

    “Temel” sekmesinde paketin adını belirtin; bu benzersiz bir tanımlayıcı olmalıdır. Bir web siteniz varsa öneki oluşturmak için bunu kullanın. Bu örnekte ru.profi1c.samples.report.head'i belirttim

    “Web hizmeti” sekmesinde IP adresi 10.0.2.2'dir; varsayılan olarak bu, bir Android emülatöründen erişildiğinde bilgisayarınızın adresidir. "Web hizmeti adı" ve "Uygulama alt dizini" alanlarına web hizmeti yayınlanırken belirtilen verileri girin.

    Lütfen 1C 8.2 için büyük olasılıkla ek bir /ws alt dizinine sahip bir uygulama alt dizininiz olacağını unutmayın, yani demoFba/ws, daha fazla ayrıntı için bkz.
    Oluştur'a tıklayın, Android proje şablonu oluşturulacaktır.

    1C'deki raporlar için kaynak verileri hazırlama 1C yapılandırıcısında fba Etkinlik Aboneliği modülünü açın ve Harici Tablo Göndermeden Önce prosedürüne aşağıdaki kodu ekleyin:

    If AbbrLP(Mobile Application. Code) = "SAMPLE_REPORT_HEAD" Then If TableName = "Yöneticiye Rapor Ver" Then // hayali rapor verileri ListTemp = fbaTotal.FromLineWithSeparators("Nakit, Borç hesapları, Alacak toplam hesapları, Mal bakiyeleri, Borç hesapları, Toplu satışlar"); RNG = NewRandomNumberGenerator(123456789); ListTemp Döngüsünden her ListElement için NewRow = HariciTable.Add(); NewRow.Indicator = ListElement.Value; NewRow.Value = RNG.RandomNumber(0,999999) + Sin(RNG.RandomNumber(0,999)); EndCycle; endIf; EndIf
    Bu örnekte tablo hayali verilerle doldurulmuştur; gerçek bir uygulamada buraya istediğiniz sayıda rapor göstergesini iletebilirsiniz.
    İlk raporun verilerini çözdük, geriye sadece ikinciye hazırlanmak kalıyor. Aynı fbaEvent Abonelik modülünde, İkili Verileri Gönderim için Hazırlama prosedürüne aşağıdaki kodu ekleyin:

    DD = Tanımsız; AbbrLP(MobileApp.Code) = "SAMPLE_REPORT_HEAD" ise Then If Identifier = "REPORT_products_IN_STOK" Then FileName = GetTemporaryFileName("html"); Rapor = Reports.ProductsInWarehouses.Create(); Report.SaveReportInHTML(DosyaAdı) ise DD = New BinaryData(FileName); SilDosyalar(DosyaAdı); endIf; endIf; endIf; DD'yi döndür;
    Kod hakkında yorum yapacağım. Bir mobil uygulama "REPORT_products_IN_STOK" tanımlayıcısıyla rastgele veriler (dosya biçiminde) talep ettiğinde, 1C'de bir rapor yürütülür ve sonucu geçici bir dosyaya kaydedilir. Bu geçici dosya daha sonra ikili veri olarak okunur ve mobil uygulamaya aktarılır. Geçici dosya silinir.

    Bu durumda html dosyasının nasıl oluşturulduğu bizim için önemli değil. Bir elektronik tablo belgesini HTML olarak kaydetmek veya HTML'yi manuel olarak oluşturmak için standart 1C mekanizmasını kullanabilirsiniz. Çıktının bir örneğini “FBA demo” konfigürasyonu, “Depolardaki ürünler” raporunda görebilirsiniz.

    1C'de bu kadar, hadi Android'de bir mobil uygulama geliştirmeye geçelim.

    Android uygulaması tasarlama 1C'de oluşturulan Android proje şablonunu Eclipse çalışma alanına aktarıyoruz.

    Eclipse'i başlatın ve projeyi içe aktarın: Dosya > İçe Aktar... Android grubunda, "Çalışma Alanında Mevcut Android Kodu" öğesini seçin, İleri'ye tıklayın, Android proje şablonu dizininin yolunu belirtin ve Son'a tıklayın, yeni proje çalışma alanına eklendi. Herhangi bir zorlukla karşılaşırsanız, bakın süreç resimlerde anlatılmıştır.

    1. Veri kaynağı 1C'den alınan değerler tablosu olan bir “Finansal Göstergeler” raporu oluşturun. Bunu yapmak için yeni bir sınıf ToChiefReport.java ekleyin, işte tam kaynak kodu:

    Göstermek

    /** * Yerel sqlite veritabanındaki verileri kullanarak rapor oluşturma örneği. * veri kaynağı, “Yöneticiye Rapor Ver” harici tablosudur * */ public class ToChiefReport, SimpleMapHtmlReport'u genişletir ( @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("Hata, rapor oluşturulmadı!"); ) super.build (context, builderResult); ) özel void makeReport(Context context) SQLException'ı atar ( DBHelper helper = new DBHelper(context); // Raporun ve tablonun başlığı setHeader2("Finansal göstergeler"); setTableHeader("Name) ", "Miktar, ovalama ."); // Tablo satırları eklendikleri sırayla olacaktır Map mapData = new LinkedHashMap(); // Yerel sqlite veritabanından veri seçiliyor, harici tablo // “Yöneticiye rapor ver ” ExTableRaportRukovoditelyuDao dao = yardımcı .getDao(ExTableRaportRukovoditelyu.class); Liste satırları = dao.select(); for (ExTableRaportRukovoditelyu satır: satırlar) ( mapData.put(row.pokazatel, row.znachenie); ) setTableData(mapData); ))
    Kod hakkında yorum yapacağım. Miras alındığı soyut sınıf SimpleMapHtmlReport, iki sütunlu bir tabloyla basit bir HTML raporu oluşturmak için tasarlanmıştır.
    İlk 2 yöntem getResIdIcon() ve getResIdTitle(), raporumuzun listede görüntülenecek simgesini ve başlığını döndürür. “build” olay işleyicisinde rapor derleme uygulamamız olan makeReport yöntemi çağrılır.
    Rapor oluştururken öncelikle rapor ve tablo başlığı ayarlanır, ardından yerel sqlite tablosundaki tüm kayıtlar rapor tablosu satırları olarak okunur. Ve son olarak setTableData() yönteminde rapor tablosu için verileri ayarlıyoruz. Apaçık şeyler hakkında yorum yapmak ne kadar zor.


    2.İkinci bir rapor oluşturun, burada her şey daha da basit:

    Göstermek

    /** * Derlenmiş bir rapor örneği, yalnızca bir Html dosyasının çıktısını verir. Bu örnekte * veri dosyası 1C'de oluşturuldu ve değişim sırasında mobil istemciye aktarıldı * */ public class ProductsInStokReport extends SimpleCompiledHtmlReport ( // 1C'den alınan dosyanın kaydedildiği ad (değişim prosedürüne bakın // MyExchangeTask) ) public static final String REPORT_FILE_NAME = "products_in_stok.html"; public ProductsInStokReport(File file) ( super(file); ) @Override public int getResIdIcon() ( return R.drawable.report_02; ) @Override public int getResIdTitle() ( R.string.report_name_products_in_stok'u döndür; ))


    3. Önceden tanımlanmış değişim prosedürünü 1C sunucusuyla genişletelim, yani. Buna bir adım daha ekleyelim - ikinci raporumuz için verileri derlenmiş bir dosya biçiminde elde etmek. ExchangeTask'ın soyundan gelen MyExchangeTask sınıfını ekleyelim:

    Göstermek

    /** * Özel kurallarla desteklenen standart değişim prosedürü. * Ek olarak derlenmiş bir dosya elde edilir - bir rapor. * */ public class MyExchangeTask ExchangeTask'ı genişletir ( // 1C'de tanımlandığı gibi rapor kimliği başına); ) @Override protected boolean doExecute(), İstisna atar ( // Değişim adımlarını önceden tanımlanmış kurallara göre yürütün boolean başarı = super.doExecute(); if (success) ( // Rastgele veri alın - 2. raporumuz onStepInfo("Raporlar alınıyor.. . "); String fPath = appSettings.getCacheDir().getAbsolutePath() + "/" + ProductsInStokReport.REPORT_FILE_NAME; Dosya f = wsHelper.getLargeData(ID_REPORT_products_IN_STOK, null, "", fPath); başarı = (f != null) ; ) başarıyı döndürün; ))
    Rapor verilerini elde etmek için, başarılı olması durumunda sonucu belirtilen yoldaki bir dosyaya kaydeden getLargeData web hizmeti yöntemi kullanılır. ID_REPORT_products_IN_STOK tanımlayıcısına dikkat edin, Gönderim için İkili Veri Hazırlama yöntemindeki 1C'deki ile aynı olmalıdır.


    4. Ana formda raporların listesini görüntüleyin. res\activity_main.xml dosyasını açın ve raporların listesini görüntüleyecek bir listView ekleyin:

    MainActtiviy.java'ya şunları ekliyoruz:

    A) liste için yerel bir değişken
    özel ListView listesi;
    b) başlatma yöntemi
    Private void init() ( list = (ListView) findViewById(android.R.id.list); // Raporların listesini görüntülemek için bir adaptör oluşturun ReportListAdapter adaptör = new ReportListAdapter(this,createReportList()); list.setAdapter( adaptör); list.setOnItemClickListener(new OnItemClickListener() ( @Override public void onItemClick(AdapterView parent, Görünüm görünümü, int konumu, uzun kimlik) ( // Üzerine tıkladığınızda raporu iletişim kutusunda gösterin IReport report = (IReport) list.getItemAtPosition(position) ; report.onShow(MainActivity.this); ) )); )
    ve form düzenini ayarladıktan sonra onu onCreate() içinde çağırmak
    setContentView(R.layout.activity_main); içinde();
    c) rapor listesini başlatma yöntemi
    /* * Raporların bir listesini hazırlayın */ özel Liste createReportList() ( List lst = new ArrayList(); // İlk raporu oluşturun, dosyanın kaydedildiği geçici dizin // IReport ayarları raporundan alınır = new ProductsInStokReport (new File(getAppSettings() .getCacheDir(), ProductsInStokReport.REPORT_FILE_NAME)); lst.add(report); // Diğer raporları oluşturun ve listeye ekleyin lst.add(new ToChiefReport()); )
    d) kurallarınıza göre bir borsa başlatma prosedürü
    /* * Benim kurallarıma göre takas başlatıyorum. Lütfen zamanlayıcıda * (kuruluysa) değişimin standart kurallara göre kaldığını unutmayın */ özel void startExchangeMyRules(ExchangeVariant değişkeni,boolean cancelable) ( // web hizmeti yöntemlerini çağırmak için yardımcı WSHelper wsHelper = new WSHelper(getExchangeSettings()) ; MyExchangeTask görevi = new MyExchangeTask(variant, wsHelper, getHelper()); startExchange(görev, iptal edilebilir); )
    Ve onOptionsItemSelected işleyicisindeki startExchange(ExchangeVariant.FULL, true) değişim prosedürü çağrısını startExchangeMyRules(ExchangeVariant.FULL, true) olarak değiştirin.

    Uygulama hazır, yetkilendirme formları ve program ayarları otomatik olarak oluşturulacak, bunları değiştirmeyeceğiz.
    Bir emülatörde test edelim. Hiçbir yerde hata yapmadıysanız uygulama açılacaktır. Ancak yetkilendirme verileri (kullanıcı adı ve şifre) belirtilmediğinden yetkilendirme penceresi yerine ayarlar penceresi hemen görüntülenecektir.

    Lütfen kullanıcı adınızı giriniz: Ivanov
    Ve şifre: 123456

    1C veritabanını başlatın ve “Mobil Çalışanlar” dizinini açın. Mobil cihaz olarak, önceden tanımlanmış “Cihaz Emülatörü” öğesini belirtin, “Mobil Uygulamalar” tablo bölümüne “Yöneticiye Raporla” uygulamasını ekleyin ve aynı kullanıcı adını ve şifreyi ayarlayın.

    Emülatörde değiştirme prosedürünü başlatın (sağ paneldeki “Yukarı” oklu düğme)

    Değişimin sonucu bildirimde görüntülenir:

    Uygulamanızı başlatmak için (veya değişim başarısız olursa hata ayrıntılarını görüntülemek için) üzerine tıklayın.

    Ne olduğunu kontrol edelim. Listedeki rapora tıklayın:

    Göstermek


    Harika! Raporlar görüntülenir; bir düğmeyi veya hareketleri kullanarak ölçeği değiştirebilirsiniz.


    Uygulama hazır, oldukça işlevsel ve kolayca genişletilebilir olduğu ortaya çıktı. Diğer raporları eklemek zor olmayacaktır.
    *.doc veya *.pdf gibi çeşitli formatlardaki belgeleri aktarabilir ve bunları görüntülemek için harici uygulamaları kullanabilirsiniz. Örnek kaynak koduna bakın, 3 rapor daha var:
    • Google Grafik Araçlarını kullanan grafik
    • jQuery Plot eklentisini kullanarak çizim yapın
    • harici bir uygulama tarafından PDF raporunun çıktısı (PdfReport.java)
    Bunu ayrıntılı olarak açıklamayacağım ve bu nedenle makale uzun oldu. Sorularınız varsa yorumlarda cevaplamaya hazırım. İşte çıktı:

    Göstermek


    Örnek kodun tamamını https://xp-dev.com/svn/fba_toolkit_public/samples/fbaSample4ReportHead/ adresinden indirebilirsiniz.

    Rapor oluşturmak için HTML kullanmak, çok çeşitli raporlar oluşturmanıza olanak tanır. ve etkileşimli öğelerle. Örneğin projelerimizden birinde aşağıdaki rapor kullanıldı:

    Göstermek

    • “Borç” alanı için miktara bağlı olarak koşullu bir renk şeması kullanılır;
    • ödenmemiş faturaların tam listesi yalnızca "Tümü" işaretleyicisine tıkladığınızda açılır; varsayılan olarak yalnızca son 4 tanesi görüntülenir.

    Ve elbette, hiçbir şeyle sınırlı değilsiniz, raporları ve grafikleri görüntülemek için üçüncü taraf kitaplıkları kullanabilirsiniz, örneğin achartengine veya kendi grafiğinizi/diyagramınızı oluşturabilirsiniz (Android SDK'dakiler de dahil olmak üzere birçok örnek vardır).

    Hepsi bu kadar, diğer örnekleri http://profi1c.ru web sitesinde bulabilirsiniz.
    Yakın gelecekte FBA kütüphanesinin etkileşimli öğeleri ve bağdaştırıcıları hakkında derslerin eklenmesi ve ayrıca çevrimdışı haritalar forge haritalarıyla nasıl çalışılacağının gösterilmesi planlanıyor.

    Merhemde uçun FBA Toolkit ürününün ticari olarak dağıtılması planlanıyor, artık “demo versiyonu” statüsünde. Test etmek ve öğrenmek için kullanmakta özgürsünüz.
    Kısıtlamalar:
    • demo lisansının süresi dolduktan sonra program çalışmayı durdurur; 31.12.13'ten sonra;
    • Başlarken bir bildirim görüntülenir:

    Yakın gelecekte (en fazla bir ay) ticari versiyonu çıkacak, maliyet ve lisanslama prosedürüne ilişkin bilgiler web sitemize eklenecektir.

    Sonuna kadar okuduğunuz için teşekkür ederiz. Hem 1C hem de Android ile ilgili sorularınızı yorumlarda yanıtlamaya hazırım.

    Etiketler: Etiket ekleyin

    “1C: Şirketimizi Yönetmek” (kısaltılmış UNF) mobil uygulaması örneğini kullanarak, bir mobil iş uygulamasının kökenlerinden ve ilk sürümün piyasaya sürülmesinden günümüze kadar olan gelişimini göstermek istiyorum. Uygulamanın şu anda 220.000'den fazla indirmesi var; Uygulama ücretsizdir ancak ücretli seçeneklere sahiptir (uygulama içi satın alma yoluyla uygulanır).


    Mobil UNF'nin ilk versiyonu, 2012 yılında 1C:Enterprise mobil platformunun ilk versiyonlarından birinde yapıldı. O zamanlar, zaten bir istemci-sunucu yapılandırması olan “1C: Küçük bir şirketin yönetimi” (o zaman adı buydu), küçük bir şirketin faaliyetlerini otomatikleştirmek için bir program - satış, satın alma, müşteri ve tedarikçi tabanı, depo yönetim, üretim vb.

    Platformlar arası mobil platform 1C:Enterprise'da yazılan çoğu mobil uygulama gibi, mobil UNF de iOS, Android ve Windows'ta mevcuttur.

    Görev şu şekilde ortaya konuldu: "büyük" UNF'nin çalışma senaryolarının bir kısmını destekleyen bir mobil uygulama oluşturmak. Uygulama hem otonom olarak çalışabilmeli hem de verileri "büyük" UNF ile senkronize edebilmelidir (bundan sonra metni aşırı yüklememek için UNF'nin istemci-sunucu sürümüyle ilgili olarak "büyük" kelimesini tırnak işaretleri olmadan yazacağım ). Büyük bir CNF ile çalışılması durumunda “mobil” çalışanların (satış temsilcisi, servis mühendisi, satış elemanı) senaryoları desteklenmelidir.

    İlk versiyon 1 adam-ayda oluşturuldu. Bir mobil uygulama oluştururken, bazı meta veri nesneleri (dizinler, belgeler) büyük UNF'nin nesneleri temelinde uygulandı. Ancak bazı işlevlerin (örneğin, büyük bir UNF ile veri alışverişi süreci) sıfırdan programlanması gerekiyordu. Doğru, veri alışverişi ile ilgili olarak aslında biraz programlama yapmamız gerekiyordu - kodlamayı minimuma indiren standart platform mekanizmalarını (özellikle değişim planlarını) kullandık.

    1C platformu, veri senkronizasyonu ile çalışmayı basitleştirmenin yanı sıra, geliştiriciye listeler (tablolu ve hiyerarşik) gibi arayüz bileşenlerini arama yeteneği, giriş alanları sağlayarak tam özellikli bir mobil uygulama oluşturma çalışmasını önemli ölçüde kolaylaştırır. arama, rapor tabloları, çok çeşitli grafikler, WiFi ve Bluetooth yazıcılarda yazdırma yeteneği vb.

    Mobil sürümün özellikleri Bir mobil uygulamanın işlevselliğini seçmenin iki ana stratejisi vardır. Bunlardan ilki “tek uygulama – tek işlev”dir. Örneğin, bir depodan mal almak için kullanılan, yerleşik kamerayla yalnızca ürünün barkodunu tarayabilen ve alınan ürünle ilgili bilgileri sunucuya gönderebilen bir mobil uygulama. İkinci strateji ise geniş “hepsi bir arada” işlevselliğine sahip bir mobil uygulama oluşturmaktır. Her iki yaklaşım da geçerlidir; Mobil bir UNF yazarken ikinci yaklaşımı seçtik; uygulamamız kendi alanındaki birçok görevi kapsar ve tamamen özerk bir şekilde çalışarak küçük bir kuruluşun ihtiyaçlarını karşılayabilir. Bu yaklaşımın bir diğer avantajı, kullanıcının tek bir uygulamadan birbiriyle ilişkili birçok fonksiyonla çalışabilmesidir.

    Mobil UNF, bir mobil cihazın işlevselliğini yaygın olarak kullanır, özellikle:

    • Cihazın dahili kamerası, ürün kartı doldurulurken ürünün fotoğraflanması, barkod ve QR kodların okunması için kullanılabiliyor.
    • Ödeme faturası müşteriye e-posta veya SMS yoluyla gönderilebilir
    • Karşı taraf mobil cihazın adres defterinden seçilebilir
    • Karşı tarafın telefon numarası varsa tek dokunuşla karşı tarafı arayabilir veya SMS gönderebilirsiniz, e-posta belirtilmişse mektup gönderebilirsiniz, adres belirtilmişse haritada gösterebilirsiniz.
    • Belgeleri WiFi ve Bluetooth aracılığıyla yazıcılara yazdırabilirsiniz
    Mobil UNF veritabanını Yandex.Disk'e yedekleyip geri yükleme ve veritabanını postayla gönderme seçeneği mevcuttur.

    Mobil UNF'nin yapılandırması oldukça sade görünüyor (aşağıdaki ekran görüntüsüne bakın):

    • 8 referans kitabı (büyük UNF'de 273 referans kitabı bulunmaktadır)
    • 7 belge (büyük UNF'de – 125)
    • 3 belge günlüğü (büyük UNF'de – 24)
    • 3 bilgi kaydı (büyük UNF – 357'de)
    • 4 birikim kaydı (büyük UNF'de – 64)

    Mobil UNF'nin ana nesneleri

    Ancak bu kadar az sayıda uygulama nesnesine rağmen ürünün oldukça işlevsel olduğu ortaya çıktı.

    Mobil UNF'nin ilginç bir özelliği, daha önce 1C'yi hiç duymamış (evet, ülkemizde böyle var), küçük işletmelerinin kayıtlarını tutmak için bir mobil uygulamaya ihtiyaç duyan kişiler tarafından sıklıkla kullanılmaya başlanmasıdır ( örneğin, ev işçiliği). Bunu Google Play'de veya AppStore'da arama yaparak buldular, yorumları okudular ve çalışmaya başladılar.

    Çevrimdışı işlem Bu çalışma senaryosu, tüm muhasebenin yalnızca bir mobil cihazda gerçekleştirildiği çok küçük kuruluşlar için tasarlanmıştır. Bu, örneğin bir "ev" işi olabilir - evde mücevher yapmak ve onu VKontakte sayfasında satmak. Ya da belki küçük bir mağaza - şahsen, Lego inşaatçılarının satışında uzmanlaşmış bir oyuncak mağazasının yalnızca UNF'nin mobil versiyonunda kayıt tuttuğu bir durum gördüm. Mobil UNF'nin WiFi ve Bluetooth yazıcılar üzerinden baskı alabildiği göz önüne alındığında oldukça fazla sayıda sorunun çözümünde kullanılabileceği belirtiliyor. Mobil UNF, siparişlerin işlenmesini, faturaların ve faturaların girilmesini, makbuzların ve para harcamalarının muhasebeleştirilmesini destekler Sunucuyla senkronizasyon modunda çalışma (ilk sürümler) Önceki sürümlerde mobil UNF'deki sunucuyla senkronizasyon modunda, muhasebe işlevi kullanılamaz hale geldi ve çalışma esas olarak siparişler (siparişlerin alınması ve yerine getirilmesi) ve ilgili faaliyetler (karşı tarafların, mal ve hizmetlerin vb. dizinlerinin tutulması) gerçekleştirildi.

    Mal ve hizmet, yüklenici ve sipariş rehberleri büyük UNF ile senkronize edildi.


    İlk versiyonlarda mobil ve büyük UNF arasında veri alışverişi

    Mobil cihazlardan girilen siparişler büyük bir UNF'de, senkronize edildiğinde ise sipariş sorumlularının mobil cihazlarında son buluyordu. Mobil cihazlara girilen nakit makbuzları, mal satışları vb. belgeler büyük UNF'ye gitti ancak mobil cihazlar arasında senkronize edilemedi. Senkronizasyon modunda mobil uygulamadaki tüm çalışmalar esas olarak emirler - bunların kabulü ve uygulanması - etrafında gerçekleştirildi; mobil cihazda tam muhasebe yapılmadı; bunun için bilgisayarda büyük bir CNF kullanılması gerekiyordu.

    İlk sürümlerde durum böyleydi, ancak daha sonra durumu değiştirdik ve mobil CNF'yi kullanma senaryolarının listesini, onunla çalışmayı kullanıcılar için daha kolay hale getirmek için genişlettik.

    Veri senkronizasyonu hakkında biraz bilgi Mobil ve büyük UNF arasındaki veri alışverişi, web hizmetleri aracılığıyla gerçekleşir; mobil UNF, büyük UNF tarafında konuşlandırılan web hizmetlerini arar. Büyük ve mobil CNF'deki veri yapıları farklıdır; Mimariyi tasarlarken veri alışverişi için 2 seçeneği değerlendirdik:
  • Büyük bir CNF'de, mobil bir CNF'nin veri yapısını kopyalayan bir veri yapısı oluşturun ve mobil CNF ile bire bir veri alışverişinde bulunun. Büyük bir UNF'de veri değiştirirken yeni/değiştirilen veriyi bu kopya yapıya aktarmanız ve mobil UNF ile veri alışverişi yaptıktan sonra mobil cihazdan gelen ve kopya yapıda yer alan verileri büyük UNF'ye dönüştürmeniz gerekir. biçim.
  • Büyük bir UNF'nin yapılarıyla doğrudan veri alışverişi yapın ve verileri değişim kurallarına göre "anında" dönüştürün.
  • İkinci seçeneğe yönelmeye karar verdik. İlk seçenek, veri alışverişinin basitliğiyle ilgili bazı avantajlar vaat etse de, mobil UNF'nin yeni sürümünde veri yapısı değiştiğinde (genişletildiğinde) durumu iyi bir şekilde ele alamadı; Bire bir veri alışverişinin çalışmaya devam edebilmesi için büyük UNF sunucusunun güncellenmesi gerekecektir. Birçok nedenden dolayı bu kabul edilemezdi.

    Platformda uygulanan veri alışverişi mekanizmaları, veri senkronizasyonu için paket oluşturma işinin çoğunu üstlenerek kodlamayı minimuma indirmenize olanak tanır. Değişim işlemi sırasında 1C:Enterprise platformunun standart mekanizması kullanılır - veri değişim mekanizması; her mobil UNF için, büyük UNF'de bir veri değişim düğümü oluşturulur; büyük ve mobil UNF'de, son senkronizasyondan bu yana değişen verileri izlemek için bir değişiklik kayıt hizmeti kullanılır, vb.

    Mobil uygulama, platform mekanizmalarını kullanarak veri alışverişini başlatır, bir değişim paketi oluşturur (mobil uygulama tanımlayıcısını ve son senkronizasyondan bu yana mobil UNF'de güncellenen verileri içerir) ve bunu büyük UNF'ye gönderir. Büyük CNF, başlangıç ​​paketindeki bilgilere dayanarak, son senkronizasyondan bu yana büyük CNF'de değişen verileri mobil CNF için hazırlar ve bunları paketler halinde paketler. XDTO formatındaki paketler, XML'de serileştirilmiş 1C meta veri nesneleridir; Her paketin boyutu en fazla 500 nesnedir.

    Mobil UNF bu veri paketini paket halinde toplar. Son paketi indirdikten sonra, mobil UNF alınan verileri işlemeye başlar - işlem belgeleri, kayıt dizinleri vb. Bağlantının kesilmesi durumunda paketlerin devam ettirilmesi desteklenir; CNF için devam ettirme mekanizmasını kendimiz yazdık (platformda yok), ancak mobil CNF kaynak kodunda sağlandığı için geliştiriciler mekanizmanın uygulanmasına bakabilir ve onu uygulamaları için ödünç alabilirler.

    Mobil bir CNF'nin büyük bir CNF ile ilk senkronizasyonu sırasında, mobil CNF'de çalışamazsınız - sürecin ilerlemesini gösteren kalıcı bir pencere görünür. Sonraki tüm senkronizasyonlar arka plandadır ve mobil UNF'nin çalışmasını engellemez.

    Mobil ve büyük UNF arasında değiş tokuş edilen nesnelerin tam listesi:

    • Dizinler:
      • İsimlendirme
      • Karşı taraflar
      • kullanıcıların listesi
    • Belgeler:
      • Müşteri siparişleri
      • Kasada makbuz
      • Yazar kasadan yapılan masraflar
      • Satınalma faturası
      • Satış faturası
      • Üretme
    • Kayıtlar (ancak tüm fiyatlar değil, yalnızca ana olanlar):
      • FiyatlarTedarikçiler
      • Ürün Fiyatları
    • Organizasyona ilişkin bilgiler:
      • İsim
      • Vergi bilgisi
    Büyük UNF'de ürünlerin resimleri, yani gerçek ürünlerin görselleri bulunur. Trafiği en aza indirmek için resimleri mobil UNF'ye yüklemiyoruz; bunlar talep üzerine yükleniyor - örneğin mobil UNF'de bir ürün kartı açtığımızda.


    Ürün görselinin yer aldığı ürün kartı

    Uygulamanın gelişimi - kullanım senaryolarının geliştirilmesi Tipik bir durum - bir işletme büyüyor ve mobil CNF'nin tek bir mobil cihazdaki işlevselliği artık yeterli değil. İşletmede başka bir çalışan (veya çalışanlar) belirir ve onların da siparişlerle çalışması gerekir.

    Mobil UNF'nin ilk versiyonlarında taşıma senaryosu oldukça basitti; mobil UNF'ye girilen veriler büyük UNF'nin veritabanına kopyalanıyordu ve kullanıcının artık kayıtları bilgisayarda tutması gerekiyordu. Bu durumda, mobil UNF, siparişlerle çalışma modunda çalışacak ve artık kayıt tutmak mümkün olmayacaktır (mobil UNF'nin bağımsız sürümünde olduğu gibi).

    Bu, elbette, son kullanıcı için pek uygun değildi - zaten bir mobil cihazdan kayıt tutmaya alışmıştı, ancak burada bilgisayar klavyesinin başına oturmak zorunda kaldı. Herkes bundan memnun olmayacak.

    Bu nedenle mobil UNF'nin işleyişine ilişkin senaryoların listesini genişlettik. 1cFresh bulut teknolojisini temel alan http://1cfresh.com bulut hizmetimizin ortaya çıkışı bu konuda bize yardımcı oldu. Artık buluta büyük CNF yerleştirmek mümkün. Kullanıcının işi büyüdükçe mobil uygulamayı kullanmayla ilgili üç senaryo anlattık:

  • Oldukça küçük bir işletme. Muhasebe tek bir mobil cihazda gerçekleştirilir.
  • İş büyüyor - çalışanlar ortaya çıktı. Mobil UNF'yi çalışanların mobil cihazlarına yükleyebilirsiniz. Aynı zamanda verileri senkronize etmek için mobil cihazlar arasında veri alışverişi yapabilmeniz gerekir; Bunun için dosya alışverişini kullanmamaya, ancak senkronizasyon için (ve aynı zamanda yedekleme için) http://1cfresh.com bulutunda bulunan büyük UNF'nin bir sürümünü kullanmaya karar verdik. Bu betiği etkinleştirdiğinizde, http://1cfresh.com bulutunda büyük bir CNF örneği oluşturulur ve veritabanı, mobil cihazlar arasında veri senkronizasyonu için kullanılacaktır. Bu senaryoda bir mobil cihazın kullanılması ücretsizdir, her ek cihaz için ayda 75 ruble ücret alıyoruz, bu senaryoda en fazla üç cihaz kullanabilirsiniz. Aynı zamanda, mobil cihaz kullanıcılarına önceden tanımlanmış roller atanabilir - satış temsilcisi, servis mühendisi, satış elemanı (rollerin ayrıntılı yapılandırılması da mümkündür); Mobil uygulamanın işlevselliği buna bağlı olarak sınırlı olacaktır. Ayrıca bulutta barındırılan büyük bir CNF'ye sahip bir web istemcisi veya ince istemci aracılığıyla da çalışabilirsiniz, ancak bulut CNF'nin işlevselliği, mobil CNF'nin işlevselliğine indirgenecektir. Ancak doğrudan UNF bulutunda çalışmak gerekli değildir - tüm işler yalnızca mobil cihazlardan yapılabilir.
  • İş orta ölçekli bir firma büyüklüğüne ulaştı. Bu durumda, (bir web istemcisi veya ince istemci aracılığıyla) ek işlevsellik - CRM (mobil UNF'ye CRM'nin dahil edilmesini içeren planlar, ancak artık yalnızca büyük versiyonda mevcuttur), depo yönetimi, genişletilmiş fiyat oluşumu, bankalarla çalışma yeteneği ve. Bu durumda, büyük bir CNF ile çalışan mobil cihazların sayısı sınırlı değildir (bir işyeri için olduğu gibi, her cihaz için tarifeye göre ek ücret alınır; Fresh'de CNF için veya “kutulu” bir CNF için 1 lisans verilir) 1 adet mobil uygulamayı ücretsiz kullanma hakkı).
  • Uygulamadan para kazanma deneyimi Daha önce de yazdığım gibi UNF mobil uygulaması ücretsizdir. Bir süre önce, uygulamamızdan para kazanmaya (1C:Enterprise mobil platform sürüm 8.3.8'de uygulanan uygulama içi satın alma işlevini kullanarak), üretim ve ek mobil cihazlarla senkronizasyon yeteneği gibi ek işlevler satmaya karar verdik.


    Üretim işlevi tek seferlik bir satın alma işlemidir ve ek mobil cihazlarla senkronizasyon yeteneği, her ay yenilenmesi gereken bir abonelik olarak paketlenir. İlginç bir şekilde, alışveriş işlevinin eklenmesinden sadece 3 hafta sonra mobil UNF, iş uygulamaları satışlarında Google Play'de ilk 15'te yer aldı.Sonuç Mobile UNF, nispeten küçük (kaynak kodu hacmi açısından) ancak oldukça popüler bir üründür. Gelişimiyle ilgili hikayenin, hem 1C teknolojilerini hem de diğer geliştirme araçlarını kullanan mobil son kullanıcı ürünlerinin yaratıcıları için faydalı olacağını umuyoruz.

    1C mobil platformunda yalnızca 1C sunucusunun arka ucuyla etkileşime giren uygulamalar yapabileceğinizi hatırlatmak faydalı olacaktır; 1C platformundaki mobil uygulamalarda veri alışverişi için kullanılan protokoller platformdan bağımsızdır (web ve HTTP hizmetleri, XML ve JSON desteği vb.). Dolayısıyla, iş uygulamanız için sürekli bir İnternet bağlantısı olmadan çevrimdışı çalışabilme özelliğine sahip, platformlar arası (Android, iOS, Windows) bir mobil istemciyi hızlı ve dinamik bir şekilde geliştirmeniz gerekiyorsa, 1C mobil platformu en iyi seçim olabilir. senin için.

    giriiş

    1C platformunun yeni sürümü (8.3.5) birçok yeni işlevselliğe sahiptir. Bu arada bilmeyenler için 1C geliştiricilerinin platformda ortaya çıkan yenilikleri anlattıkları bir kaynak var. Bunlardan biri mekanizmadır. Dikkatimi çekti ve eğlenmek için bir şeyler uygulamak istedim. Hemen aklıma bir web sitesine benzer bir şey yapma fikri geldi, ancak bu fikir bilgi başlangıcında bile anlaşılamazdı, bu yüzden onu kafamdan attım. Ortadan atılmış gibi görünüyordu, ancak fikir o kadar da büyük ölçekli olmayan, hayatta gerçek uygulama bulabilecek bir şeye, bir mobil web uygulamasına dönüştürüldü.
    Sınırlı sayıda kullanıcı için, örneğin çalışanlar için, düşük yüklü ve basit bir mobil web uygulamasının, HTTP hizmetleri kullanılarak 1C'de uygulanabileceğine inanıyorum.

    Mobil web uygulaması "Kişiler"

    Sonuçla başlayacağım. Mobil web uygulaması "Kişiler" basit görünüyor ve aslında öyle. Başlangıçta yalnızca kişiyi aramak için bir alan görürsünüz.

    Birini arayalım (aramanın başlaması için en az 3 karakter girmeniz gerekir). Birisi bulundu.

    Alexey'i arayalım.

    Timofey'e bir mektup yazalım.

    Mobil web uygulaması bu kadar.

    Bu arada, onu herhangi bir konfigürasyona uyarlamak çok kolaydır.

    Uygulama hakkında biraz

    Kullanılan aletler:
    - 1C platformunun HTTP hizmetlerinin mekanizması (8.3.5 sürümünden itibaren)
    - JavaScript kitaplığı jQuery (http://jquery.com)
    - JavaScript kitaplığı jQuery mobile (http://jquerymobile.com)
    -1C:JSON ()

    "ContactsMVP" HTTP hizmeti tüm istekleri kabul eder ve bunları "ContactsMVP" işlemine aktarır. Mobil web uygulamasının tüm mantığı "ContactsMVP"nin işlenmesinde yoğunlaşmıştır.

    İstek işleme böyle görünür.

    Function ProcessRequest(Request) Export If MatchesResource(Request, "/index.html") Sonra Döndür GetResourceIndexHTML(); ElseIf MatchesResource(Request,"/application.js") Sonra GetResourceApplicationJS()'yi döndürün; ElseIf MatchesResource(Request,"/contacts.json") Sonra GetResourceContactsJSON(Request); endIf; Son Fonksiyon

    Ve bu, örneğin index.html sayfasının geri dönüşünün nasıl göründüğüdür.

    İşlev GetResourceIndexHTML() Response = Yeni HTTPServiceResponse(200); Metin = GetLayout("IndexHTML").GetText(); Answer.SetBodyFromString(Text); Response.Headers.Insert("İçerik Türü", "metin/html"); Yanıtla Geri Dön; Son Fonksiyon

    Karmaşık bir şey yok. ContactsMVP.dt dosyasını indirerek mekanizmayı daha ayrıntılı olarak inceleyebilirsiniz.

    Yayının özellikleri

    HTTP hizmetini yayınlarken bazı küçük zorluklarla karşılaştık, bu yüzden işinizi kolaylaştırmak için bazı notlar vereceğim:
    - Yayınla ilgili oldukça detaylı açıklamalar mevcut - daha dikkatli okuyun.
    - Yayınlamadan önce yapılandırıcıyı yönetici olarak çalıştırmayı unutmayın.
    - HTTP hizmetini yalnızca dosya sürümüyle başlatmak mümkün oldu; istemci-sunucu sürümünde bazı hatalar oluştu.
    - Mobil web uygulamasının yetkilendirme isteği olmadan çalışabilmesi için veritabanında kayıtlı kullanıcılar varsa, yayınlandıktan sonra default.vrd dosyasında bağlantı stringine (point.vrd) Usr ve Pwd parametrelerinin eklenmesi gerekmektedir. ib).

    Çözüm

    Umarım makale materyali sizin için yararlı olacaktır.

    İlginiz için teşekkür ederiz.

    Bu prototip Moqups kullanılarak oluşturuldu– düzenler ve konseptler oluşturmak için basit ve kullanışlı bir hizmet. Küçük Android uygulamalarının hızlı prototiplenmesi için oldukça uygundur. Daha ciddi projelerin prototipini oluşturmak için Photoshop ve Android UI Tasarım Kitini kullanmak daha iyidir!.

    Uygulama Açıklaması

    Uygulama 3 ekrandan oluşmaktadır:

    “Uygulamanın ana ekranı” – başlatıldığında görevlerin bir listesi görüntülenir (son tarih, görevin adı ve tamamlandığının göstergesi). Bir görev tamamlandığında listede tamamlandı olarak işaretlenir.

    Çalışan, "Veri Değişimi" düğmesine tıklayarak sunucudan yeni görevler alma prosedürünü hemen başlatabilir. Sunucuyla veri alışverişi de ayarlarda belirtilen programa göre günde bir kez otomatik olarak gerçekleştirilir.

    “Program ayarları” - burada yetkilendirme parametrelerini ve 1C sunucu adresini ayarlarsınız ve ayrıca bu cihazın benzersiz kimlik numarasını görüntülersiniz. Burada otomatik bir değişim programı da ayarlanabilir.

    Mobil istemci ile 1C sunucusu arasında değiştirilen verilerin yapısı

    Yol, 3 sütun içeren bir değerler tablosu (1C açısından) olacaktır:

    1C'de mobil uygulama şablonu oluşturma

    1C'yi başlatın ve “Mobil Uygulamalar” dizinini seçin, yeni bir öğe ekleyin, burada:

      "Tanımlayıcı" alanında SAMPLE_APP_TASKS'yi belirtin (veya başka birini düşünün), bu, yapılandırmanızdaki benzersiz bir uygulama tanımlayıcısıdır. Değişim işlemi sırasında başvurunun benzersiz bir şekilde tanımlanması gerekiyor çünkü Aynı çalışan, tek bir mobil cihazda birden fazla uygulamayı kullanabilir.

      “Ad” alanına mobil uygulamanızın adını girin, örneğin Görevler.

    Yaz düğmesini kullanarak dizin öğesini yazın, ardından yeni bir sürüm oluşturun ve bunu uygulamanız için çalışan bir sürüm olarak belirtin.

    “Meta Veriler” listesinden “Harici veriler” grubunu seçin ve araç çubuğundaki “Ekle” düğmesini tıklayın. Yeni tablonun parametrelerini şekilde gösterildiği gibi doldurun:

    Buradaki sütunların ve tablonun adları, kural olarak Rusça olarak belirtilmiştir, yerleşik 1C dilini kullanarak tabloyu verilerle doldurmak için kullanılacaklardır.

    Bir mobil uygulamadaki her veri tablosunun, dize türünde bir birincil anahtara (ilişkisel veritabanları açısından PRIMARY KEY) sahip olması gerekir. Tüm nesne tabloları (dizinler ve belgeler) için anahtar, bağlantının metin temsilidir (benzersiz bir tanımlayıcı) ve otomatik olarak doldurulur.

    “Bilgi kaydı” veya “harici tablo” gibi nesne olmayan tablolar için programın nasıl doldurulması gerektiğini belirtmesi gerekir. Seçeneklerden biri, örneğimizde "Son Tarih" ve "Görev" sütunları için yapılan gibi, bir veya daha fazla tablo sütunu için "Dizin" bayrağını ayarlamaktır. Bu, tablonun aynı tarih için iki özdeş göreve sahip olamayacağı anlamına gelir.

    Tamam'ı tıkladığınızda tablo meta veri ağacına eklenecektir, mobil uygulama için adlar otomatik olarak Latince'ye çevrilecektir.

    [FBA kurallarından biri: 1C'de kaynak kodunu Rusça, Java'da Latince yazıyoruz. Tanımlayıcılarda, değişken adlarında ve sınıflarda Rusça harflerin bulunmaması, mobil istemci tasarlarken birçok sorunu önleyecektir.]

    İsimleri Latince'den İngilizce'ye yeniden adlandırın. Prensip olarak Latin alfabesinden çıkmak mümkündü, ancak isimlere zaten karar verdik (yukarıdaki tabloda).

    Değişiklikleri kaydedin ve araç çubuğundaki “Mobil uygulama şablonu” düğmesine tıklayın.

    “Şablon dizini” – oluşturulan mobil uygulama şablon dosyalarının kaydedileceği dizinin yolunu belirtin.

    “Temel” sekmesinde paketin adını belirtin; bu benzersiz bir tanımlayıcı olmalıdır. Bir web siteniz varsa öneki oluşturmak için bunu kullanın. Örneğimizde bu ru.profi1c.samples.tasks'tir

    “Web servisi” sekmesinde sunucu adresi 10.0.2.2 olarak belirtilir; varsayılan olarak bu, bilgisayarınızın bir Android emülatöründen erişildiğindeki adresidir.

    "Web hizmeti adı" ve "Uygulama alt dizini" alanlarına web hizmeti yayınlanırken belirtilen verileri girin.

    “Program Hakkında” sekmesinde başvurunuzla ilgili iletişim bilgilerini ve ek bilgileri doldurun; “Tablo Oluşturucu” sekmesindeki ayarları değiştirmeden bırakın.

    Oluştur'a tıklayın, Android proje şablonu oluşturulacaktır. Şablon oluşturma sihirbazı penceresini kapatın, değişiklikleri kaydedin ve "Mobil uygulamalar" dizin öğesini kapatın