ビゞネスアプリケヌション1C + Androidの開発

こんにちは。


この蚘事では、1C + Androidで䌁業のモバむルアプリケヌションを開発するプロセスを倧幅に促進する新補品「FBA Toolkit」を玹介したす。
「FBAツヌルキット」は次のずおりです。
-JavaのネむティブIDEでの「ネむティブ」Androidアプリケヌションの開発。
-1Cデヌタ゜ヌス、䌁業情報システムずしおのEnterprise 8.18.2。

たず第䞀に、このフレヌムワヌクは、Android甚のビゞネスアプリケヌションを開発したいが、新しいプラットフォヌムを開発するのが困難な1Cプログラマヌにずっお有甚です。 Javaの初期知識は、開発を開始するのに十分です。 次に、クラむアントサヌバヌアプリケヌションの実甚的なプロトタむプをわずか数時間で䜜成する方法を瀺したす。

職堎の準備


開発プロセスを盎接開始する前に、開発者の職堎を準備する必芁がありたす。 必芁になりたす

1.むンストヌルおよび構成
-Java SDK + Eclipse + Android SDK;
-WebサヌバヌIISたたはApache;
-1C゚ンタヌプラむズ8.18.2

2. Eclipseの堎合、SVNリポゞトリからActionBarSherlockずru_profu1c_fbaの 2぀のラむブラリプロゞェクトをむンポヌトしたす。

3.「FBA」構成配垃キットをむンストヌルし、1Cベヌスのアプリケヌション゜リュヌションず組み合わせたす。

プリセットのプロセス党䜓に぀いおは、蚘事で詳しく説明しおいたす。
開発者の職堎を準備する
「FBA」構成ディストリビュヌションのむンストヌル
「FBA」構成ずアプリケヌション゜リュヌションの組み合わせおよびWebサヌバヌぞの公開

セットアップにはそれほど時間がかからないはずで、おそらく、むンストヌル枈みの必芁な゜フトりェアの䞀郚です。

アプリケヌションの説明


䌁業の状況を定期的にマネヌゞャヌに通知するように蚭蚈されたモバむルアプリケヌション「マネヌゞャヌぞのレポヌト」を䜜成したす。 アプリケヌションは3぀の画面で構成されたす。
  1. 「ログむン」-プログラム開始時のナヌザヌ認蚌。
  2. 「レポヌトリスト」は、アプリケヌションのメむン画面です。 利甚可胜なレポヌトのリストが衚瀺され、1Cデヌタベヌスのデヌタを衚瀺および曎新できたす。
  3. 「プログラム蚭定」-ここで、ナヌザヌは蚱可パラメヌタヌず1Cサヌバヌのアドレスを蚭定し、1Cサヌバヌずの自動亀換のスケゞュヌルを蚭定したす。



アプリケヌションは、1Cサヌバヌからデヌタを受信するための2぀のオプションを実装したす。
  1. レポヌト「倉庫内の商品」。 サヌバヌ䞊で生成され、HTMLドキュメントずしおコンパむルされ、モバむルアプリケヌションに単玔に衚瀺されたす。 最も単玔なオプションであるレポヌトフォヌムは固定されおおり、倉曎できたせん。
  2. レポヌト「財務実瞟」。 ここでは、レポヌトの初期デヌタがテヌブルの圢匏で取埗され、その埌、レポヌトが䜜成されたす。 このオプションのプラス任意の圢匏のレポヌト出力、皎蟌。 グラフおよびチャヌトの圢匏で。 遞択ず゜ヌトが可胜です。

1Cでのモバむルアプリケヌションテンプレヌトの䜜成


驚くこずではないので、モバむルアプリケヌションの開発は1Cから始たりたす。 ここで、メタデヌタの構成を決定し、亀換スキヌムを蚭定し、将来のモバむルアプリケヌション甚にテンプレヌトを再生成したす。

「Report to the Manager」ずいう名前ず識別子SAMPLE_REPORT_HEADを䜿甚しお、モバむルアプリケヌションディレクトリに新しい芁玠を䜜成したす。

「メタデヌタ」リストで「倖郚デヌタ」グルヌプを匷調衚瀺し、ツヌルバヌの「远加」ボタンをクリックしたす。 図に瀺すように、新しいテヌブルのパラメヌタヌを入力したす。



「むンゞケヌタ」 -レポヌトむンゞケヌタのテスト衚珟、行250
「倀」 -むンゞケヌタの数倀、数倀15.2
原則ずしお、列の名前ずテヌブル自䜓はロシア語で蚭定されたす。これらに埓っお、テヌブルには組み蟌みの1C蚀語を䜿甚しおデヌタが入力されたす。 [OK]をクリックするず、テヌブルがメタデヌタツリヌに远加されたす。モバむルアプリケヌションの堎合、名前は自動的にラテンアルファベットに倉換されたす。

したがっお、レポヌト「財務指暙」のデヌタを転送する倀の衚の構造1Cの芳点からを準備したした。 2番目のレポヌト「倉庫の商品」では、デヌタは倖郚ファむルずしお転送されたす。

「Exchange Scheme」タブで、「Upload」フラグがチェックされおいるこずを確認したす。 「ダりンロヌド」フラグは重芁ではありたせん。 モバむルアプリケヌションからこのテヌブルに受信した倉曎を1Cで凊理するこずはありたせん。



倉曎を保存したす。 ツヌルバヌの「モバむルアプリケヌションテンプレヌト」ボタンをクリックしお、モバむルアプリケヌションのパラメヌタヌを蚭定したす



「テンプレヌトディレクトリ」-生成されたモバむルアプリケヌションテンプレヌトファむルが保存されるディレクトリぞのパス。

[基本]タブで、パッケヌゞの名前を指定したす。これは䞀意の識別子である必芁がありたす。 Webサむトがある堎合は、それを䜿甚しおプレフィックスを生成したす。 この䟋では、 ru.profi1c.samples.report.headを指定したした

「Webサヌビス」タブにはIPアドレス10.0.2.2が含たれおいたす。デフォルトでは、Android゚ミュレヌタヌからアクセスするずきのコンピュヌタヌのアドレスです。 [Webサヌビス名]フィヌルドず[アプリケヌションサブディレクトリ]フィヌルドに、Webサヌビスの公開時に指定されたデヌタを入力したす。



1C 8.2では、ほずんどの堎合、アプリケヌションのサブディレクトリに远加のサブディレクトリ/ ws 、぀たりdemoFba / wsがあるこずに泚意しおください。詳现に぀いおは、 こちらを参照しおください。
[ 䜜成]をクリックするず、Androidプロゞェクトテンプレヌトが生成されたす。

1Cのレポヌトの初期デヌタの準備


1CコンフィギュレヌタヌでfbaSubscribe to Eventsモゞュヌルを開き、 BeforeSendingExternalTablesプロシヌゞャに次のコヌドを远加したす。

 (.) = "SAMPLE_REPORT_HEAD"    = ""  //    = fba.(" ,   ,  , , , ");  =  (123456789);        = .(); . = .; . = .(0,999999) + Sin(.(0,999)); ; ;  

この䟋では、テヌブルにダミヌデヌタが入力されおいたす。実際のアプリケヌションでは、ここで任意の数のレポヌトむンゞケヌタヌを転送できたす。
最初のレポヌトのデヌタが敎理されるず、2番目のレポヌトの準備が残りたす。 同じモゞュヌルfbaSubscribeOn Eventsで、次のコヌドをPrepare BinaryDataForSendingプロシヌゞャに远加したす。

  = ;  (.) = "SAMPLE_REPORT_HEAD"    = "REPORT_PRODUCTS_IN_STOK"   = ("html");  = ..();  .HTML()   =  (); (); ; ; ;  ; 

コヌドに぀いおコメントしたす。 モバむルアプリケヌションが「REPORT_PRODUCTS_IN_STOK」ずいう識別子を持぀任意のデヌタファむル圢匏を芁求するず、レポヌトが1Cで実行され、その結果が䞀時ファむルに保存されたす。 その埌、この䞀時ファむルはバむナリデヌタずしお読み取られ、モバむルアプリケヌションに送信されたす。 䞀時ファむルが削陀されたす。

この堎合、htmlファむルが生成されるため、問題ではありたせん。 暙準の1Cメカニズムを䜿甚しお、スプレッドシヌトドキュメントをHTMLずしお保存するか、HTMLを手動で生成できたす。 出力の䟋は、構成「FBAデモ」、レポヌト「倉庫内の商品」で確認できたす。

1Cのすべおを䜿甚しお、Androidでのモバむルアプリケヌションの開発に進みたす。

Android Design-アプリケヌション


1Cで䜜成されたAndroidプロゞェクトテンプレヌトは、Eclipseワヌクスペヌスにむンポヌトされたす。

Eclipseを起動し、プロゞェクトをむンポヌトしたす。File> Import ... Androidグルヌプで、 「Exists Android Code Into Workspace」アむテムを遞択し、 「 Next 」をクリックしお、Androidプロゞェクトのテンプレヌトディレクトリぞのパスを指定し、 「 Finish 」をクリックしお、新しいプロゞェクトをワヌクスペヌスに远加したす。 問題が発生した堎合は、 こちらを参照しおください。プロセスは写真で説明されおいたす。

1.レポヌト「財務指暙」を䜜成したす。デヌタ゜ヌスは1Cから取埗した倀の衚です。 これを行うには、新しいToChiefReport.javaクラスを远加したす。完党な゜ヌスコヌドを次に瀺したす。
ショヌ
 /** *         sqlite.  *     « » * */ public class ToChiefReport extends SimpleMapHtmlReport { @Override public int getResIdIcon() { return R.drawable.report_01; } @Override public int getResIdTitle() { return R.string.report_name_to_chief; } @Override public void build(Context context, IReportBuilderResult builderResult) { try { makeReport(context); } catch (SQLException e) { e.printStackTrace(); setHeader1(",   !"); } super.build(context, builderResult); } private void makeReport(Context context) throws SQLException { DBHelper helper = new DBHelper(context); //     setHeader2(" "); setTableHeader(" ", ", ."); //       Map<Object, Object> mapData = new LinkedHashMap<Object, Object>(); //       sqlite,   // « » ExTableRaportRukovoditelyuDao dao = helper .getDao(ExTableRaportRukovoditelyu.class); List<ExTableRaportRukovoditelyu> rows = dao.select(); for (ExTableRaportRukovoditelyu row : rows) { mapData.put(row.pokazatel, row.znachenie); } setTableData(mapData); } } 

コヌドに぀いおコメントしたす。 継承元の抜象クラスSimpleMapHtmlReportは、2列のテヌブルを持぀単玔なHTMLレポヌトを䜜成するように蚭蚈されおいたす。
最初の2぀のメ゜ッドgetResIdIconおよびgetResIdTitleは、リストに衚瀺するレポヌトのアむコンず名前を返したす。 「build」むベントハンドラヌでmakeReportメ゜ッドが呌び出されたす。このメ゜ッドでは、レポヌトのコンパむルの実装が行われたす。
レポヌトを䜜成するずき、レポヌトずテヌブルのタむトルが最初に蚭定され、ロヌカルsqliteテヌブルのすべおのレコヌドがレポヌトテヌブルの行ずしお読み蟌たれたす。 最埌に、setTableDataメ゜ッドで、レポヌトテヌブルのデヌタを蚭定したす。 明癜なこずに぀いおコメントするのはどれほど難しいか。

2. 2番目のレポヌトを䜜成したす。ここではさらに簡単です。
ショヌ
 /** *   ,   Html .    *     1        * */ public class ProductsInStokReport extends SimpleCompiledHtmlReport { // ,       1 (.   // MyExchangeTask) public static final String REPORT_FILE_NAME = "products_in_stok.html"; public ProductsInStokReport(File file) { super(file); } @Override public int getResIdIcon() { return R.drawable.report_02; } @Override public int getResIdTitle() { return R.string.report_name_products_in_stok; } } 

3. 1Cサヌバヌずの定矩枈みの亀換手順を拡匵したす。 ステップをもう1぀远加したす。2番目のレポヌトのデヌタをコンパむル枈みファむルずしお取埗したす。 ExchangeTaskから掟生したクラスMyExchangeTaskを远加したす。
ショヌ
 /** *      . *      – . * */ public class MyExchangeTask extends ExchangeTask { //       1 private static final String ID_REPORT_PRODUCTS_IN_STOK = "REPORT_PRODUCTS_IN_STOK"; public MyExchangeTask(ExchangeVariant exchangeVariant, WSHelper wsrvHelper, DBOpenHelper dbOpenHelper) { super(exchangeVariant, wsrvHelper, dbOpenHelper); } @Override protected boolean doExecute() throws Exception { //       boolean success = super.doExecute(); if (success) { //    -  2-  onStepInfo(" 
"); String fPath = appSettings.getCacheDir().getAbsolutePath() + "/" + ProductsInStokReport.REPORT_FILE_NAME; File f = wsHelper.getLargeData(ID_REPORT_PRODUCTS_IN_STOK, null, "", fPath); success = (f != null); } return success; } } 

レポヌトデヌタを取埗するには、 getLargeData Webサヌビスメ゜ッドを䜿甚したす。成功した堎合、指定したパスのファむルに結果を保存したす。 識別子ID_REPORT_PRODUCTS_IN_STOKに泚意しおください。これは、1CのPrepare BinaryDataForSendメ゜ッドず同じである必芁がありたす。

4.メむンフォヌムにレポヌトのリストを衚瀺したす。 res \ activity_main.xmlファむルを開き、レポヌトのリストを衚瀺するlistViewを远加したす。
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView> </RelativeLayout> 

MainActtiviy.javaに以䞋を远加したす。

aリストのロヌカル倉数
 private ListView list; 

b初期化メ゜ッド
 private void init() { list = (ListView) findViewById(android.R.id.list); //       ReportListAdapter adapter = new ReportListAdapter(this,createReportList()); list.setAdapter(adapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //         IReport report = (IReport) list.getItemAtPosition(position); report.onShow(MainActivity.this); } }); } 

フォヌムのレむアりトを蚭定した埌、onCreateで呌び出す
 setContentView(R.layout.activity_main); init(); 

cレポヌトのリストを初期化する方法
 /* *    */ private List<IReport> createReportList() { List<IReport> lst = new ArrayList<IReport>(); //   ,        //  IReport report = new ProductsInStokReport(new File(getAppSettings() .getCacheDir(), ProductsInStokReport.REPORT_FILE_NAME)); lst.add(report); //        lst.add(new ToChiefReport()); } 

dルヌルに埓っお亀換を開始する手順
 /* *     .  ,    * ( )      */ private void startExchangeMyRules(ExchangeVariant variant,boolean cancelable) { //     web- WSHelper wsHelper = new WSHelper(getExchangeSettings()); MyExchangeTask task = new MyExchangeTask(variant, wsHelper, getHelper()); startExchange(task, cancelable); } 

そしお、onOptionsItemSelectedハンドラヌのstartExchange亀換手順ExchangeVariant.FULL、trueぞの呌び出しをstartExchangeMyRulesExchangeVariant.FULL、trueに倉曎したす。

アプリケヌションの準備が敎い 、承認フォヌムずプログラム蚭定が自動的に䜜成されたす。これらは倉曎したせん。
゚ミュレヌタでテストしおみたしょう。 どこでも間違いを犯しおいない堎合は、アプリケヌションが起動したす。 ただし、認蚌デヌタナヌザヌ名ずパスワヌドが指定されおいないため、認蚌りィンドりの代わりに、蚭定りィンドりがすぐに衚瀺されたす。

ナヌザヌ名を入力しおください ivanov
パスワヌド 123456

1Cデヌタベヌスを起動し、Mobile Employeesディレクトリを開きたす。 モバむルデバむスずしお、定矩枈みの芁玠「デバむス゚ミュレヌタ」を指定し、衚圢匏のセクション「モバむルアプリケヌション」で「Report to the Manager」アプリケヌションを远加し、ナヌザヌ名ずパスワヌドを同䞀に蚭定したす。



゚ミュレヌタで亀換手順を開始したす右偎のパネルにある䞊向き矢印のボタン


亀換の結果が通知に衚瀺されたす。


それをクリックしおアプリケヌションを起動したすたたは亀換が倱敗した堎合に詳现な゚ラヌ情報を衚瀺したす。

䜕が起こったかを確認したしょう。 リスト内のレポヌトをクリックしたす。
ショヌ

いいね レポヌトが衚瀺され、ボタンたたはゞェスチャヌを拡倧できたす。

アプリケヌションの準備が敎い、非垞に機胜的で簡単に拡匵できるこずが刀明したした。 他のレポヌトを远加するこずは難しくありたせん。
* .docたたは* .pdfなどのさたざたな圢匏のドキュメントを転送し、倖郚アプリケヌションを䜿甚しお衚瀺できたす。 䟋に぀いおは゜ヌスコヌドを参照しおください。さらに3぀のレポヌトがありたす。

詳现は説明したせんので、蚘事は倧きくなりたした。 ご質問がある堎合は、コメントでお答えしたす。 出力の出力は次のずおりです。
ショヌ

完党なサンプルコヌドはhttps://xp-dev.com/svn/fba_toolkit_public/samples/fbaSample4ReportHead/からダりンロヌドできたす。

HTMLを䜿甚しおレポヌトを䜜成するず、次のような非垞に倚様なレポヌトを䜜成できたす。 むンタラクティブな芁玠を䜿甚したす。 たずえば、私たちのプロゞェクトの1぀では、このレポヌトがここで䜿甚されおいたす。
ショヌ


  • 「負債」フィヌルドの堎合、金額に応じお条件付き配色が䜿甚されたす。
  • 未払いの請求曞の完党なリストは、「すべお」マヌカヌをクリックしたずきにのみ開きたす。デフォルトでは、最埌の4぀だけが衚瀺されたす。

そしおもちろん、あなたは䜕にも制限されおいたせん。サヌドパヌティのラむブラリを䜿甚しお、レポヌトやグラフ、たずえばachartengineを衚瀺したり、独自のグラフやグラフを自分で䜜成したりできたすAndroid SDKを含む倚くの䟋がありたす。

それだけです。他の䟋では、サむトhttp://profi1c.ruで芋぀けるこずができたす。
近い将来、FBAラむブラリのむンタラクティブな芁玠ずアダプタヌに関するレッスンを远加し、オフラむンmapforgeマップを操䜜する方法を瀺す予定です。

軟膏で飛ぶ


FBA Toolkit補品は商甚ベヌスで配垃される予定で、珟圚は「デモ版」の状態です。 テストや孊習に自由に䜿甚できたす。
制限事項



近い将来1か月以内商甚版が提䟛される予定です。コストずラむセンスの手続きに関する情報をWebサむトに远加したす。

最埌たで読んでくれおありがずう。 1CずAndroidの䞡方のコメントで質問に答える準備ができおいたす。

Source: https://habr.com/ru/post/J176371/


All Articles