Aplikasi pada TSD dan komunikasi dengan 1C: Enterprise 8.3 melalui HTTP-Service. Bagian 1 (Memilih metode pertukaran. Deskripsi API)

  1. Pilihan metode pertukaran. Deskripsi API.
  2. Implementasi API di sisi 1C.
  3. BroadcastReceiver Kami menerima barcode pada contoh ATOL Smart.Lite.
  4. OnKeyUp. Dapatkan kode batang dari pemindai dengan emulasi keyboard
  5. Menu, objek pendamping
  6. Kami menyadari pertukaran dan penyimpanan data. Kami menggunakan Retrofit 2, Room, Coroutines.
  7. Antarmuka pengguna LiveData, PagedList.

Untuk siapa


Dua bab pertama adalah upaya untuk menyusun pengalaman mengintegrasikan 1C dengan aplikasi dan layanan web lainnya. Siklus itu sendiri, saya pikir, akan menarik bagi programmer 1C yang mencoba untuk melampaui platform dan mencoba sesuatu yang baru. Pengembang aplikasi Android tidak akan belajar sesuatu yang baru untuk diri mereka sendiri, tetapi mungkin mereka akan tertarik pada tampilannya di sisi 1C. Dimulai dengan bagian keempat, akan ada upaya untuk menggabungkan beberapa artikel yang tersebar dari Internet tentang penggunaan perpustakaan, serta memperbarui data pada mereka. Siklus dipahami sebagai buku teks, yang menggambarkan pengalaman dalam mengembangkan aplikasi nyata. Saya sendiri bukan pengembang Android. Tetapi pada akhir seri saya berharap menjadi satu.

2. Pilihan metode pertukaran. Deskripsi API


Dalam bentuk saat ini, 1C dapat dihubungi dalam seribu satu cara. Pertimbangkan beberapa opsi, dan mengapa saya tidak menggunakannya.

  • Komponen asli - Untuk sebagian besar, ada baiknya menggunakannya untuk berbagi offline. Untuk Online, ini tidak diadaptasi dengan baik. Bahkan menjadi lebih buruk ketika 1C mulai menerapkan standarnya untuk pertukaran dengan peralatan komersial. Dan juga komponen ini disebut di sisi 1C. Tidak cocok untukku.
  • Layanan WEB - Lebih dirancang untuk pertukaran antar aplikasi yang mengembangkan tim yang berbeda. Kelas berat, gunakan XML. Secara pribadi, sangat sulit bagi saya untuk berkembang. Dan bahkan lebih sulit untuk diintegrasikan ke dalam JavaScript, Golang, dll. Tidak cocok
  • Layanan HTTP - Hampir sama dengan layanan WEB, tetapi kami menggambarkan sendiri logika kerja dan protokol pertukaran. Di sini kita tidak terbatas pada penemuan sepeda kita sendiri. Karena alasan ini, mekanisme pertukaran khusus ini dipilih.

Tugas yang diselesaikan aplikasi kita. "Segala sesuatu yang dapat dilakukan pada TSD harus dilakukan pada TSD." Nah, sebagai set standar: penerimaan, inventaris, label, label harga.

Daftar lengkap tugas
  • Bekerja dengan barang: Mencetak label dan label harga, menetapkan kode batang (barcode), memeriksa kode batang, menghapus kode batang, melihat harga dan jumlah di gudang.
  • Inventory - Sebenarnya melakukan inventarisasi.
  • Kwitansi - Penerimaan barang pada faktur, pencetakan perbedaan, pencetakan dokumen internal, status faktur.
  • Pengumpulan barang, Realisasi (Eceran) - Idenya adalah bahwa penjual tidak berada di kasir, tetapi pergi dengan pembeli atau mengumpulkan barang berdasarkan permintaan, dll. Hanya ada satu orang di konter checkout, cek siap dikirim dari TSD. Pembeli hanya membayar barang.
  • Pengambilan barang, Realisasi (Grosir) - Kami mengumpulkan barang di akun. Kami memeriksa apa yang tersedia. Kami membentuk pengiriman (dengan paket dokumen yang diperlukan). Jangan lupa untuk memeriksa kemungkinan pengiriman ke rekanan.
  • Pengumpulan barang, persiapan pengiriman - Kami mengumpulkan barang berdasarkan permintaan, meletakkannya di atas palet, mencetak dokumen: daftar pengepakan, dll.
  • Pindah - Kami mengumpulkan barang untuk dipindahkan, kami memberikan pengiriman.
  • Pengumpulan barang, daftar arbitrer - Diperlukan untuk evaluasi ulang, memperbarui label harga, label, dan operasi serupa lainnya.


Kembali ke struktur API. Pertukaran antara TSD dan 1C akan dalam format JSON. Dalam jawaban kita masing-masing hanya memiliki dua objek {hasil, payload}, hasil dan payload . Sebagai hasilnya, kami akan mengembalikan dua bidang {code, msg} . Dan kami akan selalu merespons dengan kode HTTP 200. Jadi akan lebih mudah bagi kami di sisi klien untuk mem-parsing struktur respons. Semua jawaban lain akan muncul sebagai string. 1C tidak memungkinkan kami untuk menyesuaikan jawaban di luar platform.

Mengapa memberi 200 lebih mudah
Sebagian besar pustaka untuk bekerja dengan data (termasuk Retrofit), saat menerima kode selain 200, tidak menguraikan hasilnya. Dan kita harus “menguraikannya” dengan pena.

Sekarang kita mendapatkan diagram berikut. Jika jawabannya 200, maka prosedur kami di 1C bekerja dengan baik. Jika jawaban berbeda, maka kita memiliki masalah di bawah ini. Di sini kita tidak bisa pergi secara mendalam, apa yang salah, tetapi segera menunjukkan kepada pengguna kesalahan apa, dan deskripsinya. Seseorang mungkin mengatakan bahwa kesalahan perlu diproses tanpa campur tangan pengguna, tetapi kita dapat memiliki dua situasi: 1 - server mengembalikan kesalahan. 2 - klise tidak ada koneksi. Dalam kasus pertama, kita mungkin bahkan tidak tahu bahwa ada sesuatu yang rusak (Misalnya, kesalahan 404: aplikasi meminta metode yang tidak ada. 500: Platform jatuh dengan pengecualian). Dalam yang kedua, kami tidak dapat mentransfer hasil untuk analisis ke server. Karenanya, kami menunjukkan kesalahan, dan berharap untuk tindakan pengguna lebih lanjut.

Muatan akan berisi objek yang berbeda. Ini bisa berupa daftar barang, daftar dokumen, daftar tindakan akan dikirimkan ke sana. Di sisi aplikasi, kami akan menggambarkannya dengan model dan dengan hati-hati melipatnya ke dalam basis data. Kami akan meluncurkan daftar tindakan untuk dieksekusi, dan dengan hati-hati menambahkan hasilnya ke database.

Siklus pertukaran dengan TSD adalah sebagai berikut:

  1. Aplikasi pada perintah mengirim permintaan ke 1C.
  2. 1C membentuk respons dan mengembalikan struktur dengan hasil dan data. Dalam 1C, register informasi mengumpulkan data yang berubah dalam konteks TSD (layanan web).
  3. Atas permintaan dari aplikasi, daftar metode untuk dipanggil dikirim.

Skema seperti itu dipilih karena TSD dapat dimatikan, keluar dari jaringan, dll. Tetapi tidak ada yang menghalangi kita untuk menyelesaikan 1C sehingga ketika mengubah data, beri tahu aplikasi lain (layanan web) tentangnya. Dengan pertukaran ini, kami menginformasikan bahwa ada data baru. Aplikasi bertanya data apa yang ada di sana, dan loop berulang. Contoh pertukaran disajikan dalam diagram.



Itu saja. Jika Anda memiliki pertanyaan, komentar, saran, silakan tulis di komentar.

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


All Articles