«1С: Кәсіпорын» платформасы - қақпақтың астында не бар?

Эй Хабр!
Бұл мақалада біз оның ішінде қалай жұмыс істейтіні туралы әңгімені бастаймыз «1С: Кәсіпорын 8» платформасы және оны әзірлеуде қандай технологиялар қолданылады.

«1С: Кәсіпорын» платформасы - қақпақтың астында не бар?

Неліктен бұл қызықты деп ойлаймыз? Біріншіден, 1C:Enterprise 8 платформасы C++ (клиент, сервер және т.б.), JavaScript (веб-клиент) және соңғы кездері, Және де үлкен (10 миллион жолдан астам код жолдары) қосымшасы болғандықтан, Java. Ірі жобалар ең болмағанда ауқымдылығымен қызықты болуы мүмкін, өйткені шағын кодтық базада көрінбейтін мәселелер мұндай жобаларда толық күшінде пайда болады. Екіншіден, «1С: Кәсіпорын» қайталанатын, «қораптағы» өнім және Хабреде мұндай әзірлемелер туралы мақалалар өте аз. Басқа командалар мен компаниялардағы өмірдің қалай болатынын білу әрқашан қызықты.

Ендеше, бастайық. Бұл мақалада біз платформада қолданылатын кейбір технологияларға шолу жасаймыз және енгізуге терең бойламастан ландшафтты көрсетеміз. Шынында да, көптеген механизмдер үшін егжей-тегжейлі әңгіме бөлек мақаланы, ал кейбіреулер үшін тұтас кітапты қажет етеді!
Алдымен, негізгі нәрселерді шешкен жөн - 1С: Кәсіпорын платформасы дегеніміз не және ол қандай компоненттерден тұрады. Бұл сұрақтың жауабы соншалықты қарапайым емес, өйткені «Платформа» термині (қысқаша айтқанда, біз оны осылай атаймыз) іскерлік қосымшаларды, орындалу ортасын және басқару құралдарын әзірлеуге арналған құралды білдіреді. Келесі компоненттерді шамамен ажыратуға болады:

  • сервер кластері
  • http және өзінің екілік протоколы арқылы серверге қосылуға қабілетті «жұқа» клиент
  • қатты дискіде немесе желілік қалтада орналасқан дерекқоры бар екі деңгейлі архитектурада жұмыс істеуге арналған клиент
  • веб-клиент
  • қолданбалы серверді басқару құралдары
  • әзірлеу ортасы (конфигуратор ретінде белгілі)
  • iOS, Android және Windows Phone үшін жұмыс уақыты ортасы (мобильді платформа 1С)

Бұл бөліктердің барлығы, веб-клиенттен басқасы, C++ тілінде жазылған. Сонымен қатар, жақында жарияланған Жаңа буын конфигураторы, Java тілінде жазылған.

Жергілікті қолданбалар

C++ 03 жергілікті қолданбаларды әзірлеу үшін қолданылады. Windows үшін компилятор ретінде Microsoft Visual C++ 12 (Windows XP жүйесімен үйлесімді профиль) пайдаланылады, ал Linux және Android үшін – gcc 4.8, iOS үшін – clang 5.0. Қолданылатын стандартты кітапхана барлық операциялық жүйелер мен компиляторлар үшін бірдей - STLPort. Бұл шешім STL енгізуге қатысты қателердің ықтималдығын азайтады. Қазіргі уақытта біз CLang арқылы жеткізілген STL іске асыруға көшуді жоспарлап отырмыз, себебі STLPort тоқтатылды және gcc C++ 11 қосылған режимімен үйлеспейді.
Сервердің кодтық базасы 99%, клиенттікі - 95%. Оның үстіне, тіпті мобильді платформа «үлкен» сияқты C++ кодын пайдаланады, дегенмен біріктіру пайызы біршама төмен.
Көптеген C++ пайдаланушылары сияқты, біз тілдің және оның кітапханаларының мүмкіндіктерін 100% пайдаланамыз деп талап етпейміз. Сонымен, біз іс жүзінде Boost қолданбаймыз және тілдік мүмкіндіктердің бірі - динамикалық түрдегі кастинг. Сонымен бірге біз белсенді түрде қолданамыз:

  • STL (әсіресе жолдар, контейнерлер және алгоритмдер)
  • көп мұрагерлік, соның ішінде. іске асырудың бірнеше мұрасы
  • үлгілер
  • ерекше жағдайлар
  • смарт көрсеткіштер (арнайы енгізу)

Интерфейстердің бірнеше тұқым қуалауын (толық дерексіз сыныптар) пайдалану арқылы төменде талқыланатын құрамдас модель мүмкін болады.

Құрамдастар

Модульділікті қамтамасыз ету үшін барлық функциялар динамикалық кітапханалар болып табылатын компоненттерге бөлінеді (Windows үшін *.dll, Linux үшін *.so). Барлығы жүз елуден астам құрамдас бөліктер бар, олардың кейбіреулерінің сипаттамасы:

серверлік
Платформаның метадеректер механизмін қамтиды

акцент
Қолданбаны әзірлеушілер бухгалтерлік жазбаларды құру үшін пайдаланатын нысандар (шоттар схемалары және есеп регистрлері)

bsl
Енгізілген тілді орындау механизмі

Nuke
Жад бөлгішті таңдамалы іске асыру

dbeng8
Файлдық дерекқор механизмі. Қарапайым SQL процессорын қамтитын ISAM негізіндегі қарапайым файлдық сервер дерекқор механизмі

wbase
Құрамында Windows пайдаланушы интерфейсін іске асыруға арналған негізгі сыныптар мен функциялар – терезе сыныптары, GDI қатынасы және т.б.

Бірнеше құрамдас бөліктерге бөлу бірнеше көзқарас бойынша пайдалы:

  • Бөлу дизайнды жақсартуға, атап айтқанда жақсы кодты оқшаулауға ықпал етеді
  • Құрамдас бөліктерден сіз әртүрлі жеткізу опцияларын икемді түрде жинай аласыз:
    • Мысалы, жұқа клиент орнатуында wbase болады, бірақ сервері болмайды
    • бірақ wbase серверінде, керісінше, ол болмайды
    • екі нұсқада әрине nuke және bsl болады

Осы іске қосу опциясына қажетті барлық құрамдас бөліктер бағдарлама іске қосылғанда жүктеледі. Бұл, атап айтқанда, төменде талқыланатын SCOM сыныптарын тіркеу үшін қажет.

SCOM

Төменгі деңгейде ыдырау үшін SCOM жүйесі пайдаланылады, идеологиясы ATL-ге ұқсас кітапхана. ATL-мен жұмыс істемегендер үшін біз негізгі мүмкіндіктер мен мүмкіндіктерді қысқаша тізімдейміз.
Арнайы әзірленген SCOM класы үшін:

  • Тек оның атын ғана білетін басқа құрамдас бөліктен класс жасауға мүмкіндік беретін зауыттық әдістерді ұсынады (іске асыруды көрсетпей)
  • Сілтемелерді санайтын смарт көрсеткіш инфрақұрылымын қамтамасыз етеді. SCOM класының қызмет ету мерзімін қолмен бақылау қажет емес
  • Нысанның белгілі бір интерфейсті жүзеге асыратынын анықтауға және нысанға көрсеткішті интерфейске арналған көрсеткішке автоматты түрде түрлендіруге мүмкіндік береді.
  • get_service әдісі арқылы әрқашан қол жетімді қызмет нысанын жасаңыз, т.б.

Мысалы, json.dll компонентінде JSON оқуға арналған сыныпты (мысалы, JSONStreamReader) сипаттай аласыз.
Кластар мен даналарды басқа компоненттерден жасауға болады, олар SCOM машинасында тіркелуі керек:

SCOM_CLASS_ENTRY(JSONStreamReader)

Бұл макрос арнайы статикалық жазғыш класын сипаттайды, оның конструкторы компонент жадыға жүктелген кезде шақырылады.
Осыдан кейін оның данасын басқа құрамдас бөлікте жасауға болады:

IJSONStreamReaderPtr jsonReader = create_instance<IJSONStreamReader>(SCOM_CLSIDOF(JSONStreamReader));

Қызметтерді қолдау үшін SCOM қосымша, біршама күрделі инфрақұрылымды ұсынады. Оның орталық бөлігінде қызметтерді іске қосу үшін контейнер ретінде қызмет ететін (яғни, қызмет көрсету локаторы рөлін атқаратын) және локализацияланған ресурстармен байланыстыруды қамтитын SCOM процесінің тұжырымдамасы жатыр. SCOM процесі ОЖ ағынымен байланысты. Осының арқасында қосымшаның ішінде сіз келесідей қызметтерді ала аласыз:

SCOM_Process* process = core::current_process();
if (process)
         return get_service<IMyService>(process);

Сонымен қатар, ағынмен байланыстырылған логикалық (SCOM) процестерді ауыстыру арқылы бір ағынның ішінде жұмыс істейтін ақпараттық кеңістік тұрғысынан іс жүзінде тәуелсіз қолданбаларды алуға болады. Біздің жұқа клиент файлдық дерекқормен осылай жұмыс істейді - бір ОЖ процесінің ішінде екі SCOM процесі бар, біреуі клиентпен, екіншісі сервермен байланысты. Бұл тәсіл жергілікті файлдық дерекқорда да, «нақты» клиент-сервер нұсқасында да жұмыс істейтін кодты жазуды бір жүйеге келтіруге мүмкіндік береді. Мұндай біркелкіліктің бағасы жоғары, бірақ тәжірибе көрсеткендей, бұл оған тұрарлық.

SCOM құрамдас моделінің негізінде 1С: Кәсіпорынның бизнес логикасы да, интерфейс бөлігі де жүзеге асырылады.

Пайдаланушы интерфейсі

Айтпақшы, интерфейстер туралы. Біз стандартты Windows басқару элементтерін пайдаланбаймыз; біздің басқару элементтері тікелей Windows API интерфейсінде жүзеге асырылады. Linux нұсқасы үшін wxWidgets кітапханасы арқылы жұмыс істейтін қабат жасалды.
Басқару құралдарының кітапханасы 1C: Enterprise басқа бөліктеріне тәуелді емес және біз басқа бірнеше шағын ішкі утилиталарда пайдаланамыз.

1С: Кәсіпорынның даму жылдарында басқару элементтерінің сыртқы түрі өзгерді, бірақ принциптердегі елеулі өзгерістер тек бір рет болды, 2009 жылы, 8.2 нұсқасының шығарылуымен және «басқарылатын пішіндердің» пайда болуымен. Сыртқы түрін өзгертуден басқа, пішінді орналастыру принципі түбегейлі өзгерді - элементтердің ағындық орналасуының пайдасына элементтерді пиксель бойынша орналастырудан бас тарту болды. Сонымен қатар, жаңа үлгіде басқару элементтері тікелей домен нысандарымен жұмыс істемейді, бірақ арнайы DTO (Мәліметтерді тасымалдау объектілері).
Бұл өзгерістер JavaScript басқару элементтерінің C++ логикасын қайталайтын 1C: Enterprise веб-клиентін жасауға мүмкіндік берді. Біз жұқа және веб-клиенттер арасындағы функционалдық теңдікті сақтауға тырысамыз. Бұл мүмкін емес жағдайларда, мысалы, қол жетімді JavaScript API шектеулеріне байланысты (мысалы, файлдармен жұмыс істеу мүмкіндігі өте шектеулі), біз жиі C++ тілінде жазылған браузер кеңейтімдерін пайдалана отырып, қажетті функционалдылықты жүзеге асырамыз. Қазіргі уақытта біз Internet Explorer және Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows және Linux) және Safari (MacOS) қолдаймыз.

Сонымен қатар, басқарылатын пішіндер технологиясы 1С платформасында мобильді қосымшаларға арналған интерфейсті жасау үшін қолданылады. Мобильді құрылғыларда басқару элементтерін көрсету операциялық жүйеге тән технологияларды қолдану арқылы жүзеге асырылады, бірақ пішіннің орналасу логикасы мен интерфейске жауап беру үшін «үлкен» 1C: Enterprise платформасындағыдай код қолданылады.

«1С: Кәсіпорын» платформасы - қақпақтың астында не бар?
Linux операциялық жүйесіндегі 1С интерфейсі

«1С: Кәсіпорын» платформасы - қақпақтың астында не бар?
Мобильді құрылғыдағы 1С интерфейсі

Басқа платформалардағы 1С интерфейсі «1С: Кәсіпорын» платформасы - қақпақтың астында не бар?
Windows операциялық жүйесіндегі 1С интерфейсі

«1С: Кәсіпорын» платформасы - қақпақтың астында не бар?
Интерфейс 1С - веб-клиент

Ашық көзі

Біз Windows жүйесінде C++ әзірлеушілері үшін стандартты кітапханаларды қолданбасақ та (MFC, WinAPI басқару элементтері), біз барлық құрамдастарды өзіміз жазбаймыз. Кітапхана туралы бұған дейін де айтылды wxWidgets, және біз де қолданамыз:

  • Curl HTTP және FTP-мен жұмыс істеуге арналған.
  • OpenSSL криптографиямен жұмыс істеу және TLS қосылымдарын орнату үшін
  • libxml2 және libxslt XML талдауы үшін
  • либетпан пошта хаттамаларымен жұмыс істеу үшін (POP3, SMTP, IMAP)
  • миметикалық электрондық пошта хабарларын талдау үшін
  • sqllite пайдаланушы журналдарын сақтауға арналған
  • ICU интернационалдандыру үшін

Тізім жалғасуда.
Бұған қоса, біз жоғары өзгертілген нұсқаны қолданамыз Google сынағы и Google Mock бірлік сынақтарын әзірлеу кезінде.
Кітапханалар SCOM құрамдас ұйымының үлгісімен үйлесімді болу үшін бейімделуді қажет етті.
1С-тің таралуы платформаны онда қолданылатын кітапханалар үшін керемет беріктік сынағы етеді. Әртүрлі пайдаланушылар мен сценарийлер кодтың ең сирек қолданылатын аймақтарындағы қателерді тез көрсетеді. Оларды өзіміз түзетіп, кітапхана авторларына қайтаруға тырысамыз. Өзара әрекеттесу тәжірибесі өте әртүрлі болып шығады.
Әзірлеушілер Curl и либетпан тарту сұрауларына жылдам жауап береді, бірақ патч, мысалы, в OpenSSL Біз оны ешқашан қайтара алмадық.

қорытынды

Мақалада біз 1С: Кәсіпорын платформасын дамытудың бірнеше негізгі аспектілеріне тоқталдық. Мақаланың шектеулі ауқымында біз кейбір қызықты, біздің ойымызша, аспектілерді ғана қозғадық.
Әртүрлі платформа механизмдерінің жалпы сипаттамасын табуға болады осында.
Болашақ мақалаларда сізді қандай тақырыптар қызықтырады?

1С мобильді платформасы қалай жүзеге асырылады?
Веб-клиенттің ішкі құрылымының сипаттамасы?
Немесе сізді жаңа шығарылымдар үшін мүмкіндіктерді таңдау, әзірлеу және тестілеу процесі қызықтыратын шығар?

Пікірлерге жазыңыз!

Ақпарат көзі: www.habr.com

пікір қалдыру