"1С: Аж ахуйн нэгж" платформ - бүрээсний доор юу байгаа вэ?

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

"1С: Аж ахуйн нэгж" платформ - бүрээсний доор юу байгаа вэ?

Бид яагаад үүнийг сонирхолтой гэж бодож байна вэ? Нэгдүгээрт, 1C: Enterprise 8 платформ нь C++ (үйлчлүүлэгч, сервер гэх мэт), JavaScript (вэб клиент) болон сүүлийн үед том (10 сая гаруй мөр код) програм юм. Java. Том төслүүд нь наад зах нь цар хүрээгээрээ сонирхолтой байж болно, учир нь ийм төслүүдэд жижиг кодын санд үл үзэгдэх асуудлууд бүрэн хэмжээгээр үүсдэг. Хоёрдугаарт, "1C: Enterprise" нь хуулбарлах боломжтой, "хайрцагласан" бүтээгдэхүүн бөгөөд Хабре дээр ийм бүтээн байгуулалтын талаар маш цөөхөн нийтлэл байдаг. Бусад баг, компаниудын амьдрал ямар байгааг мэдэх нь үргэлж сонирхолтой байдаг.

Ингээд эхэлцгээе. Энэ нийтлэлд бид платформд ашиглагдаж буй зарим технологиудын тоймыг өгч, хэрэгжилтийг гүнзгийрүүлэхгүйгээр ландшафтыг тоймлон харуулах болно. Үнэн хэрэгтээ олон механизмын хувьд нарийвчилсан түүхийг бичихэд тусдаа нийтлэл, заримд нь бүхэл бүтэн ном хэрэгтэй болно!
Эхлээд 1С: Enterprise платформ гэж юу болох, ямар бүрэлдэхүүн хэсгүүдээс бүрдэх вэ гэсэн үндсэн зүйлийг шийдэх нь зүйтэй. Энэ асуултын хариулт нь тийм ч энгийн биш, учир нь "Платформ" гэсэн нэр томъёо нь (товчхондоо бид үүнийг ингэж нэрлэх болно) бизнесийн хэрэглүүр, ажиллах орчин, удирдлагын хэрэгслүүдийг хөгжүүлэх арга хэрэгслийг хэлдэг. Дараахь бүрэлдэхүүн хэсгүүдийг ойролцоогоор ялгаж салгаж болно.

  • серверийн кластер
  • 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 хэрэгжилтийн тусгай алдааны магадлалыг бууруулдаг. STLPort ажиллахаа больсон бөгөөд gcc-ийн C++11 идэвхжүүлсэн горимд нийцэхгүй байгаа тул бид одоогоор CLang-тай нийлүүлсэн STL хэрэгжилт рүү шилжихээр төлөвлөж байна.
Серверийн кодын суурь нь 99%, үйлчлүүлэгчийнх 95% нийтлэг байдаг. Түүгээр ч барахгүй гар утасны платформ ч гэсэн "том" кодтой ижил C++ кодыг ашигладаг боловч нэгдэх хувь нь арай бага байна.
Ихэнх C++ хэрэглэгчдийн нэгэн адил бид хэлний болон түүний номын сангуудын чадавхийг 100% ашигладаг гэж хэлдэггүй. Тиймээс бид бараг Boost ашигладаггүй бөгөөд хэлний онцлогуудын нэг нь динамик хэлбэрийн дамжуулалт юм. Үүний зэрэгцээ бид дараахь зүйлийг идэвхтэй ашигладаг.

  • STL (ялангуяа мөр, контейнер, алгоритм)
  • олон өв залгамжлал, үүнд. олон хэрэгжүүлэлтийн удамшил
  • хэв маяг
  • үл хамаарах зүйл
  • ухаалаг заагч (захиалгат хэрэгжүүлэлт)

Интерфейсийн олон удамшил (бүрэн хийсвэр анги) ашигласнаар бүрэлдэхүүн загвар бий болох боломжтой бөгөөд үүнийг доор авч үзэх болно.

Бүрэлдэхүүн хэсгүүд

Модульчлагдсан байдлыг хангахын тулд бүх функцийг бүрэлдэхүүн хэсгүүдэд хуваадаг бөгөөд тэдгээр нь динамик сангууд (Windows-д *.dll, Linux-д *.so). Нийтдээ нэг зуун тавин гаруй бүрэлдэхүүн хэсэг байдаг бөгөөд тэдгээрийн заримынх нь тайлбарыг энд оруулав.

арын
Платформ мета өгөгдлийн хөдөлгүүрийг агуулсан

acnt
Програм хөгжүүлэгчид нягтлан бодох бүртгэлийн бүртгэлийг бүтээхэд ашигладаг объектууд (дансны график, нягтлан бодох бүртгэлийн бүртгэл)

bsl
Embedded хэлний гүйцэтгэх хөдөлгүүр

цөм
Санах ой хуваарилагчийн захиалгат хэрэгжилт

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С: Enterprise-ийн бизнесийн логик болон интерфейсийн хэсгийг хоёуланг нь хэрэгжүүлсэн.

Хэрэглэгчийн интерфэйс

Дашрамд хэлэхэд интерфейсийн тухай. Бид стандарт Windows удирдлагыг ашигладаггүй; бидний хяналтыг Windows API дээр шууд хэрэгжүүлдэг. Линукс хувилбарын хувьд 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С: Аж ахуйн нэгж" платформ - бүрээсний доор юу байгаа вэ?
Линукс үйлдлийн систем дээрх 1С интерфейс

"1С: Аж ахуйн нэгж" платформ - бүрээсний доор юу байгаа вэ?
Хөдөлгөөнт төхөөрөмж дээрх 1С интерфейс

Бусад платформ дээрх 1C интерфейс "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 и либетпан татах хүсэлтэд хурдан хариу өгөх боловч нөхөөс, жишээ нь, in OpenSSL Бид хэзээ ч буцааж өгч чадаагүй.

дүгнэлт

Нийтлэлд бид 1С: Аж ахуйн нэгжийн платформыг хөгжүүлэх хэд хэдэн үндсэн талыг хөндсөн. Өгүүллийн хязгаарлагдмал хүрээнд бид зөвхөн сонирхолтой, бидний бодлоор зарим зүйлийг хөндсөн.
Төрөл бүрийн платформ механизмын ерөнхий тайлбарыг олж болно энд.
Цаашдын нийтлэлүүдэд ямар сэдвүүд танд сонирхолтой байх вэ?

1С гар утасны платформ хэрхэн хэрэгжиж байна вэ?
Вэб үйлчлүүлэгчийн дотоод бүтцийн тодорхойлолт?
Эсвэл та шинэ хувилбаруудад зориулсан функцуудыг сонгох, хөгжүүлэх, турших үйл явцыг сонирхож байна уу?

Сэтгэгдэл дээр бичээрэй!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх