Платформа "1С: Enterprise" - капоттун астында эмне бар?

Эй Хабр!
Бул макалада биз анын ичинде кантип иштээри жөнүндө окуяны баштайт платформа "1С: Enterprise 8" жана аны иштеп чыгууда кандай технологиялар колдонулат.

Платформа "1С: Enterprise" - капоттун астында эмне бар?

Эмне үчүн бул кызыктуу деп ойлойбуз? Биринчиден, 1C: Enterprise 8 платформасы C++ (кардар, сервер ж.б.), JavaScript (веб кардары) жана жакында эле чоң (10 миллиондон ашык код саптары) тиркеме. Java. Чоң долбоорлор жок дегенде масштабы боюнча кызыктуу болушу мүмкүн, анткени кичинекей коддук базада көрүнбөгөн маселелер мындай долбоорлордо толук күчүндө пайда болот. Экинчиден, "1С: Enterprise" - бул кайталануучу, "кутуга салынган" продукт жана Habréде мындай окуялар жөнүндө макалалар өтө аз. Башка командаларда жана компанияларда жашоо кандай экенин билүү дайыма кызыктуу.

Ошентип, баштайлы. Бул макалада биз платформада колдонулган кээ бир технологияларды карап чыгабыз жана ишке ашырууга терең кирбестен, пейзажды чагылдырабыз. Чынында эле, көптөгөн механизмдер үчүн деталдуу окуя өзүнчө макаланы, ал эми кээ бирлери үчүн бүтүндөй китепти талап кылат!
Баштоо үчүн, негизги нерселерди - 1С: Enterprise платформасы эмне жана ал кандай компоненттерден тураарын чечиш керек. Бул суроонун жообу анчалык деле жөнөкөй эмес, анткени "Платформа" термини (кыскасы, биз аны ушинтип атайбыз) бизнес тиркемелерин, иштөө чөйрөсүн жана башкаруу куралдарын иштеп чыгуу үчүн каражатты билдирет. Төмөнкү компоненттерди болжол менен айырмалоого болот:

  • сервер кластери
  • http жана өзүнүн бинардык протоколу аркылуу серверге туташууга жөндөмдүү "жука" кардар
  • катуу дискте же тармак папкасында жайгашкан маалымат базасы бар эки баскычтуу архитектурада иштөө үчүн кардар
  • желе кардары
  • колдонмо серверинин башкаруу куралдары
  • иштеп чыгуу чөйрөсү (конфигуратор катары белгилүү)
  • 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 ишке ашырууга тиешелүү каталардын ыктымалдыгын азайтат. Учурда биз CLang менен жөнөтүлгөн STL ишке өтүүнү пландаштырып жатабыз, анткени STLPort токтотулган жана gccдин C++ 11 иштетилген режими менен шайкеш келбейт.
Сервердин код базасы 99% жалпы, кардардыкы - 95%. Мындан тышкары, мобилдик платформа да "чоң" код менен бирдей C++ кодун колдонот, бирок ал жерде биригүү пайызы бир аз төмөн.
Көпчүлүк C++ колдонуучулары сыяктуу, биз тилдин жана анын китепканаларынын мүмкүнчүлүктөрүн 100% колдонобуз деп ырастабайбыз. Ошентип, биз дээрлик Boost колдонбойбуз жана тилдин өзгөчөлүктөрүнүн бири - динамикалык типтеги кастинг. Ошол эле учурда, биз активдүү колдонобуз:

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

Интерфейстердин (толугу менен абстракттуу класстар) бир нече мурасын колдонуу менен төмөндө талкуулануучу компонент модели мүмкүн болот.

компоненттери

Модулдуулукту камсыз кылуу үчүн бардык функциялар динамикалык китепканалар болгон компоненттерге бөлүнөт (Windows үчүн *.dll, Linux үчүн *.so). Бардыгы болуп жүз элүүдөн ашык компоненттер бар; бул жерде алардын айрымдарынын сүрөттөлүшү келтирилген:

арткы
Платформанын метадайын кыймылдаткычын камтыйт

acnt
Тиркемени иштеп чыгуучулар бухгалтердик эсеп жазууларын түзүү үчүн колдонгон объекттер (эсептердин схемалары жана эсеп регистрлери)

bsl
Камтылган тилди аткаруу кыймылдаткычы

Нуке
Эстутум бөлүштүргүчтү ыңгайлаштыруу

dbeng8
Файлдар базасынын кыймылдаткычы. Жөнөкөй SQL процессорун камтыган ISAM негизиндеги жөнөкөй файл серверинин маалымат базасы кыймылдаткычы

wbase
Windows колдонуучу интерфейсин ишке ашыруу үчүн базалык класстарды жана функцияларды камтыйт - терезе класстары, GDI мүмкүнчүлүгү ж.б.

Бир нече компоненттерге бөлүү бир нече көз караштан алганда пайдалуу:

  • Бөлүү жакшыраак дизайнга, атап айтканда жакшыраак кодду изоляциялоого өбөлгө түзөт
  • Компоненттердин топтомун ийкемдүү түрдө ар кандай жеткирүү варианттарын чогулта аласыз:
    • Мисалы, жука кардар орнотууда wbase камтылат, бирок сервери болбойт
    • бирок wbase серверинде, тескерисинче, андай болбойт
    • эки вариант тең, албетте, ядролук жана 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 процесси OS жипине байланган. Мунун аркасында, колдонмонун ичинде сиз төмөнкүдөй кызматтарды ала аласыз:

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

Мындан тышкары, жипке байланган логикалык (SCOM) процесстерди которуу менен, бир эле жиптин ичинде иштеген, маалымат мейкиндигинин көз карашынан иш жүзүндө көз карандысыз тиркемелерди ала аласыз. Биздин жука кардар файл базасы менен ушундай иштейт - бир ОС процессинин ичинде эки SCOM процесси бар, бири кардар менен, экинчиси сервер менен. Бул ыкма локалдык файл базасында да, "чыныгы" кардар-сервер версиясында да иштей турган кодду жазууну унификациялоого мүмкүндүк берет. Мындай бирдейликтин баасы ашыкча, бирок практика көрсөткөндөй, ал татыктуу.

SCOM компонентинин моделинин негизинде 1С: Enterprise программасынын бизнес логикасы да, интерфейси да ишке ашырылган.

Колдонуучунун интерфейси

Айтмакчы, интерфейстер жөнүндө. Биз стандарттуу Windows башкаруу элементтерин колдонбойбуз; биздин башкаруу элементтерибиз түздөн-түз Windows API'де ишке ашырылат. Linux версиясы үчүн wxWidgets китепканасы аркылуу иштеген катмар жасалды.
Башкаруу китепканасы 1C: Enterprise башка бөлүктөрүнөн көз каранды эмес жана биз тарабынан башка бир нече чакан ички утилиттерде колдонулат.

1С: Enterprise өнүгүү жылдарында башкаруу элементтеринин көрүнүшү өзгөрдү, бирок принциптердин олуттуу өзгөрүшү бир гана жолу, 2009-жылы 8.2 версиясынын чыгышы жана “башкарылган формалардын” пайда болушу менен болгон. Сырткы көрүнүшүн өзгөртүүдөн тышкары, форманын жайгашуу принциби түп-тамырынан бери өзгөрдү - элементтердин агым-макетинин пайдасына элементтерди пиксел-пиксел боюнча жайгаштыруудан баш тартуу болду. Мындан тышкары, жаңы моделде башкаруу элементтери түздөн-түз домен объектилери менен иштебейт, бирок атайын DTO (Маалыматтарды өткөрүү объекттери).
Бул өзгөртүүлөр JavaScript башкаруу элементтеринин C++ логикасын кайталаган 1С: Enterprise веб-кардарын түзүүгө мүмкүндүк берди. Биз жука жана желе кардарларынын ортосундагы функционалдык эквивалентти сактоого аракет кылабыз. Бул мүмкүн болбогон учурларда, мисалы, JavaScript API'нин чектелгендигинен улам (мисалы, файлдар менен иштөө мүмкүнчүлүгү өтө чектелген), биз көбүнчө C++ тилинде жазылган браузердин кеңейтүүлөрүн колдонуу менен керектүү функцияларды ишке ашырабыз. Учурда биз Internet Explorer жана Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows жана Linux) жана Safari (MacOS) колдойбуз.

Мындан тышкары, башкарылуучу формалар технологиясы 1С платформасында мобилдик тиркемелер үчүн интерфейсти түзүү үчүн колдонулат. Мобилдик түзмөктөрдө башкаруу элементтерин көрсөтүү операциялык тутумга таандык технологияларды колдонуу менен ишке ашырылат, бирок форманын жайгашуу логикасы жана интерфейстин жообу үчүн "чоң" 1С: Enterprise платформасындагыдай эле код колдонулат.

Платформа "1С: Enterprise" - капоттун астында эмне бар?
Linux OS боюнча 1C интерфейси

Платформа "1С: Enterprise" - капоттун астында эмне бар?
Мобилдик түзүлүштөгү 1С интерфейси

Башка платформаларда 1С интерфейси Платформа "1С: Enterprise" - капоттун астында эмне бар?
Windows OS боюнча 1C интерфейси

Платформа "1С: Enterprise" - капоттун астында эмне бар?
Interface 1C - веб кардары

Ачык булак

Биз Windows астындагы C++ иштеп чыгуучулары үчүн стандарттуу китепканаларды колдонбосок да (MFC, WinAPIден башкаруу), биз бардык компоненттерди өзүбүз жаза бербейбиз. Китепкана буга чейин айтылган wxWidgets, жана биз дагы колдонобуз:

  • бүгө HTTP жана FTP менен иштөө үчүн.
  • OpenSSL криптография менен иштөө жана TLS байланыштарын түзүү үчүн
  • libxml2 жана libxslt XML талдоо үчүн
  • libetpan почта протоколдору менен иштөө үчүн (POP3, SMTP, IMAP)
  • мимикалык электрондук почта билдирүүлөрүн талдоо үчүн
  • sqllite колдонуучу журналдарын сактоо үчүн
  • ICU интернационалдаштыруу үчүн

Тизме улана берет.
Мындан тышкары, биз абдан өзгөртүлгөн версиясын колдонобуз Google Test и Google Mock бирдик сыноолорду иштеп чыгууда.
Китепканалар SCOM компонентинин уюштуруу моделине шайкеш келүү үчүн адаптацияны талап кылган.
1Стин таралышы платформаны анда колдонулган китепканалар үчүн эң сонун күч сынагы кылат. Ар кандай колдонуучулар жана сценарийлер коддун эң сейрек колдонулган аймактарында каталарды тез ачып беришет. Аларды өзүбүз оңдоп, китепкананын авторлоруна кайтарып берүүгө аракет кылабыз. Өз ара аракеттенүү тажрыйбасы такыр башкача болуп чыгат.
Developers бүгө и libetpan тартма суроо-талаптарга тез жооп берет, бирок патч, мисалы, в OpenSSL Биз аны эч качан кайтарып бере алган жокпуз.

жыйынтыктоо

Макалада биз 1С: Enterprise платформасын өнүктүрүүнүн бир нече негизги аспектилерине токтолдук. Макаланын чектелүү чөйрөсүндө биз кээ бир кызыктуу, биздин оюбузча, аспектилерине гана токтолдук.
Ар кандай платформа механизмдеринин жалпы сүрөттөлүшүн тапса болот бул жерде.
Келечектеги макалаларда кандай темалар сизди кызыктырат?

1С мобилдик платформасы кантип ишке ашат?
Веб кардардын ички структурасынын сүрөттөлүшү?
Же, балким, сизди жаңы чыгарылыштар үчүн функцияларды тандоо, иштеп чыгуу жана тестирлөө процесси кызыктырабы?

Комментарийге жазыңыз!

Source: www.habr.com

Комментарий кошуу