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

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

Prijatelji i kolege, u posljednje vrijeme na Habréu su sve češći članci s mržnjom prema 1C kao razvojnoj platformi i govorima njezinih branitelja. Ovi su članci identificirali jedan ozbiljan problem: kritičari 1C-a najčešće ga kritiziraju s pozicije "nevladanja", grdeći probleme koji su de facto lako rješivi, i, naprotiv, ne dotičući se problema koji su stvarno važni, vrijedni raspravljaju i ne rješavaju ih prodavač. Vjerujem da ima smisla provesti trijezan i uravnotežen pregled platforme 1C. Što može, što ne može, što bi trebao učiniti, ali ne radi, i, za desert, što radi s praskom, a vaši programeri u %technology_name% radit će stotinu godina, bacajući to više od jednog godišnjeg budžeta.

Kao rezultat toga, vi ćete, kao menadžer ili arhitekt, moći jasno razumjeti koji zadatak će vam biti od koristi koristiti 1C, a gdje ga treba spaliti vrućim željezom. Kao programer u "ne-1C" svijetu, moći ćete vidjeti što postoji u 1C-u što izaziva buku. A kao 1C programer, moći ćete usporediti svoj sustav s ekosustavima drugih jezika i razumjeti svoju lokaciju u koordinatnom sustavu razvoja softvera.

Pod rezom ima puno debelih napada na 1C, na kritičare 1C, na Javu, .NET i općenito... Fan je pun, dobrodošli!

O meni

Sa temom razgovora sam upoznat otprilike od 2004. godine. Programiram vjerojatno od svoje 6 godine, od trenutka kada sam dobio knjigu o Profesoru Fortranu sa stripovima o mački, vrapcu i gusjenici. Analizirao sam programe koje je mačka napisala prema slikama u knjizi i otkrio što su radili. I da, u to vrijeme nisam imao pravo računalo, ali je na koricama knjige bio crtež i pošteno sam pritiskao papirnate gumbe, unosio naredbe koje sam špijunirao na mački X.

Onda su tu bili BK0011 i BASIC u školi, C++ i asembleri na sveučilištu, zatim 1C, i onda toliko mnogo drugih stvari kojih sam lijen da se sjećam. Posljednjih 15 godina uglavnom sam se bavio 1C, ne samo u smislu kodiranja, već 1C općenito. Ovdje postavljate zadatke, administraciju i devops. Posljednjih 5 godina bavim se društveno korisnim aktivnostima u smislu razvoja alata za razvoj i automatizaciju za druge korisnike 1C, pisanjem članaka i knjiga.

Odlučimo se o predmetu rasprave

Prvo, definirajmo o čemu ćemo govoriti, budući da slova "1C" mogu značiti puno stvari. U ovom slučaju, pod slovima "1C" podrazumijevat ćemo isključivo razvojni okvir "1C: Enterprise" moderne, osme verzije. Nećemo puno govoriti o proizvođaču i njegovim politikama (ali ćemo morati učiniti malo).Nećemo raspravljati o specifičnim aplikacijama napisanim pomoću ovog okvira. Tehnologija je odvojena, aplikacije ili konfiguracije su odvojene.

Arhitektura visoke razine 1C: Enterprise

Nisam uzalud spominjao riječ "okvir". Sa stajališta programera, 1C platforma je upravo okvir. I trebate ga tretirati točno kao okvir. Zamislite to kao Spring ili ASP.NET, koje izvršava neko runtime (JVM ili CLR). Događa se da je u svijetu konvencionalnog programiranja ("ne 1C") podjela na okvire, virtualne strojeve i specifične aplikacije prirodna, zbog činjenice da te komponente obično razvijaju različiti proizvođači. U svijetu 1C nije uobičajeno izričito razlikovati razvojni okvir i samo vrijeme izvođenja; osim toga, specifične aplikacije napisane korištenjem okvira također uglavnom razvija sam 1C. Kao rezultat toga, dolazi do neke zabune. Stoga ćemo u okviru članka morati razmotriti 1C s nekoliko strana odjednom i klasificirati ga duž nekoliko koordinatnih osi. A u svaku koordinatnu os stavit ćemo lopatu smeđe tvari i sagledati karakteristike, prednosti i nedostatke postojećeg rješenja.

Gledišta o 1C

1C za kupca

Kupac kupuje sustav automatizacije s kojim može brzo riješiti probleme automatizacije vlastitog poslovanja. Poduzeće može biti mali štand ili može biti veliko holding društvo. Jasno je da su potrebe ovih tvrtki različite, ali obje su podržane jednom bazom koda platforme.

Za 1C kupca ovo je brzo vrijeme za izlazak na tržište. Brzo. Brži od Jave, C# ili JS. Prosjek. Oko bolnice. Jasno je da će web stranica s posjetnicom koja koristi React ispasti bolja, ali pozadina WMS sustava pokrenut će se brže na 1C.

1C kao alat

Svako tehnološko rješenje ima granice primjenjivosti. 1C nije jezik opće namjene; ​​ne živi odvojeno od svog okvira. Preporučljivo je koristiti 1C kada trebate:

  • poslužiteljska aplikacija
  • aplikacija gdje se pojavljuju financije
  • s gotovim korisničkim sučeljem, ORM-om, izvješćivanjem, XML/JSON/COM/PDF/YourDataTransferingFormat
  • uz podršku za pozadinske procese i poslove
  • uz sigurnost temeljenu na ulogama
  • s poslovnom logikom koja se može skriptirati
  • uz mogućnost brze izrade prototipa i kratkog vremena za izlazak na tržište

Ne treba vam 1C ako želite:

  • strojno učenje
  • GPU izračuni
  • računalna grafika
  • matematički proračuni
  • CAD sustav
  • obrada signala (zvuk, video)
  • highload http pozivi sa stotinama tisuća rps

1C kao proizvodna tvrtka

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

  • financijsko računovodstvo
  • jednostavno prilagođavanje poslovne logike
  • široke mogućnosti integracije u heterogene IT krajolike

Kao proizvođač, 1C vjeruje da je to strategija koja vam omogućuje da radite s partnerima i klijentima u načinu na koji svi pobjeđuju. Možete raspravljati s tim, ali to je otprilike način na koji se tvrtka promovira: gotova rješenja za poslovne probleme koje partneri mogu brzo prilagoditi i integrirati u bilo koje IT okruženje.

Sve tvrdnje ili želje za 1C kao okvirom treba promatrati isključivo kroz ovu prizmu. "Želimo OOP u 1C", kažu programeri. "Koliko će nas koštati podrška OOP-u 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, želiš li OOP u svom 1C?
- Hoće li mi ovo pomoći da riješim svoje probleme?
- Tko zna...
- Onda nema potrebe

Ovaj pristup može biti dobar ili loš ovisno o tome tko ga gleda, ali to je jednostavno tako. Govoreći o činjenici da u 1C ne postoji značajka X, morate shvatiti da ona nije tu s razlogom, već u kontekstu izbora "troškovi implementacije u odnosu na iznos dobiti".

Tehnološka klasifikacija

“Zapravo, Odinesnici daju sve od sebe da koriste najbolje uzorke, pažljivo odabrane od strane brižnih metodologa i programera 1C platforme.
Kada napišete svoj glupi kod za jednostavan upravljani obrazac, u stvarnosti koristite model-view-controller с dvosmjerno povezivanje podataka в troslojni-data-app-engine, aromatizirano preslikavanje odnosa objekta visoke razine na bazi deklarativni opis metapodatakaimajući vlastitu upitni jezik neovisan o platformi, C deklarativno korisničko sučelje vođeno podacima, potpuna transparentna serijalizacija i programski jezik orijentiran na domenu.

Ono u čemu se 1C programeri razlikuju od svojih zapadnih kolega je PR. Vole svakom sranju dati veliko ime i trčati okolo s njim kao s prljavom vrećom.”
A. Orefkov

1C platforma ima klasičnu 3-slojnu arhitekturu u čijem je središtu aplikacijski server (ili njegova emulacija za malo novca za male trgovce). Kao DBMS koristi se ili 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 te baze podataka pod srednjim i velikim opterećenjem. Vjerujem da ni sam 1C to ne zna.

Klijentski dio je ili tanki klijent instaliran na korisnikovom računalu 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 vi je možete prikazati u pregledniku ako postoji želja ili potreba. Tko je želio pravi puni stog i jedan jezik za front i backend, node.js? Nikada nisu uspjeli napraviti 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 načinu preglednika, u kojem ne možete kupiti 1C, već iznajmiti malu bazu podataka i tamo pratiti prodaju shawarme. Samo u pregledniku, bez instaliranja ili konfiguriranja bilo čega.

Osim toga, postoji naslijeđeni klijent, koji se u 1C naziva "obična aplikacija". Naslijeđe je naslijeđe, dobrodošli u svijet aplikacija 2002. godine, ali mi i dalje govorimo o trenutnom stanju ekosustava.

1C poslužiteljski dio podržava klasteriranje i skalira se dodavanjem novih strojeva u klaster. Ovdje je pokvareno dosta kopija i o tome će biti poseban odjeljak u članku. Ukratko, ovo nije isto što i dodavanje nekoliko potpuno istih instanci iza HAProxyja.

Okvir za razvoj aplikacija koristi vlastiti programski jezik, koji otprilike nalikuje malo poboljšanom VB6 prevedenom na ruski. Za ljude koji mrze sve rusko, koji ne vjeruju da se "if" prevodi kao "ako", nudi se druga opcija sintakse. Oni. Ako želite, možete ga napisati u 1C na takav način da se ne razlikuje od VB.

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

Upravo je ovaj programski jezik glavni razlog mržnje nadimaka 1C prema njihovoj platformi. Da se razumijemo, ne bez razloga. Jezik je zamišljen što je moguće jednostavniji, dizajniran da ispuni mantru "RAZVOJI, RAZVOJI" na razini barem u CIS-u. Komercijalna bit takvog 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 stvarno lakše. I znam dosta programskih jezika.

Počnimo s jezikom.

1C programski jezik

Ujedno i jaka i slaba točka sustava. Omogućuje jednostavan unos i čitljivost. S druge strane, nije ažuriran od izdanja verzije 8 2002. godine i moralno je zastario. Netko će reći “glavni nedostatak je što nema OOP-a” i bit će u krivu. Prvo, PLO ne voli ne samo Nuralieva, nego ni Torvaldsa. I drugo, OOP još uvijek postoji.

Sa stajališta programera, on ima na raspolaganju okvir s osnovnim klasama prikazanim na DBMS-u. Programer može uzeti osnovnu klasu "Imenik" i od nje naslijediti direktorij "Klijenti". Može mu dodati nova polja klase, na primjer, INN i Address, a također, ako je potrebno, može nadjačati (nadjačati) 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 prije svega razmišljate o predmetnom području rješenja koje se razvija, i to je dobro. Ne samo da nema iskušenja, već niti potrebe za pisanjem 10 različitih DTO-ova i ViewModela samo da bi se negdje prikazali neki podaci iz domene. Programer 1C uvijek radi s jednim entitetom, bez zatrpavanja konteksta percepcije s desetak klasa sa sličnim imenima, koje predstavljaju isti entitet, ali s druge strane. Svaka .NET aplikacija, na primjer, nužno će sadržavati pet ili dva ViewModela i DTO-a za serijalizaciju u JSON i prijenos podataka s klijenta na poslužitelj. Otprilike 10-15% vašeg aplikacijskog koda potrošit će se na prijenos podataka iz jedne klase u drugu pomoću olovki ili štaka poput AutoMappera. Ovaj kod mora biti napisan i programeri moraju biti plaćeni da ga kreiraju i održavaju.

Ispada da je 1C jezik teško razviti bez kompliciranja na razinu mainstream jezika, čime se gubi prednost jednostavnosti. Ono što je zadatak dobavljača koji se u biti rješava: izdati standardno rješenje koje svaki student zatečen na ulici može prilagoditi potrebnoj razini kvalitete (tj. Završeno je pokrivanje kućišta od štanda do velike tvornice). Ako ste štand, uzmite studenta; ako ste tvornica, uzmite gurua od svog partnera za implementaciju. Činjenica da partneri u provedbi prodaju studente po cijeni gurua nije problem s okvirom. Arhitektonski, okvir mora riješiti probleme i jednog i drugog, kod standardnih konfiguracija (koje smo prodali tvrtkama uz obećanje prilagodbe) student bi trebao moći razumjeti, a guru bi trebao moći razumjeti što god želite.

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

  • Mogućnost tipkanja na razini, na primjer, TypeScript (kao rezultat, razvijeniji alati za analizu koda u IDE, refactoring, manje uvredljivih zastoja)
    Dostupnost funkcija kao objekata prve klase. Malo složeniji koncept, ali bi se količina tipičnog šablonskog koda mogla znatno smanjiti. Studentovo razumijevanje koda, IMHO, čak bi se povećalo zbog smanjenja volumena
  • Univerzalni literali zbirke, inicijalizatori. Ista stvar - smanjenje količine koda koji treba napisati i/ili pogledati svojim očima. Punjenje zbirki zauzima preko 9000% vremena programiranja 1C. Pisanje ovoga bez sintaktičkog šećera je dugo, skupo i podložno pogreškama. Općenito, količina LOC-a u 1C rješenjima premašuje sva zamisliva ograničenja u usporedbi s dostupnim otvorenim okvirima i, općenito, svim Javama u vašem poduzeću zajedno. Jezik je opširan, a to se izrodi u količinu podataka, memoriju, IDE kočnice, vrijeme, novac...
  • konačno konstrukcije. Imam hipotezu da ova konstrukcija nedostaje jer nisu pronašli njezin uspješan prijevod na ruski :)
  • Vlastiti tipovi podataka (bez OOP-a), analozi tipa iz VB6. Omogućit će vam da ne upisujete strukture pomoću komentara u BSP-u i čarobnih metoda koje konstruiraju te strukture. Dobivamo: manje koda, savjet kroz točku, brže rješavanje problema, manje grešaka zbog tipfelera i nedostajućih svojstava struktura. Sada upisivanje korisničkih struktura u potpunosti leži na razvojnom timu Standard Subsystem Library, koji, svaka čast, pažljivo piše komentare o očekivanim svojstvima proslijeđenih struktura parametara.
  • Bez šećera kada radite s asinkronim pozivima na web klijentu. callback-hell u obliku ProcessingNotifications je privremena štaka uzrokovana iznenadnom promjenom API-ja glavnih preglednika, ali ne možete živjeti ovako cijelo vrijeme; gubi se prednost "studentskog razumijevanja" asinkronog koda više i više. Dodajte tome da nema podrške za ovu paradigmu u glavnom IDE-u i stvari postaju još gore.

Ovo je jedan od gorućih problema, jasno je da bi popis mogao biti puno veći, ali ne smijemo zaboraviti da ovo još uvijek nije jezik opće namjene, ne zahtijeva multithreading, lambda funkcije, pristup GPU-u i brzu izračuni s pomičnim zarezom. Ovo je skriptni jezik poslovne logike.

Programeru koji je već dosta radio s ovim jezikom, gleda u js ili c#, postaje dosadno u okviru ovog jezika. To je činjenica. Potreban mu je razvoj. S druge strane vage za dobavljača je trošak implementacije navedenih značajki u odnosu na povećanje prihoda nakon njihove implementacije. Ovdje nemam nikakvih informacija o tome što trenutno preteže u očima tvrtke.

Razvojno okruženje

Ni tu ne ide sve 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 temelju Eclipsa.

Konfigurator pruža cijeli niz razvojnih zadataka, podržava sve značajke i glavno je okruženje na tržištu. Također je moralno zastario, ne razvija se, prema glasinama - zbog količine tehničkog duga u sebi. Situacija bi se mogla poboljšati otvaranjem internog API-ja (u obliku prijateljstva s Snjegović A. Orefkova ili na neovisnoj osnovi), ali to nije slučaj. Praksa je pokazala da će zajednica napisati svoje vlastite mogućnosti u IDE, sve dok se proizvođač ne miješa. Ali imamo što imamo. Konfigurator je bio odličan 2004-2005, jako je podsjećao na Visual Studio iz tog vremena, ponegdje je bio čak i hladniji, ali je zapeo u tim vremenima.

Osim toga, obujam prosječnog standardnog rješenja od tada je narastao nekoliko puta, a danas IDE jednostavno ne može podnijeti količinu koda kojom se hrani. Upotrebljivost i mogućnosti refaktoriranja nisu čak ni ravne nuli, one su u minusu. Sve to ne daje entuzijazam programerima i oni sanjaju o tome da se presele u druge ekosustave i tamo nastave kodirati sranja, ali u ugodnom okruženju koje ne pljuje u lice svojim ponašanjem.

Kao alternativa, nudi se IDE napisan od nule, izgrađen na Eclipseu. Tamo izvori, kao i u bilo kojem drugom softveru, žive u obliku tekstualnih datoteka, pohranjeni su u GIT-u, ograncima pull request-a, sve to. Loša strana je to što već godinama nije napustio beta status, iako je svakim izdanjem sve bolji. Neću pisati o nedostacima EDT-a, danas je minus, sutra fiksna opcija. Relevantnost takvog opisa brzo će nestati. Danas je moguće razvijati u EDT-u, ali je neobično, morate biti spremni na određeni broj IDE bugova.

Ako pogledate situaciju kroz gore spomenutu "1C prizmu", dobit ćete nešto ovako: izdanje novog IDE-a ne povećava prodaju kutija, ali odljev RAZVOJA može se smanjiti. Teško je reći što čeka ekosustav u smislu udobnosti programera, ali Microsoft je već zeznuo mobilne programere 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 hrpu smeća i koriste git, quick blame, code-review , statička analiza, automatska implementacija itd. Platformi su dodane mnoge značajke koje povećavaju razinu automatizacije razvojnih zadataka. Međutim, sve ove značajke dodane su samo i isključivo za razvoj naših velikih proizvoda, kada je postalo očito da ne možemo bez automatizacije. Postojala su automatska spajanja, trosmjerna usporedba s KDiffom i sve to. Pokrenut na Githubu gitkonverter, koji je, iskreno, ideološki odvučen od projekta gitsync, ali modificiran kako bi odgovarao procesima tvrtke dobavljača. Zahvaljujući tvrdoglavim momcima iz open-sourcea, automatizacija razvoja u 1C je krenula s mrtve točke. Otvoreni API za konfigurator, IMHO, također bi pomaknuo moralnu zaostalost glavnog IDE-a.

Danas, pohranjivanje 1C izvora u git s obvezama povezanim s problemima u Jiri, pregledima u Crucibleu, gumbom Jenkins i Allure izvješća o testiranju koda u 1C pa čak i statička analiza u SonarQubeu - ovo je daleko od vijesti, već mainstreama u tvrtkama gdje se puno razvija 1C.

uprava

Ima tu štošta za reći. Prvo, ovo je, naravno, poslužitelj (1C klaster poslužitelja). Divna stvar, ali zbog činjenice da se radi o potpuno crnoj kutiji, dovoljno detaljno dokumentiranoj, ali na specifičan način - savladati pokretanje neprekidnog rada u highload modu na nekoliko poslužitelja posao je nekolicine odabranih koji nose medalja s natpisom “Stručnjak za tehnološka pitanja”. Vrijedno je napomenuti da se, u načelu, administriranje 1C poslužitelja ne razlikuje od administriranja bilo kojeg drugog poslužitelja. To je mrežna aplikacija s više niti koja troši memoriju, CPU i diskovne resurse. Pruža široke mogućnosti za prikupljanje i dijagnostiku telemetrije.

Problem je u tome što proizvođač ne nudi ništa posebno u smislu gotovih rješenja 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 ostalih stvari iz standardnog administratorskog seta, ali ne postoji jedinstveno rješenje koje bi odgovaralo većini. Zadatak čeka svog heroja. A ako ste tvrtka koja planira pokrenuti na 1C klasteru, potreban vam je stručnjak. Svoj iznutra ili izvana, ali ti treba. Normalno je da postoji zasebna uloga s kompetencijama za rad poslužitelja, ne bi to trebao znati svaki korisnik 1C, samo trebate razumjeti da je takva uloga potrebna. Uzmimo za primjer SAP. Tamo programer najvjerojatnije neće ni ustati sa svoje stolice ako se od njega traži da nešto konfigurira na aplikacijskom poslužitelju. Možda je samo glup i neće ga biti sram. U SAP metodologiji za to postoji posebna uloga zaposlenika. Iz nekog razloga, u industriji 1C vjeruje se da bi to trebalo kombinirati u jednom zaposleniku za istu plaću. To je zabluda.

Nedostaci 1C poslužitelja

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

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

Lučki radnik

Korisnost korištenja kontejnerskog 1C poslužitelja u proizvodnji još nije dokazana. Poslužitelj nije klasteriziran jednostavnim dodavanjem čvorova iza balansera, čime su prednosti proizvodne kontejnerizacije svedene na minimum, a praksa uspješnog rada u kontejnerima u highload modu nije uspostavljena. Kao rezultat toga, samo programeri koriste Docker+1C za postavljanje testnih okruženja. Tu je vrlo koristan, primijenjen, omogućuje vam da se igrate s modernim tehnologijama i odmorite se od malodušnosti konfiguratora.

Komercijalna komponenta

S gledišta ulaganja, 1C vam omogućuje da riješite problem brzog pokretanja poslovnih ideja zahvaljujući širokim mogućnostima klasa aplikacija. 1C izvan okvira daje vrlo pristojno izvješćivanje, integraciju sa bilo čime, web klijent, mobilni klijent, mobilna aplikacija, podrška za razne DBMS-ove, uklj. besplatni, međuplatformski i poslužiteljski i instalirani klijentski dijelovi. Da, korisničko sučelje aplikacija bit će žuto, ponekad je to minus, ali ne uvijek.
Odabirom 1C tvrtka dobiva skup softverskih rješenja koja im omogućuju izradu vrlo širokog spektra aplikacija, kao i mnoštvo programera na tržištu koji žele manje novca od Javaista, a u isto vrijeme brže proizvode rezultate.

Primjerice, zadatak slanja PDF računa klijentu može se riješiti u sat vremena studentskog rada. Isti problem u .NET-u može se riješiti kupnjom vlasničke biblioteke ili nekoliko dana ili tjedana kodiranja od strane strogog, bradatog programera. Ponekad, oboje odjednom. I da, govorio sam samo o generiranju PDF-a. Nismo rekli odakle će taj račun uopće doći. Web frontender mora izraditi formu u koju će operater unositi podatke, backender će morati izraditi dto modele za prijenos JSON-a, modele za pohranu u bazu, strukturu same baze, migraciju u nju, formiranje grafičkog prikaz upravo ovog računa, pa tek onda - PDF. Na 1C se cijeli zadatak, ispočetka, završi za točno jedan sat.

Cjeloviti računovodstveni sustav za mali štand s jednim poslovnim procesom kupnja/prodaja se napravi za 3 sata.Sa izvješćivanjem o prodaji, obračunom robe po nabavnim i prodajnim cijenama po skladištu, kontrolom prava pristupa, web klijentom i mobilnom aplikacijom . Dobro, zaboravila sam na prijavu, s tim da prijava nije za 3 sata, već za šest.

Koliko će ovaj zadatak trajati .NET programeru od instaliranja Visual Studio-a na čisto računalo do demonstracije kupcu? Što je s cijenom razvoja? Ista stvar.

Prednosti 1C kao platforme

1C je jak ne zato što postoji nešto specifično o njemu što je najbolje na svijetu. Naprotiv, u svakom pojedinom podsustavu možete pronaći zanimljiviji analog u svjetskom softveru. Međutim, na temelju kombinacije čimbenika, 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 značajke, već naprotiv - odbacivanje značajki u korist jedne specifične paradigme. Nekoliko primjera:

  1. Unicode. Što bi dovraga moglo biti jednostavnije? Nema potrebe za korištenjem jednobajtnih ASCII kodiranja u 2019. (osim za integraciju s starim naslijeđenim). Nikada. Ali ne. U svakom slučaju, netko u nekoj tablici koristi jednobajtni varchar i aplikacija će imati problema s kodiranjem. Godine 2015. gitlabova LDAP autorizacija nije uspjela zbog neispravnog rada s kodiranjem; JetBrains IDE još uvijek ne radi svugdje s ćirilicom u nazivima datoteka. 1C pruža visokokvalitetnu izolaciju aplikacijskog koda od sloja baze podataka. Tamo je nemoguće tipkati tablice na niskoj razini i tu su nemogući zastoji nesposobnih juniora na razini baze podataka. Da, možda postoje i drugi problemi s nesposobnim juniorima, ali raznolikost problema je puno manja. Sada ćete mi reći da je vaša aplikacija ispravno dizajnirana i da je sloj pristupa bazi podataka izoliran kao što bi trebao biti. Još jednom pogledajte svoju korporativnu prilagođenu Java aplikaciju. Blisko i iskreno. Peče li vas savjest? Onda sam sretan zbog tebe.
  2. Numeriranje dokumenata/priručnika. U 1C definitivno nije najfleksibilniji i nije najbolji. Ali ono što rade u bankarskom softveru iu računovodstvenim sustavima koje sami pišu - pa, to je samo mrak. Ili će se zaglaviti identitet (i onda "ajme, zašto imamo rupe"), ili će naprotiv napraviti generator koji radi s zaključavanjem na razini DBMS-a (i postat će usko grlo). Zapravo, prilično je teško obaviti ovaj naizgled jednostavan zadatak - end-to-end enumerator entiteta, s odjeljkom jedinstvenosti na temelju određenog skupa ključeva, prefiksacijom, tako da ne blokira bazu podataka tijekom paralelnog unosa podataka .
  3. Identifikatori zapisa u bazi podataka. 1C je donio odlučnu odluku - svi identifikatori veza su apsolutno sintetički i to je to. I nema problema s distribuiranim bazama podataka i razmjenama. Programeri drugih sustava tvrdoglavo stvaraju nešto poput identiteta (kraće je!), povlače ih u GUI dok ne dođe vrijeme za stvaranje nekoliko povezanih instanci (i tada će biti otkriveni). Zar nemate ovo? iskreno?
  4. Popisi. 1C ima prilično uspješne mehanizme za listanje (velikih) popisa i navigaciju kroz njih. Odmah da rezerviram - uz pravilnu upotrebu mehanizma! Općenito, tema je prilično neugodna, ne može se riješiti na idealan način: ili je intuitivna i jednostavna (ali postoji rizik od ogromnih skupova zapisa na klijentu), ili je straničenje jedne ili druge krivoglavosti. Oni koji paging često rade krivo. Oni koji prave pošteni scrollbar dodaju bazu podataka, kanal i klijenta.
  5. Upravljani obrasci. Bez sumnje, u web klijentu sučelje ne radi savršeno. Ali djeluje. Ali za mnoge druge računovodstvene i bankarske sustave, stvaranje udaljenog radnog mjesta je projekt na razini poduzeća. Odricanje od odgovornosti: srećom za one koji su to izvorno napravili na webu, to neće utjecati.
  6. Mobilna aplikacija. Nedavno možete pisati i mobilne aplikacije dok ste u istom ekosustavu. Ovdje je malo kompliciranije nego s web klijentom; specifičnosti uređaja tjeraju vas da pišete posebno za njih, ali ipak ne angažirate zaseban tim mobilnih programera. Ako vam je potrebna aplikacija za interne potrebe tvrtke (kada je mobilno rješenje korporativnog problema važnije od žutog dizajna korisničkog sučelja), jednostavno koristite istu platformu iz kutije.
  7. Izvještavanje. Pod ovom riječju ne mislim na BI sustav s velikim podacima i kašnjenjem ETL procesa. To se odnosi na izvješća operativnog osoblja koja vam omogućuju procjenu stanja računovodstva ovdje i sada. Stanja, međusobni obračuni, ponovno ocjenjivanje itd. 1C izlazi iz kutije sa sustavom izvješćivanja s fleksibilnim postavkama za grupiranje, filtre i vizualizaciju na strani korisnika. Da, na tržištu postoje hladniji analozi. Ali ne u okviru rješenja sve u jednom i po cijeni ponekad višoj od rješenja sve u jednom. A češće je čak i obrnuto: samo izvješćivanje, ali skuplje od cijele platforme i lošije kvalitete.
  8. Obrasci za ispis. Pa, koristite .NET da riješite problem slanja lista plaća u PDF-u zaposlenicima putem e-pošte. A sada zadatak ispisa računa. Što je sa spremanjem njihovih kopija u isti PDF? Za 1C nadimak, izlaz bilo kojeg izgleda u PDF je +1 linija koda. To znači + 40 sekundi radnog vremena, umjesto dana ili tjedana na drugom jeziku. Izgledi tiskanih obrazaca u 1C nevjerojatno su jednostavni za razvoj i dovoljno su moćni da se natječu s plaćenim pandanima. Da, vjerojatno nema mnogo interaktivnih mogućnosti u 1C tabličnim dokumentima; ne možete brzo dobiti 3D dijagram sa skaliranjem pomoću OpenGL-a. Ali je li to stvarno potrebno?

Ovo je samo nekolicina primjera u kojima se ograničavanje funkcionalnosti ili implementacija kompromisa pokazuje kao važna arhitektonska korist u budućnosti. Čak i kompromis ili ne najučinkovitija opcija - već je u kutiji i uzima se zdravo za gotovo. Njegova samostalna implementacija bit će 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 točaka (a ovo nije potpuni popis arhitektonskih rješenja) možete zeznuti i uvesti ograničenja koja blokiraju skaliranje. U svakom slučaju, vi, kao poslovni čovjek, morate biti sigurni da vaši programeri, kada rade "sustav od nule", imaju čiste ruke i da će suptilne sistemske probleme odmah dobro riješiti.

Da, kao iu svakom drugom složenom sustavu, i sam 1C ima rješenja koja blokiraju skaliranje u određenim aspektima. Međutim, ponavljam, na temelju kombinacije faktora, cijene vlasništva i niza već unaprijed riješenih problema, ne vidim dostojnog konkurenta na tržištu. Za istu cijenu dobivate okvir financijske aplikacije, clustered balanced server, s UI i web sučeljem, s mobilnom aplikacijom, s reportingom, integracijom i hrpom drugih stvari. U svijetu Jave unajmljujete front-end i back-end tim, otklanjate pogreške niske razine koda poslužitelja napisanog kod kuće i plaćate odvojeno za 2 mobilne aplikacije za 2 mobilna OS-a.

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 - što je još potrebno?

Letite u masti

Vjerojatno ste stekli dojam da će 1C spasiti svijet i da su svi drugi načini pisanja korporativnih sustava pogrešni. Uopće nije tako. S gledišta poslovnog čovjeka, ako odaberete 1C, tada osim brzog izlaska na tržište morate uzeti u obzir sljedeće nedostatke:

  • Pouzdanost poslužitelja. Potrebni su zaista kvalitetni stručnjaci koji mogu osigurati njegov nesmetan rad. Nije mi poznat gotov program obuke za takve stručnjake od dobavljača. Postoje tečajevi za pripremu za stručni ispit, ali to, po mom mišljenju, nije dovoljno.
  • podrška. Vidi prethodni paragraf. Da biste imali podršku od dobavljača, morate ga kupiti. Iz nekog razloga to nije prihvaćeno u 1C industriji. A kod SAP-a je to gotovo obavezna kupnja i nikome ne smeta. Bez korporativne podrške i bez stručnjaka u osoblju, možete ostati sami s problemima 1C.
  • Ipak, ne možete učiniti apsolutno sve s 1C. Ovo je alat i kao svaki alat ima granice primjenjivosti. U okruženju 1C vrlo je poželjno imati arhitekta sustava koji nije 1C.
  • Dobri 1C nadimci nisu ništa jeftiniji od dobrih programera na drugim jezicima. Iako je loše programere skupo zaposliti, bez obzira na kojem jeziku pišu.

Rasporedimo točkice

  • 1C je okvir za brzi razvoj aplikacija (RAD) za poslovanje i za to je prilagođen.
  • Troslojna veza s podrškom za glavne DBMS-ove, korisničko sučelje klijenta, vrlo dobar ORM i izvješćivanje
  • Široke mogućnosti integracije sa sustavima koji mogu ono što 1C ne može. Ako želite strojno učenje, uzmite Python i pošaljite rezultat u 1C putem http-a ili RabbitMQ-a
  • Nema potrebe da se trudite učiniti sve koristeći 1C, morate razumjeti njegove prednosti i koristiti ih za vlastite svrhe
  • Programerima koji gravitiraju 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 se proizvođač vrlo malo brine za njih. Dosadan jezik, slab IDE. Oni zahtijevaju modernizaciju.
  • S druge strane, programeri koji ne mogu naći zabavu kroz korištenje i učenje druge tehnologije u kojoj uživaju su loši programeri. Cvilit će i preselit će se u drugi ekosustav.
  • Poslodavci koji ne dopuštaju svojim 1C nadimcima da nešto napišu u Pythonu su loši poslodavci. Izgubit će zaposlenike radoznalog uma, a na njihovo mjesto doći će majmuni koderi koji će, iako se sa svime slažu, korporativni softver odvući u močvaru. Morat će se još dopisivati, pa bi možda bilo bolje malo ranije investirati u Python?
  • 1C je komercijalna tvrtka i implementira značajke isključivo na temelju vlastitih interesa i svrsishodnosti. Ne možete je kriviti za ovo, posao 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 koreliraju, ali prioritet je upravo ono što sam rekao. Kada programer Vasya bude spreman platiti osobnu licencu za 1C: Resharper, pojavit će se vrlo brzo, "Resharper" A. Orefkova je dokaz za to. Kad bi dobavljač to podržavao, a ne borio se protiv toga, pojavilo bi se tržište softvera za programere. Sada na ovom tržištu postoji jedan i pol igrač sa upitnim rezultatima, a sve zato što je integracija s IDE-om negativna i sve se radi na štakama.
  • Praksa rukovatelja više strojeva nestat će u zaborav. Moderne aplikacije su prevelike za pamćenje i sa strane koda i sa strane poslovne upotrebe. 1C poslužitelj 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 atraktivnost profesije 1C i povećanje plaća. Ako je prije Vasya radio tri u jednom za jednu plaću, sada trebate zaposliti dva Vasya i konkurencija među Vasyama može potaknuti ukupni rast njihove razine.

Zaključak

1C je vrlo vrijedan proizvod. U svom cjenovnom rangu uopće ne znam nikakve analoge, napišite u komentarima ako ih ima. No, sve je vidljiviji odljev programera iz ekosustava, a riječ je o “odljevu mozgova”, kako god se na to gledalo. Industrija je gladna modernizacije.
Ako ste programer, nemojte se vezati za 1C i nemojte misliti da je na drugim jezicima sve čarobno. Dok si junior, možda. Čim treba rješavati nešto veće, morat će se dulje tražiti gotova rješenja i intenzivnije dovršavati. Što se tiče kvalitete "blokova" od kojih se može sagraditi rješenje, 1C je vrlo, vrlo dobar.

I još jedna stvar - ako vam dođe nadimak 1C da ga zaposlite, tada se nadimak 1C može sigurno imenovati na mjesto vodećih analitičara. Njihovo razumijevanje zadatka, predmetnog područja i vještina dekompozicije je izvrsno. Siguran sam da je to upravo zbog forsirane upotrebe DDD-a u razvoju 1C. Osoba je osposobljena razmišljati prije svega o značenju zadatka, o vezama između objekata predmetnog područja, a istovremeno ima tehničko iskustvo u integracijskim tehnologijama i formatima za razmjenu podataka.

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

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

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Imate li 1C u svom poduzeću?

  • 13,3%Nimalo.71

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

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

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

Glasovalo je 534 korisnika. Suzdržano je bilo 99 korisnika.

Izvor: www.habr.com

Dodajte komentar