Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?

Эй Ҳабр!
Дар ин мақола мо ҳикояро дар бораи он ки чӣ тавр дар дохили он кор мекунад, оғоз хоҳем кард платформаи "1С: Enterprise 8" ва дар тахияи он кадом технологияхо истифода мешаванд.

Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?

Чаро мо фикр мекунем, ки ин ҷолиб аст? Аввалан, аз он сабаб, ки платформаи 1C: Enterprise 8 як барномаи калон (зиёда аз 10 миллион сатри код) дар C++ (мизоҷ, сервер ва ғ.), JavaScript (клиенти веб) ва ба наздикӣ, Ва мебошад. Java. Лоиҳаҳои калон ҳадди аққал аз рӯи миқёсашон ҷолиб буда метавонанд, зеро масъалаҳое, ки дар заминаи коди хурд ноаёнанд, дар чунин лоиҳаҳо пурра ба вуҷуд меоянд. Дуюм, "1C: Enterprise" як маҳсулоти такроршаванда ва "қуттӣ" аст ва дар бораи чунин пешрафтҳо дар Habré мақолаҳои хеле кам мавҷуданд. Донистани он, ки зиндагӣ дар дигар дастаҳо ва ширкатҳо чӣ гуна аст, ҳамеша ҷолиб аст.

Пас биёед оғоз кунем. Дар ин мақола мо дар бораи баъзе технологияҳое, ки дар платформа истифода мешаванд, шарҳ медиҳем ва манзараро бидуни ғарқ шудан ба татбиқи он шарҳ медиҳем. Воқеан, барои бисёр механизмҳо, як ҳикояи муфассал мақолаи алоҳида ва барои баъзеҳо як китоби пурраро талаб мекунад!
Барои оғоз кардан, бояд дар бораи чизҳои асосӣ қарор қабул кунед - платформаи 1C: Enterprise чист ва он аз кадом ҷузъҳо иборат аст. Ҷавоб ба ин савол чандон оддӣ нест, зеро истилоҳи "Платформа" (барои кӯтоҳ, мо онро ҳамин тавр меномем) ба воситаи таҳияи барномаҳои тиҷоратӣ, муҳити корӣ ва абзорҳои маъмурӣ ишора мекунад. Компонентҳои зеринро тақрибан фарқ кардан мумкин аст:

  • кластери сервер
  • Мизоҷи "лоғар" қодир аст тавассути http ва протоколи дуии худ ба сервер пайваст шавад
  • муштарӣ барои кор дар меъмории дуқабата бо пойгоҳи додаҳо дар диски сахт ё ҷузвдони шабакавӣ
  • муштарии веб
  • воситаҳои идоракунии сервери барномаҳо
  • муҳити рушд (бо номи Configurator маълум аст)
  • муҳити корӣ барои iOS, Android ва Windows Phone (платформаи мобилии 1C)

Ҳамаи ин қисмҳо, ба истиснои мизоҷи веб, дар C++ навишта шудаанд. Илова бар ин, ба наздикӣ эълон шудааст Конфигуратори насли нав, дар Java навишта шудааст.

Барномаҳои ватанӣ

C++ 03 барои таҳияи барномаҳои маҳаллӣ истифода мешавад. Барои Windows, Microsoft Visual C++ 12 (профили мувофиқ бо Windows XP) ҳамчун компилятор ва барои Linux ва Android - gcc 4.8, барои iOS - clang 5.0 истифода мешавад. Китобхонаи стандартии истифодашаванда барои ҳама системаҳои оператсионӣ ва компиляторҳо якхела аст - STLPort. Ин ҳалли эҳтимолияти хатогиҳои мушаххаси STL-ро коҳиш медиҳад. Дар айни замон мо нақша дорем, ки ба татбиқи STL, ки бо CLang фиристода шудааст, гузаред, зеро STLPort қатъ карда шудааст ва бо режими фаъоли gcc C++ 11 номувофиқ аст.
Пойгоҳи рамзи сервер 99% маъмул аст, муштарӣ - 95%. Ғайр аз он, ҳатто платформаи мобилӣ ҳамон рамзи C++-ро ҳамчун "калон" истифода мебарад, гарчанде ки фоизи муттаҳидшавӣ дар он ҷо каме пасттар аст.
Мисли аксари корбарони C++, мо даъво намекунем, ки 100% имкониятҳои забон ва китобхонаҳои онро истифода барем. Ҳамин тавр, мо амалан Boost-ро истифода намебарем ва яке аз хусусиятҳои забон ин кастинги динамикӣ мебошад. Дар айни замон, мо фаъолона истифода мебарем:

  • STL (махсусан сатрҳо, контейнерҳо ва алгоритмҳо)
  • мероси сершумор, аз ҷумла. мероси сершумори амалӣ
  • қолибҳо
  • истисноҳо
  • нишондиҳандаҳои интеллектуалӣ (амалии фармоишӣ)

Бо истифода аз мероси сершумори интерфейсҳо (синфҳои комилан абстрактӣ), модели ҷузъӣ имконпазир мегардад, ки дар поён муҳокима карда мешавад.

Ҷузъҳо

Барои таъмини модулият, тамоми функсияҳо ба ҷузъҳо тақсим карда мешаванд, ки китобхонаҳои динамикӣ мебошанд (*.dll барои Windows, *.so барои Linux). Дар маҷмӯъ зиёда аз яксаду панҷоҳ ҷузъ вуҷуд дорад; дар ин ҷо тавсифи баъзе аз онҳо ҳастанд:

пуштибонӣ мекунанд
Муҳаррики метамаълумоти платформаро дар бар мегирад

акнт
Объектҳое, ки таҳиягарони барнома барои сохтани сабтҳои баҳисобгирӣ истифода мебаранд (нақшаҳои ҳисобҳо ва реестрҳои баҳисобгирӣ)

bsl
Муҳаррики иҷрокунандаи забони дохилӣ

Нук
Амалисозии фармоишии тақсимкунандаи хотира

dbeng8
Муҳаррики пойгоҳи додаҳои файл. Муҳаррики оддии махзани сервери файлӣ дар асоси ISAM, ки инчунин протсессори оддии SQL-ро дар бар мегирад

wbase
Синфҳо ва функсияҳои асосиро барои татбиқи интерфейси корбарии Windows - синфҳои тиреза, дастрасии GDI ва ғайра дар бар мегирад.

Тақсим ба ҷузъҳои сершумор аз якчанд нуқтаи назар муфид аст:

  • Ҷудокунӣ ба тарҳрезии беҳтар мусоидат мекунад, бахусус ҷудокунии беҳтари код
  • Аз маҷмӯи ҷузъҳо шумо метавонед имконоти гуногуни интиқолро ба таври фасеҳ ҷамъ кунед:
    • Масалан, насби муштарии борик дорои wbase хоҳад буд, аммо пуштибонӣ надорад
    • аммо дар сервери wbase, баръакс, он нахоҳад буд
    • ҳарду вариант албатта дорои nuke ва bsl мебошанд

Ҳамаи ҷузъҳои зарурӣ барои ин имконоти оғозёбӣ ҳангоми оғоз кардани барнома бор карда мешаванд. Ин, аз ҷумла, барои сабти синфҳои SCOM зарур аст, ки дар поён муҳокима хоҳанд шуд.

SCOM

Барои таҷзия дар сатҳи поёнтар, системаи SCOM истифода мешавад, китобхонаи шабеҳи идеология ба ATL. Барои онҳое, ки бо ATL кор накардаанд, мо имкониятҳо ва хусусиятҳои асосиро мухтасар номбар мекунем.
Барои синфи махсус тарҳрезишудаи SCOM:

  • Усулҳои заводро пешниҳод мекунад, ки ба шумо имкон медиҳад синфро аз ҷузъҳои дигар бо донистани танҳо номи он (бе ошкор кардани татбиқ) эҷод кунед.
  • Инфрасохтори нишондиҳандаҳои интеллектуалии ҳисобкуниро таъмин мекунад. Давомнокии синфи SCOM лозим нест, ки дастӣ назорат карда шавад
  • Ба шумо имкон медиҳад фаҳмед, ки оё объект интерфейси мушаххасро амалӣ мекунад ва ба таври худкор нишондиҳандаро ба объект ба нишондиҳанда ба интерфейс табдил медиҳад
  • Объекти хидматрасонӣ эҷод кунед, ки ҳамеша тавассути усули get_service дастрас аст ва ғайра.

Масалан, шумо метавонед синфро барои хондани JSON (масалан, JSONStreamReader) дар ҷузъи json.dll тавсиф кунед.
Синфҳо ва мисолҳоро аз ҷузъҳои дигар сохтан мумкин аст; онҳо бояд дар мошини SCOM ба қайд гирифта шаванд:

SCOM_CLASS_ENTRY(JSONStreamReader)

Ин макрос синфи махсуси сабткунандаи статикиро тавсиф мекунад, ки конструктори он хангоми ба хотира бор карда шудани компонент даъват карда мешавад.
Пас аз ин, шумо метавонед як мисоли онро дар ҷузъҳои дигар эҷод кунед:

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

Барои дастгирии хидматҳо, SCOM инфрасохтори иловагӣ ва хеле мураккабро пешниҳод мекунад. Дар маркази он консепсияи раванди SCOM мебошад, ки ҳамчун контейнер барои хидматрасонӣ хидмат мекунад (яъне, нақши Locator хидматро мебозад) ва инчунин дорои ҳатмӣ ба захираҳои маҳаллӣ мебошад. Раванди SCOM ба риштаи OS алоқаманд аст. Ба шарофати ин, дар дохили барнома шумо метавонед чунин хидматҳоро дастрас кунед:

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

Гузашта аз ин, бо иваз кардани равандҳои мантиқии (SCOM), ки ба ришта вобастаанд, шумо метавонед барномаҳоеро ба даст оред, ки аз нуқтаи назари фазои иттилоотӣ амалан мустақил буда, дар як ришта кор мекунанд. Мизоҷи тунуки мо бо махзани файлҳо ҳамин тавр кор мекунад - дар дохили як раванди ОС ду раванди SCOM мавҷуд аст, яке бо муштарӣ ва дуввум бо сервер. Ин равиш ба мо имкон медиҳад, ки навиштани кодро ягона кунем, ки ҳам дар базаи файлҳои маҳаллӣ ва ҳам дар версияи “воқеии” муштарӣ-сервер кор хоҳад кард. Нархи чунин якхела гарон аст, аммо амалия нишон медиҳад, ки он меарзад.

Дар асоси модели ҷузъи SCOM ҳам мантиқи тиҷорат ва ҳам қисми интерфейси 1C: Enterprise амалӣ карда мешавад.

Интерфейси корбар

Дар омади гап, дар бораи интерфейсҳо. Мо назорати стандартии Windows-ро истифода намебарем; назорати мо бевосита дар API Windows амалӣ карда мешавад. Барои версияи Linux қабате сохта шудааст, ки тавассути китобхонаи wxWidgets кор мекунад.
Китобхонаи идоракунӣ аз қисмҳои дигари 1C: Enterprise вобаста нест ва аз ҷониби мо дар якчанд утилитаҳои дигари дохилии хурд истифода мешавад.

Дар тӯли солҳои рушди 1C: Enterprise, намуди идоракунӣ тағир ёфт, аммо тағироти ҷиддии принсипҳо танҳо як маротиба, дар соли 2009, бо нашри версияи 8.2 ва пайдоиши "шаклҳои идорашаванда" ба амал омад. Илова ба тағир додани намуди зоҳирӣ, принсипи тарҳбандии формаҳо ба куллӣ тағйир ёфт - рад кардани ҷойгиркунии пиксел ба пиксел ба элементҳо ба манфиати ҷараёнҳои элементҳо вуҷуд дошт. Илова бар ин, дар модели нав, идораҳо мустақиман бо объектҳои домен кор намекунанд, балки бо DTO-ҳои махсус (Объектҳои интиқоли маълумот).
Ин тағирот имкон дод, ки мизоҷи веби 1C: Enterprise эҷод карда шавад, ки мантиқи C++-и идоракунии JavaScript-ро такрор мекунад. Мо кӯшиш мекунем, ки баробарии функсионалии байни муштариёни борик ва вебро нигоҳ дорем. Дар ҳолатҳое, ки ин имконнопазир аст, масалан аз сабаби маҳдудияти API JavaScript дастрас (масалан, қобилияти кор бо файлҳо хеле маҳдуд аст), мо аксар вақт функсияҳои заруриро бо истифода аз васеъшавии браузери дар C++ навишташуда амалӣ менамоем. Ҳоло мо Internet Explorer ва Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows ва Linux) ва Safari (MacOS) -ро дастгирӣ мекунем.

Илова бар ин, технологияи шаклҳои идорашаванда барои эҷоди интерфейс барои замимаҳои мобилӣ дар платформаи 1С истифода мешавад. Дар дастгоҳҳои мобилӣ, коркарди идоракунӣ бо истифода аз технологияҳои ба системаи оператсионӣ хос амалӣ карда мешавад, аммо барои мантиқи тарҳбандии шакл ва вокуниши интерфейс ҳамон рамзе, ки дар платформаи "калон" 1C: Enterprise истифода мешавад.

Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?
Интерфейси 1C дар OS Linux

Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?
Интерфейси 1C дар дастгоҳи мобилӣ

Интерфейси 1C дар платформаҳои дигар Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?
Интерфейси 1C дар OS Windows

Платформаи "1С: Корхона" - дар зери сарпӯш чӣ аст?
Интерфейси 1C - муштарии веб

кушода

Гарчанде ки мо китобхонаҳои стандартиро барои таҳиягарони C++ зери Windows истифода намебарем (MFC, идоракунӣ аз WinAPI), мо на ҳама ҷузъҳоро худамон менависем. Китобхона аллакай зикр шудааст wxWidgets, ва мо инчунин истифода мебарем:

  • пойро барои кор бо HTTP ва FTP.
  • OpenSSL барои кор бо криптография ва таъсиси пайвастҳои TLS
  • libxml2 ва libxslt барои таҳлили XML
  • озодона барои кор бо протоколҳои почта (POP3, SMTP, IMAP)
  • тақлидкунанда барои таҳлили паёмҳои почтаи электронӣ
  • sqllite барои нигоҳ доштани гузоришҳои корбарон
  • ICU барои интернационализация

Рӯйхат идома дорад.
Илова бар ин, мо версияи хеле тағирёфтаро истифода мебарем Санҷиши Google и Google Mock ҳангоми таҳияи санҷишҳои воҳид.
Китобхонаҳо мутобиқатро талаб мекарданд, то бо модели ташкили ҷузъи SCOM мувофиқ бошанд.
Паҳншавии 1C платформаро як санҷиши олии қувват барои китобхонаҳои дар он истифодашаванда месозад. Як қатор корбарон ва сенарияҳо хатогиҳоро ҳатто дар соҳаҳои кам истифодашавандаи код зуд ошкор мекунанд. Мо худамон онҳоро ислоҳ мекунем ва кӯшиш мекунем, ки онҳоро ба муаллифони китобхона баргардонем. Таҷрибаи ҳамкорӣ хеле гуногун мегардад.
Таҳиякунандагон пойро и озодона ба зудӣ ба кашидани дархостҳо ҷавоб медиҳад, аммо ямоқи, масалан, дар OpenSSL Мо ҳеҷ гоҳ натавонистем онро баргардонем.

хулоса

Дар мақола мо ба якчанд ҷанбаҳои асосии рушди платформаи 1C: Enterprise дахл кардем. Дар доираи маҳдуди мақола мо танҳо ба баъзе ҷанбаҳои ҷолиб, ба назари мо, дахл кардем.
Тавсифи умумии механизмҳои гуногуни платформаро пайдо кардан мумкин аст дар ин ҷо.
Кадом мавзӯъҳо барои шумо дар мақолаҳои оянда ҷолиб хоҳанд буд?

Платформаи мобилии 1С чӣ гуна амалӣ карда мешавад?
Тавсифи сохтори дохилии веб мизоҷ?
Ё шояд шумо ба раванди интихоби хусусиятҳо барои релизҳои нав, таҳия ва озмоиш таваҷҷӯҳ доред?

Дар шарҳҳо нависед!

Манбаъ: will.com

Илова Эзоҳ