1C - Baik dan jahat. Susunan titik dalam holivar sekitar 1C

1C - Baik dan jahat. Susunan titik dalam holivar sekitar 1C

Teman dan kolega, akhir-akhir ini semakin sering ada artikel tentang Habré yang berisi kebencian terhadap 1C sebagai platform pengembangan, dan pidato para pembelanya. Artikel-artikel ini mengidentifikasi satu masalah serius: paling sering, kritikus 1C mengkritiknya dari posisi “tidak menguasainya”, memarahi masalah yang secara de facto mudah diselesaikan, dan sebaliknya, tidak menyentuh masalah yang benar-benar penting, bernilai. berdiskusi dan tidak diselesaikan oleh vendor. Saya percaya bahwa masuk akal untuk melakukan tinjauan yang bijaksana dan seimbang terhadap platform 1C. Apa yang dapat dilakukannya, apa yang tidak dapat dilakukannya, apa yang seharusnya dilakukannya namun tidak dilakukannya, dan, sebagai penutup, apa yang dapat dilakukannya dengan luar biasa, dan pengembang Anda di %technology_name% akan melakukannya selama seratus tahun, membuangnya lebih dari satu anggaran tahunan.

Hasilnya, Anda, sebagai seorang manajer atau arsitek, akan dapat memperoleh pemahaman yang jelas tentang tugas apa yang akan bermanfaat bagi Anda jika menggunakan 1C, dan di mana perlu dibakar dengan setrika panas. Sebagai pengembang di dunia “non-1C”, Anda akan dapat melihat apa saja yang ada di 1C yang menimbulkan keributan. Dan sebagai pengembang 1C, Anda akan dapat membandingkan sistem Anda dengan ekosistem bahasa lain dan memahami lokasi Anda dalam sistem koordinat pengembangan perangkat lunak.

Di bawah pemotongan ada banyak serangan tebal pada 1C, terhadap kritik 1C, pada Java, .NET dan secara umum... Penggemarnya penuh, selamat datang!

Tentang diri saya

Saya mengenal topik pembicaraan ini sejak kurang lebih tahun 2004. Saya mungkin telah memprogram sejak saya berusia 6 tahun, sejak saya mendapatkan buku tentang Profesor Fortran dengan komik tentang kucing, burung pipit, dan ulat. Saya menganalisis program yang ditulis kucing itu dari gambar-gambar di buku dan mencari tahu apa fungsinya. Dan ya, saya tidak memiliki komputer sungguhan pada saat itu, tetapi ada gambar di sebaran buku dan dengan jujur ​​​​saya menekan tombol kertas, memasukkan perintah yang telah saya mata-matai pada kucing X.

Lalu ada BK0011 dan BASIC di sekolah, C++ dan assembler di universitas, lalu 1C, dan masih banyak hal lainnya yang saya terlalu malas untuk mengingatnya. Selama 15 tahun terakhir, saya terutama terlibat dalam 1C, tidak hanya dalam hal coding, tetapi juga 1C secara umum. Menetapkan tugas, administrasi, dan pengembang di sini. Selama 5 tahun terakhir saya telah terlibat dalam kegiatan yang bermanfaat secara sosial dalam hal pengembangan alat pengembangan dan otomatisasi untuk pengguna 1C lainnya, menulis artikel dan buku.

Mari kita putuskan topik diskusi

Pertama, mari kita definisikan apa yang akan kita bicarakan, karena huruf “1C” bisa berarti banyak hal. Dalam hal ini, yang kami maksud dengan huruf "1C" secara eksklusif adalah kerangka pengembangan "1C: Enterprise" dari versi kedelapan yang modern. Kami tidak akan berbicara banyak tentang pabrikan dan kebijakannya (tetapi kami harus melakukan sedikit) Kami tidak akan membahas aplikasi spesifik yang ditulis menggunakan kerangka kerja ini. Teknologi itu terpisah, aplikasi alias konfigurasinya terpisah.

Arsitektur tingkat tinggi 1C: Perusahaan

Bukan tanpa alasan saya menyebut kata “kerangka”. Dari sudut pandang pengembang, platform 1C justru merupakan sebuah kerangka kerja. Dan Anda harus memperlakukannya persis seperti kerangka kerja. Anggap saja sebagai Spring atau ASP.NET, dijalankan oleh beberapa runtime (masing-masing JVM atau CLR). Kebetulan dalam dunia pemrograman konvensional (“bukan 1C”), pembagian ke dalam kerangka kerja, mesin virtual, dan aplikasi spesifik adalah hal yang wajar, karena komponen ini biasanya dikembangkan oleh produsen yang berbeda. Di dunia 1C, tidak lazim untuk secara eksplisit membedakan kerangka pengembangan dan runtime itu sendiri, selain itu, aplikasi spesifik yang ditulis menggunakan kerangka tersebut juga sebagian besar dikembangkan oleh 1C itu sendiri. Akibatnya timbul kebingungan. Oleh karena itu, dalam kerangka artikel ini, kita harus mempertimbangkan 1C dari beberapa sisi sekaligus dan mengklasifikasikannya menurut beberapa sumbu koordinat. Dan di setiap sumbu koordinat kita akan meletakkan sekop zat berwarna coklat dan melihat fitur, kelebihan dan kekurangan dari solusi yang ada.

Sudut pandang pada 1C

1C untuk pembeli

Pembeli membeli sistem otomasi yang dengannya ia dapat dengan cepat memecahkan masalah otomatisasi bisnisnya sendiri. Sebuah bisnis bisa berupa sebuah kios kecil, atau bisa juga sebuah perusahaan induk yang besar. Jelas bahwa kebutuhan bisnis ini berbeda, namun keduanya didukung oleh basis kode platform tunggal.

Bagi pembeli 1C, ini adalah waktu yang cepat untuk memasarkan. Cepat. Lebih cepat dari Java, C# atau JS. Rata-rata. Di sekitar rumah sakit. Jelas bahwa situs web kartu nama yang menggunakan React akan menjadi lebih baik, tetapi backend sistem WMS akan diluncurkan lebih cepat di 1C.

1C sebagai alat

Setiap solusi teknologi memiliki batas penerapannya. 1C bukanlah bahasa tujuan umum, ia tidak hidup terpisah dari kerangka kerjanya. Dianjurkan untuk menggunakan 1C saat Anda membutuhkan:

  • aplikasi server
  • aplikasi tempat keuangan muncul
  • dengan UI siap pakai, ORM, Pelaporan, XML/JSON/COM/PDF/YourDataTransferingFormat
  • dengan dukungan untuk proses latar belakang dan pekerjaan
  • dengan keamanan berbasis peran
  • dengan logika bisnis yang dapat skrip
  • dengan kemampuan membuat prototipe dengan cepat dan waktu pemasaran yang rendah

Anda tidak memerlukan 1C jika Anda ingin:

  • pembelajaran mesin
  • perhitungan GPU
  • grafik komputer
  • perhitungan matematis
  • sistem CAD
  • pemrosesan sinyal (suara, video)
  • panggilan http highload dengan ratusan ribu rps

1C sebagai perusahaan manufaktur

Perlu dipahami apa bisnis 1C sebagai produsen perangkat lunak. Perusahaan 1C menjual solusi masalah bisnis melalui otomatisasi. Bisnisnya berbeda, besar atau kecil, tapi itulah yang dia jual. Sarana untuk mencapai tujuan ini adalah aplikasi bisnis. Untuk akuntansi, akuntansi penggajian, dll. Untuk menulis aplikasi ini, perusahaan menggunakan platform pengembangan aplikasi bisnisnya sendiri. Dirancang khusus untuk tugas umum aplikasi bisnis yang sama:

  • akuntansi Keuangan
  • penyesuaian logika bisnis yang mudah
  • kemungkinan integrasi yang luas dalam lanskap TI yang heterogen

Sebagai produsen, 1C percaya bahwa ini adalah strategi yang memungkinkan Anda bekerja sama dengan mitra dan klien dalam mode win-win. Anda dapat membantah hal ini, namun secara kasar beginilah cara perusahaan mempromosikan dirinya: solusi siap pakai untuk masalah bisnis yang dapat dengan cepat disesuaikan oleh mitra dan diintegrasikan ke dalam lanskap TI apa pun.

Semua klaim atau keinginan terhadap 1C sebagai kerangka kerja harus dilihat secara eksklusif melalui prisma ini. “Kami ingin OOP dalam 1C,” kata para pengembang. “Berapa biaya yang kami keluarkan untuk mendukung OOP di platform, apakah ini akan membantu kami meningkatkan penjualan kotak?” kata 1C. Membuka “prisma” penjualan solusi masalah bisnis:

- Hai bisnis, apakah Anda ingin OOP di 1C Anda?
- Apakah ini akan membantuku memecahkan masalahku?
- Siapa tahu...
- Maka tidak perlu

Pendekatan ini bisa baik atau buruk tergantung siapa yang melihatnya, tapi begitulah adanya. Berbicara tentang fakta bahwa tidak ada fitur X di 1C, Anda perlu memahami bahwa fitur tersebut ada bukan karena suatu alasan, tetapi dalam konteks pilihan “biaya implementasi vs jumlah keuntungan”.

Klasifikasi teknologi

“Faktanya, Odinesniks melakukan yang terbaik untuk menggunakan pola terbaik, yang dipilih dengan cermat oleh para ahli metodologi dan pengembang platform 1C.
Saat Anda menulis kode bodoh Anda untuk formulir terkelola sederhana, pada kenyataannya Anda sedang menggunakannya pengontrol tampilan model с pengikatan data dua arah в mesin aplikasi data tiga lapis, diberi rasa pemetaan hubungan objek tingkat tinggi di pangkalan deskripsi metadata deklaratifmemiliki miliknya sendiri bahasa kueri yang tidak bergantung pada platform, C antarmuka pengguna berbasis data deklaratif, serialisasi transparan lengkap, dan bahasa program berorientasi domain.

Perbedaan antara pengembang 1C dan rekan-rekan Barat mereka terletak pada PR. Mereka suka memberi nama besar pada omong kosong apa pun dan membawanya seperti tas kotor.”
A.Orefkov

Platform 1C memiliki arsitektur 3 tingkat klasik, yang di tengahnya terdapat server aplikasi (atau emulasinya dengan sedikit uang untuk pemilik toko kecil). Baik MS SQL atau Postgres digunakan sebagai DBMS. Ada juga dukungan untuk Oracle dan IBM DB2, tetapi ini agak esoterik, tidak ada yang tahu apa yang akan terjadi jika Anda mengimplementasikan 1C pada database ini dengan beban sedang dan tinggi. Saya yakin 1C sendiri tidak mengetahui hal ini.

Bagian klien adalah klien tipis yang diinstal pada mesin pengguna atau klien web. Ciri utamanya adalah programmer tidak menulis 2 kode yang berbeda, mereka menulis satu aplikasi, dalam satu bahasa, dan Anda dapat menampilkannya di browser jika ada keinginan atau kebutuhan. Siapa yang menginginkan tumpukan penuh dan satu bahasa untuk bagian depan dan belakang, node.js? Mereka tidak pernah berhasil melakukan hal yang persis sama sampai akhir. Tumpukan penuh sebenarnya ada, tetapi Anda harus menulisnya dalam 1C. Ironi nasib, hal-hal seperti itu :)

Solusi cloud SaaS 1C:Fresh juga berfungsi dalam mode browser, di mana Anda tidak dapat membeli 1C, tetapi menyewa database kecil dan menyimpan catatan penjualan shawarma di sana. Hanya di browser, tanpa menginstal atau mengkonfigurasi apa pun.

Selain itu, ada klien lama, yang dalam 1C disebut “aplikasi biasa”. Warisan tetaplah warisan, selamat datang di dunia aplikasi pada tahun 2002, namun kita masih membicarakan keadaan ekosistem saat ini.

Bagian server 1C mendukung pengelompokan dan penskalaan dengan menambahkan mesin baru ke cluster. Cukup banyak salinan yang rusak di sini dan akan ada bagian tersendiri di artikel tentang ini. Singkatnya, ini tidak sama dengan menambahkan beberapa contoh yang persis sama di belakang HAProxy.

Kerangka pengembangan aplikasi menggunakan bahasa pemrogramannya sendiri, yang secara kasar menyerupai VB6 yang sedikit lebih baik yang diterjemahkan ke dalam bahasa Rusia. Bagi orang-orang yang membenci segala sesuatu yang berbahasa Rusia, yang tidak percaya bahwa “jika” diterjemahkan sebagai “jika”, opsi sintaksis kedua ditawarkan. Itu. Jika mau, Anda bisa menulisnya dalam 1C sedemikian rupa sehingga tidak bisa dibedakan dari VB.

1C - Baik dan jahat. Susunan titik dalam holivar sekitar 1C

Bahasa pemrograman inilah yang menjadi alasan utama kebencian julukan 1C terhadap platform mereka. Jujur saja, bukan tanpa alasan. Bahasanya disusun sesederhana mungkin, dirancang untuk memenuhi mantra “DEVELOPERS, DEVELOPERS” pada skala setidaknya di CIS. Esensi komersial dari solusi semacam itu, menurut saya, terlihat jelas: lebih banyak pengembang, cakupan pasar lebih luas. Hal ini menjadi kenyataan, menurut berbagai perkiraan, dari 45% hingga 95%. Saya akan langsung mengatakan bahwa menulis dalam bahasa yang menurut Anda lebih mudah. Dan saya tahu cukup banyak bahasa pemrograman.

Mari kita mulai dengan bahasanya.

bahasa pemrograman 1C

Pada saat yang sama, titik kuat dan lemah dari sistem. Memberikan kemudahan masuk dan keterbacaan. Di sisi lain, ini belum diperbarui sejak rilis versi 8 pada tahun 2002 dan sudah ketinggalan zaman. Seseorang akan mengatakan "kelemahan utama adalah tidak ada OOP" dan mereka salah. Pertama, PLO tidak hanya menyukai Nuraliev, tetapi juga Torvalds. Dan kedua, OOP masih ada.

Dari sudut pandang pengembang, ia memiliki kerangka kerja dengan kelas dasar yang ditampilkan di DBMS. Pengembang dapat mengambil kelas dasar “Direktori” dan mewarisi direktori “Klien” darinya. Ia dapat menambahkan bidang kelas baru ke dalamnya, misalnya INN dan Alamat, dan juga, jika perlu, dapat mengganti (override) metode kelas dasar, misalnya metode OnWrite/AtRecord.

Kerangka kerja ini dirancang sedemikian rupa sehingga pewarisan yang lebih dalam jarang diperlukan, dan pembatasan dalam OOP, menurut saya, masuk akal. 1C berfokus pada Pengembangan Berbasis Domain dan membuat Anda berpikir, pertama-tama, tentang bidang subjek solusi yang sedang dikembangkan, dan ini bagus. Tidak hanya tidak ada godaan, tetapi juga tidak perlu menulis 10 DTO dan ViewModel yang berbeda hanya untuk menampilkan beberapa data dari domain di suatu tempat. Pengembang 1C selalu beroperasi dengan satu entitas, tanpa mengacaukan konteks persepsi dengan selusin kelas dengan nama serupa, mewakili entitas yang sama, tetapi dari sisi yang berbeda. Aplikasi .NET apa pun, misalnya, akan berisi lima atau dua ViewModel dan DTO untuk serialisasi ke JSON dan transfer data dari klien ke server. Dan sekitar 10-15% dari kode aplikasi Anda akan dihabiskan untuk mentransfer data dari satu kelas ke kelas lain menggunakan pena atau kruk seperti AutoMapper. Kode ini harus ditulis dan pemrogram harus dibayar untuk membuat dan memeliharanya.

Ternyata bahasa 1C sulit untuk dikembangkan tanpa mempersulitnya ke level bahasa mainstream, sehingga kehilangan keunggulan kesederhanaannya. Apa tugas vendor yang pada dasarnya diselesaikan: untuk mengeluarkan solusi standar yang dapat disesuaikan oleh setiap siswa yang tertangkap di jalan dengan tingkat kualitas yang diperlukan (yaitu, penutup kasus dari kios hingga pabrik besar selesai). Jika Anda adalah sebuah kios, ambillah seorang pelajar; jika Anda adalah sebuah pabrik, ambillah seorang guru dari mitra pelaksana Anda. Fakta bahwa mitra pelaksana menjual siswa dengan harga seorang guru tidak menjadi masalah dalam kerangka kerja ini. Secara arsitektural, kerangka kerja harus memecahkan masalah keduanya, kode konfigurasi standar (yang kami jual ke bisnis dengan janji penyesuaian) harus dapat dipahami oleh siswa, dan seorang guru harus dapat memahami apa pun yang Anda inginkan.

Menurut pendapat saya, apa yang sebenarnya kurang dalam bahasanya, yang memaksa Anda untuk menulis lebih dari yang Anda bisa, adalah membuang-buang waktu yang dibayarkan oleh pelanggan.

  • Kemungkinan mengetik pada level, misalnya, TypeScript (sebagai hasilnya, alat analisis kode yang lebih berkembang di IDE, pemfaktoran ulang, kusen yang lebih sedikit menyinggung)
    Ketersediaan fungsi sebagai objek kelas satu. Konsep yang sedikit lebih rumit, namun jumlah kode boilerplate tipikal dapat dikurangi secara signifikan. Pemahaman siswa terhadap kode, IMHO, bahkan akan meningkat karena pengurangan volume
  • Literal koleksi universal, inisialisasi. Hal yang sama - mengurangi jumlah kode yang perlu ditulis dan/atau dilihat dengan mata Anda. Mengisi koleksi memakan lebih dari 9000% waktu pemrograman 1C. Menulis ini tanpa gula sintaksis itu panjang, mahal, dan rawan kesalahan. Secara umum, jumlah LOC dalam solusi 1C melebihi semua batas yang mungkin dibandingkan dengan kerangka kerja terbuka yang tersedia dan, secara umum, gabungan semua Java perusahaan Anda. Bahasanya bertele-tele, dan ini berubah menjadi jumlah data, memori, rem IDE, waktu, uang...
  • akhirnya konstruksi Saya memiliki hipotesis bahwa konstruksi ini hilang karena mereka tidak menemukan terjemahan yang berhasil ke dalam bahasa Rusia :)
  • Tipe datanya sendiri (tanpa OOP), analog dengan Tipe dari VB6. Ini akan memungkinkan Anda untuk tidak mengetik struktur menggunakan komentar di BSP dan metode ajaib yang membangun struktur ini. Kami mendapatkan: lebih sedikit kode, petunjuk melalui titik, solusi lebih cepat untuk masalah, lebih sedikit kesalahan karena kesalahan ketik dan properti struktur yang hilang. Sekarang pengetikan struktur pengguna sepenuhnya berada di tangan tim pengembangan Perpustakaan Subsistem Standar, yang, dengan hati-hati menulis komentar tentang properti yang diharapkan dari struktur parameter yang diteruskan.
  • Tidak ada gula saat bekerja dengan panggilan asinkron di klien web. callback-hell dalam bentuk ProcessingNotifications adalah penopang sementara yang disebabkan oleh perubahan mendadak pada API browser utama, tetapi Anda tidak bisa hidup seperti ini sepanjang waktu; keuntungan dari "pemahaman siswa" terhadap kode asinkron sedang hilang semakin. Tambahkan tidak ada dukungan untuk paradigma ini di IDE utama dan segalanya menjadi lebih buruk.

Ini adalah salah satu masalah yang mendesak, jelas daftarnya bisa jauh lebih besar, tapi kita tidak boleh lupa bahwa ini masih bukan bahasa tujuan umum, tidak memerlukan multithreading, fungsi lambda, akses ke GPU dan kecepatan. perhitungan titik mengambang. Ini adalah bahasa skrip logika bisnis.

Seorang programmer yang sudah banyak bekerja dengan bahasa ini, mempelajari js atau c#, menjadi bosan dalam kerangka bahasa ini. Itu adalah fakta. Dia membutuhkan pengembangan. Di sisi lain skala bagi vendor adalah biaya penerapan fitur-fitur tertentu versus peningkatan pendapatan setelah penerapannya. Di sini saya tidak memiliki informasi apa pun tentang apa yang saat ini lebih penting di mata perusahaan.

Lingkungan pengembangan

Segalanya juga tidak berjalan mulus di sini. Ada dua lingkungan pengembangan. Yang pertama adalah Configurator yang disertakan dalam pengiriman. Yang kedua adalah lingkungan Enterprise Development Tools, atau disingkat EDT, yang dikembangkan berdasarkan Eclipse.

Konfigurator menyediakan serangkaian tugas pengembangan, mendukung semua fitur dan merupakan lingkungan utama di pasar. Itu juga usang secara moral, tidak berkembang, menurut rumor - karena banyaknya hutang teknis di dalamnya. Situasi ini dapat diperbaiki dengan membuka API internal (dalam bentuk pertemanan dengan manusia salju A. Orefkova atau secara independen), tetapi tidak demikian. Praktek telah menunjukkan bahwa komunitas akan menulis fiturnya sendiri di IDE, selama vendor tidak ikut campur. Tapi kami memiliki apa yang kami miliki. Konfiguratornya sangat bagus pada tahun 2004-2005, sangat mengingatkan pada Visual Studio pada masa itu, di beberapa tempat bahkan lebih keren, tetapi pada saat itu macet.

Selain itu, volume solusi standar rata-rata telah meningkat beberapa kali lipat sejak saat itu, dan saat ini IDE tidak dapat mengatasi jumlah kode yang dimasukkan. Kegunaan dan kemampuan refactoring bahkan bukan nol, malah berada di zona merah. Semua ini tidak menambah antusiasme para pengembang dan mereka bermimpi untuk pindah ke ekosistem lain dan terus membuat kode sial di sana, tetapi dalam lingkungan yang menyenangkan yang tidak mengganggu Anda dengan perilakunya.

Sebagai alternatif, ditawarkan IDE yang ditulis dari awal, dibangun di atas Eclipse. Di sana, sumbernya, seperti di perangkat lunak lainnya, tinggal dalam bentuk file teks, disimpan di GIT, cabang permintaan tarik, semua ini. Sisi negatifnya, ia tidak meninggalkan status beta selama bertahun-tahun, meskipun semakin baik setiap rilisnya. Saya tidak akan menulis tentang kekurangan EDT, hari ini minus, besok fiturnya tetap. Relevansi uraian seperti itu akan cepat memudar. Saat ini dimungkinkan untuk mengembangkan dalam EDT, tetapi ini tidak biasa; Anda harus bersiap menghadapi sejumlah bug IDE.

Jika Anda melihat situasi melalui “prisma 1C” yang disebutkan di atas, Anda mendapatkan sesuatu seperti ini: peluncuran IDE baru tidak meningkatkan penjualan kotak, tetapi arus keluar DEVELOPERS mungkin berkurang. Sulit untuk mengatakan apa yang menanti ekosistem dalam hal kenyamanan pengembang, tetapi Microsoft telah mengacaukan pengembang seluler dengan terlambat menawarkan layanannya kepada mereka.

Manajemen pembangunan

Segala sesuatu di sini jauh lebih baik daripada menulis kode, terutama baru-baru ini, ketika upaya komunitas mengungkap masalah otomatisasi administrasi, meluncurkan prototipe yang menyerukan untuk membuang repositori 1C ke tumpukan sampah dan menggunakan git, menyalahkan cepat, meninjau kode , analisis statis, penerapan otomatis, dan lain-lain. Banyak fitur telah ditambahkan ke platform yang meningkatkan tingkat otomatisasi tugas pengembangan. Namun, semua fitur ini ditambahkan hanya dan secara eksklusif untuk pengembangan produk besar kami, ketika menjadi jelas bahwa kami tidak dapat melakukannya tanpa otomatisasi. Ada penggabungan otomatis, perbandingan tiga arah dengan KDiff dan sebagainya. Diluncurkan di Github gitconverter, yang, sejujurnya, secara ideologis terseret keluar dari proyek tersebut gitsync, tetapi dimodifikasi agar sesuai dengan proses perusahaan vendor. Berkat orang-orang keras kepala dari sumber terbuka, otomatisasi pengembangan di 1C mulai berjalan. API terbuka untuk konfigurator, IMHO, juga akan menggeser keterbelakangan moral dari IDE utama.

Saat ini, menyimpan sumber 1C di git dengan komitmen yang terkait dengan masalah di Jira, ulasan di Crucible, tombol tekan dari Jenkins dan laporan Allure tentang pengujian kode di 1C dan bahkan analisis statis di SonarQube - ini jauh dari berita, melainkan arus utama di perusahaan yang banyak mengembangkan 1C.

administrasi

Ada banyak hal yang ingin dikatakan di sini. Pertama, ini tentu saja adalah server (cluster server 1C). Suatu hal yang luar biasa, tetapi karena fakta bahwa ini adalah kotak yang benar-benar hitam, didokumentasikan dengan cukup detail, tetapi dengan cara yang spesifik - menguasai peluncuran operasi tanpa gangguan dalam mode beban tinggi di beberapa server adalah hal yang banyak dilakukan oleh segelintir orang terpilih yang memakai a medali dengan tulisan “Pakar Masalah Teknologi”. Perlu dicatat bahwa, pada prinsipnya, mengelola server 1C tidak berbeda dengan mengelola server lainnya. Ini adalah aplikasi multi-thread berbasis jaringan yang menghabiskan sumber daya memori, CPU, dan disk. Memberikan banyak peluang untuk pengumpulan telemetri dan diagnostik.

Masalahnya di sini adalah vendor tidak menawarkan sesuatu yang istimewa dalam hal solusi siap pakai untuk diagnostik ini. Ya, 1C: Instrumentation and Control Center ada, bahkan cukup bagus, tetapi harganya sangat mahal dan tidak semua orang memilikinya. Ada sejumlah perkembangan di komunitas untuk menghubungkan Grafana, Zabbix, ELK dan hal-hal lain dari set admin standar, namun tidak ada solusi tunggal yang cocok untuk mayoritas. Tugas menunggu pahlawannya. Dan jika Anda adalah bisnis yang berencana diluncurkan pada cluster 1C, Anda memerlukan seorang Pakar. Milik Anda sendiri di dalam atau dari luar, tetapi Anda membutuhkannya. Wajar jika ada peran tersendiri dengan kompetensi untuk pengoperasian server, tidak semua pengguna 1C mengetahui hal ini, Anda hanya perlu memahami bahwa peran tersebut diperlukan. Mari kita ambil SAP sebagai contoh. Di sana, programmer kemungkinan besar bahkan tidak akan bangun dari kursinya jika diminta untuk mengkonfigurasi sesuatu di server aplikasi. Dia mungkin bodoh dan tidak akan malu. Dalam metodologi SAP terdapat peran karyawan tersendiri untuk hal ini. Untuk beberapa alasan, dalam industri 1C diyakini bahwa hal ini harus digabungkan dalam satu karyawan dengan gaji yang sama. Ini adalah khayalan.

Kekurangan server 1C

Hanya ada satu kelemahan - keandalan. Atau, jika Anda mau, ketidakpastian. Perilaku aneh yang tiba-tiba dari server telah menjadi perbincangan di kota ini. Obat universal - menghentikan server dan membersihkan semua cache - bahkan dijelaskan dalam buku pegangan ahli, dan bahkan buku batch direkomendasikan untuk melakukan hal ini. Jika sistem 1C Anda mulai melakukan sesuatu yang secara teoritis tidak seharusnya dilakukan, inilah saatnya untuk menghapus cache data sesi. Menurut perkiraan saya, hanya ada tiga orang di seluruh negeri yang mengetahui cara mengoperasikan server 1C tanpa prosedur ini dan mereka tidak berbagi rahasia, karena... mereka hidup dari ini. Mungkin rahasia mereka adalah mereka membersihkan data sesi, tapi mereka tidak memberi tahu siapa pun tentang hal itu, kawan.

Jika tidak, server 1C adalah aplikasi yang sama seperti aplikasi lainnya dan dikelola dengan cara yang hampir sama, dengan membaca dokumentasi dan mengetuk rebana.

Buruh pelabuhan

Kegunaan penggunaan server 1C dalam container dalam produksi belum terbukti. Server tidak dikelompokkan hanya dengan menambahkan node di belakang penyeimbang, yang mengurangi manfaat containerisasi produksi seminimal mungkin, dan praktik pengoperasian yang berhasil dalam container dalam mode beban tinggi belum dilakukan. Akibatnya, hanya pengembang yang menggunakan Docker+1C untuk menyiapkan lingkungan pengujian. Di sana sangat berguna, diterapkan, memungkinkan Anda bermain dengan teknologi modern dan beristirahat dari keputusasaan konfigurator.

Komponen komersial

Dari sudut pandang investasi, 1C memungkinkan Anda memecahkan masalah peluncuran ide bisnis dengan cepat karena kemampuan kelas aplikasi yang luas. 1C di luar kotak memberikan Pelaporan yang sangat baik, integrasi dengan apa pun, klien web, klien seluler, aplikasi seluler, dukungan untuk berbagai DBMS, termasuk. gratis, lintas platform baik server maupun bagian klien yang diinstal. Ya, UI aplikasi akan berwarna kuning, terkadang ini minus, tetapi tidak selalu.
Dengan memilih 1C, sebuah bisnis mendapatkan serangkaian solusi perangkat lunak yang memungkinkan mereka membangun berbagai macam aplikasi, serta banyak pengembang di pasar yang menginginkan lebih sedikit uang daripada Javaist dan pada saat yang sama memberikan hasil lebih cepat.

Misalnya, tugas mengirimkan faktur PDF ke klien dapat diselesaikan dalam satu jam kerja siswa. Masalah yang sama di .NET dapat diselesaikan dengan membeli perpustakaan berpemilik, atau pengkodean beberapa hari atau minggu oleh pengembang yang tegas dan berjanggut. Terkadang, keduanya sekaligus. Dan ya, saya hanya berbicara tentang pembuatan PDF. Kami belum mengatakan dari mana RUU ini akan berasal. Web frontender harus membuat form dimana operator akan memasukkan data, backender harus membuat model dto untuk mentransfer JSON, model untuk menyimpan dalam database, struktur database itu sendiri, migrasi ke dalamnya, pembentukan grafis tampilan akun ini, dan baru kemudian - PDF. Di 1C, seluruh tugas, dari awal, diselesaikan tepat dalam satu jam.

Sistem akuntansi lengkap untuk kios kecil dengan satu proses bisnis pembelian/penjualan dilakukan dalam 3 jam.Dengan pelaporan penjualan, akuntansi barang pada harga pembelian dan penjualan, dipecah berdasarkan gudang, kontrol hak akses, klien web dan aplikasi seluler . Oke, saya lupa aplikasinya, dengan aplikasinya bukan dalam 3 jam, dalam enam jam.

Berapa lama waktu yang dibutuhkan pengembang .NET untuk menginstal visual studio di komputer yang bersih hingga mendemonstrasikannya kepada pelanggan? Bagaimana dengan biaya pembangunannya? Hal yang sama.

Kekuatan 1C sebagai platform

1C kuat bukan karena ada sesuatu yang spesifik di dalamnya yang merupakan yang terbaik di dunia. Sebaliknya, di setiap subsistem Anda dapat menemukan analogi yang lebih menarik di dunia perangkat lunak. Namun, berdasarkan kombinasi beberapa faktor, saya tidak melihat platform yang mirip dengan 1C. Di sinilah letak kesuksesan komersial. Keunggulan platform ini tersebar di seluruh platform dan paling jelas terlihat ketika Anda melihat bagaimana hal ini dilakukan di platform lain. Pada dasarnya, ini BUKAN fitur, tetapi sebaliknya - penolakan fitur demi satu paradigma tertentu. Beberapa contoh:

  1. Unikode. Apa yang lebih sederhana? Tidak perlu menggunakan pengkodean ASCII byte tunggal pada tahun 2019 (kecuali untuk integrasi dengan pengkodean lama). Tidak pernah. Tapi tidak. Bagaimanapun, seseorang di beberapa tabel menggunakan varchar byte tunggal dan aplikasi akan mengalami masalah dengan pengkodean. Pada tahun 2015, otorisasi LDAP gitlab gagal karena kesalahan pengkodean; JetBrains IDE masih tidak berfungsi dengan Cyrillic dalam nama file di mana pun. 1C menyediakan isolasi kode aplikasi berkualitas tinggi dari lapisan database. Di sana tidak mungkin mengetik tabel pada tingkat rendah dan kusen junior yang tidak kompeten di tingkat database tidak mungkin dilakukan di sana. Ya, mungkin ada masalah lain dengan junior yang tidak kompeten, tapi variasi masalahnya jauh lebih kecil. Sekarang Anda akan memberi tahu saya bahwa aplikasi Anda dirancang dengan benar dan lapisan akses database diisolasi sebagaimana mestinya. Lihat lagi aplikasi Java kustom perusahaan Anda. Secara dekat dan jujur. Apakah hati nurani Anda mengganggu Anda? Kalau begitu aku turut berbahagia untukmu.
  2. Penomoran dokumen/buku referensi. Dalam 1C, ini jelas bukan yang paling fleksibel dan bukan yang terbaik. Tapi apa yang mereka lakukan dalam perangkat lunak perbankan dan sistem akuntansi yang ditulis sendiri - itu hanyalah kegelapan. Entah identitas akan tersangkut (dan kemudian “oh, kenapa kita punya lubang”), atau sebaliknya, mereka akan membuat generator yang bekerja dengan penguncian di tingkat DBMS (dan akan menjadi hambatan). Faktanya, cukup sulit untuk melakukan tugas yang tampaknya sederhana ini - enumerator entitas ujung ke ujung, dengan bagian keunikan berdasarkan sekumpulan kunci tertentu, awalan, sehingga tidak memblokir database selama entri data paralel. .
  3. Pengidentifikasi catatan dalam database. 1C membuat keputusan berkemauan keras - semua pengidentifikasi tautan benar-benar sintetis dan hanya itu. Dan tidak ada masalah dengan database dan pertukaran terdistribusi. Pengembang sistem lain dengan keras kepala membuat sesuatu seperti identitas (lebih pendek!), menyeretnya ke GUI hingga tiba waktunya untuk membuat beberapa instance terkait (dan kemudian akan ditemukan). Apakah kamu tidak punya ini? Sejujurnya?
  4. Daftar. 1C memiliki mekanisme yang cukup berhasil untuk menelusuri daftar (besar) dan menavigasinya. Izinkan saya melakukan reservasi segera - dengan penggunaan mekanisme yang benar! Secara umum, topiknya cukup tidak menyenangkan, tidak dapat diselesaikan secara ideal: topiknya intuitif dan sederhana (tetapi risiko kumpulan data besar pada klien), atau pagingnya memiliki satu atau beberapa kesalahan. Mereka yang melakukan paging seringkali melakukannya secara tidak benar. Mereka yang membuat scrollbar yang jujur ​​​​menambahkan database, saluran, dan klien.
  5. Formulir yang dikelola. Tidak diragukan lagi, di klien web, antarmukanya tidak berfungsi dengan sempurna. Tapi itu berhasil. Namun bagi banyak sistem akuntansi dan perbankan lainnya, menciptakan tempat kerja jarak jauh adalah proyek tingkat perusahaan. Disclaimer: untung bagi yang awalnya membuatnya di web, hal ini tidak akan berpengaruh.
  6. Aplikasi seluler. Baru-baru ini, Anda juga dapat menulis aplikasi seluler dalam ekosistem yang sama. Ini sedikit lebih rumit di sini dibandingkan dengan klien web; spesifikasi perangkat memaksa Anda untuk menulis khusus untuk perangkat tersebut, namun, bagaimanapun, Anda tidak menyewa tim pengembang seluler yang terpisah. Jika Anda memerlukan aplikasi untuk kebutuhan internal perusahaan (ketika solusi seluler untuk masalah perusahaan lebih penting daripada desain UI berwarna kuning), Anda cukup menggunakan platform yang sama.
  7. Pelaporan. Yang saya maksud dengan kata ini bukanlah sistem BI dengan data besar dan proses ETL yang lambat. Ini mengacu pada laporan staf operasional yang memungkinkan Anda menilai keadaan akuntansi di sini dan saat ini. Saldo, penyelesaian bersama, penilaian ulang, dll. 1C hadir dengan sistem pelaporan dengan pengaturan fleksibel untuk pengelompokan, filter, dan visualisasi di sisi pengguna. Ya, ada analog yang lebih keren di pasaran. Namun tidak dalam kerangka solusi lengkap dan dengan harga yang terkadang lebih tinggi daripada solusi lengkap. Dan lebih sering terjadi sebaliknya: hanya pelaporan, tetapi lebih mahal daripada keseluruhan platform, dan kualitasnya lebih buruk.
  8. Formulir yang dapat dicetak. Nah, gunakan .NET untuk mengatasi masalah pengiriman slip gaji dalam bentuk PDF ke karyawan melalui email. Dan sekarang tugas mencetak invoice. Bagaimana dengan menyimpan salinannya ke PDF yang sama? Untuk nama panggilan 1C, mengeluarkan tata letak apa pun ke PDF adalah +1 baris kode. Ini berarti waktu kerja + 40 detik, bukan berhari-hari atau berminggu-minggu dalam bahasa lain. Tata letak formulir tercetak di 1C sangat mudah dikembangkan dan cukup kuat untuk bersaing dengan rekanan berbayar. Ya, mungkin, tidak banyak peluang interaktif dalam dokumen spreadsheet 1C, Anda tidak bisa dengan cepat mendapatkan diagram 3D dengan penskalaan menggunakan OpenGL. Tapi apakah itu benar-benar diperlukan?

Ini hanyalah beberapa contoh di mana membatasi fungsionalitas atau menerapkan kompromi ternyata menjadi manfaat arsitektur yang penting di masa depan. Bahkan kompromi atau bukan pilihan yang paling efektif sudah ada di dalam kotak dan dianggap remeh. Implementasi independennya tidak mungkin dilakukan (karena keputusan seperti itu harus dibuat pada awal proyek, dan tidak ada waktu untuk itu, dan tidak ada arsitek sama sekali), atau beberapa iterasi yang mahal. Di setiap poin yang tercantum (dan ini bukan daftar lengkap solusi arsitektur), Anda dapat mengacaukan dan memperkenalkan batasan yang menghalangi penskalaan. Bagaimanapun, Anda, sebagai seorang pebisnis, perlu memastikan bahwa pemrogram Anda, ketika membuat “sistem dari awal”, memiliki tangan yang lurus dan akan segera menangani masalah sistem yang halus dengan baik.

Ya, seperti sistem kompleks lainnya, 1C sendiri juga memiliki solusi yang memblokir penskalaan dalam aspek tertentu. Namun, saya ulangi, berdasarkan kombinasi berbagai faktor, biaya kepemilikan, dan jumlah masalah yang telah diselesaikan sebelumnya, saya tidak melihat pesaing yang layak di pasar. Dengan harga yang sama, Anda mendapatkan kerangka aplikasi keuangan, server seimbang yang berkerumun, dengan antarmuka pengguna dan web, dengan aplikasi seluler, dengan pelaporan, integrasi, dan banyak hal lainnya. Di dunia Java, Anda menyewa tim front-end dan back-end, men-debug kumpulan kode server rumahan tingkat rendah dan membayar secara terpisah untuk 2 aplikasi seluler untuk 2 OS seluler.

Saya tidak mengatakan bahwa 1C akan menyelesaikan semua kasus, tetapi untuk aplikasi internal perusahaan, ketika tidak perlu memberi merek pada UI - apa lagi yang diperlukan?

Terbang di Salep ini

Anda mungkin mendapat kesan bahwa 1C akan menyelamatkan dunia dan semua cara lain dalam menulis sistem perusahaan adalah salah. Sama sekali tidak seperti itu. Dari sudut pandang pebisnis, jika memilih 1C, selain time-to-market yang cepat, Anda juga harus memperhatikan kelemahan-kelemahan berikut:

  • Keandalan server. Dibutuhkan spesialis yang benar-benar berkualitas tinggi yang dapat memastikan pengoperasiannya tidak terganggu. Saya tidak mengetahui adanya program pelatihan siap pakai untuk spesialis seperti itu dari vendor. Ada kursus untuk mempersiapkan ujian Pakar, tapi menurut saya itu belum cukup.
  • Mendukung. Lihat poin sebelumnya. Untuk mendapatkan dukungan dari vendor, Anda perlu membelinya. Untuk beberapa alasan hal ini tidak diterima di industri 1C. Dan dengan SAP, hal ini hampir menjadi keharusan untuk dibeli dan tidak mengganggu siapa pun. Tanpa dukungan perusahaan dan tanpa staf ahli, Anda akan dibiarkan sendiri dengan gangguan 1C.
  • Namun, Anda tidak dapat melakukan semuanya dengan 1C. Ini adalah alat dan seperti alat lainnya, alat ini memiliki batas penerapannya. Dalam lanskap 1C, sangat diinginkan untuk memiliki arsitek sistem “non-1C”.
  • Nama panggilan 1C yang bagus tidak lebih murah daripada programmer yang bagus dalam bahasa lain. Meskipun demikian, programmer yang buruk membutuhkan biaya yang mahal untuk disewa, apapun bahasa yang mereka gunakan.

Mari kita tandai titik-titiknya

  • 1C adalah kerangka pengembangan aplikasi cepat (RAD) untuk bisnis dan dirancang untuk ini.
  • Tautan tiga tingkat dengan dukungan untuk DBMS utama, UI klien, ORM dan pelaporan yang sangat baik
  • Peluang luas untuk integrasi dengan sistem yang dapat melakukan apa yang tidak bisa dilakukan 1C. Jika Anda ingin pembelajaran mesin, gunakan Python dan kirimkan hasilnya ke 1C melalui http atau RabbitMQ
  • Tidak perlu berusaha keras untuk melakukan semuanya menggunakan 1C, Anda perlu memahami kelebihannya dan menggunakannya untuk tujuan Anda sendiri
  • Pengembang yang tertarik untuk menggali kerangka teknologi gadget dan mendesain ulang setiap N tahun ke mesin baru bosan dengan 1C. Semuanya sangat konservatif di sana.
  • Pengembang juga bosan karena sangat sedikit perhatian dari produsen. Bahasa membosankan, IDE lemah. Mereka memerlukan modernisasi.
  • Di sisi lain, pengembang yang tidak dapat menemukan kesenangan dalam menggunakan dan mempelajari teknologi lain yang mereka sukai adalah pengembang yang buruk. Mereka akan merengek dan berpindah ke ekosistem lain.
  • Pengusaha yang tidak mengizinkan nama panggilan 1C mereka menulis sesuatu dengan Python adalah pemberi kerja yang buruk. Mereka akan kehilangan karyawan dengan pikiran ingin tahu, dan sebagai gantinya akan datang pembuat kode monyet yang, meskipun menyetujui segalanya, akan menyeret perangkat lunak perusahaan ke dalam rawa. Itu masih harus ditulis ulang, jadi mungkin lebih baik berinvestasi sedikit di Python lebih awal?
  • 1C adalah perusahaan komersial dan mengimplementasikan fitur-fiturnya semata-mata berdasarkan kepentingan dan kemanfaatannya sendiri. Anda tidak bisa menyalahkannya untuk ini, bisnis harus memikirkan keuntungan, itulah hidup
  • 1C menghasilkan uang dengan menjual solusi untuk masalah bisnis, bukan masalah pengembang Vasya. Kedua konsep ini berkorelasi, tetapi prioritasnya persis seperti yang saya katakan. Ketika pengembang Vasya siap membayar lisensi pribadi untuk 1C: Resharper, itu akan muncul cukup cepat, “Resharper” oleh A. Orefkova adalah buktinya. Jika vendor mendukungnya, dan tidak menentangnya, pasar perangkat lunak untuk pengembang akan muncul. Sekarang ada satu setengah pemain di pasar ini dengan hasil yang meragukan, dan semua itu karena integrasi dengan IDE negatif dan semuanya dilakukan dengan kruk.
  • Praktik operator multi-mesin akan terlupakan. Aplikasi modern terlalu besar untuk diingat baik dari sisi kode maupun dari sisi penggunaan bisnis. Server 1C juga menjadi lebih kompleks, tidak mungkin menampung semua jenis keahlian dalam satu karyawan. Hal ini memerlukan permintaan akan spesialis, yang berarti daya tarik profesi 1C dan kenaikan gaji. Jika sebelumnya Vasya bekerja tiga-dalam-satu untuk satu gaji, sekarang Anda perlu mempekerjakan dua Vasya dan persaingan di antara Vasya dapat memacu pertumbuhan level mereka secara keseluruhan.

Kesimpulan

1C adalah produk yang sangat berharga. Di kisaran harga saya, saya tidak tahu analognya sama sekali, tulis di komentar jika ada. Namun, arus keluar pengembang dari ekosistem menjadi semakin nyata, dan ini adalah “brain drain”, tidak peduli bagaimana Anda melihatnya. Industri ini haus akan modernisasi.
Jika Anda seorang pengembang, jangan terpaku pada 1C dan jangan berpikir bahwa segala sesuatunya ajaib dalam bahasa lain. Mungkin saat kamu masih junior. Ketika masalah yang lebih besar perlu diselesaikan, solusi yang sudah jadi harus dicari lebih lama dan diselesaikan dengan lebih intensif. Dalam hal kualitas “blok” yang dapat digunakan untuk membangun solusi, 1C sangat, sangat bagus.

Dan satu hal lagi - jika nama panggilan 1C datang untuk Anda pekerjakan, maka nama panggilan 1C dapat dengan aman ditunjuk ke posisi analis utama. Pemahaman mereka tentang tugas, bidang studi, dan keterampilan dekomposisi sangat baik. Saya yakin hal ini justru disebabkan oleh penggunaan DDD secara paksa dalam pengembangan 1C. Orang tersebut dilatih untuk pertama-tama memikirkan arti tugas, tentang hubungan antar objek dalam bidang studi, dan pada saat yang sama memiliki latar belakang teknis dalam teknologi integrasi dan format pertukaran data.

Sadarilah bahwa kerangka kerja yang ideal tidak ada dan jagalah diri Anda sendiri.
Baik untuk semua!

PS: terima kasih banyak khusus untuk bantuan dalam mempersiapkan artikel.

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Apakah Anda memiliki 1C di perusahaan Anda?

  • 13,3%Tidak sama sekali.71

  • 30,3%Ada, tapi hanya di departemen akuntansi di suatu tempat. Sistem inti pada platform lain162

  • 41,4%Ya, proses bisnis utama berjalan di dalamnya221

  • 15,0%1C harus mati, masa depan adalah milik %technology_name%80

534 pengguna memilih. 99 pengguna abstain.

Sumber: www.habr.com

Tambah komentar