Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?

Hlo Habr!
Hauv tsab xov xwm no peb yuav pib zaj dab neeg hais txog yuav ua li cas nws ua haujlwm sab hauv platform "1C: Kev Lag Luam 8" thiab dab tsi technologies siv nyob rau hauv nws txoj kev loj hlob.

Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?

Vim li cas peb xav tias qhov no yog qhov nthuav? Ua ntej, vim tias 1C: Kev Lag Luam 8 platform yog qhov loj (ntau tshaj 10 lab kab ntawm kab) daim ntawv thov hauv C ++ (tus neeg siv khoom, neeg rau zaub mov, thiab lwm yam), JavaScript (tus neeg siv lub vev xaib), thiab, tsis ntev los no, Thiab. Java. Cov phiaj xwm loj tuaj yeem nthuav dav yam tsawg kawg yog vim lawv cov nplai, vim tias cov teeb meem uas tsis pom hauv cov cai me me tshwm sim nyob rau hauv tag nrho cov quab yuam nyob rau hauv xws li tej yaam num. Qhov thib ob, "1C: Kev Lag Luam" yog ib qho khoom siv rov ua dua, "boxed" cov khoom, thiab muaj ob peb nqe lus hais txog kev txhim kho ntawm HabrΓ©. Nws tseem yog ib txwm nthuav kom paub tias lub neej nyob hauv lwm pab pawg thiab tuam txhab li cas.

Yog li cia peb pib. Hauv tsab xov xwm no peb yuav muab cov ntsiab lus ntawm qee cov thev naus laus zis uas tau siv hauv lub platform thiab qhia txog cov toj roob hauv pes, tsis muaj kev dhia dej tob rau hauv kev siv. Tseeb, rau ntau lub tswv yim, zaj dab neeg ntxaws yuav xav tau ib tsab xov xwm cais, thiab rau qee tus, tag nrho phau ntawv!
Yuav pib nrog, nws tsim nyog txiav txim siab txog yam tseem ceeb - dab tsi 1C: Kev lag luam platform yog dab tsi thiab cov khoom nws muaj. Cov lus teb rau lo lus nug no tsis yog yooj yim, vim hais tias lo lus "Platform" (rau brevity, peb yuav hu nws li ntawd) hais txog ib tug txhais tau tias rau kev tsim kev lag luam daim ntawv thov, ib puag ncig runtime, thiab kev tswj cov cuab yeej. Cov khoom hauv qab no tuaj yeem paub qhov txawv txav:

  • server pawg
  • "nyias" tus neeg muaj peev xwm txuas rau lub server ntawm http thiab nws tus kheej binary raws tu qauv
  • tus neeg siv rau kev ua haujlwm nyob rau hauv ob-tier architecture nrog ib tug database nyob rau hauv ib tug hard drive los yog network folder
  • web client
  • daim ntawv thov server tswj cov cuab yeej
  • ib puag ncig kev loj hlob (lub npe hu ua Configurator)
  • runtime ib puag ncig rau iOS, Android thiab Windows Phone (mobile platform 1C)

Tag nrho cov seem no, tshwj tsis yog tus neeg siv lub vev xaib, tau sau hauv C ++. Tsis tas li ntawd, muaj qhov tsis ntev los no tshaj tawm Tshiab tiam configurator, sau hauv Java.

Native apps

C ++ 03 yog siv los tsim cov ntawv thov ib txwm muaj. Rau Windows, Microsoft Visual C ++ 12 (ib qho profile sib xws nrog Windows XP) yog siv los ua tus sau, thiab rau Linux thiab Android - gcc 4.8, rau iOS - clang 5.0. Cov tsev qiv ntawv tus qauv siv yog tib yam rau txhua qhov kev khiav hauj lwm thiab kev sau ua ke - STLPort. Qhov kev daws teeb meem no txo ​​qis qhov ua tau ntawm STL kev siv-kev ua yuam kev tshwj xeeb. Tam sim no peb tab tom npaj yuav tsiv mus nyob rau qhov kev siv STL xa nrog CLang, raws li STLPport tau raug txiav tawm thiab tsis sib haum nrog gcc's C ++ 11 enabled hom.
Tus neeg rau zaub mov lub hauv paus yog 99% ntau, tus neeg siv khoom - 95%. Ntxiv mus, txawm lub mobile platform siv tib C ++ code raws li "loj" ib qho, txawm tias feem pua ​​​​ntawm kev sib koom ua ke muaj qis me ntsis.
Zoo li feem ntau cov neeg siv C ++, peb tsis thov kom siv 100% ntawm cov peev txheej ntawm cov lus thiab nws cov tsev qiv ntawv. Yog li, peb xyaum tsis siv Boost, thiab ib qho ntawm cov lus nta yog dynamic hom casting. Nyob rau tib lub sijhawm, peb nquag siv:

  • STL (tshwj xeeb cov hlua, ntim thiab algorithms)
  • ntau yam qub txeeg qub teg, incl. ntau yam kev siv qub txeeg qub teg
  • qauv
  • kev zam
  • ntse pointers (kev cai siv)

Los ntawm kev siv ntau yam qub txeeg qub teg ntawm kev sib tshuam (ua tiav cov chav kawm paub daws teeb), ib qho qauv ua tau ua tau, uas yuav tau tham hauv qab no.

Cheebtsam

Txhawm rau kom muaj kev hloov pauv, txhua qhov kev ua haujlwm tau muab faib ua cov khoom siv, uas yog cov tsev qiv ntawv dynamic (*.dll rau Windows, *.so rau Linux). Muaj ntau tshaj li ib puas thiab tsib caug feem nyob rau hauv tag nrho; ntawm no yog cov lus piav qhia ntawm ib co ntawm lawv:

backend
Muaj lub platform metadata cav

accnt ua
Cov khoom uas cov neeg tsim daim ntawv thov siv los tsim cov ntaub ntawv sau nyiaj (cov kab kos ntawm cov nyiaj thiab cov ntawv sau npe)

bsl ua
Embedded lus execution engine

nuke
Kev cai siv lub cim xeeb faib

dwb 8
Cov ntaub ntawv database engine. Ib qho yooj yim cov ntaub ntawv server database engine raws li ISAM, uas kuj muaj xws li ib tug yooj yim SQL processor

wb bas
Muaj cov chav kawm hauv paus thiab kev ua haujlwm rau kev siv lub Windows user interface - qhov rais chav kawm, GDI nkag, thiab lwm yam.

Kev faib ua ntau yam yog pab tau los ntawm ntau qhov kev pom:

  • Kev sib cais txhawb kev tsim qauv zoo dua, tshwj xeeb tshaj yog kev sib cais code zoo dua
  • Los ntawm ib txheej ntawm cov khoom koj tuaj yeem yooj yim sib sau ua ke ntau txoj kev xa khoom:
    • Piv txwv li, tus neeg siv khoom nyias nyias yuav muaj wbase, tab sis yuav tsis muaj qhov backend
    • tab sis ntawm wbase server, ntawm qhov tsis sib xws, nws yuav tsis yog
    • ob qho kev xaiv yuav tau kawg muaj nuke thiab bsl

Tag nrho cov khoom uas xav tau rau qhov kev xaiv tso tawm no tau thauj khoom thaum qhov kev pab cuam pib. Qhov no, tshwj xeeb, yog qhov tsim nyog rau kev sau npe SCOM cov chav kawm, uas yuav tau tham hauv qab no.

TAWV

Rau decomposition nyob rau theem qis, SCOM system yog siv, lub tsev qiv ntawv zoo ib yam li kev xav rau ATL. Rau cov neeg uas tsis tau ua haujlwm nrog ATL, peb luv luv sau cov peev txheej thiab cov yam ntxwv tseem ceeb.
Rau cov chav kawm tshwj xeeb tsim SCOM:

  • Muab cov txheej txheem Hoobkas uas tso cai rau koj los tsim cov chav kawm los ntawm lwm qhov kev paub tsuas yog nws lub npe (tsis qhia qhov kev siv)
  • Muab cov ntaub ntawv siv-suav suav ntse pointer infrastructure. SCOM chav kawm lub neej tsis tas yuav tsum tau saib xyuas manually
  • Tso cai rau koj kom paub seb ib yam khoom siv ib qho kev sib tshuam thiab cia li hloov tus taw tes rau qhov khoom mus rau tus taw tes rau qhov interface.
  • Tsim cov khoom pabcuam uas ib txwm siv tau los ntawm get_service method, thiab lwm yam.

Piv txwv li, koj tuaj yeem piav qhia txog chav kawm nyeem JSON (piv txwv li, JSONStreamReader) hauv json.dll tivthaiv.
Cov chav kawm thiab piv txwv tuaj yeem tsim los ntawm lwm cov khoom; lawv yuav tsum tau sau npe hauv SCOM tshuab:

SCOM_CLASS_ENTRY(JSONStreamReader)

Qhov no macro yuav piav qhia txog cov chav kawm tshwj xeeb zoo li qub, tus tsim qauv uas yuav raug hu thaum cov khoom ntim tau ntim rau hauv lub cim xeeb.
Tom qab ntawd, koj tuaj yeem tsim ib qho piv txwv ntawm nws hauv lwm cov khoom:

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

Txhawm rau txhawb nqa cov kev pabcuam, SCOM muab cov txheej txheem ntxiv, nyuaj dua. Lub hauv paus rau nws yog lub tswv yim ntawm SCOM txheej txheem, uas ua haujlwm ua lub thawv rau kev pabcuam khiav haujlwm (piv txwv li, ua lub luag haujlwm ntawm Kev Pabcuam Locator), thiab tseem muaj kev khi rau cov peev txheej hauv zos. Cov txheej txheem SCOM yog khi rau OS xov. Ua tsaug rau qhov no, hauv daim ntawv thov koj tuaj yeem tau txais kev pabcuam zoo li no:

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

Ntxiv mus, los ntawm kev hloov cov txheej txheem logical (SCOM) cov txheej txheem khi rau cov xov, koj tuaj yeem tau txais cov ntawv thov uas muaj kev ywj pheej los ntawm qhov pom ntawm cov ntaub ntawv chaw, khiav hauv tib lub xov. Qhov no yog li cas peb cov neeg siv khoom nyias ua haujlwm nrog cov ntaub ntawv khaws cia - hauv ib txheej txheem OS muaj ob txoj haujlwm SCOM, ib qho cuam tshuam nrog cov neeg siv khoom, thiab qhov thib ob nrog cov neeg rau zaub mov. Txoj hauv kev no tso cai rau peb los koom ua ke kev sau cov lej uas yuav ua haujlwm ob qho tib si ntawm cov ntaub ntawv hauv zos thiab hauv "tiag" cov neeg siv-server version. Tus nqi rau kev sib xws yog nyiaj siv ua haujlwm, tab sis kev xyaum qhia tau hais tias nws tsim nyog.

Raws li tus qauv SCOM tivthaiv, ob qho tib si kev lag luam logic thiab qhov cuam tshuam ntawm 1C: Enterprise tau siv.

Neeg siv interface

Los ntawm txoj kev, hais txog interfaces. Peb tsis siv cov txheej txheem Windows tswj; peb cov kev tswj tau siv ncaj qha rau ntawm Windows API. Rau Linux version, txheej txheej tau ua haujlwm los ntawm wxWidgets tsev qiv ntawv.
Lub tsev qiv ntawv ntawm kev tswj tsis yog nyob ntawm lwm qhov chaw ntawm 1C: Kev Lag Luam thiab siv los ntawm peb hauv ob peb lwm yam khoom siv me me.

Tau ntau xyoo ntawm txoj kev loj hlob ntawm 1C: Kev Lag Luam, qhov tshwm sim ntawm kev tswj tau hloov pauv, tab sis kev hloov pauv loj hauv cov hauv paus ntsiab lus tsuas yog tshwm sim ib zaug, hauv xyoo 2009, nrog kev tso tawm ntawm version 8.2 thiab qhov tshwm sim ntawm "cov ntaub ntawv tswj hwm". Ntxiv nrog rau kev hloov pauv cov tsos, lub hauv paus ntsiab lus ntawm daim ntawv layout tau hloov pauv - muaj kev tsis lees paub ntawm pixel-los-pixel positioning ntawm cov ntsiab lus hauv kev pom zoo ntawm cov dej ntws ntawm cov ntsiab lus. Tsis tas li ntawd, hauv cov qauv tshiab, kev tswj hwm tsis ua haujlwm ncaj qha nrog cov khoom sau, tab sis nrog tshwj xeeb DTOs (Cov Ntaub Ntawv Hloov Cov Khoom).
Cov kev hloov pauv no ua rau nws muaj peev xwm los tsim 1C: Cov neeg siv khoom lag luam hauv web uas rov ua dua C ++ logic ntawm JavaScript tswj. Peb sim tswj kev ua haujlwm sib npaug ntawm cov neeg siv khoom nyias thiab lub vev xaib. Nyob rau hauv rooj plaub uas qhov no ua tsis tau, piv txwv li vim muaj kev txwv ntawm JavaScript API muaj (piv txwv li, kev muaj peev xwm ua haujlwm nrog cov ntaub ntawv raug txwv), peb feem ntau siv cov haujlwm tsim nyog siv browser txuas ntxiv sau hauv C ++. Peb tam sim no txhawb Internet Explorer thiab Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows thiab Linux) thiab Safari (MacOS).

Tsis tas li ntawd, tswj cov ntaub ntawv thev naus laus zis yog siv los tsim kev sib txuas rau cov ntawv thov mobile ntawm 1C platform. Ntawm cov khoom siv hauv xov tooj ntawm tes, kev ua haujlwm ntawm kev tswj hwm yog siv cov thev naus laus zis hauv kev ua haujlwm, tab sis rau daim ntawv layout logic thiab interface teb, tib txoj cai yog siv raws li "loj" 1C: Kev lag luam platform.

Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?
1C interface ntawm Linux OS

Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?
1C interface ntawm lub xov tooj ntawm tes

1C interface ntawm lwm lub platform Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?
1C interface ntawm Windows OS

Platform "1C: Enterprise" - dab tsi nyob rau hauv lub hood?
Interface 1C - web client

qhib qhov

Txawm hais tias peb tsis siv cov tsev qiv ntawv txheem rau C ++ cov neeg tsim tawm hauv qab Windows (MFC, tswj los ntawm WinAPI), peb tsis sau tag nrho cov khoom ntawm peb tus kheej. Lub tsev qiv ntawv twb tau hais lawm wxWidgets, thiab peb kuj siv:

  • Caws rau kev ua haujlwm nrog HTTP thiab FTP.
  • OpenSSL rau kev ua haujlwm nrog cryptography thiab tsim TLS kev sib txuas
  • libxml2 thiab libxslt rau XML parsing
  • libetpan rau kev ua haujlwm nrog kev xa ntawv (POP3, SMTP, IMAP)
  • ntxog txhawm rau txheeb xyuas cov lus email
  • sqllite rau khaws cov neeg siv cav
  • ICU rau Internationalization

Daim ntawv mus rau.
Tsis tas li ntawd, peb siv cov kev hloov kho siab heev Google Test ΠΈ Google Mock thaum txhim kho chav ntsuas.
Cov tsev qiv ntawv xav tau kev hloov kho kom haum rau SCOM cov koom haum cov qauv.
Kev nthuav dav ntawm 1C ua rau lub platform ua qhov kev sim zoo tshaj plaws ntawm lub zog rau cov tsev qiv ntawv siv hauv nws. Ntau yam ntawm cov neeg siv thiab cov xwm txheej sai sai nthuav tawm qhov yuam kev hauv txawm tias tsis tshua siv cov cai. Peb kho lawv tus kheej thiab sim muab lawv rov qab rau cov neeg sau phau ntawv. Cov kev paub ntawm kev sib tshuam hloov mus rau qhov sib txawv heev.
Developers Caws ΠΈ libetpan teb sai sai rau rub-thov, tab sis thaj, piv txwv li, hauv OpenSSL Peb yeej tsis tswj kom muab nws rov qab.

xaus

Nyob rau hauv tsab xov xwm peb kov rau ntau yam tseem ceeb ntawm txoj kev loj hlob ntawm 1C: Enterprise platform. Hauv qhov txwv tsis pub dhau ntawm tsab xov xwm, peb tsuas yog qee qhov nthuav, hauv peb txoj kev xav, yam.
Cov lus piav qhia dav dav ntawm ntau yam txheej txheem platform tuaj yeem pom S, SΡ“S,.
Cov ncauj lus twg yuav txaus siab rau koj hauv cov ntawv yav tom ntej?

Yuav ua li cas 1C mobile platform siv?
Kev piav qhia ntawm tus qauv sab hauv ntawm tus neeg siv khoom web?
Los yog tej zaum koj txaus siab rau cov txheej txheem ntawm kev xaiv cov yam ntxwv rau kev tshaj tawm tshiab, tsim thiab sim?

Sau rau hauv cov lus!

Tau qhov twg los: www.hab.com

Ntxiv ib saib