1C - Bine și rău. Aranjarea punctelor în holivar în jurul anului 1C

1C - Bine și rău. Aranjarea punctelor în holivar în jurul anului 1C

Prieteni și colegi, recent au apărut mai des articole despre Habré cu ură față de 1C ca platformă de dezvoltare și discursuri ale apărătorilor săi. Aceste articole au identificat o problemă serioasă: de cele mai multe ori, criticii 1C îl critică din poziția de „nu-l stăpânește”, dojenind probleme care sunt de facto ușor de rezolvat și, dimpotrivă, nu ating probleme care sunt cu adevărat importante, care merită. discutand si nu sunt rezolvate de catre furnizor . Cred că are sens să se efectueze o revizuire sobră și echilibrată a platformei 1C. Ce poate face, ce nu poate face, ce ar trebui să facă, dar nu face și, pentru desert, ce face cu un bang, iar dezvoltatorii tăi de la %technology_name% vor face o sută de ani, aruncându-l la gunoi mai mult de un buget anual.

Drept urmare, dumneavoastră, în calitate de manager sau arhitect, veți putea înțelege clar ce sarcină vă va fi benefic să utilizați 1C și unde trebuie să fie ars cu un fier de călcat fierbinte. În calitate de dezvoltator în lumea „non-1C”, veți putea vedea ce este acolo în 1C care provoacă agitație. Și ca dezvoltator 1C, veți putea să vă comparați sistemul cu ecosistemele altor limbi și să vă înțelegeți locația în sistemul de coordonate al dezvoltării software.

Sub tăietură sunt foarte multe atacuri groase la 1C, la critici la 1C, la Java, .NET și în general... Ventilatorul e plin, bine ai venit!

Despre mine

Sunt familiarizat cu subiectul conversației din aproximativ 2004. Programez probabil de la 6 ani, chiar din momentul în care am primit o carte despre profesorul Fortran cu benzi desenate despre o pisică, o vrabie și o omidă. Am analizat programele pe care pisica le-a scris din pozele din carte și am aflat ce au făcut. Și da, nu aveam un computer adevărat în acel moment, dar era un desen pe răspândirea cărții și am apăsat sincer pe butoanele de hârtie, introducând comenzile pe care le spionisem pe pisica X.

Apoi au fost BK0011 și BASIC la școală, C++ și asamblatori la universitate, apoi 1C și apoi atâtea alte lucruri pe care mi-e lene să le amintesc. În ultimii 15 ani, m-am implicat mai ales în 1C, nu doar în ceea ce privește codificarea, ci și în 1C în general. Stabilirea sarcinilor, administrarea și devop-urile aici. În ultimii 5 ani am fost implicat în activități utile social în ceea ce privește dezvoltarea instrumentelor de dezvoltare și automatizare pentru alți utilizatori 1C, scriind articole și cărți.

Să decidem asupra subiectului de discuție

În primul rând, să definim despre ce vom vorbi, deoarece literele „1C” pot însemna multe lucruri. În acest caz, prin literele „1C” vom înțelege exclusiv cadrul de dezvoltare „1C: Enterprise” a versiunii a opta moderne. Nu vom vorbi prea mult despre producător și politicile acestuia (dar va trebui să facem puțin despre aplicații scrise folosind acest cadru). Tehnologia este separată, aplicațiile și configurațiile sunt separate.

Arhitectură de nivel înalt 1C: Enterprise

Nu degeaba menționez cuvântul „cadru”. Din punctul de vedere al dezvoltatorului, platforma 1C este tocmai un cadru. Și trebuie să-l tratezi exact ca pe un cadru. Gândiți-vă la el ca Spring sau ASP.NET, executat de un anumit timp de execuție (JVM sau respectiv CLR). Se întâmplă că în lumea programării convenționale („nu 1C”), împărțirea în cadre, mașini virtuale și aplicații specifice este firească, datorită faptului că aceste componente sunt de obicei dezvoltate de diferiți producători. În lumea 1C, nu este obișnuit să se distingă în mod explicit cadrul de dezvoltare și timpul de execuție în sine, în plus, aplicațiile specifice scrise folosind cadrul sunt, de asemenea, dezvoltate în principal de 1C însuși. Ca urmare, apare o oarecare confuzie. Prin urmare, în cadrul articolului, va trebui să luăm în considerare 1C din mai multe părți simultan și să-l clasificăm de-a lungul mai multor axe de coordonate. Și în fiecare axă de coordonate vom pune o lopată de substanță maro și vom privi caracteristicile, avantajele și dezavantajele soluției existente.

Puncte de vedere asupra 1C

1C pentru cumpărător

Cumpărătorul achiziționează un sistem de automatizare cu ajutorul căruia poate rezolva rapid problemele de automatizare a propriei afaceri. O afacere poate fi o tarabă mică sau poate fi un holding mare. Este clar că nevoile acestor afaceri sunt diferite, dar ambele sunt susținute de o singură bază de cod de platformă.

Pentru cumpărătorul 1C, acesta este un time-to-market rapid. Rapid. Mai rapid decât Java, C# sau JS. In medie. În jurul spitalului. Este clar că un site web de cărți de vizită care folosește React se va dovedi mai bine, dar backend-ul unui sistem WMS se va lansa mai repede pe 1C.

1C ca instrument

Fiecare soluție tehnologică are limite de aplicabilitate. 1C nu este un limbaj de uz general, nu trăiește separat de cadrul său. Este recomandabil să utilizați 1C atunci când aveți nevoie de:

  • aplicație server
  • aplicatie unde apar finantele
  • cu interfață de utilizare gata făcută, ORM, raportare, XML/JSON/COM/PDF/YourDataTransferingFormat
  • cu suport pentru procese de fundal și locuri de muncă
  • cu securitate bazată pe roluri
  • cu logica de afaceri scriptabilă
  • cu capacitatea de a crea rapid un prototip și cu un time-to-market redus

Nu aveți nevoie de 1C dacă doriți:

  • învățare automată
  • calcule GPU
  • grafică pe computer
  • calcule matematice
  • sistem CAD
  • procesare semnal (sunet, video)
  • apeluri http de încărcare mare cu sute de mii de rps

1C ca companie de producție

Merită să înțelegeți care este afacerea lui 1C ca producător de software. Compania 1C vinde soluții la problemele de afaceri prin automatizare. Afaceri diferite, mari sau mici, dar asta vinde ea. Mijloacele pentru atingerea acestui obiectiv sunt aplicațiile de afaceri. Pentru contabilitate, contabilitate salarizare, etc. Pentru a scrie aceste aplicații, compania folosește propria platformă de dezvoltare a aplicațiilor de afaceri. Special adaptat pentru sarcinile comune ale acestor aplicații de afaceri:

  • contabilitate financiara
  • personalizare ușoară a logicii de afaceri
  • posibilități largi de integrare în peisaje IT eterogene

În calitate de producător, 1C consideră că aceasta este strategia care vă permite să lucrați cu parteneri și clienți într-un mod câștig-câștig. Puteți argumenta acest lucru, dar cam așa se promovează compania: soluții gata făcute pentru problemele de afaceri care pot fi personalizate rapid de către parteneri și integrate în orice peisaj IT.

Toate revendicările sau dorințele pentru 1C ca cadru ar trebui privite exclusiv prin această prismă. „Vrem OOP în 1C”, spun dezvoltatorii. „Cât ne va costa să sprijinim OOP în platformă, ne va ajuta acest lucru să creștem vânzările de cutii?”, spune 1C. Își deschide „prisma” de a vinde soluții la problemele de afaceri:

- Hei, afaceri, vrei OOP în 1C?
- Mă va ajuta asta să-mi rezolv problemele?
- Cine ştie...
- Atunci nu e nevoie

Această abordare poate fi bună sau rea, în funcție de cine se uită la ea, dar așa este. Vorbind despre faptul că nu există nicio caracteristică X în 1C, trebuie să înțelegeți că nu există dintr-un motiv, ci în contextul alegerii „cost de implementare vs valoare profit”.

Clasificarea tehnologică

„De fapt, cei de la Odinesnik fac tot posibilul pentru a folosi cele mai bune modele, selectate cu grijă de metodologii și dezvoltatorii platformei 1C.
Când scrii codul tău stupid pentru un formular simplu gestionat, în realitate îl folosești model-vedere-controler с legare dublu de date в motor-aplicație de date cu trei straturi, aromatizat cartografiere-relație-obiect la nivel înalt pe bază descrierea metadatelor declarativeavând propriile sale limbaj de interogare independent de platformăc interfață de utilizator declarativă bazată pe date, serializare completă transparentă și limbaj de program orientat pe domeniu.

Unde dezvoltatorii 1C diferă de colegii lor din Vest este în PR. Le place să dea oricărei prostii un nume mare și să alerge cu el ca pe o geantă murdară.”
A. Orefkov

Platforma 1C are o arhitectură clasică cu 3 niveluri, în centrul căreia se află serverul de aplicații (sau emularea acestuia pentru bani puțini pentru micii comercianți). Fie MS SQL, fie Postgres este folosit ca DBMS. Există, de asemenea, suport pentru Oracle și IBM DB2, dar acest lucru este mai degrabă ezoteric, nimeni nu știe ce se va întâmpla dacă implementați 1C pe aceste baze de date cu încărcare medie și mare. Cred că 1C în sine nu știe asta.

Partea client este fie un client subțire instalat pe computerul utilizatorului, fie un client web. Caracteristica cheie este că programatorii nu scriu 2 coduri diferite, ei scriu o aplicație, într-o singură limbă și o poți afișa în browser dacă există o dorință sau o nevoie. Cine și-a dorit acolo o stivă completă adevărată și o singură limbă pentru front și backend, node.js? Nu au reușit niciodată să facă exact același lucru până la sfârșit. Există o adevărată stivă completă, dar va trebui să-l scrieți în 1C. Ironia destinului, astfel de lucruri :)

Soluția cloud SaaS 1C:Fresh funcționează și în modul browser, în care nu puteți cumpăra 1C, ci puteți închiria o mică bază de date și urmăriți vânzările de shawarma acolo. Doar în browser, fără a instala sau configura nimic.

În plus, există un client moștenit, care în 1C se numește „aplicație obișnuită”. Legacy este moștenire, bine ați venit în lumea aplicațiilor în 2002, dar încă vorbim despre starea actuală a ecosistemului.

Partea de server 1C acceptă gruparea și scalarea prin adăugarea de noi mașini la cluster. Aici au fost sparte destul de multe copii și va exista o secțiune separată în articol despre asta. Pe scurt, acest lucru nu este chiar același lucru cu adăugarea de câteva cazuri exacte în spatele HAProxy.

Cadrul de dezvoltare a aplicațiilor folosește propriul său limbaj de programare, care seamănă aproximativ cu un VB6 ușor îmbunătățit tradus în rusă. Pentru persoanele care urăsc tot ce este rusesc, care nu cred că „dacă” este tradus prin „dacă”, este oferită a doua opțiune de sintaxă. Acestea. Dacă doriți, îl puteți scrie în 1C în așa fel încât să nu se distingă de VB.

1C - Bine și rău. Aranjarea punctelor în holivar în jurul anului 1C

Chiar acest limbaj de programare este motivul principal al urii poreclelor 1C față de platforma lor. Să recunoaștem, nu fără motiv. Limbajul a fost conceput cât se poate de simplu, gândit să îndeplinească mantra „DEVELOPERS, DEVELOPERS” la o scară cel puțin în CSI. Esența comercială a unei astfel de soluții, după părerea mea, este clar vizibilă: mai mulți dezvoltatori, o acoperire mai mare a pieței. Acest lucru s-a adeverit, conform diverselor estimări de la 45% la 95%. Voi spune imediat că a scrie în limba pe care o crezi că este cu adevărat mai ușor. Și știu destul de multe limbaje de programare.

Să începem cu limbajul.

Limbajul de programare 1C

În același timp, punctul forte și slab al sistemului. Oferă intrare ușoară și lizibilitate. Pe de altă parte, nu a fost actualizat de la lansarea versiunii 8 în 2002 și este depășit din punct de vedere moral. Cineva va spune „principalul dezavantaj este că nu există OOP” și se vor înșela. În primul rând, OLP nu-i place nu numai pe Nuraliev, ci și pe Torvalds. Și în al doilea rând, OOP încă există.

Din punctul de vedere al dezvoltatorului, acesta are la dispoziție un framework cu clase de bază afișate pe DBMS. Dezvoltatorul poate lua clasa de bază „Directory” și poate moșteni directorul „Clienți” din aceasta. Acesta poate adăuga noi câmpuri de clasă, de exemplu, INN și Adresă și, de asemenea, dacă este necesar, poate suprascrie (supracrie) metodele clasei de bază, de exemplu, metoda OnWrite/AtRecord.

Cadrul este conceput în așa fel încât rareori este necesară o moștenire mai profundă, iar restricția în OOP, după părerea mea, are sens. 1C se concentrează pe Domain Driven Development și te face să te gândești, în primul rând, la subiectul soluției în curs de dezvoltare, iar acest lucru este bine. Nu numai că nu există nicio tentație, dar nici nu este nevoie să scrieți 10 DTO-uri și ViewModels diferite doar pentru a afișa niște date din domeniu undeva. Dezvoltatorul 1C operează întotdeauna cu o singură entitate, fără a aglomera contextul de percepție cu o duzină de clase cu nume similare, reprezentând aceeași entitate, dar dintr-o latură diferită. Orice aplicație .NET, de exemplu, va conține în mod necesar cinci sau două ViewModels și DTO-uri pentru serializare în JSON și transfer de date de la client la server. Și aproximativ 10-15% din codul aplicației dvs. va fi cheltuit transferând date de la o clasă la alta folosind pixuri sau cârje precum AutoMapper. Acest cod trebuie scris și programatorii trebuie plătiți pentru a-l crea și menține.

Se dovedește că limbajul 1C este greu de dezvoltat fără a-l complica la nivelul limbajelor mainstream, pierzând astfel avantajul simplității. Care este, în esență, sarcina vânzătorului în curs de rezolvare: să emită o soluție standard pe care orice student prins pe stradă o poate personaliza cu nivelul necesar de calitate (adică este finalizată o acoperire a carcasei de la o tarabă la o fabrică mare). Dacă sunteți un stand, luați un student dacă sunteți o fabrică, luați un guru de la partenerul dvs. de implementare. Faptul că partenerii de implementare vând studenții la prețul unui guru nu este o problemă cu cadrul. Din punct de vedere arhitectural, framework-ul trebuie să rezolve problemele ambelor, codul configurațiilor standard (pe care l-am vândut întreprinderilor cu promisiunea personalizării) ar trebui să poată fi înțeles de un student, iar un guru ar trebui să poată înțelege orice doriți.

Ceea ce, după părerea mea, chiar lipsește din limbă, ceea ce te obligă să scrii mai mult decât ai putea, este ceea ce pierde timpul plătit de client.

  • Posibilitatea de tastare la nivelul, de exemplu, TypeScript (ca urmare, instrumente de analiză a codului mai dezvoltate în IDE, refactorizare, mai puține jamburi ofensive)
    Disponibilitatea funcțiilor ca obiecte de primă clasă. Un concept puțin mai complex, dar cantitatea de cod standard ar putea fi mult redusă. Înțelegerea codului de către elev, IMHO, ar crește chiar din cauza reducerii volumului
  • Litere universale de colecție, inițializatoare. Același lucru - reducerea cantității de cod care trebuie scris și/sau privit cu ochii. Umplerea colecțiilor ocupă peste 9000% din timpul de programare 1C. A scrie acest lucru fără zahăr sintactic este lung, costisitor și predispus la erori. În general, cantitatea de LOC în soluțiile 1C depășește toate limitele imaginabile în comparație cu cadrele deschise disponibile și, în general, cu toate Java-urile companiei tale combinate. Limbajul este verbos, iar acest lucru degenerează în cantitatea de date, memorie, frâne IDE, timp, bani...
  • in sfarsit constructii am o ipoteza ca aceasta constructie lipseste din cauza faptului ca nu au gasit o traducere reusita a ei in limba rusa :)
  • Tipuri de date proprii (fără OOP), analogi de tip de la VB6. Vă va permite să nu introduceți structuri folosind comentarii în BSP și metode magice care construiesc aceste structuri. Obținem: mai puțin cod, un indiciu printr-un punct, o soluție mai rapidă a problemei, mai puține erori din cauza greșelilor de scriere și a proprietăților lipsă ale structurilor. Acum, tastarea structurilor utilizatorului revine în întregime echipei de dezvoltare a Bibliotecii de subsistem standard, care, spre meritul său, scrie cu atenție comentarii cu privire la proprietățile așteptate ale structurilor parametrilor transmise.
  • Fără zahăr atunci când lucrați cu apeluri asincrone pe clientul web. callback-hell sub formă de ProcessingNotifications este o cârjă temporară cauzată de o schimbare bruscă a API-ului browserelor principale, dar nu puteți trăi așa tot timpul se pierde avantajul „înțelegerii elevilor” a codului asincron mai mult și mai mult. Nu adăugați nici un suport pentru această paradigmă în IDE-ul principal și lucrurile se înrăutățesc și mai mult.

Aceasta este una dintre problemele stringente, este clar că lista ar putea fi mult mai mare, dar nu trebuie să uităm că acesta nu este încă un limbaj de uz general, nu necesită multithreading, funcții lambda, acces la GPU și rapid calcule în virgulă mobilă. Acesta este un limbaj de scripting logic de afaceri.

Un programator care a lucrat deja mult cu acest limbaj, se uită la js sau c#, se plictisește în cadrul acestui limbaj. Este un fapt. Are nevoie de dezvoltare. Pe de altă parte a scalei pentru furnizor este costul implementării caracteristicilor specificate față de creșterea veniturilor după implementarea lor. Aici nu am nicio informație despre ceea ce depășește în prezent în ochii companiei.

Mediu de dezvoltare

Nici aici lucrurile nu merg bine. Există două medii de dezvoltare. Primul este Configuratorul inclus în livrare. Al doilea este mediul Enterprise Development Tools, sau pe scurt EDT, dezvoltat pe baza Eclipse.

Configuratorul oferă o gamă completă de sarcini de dezvoltare, acceptă toate caracteristicile și este principalul mediu de pe piață. De asemenea, este învechit din punct de vedere moral, nu se dezvoltă, conform zvonurilor - din cauza sumei datoriei tehnice din interiorul său. Situația ar putea fi îmbunătățită prin deschiderea unui API intern (sub formă de prietenie cu Om de zapada A. Orefkova sau pe o bază independentă), dar nu este cazul. Practica a arătat că comunitatea își va scrie propriile caracteristici în IDE, atâta timp cât vânzătorul nu intervine. Dar avem ceea ce avem. Configuratorul a fost grozav în 2004-2005, amintește foarte mult de Visual Studio din acele vremuri, pe alocuri era și mai tare, dar era blocat în acele vremuri.

În plus, volumul soluției standard medii a crescut de mai multe ori de atunci, iar astăzi IDE-ul pur și simplu nu poate face față cantității de cod cu care este alimentat. Utilizabilitatea și capabilitățile de refactorizare nu sunt nici măcar zero, sunt în roșu. Toate acestea nu adaugă entuziasm dezvoltatorilor și ei visează să se mute în alte ecosisteme și să continue să codifice rahat acolo, dar într-un mediu plăcut care nu-ți scuipă în față cu comportamentul său.

Ca alternativă, este oferit un IDE scris de la zero, construit pe Eclipse. Acolo, sursele, ca în orice alt software, trăiesc sub formă de fișiere text, sunt stocate în GIT, ramuri pull request, toate acestea. În dezavantaj, nu a părăsit starea beta de mulți ani, deși se îmbunătățește cu fiecare lansare. Nu voi scrie despre dezavantajele EDT, astăzi este un minus, mâine este o caracteristică fixă. Relevanța unei astfel de descrieri va dispărea rapid. Astăzi este posibil să se dezvolte în EDT, dar este neobișnuit să fii pregătit pentru un anumit număr de erori IDE.

Dacă priviți situația prin „prisma 1C” menționată mai sus, obțineți ceva de genul acesta: lansarea noului IDE nu crește vânzările de cutii, dar fluxul DEZVOLTĂTORILOR poate fi redus. Este greu de spus ce așteaptă ecosistemul în ceea ce privește confortul dezvoltatorilor, dar Microsoft a dat peste cap dezvoltatorii de telefonie mobilă, oferindu-le prea târziu serviciile sale.

Managementul dezvoltării

Totul aici este semnificativ mai bun decât în ​​scrierea codului, mai ales recent, când eforturile comunității au scos la lumină problemele automatizării administrației, au lansat prototipuri care cer aruncarea depozitului 1C în coșul de gunoi și utilizarea git, quick blame, code-review. , analiză statică, implementare automată și etc. Platformei au fost adăugate multe caracteristici care cresc nivelul de automatizare a sarcinilor de dezvoltare. Cu toate acestea, toate aceste caracteristici au fost adăugate numai și exclusiv pentru dezvoltarea propriilor noastre produse mari, când a devenit evident că nu ne putem lipsi de automatizare. Au existat îmbinări automate, comparație în trei direcții cu KDiff și toate astea. Lansat pe Github gitconverter, care, sincer, a fost tras ideologic departe de proiect gitsync, dar modificate pentru a se potrivi cu procesele companiei furnizor. Datorită băieților încăpățânați de la open-source, automatizarea dezvoltării în 1C a demarat. Un API deschis pentru configurator, IMHO, ar schimba, de asemenea, înapoierea morală a IDE-ului principal.

Astăzi, stocarea surselor 1C în git cu commit-uri legate de probleme în Jira, recenzii în Crucible, buton de la Jenkins și rapoarte Allure despre testarea codului în 1C și chiar analiză statică în SonarQube - aceasta este departe de știri, ci mai degrabă mainstream în companiile în care există multă dezvoltare 1C.

administrare

Sunt multe de spus aici. În primul rând, acesta este, desigur, un server (cluster de servere 1C). Un lucru minunat, dar datorită faptului că este o cutie complet neagră, documentată suficient de detaliat, dar într-un mod specific - stăpânirea lansării funcționării neîntrerupte în modul de încărcare mare pe mai multe servere este lotul unor câțiva aleși care poartă un medalie cu inscripția „Expert în probleme tehnologice”. Este de remarcat faptul că, în principiu, administrarea unui server 1C nu este diferită de administrarea oricărui alt server. Este o aplicație bazată pe rețea, cu mai multe fire, care consumă memorie, CPU și resurse de disc. Oferă oportunități ample pentru colectarea și diagnosticarea telemetriei.

Problema aici este că vânzătorul nu oferă nimic special în ceea ce privește soluțiile gata făcute pentru acest diagnostic. Da, există 1C: Instrumentation and Control Center, sunt chiar destul de bune, dar sunt foarte scumpe și nu toată lumea le are. Există o serie de evoluții în comunitate pentru conectarea Grafana, Zabbix, ELK și alte lucruri din setul de administrare standard, dar nu există o soluție unică care să se potrivească majorității. Sarcina își așteaptă eroul. Și dacă sunteți o companie care intenționează să se lanseze pe un cluster 1C, aveți nevoie de un expert. Al tău interior sau din exterior, dar ai nevoie de el. Este normal să existe un rol separat cu competențe pentru operarea serverului, nu fiecare utilizator 1C ar trebui să știe acest lucru, trebuie doar să înțelegeți că este nevoie de un astfel de rol. Să luăm SAP de exemplu. Acolo, un programator, cel mai probabil, nici nu se va ridica de pe scaun dacă i se cere să configureze ceva pe serverul de aplicații. Poate fi pur și simplu prost și nu-i va fi rușine. În metodologia SAP există un rol separat de angajat pentru aceasta. Din anumite motive, în industria 1C se crede că acest lucru ar trebui combinat într-un singur angajat pentru același salariu. Este o iluzie.

Dezavantajele serverului 1C

Există exact un minus - fiabilitatea. Sau, dacă preferați, imprevizibilitatea. Comportamentul neobișnuit al serverului a devenit deja subiect de discuție în oraș. Un remediu universal - oprirea serverului și ștergerea tuturor cache-urilor - este chiar descris în manualul expertului și chiar și o carte de lot este recomandată care să facă acest lucru. Dacă sistemul dvs. 1C începe să facă ceva ce nici măcar nu ar trebui să facă teoretic, este timpul să ștergeți memoria cache a datelor sesiunii. După estimarea mea, în toată țara sunt doar trei persoane care știu să opereze un server 1C fără această procedură și nu împărtășesc secrete, pentru că... ei traiesc din asta. Poate că secretul lor este că curățează datele sesiunii, dar nu spun nimănui despre asta, omule.

În rest, serverul 1C este aceeași aplicație ca oricare alta și se administrează aproape în același mod, citind documentația și bătând în țambal.

Docher

Utilitatea utilizării unui server 1C containerizat în producție nu a fost încă dovedită. Serverul nu este grupat prin simpla adăugare de noduri în spatele echilibratorului, ceea ce reduce la minimum beneficiile containerizării producției, iar practica de funcționare cu succes în containere în modul de încărcare mare nu a fost stabilită. Ca rezultat, numai dezvoltatorii folosesc Docker+1C pentru a configura medii de testare. Acolo este foarte util, aplicat, vă permite să vă jucați cu tehnologiile moderne și să luați o pauză de la deznădejdea configuratorului.

Componenta comerciala

Din punct de vedere investițional, 1C vă permite să rezolvați problema lansării rapide a ideilor de afaceri datorită capacităților largi ale claselor de aplicații. 1C din cutie oferă raportare foarte decentă, integrare cu orice, client web, client mobil, aplicație mobilă, suport pentru diverse DBMS-uri, incl. gratuit, multi-platformă atât server, cât și părți client instalate. Da, interfața de utilizare a aplicațiilor va fi galbenă, uneori acesta este un minus, dar nu întotdeauna.
Alegând 1C, o afacere primește un set de soluții software care le permit să construiască o gamă foarte largă de aplicații, precum și o mulțime de dezvoltatori de pe piață care își doresc mai puțini bani decât Javaiștii și în același timp produc rezultate mai rapid.

De exemplu, sarcina de a trimite o factură PDF către un client poate fi rezolvată într-o oră de muncă de student. Aceeași problemă în .NET poate fi rezolvată prin achiziționarea unei biblioteci proprietare sau câteva zile sau săptămâni de codare de către un dezvoltator sever și cu barbă. Uneori, ambele deodată. Și da, vorbeam doar despre generarea PDF. Nu am spus nici măcar de unde va veni acest proiect de lege. Interfața web trebuie să creeze un formular în care operatorul va introduce datele, backenderul va trebui să creeze modele dto pentru transferul JSON, modele pentru stocarea în baza de date, structura bazei de date în sine, migrarea la aceasta, formarea unui grafic afișarea acestui cont și numai atunci - PDF. Pe 1C, întreaga sarcină, de la zero, este finalizată în exact o oră.

Un sistem de contabilitate complet pentru o tarabă mică cu un proces de afaceri cumpărat/vândut se realizează în 3 ore, cu raportarea vânzărilor, contabilizarea mărfurilor la prețurile de cumpărare și vânzare, defalcate pe depozit, controlul drepturilor de acces, client web și aplicație mobilă. . Bine, am uitat de aplicație, cu aplicația nu în 3 ore, în șase.

Cât timp va dura această sarcină unui dezvoltator .NET de la instalarea unui studio vizual pe un computer curat până la demonstrarea acestuia către client? Cum rămâne cu costul dezvoltării? Același lucru.

Punctele forte ale 1C ca platformă

1C este puternic nu pentru că există ceva specific în el, care este cel mai bun din lume. Dimpotrivă, în fiecare subsistem individual puteți găsi un analog mai interesant în software-ul lumii. Cu toate acestea, pe baza unei combinații de factori, nu văd o platformă similară cu 1C. Aici se află succesul comercial. Avantajele platformei sunt împrăștiate în ea și sunt cel mai clar vizibile când vezi cum se face acest lucru în alte platforme. Practic, acestea NU sunt nici măcar caracteristici, ci dimpotrivă - o respingere a caracteristicilor în favoarea unei anumite paradigme. Câteva exemple:

  1. Unicode. Ce naiba ar putea fi mai simplu? Nu este nevoie să folosiți codificări ASCII pe un singur octet în 2019 (cu excepția integrării cu cele vechi vechi). Nu. Dar nu. Oricum, cineva dintr-un tabel folosește un varchar de un singur octet și aplicația va avea probleme cu codificări. În 2015, autorizarea LDAP a gitlab a eșuat din cauza lucrului incorect cu codificări JetBrains IDE încă nu funcționează cu Cyrillic în numele fișierelor peste tot. 1C asigură izolarea de înaltă calitate a codului aplicației de stratul bazei de date. Acolo este imposibil să tastați tabele la un nivel scăzut, iar jamburile de juniori incompetenți la nivel de bază de date sunt imposibile acolo. Da, pot fi și alte probleme cu juniorii incompetenți, dar varietatea problemelor este mult mai mică. Acum îmi veți spune că aplicația dvs. este proiectată corect și stratul de acces la baza de date este izolat așa cum ar trebui să fie. Mai aruncați o privire asupra aplicației dvs. Java personalizate corporative. Îndeaproape și sincer. Te deranjează conștiința? Atunci mă bucur pentru tine.
  2. Numerotarea documentelor/cărților de referință. În 1C cu siguranță nu este cel mai flexibil și nici cel mai bun. Dar ceea ce fac ei în software-ul bancar și în sistemele de contabilitate auto-scrise - ei bine, este doar întuneric. Fie identitatea va fi blocată (și apoi „oh, de ce avem găuri”), fie, dimpotrivă, vor face un generator care funcționează cu blocare la nivel DBMS (și va deveni un blocaj). De fapt, este destul de dificil să faci această sarcină aparent simplă - un enumerator end-to-end de entități, cu o secțiune de unicitate bazată pe un anumit set de chei, prefixare, astfel încât să nu blocheze baza de date în timpul introducerii paralele a datelor .
  3. Identificatorii înregistrărilor din baza de date. 1C a luat o decizie puternică - toți identificatorii de legături sunt absolut sintetici și atât. Și nu există probleme cu bazele de date distribuite și schimburile. Dezvoltatorii altor sisteme creează cu încăpățânare ceva de genul identității (este mai scurt!), trageți-le în GUI până când este timpul să creeze mai multe instanțe asociate (și apoi vor fi descoperite). Nu ai asta? Sincer?
  4. Liste. 1C are mecanisme destul de reușite pentru a naviga prin liste (mari) și a naviga prin ele. Permiteți-mi să fac o rezervare imediat - cu utilizarea corectă a mecanismului! În general, subiectul este destul de neplăcut, nu poate fi rezolvat în mod ideal: fie este intuitiv și simplu (dar riscul unor seturi uriașe de înregistrări pe client), fie paginarea este de una sau alta strâmbă. Cei care fac paginare o fac adesea strâmb. Cei care fac un scrollbar onest adaugă o bază de date, un canal și un client.
  5. Formulare gestionate. Fără îndoială, în clientul web interfața nu funcționează perfect. Dar funcționează. Dar pentru multe alte sisteme de contabilitate și bancare, crearea unui loc de muncă la distanță este un proiect la nivel de întreprindere. Disclaimer: din fericire pentru cei care au făcut-o inițial pe web, acest lucru nu va afecta.
  6. Aplicatie mobila. Recent, puteți scrie și aplicații mobile în același ecosistem. Este puțin mai complicat aici decât cu un client web, specificul dispozitivelor te obligă să scrii special pentru ele, dar, cu toate acestea, nu angajezi o echipă separată de dezvoltatori mobili. Dacă aveți nevoie de o aplicație pentru nevoile interne ale unei companii (atunci când o soluție mobilă pentru o problemă corporativă este mai importantă decât un design galben al UI), pur și simplu utilizați aceeași platformă din cutie.
  7. Raportare. Prin acest cuvânt nu mă refer la un sistem BI cu date mari și un decalaj în procesul ETL. Aceasta se referă la rapoartele personalului operațional care vă permit să evaluați starea contabilității aici și acum. Solduri, decontări reciproce, reevaluare etc. 1C vine din cutie cu un sistem de raportare cu setări flexibile pentru grupări, filtre și vizualizare din partea utilizatorului. Da, există analogi mai cool pe piață. Dar nu în cadrul unei soluții all-in-one și la un preț uneori mai mare decât al unei soluții all-in-one. Și mai des este chiar invers: doar raportare, dar mai scumpă decât întreaga platformă și mai proastă ca calitate.
  8. Formulare imprimabile. Ei bine, folosește .NET pentru a rezolva problema trimiterii prin e-mail a fișelor de salariu în format PDF către angajați. Și acum sarcina de a tipări facturile. Ce zici de salvarea copiilor lor în același PDF? Pentru porecla 1C, trimiterea oricărui aspect în PDF este +1 linie de cod. Aceasta înseamnă + 40 de secunde de timp de lucru, în loc de zile sau săptămâni în altă limbă. Aspectele de formulare tipărite în 1C sunt incredibil de ușor de dezvoltat și suficient de puternice pentru a concura cu omologii plătiți. Da, probabil, nu există multe oportunități interactive în documentele de foi de calcul 1C nu puteți obține rapid o diagramă 3D cu scalare folosind OpenGL. Dar este chiar necesar?

Acestea sunt doar câteva exemple în care limitarea funcționalității sau implementarea compromisurilor se dovedește a fi un beneficiu arhitectural important în viitor. Chiar și un compromis sau nu cea mai eficientă opțiune - este deja în cutie și este luată de la sine înțeles. Implementarea sa independentă va fi fie imposibilă (deoarece astfel de decizii trebuie luate la începutul proiectului și nu există timp pentru asta și nu există deloc arhitect), fie mai multe iterații costisitoare. În fiecare dintre punctele enumerate (și aceasta nu este o listă completă de soluții arhitecturale), puteți strica și introduce restricții care blochează scalarea. În orice caz, tu, ca om de afaceri, trebuie să te asiguri că programatorii tăi, atunci când realizează un „sistem de la zero”, au mâinile drepte și vor rezolva imediat problemele subtile ale sistemului.

Da, ca în orice alt sistem complex, 1C în sine are și soluții care blochează scalarea în anumite aspecte. Cu toate acestea, repet, pe baza unei combinații de factori, a costului de proprietate și a numărului de probleme deja rezolvate în prealabil, nu văd pe piață un concurent demn. Pentru același preț, obțineți un cadru de aplicații financiare, un server echilibrat în cluster, cu o interfață de utilizare și interfață web, cu o aplicație mobilă, cu raportare, integrare și o grămadă de alte lucruri. În lumea Java, angajați o echipă de front-end și back-end, depanați grămezi de cod de server scris de acasă și plătiți separat pentru 2 aplicații mobile pentru 2 sisteme de operare mobile.

Nu spun că 1C va rezolva toate cazurile, dar pentru o aplicație corporativă internă, când nu este nevoie de branding UI - ce altceva este nevoie?

Fly în Unguent

Probabil ați avut impresia că 1C va salva lumea și că toate celelalte moduri de a scrie sisteme corporative sunt greșite. Nu este deloc așa. Din punctul de vedere al unui om de afaceri, dacă alegeți 1C, atunci, pe lângă timpul rapid de lansare pe piață, trebuie să țineți cont de următoarele dezavantaje:

  • Fiabilitatea serverului. Sunt necesari specialiști cu adevărat de înaltă calitate care să-i asigure funcționarea neîntreruptă. Nu cunosc un program de instruire gata făcut pentru astfel de specialiști de la furnizor. Există cursuri de pregătire pentru examenul de Expert, dar acest lucru, după părerea mea, nu este suficient.
  • A sustine. Vezi punctul anterior. Pentru a avea suport de la furnizor, trebuie să-l cumpărați. Din anumite motive, acest lucru nu este acceptat în industria 1C. Și cu SAP, este aproape o achiziție obligatorie și nu deranjează pe nimeni. Fără asistență corporativă și fără un expert în personal, puteți rămâne singur cu probleme 1C.
  • Totuși, nu poți face absolut totul cu 1C. Acesta este un instrument și, ca orice instrument, are limite de aplicabilitate. În peisajul 1C, este foarte de dorit să existe un arhitect de sistem „non-1C”.
  • Poreclele bune 1C nu sunt mai ieftine decât programatorii buni în alte limbi. Deși, programatorii răi sunt scumpi de angajat, indiferent de limba în care scriu.

Să punctăm punctele

  • 1C este un cadru de dezvoltare rapidă a aplicațiilor (RAD) pentru afaceri și este adaptat pentru aceasta.
  • Legătură pe trei niveluri cu suport pentru SGBD-uri majore, interfață de utilizare pentru client, un ORM foarte bun și raportare
  • Posibilitati largi de integrare cu sisteme care pot face ceea ce 1C nu poate. Dacă doriți învățare automată, luați Python și trimiteți rezultatul la 1C prin http sau RabbitMQ
  • Nu este nevoie să te străduiești să faci totul folosind 1C, trebuie să îi înțelegi punctele forte și să le folosești în propriile scopuri.
  • Dezvoltatorii care gravitează spre săpa în gadget-uri tehnologice și să reproiecteze la fiecare N ani la un motor nou s-au plictisit de 1C. Totul este foarte conservator acolo.
  • Dezvoltatorii se plictisesc, de asemenea, pentru că există foarte puțină îngrijorare pentru ei din partea producătorului. Limbajul plictisitor, IDE slab. Au nevoie de modernizare.
  • Pe de altă parte, dezvoltatorii care nu își pot găsi distracția utilizând și învățând o altă tehnologie de care se bucură sunt dezvoltatori răi. Se vor plânge și se vor muta într-un alt ecosistem.
  • Angajatorii care nu permit poreclele lor 1C să scrie ceva în Python sunt angajatori răi. Vor pierde angajați cu minți curioase, iar în locul lor vor veni codificatori de maimuțe care, deși sunt de acord cu totul, vor trage software-ul corporativ în mlaștină. Va trebui să fie rescris în continuare, așa că poate ar fi mai bine să investești puțin în Python puțin mai devreme?
  • 1C este o companie comercială și implementează caracteristici exclusiv pe baza propriilor interese și oportunități. Nu o poți învinovăți pentru asta, afacerile trebuie să se gândească la profit, asta e viața
  • 1C face bani vânzând soluții pentru problemele de afaceri, nu pentru problemele dezvoltatorilor lui Vasya. Aceste două concepte se corelează, dar prioritatea este exact ceea ce am spus. Când dezvoltatorul Vasya este gata să plătească pentru o licență personală pentru 1C: Resharper, va apărea destul de repede, „Resharper” de A. Orefkova este dovada acestui lucru. Dacă vânzătorul l-ar sprijini și nu ar lupta împotriva lui, ar apărea o piață pentru software pentru dezvoltatori. Acum există un jucător și jumătate pe această piață cu rezultate discutabile și totul pentru că integrarea cu IDE-ul este negativă și totul se face în cârje.
  • Practica unui operator cu mai multe mașini va dispărea în uitare. Aplicațiile moderne sunt prea mari pentru a fi reținute atât din partea codului, cât și din partea utilizării în afaceri. Serverul 1C devine, de asemenea, din ce în ce mai complex, va fi imposibil să dețină toate tipurile de expertiză într-un singur angajat. Acest lucru ar trebui să implice o cerere de specialiști, ceea ce înseamnă atractivitatea profesiei de 1C și o creștere a salariilor. Dacă anterior Vasya lucra trei în unu pentru un singur salariu, acum trebuie să angajezi doi Vasya, iar competiția dintre Vasya poate stimula creșterea generală a nivelului lor.

Concluzie

1C este un produs foarte demn. În gama mea de preț, nu cunosc deloc analogi, scrieți în comentarii dacă există. Cu toate acestea, ieșirea dezvoltatorilor din ecosistem devine din ce în ce mai vizibilă, iar aceasta este o „exod de creiere”, indiferent de cum ați privi. Industria este înfometată de modernizare.
Dacă sunteți dezvoltator, nu vă agățați de 1C și nu credeți că totul este magic în alte limbi. Când ești junior, poate. De îndată ce ceva mai mare trebuie rezolvat, soluțiile gata făcute vor trebui căutate mai mult timp și finalizate mai intens. În ceea ce privește calitatea „blocurilor” din care se poate construi o soluție, 1C este foarte, foarte bun.

Și încă un lucru - dacă o poreclă 1C vine la tine pentru a angaja, atunci porecla 1C poate fi numită în siguranță în funcția de analiști principali. Înțelegerea lor asupra sarcinii, domeniului și abilitățile de descompunere este excelentă. Sunt sigur că acest lucru se datorează tocmai utilizării forțate a DDD în dezvoltarea 1C. O persoană este instruită să se gândească la semnificația unei sarcini în primul rând, la conexiunile dintre obiectele domeniului subiectului și, în același timp, are un fundal tehnic în tehnologii de integrare și formate de schimb de date.

Fii conștient de faptul că cadrul ideal nu există și ai grijă de tine.
Bun tuturor!

PS: multumesc mult speshuric pentru asistență în pregătirea articolului.

Numai utilizatorii înregistrați pot participa la sondaj. Loghează-te, Vă rog.

Aveți 1C în întreprinderea dvs.?

  • 13,3%Deloc.71

  • 30,3%Există, dar numai în departamentul de contabilitate undeva. Sisteme de bază pe alte platforme162

  • 41,4%Da, principalele procese de afaceri funcționează pe el221

  • 15,0%1C trebuie să moară, viitorul aparține %technology_name%80

Au votat 534 de utilizatori. 99 utilizatori s-au abținut.

Sursa: www.habr.com

Adauga un comentariu