Platform "1C: Idawọlẹ" - kini o wa labẹ hood?

Hey Habr!
Ninu nkan yii a yoo bẹrẹ itan naa nipa bii o ṣe n ṣiṣẹ ninu Syeed "1C: Idawọlẹ 8" ati awọn imọ-ẹrọ wo ni a lo ninu idagbasoke rẹ.

Platform "1C: Idawọlẹ" - kini o wa labẹ hood?

Kini idi ti a fi ro pe eyi jẹ igbadun? Ni akọkọ, nitori pe pẹpẹ 1C: Idawọlẹ 8 jẹ ohun elo nla (diẹ sii ju awọn laini koodu 10 milionu) ni C ++ (alabara, olupin, ati bẹbẹ lọ), JavaScript (onibara wẹẹbu), ati, laipẹ diẹ, Ati Java. Awọn iṣẹ akanṣe nla le jẹ ohun ti o kere ju nitori iwọn wọn, nitori awọn ọran ti a ko rii ni ipilẹ koodu kekere kan dide ni kikun agbara ni iru awọn iṣẹ akanṣe. Ni ẹẹkeji, “1C: Idawọlẹ” jẹ ọja ti o ṣee ṣe, “apoti”, ati pe awọn nkan diẹ ni o wa nipa iru awọn idagbasoke lori Habré. O tun jẹ iyanilenu nigbagbogbo lati mọ bi igbesi aye ṣe wa ninu awọn ẹgbẹ ati awọn ile-iṣẹ miiran.

Nitorina jẹ ki a bẹrẹ. Ninu nkan yii a yoo funni ni awotẹlẹ diẹ ninu awọn imọ-ẹrọ ti o lo ninu pẹpẹ ati ṣe ilana ala-ilẹ, laisi omiwẹ jinlẹ sinu imuse. Nitootọ, fun ọpọlọpọ awọn ilana, itan alaye yoo nilo nkan lọtọ, ati fun diẹ ninu, gbogbo iwe kan!
Lati bẹrẹ pẹlu, o tọ lati pinnu lori awọn nkan ipilẹ - kini 1C: Syeed ile-iṣẹ ati kini awọn paati ti o ni. Idahun si ibeere yii ko rọrun pupọ, nitori ọrọ naa “Platform” (fun kukuru, a yoo pe ni ọna yẹn) tọka si ọna kan fun idagbasoke awọn ohun elo iṣowo, agbegbe akoko asiko, ati awọn irinṣẹ iṣakoso. Awọn ẹya wọnyi le ṣe iyatọ ni aijọju:

  • iṣupọ olupin
  • Onibara “tinrin” ti o lagbara lati sopọ si olupin nipasẹ http ati ilana alakomeji tirẹ
  • alabara fun ṣiṣẹ ni faaji ipele-meji pẹlu data data ti o wa lori dirafu lile tabi folda nẹtiwọki
  • ayelujara onibara
  • ohun elo olupin isakoso irinṣẹ
  • ayika idagbasoke (ti a mọ si Oluṣeto)
  • Ayika asiko asiko fun iOS, Android ati Windows Phone (pẹpẹ ẹrọ alagbeka 1C)

Gbogbo awọn ẹya wọnyi, ayafi ti alabara wẹẹbu, ni a kọ sinu C ++. Ni afikun, a ti kede laipe New iran configurator, ti a kọ ni Java.

Awọn ohun elo abinibi

C ++ 03 ni a lo lati ṣe agbekalẹ awọn ohun elo abinibi. Fun Windows, Microsoft Visual C++ 12 (profaili kan ti o ni ibamu pẹlu Windows XP) ni a lo bi alakojọ, ati fun Linux ati Android - gcc 4.8, fun iOS - clang 5.0. Ile-ikawe boṣewa ti a lo jẹ kanna fun gbogbo awọn ọna ṣiṣe ati awọn alakojọ - STLPort. Ojutu yii dinku iṣeeṣe ti imuse STL-awọn aṣiṣe kan pato. A n gbero lọwọlọwọ lati jade lọ si imuse STL ti o firanṣẹ pẹlu CLang, nitori STLPort ti dawọ ati pe ko ni ibamu pẹlu gcc's C ++11 mode sise.
Ipilẹ koodu olupin jẹ 99% wọpọ, ti alabara - 95%. Pẹlupẹlu, paapaa iru ẹrọ alagbeka nlo koodu C ++ kanna bi “nla” kan, botilẹjẹpe ipin ogorun isokan wa ni kekere diẹ.
Gẹgẹbi ọpọlọpọ awọn olumulo C++, a ko beere pe a lo 100% awọn agbara ti ede ati awọn ile-ikawe rẹ. Nitorinaa, adaṣe kii ṣe lo Boost, ati pe ọkan ninu awọn ẹya ede jẹ simẹnti iru agbara. Ni akoko kanna, a lo:

  • STL (awọn okun ni pato, awọn apoti ati awọn algoridimu)
  • ọpọ iní, pẹlu. ọpọ imuse iní
  • awọn awoṣe
  • awọn imukuro
  • awọn itọka ọlọgbọn (imuse aṣa)

Nipa lilo ọpọ ogún ti awọn atọkun (patapata awọn kilasi áljẹbrà), awoṣe paati kan ṣee ṣe, eyiti yoo jiroro ni isalẹ.

Awọn ohun elo

Lati rii daju modularity, gbogbo iṣẹ ṣiṣe ti pin si awọn paati, eyiti o jẹ awọn ile-ikawe ti o ni agbara (* .dll fun Windows, * .so fun Linux). Awọn ohun elo ti o ju XNUMX lọ ni apapọ; eyi ni awọn apejuwe diẹ ninu wọn:

backend
Ni ninu ẹrọ metadata Syeed

accnt
Awọn nkan ti awọn olupilẹṣẹ ohun elo lo lati kọ awọn igbasilẹ ṣiṣe iṣiro (awọn apẹrẹ ti awọn akọọlẹ ati awọn iforukọsilẹ ṣiṣe iṣiro)

bsl
Enjini ipaniyan ede ti a fi sinu

iparun
Aṣa imuse ti iranti allocator

dbeng8
Engine database faili. Ẹrọ data olupin faili ti o rọrun ti o da lori ISAM, eyiti o tun pẹlu ero isise SQL ti o rọrun

wbase
Ni awọn kilasi mimọ ati awọn iṣẹ ṣiṣe fun imuse wiwo olumulo Windows - awọn kilasi window, iwọle GDI, ati bẹbẹ lọ.

Pipin si awọn paati pupọ jẹ iwulo lati awọn aaye pupọ:

  • Iyapa ṣe agbega apẹrẹ ti o dara julọ, ni pataki ipinya koodu to dara julọ
  • Lati akojọpọ awọn paati o le ni irọrun ṣajọpọ awọn aṣayan ifijiṣẹ oriṣiriṣi:
    • Fun apẹẹrẹ, fifi sori alabara tinrin yoo ni wbase ninu, ṣugbọn kii yoo ni ẹhin
    • ṣugbọn lori olupin wbase, ni ilodi si, kii yoo jẹ
    • awọn aṣayan mejeeji yoo dajudaju ni nuke ati bsl

Gbogbo awọn paati ti o nilo fun aṣayan ifilọlẹ yii ni a kojọpọ nigbati eto ba bẹrẹ. Eyi, ni pataki, jẹ pataki fun fiforukọṣilẹ awọn kilasi SCOM, eyiti yoo jiroro ni isalẹ.

SCOM

Fun jijera ni ipele kekere, eto SCOM ti lo, ile-ikawe ti o jọra ni arosọ si ATL. Fun awọn ti ko ṣiṣẹ pẹlu ATL, a ṣe atokọ ni ṣoki awọn agbara akọkọ ati awọn ẹya.
Fun kilasi SCOM ti a ṣe apẹrẹ pataki:

  • Pese awọn ọna ile-iṣẹ ti o gba ọ laaye lati ṣẹda kilasi lati paati miiran ti o mọ orukọ rẹ nikan (laisi iṣafihan imuse naa)
  • Pese a itọkasi-kika smati ijuboluwole amayederun. SCOM kilasi igbesi aye ko nilo lati ṣe abojuto pẹlu ọwọ
  • Gba ọ laaye lati wa boya ohun kan n ṣe imuse wiwo kan pato ati yi atọka kan pada laifọwọyi si nkan naa si itọka si wiwo.
  • Ṣẹda ohun iṣẹ kan ti o wa nigbagbogbo nipasẹ ọna get_service, ati bẹbẹ lọ.

Fun apẹẹrẹ, o le ṣe apejuwe kilasi fun kika JSON (fun apẹẹrẹ, JSONStreamReader) ninu paati json.dll.
Awọn kilasi ati awọn apẹẹrẹ le ṣẹda lati awọn paati miiran; wọn nilo lati forukọsilẹ ni ẹrọ SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Makiro yii yoo ṣe apejuwe kilasi agbohunsilẹ aimi pataki kan, olupilẹṣẹ eyiti yoo pe nigbati paati naa ba wa ni iranti.
Lẹhin eyi, o le ṣẹda apẹẹrẹ rẹ ni paati miiran:

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

Lati ṣe atilẹyin awọn iṣẹ, SCOM nfunni ni afikun, dipo awọn amayederun eka. Aarin si rẹ ni imọran ti ilana SCOM kan, eyiti o ṣiṣẹ bi eiyan fun awọn iṣẹ ṣiṣe (ie, ṣe ipa ti Oluwadi Iṣẹ), ati pe o tun ni abuda si awọn orisun agbegbe. Ilana SCOM ti so mọ okun OS. Ṣeun si eyi, inu ohun elo o le gba awọn iṣẹ bii eyi:

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

Pẹlupẹlu, nipa yiyipada awọn ilana ọgbọn (SCOM) ti a so mọ okun kan, o le gba awọn ohun elo ti o jẹ ominira ni adaṣe lati oju wiwo aaye alaye, nṣiṣẹ laarin okun kanna. Eyi ni bii alabara tinrin wa ṣe n ṣiṣẹ pẹlu data data faili - inu ilana OS kan awọn ilana SCOM meji wa, ọkan ni nkan ṣe pẹlu alabara, ati ekeji pẹlu olupin naa. Ọna yii gba wa laaye lati ṣọkan kikọ koodu ti yoo ṣiṣẹ mejeeji lori ibi ipamọ data faili agbegbe ati ni “gidi” ẹya olupin-olupin. Awọn owo fun iru uniformity jẹ lori, sugbon iwa fihan wipe o jẹ tọ o.

Da lori awoṣe paati SCOM, mejeeji kannaa iṣowo ati apakan wiwo ti 1C: Idawọlẹ jẹ imuse.

Ni wiwo olumulo

Nipa ona, nipa awọn atọkun. A ko lo awọn iṣakoso Windows boṣewa; awọn iṣakoso wa ni imuse taara lori Windows API. Fun ẹya Linux, a ti ṣe Layer kan ti o ṣiṣẹ nipasẹ ile-ikawe wxWidgets.
Ile-ikawe ti awọn iṣakoso ko dale lori awọn ẹya miiran ti 1C: Idawọlẹ ati pe a lo nipasẹ wa ni ọpọlọpọ awọn ohun elo inu kekere miiran.

Ni awọn ọdun ti idagbasoke ti 1C: Idawọlẹ, ifarahan awọn iṣakoso ti yipada, ṣugbọn iyipada pataki ninu awọn ilana waye ni ẹẹkan, ni 2009, pẹlu itusilẹ ti ikede 8.2 ati dide ti "awọn fọọmu iṣakoso". Ni afikun si iyipada irisi, ipilẹ ti iṣeto fọọmu ti yipada ni ipilẹ - ijusile ti ipo piksẹli-nipasẹ-pixel ti awọn eroja ni ojurere ti ṣiṣan-ila awọn eroja. Ni afikun, ninu awoṣe tuntun, awọn iṣakoso ko ṣiṣẹ taara pẹlu awọn nkan agbegbe, ṣugbọn pẹlu awọn DTO pataki (Awọn nkan Gbigbe Data).
Awọn ayipada wọnyi jẹ ki o ṣee ṣe lati ṣẹda alabara wẹẹbu 1C: Idawọlẹ ti o ṣe atunṣe ọgbọn ọgbọn C ++ ti awọn iṣakoso JavaScript. A gbiyanju lati ṣetọju ibaramu iṣẹ-ṣiṣe laarin tinrin ati awọn alabara wẹẹbu. Ni awọn ọran nibiti eyi ko ṣee ṣe, fun apẹẹrẹ nitori awọn aropin ti JavaScript API ti o wa (fun apẹẹrẹ, agbara lati ṣiṣẹ pẹlu awọn faili ni opin pupọ), a nigbagbogbo ṣe iṣẹ ṣiṣe pataki ni lilo awọn amugbooro aṣawakiri ti a kọ sinu C ++. Lọwọlọwọ a ṣe atilẹyin Internet Explorer ati Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows ati Linux) ati Safari (MacOS).

Ni afikun, imọ-ẹrọ fọọmu iṣakoso ni a lo lati ṣẹda wiwo fun awọn ohun elo alagbeka lori pẹpẹ 1C. Lori awọn ẹrọ alagbeka, imuse awọn iṣakoso ti wa ni imuse nipa lilo awọn imọ-ẹrọ abinibi si ẹrọ ṣiṣe, ṣugbọn fun ilana iṣeto fọọmu ati idahun wiwo, koodu kanna ni a lo bi ninu “nla” 1C: Syeed Idawọlẹ.

Platform "1C: Idawọlẹ" - kini o wa labẹ hood?
1C ni wiwo lori Linux OS

Platform "1C: Idawọlẹ" - kini o wa labẹ hood?
1C ni wiwo lori ẹrọ alagbeka kan

1C ni wiwo lori miiran awọn iru ẹrọ Platform "1C: Idawọlẹ" - kini o wa labẹ hood?
1C ni wiwo lori Windows OS

Platform "1C: Idawọlẹ" - kini o wa labẹ hood?
Ni wiwo 1C - ayelujara ose

Open orisun

Botilẹjẹpe a ko lo awọn ile-ikawe boṣewa fun awọn idagbasoke C ++ labẹ Windows (MFC, awọn idari lati WinAPI), a ko kọ gbogbo awọn paati funrararẹ. Ile-ikawe naa ti mẹnuba tẹlẹ wxWidgets, ati pe a tun lo:

  • KURO fun ṣiṣẹ pẹlu HTTP ati FTP.
  • OpenSSL fun ṣiṣẹ pẹlu cryptography ati Igbekale TLS awọn isopọ
  • libxml2 ati libxslt fun XML iṣiro
  • libetpan fun ṣiṣẹ pẹlu awọn ilana meeli (POP3, SMTP, IMAP)
  • alafarawe lati ṣe itupalẹ awọn ifiranṣẹ imeeli
  • sqlite fun titoju olumulo àkọọlẹ
  • ICU fun ilu okeere

Awọn akojọ lọ lori.
Ni afikun, a lo ẹya ti a ṣe atunṣe pupọ Idanwo Google и Google Mock nigbati o ba ndagba awọn idanwo ẹyọkan.
Awọn ile-ikawe nilo aṣamubadọgba lati wa ni ibamu pẹlu awoṣe agbari paati SCOM.
Itankale ti 1C jẹ ki pẹpẹ jẹ idanwo agbara ti o dara julọ fun awọn ile-ikawe ti a lo ninu rẹ. Orisirisi awọn olumulo ati awọn oju iṣẹlẹ yarayara ṣafihan awọn aṣiṣe ni paapaa awọn agbegbe ti ko lo ṣọwọn julọ ti koodu. A ṣe atunṣe wọn funrararẹ ati gbiyanju lati fun wọn pada si awọn onkọwe ile-ikawe naa. Iriri ti ibaraenisepo yipada lati jẹ iyatọ pupọ.
Awọn Difelopa KURO и libetpan dahun ni kiakia lati fa-ibeere, ṣugbọn alemo, fun apẹẹrẹ, ni OpenSSL A ko isakoso a fun pada.

ipari

Ninu nkan naa a fọwọkan ọpọlọpọ awọn aaye akọkọ ti idagbasoke ti 1C: Syeed Idawọlẹ. Ni opin ipari ti nkan naa, a fọwọkan diẹ ninu awọn iyanilẹnu, ni ero wa, awọn apakan.
Apejuwe gbogbogbo ti ọpọlọpọ awọn ọna ẹrọ Syeed ni a le rii nibi.
Awọn koko wo ni yoo jẹ anfani si ọ ni awọn nkan iwaju?

Bawo ni iru ẹrọ alagbeka 1C ṣe imuse?
Apejuwe eto inu ti alabara wẹẹbu?
Tabi boya o nifẹ si ilana ti yiyan awọn ẹya fun awọn idasilẹ tuntun, idagbasoke ati idanwo?

Kọ ninu awọn comments!

orisun: www.habr.com

Fi ọrọìwòye kun