1C - Dobro i zlo. Raspored tačaka u holivarima oko 1C

1C - Dobro i zlo. Raspored tačaka u holivarima oko 1C

Prijatelji i kolege, u posljednje vrijeme sve su češći članci na Habréu sa mržnjom prema 1C kao razvojnoj platformi i govori njegovih branitelja. Ovi članci identificirali su jedan ozbiljan problem: najčešće ga kritičari 1C kritiziraju s pozicije „ne savladavanja“, grde probleme koji se de facto lako rješavaju, i, naprotiv, ne dotiču se problema koji su zaista važni, vrijedni. raspravljaju i nisu riješeni od strane prodavca. Vjerujem da ima smisla provesti trezven i uravnotežen pregled 1C platforme. Šta može, šta ne može, šta treba da radi, ali ne radi, i za desert, šta radi sa praskom, a vaši programeri u %technology_name% će raditi stotinu godina, bacajući to više od jednog godišnjeg budžeta.

Kao rezultat toga, vi, kao menadžer ili arhitekta, moći ćete jasno razumjeti koji zadatak će vam biti od koristi koristiti 1C, a gdje ga treba spaliti vrućim gvožđem. Kao programer u „ne-1C“ svetu, moći ćete da vidite šta postoji u 1C što izaziva pometnju. I kao 1C programer, moći ćete da uporedite svoj sistem sa ekosistemima drugih jezika i razumete svoju lokaciju u koordinatnom sistemu razvoja softvera.

Ispod reza ima dosta debelih napada na 1C, na kritičare 1C, na Javu, .NET i uopšte... Navijač pun, dobrodošao!

O meni

Upoznat sam sa temom razgovora otprilike od 2004. godine. Programiranjem se bavim vjerovatno od svoje 6. godine, od trenutka kada sam dobio knjigu o profesoru Fortranu sa stripovima o mački, vrapcu i gusjenici. Analizirala sam programe koje je mačka napisala sa slika u knjizi i saznala šta su radili. I da, u to vrijeme nisam imao pravi kompjuter, ali na raširenoj knjizi je bio crtež i iskreno sam pritiskao papirnate dugmad, unoseći komande koje sam špijunirao na mačku X.

Onda je bio BK0011 i BASIC u školi, C++ i asembleri na fakultetu, pa 1C, pa još toliko stvari kojih sam lijen da se sjetim. Posljednjih 15 godina uglavnom sam bio uključen u 1C, ne samo u smislu kodiranja, već u 1C općenito. Ovdje postavljate zadatke, administraciju i devops. Posljednjih 5 godina bavim se društveno korisnim aktivnostima u smislu razvoja razvojnih i automatizacijskih alata za druge 1C korisnike, pisanjem članaka i knjiga.

Hajde da odlučimo o temi diskusije

Prvo, hajde da definišemo o čemu ćemo razgovarati, pošto slova „1C“ mogu značiti mnogo stvari. U ovom slučaju, pod slovima „1C“ podrazumevaćemo isključivo razvojni okvir „1C: Enterprise“ moderne, osme verzije. Nećemo puno pričati o proizvođaču i njegovim politikama (ali ćemo morati malo da uradimo) Nećemo raspravljati o konkretnim aplikacijama napisanim koristeći ovaj okvir. Tehnologija je odvojena, aplikacije ili konfiguracije su odvojene.

Arhitektura visokog nivoa 1C: Enterprise

Nije uzalud što spominjem riječ "okvir". Sa stanovišta programera, 1C platforma je upravo okvir. I morate ga tretirati tačno kao okvir. Zamislite to kao Spring ili ASP.NET, koje izvršava neko vrijeme izvršavanja (JVM ili CLR). Dešava se da je u svijetu konvencionalnog programiranja („ne 1C“) podjela na okvire, virtualne mašine i specifične aplikacije prirodna, zbog činjenice da ove komponente obično razvijaju različiti proizvođači. U svijetu 1C nije uobičajeno eksplicitno razlikovati razvojni okvir i vrijeme izvođenja; osim toga, specifične aplikacije napisane pomoću okvira također uglavnom razvija sam 1C. Kao rezultat toga, nastaje neka konfuzija. Stoga, u okviru članka, morat ćemo razmotriti 1C s nekoliko strana odjednom i klasificirati ga duž nekoliko koordinatnih osa. A u svaku koordinatnu osu stavit ćemo lopatu smeđe tvari i pogledati karakteristike, prednosti i nedostatke postojećeg rješenja.

Tačke gledišta na 1C

1C za kupca

Kupac kupuje sistem automatizacije kojim može brzo riješiti probleme automatizacije vlastitog poslovanja. Preduzeće može biti mala tezga ili velika holding kompanija. Jasno je da su potrebe ovih preduzeća različite, ali oba su podržana jedinstvenom platformom kodne baze.

Za kupca 1C ovo je brzo vrijeme za stavljanje na tržište. Brzo. Brže od Jave, C# ili JS. Prosjek. Oko bolnice. Jasno je da će web stranica sa vizit kartama koja koristi React ispasti bolja, ali pozadinski dio WMS sistema će se brže pokrenuti na 1C.

1C kao alat

Svako tehnološko rješenje ima granice primjenjivosti. 1C nije jezik opšte namene, on ne živi odvojeno od svog okvira. Preporučljivo je koristiti 1C kada vam je potrebno:

  • serverska aplikacija
  • aplikacija u kojoj se pojavljuju finansije
  • sa gotovim UI, ORM, Reporting, XML/JSON/COM/PDF/YourDataTransferingFormat
  • uz podršku za pozadinske procese i poslove
  • sa sigurnošću zasnovanom na ulogama
  • sa scriptable poslovnom logikom
  • sa mogućnošću brzog kreiranja prototipa i kratkim vremenom izlaska na tržište

Ne treba vam 1C ako želite:

  • mašinsko učenje
  • GPU proračuni
  • računarska grafika
  • matematičkih proračuna
  • CAD sistem
  • obrada signala (zvuk, video)
  • highload http poziva sa stotinama hiljada okretaja u sekundi

1C kao proizvodna kompanija

Vrijedi razumjeti šta je posao 1C kao proizvođača softvera. 1C kompanija prodaje rješenja za poslovne probleme putem automatizacije. Različiti poslovi, veliki ili mali, ali to je ono što ona prodaje. Sredstva za postizanje ovog cilja su poslovne aplikacije. Za računovodstvo, obračun plaća itd. Za pisanje ovih aplikacija kompanija koristi sopstvenu platformu za razvoj poslovnih aplikacija. Posebno prilagođen za uobičajene zadatke ovih istih poslovnih aplikacija:

  • finansijsko računovodstvo
  • lako prilagođavanje poslovne logike
  • široke mogućnosti integracije u heterogenim IT pejzažima

Kao proizvođač, 1C vjeruje da je to strategija koja vam omogućava da radite s partnerima i klijentima u win-win modu. S tim možete raspravljati, ali otprilike ovako se kompanija promovira: gotova rješenja za poslovne probleme koja partneri mogu brzo prilagoditi i integrirati u bilo koji IT krajolik.

Sve tvrdnje ili želje za 1C kao okvirom treba posmatrati isključivo kroz ovu prizmu. „Želimo OOP u 1C“, kažu programeri. “Koliko će nas koštati podrška OOP-a na platformi, hoće li nam to pomoći da povećamo prodaju kutija?” kaže 1C. Otvara svoju “prizmu” prodaje rješenja za poslovne probleme:

- Hej, posao, da li želiš OOP u svom 1C?
- Hoće li mi ovo pomoći da riješim svoje probleme?
- Ko zna...
- Onda nema potrebe

Ovaj pristup može biti dobar ili loš u zavisnosti od toga ko ga gleda, ali to je jednostavno tako. Govoreći o činjenici da u 1C nema funkcije X, morate shvatiti da ona nije tu s razlogom, već u kontekstu izbora „troškovi implementacije u odnosu na iznos profita“.

Tehnološka klasifikacija

„U stvari, Odinesniks daju sve od sebe da koriste najbolje obrasce, pažljivo odabrane od strane brižnih metodologa i programera 1C platforme.
Kada napišete svoj glupi kod za jednostavnu upravljanu formu, u stvarnosti to koristite model-view-controller с dvosmjerno uvezivanje podataka в troslojni motor aplikacija za podatke, sa ukusom mapiranje objekata visokog nivoa na bazi deklarativni opis metapodatakaimajući svoje platformski nezavisan jezik upitac deklarativno korisničko sučelje vođeno podacima, potpuna transparentna serijalizacija i domenski orijentirani programski jezik.

Ono u čemu se 1C programeri razlikuju od svojih zapadnih kolega je u PR-u. Oni vole da svakom sranju daju veliko ime i trče okolo s njim kao s prljavom vrećom.”
A. Orefkov

1C platforma ima klasičnu 3-slojnu arhitekturu, u čijem središtu je aplikacijski server (ili njegova emulacija za malo novca za male trgovce). Kao DBMS se koristi MS SQL ili Postgres. Postoji i podrška za Oracle i IBM DB2, ali to je prilično ezoterično; nitko ne zna što će se dogoditi ako implementirate 1C na ove baze podataka pod srednjim i visokim opterećenjem. Vjerujem da sam 1C to ne zna.

Klijentski dio je ili tanki klijent instaliran na korisnikovom stroju ili web klijent. Ključna karakteristika je da programeri ne pišu 2 različita koda, oni pišu jednu aplikaciju, na jednom jeziku, a možete je prikazati u pretraživaču ako postoji želja ili potreba. Ko je tamo želeo pravi puni stek i jedan jezik za prednji i pozadinski deo, node.js? Nikada nisu uspeli da urade potpuno istu stvar do kraja. Pravi puni stog postoji, ali ćete ga morati napisati u 1C. Ironija sudbine, takve stvari :)

Cloud SaaS rješenje 1C:Fresh također radi u modusu preglednika, u kojem ne možete kupiti 1C, već iznajmiti malu bazu podataka i tamo pratiti prodaju shawarma. Samo u pretraživaču, bez instaliranja ili konfigurisanja bilo čega.

Osim toga, postoji i naslijeđeni klijent, koji se u 1C naziva „redovna aplikacija“. Legacy je naslijeđe, dobrodošli u svijet aplikacija 2002. godine, ali još uvijek govorimo o trenutnom stanju ekosistema.

1C serverski dio podržava grupisanje i skaliranje dodavanjem novih strojeva u klaster. Ovdje je polomljeno dosta kopija i o tome će biti poseban odjeljak u članku. Ukratko, ovo nije sasvim isto kao dodavanje nekoliko potpuno istih instanci iza HAProxy.

Okvir za razvoj aplikacija koristi vlastiti programski jezik, koji otprilike liči na malo poboljšani VB6 preveden na ruski. Za ljude koji mrze sve rusko, koji ne vjeruju da je „ako“ prevedeno kao „ako“, nudi se druga opcija sintakse. One. Ako želite, možete ga napisati u 1C na takav način da se ne razlikuje od VB.

1C - Dobro i zlo. Raspored tačaka u holivarima oko 1C

Upravo ovaj programski jezik je glavni razlog mržnje 1C nadimaka prema njihovoj platformi. Suočimo se s tim, ne bez razloga. Jezik je zamišljen što jednostavniji, osmišljen da ispuni mantru „DEVELOPERI, DEVELOPERI“ barem u CIS-u. Komercijalna suština ovakvog rješenja, po mom mišljenju, jasno je vidljiva: više programera, veća pokrivenost tržišta. To se i obistinilo, prema različitim procjenama od 45% do 95%. Odmah ću reći da je pisanje na jeziku za koji mislite da je zaista lakše. I znam dosta programskih jezika.

Počnimo s jezikom.

1C programski jezik

Istovremeno, jaka i slaba tačka sistema. Omogućava lak unos i čitljivost. S druge strane, nije ažuriran od izdavanja verzije 8 2002. godine i moralno je zastario. Neko će reći “glavni nedostatak je to što nema OOP-a” i pogrešiće. Prvo, PLO ne voli ne samo Nuraljeva, već ni Torvaldsa. I drugo, OOP i dalje postoji.

Sa stanovišta programera, on ima na raspolaganju okvir sa osnovnim klasama prikazanim na DBMS-u. Programer može uzeti osnovnu klasu “Directory” i naslijediti direktorij “Clients” od nje. Može joj dodati nova polja klase, na primjer, INN i Address, a također, ako je potrebno, može nadjačati (preglasiti) metode osnovne klase, na primjer metodu OnWrite/AtRecord.

Okvir je dizajniran na takav način da je dublje nasljeđivanje rijetko potrebno, a ograničenje u OOP-u, po mom mišljenju, ima smisla. 1C se fokusira na razvoj vođen domenom i tjera vas da razmislite, prije svega, o predmetnoj oblasti rješenja koje se razvija, i to je dobro. Ne samo da nema iskušenja, nego ni potrebe za pisanjem 10 različitih DTO-ova i ViewModela samo da bi se negdje prikazali neki podaci iz domena. 1C programer uvijek radi s jednim entitetom, bez zatrpavanja konteksta percepcije sa desetak klasa sa sličnim imenima, koje predstavljaju isti entitet, ali s druge strane. Bilo koja .NET aplikacija, na primjer, će nužno sadržavati pet ili dva ViewModela i DTO-a za serijalizaciju u JSON i prijenos podataka sa klijenta na server. I otprilike 10-15% vašeg koda aplikacije će se potrošiti na prijenos podataka iz jednog razreda u drugi koristeći olovke ili štake kao što je AutoMapper. Ovaj kod mora biti napisan i programeri moraju biti plaćeni da ga kreiraju i održavaju.

Ispostavilo se da je 1C jezik teško razviti a da se ne zakomplikuje na nivo mainstream jezika, čime se gubi prednost jednostavnosti. Ono što je zadatak dobavljača u suštini se rješava: izdati standardno rješenje koje svaki učenik zatečen na ulici može prilagoditi s potrebnim nivoom kvaliteta (tj. završeno je pokrivanje kofera od tezge do velike fabrike). Ako ste tezga, uzmite studenta; ako ste fabrika, uzmite gurua od svog partnera za implementaciju. Činjenica da implementacijski partneri prodaju studente po cijeni gurua nije problem sa okvirom. Arhitektonski, okvir mora riješiti probleme i jednog i drugog, kod standardnih konfiguracija (koji smo prodali preduzećima uz obećanje prilagođavanja) bi trebao biti u stanju da razumije učenik, a guru bi trebao biti u stanju da razumije šta god želite.

Ono što, po mom mišljenju, zaista nedostaje jeziku, ono što vas tjera da pišete više nego što biste mogli, je ono što gubi vrijeme koje mušterija plaća.

  • Mogućnost kucanja na nivou, na primjer, TypeScript (kao rezultat, razvijeniji alati za analizu koda u IDE-u, refaktoriranje, manje uvredljivih zaglavljivanja)
    Dostupnost funkcija kao prvoklasnih objekata. Malo složeniji koncept, ali količina tipičnog šablonskog koda mogla bi se znatno smanjiti. Učenikovo razumijevanje koda, IMHO, bi se čak i povećalo zbog smanjenja volumena
  • Univerzalni literali kolekcije, inicijalizatori. Ista stvar - smanjenje količine koda koji treba napisati i/ili pogledati svojim očima. Punjenje kolekcija zauzima više od 9000% vremena programiranja 1C. Pisati ovo bez sintaktičkog šećera je dugo, skupo i podložno greškama. Općenito, količina LOC-a u 1C rješenjima premašuje sve zamislive granice u poređenju sa dostupnim otvorenim okvirima i, općenito, svim vašim poslovnim Java-ovima zajedno. Jezik je opsežan, a to se degeneriše u količinu podataka, memorije, IDE kočnica, vremena, novca...
  • konačno konstrukcije imam hipotezu da ova konstrukcija nedostaje zbog činjenice da nisu našli uspješan prevod na ruski :)
  • Vlastiti tipovi podataka (bez OOP), analozi tipa iz VB6. To će vam omogućiti da ne kucate strukture koristeći komentare u BSP-u i magične metode koje konstruišu ove strukture. Dobijamo: manje koda, nagoveštaj kroz tačku, brže rešenje problema, manje grešaka zbog grešaka u kucanju i nedostajućih svojstava struktura. Sada je kucanje korisničkih struktura u potpunosti na razvojnom timu biblioteke standardnih podsistema, koji, po svoj prilici, pažljivo piše komentare na očekivana svojstva proslijeđenih struktura parametara.
  • Bez šećera kada radite sa asinkronim pozivima na web klijentu. callback-hell u obliku ProcessingNotifications je privremena štaka uzrokovana iznenadnom promjenom API-ja glavnih pretraživača, ali ne možete živjeti ovako cijelo vrijeme; gubi se prednost „razumevanja studenta“ asinhronog koda više i više. Ne dodajte podršku za ovu paradigmu u glavnom IDE-u i stvari će postati još gore.

Ovo je jedan od gorućih problema, jasno je da bi lista mogla biti mnogo veća, ali ne smijemo zaboraviti da ovo još uvijek nije jezik opće namjene, ne zahtijeva multithreading, lambda funkcije, pristup GPU-u i brzu kalkulacije sa pomičnim zarezom. Ovo je skriptni jezik poslovne logike.

Programeru koji je već dosta radio sa ovim jezikom, zagledao se u js ili c#, postaje dosadno u okviru ovog jezika. To je činjenica. Potreban mu je razvoj. Na drugoj strani skale za dobavljača je trošak implementacije specificiranih karakteristika u odnosu na povećanje prihoda nakon njihove implementacije. Ovdje nemam nikakve informacije o tome šta je trenutno nadjačano u očima kompanije.

Razvojno okruženje

Ni ovdje stvari ne idu glatko. Postoje dva razvojna okruženja. Prvi je konfigurator uključen u isporuku. Drugi je okruženje Enterprise Development Tools, ili skraćeno EDT, razvijeno na bazi Eclipse-a.

Konfigurator pruža čitav niz razvojnih zadataka, podržava sve funkcije i predstavlja glavno okruženje na tržištu. Takođe je moralno zastario, ne razvija se, prema glasinama - zbog količine tehničkog duga u sebi. Situacija bi se mogla popraviti otvaranjem internog API-ja (u obliku prijateljstva sa Snjegović A. Orefkova ili na nezavisnoj osnovi), ali to nije slučaj. Praksa je pokazala da će zajednica pisati svoje karakteristike u IDE, sve dok se proizvođač ne miješa. Ali imamo ono što imamo. Konfigurator je bio odličan 2004-2005, vrlo je podsjećao na Visual Studio iz tog vremena, na nekim mjestima je bio i hladniji, ali je zaglavio u tim vremenima.

Osim toga, volumen prosječnog standardnog rješenja je od tada porastao nekoliko puta, a danas IDE jednostavno ne može da se nosi s količinom koda s kojim se hrani. Upotrebljivost i mogućnosti refaktoriranja nisu ni na nuli, one su u minusu. Sve to ne uliva entuzijazam programerima i oni sanjaju da se presele u druge ekosisteme i da tamo nastave da kodiraju sranja, ali u prijatnom okruženju koje vam svojim ponašanjem ne pljuje u lice.

Kao alternativa, nudi se IDE napisan od nule, izgrađen na Eclipse-u. Tamo izvori, kao iu svakom drugom softveru, žive u obliku tekstualnih datoteka, pohranjuju se u GIT, grane zahtjeva za povlačenjem, sve to. Loša strana je to što nije napustio beta status već dugi niz godina, iako je sa svakim izdanjem sve bolji. O nedostacima EDT-a neću pisati, danas je minus, sutra fiksna karakteristika. Relevantnost takvog opisa brzo će nestati. Danas je moguće razvijati u EDT-u, ali je to neobično; morate biti spremni na određeni broj IDE grešaka.

Ako pogledate situaciju kroz gore pomenutu „1C prizmu“, dobijate nešto ovako: izlazak novog IDE-a ne povećava prodaju kutija, ali se odliv DEVELOPERA može smanjiti. Teško je reći šta čeka ekosistem u smislu udobnosti za programere, ali Microsoft je već zeznuo programere mobilnih uređaja nudeći im svoje usluge prekasno.

Upravljanje razvojem

Ovdje je sve znatno bolje nego u pisanju koda, pogotovo nedavno, kada su napori zajednice iznijeli na vidjelo probleme automatizacije administracije, lansirali prototipove koji pozivaju na bacanje 1C repozitorija u smeće i korištenje git-a, brzog okrivljavanja, pregleda koda , statička analiza, auto-deploy itd. Platformi su dodane mnoge funkcije koje povećavaju nivo automatizacije razvojnih zadataka. Međutim, sve ove mogućnosti dodane su samo i isključivo za razvoj vlastitih velikih proizvoda, kada je postalo očito da ne možemo bez automatizacije. Bilo je automatskog spajanja, trosmjernog poređenja sa KDiff-om i svega toga. Pokrenuto na Github-u gitconverter, koji je, iskreno, ideološki odvučen iz projekta gitsync, ali modificiran kako bi odgovarao procesima kompanije dobavljača. Zahvaljujući tvrdoglavim momcima iz otvorenog koda, razvojna automatizacija u 1C je krenula. Otvoreni API za konfigurator, IMHO, takođe bi pomerio moralnu nazadnost glavnog IDE-a.

Danas, pohranjivanje 1C izvora u git-u sa urezivanja povezanim s problemima u Jira, recenzijama u Crucibleu, pritiskom na dugme Jenkinsa i Allure izvještajima o testiranju koda u 1C, pa čak i statička analiza u SonarQubeu - ovo je daleko od vijesti, već je to mainstream u kompanijama u kojima se mnogo razvija 1C.

Administracija

Ovdje ima puno toga za reći. Prvo, ovo je, naravno, server (klaster 1C servera). Divna stvar, ali zbog činjenice da se radi o potpuno crnoj kutiji, dokumentovanoj dovoljno detaljno, ali na specifičan način - savladavanje pokretanja neprekidnog rada u highload modu na nekoliko servera je sudbina nekolicine odabranih koji nose medalja sa natpisom „Stručnjak za tehnološka pitanja“. Vrijedi napomenuti da se, u principu, administriranje 1C servera ne razlikuje od administriranja bilo kojeg drugog servera. To je mrežna aplikacija s više niti koja troši memoriju, CPU i disk resurse. Pruža široke mogućnosti za prikupljanje telemetrije i dijagnostiku.

Problem je što proizvođač ne nudi ništa posebno u smislu gotovih rješenja baš za ovu dijagnostiku. Da, postoji 1C: Instrumentation and Control Center, čak su i prilično dobri, ali su vrlo skupi i nemaju ih svi. Postoji niz razvoja u zajednici za povezivanje Grafane, Zabbixa, ELK-a i drugih stvari iz standardnog admin seta, ali ne postoji jedinstveno rješenje koje bi odgovaralo većini. Zadatak čeka svog heroja. A ako ste preduzeće koje planira da se pokrene na 1C klasteru, potreban vam je stručnjak. Svoj iznutra ili izvana, ali vam treba. Normalno je da postoji posebna uloga sa kompetencijama za rad servera, ne bi to trebao znati svaki korisnik 1C, samo treba shvatiti da je takva uloga potrebna. Uzmimo za primjer SAP. Tamo programer, najvjerovatnije, neće ni ustati sa stolice ako se od njega zatraži da nešto konfiguriše na serveru aplikacija. Možda je samo glup i neće se stideti. U SAP metodologiji za to postoji posebna uloga zaposlenika. Iz nekog razloga, u 1C industriji se vjeruje da bi to trebalo kombinirati u jednom zaposleniku za istu platu. To je zabluda.

Nedostaci 1C servera

Postoji tačno jedan minus - pouzdanost. Ili, ako želite, nepredvidljivost. Iznenadno čudno ponašanje servera već je postalo priča u gradu. Univerzalni lijek - zaustavljanje servera i brisanje svih kešova - čak je opisan u priručniku stručnjaka, a preporučuje se čak i batch book koji to radi. Ako vaš 1C sistem počne raditi nešto što ne bi trebao ni teoretski, vrijeme je da obrišete keš podataka sesije. Prema mojoj procjeni, u cijeloj zemlji postoje samo tri osobe koje znaju da rade sa 1C serverom bez ove procedure i ne dijele tajne, jer... oni žive od ovoga. Možda je njihova tajna u tome što čiste podatke o sesiji, ali nikome o tome ne govore, stari.

Inače, 1C server je ista aplikacija kao i svaka druga i administrira se na skoro isti način, čitanjem dokumentacije i kucanjem na tamburu.

doker

Korisnost upotrebe kontejnerskog 1C servera u proizvodnji još nije dokazana. Server se ne grupiše jednostavnim dodavanjem čvorova iza balansera, što svodi prednosti proizvodne kontejnerizacije na minimum, a nije uspostavljena ni praksa uspješnog rada u kontejnerima u highload modu. Kao rezultat toga, samo programeri koriste Docker+1C za postavljanje testnih okruženja. Tamo je vrlo koristan, koristi se, omogućava vam da se igrate modernim tehnologijama i odmorite od malodušnosti konfiguratora.

Komercijalna komponenta

Sa stanovišta ulaganja, 1C vam omogućava da riješite problem brzog pokretanja poslovnih ideja zbog širokih mogućnosti klasa aplikacija. 1C iz kutije daje vrlo pristojno izvješćivanje, integraciju sa bilo čim, web klijent, mobilni klijent, mobilnu aplikaciju, podršku za razne DBMS, uklj. besplatni, cross-platformski i serverski i instalirani klijentski dijelovi. Da, korisnički interfejs aplikacija će biti žut, ponekad je to minus, ali ne uvek.
Odabirom 1C, preduzeće dobija set softverskih rješenja koja im omogućavaju izradu vrlo širokog spektra aplikacija, kao i puno programera na tržištu koji žele manje novca od Javaista, a pritom brže proizvode rezultate.

Na primjer, zadatak slanja PDF računa klijentu može se riješiti za sat vremena studentskog rada. Isti problem u .NET-u može se riješiti kupovinom vlasničke biblioteke, ili nekoliko dana ili sedmica kodiranja od strane strogog, bradatog programera. Ponekad, oboje odjednom. I da, govorio sam samo o generiranju PDF-a. Nismo rekli odakle će uopšte doći ovaj račun. Web frontender mora kreirati formu u koju će operater unositi podatke, backender će morati kreirati dto modele za prijenos JSON-a, modele za pohranjivanje u bazu podataka, strukturu same baze podataka, migraciju na nju, formiranje grafičkog prikaz upravo ovog naloga, a tek onda - PDF. Na 1C, cijeli zadatak, od nule, je završen za tačno sat vremena.

Punopravan računovodstveni sistem za malu tezgu sa jednim poslovnim procesom kupljeno/prodato se radi za 3 sata.Sa izvještavanjem o prodaji, knjigovodstvom robe po nabavnim i prodajnim cijenama po skladištu, kontrolom prava pristupa, web klijentom i mobilnom aplikacijom . Dobro, zaboravio sam na aplikaciju, sa aplikacijom ne za 3 sata, za šest.

Koliko će ovaj zadatak trajati .NET programeru od instaliranja vizualnog studija na čist računar do demonstracije kupcu? Šta je sa troškovima razvoja? Ista stvar.

Prednosti 1C kao platforme

1C je jak ne zato što u njemu postoji nešto specifično što je najbolje na svijetu. Naprotiv, u svakom pojedinačnom podsistemu možete pronaći zanimljiviji analog u svjetskom softveru. Međutim, na osnovu kombinacije faktora, ne vidim platformu sličnu 1C. Tu leži komercijalni uspjeh. Prednosti platforme su razbacane po njoj i najjasnije su vidljive kada vidite kako se to radi na drugim platformama. U osnovi, to čak NISU karakteristike, već naprotiv – odbacivanje karakteristika u korist jedne specifične paradigme. nekoliko primjera:

  1. Unicode. Šta bi dovraga moglo biti jednostavnije? Nema potrebe za korištenjem jednobajtnih ASCII kodiranja u 2019. (osim integracije sa starim naslijeđenim). Nikad. Ali ne. U svakom slučaju, neko u nekoj tabeli koristi varchar od jednog bajta i aplikacija će imati problema sa kodiranjem. 2015. gitlab-ova LDAP autorizacija nije uspjela zbog nepravilnog rada sa kodiranjem; JetBrains IDE još uvijek ne radi s ćirilicom u nazivima datoteka svuda. 1C pruža visokokvalitetnu izolaciju koda aplikacije od sloja baze podataka. Tamo je nemoguće kucati tabele na niskom nivou i tu su nemogući zaglavci nekompetentnih juniora na nivou baze podataka. Da, možda ima i drugih problema sa nesposobnim juniorima, ali je raznolikost problema mnogo manja. Sada ćete mi reći da je vaša aplikacija ispravno dizajnirana i da je sloj pristupa bazi podataka izoliran kako bi trebao biti. Pogledajte još jednom svoju korporativnu prilagođenu Java aplikaciju. Blisko i iskreno. Muči li vas savjest? Onda mi je drago zbog tebe.
  2. Numeracija dokumenata/priručnika. U 1C definitivno nije najfleksibilniji i nije najbolji. Ali ono što rade u bankarskom softveru i u samopisnim računovodstvenim sistemima - pa, to je samo mrak. Ili će se zaglaviti identitet (i onda "ja, zašto imamo rupe"), ili će naprotiv napraviti generator koji radi sa zaključavanjem na nivou DBMS (i postaće usko grlo). Zapravo, prilično je teško obaviti ovaj naizgled jednostavan zadatak - end-to-end popisivač entiteta, sa sekcijom jedinstvenosti zasnovanom na određenom skupu ključeva, prefiksom, tako da ne blokira bazu podataka prilikom paralelnog unosa podataka .
  3. Identifikatori zapisa u bazi podataka. 1C je donio odluku snažne volje - svi identifikatori veza su apsolutno sintetički i to je to. I nema problema sa distribuiranim bazama podataka i razmjenama. Programeri drugih sistema tvrdoglavo kreiraju nešto poput identiteta (kraće je!), povlače ih u GUI dok ne dođe vrijeme za kreiranje nekoliko povezanih instanci (i tada će biti otkrivene). Zar nemaš ovo? Iskreno?
  4. Liste. 1C ima prilično uspješne mehanizme za listanje (velikih) lista i navigaciju kroz njih. Odmah da rezervišem - uz pravilnu upotrebu mehanizma! Općenito, tema je prilično neugodna, ne može se riješiti idealno: ili je intuitivna i jednostavna (ali postoji rizik od ogromnih zapisa na klijentu), ili je pejdžing ove ili one krive. Oni koji pejdžiraju često to rade naopako. Oni koji naprave poštenu traku za pomicanje dodaju bazu podataka, kanal i klijenta.
  5. Upravljani obrasci. Bez sumnje, u web klijentu interfejs ne radi savršeno. Ali radi. Ali za mnoge druge računovodstvene i bankarske sisteme, kreiranje udaljenog radnog mesta predstavlja projekat na nivou preduzeća. Odricanje od odgovornosti: na sreću za one koji su to prvobitno napravili na webu, to neće utjecati.
  6. Mobilna aplikacija. Odnedavno možete pisati i mobilne aplikacije dok ste u istom ekosistemu. Ovdje je malo složenije nego s web klijentom; specifičnosti uređaja tjeraju vas da pišete posebno za njih, ali, ipak, ne unajmljujete poseban tim mobilnih programera. Ako vam je potrebna aplikacija za interne potrebe kompanije (kada je mobilno rješenje za korporativni problem važnije od žutog UI dizajna), jednostavno koristite istu platformu iz kutije.
  7. Izvještavanje. Pod ovom riječju ne mislim na BI sistem sa velikim podacima i kašnjenjem u ETL procesu. Ovo se odnosi na izvještaje operativnog osoblja koji vam omogućavaju da ocijenite stanje računovodstva ovdje i sada. Bilansi, međusobna poravnanja, prevrednovanje itd. 1C izlazi iz kutije sa sistemom izvještavanja sa fleksibilnim postavkama za grupisanje, filtere i vizualizaciju na strani korisnika. Da, na tržištu postoje hladniji analogi. Ali ne u okviru rješenja sve-u-jednom i po cijeni ponekad većoj od rješenja sve-u-jednom. A češće je čak i obrnuto: samo izvještavanje, ali skuplje od cijele platforme i lošijeg kvaliteta.
  8. Obrasci za štampanje. Pa, koristite .NET da riješite problem slanja platnih listića u PDF-u zaposlenima putem e-pošte. A sada zadatak štampanja faktura. Šta je sa spremanjem njihovih kopija u isti PDF? Za 1C nadimak, izlaz bilo kojeg izgleda u PDF je +1 red koda. To znači + 40 sekundi radnog vremena, umjesto dana ili sedmica na drugom jeziku. Izgledi štampanih obrazaca u 1C su neverovatno laki za razvoj i dovoljno moćni da se takmiče sa plaćenim kolegama. Da, vjerovatno, nema mnogo interaktivnih mogućnosti u 1C proračunskim dokumentima; ne možete brzo dobiti 3D dijagram sa skaliranjem pomoću OpenGL-a. Ali da li je to zaista neophodno?

Ovo je samo nekoliko primjera u kojima se ograničavanje funkcionalnosti ili implementacija kompromisa pokaže kao važna arhitektonska korist u budućnosti. Čak i kompromis ili ne najefikasnija opcija - već je u kutiji i uzima se zdravo za gotovo. Njegova samostalna implementacija će biti ili nemoguća (jer se takve odluke moraju donijeti na početku projekta, a za to nema vremena, a arhitekta uopće nema), ili nekoliko skupih iteracija. U svakoj od navedenih tačaka (a ovo nije potpuna lista arhitektonskih rješenja) možete zeznuti i uvesti ograničenja koja blokiraju skaliranje. U svakom slučaju, vi, kao biznismen, morate da budete sigurni da vaši programeri, kada prave „sistem od nule“, imaju ravne ruke i da će odmah dobro odraditi suptilne sistemske probleme.

Da, kao iu svakom drugom složenom sistemu, i sam 1C također ima rješenja koja blokiraju skaliranje u određenim aspektima. Međutim, ponavljam, na osnovu kombinacije faktora, cijene vlasništva i broja unaprijed riješenih problema, ne vidim dostojnog konkurenta na tržištu. Za istu cijenu dobijate finansijski okvir aplikacije, klasterski balansirani server, sa korisničkim interfejsom i web interfejsom, sa mobilnom aplikacijom, sa izveštavanjem, integracijom i gomilom drugih stvari. U svijetu Java-e, angažujete front-end i back-end tim, otklanjate greške na niskom nivou koda koda servera pisanog kod kuće i posebno plaćate 2 mobilne aplikacije za 2 mobilna OS.

Ne kažem da će 1C riješiti sve slučajeve, ali za internu korporativnu aplikaciju, kada nema potrebe za brendiranjem korisničkog sučelja - šta je još potrebno?

Leteti u masti

Vjerovatno ste stekli utisak da će 1C spasiti svijet i da su svi drugi načini pisanja korporativnih sistema pogrešni. To uopšte nije tako. Sa stanovišta poslovnog čovjeka, ako odaberete 1C, tada pored brzog vremena za stavljanje na tržište, morate uzeti u obzir i sljedeće nedostatke:

  • Pouzdanost servera. Potrebni su zaista kvalitetni stručnjaci koji mogu osigurati njegov nesmetan rad. Ne znam za gotov program obuke za takve stručnjake od dobavljača. Postoje kursevi za pripremu za stručni ispit, ali to, po mom mišljenju, nije dovoljno.
  • Podrška. Vidi prethodnu tačku. Da biste imali podršku od prodavca, morate ga kupiti. Iz nekog razloga to nije prihvaćeno u 1C industriji. A sa SAP-om, to je gotovo obavezna kupovina i nikome ne smeta. Bez korporativne podrške i bez stručnog osoblja, možete ostati sami sa 1C greškama.
  • Ipak, sa 1C ne možete učiniti apsolutno sve. Ovo je alat i kao i svaki alat ima ograničenja u primjeni. U 1C pejzažu, veoma je poželjno imati arhitektu sistema koji nije 1C.
  • Dobri 1C nadimci nisu jeftiniji od dobrih programera na drugim jezicima. Iako su loši programeri skupi za zapošljavanje, bez obzira na jeziku na kojem pišu.

Hajde da stavimo tačke

  • 1C je okvir za brzi razvoj aplikacija (RAD) za poslovanje i prilagođen je za to.
  • Troslojna veza sa podrškom za glavne DBMS-ove, korisničko sučelje klijenta, vrlo dobar ORM i izvještavanje
  • Široke mogućnosti integracije sa sistemima koji mogu ono što 1C ne može. Ako želite strojno učenje, uzmite Python i pošaljite rezultat u 1C putem http ili RabbitMQ
  • Nema potrebe da se trudite da radite sve koristeći 1C, morate razumjeti njegove prednosti i koristiti ih za svoje potrebe
  • Programerima koji gravitiraju ka kopanju po gadgetima tehnološkog okvira i redizajniranju svakih N godina na novi motor dosadio je 1C. Tamo je sve vrlo konzervativno.
  • Programerima je također dosadno jer je proizvođač vrlo malo zabrinut za njih. Dosadan jezik, slab IDE. Potrebna im je modernizacija.
  • S druge strane, programeri koji ne mogu pronaći zabavu koristeći i učeći drugu tehnologiju u kojoj uživaju su loši programeri. Oni će kukati i preseliti se u drugi ekosistem.
  • Poslodavci koji ne dozvoljavaju svojim 1C nadimcima da napišu nešto na Pythonu su loši poslodavci. Izgubit će zaposlenike radoznalog uma, a na njihovo mjesto doći će majmuni koderi koji će, dok se slažu sa svime, odvući korporativni softver u močvaru. I dalje će morati da se prepiše, pa bi možda bilo bolje da malo ranije uložimo u Python?
  • 1C je komercijalna kompanija i implementira funkcije isključivo na osnovu vlastitih interesa i svrsishodnosti. Ne možete je kriviti za ovo, biznis mora misliti na profit, to je život
  • 1C zarađuje prodajom rješenja za poslovne probleme, a ne za Vasyine probleme programera. Ova dva koncepta su u korelaciji, ali prioritet je upravo ono što sam rekao. Kada programer Vasya bude spreman da plati ličnu licencu za 1C: Resharper, pojavit će se prilično brzo, “Resharper” A. Orefkove je dokaz za to. Ako bi ga dobavljač podržavao, a ne bi se borio protiv toga, pojavilo bi se tržište softvera za programere. Sada na ovom tržištu ima jedan i po igrača sa upitnim rezultatima, a sve zato što je integracija sa IDE-om negativna i sve se radi na štakama.
  • Praksa rukovaoca sa više mašina će nestati u zaboravu. Moderne aplikacije su prevelike da bi se zapamtile i sa strane koda i sa strane poslovne upotrebe. 1C server također postaje sve složeniji, bit će nemoguće držati sve vrste stručnosti u jednom zaposleniku. To bi trebalo podrazumijevati potražnju za stručnjacima, što znači privlačnost 1C profesije i povećanje plaća. Ako je prije Vasya radio tri u jednom za jednu platu, sada morate zaposliti dva Vasya, a konkurencija među Vasyama može potaknuti ukupni rast njihovog nivoa.

zaključak

1C je veoma vredan proizvod. U svom cjenovnom rangu ne poznajem uopće nijedan analog, napišite u komentarima ako ih ima. Međutim, sve je primjetniji odljev programera iz ekosistema, a to je “odliv mozgova”, kako god na to gledali. Industrija je gladna modernizacije.
Ako ste programer, nemojte se vezati za 1C i nemojte misliti da je sve magično na drugim jezicima. Dok si junior, možda. Čim nešto veće treba riješiti, gotova rješenja će se morati duže tražiti i intenzivnije dovršavati. Što se tiče kvaliteta “blokova” od kojih se može izgraditi rješenje, 1C je vrlo, vrlo dobar.

I još nešto - ako vam 1C nadimak dođe da ga zaposlite, onda se 1C nadimak može sigurno postaviti na poziciju vodećeg analitičara. Njihovo razumijevanje zadatka, predmetne oblasti i vještine dekompozicije je odlično. Siguran sam da je to upravo zbog prisilne upotrebe DDD-a u razvoju 1C. Osoba je osposobljena da prije svega razmišlja o značenju zadatka, o vezama između objekata predmetne oblasti, a istovremeno ima tehničku podlogu u integracijskim tehnologijama i formatima za razmjenu podataka.

Budite svjesni da idealan okvir ne postoji i vodite računa o sebi.
Sve dobro!

PS: hvala vam puno speshuric za pomoć u pripremi članka.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da li imate 1C u svom preduzeću?

  • 13,3%Nikako.71

  • 30,3%Ima, ali samo u računovodstvu negdje. Osnovni sistemi na drugim platformama162

  • 41,4%Da, glavni poslovni procesi rade na tome221

  • 15,0%1C mora umrijeti, budućnost pripada %technology_name%80

Glasalo je 534 korisnika. Uzdržano je bilo 99 korisnika.

izvor: www.habr.com

Dodajte komentar