«Белсендіру» маршруты: интерфейс және баптаудың логикасы
=========================================================

Бұл кезеңде өтінімнің берілу жолын, яғни жасалып, белсендірілгеннен кейін өтінімнің өтетін маршрутын баптаймыз.

Ол үшін **«Белсендіру»** түріндегі маршрут қолданылады.

.. admonition:: Негізгі жұмыс аймағы.

    Маршрут редакторы үш тақтадан тұрады, олардың әрқайсысы маршрут кезеңдерінің өз түріне жауапты болады.

    **Маршрут редакторының тақталары**

    **Алдын ала кезеңдер** — тек негізгі іс-қимылдарға дейін орындалатын стандартты процестерді қамтиды:

    * Жұмыс
    * Келісу
    * Бекіту
    * Таныстыру
    * Құжат жіберу
    * Тіркеу
    * Маршрут

    **Іс-қимылдар** — маршруттың негізгі бөлігі.

    Бұл тақтадағы кезеңдер:

    * нысаннан деректерді автоматты түрде ала алады (компонент кодтары бойынша);
    * жүйедегі объектілер мен процес күйін өзгертеді;
    * тек алдын ала кезеңдер (егер болса) сәтті аяқталғаннан кейін орындалады.

    **Кейінгі кезеңдер** — сондай-ақ тек стандартты процестерді қамтиды және іс-қимылдардан кейін орындалады (қажет болған жағдайда).

Кіріспе
-------

Маршрутты баптамас бұрын мыналарды түсіну маңызды:

Кез келген процес қадамы әрқашан 4 негізгі нәрсені қамтиды:

* Рөл → кім?
* Іс-қимыл → не жасайды?
* Деректер → немен жұмыс жасайды?
* Нәтиже → не алынады?

Жүйеде бизнес-процестің әрбір қадамы мынаға айналады:

* маршрут кезеңі
* жауаптымен
* іс-қимыл түрімен
* орындалу нәтижесімен

Оқу барысында мұнда мысал ретінде пайдаланылатын процеске байланбай, болашақ процестер үшін білімді бекіту мақсатында әрбір кезеңді қосу алдында өзіңізге мыналарды сұраңыз:

* Бұл процестің қандай қадамы?
* Оны кім орындайды?
* Одан кейін не өзгеруі тиіс?
* Қандай нәтиже қажет (қол қою, пікір, файл)?

.. important::
  Жүйе өз бетінше ештеңе «ойлап таппайды». Аналитиктің міндеті — бизнес-процесті орындалу сценарийін және қажетті деректерді жүйеге беріп, орындалатын логикаға айналдыру.

Маршрут жасауға өту
-------------------

**1-қадам.** **«Тізілім маршруттары»** бөліміндегі «+» батырмасын басып, ашылмалы тізімнен **«Белсендіру»** маршрут түрін таңдаңыз

**2-қадам.** Ашылған терезеде редакциялау батырмасын басып, белсендіру маршрутын редакциялауға өтіңіз:

.. image:: ../resources/img/edit.jpeg

**3-қадам.** «Іс-қимылдар» тақтасында жаңа кезең қосу үшін **«+»** батырмасын басыңыз

.. figure:: ../resources/img/actions_panel.jpeg

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/YvHfLJxfkCI"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


**4-қадам.** Оң жақта ашылған кезең баптаулары тақтасында кезеңді ордерге сәйкес баптау қажет.

Әрбір кезеңнің өз орындалу нәтижесі болады (қол қою, пікір енгізу, автоматты жүйелік іс-қимыл және бизнес-процес үшін қажетті басқа операциялар)

Әрбір кезеңде қандай іс-қимыл түрінің қажет екенін анықтау үшін ордердің **2. Процесс диаграммасы мен процесс қадамдары** тармағына жүгінеміз

.. figure:: ../resources/img/order_process_steps.jpeg

Процесс бизнес-логикасын дұрыс құру үшін қадамның кірісі мен шығысына, сондай-ақ оны орындайтын рөлге назар аудару қажет.

1-кезең. Өтінімді толтыру
--------------------------

**Кіріс** — жүйеде жасалған өтінім нысаны және клиент нысанды толтырған кездегі енгізетін деректері.

**Шығыс** — нысан бойынша толтырылған қызметке өтінім.

Бұл кезеңде процестің қосымша қадамы қажет емес, өйткені өтінімді жіберу процестің бірінші қадамы болып табылады.

2-кезең. Өтінімді жіберу.
--------------------------

**Кіріс** — өтінімді ЭЦҚ арқылы қол қою.

**Шығыс** — жүйеде қол қойылған өтінім.

Бұл кезеңді іске асыру үшін **«Келісу»** түріндегі **«Нысан бойынша жұмыс»** іс-қимыл түрі қажет болады.

Бұл кезең түрі өтінімді жасап жатқан ағымдағы пайдаланушы болатын өтінімдегі өрісті көрсетуді талап етеді.

Алдын ала баптау
^^^^^^^^^^^^^^^^

**1-қадам.** Өтінім нысанына ораламыз

**2-қадам.** Нысанға кесте компонентін қосамыз және жүйелік өрістер пайдаланушыға көрсетілмеуі үшін оның жасырылу баптауларын қосамыз

**3-қадам.** Кесте ішіне **«Synergy объектілері»** компонентін қосамыз

* Оған мысалы «entity_author» кодын береміз

* **«Ағымдағы пайдаланушымен толтыру»** баптауын қосамыз

**4-қадам.** Өріске «Автор» атауын береміз

**5-қадам.** Өзгерістерді сақтаймыз

Нәтижесінде өріс өтінімді жасаған пайдаланушының тіркелгісімен автоматты түрде толтырылады.

Маршрут кезеңін жасау
^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Кезең баптауларында мыналарды көрсетеміз:

* Іс-қимыл түрі — «Нысан бойынша жұмыс»
* Кезең атауы — қадам логикасына сәйкес, мысалы «Өтінімге қол қою»
* Кезең коды — міндетті емес, скриптерде немесе шарттарда кезеңге жүгінгенде қолданылады.
* Жауапты — мұнда өтінімнің авторы болатын өрістің кодын көрсету қажет (entity_author), оны алдын ала қадамда жасадық
* Жұмыс түрі — келісу
* Қайтару — бұл өрісте келісуден бас тартылған жағдайда оралу қажетті маршрут кезеңі көрсетіледі (қажет болған жағдайда). Біздің жағдайда бос қалдыруға болады.

**2-қадам.** Кезең баптаулары тақтасындағы дискета белгішесін басып, кезеңді сақтаймыз.

.. figure:: ../resources/img/step1.jpeg

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/f2suSkpjfIs"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


.. note::

    ЭЦҚ қол қою модулін қосу туралы қосымша ақпарат: http://rtd.lan.arta.kz/docs/docs-po-platforme-arta-synergy/ru/latest/signing.html

3-кезең. Өтінімді тіркеу
--------------------------

**Кіріс** — жүйеде қол қойылған өтінім

**Шығыс** — тіркеу нөмірі қалыптастырылған өтінім

Жүйеде өтінімнің нөмірін қалыптастыру **есептегіш** негізінде жүзеге асырылады.

.. note::

    **Есептегіш** — дәйекті сандық мәндер генерациялауға арналған жүйенің негізгі нысаны.
    Өтінімдерді, құжаттарды және басқа объектілерді нөмірлеу үшін қолданылады.

Есептегіш жасау
^^^^^^^^^^^^^^^

**1-қадам.** Қолданба ағашында есептегіштер сақталатын қалтаны таңдаймыз

**2-қадам.** Тінтуірдің оң жақ батырмасын басып, Қосу → Негізгі нысандар → Есептегіш таңдаймыз

**3-қадам.** Есептегіш туралы ақпаратты өңдеу тақтасы ашылады:

.. figure:: ../resources/img/counter_new.jpeg

* **Код** — міндетті өріс. Нөмір шаблонындағы есептегішке жүгіну үшін қолданылады.
* **Бастапқы мән** — нөмірлеу басталатын мән.
* **Келесі мән** — бастапқы мәннен кем болмауы тиіс.
* **Сброс кезеңі** — келесі мәннің бастапқыға қашан қайта оралатынын анықтайды.
Мүмкін нұсқалар:

    * Ешқашан (әдепкі бойынша)
    * Күн сайын
    * Апта сайын
    * Ай сайын
    * Жыл сайын

**4-қадам.** Қажетті мәндерді енгізіп, «Сақтау» батырмасын басамыз

.. figure:: ../resources/img/counter.jpeg

Есептегішті жасағаннан кейін оны нөмір шаблонына байланыстыру қажет, одан кейін шаблонды нысанға орналастырамыз.

Есептегішті нөмір шаблонына байланыстыру
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Қажетті қалтаны таңдап, оны тінтуірдің оң жақ батырмасымен басамыз Қосу → Құжат айналымы → Нөмір шаблоны

**2-қадам.** Нөмір шаблонын жасау терезесінде мыналарды көрсетеміз:

    * Атауы — есептегіштің атауы немесе оның мақсаты (мысалы «ATLAS қызметтеріне өтінімнің нөмірі»)
    * Код — логикалық кодты қоямыз немесе автоматты жасалған транслитті қалдырамыз
    * Мән — бұрын жасаған есептегішіміздің кодын {есептегіш_коды} форматында орналастырамыз

.. figure:: ../resources/img/number_template.jpeg

**3-қадам.** Нөмір шаблонын сақтаймыз.

Нысанға нөмір шаблонын қосу
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Өтінім нысанына ораламыз

**2-қадам.** **«Өтінімнің реттік нөмірі»** өрісінде оның **«Нөмір»** компонентін белгілейміз

**3-қадам.** **«Нөмір шаблоны»** жолында жасалған шаблонды таңдаймыз

.. figure:: ../resources/img/number_template_in_form.jpeg

**4-қадам.** Нысанды сақтаймыз

Автоматты түрде жасалған нөмір жүйедегі өтінімнің тіркелуі болып табылады.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/he_OPl19sXU"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


3-кезең. Тапсырыс нөмірі туралы хабарландыру жіберу.
------------------------------------------------------

**Кіріс** — ЭЦҚ арқылы қол қойылған және жүйеде тіркелген қызметке өтінім

**Шығыс** — клиенттің поштасына хабарландыру

Бұл кезеңде клиенттің поштасына өтінімнің нөмірі көрсетілген тіркелу туралы хабарландыру жіберіледі.

**1-қадам.** Маршрут редакторында жаңа кезең қосу үшін «+» батырмасын басамыз

**2-қадам.** Кезең баптауларында **«Поштаға хат жіберу»** іс-қимыл түрін таңдаймыз

**3-қадам.** Мыналарды көрсетеміз:

 * Кезеңнің атауы, мысалы **«Тапсырыс нөмірі туралы хабарландыру жіберу»**
 * Код — қажет болған жағдайда
 * Нысандағы өріс коды — клиент поштасы бар нысандағы өрісті білдіреді. Мысалы, біздің жағдайда бұл textbox_mail
 * HTML разметкасын қолдайтын хат тақырыбы — хат тақырыбын қамтиды
 * HTML разметкасын қолдайтын хат мәтіні — қажетті өрістердің деректерімен хаттың негізгі мәтінін қамтиды

 Біздің жағдайда ТЗ (ордер) бойынша HTML хат шаблоны мынадай болады:

 ``Сіздің "`` +  $listbox_type + ``" өтініміңіз "`` + $counter_number + ``" нөмірімен тіркелді.``

* мұнда ``listbox_type`` — **«Өтінім түрі»** өрісінің коды
* ``counter_number`` — **«Өтінім нөмірі»** өрісінің коды
* **«Сіздің өтініміңіз»** және **«нөмірімен тіркелді»** — әрбір хатта бірдей болатын статикалық мәтін.
* $ таңбасы — айнымалыға жүгіну.
$ таңбасы міндетті және одан кейін өтінімнің деректерінен мәні алынатын айнымалы көрсетілетінін білдіреді:

    *	$listbox_type — Өтінім түрі өрісінің мәні
    *	$counter_number — есептегіш қалыптастырған өтінімнің нөмір мәні

Хат жіберу кезінде жүйе өтінімнің деректерінен осы өрістердің нақты мәндерін автоматты түрде қояды.

.. figure:: ../resources/img/step3_notification_new.jpg

**3-қадам.** Хаттың дұрыстығын тексеріп, кезеңді сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/b3G2c7BuYlA"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


 .. note::
    **«Сынақ хатты жіберу»** батырмасы хабарландырудың жұмысын тікелей маршруттан хабарландыруды поштаға жіберу арқылы тексеруге мүмкіндік береді. (Ол үшін қолданбада пошта қызметі баптауы қажет). Батырманы басқаннан кейін жүйе өтінімде көрсетілген поштаға хат жіберу үшін тізілімде жасалған өтінімді таңдауды ұсынады.

4-кезең. Орындаушыны тағайындау
--------------------------------

**Кіріс** — менеджерге түскен өтінім

**Шығыс** — орындаушы тағайындалған өтінім

Бұл қадамды іске асыру үшін **«Нысан бойынша жұмыс»** түрін пайдаланамыз

Орындаушыны тағайындауды менеджер жүзеге асырады.
Нақты орындаушы өтінімнен өтінімге өзгеше болуы мүмкін болғандықтан, оны кезеңді орындау барысында қолмен көрсету қажет.

Алдымен нысанда орындаушыны тағайындауға арналған менеджерлік құрам көрсетілетін өрісті жасауымыз қажет.

Алдын ала баптау
^^^^^^^^^^^^^^^^

**1-қадам.** Нысанға ораламыз

**2-қадам.** Жасырын кестеде «Автор» өрісінің астына **«Synergy объектілері»** компонентімен тағы бір **«Менеджер»** өрісін қосамыз

**3-қадам.** Компонент баптауларында оған мағыналы кодты береміз (мысалы entity_manager) және **«Деректер түрі»** баптауында «Пайдаланушы», «Лауазымдар» немесе «Бөлімшелер» түрін таңдаймыз.

.. note::
    Егер өтінім бұл кезеңде нақты бір адамға түсуін қаласақ — оның тіркелгісін өтінімге тіркейміз, ол үшін **«Пайдаланушы»** деректер түрін таңдап, өрісте нақты адамды таңдаймыз.

    Егер жүйеде белгілі бір жұмысқа жауапты тағайындалған пайдаланушылары бар лауазым болса, онда **«Лауазымдар»** деректер түрі пайдаланылады, онда лауазым көрсетіледі де жұмыс осы лауазымдағы барлық пайдаланушыларға түседі.

    Егер жұмысты тұтас бөлімшеге, оның ішіндегі лауазымдармен бірге бағыттау қажет болса, **«Бөлімшелер»** деректер түрі пайдаланылады, сонда жұмыс таңдалған бөлімшенің барлық кірістірілген лауазымдарындағы барлық адамдарға түседі.

.. figure:: ../resources/img/field_manager.jpeg

    Алдын ала толтырылған пайдаланушысы бар өріс мысалы

**4-қадам.** Нысанды сақтаймыз

Маршрут кезеңін жасау
^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Маршрут редакторында «Іс-қимылдар» тақтасындағы **«+»** батырмасын басамыз

**2-қадам.** Кезең баптауларында мыналарды көрсетеміз:

* Іс-қимыл түрі — нысан бойынша жұмыс
* Кезең атауы — орындаушыны тағайындау
* Жауапты — жасаған менеджер өрісінің кодын (мысалы entity_manager) көрсетеміз
* Жұмыс түрі — «Жұмыс»
* «Аяқтау нысанын пайдалану» баптауын қосамыз

.. admonition:: Аяқтау нысаны.

    Аяқтау нысаны — жұмысты орындаған кезде ашылатын модальды терезе болып табылады және пайдаланушының кезеңді аяқтауы үшін не жасауы керектігін анықтайды.
    Аяқтау нысандарының бірнеше түрі бар:

    * Пікір — нәтиже пікір болып табылады.
    * Файл — нәтиже файл болып табылады (құрылғыдан, қоймадан немесе жұмыс қолданбаларынан).
    * Құжат — жұмысқа байланысты құжатты таңдау немесе жасау.
    * Нысан — бөлек нысанды толтыру (біздің жағдайда қолданылады).
    * Нәтижесіз — нәтижесіз аяқтау.

    Аяқтау нысандары туралы толық ақпарат: http://rtd.lan.arta.kz/docs/docs-po-platforme-arta-synergy/ru/latest/completion_form.html

Аяқтау нысанын жасау
^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Қажетті қалтаны тінтуірдің оң жақ батырмасымен басып, Қосу → Негізгі нысандар → Нысан таңдаймыз.

**2-қадам.** Нысанға мыналарды береміз:

* негізгі нысаннан ерекшелендіретін түсінікті атау
* ұқсас код

**3-қадам.** Орындаушыны көрсетуге арналған өріс қосамыз:

* Атауы — Орындаушы
* «Synergy объектілері» компоненті

.. figure:: ../resources/img/completion_form.jpeg

Орындаушы процестің келесі қадамының міндетті қатысушысы болғандықтан, өрісті міндетті етеміз.

**4-қадам.** Нысанды сақтаймыз.

Аяқтау нысанын кезеңге байланыстыру
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** **«Орындаушыны тағайындау»** кезеңін баптауға ораламыз

**2-қадам.** **«Аяқтау нысаны»** жолында «+» батырмасын басамыз.
Ашылған терезеде:

* аяқтау түрін «Нысан» деп таңдаймыз;
* код пен атау береміз (ыңғайлылық үшін жасалған нысанға ұқсас жасаймыз);
* «Нысан» өрісінде жасалған нысанды таңдаймыз.

.. figure:: ../resources/img/step_fz.jpeg

**3-қадам.** Кезеңді сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/OSBg56P0-ik"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


.. important::
    Жұмыс **лауазымға** немесе **бөлімшеге** бағытталған жағдайда мынадай баптауды қосу қажет: **«Олардың бірі аяқтаған соң параллель кезеңдерді орындауды тоқтату»**.
    Өйткені маршрут жалғасқанға дейін әрбір пайдаланушы орындаушыны тағайындауды орындауы қажет болады.

.. admonition:: ЕСКЕРТПЕ

    Аяқтау нысаны бөлек нысан болғандықтан, аяқтау нысанына енгізілген деректер негізгі нысанға автоматты түрде түспейді. Аяқтау нысанына енгізілген деректерді одан әрі пайдалану үшін оларды **«Бұғаттаушы процесс»** деп аталатын бөлек кезең арқылы негізгі нысанға тасымалдау қажет. Бұл 5-кезеңде толық сипатталады.

5-кезең. Өтінімнің мәртебесін өзгерту
---------------------------------------

**Кіріс** — орындаушы тағайындалған өтінім

**Шығыс** — «жұмыста» мәртебесі бар өтінім

Мәртебені өзгерту **«Бұғаттаушы процесс»** маршрут кезеңі іске қосатын интерпретатор скриптінің көмегімен автоматты түрде орындалады.

.. note:: **Интерпретатор скрипті** — Synergy жүйесіндегі JavaScript бағдарламалық коды, ол компиляциясыз орындалады және жүйенің жұмыс логикасын автоматтандыруға мүмкіндік береді.
    Ол есептеулер, нысандар мен карточкалар деректерін өңдеу, сондай-ақ жүйенің ішкі оқиғаларына жауап беру үшін қолданылады.
    Скрипт іске қосылған кезде немесе оқиға кезінде бірден орындалып, нәтижені жүйеге қайтарады.

    Интерпретатор скрипті туралы толық ақпарат: http://rtd.lan.arta.kz/docs/guide/ru/minsky/interpreter.html

Интерпретатор скриптін жасау
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Қолданба ағашында скриптлерді сақтауға арналған қалтаны таңдаймыз.
Ыңғайлылық үшін мыналарды пайдалануға болады:

* integrations қалтасы,
* немесе block_processes деп аталатын бөлек қалта жасауға болады.

**2-қадам.** Қалтаны тінтуірдің оң жақ батырмасымен басамыз → Қосу → Интеграция → Интерпретатор скрипті.

**3-қадам.** Ашылған кодты өңдеу терезесінде мыналарды көрсетеміз:

* Атауы — Жүйе автоматты түрде ``event.blocking.interpreter`` негізгі префиксін береді.
Атауды және кодты толықтыру қажет, латын әріптерін пайдаланып скрипттің жұмыс логикасын бейнелеу керек. Мысалы ``event.blocking.interpreter.change.status_work``

* Код — атаудан автоматты қалыптасады
* Сипаттама — скрипттің жұмыс логикасын түсіндіру қажет болған жағдайда қосылады
* Әдепкі пікір — міндетті баптау, бұл скрипт орындалғаннан кейін жүйе шығаратын хабар. (мысалы «ОК» немесе «Мәртебе өзгертілді»)
* Авторизация — скрипттің іске қосылуы үшін қол жеткізу құқықтары қажет. Екі нұсқасы бар:
        * Логин және пароль бойынша — әкімші құқықтары бар тіркелгінің логині мен паролі қажет болады
        * Кілт бойынша — әкімші кілті қажет болады

**4-қадам.** **«Логин және пароль бойынша»** авторизация түрін таңдап, әкімші тіркелгісін көрсетеміз

.. important:: Әкімші тіркелгісінің логині мен паролі өзгерген жағдайда, осы тіркелгіні пайдаланатын барлық интерпретатор скриптлерінде логин мен парольді жаңарту қажет болады

**5-қадам.** Код редакторына мәртебені өзгертуге арналған стандартты скриптті кірістіреміз

.. code-block:: javascript

 var result = true;
 var message = 'Мәртебе мәнін өзгерту';
  try {
    var form = platform.getFormsManager().getFormData(dataUUID);
    form.load();
    form.setValue('анықтамалық коды', 'мән коды');
    form.save();
 } catch (e) {
   result = false;
   message = e.message;
 }

**3-қадам.** Сөздердің орнына:

*  **«анықтамалық коды»** — мәртебелер тізімі бар ашылмалы тізімнің өріс кодын көрсетеміз, мысалы біздің жағдайда ``listbox_status``
*  **«мән коды»** — мәртебенің сменалатын мәнін, анықтамалық бойынша біздің жағдайда бұл 4 мән («Жұмыста»)

.. figure:: ../resources/img/listbox_status.jpeg

Барлығы дұрыс орындалса, код мынадай болады:

.. figure:: ../resources/img/script_status_work.jpeg

**4-қадам.** Интерпретатор скриптін сақтап, кезеңді баптауға ораламыз

Маршрут кезеңін жасау
^^^^^^^^^^^^^^^^^^^^^

**1-қадам.** Маршрутта жаңа кезең қосамыз.

**2-қадам.** Кезең баптауларында:

* кезең атауын көрсетеміз (мысалы, «Мәртебені "Жұмыста" деп өзгерту»);
* **«Оқиға»** өрісіне жасалған интерпретатор скриптінің атауын кірістіреміз.

.. figure:: ../resources/img/step_status_work.jpeg

**3-қадам.** Кезеңді сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/veKH-nlP9pw"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


4-кезеңге арналған интерпретатор скрипті
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Маршрутқа бұғаттаушы процесс қосуды үйренген соң, 4-кезеңнің аяқтау нысанынан деректерді негізгі нысанға тасымалдауға арналған тағы бір интерпретатор скриптін жасаймыз.

**1-қадам.** Алдымен негізгі өтінім нысанына аяқтау нысанындағы **«Орындаушы»** өрісін қосамыз. Өріс ұқсас кодқа ие болуы тиіс.

.. figure:: ../resources/img/entity_responsible.jpeg


**2-қадам.** Өтінім нысанын сақтаймыз

**3-қадам.** Қажетті қалтаны тінтуірдің оң жақ батырмасымен басамыз → қосу → интеграция → интерпретатор скрипті

**4-қадам.** Код редакторына аяқтау нысанынан деректерді негізгі нысанға тасымалдайтын скриптті қосамыз:

Мұндай бұғаттаушы процестің мысалы:

.. code-block:: javascript

   var result = true;
   var message = 'ok';

   function getHttpClient() {
     let client = new org.apache.commons.httpclient.HttpClient();
     let creds = new org.apache.commons.httpclient.UsernamePasswordCredentials(login, password);
     client.getParams().setAuthenticationPreemptive(true);
     client.getState().setCredentials(org.apache.commons.httpclient.auth.AuthScope.ANY, creds);
     return client;
   }

   function httpGetMethod(methods, type) {
     let client = getHttpClient();
     let get = new org.apache.commons.httpclient.methods.GetMethod(
       "http://127.0.0.1:8080/Synergy/" + methods
     );
     get.setRequestHeader("Content-type", "application/json");
     client.executeMethod(get);
     let resp = get.getResponseBodyAsString();
     get.releaseConnection();
     return type == 'text' ? resp : JSON.parse(resp);
   }

   function httpPostMethod(methods, params, contentType) {
     let client = getHttpClient();
     let post = new org.apache.commons.httpclient.methods.PostMethod(
       "http://127.0.0.1:8080/Synergy/" + methods
     );

     if (contentType) {
       post.setRequestBody(JSON.stringify(params));
     } else {
       for (let key in params) post.addParameter(key, params[key]);
     }

     post.setRequestHeader(
       "Content-type",
       contentType || "application/x-www-form-urlencoded; charset=utf-8"
     );

     let resp = client.executeMethod(post);

     if (contentType) {
       resp = JSON.parse(post.getResponseBodyAsString());
     }

     post.releaseConnection();
     return resp;
   }

   function getProcesses(documentID) {
     return httpGetMethod("rest/api/workflow/get_execution_process?documentID=" + documentID);
   }

   function getWorkCompletionData(workID) {
     return httpGetMethod("rest/api/workflow/work/get_completion_data?workID=" + workID);
   }

   function getFormData(asfDataId) {
     return httpGetMethod("rest/api/asforms/data/" + asfDataId);
   }

   function mergeFormData(uuid, data) {
     return httpPostMethod(
       "rest/api/asforms/data/merge",
       {
         uuid: uuid,
         data: data
       },
       "application/json; charset=utf-8"
     );
   }

   let UTILS = {
     createField: function (fieldData) {
       let field = {};
       for (let key in fieldData) field[key] = fieldData[key];
       return field;
     },

     getValue: function (data, cmpID) {
       data = data.data ? data.data : data;
       for (let i = 0; i < data.length; i++) {
         if (data[i].id === cmpID) return data[i];
       }
       return null;
     },

     setValue: function (asfData, cmpID, data) {
       let field = this.getValue(asfData, cmpID);

       if (field) {
         for (let key in data) {
           if (key === 'id' || key === 'type') continue;
           field[key] = data[key];
         }
         return field;
       } else {
         asfData = asfData.data ? asfData.data : asfData;
         field = this.createField(data);
         field.id = cmpID;
         asfData.push(field);
         return field;
       }
     }
   };

   function processesFilter(processes) {
     let result = [];

     function search(p) {
       p.forEach(function (x) {
         if (x.typeID == 'ASSIGNMENT_ITEM' && x.finished) result.push(x);
         if (x.subProcesses.length > 0) search(x.subProcesses);
       });
     }

     search(processes);

     return result.sort(function (a, b) {
       return new Date(b.finished) - new Date(a.finished);
     });
   }

   try {
     let processes = processesFilter(getProcesses(documentID));

     if (!processes.length) throw new Error('Аяқталған жұмыс табылмады');

     let resultFormWork = getWorkCompletionData(processes[0].actionID);

     if (!resultFormWork || !resultFormWork.result.hasOwnProperty('dataUUID')) {
       throw new Error('Аяқтау нысаны табылмады');
     }

     let completionFormData = getFormData(resultFormWork.result.dataUUID);

     let newFormData = [];
     let matching = [];

     // аяқтау нысанынан негізгі нысанға сәйкестендіру өрістері
     matching.push({ from: 'аяқтау нысанындағы өріс', to: 'негізгі нысандағы өріс' });

     matching.forEach(function (id) {
       let fromData = UTILS.getValue(completionFormData, id.from);
       if (fromData) UTILS.setValue(newFormData, id.to, fromData);
     });

     mergeFormData(dataUUID, newFormData);

   } catch (err) {
     message = err.message;
   }

.. figure:: ../resources/img/meme_script.jpg

**5-қадам.** Скриптте matching өрістерін сәйкестендіру блогын табып, тырнақша ішіндегі мәтінді ауыстырамыз

* from — аяқтау нысанындағы «Орындаушы» өрісінің коды
* to — мәнді тасымалдайтын негізгі нысандағы «Орындаушы» өрісінің коды

Мысал:

Дейін:

.. figure:: ../resources/img/matching_before.jpeg

Кейін:

.. figure:: ../resources/img/matching_after.jpeg


**6-қадам.** Интерпретатор скриптіне атау береміз, мысалы ``event.blocking.interpreter.completion_form_responsible``

**7-қадам.** Қажет болса сипаттама қосып, бұрын жасағандай авторизация деректерін көрсетеміз

**8-қадам.** Барлығы дайын болған соң нысанды сақтап, маршрутқа кезең қосуға өтеміз.

4-кезеңге қосымша қадам қосу
------------------------------

**1-қадам.** «Бұғаттаушы процесс» іс-қимыл түрімен кезең қосамыз:

* Атауы — аяқтау нысанынан деректерді тасымалдау
* Оқиға — аяқтау нысанынан деректерді тасымалдауға арналған жасалған интерпретатор скриптінің кодын кірістіреміз (``event.blocking.interpreter.completion_form_responsible``)

.. figure:: ../resources/img/step4.jpeg

**2-қадам.** Кезеңді сақтап, кезеңдердің дұрыс тәртібін қалыптастыруға өтеміз. Аяқтау нысанымен деректерді тасымалдау кезеңін тікелей аяқтау нысаны бар кезеңнің астына жылжыту қажет.

**3-қадам.** Кезеңді жылжыту үшін кезең нөмірінің жанындағы жылжыту батырмасын ұстаймыз

.. image:: ../resources/img/button_dragndrop.jpeg

және жолды қажетті орынға сүйреп апарамыз

.. figure:: ../resources/img/steps.jpeg

Енді барлық кезеңдер дұрыс тәртіппен орналасқан.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/CgS9Mpe6nIA"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>

6-кезең. Өтінімнің мәртебесі өзгергені туралы өтінім берушіге хабарландыру жіберу
------------------------------------------------------------------------------------

**Кіріс** — «Жұмыста» мәртебесі бар өтінім

**Шығыс** — өтінімнің мәртебесі өзгергені туралы өтінім берушіге хабарландыру

Мұнда бізге таныс **«Поштаға хат жіберу»** кезеңін пайдаланамыз

**1-қадам.** Маршрут редакторында жаңа кезең қосу үшін «+» батырмасын басамыз.

**2-қадам.** Кезең баптауларында таңдаймыз:

* Іс-қимыл түрі — Поштаға хат жіберу;
* Кезеңнің атауы — «Өтінімнің мәртебесі өзгергені туралы хабарландыру»;
* Кезең коды — қажет болған жағдайда.
* Нысандағы өріс коды — Өтінім берушінің электрондық пошта мекенжайы бар нысан өрісін көрсетеміз. Біздің жағдайда — ``textbox_mail``.
* Хат тақырыбы (HTML разметкасын қолдайтын) — «Atlas компаниясының қызметтеріне өтінімнің мәртебесі өзгертілді»
* Хат мәтіні (HTML разметкасын қолдайтын) — «Сіздің « + $listbox_type + « туралы » + $counter_number + « нөмірлі өтініміңіз жұмысқа қабылданды»

.. figure:: ../resources/img/step6_new.jpg

**3-қадам.** Кезеңді сақтаймыз

7-кезең. Қызмет түрін тексеру
------------------------------

Бұл кезеңде жүйе өтінімде көрсетілген қызмет түрін автоматты түрде анықтайды және оны тиісті өңдеу сценарийіне бағыттайды.

**Кіріс** — жүйеде берілген, қызмет түрі көрсетілген өтінім.

**Шығыс** —

* қызмет түрі «Қызмет көрсетуге жазылым» болса, өтінім шарт жасау кезеңіне бағытталады
* басқа қызмет түрі болса — орындаушының жұмысына бағытталады

Бұл кезең өтінім нысанының өрістерінің мәндеріне байланысты бизнес-процестің тармақталуын іске асыру үшін қолданылады.

Ол үшін **«Шартты ауысу»** іс-қимыл түрі пайдаланылады. Бұл іс-қимыл түрі жүйемен орындалады және өтінім нысанындағы шарттарды (әдепкі бойынша) немесе аяқтау нысанынан оқитын және өтінімді маршруттың кезеңдерінің біріне жіберетін «тексеру» болып табылады.

**1-қадам.** Маршрут редакторында «+» батырмасын басып жаңа кезең қосамыз.

**2-қадам.** Кезең баптауларында таңдаймыз:

* Іс-қимыл түрі — Шартты ауысу;
* Кезең атауы — Қызмет түрін тексеру;
* Кезең коды — қажет болған жағдайда

**3-қадам.** «Ауысулар» қойындысын ашамыз.
«Ауысулар» қойындысы мыналарды қамтиды:

    * ауысу қосу батырмасы;
    * әдепкі ауысу қосу батырмасы.

.. figure:: ../resources/img/transitions.jpeg

**4-қадам.** «Ауысулар» қойындысында **«Ауысу қосу»** батырмасын басамыз

.. figure:: ../resources/img/transition_edit.jpeg

**5-қадам.** Сол жақ операндта тексеретін өріс кодын көрсетеміз — біздің жағдайда **«Қызмет түрі»** тексереміз.

**6-қадам.** Салыстыру операторында **«=»** таңдаймыз, өйткені Қызмет түрі белгілі бір мәнге тең болған жағдайда ауысуды жүзеге асыру қажет

**7-қадам.** Оң жақ операндта ауысуды жүзеге асыру үшін **«Қызмет түрі»** өрісінде таңдалуы тиіс мәнді көрсету қажет. Ол үшін анықтамалықтың қызмет мәні көрсетілген бағанына жүгінеміз.

.. figure:: ../resources/img/type_of_service.jpeg

* 2 мән таңдалса – Қызмет көрсетуге жазылым, өтінімді шарт жасауға жіберу қажет.
Ол үшін оң жақ операндта **2** мәнін көрсетеміз

**8-қадам.** **«Онда»** іс-қимылын баптау. Шарт орындалған жағдайда екі нұсқа қол жетімді:

    * Шаблон бойынша маршрут іске қосу;
    * Кезеңге өту.

Біздің жағдайда шарт жасау кезеңіне өту талап етіледі, сондықтан:

* **«Кезеңге өту»** таңдаймыз;
* болашақ кезеңнің кодын, мысалы: ``create_agreement`` көрсетеміз

.. admonition:: Мұндай баптау кезінде не болады

    жүйе **«Қызмет түрі»** өрісінің мәнін оқиды;

    мән = **«Қызмет көрсетуге жазылым»** болса,
    маршрут шарт жасау кезеңіне өтеді.

**9-қадам.** **«Ауысулар»** қойындысында **«Әдепкі ауысуды қосу»** батырмасын басамыз.

.. admonition:: Әдепкі ауысу не үшін қажет

    Тек бір шарт көрсетілсе, ал ол орындалмаса, маршрут жалғаспайды.
    Сондықтан балама жолды анықтау қажет.

**10-қадам.** Әдепкі ауысуда **«кезеңге өту»** іс-қимылын көрсетеміз

**11-қадам.** Орындаушы жұмысының болашақ кезеңінің кодын енгіземіз, мысалы: ``work_executor``

.. figure:: ../resources/img/default_transition.jpeg

**12-қадам.** Шартты ауысулардың баптауларын және кезеңнің өзін сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/DOgTjs9aY3s"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


.. note:: Шартты ауысулар туралы толық ақпарат: http://rtd.lan.arta.kz/docs/docs-po-platforme-arta-synergy/ru/latest/conditional_transitions.html

8-кезең. Шарт қалыптастыру
----------------------------

**Кіріс** — «Қызмет көрсетуге жазылым» түріндегі қызметке өтінім.

**Шығыс** — жүйеде жасалған қызмет көрсету шарты.

Бұл кезеңде жүйе қызмет көрсету шартын автоматты түрде қалыптастырады. Ол үшін **«Тізілімде жазба жасау»** маршрут іс-қимыл түрін пайдаланамыз.

Кезең өтінімнің деректері негізінде шарттардың бөлек тізіліміне жаңа жазба жасау үшін қолданылады.

**1-қадам.** Маршрут редакторында **«+»** батырмасын басып жаңа кезең қосамыз.

**2-қадам.** Кезең баптауларында мыналарды көрсетеміз:

* Іс-қимыл түрі — Тізілімде жазба жасау;
* Атауы — Шарт қалыптастыру;
* Код — ``create_agreement`` (шартты ауысу кезеңінде көрсетілген сол код).
* **«Жазба жасалуы тиіс тізілім»** өрісін осы кезеңде бос қалдырамыз.
Ол шарт нысаны мен тізілімін жасағаннан кейін толтырылады.

* **«Іс-қимыл кімнен жасалады»** өрісінде шарт тізілімінде жазбалар жасалатын пайдаланушыны көрсетеміз. Әдетте, әкімші құқықтары бар тіркелгі пайдаланылады.
* Жазба жасалғаннан кейін маршрут бойынша бірден жіберілуі тиіс болса **«Тізілім жазбасын белсендіру»** баптауына жалауша қоямыз

.. figure:: ../resources/img/step8.jpeg

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/synUBfG2BSk"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


8.1-кезең. Орындаушының жұмысты аяқтауы
-----------------------------------------

**Кіріс** — орындаушы өңдеген өтінім.

**Шығыс** — аяқталған өтінім және электрондық поштаға хабарландыру жіберу.

Ыңғайлылық үшін бұл процесс тармағын бөлек **«Маршрут шаблонына»** шығарамыз.

.. admonition:: Маршрут шаблоны:

    Бірнеше тізілімде бір уақытта пайдаланылуы мүмкін кірістірілген маршрутты білдіреді.
    Шаблондағы маршрутты баптау алдын ала және кейінгі кезеңдердің болмауынан басқа, тізілімдегі маршрутты баптаудан аз айырмашылығы бар.

    Маршрут шаблоны туралы толық ақпарат: http://rtd.lan.arta.kz/docs/docs-po-platforme-arta-synergy/ru/latest/route_template.html

**1-қадам.** Ыңғайлы қалтаны тінтуірдің оң жақ батырмасымен басып, таңдаймыз:
Қосу → Процестер → Маршрут шаблоны.

**2-қадам.** Ашылған беттe мыналарды көрсетеміз:

* маршрут шаблонының атауы
* тиісті код

.. figure:: ../resources/img/route_template_new.jpeg

.. figure:: ../resources/img/route_template_saved.jpeg

**4-қадам.** **«+»** батырмасын басып орындаушы жұмысының кезеңін қосамыз:

* Іс-қимыл түрі — нысан бойынша жұмыс
* Жауапты — менеджер тағайындаған орындаушы көрсетілетін өрістің коды.
* Жұмыс түрі — жұмыс
* «Аяқтау нысанын пайдалану» баптауын қосып, «Пікір» аяқтау нысанын таңдаймыз

.. figure:: ../resources/img/work_executor.jpeg

**5-қадам.** Маршрут шаблонын сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/T3J9ihl59a8"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


8.2-кезең. Өтінімнің мәртебесін «Орындалды» деп өзгерту
----------------------------------------------------------

**Кіріс** — орындаушы жұмысы орындалған өтінім.

**Шығыс** — **«Орындалды»** мәртебесі бар өтінім.

Мәртебені өзгерту үшін бізге таныс интерпретатор скрипті пайдаланылады.

Ыңғайлылық үшін ұқсас логикасы бар бұрын жасалған интерпретатор скриптін аламыз да оның көшірмесін кейбір өзгерістермен жасаймыз.

**1-қадам.** Объектілер ағашынан бұрын жасалған мәртебені өзгертуге арналған интерпретатор скриптін табамыз.

**2-қадам.** Оны тінтуірдің оң жақ батырмасымен басып, «Көшірме жасау» таңдаймыз.

.. figure:: ../resources/img/create_copy.jpeg

**3-қадам.** Жасалған көшірмені ашып, скрипт кодында мәртебе мәнін қажеттіге өзгертеміз, біздің жағдайда 4 мәнін (жұмыстағы мәртебе) 5-ке (орындалды) өзгерту қажет.

**4-қадам.** Скрипттің атауы мен кодын логикасына сәйкес өзгертеміз, мысалы ``event.blocking.interpreter.change.status_ready``

.. figure:: ../resources/img/script_status_ready.jpeg

**5-қадам.** Скриптті сақтаймыз.

**6-қадам.** Маршрут шаблонына ораламыз да жаңа кезең қосамыз:

* Іс-қимыл түрі — бұғаттаушы процесс
* Атауы — «Өтінімнің мәртебесін «Орындалды» деп өзгерту»
* Оқиға — жасалған скриптіміздің атауын кірістіреміз

.. figure:: ../resources/img/step_status_ready.jpeg

**7-қадам.** Кезеңді сақтаймыз

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/Wfr1vgUFgSM"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


8.3-кезең. Өтінімнің мәртебесі туралы хабарландыру жіберу
-----------------------------------------------------------

Мәртебені өзгерткеннен кейін өтінім берушіге оның өтінімі орындалғаны туралы хабарлау қажет.

**1-қадам.** Сол маршрут шаблонында жаңа кезең қосамыз:

* Іс-қимыл түрі — «Поштаға хат жіберу»
* Өтінім берушінің поштасы бар нысан өрісінің коды — ``textbox_mail``
* Хат тақырыбы — «Сіздің ATLAS компаниясының қызметтеріне өтінімінің мәртебесі өзгертілді»
* Хат мәтіні — «Сіздің « + $listbox_type + « туралы » + $counter_number + « нөмірлі өтініміңіз орындалды.»

.. figure:: ../resources/img/step_ready_notification.jpeg

**2-қадам.** Кезеңді және маршрут шаблонын сақтаймыз.

Маршрут шаблонын тізілімге байланыстыру
-----------------------------------------

Енді жасалған шаблонды шартты ауысу арқылы өтінімнің негізгі маршрутына қосу қажет.

**1-қадам.** Негізгі маршрутқа ораламыз да «Шартты ауысу» кезеңін белгілейміз.

**2-қадам.** «Ауысулар» қойындысын ашамыз

**3-қадам.** «Әдепкі ауысу» бөлімінде «Шаблон бойынша маршрут іске қосу» нұсқасын таңдаймыз

**4-қадам.** Ашылған тізімнен жасалған маршрут шаблонын таңдаймыз

**5-қадам.** Шартты ауысу кезеңінің жанындағы баптаулар қойындысына өтеміз

.. figure:: ../resources/img/settings_icon.jpeg

**6-қадам.** «Орындалғаннан кейін» параметрінде «Кезеңге өту» таңдаймыз да ``end`` кодын көрсетеміз.

.. note::
    Осылайша шаблондағы маршрут аяқталғаннан кейін өтінімнің негізгі маршруты белгілі бір кезеңге (бұл жағдайда — соңына) өтуі тиіс екенін нақтылаймыз, ал кезіктіру тәртібіндегі келесі кезеңдерге емес.

**7-қадам.** «ОК» батырмасын басып, кезеңді сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/o2AfUB3xhOA"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


9-кезең. «Шарт қалыптастыру» ішкі процесін жасау
--------------------------------------------------

№2 ордерде өтінім негізінде шарт жасаудың ішкі процесі сипатталған.

:download:`№2 ордер <../resources/img/Order_2_agreement_ATLAS.docx>`

Шарт нысаны мен тізілімін дайындау
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Ордер №2-ге сәйкес болашақ ішкі процестің нысаны мен тізілімін жасаймыз
(Нысан мен тізілімді жасау процесі бұрын қарастырылды.)

**1-қадам.** Негізгі өтінімнің маршрутына «Тізілімде жазба жасау» кезеңіне ораламыз:

* Іс-қимыл түрі — «Тізілімде жазба жасау»
* Кезең коды — create_agreement (бұрын шартты ауысуда көрсетілген)
* Жазба жасалуы тиіс тізілім — жасалған шарт тізілімін көрсетеміз.
* Жасалған құжат жасалған бойда маршрут бойынша жіберілуі қажет болса, **«Тізілім жазбасын белсендіру»** жалаушасын белсенді етеміз

**2-қадам.** Төменде **«Сәйкестендіруді баптау»** қойындысына өтеміз

**3-қадам.** Ашылған терезеде **«+ Сәйкестендіру қосу»** батырмасын басамыз.

**4-қадам.** Ашылған ашылмалы тізімдерде деректер қайдан және қайда түсетін өрістерді таңдаймыз:

* Солда — өтінімнің өрістері (from — қайдан)
* Оңда — шарттың өрістері (to — қайда)

.. figure:: ../resources/img/matching_registries.jpeg

    ЖСН сәйкестендіру мысалы

**5-қадам.** Барлық сәйкестендіруді баптағаннан кейін модальды терезедегі «Сақтау» батырмасын басамыз.

**6-қадам.** Маршрут кезеңін сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/tks2dlXMbL8"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>


10-кезең. Маршруттың соңы.
---------------------------

**Кіріс** — маршруттың барлық кезеңдерінен өткен өтінім.
**Шығыс** — аяқталған процесс.

Бұл кезең өтінімнің бизнес-процесінің орындалуын аяқтайды.

**1-қадам.** Маршрут редакторында жаңа кезең қосу үшін **«+»** батырмасын басамыз.

**2-қадам.** Кезең баптауларында мыналарды көрсетеміз:

* Іс-қимыл түрі — Маршруттың соңы;
* Атауы — Маршруттың соңы;
* Кезең коды — end (бұрын шартты ауысуда көрсетілген)

.. figure:: ../resources/img/step_end.jpeg

**3-қадам.** Кезеңді сақтаймыз.

.. raw:: html

   <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-top:20px;">
       <iframe src="https://www.youtube.com/embed/Nwp07z4Cbw0"
           style="position: absolute; top:0; left:0; width:100%; height:100%;"
           frameborder="0"
           allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
           allowfullscreen>
       </iframe>
   </div>

