Перейти к основному содержанию
`Ctrl`+`K`

# Определение вида сценария JEXL

Определяет сценарий интеграции — значение XML-тега схемы — в зависимости от подкласса документа, например хозяйственной операции или бухгалтерской справки, и класса документа-источника.

Скрипт показывает пример определения сценария по нескольким условиям. Также может использоваться как пример структурирования JEXL-скрипта на логические блоки и использования функций.

Место применения: `Сервис > Инструменты > Выполнить JEXL-скрипт` или в теле другого JEXL-скрипта

Тип: JEXL-скрипт

    //Определение вида сценария интеграции
    // Входящие параметры: id объекта интеграции
    // Блок переменных
    var svDocSubClass = null; // Подкласс хозяйственной операции
    var svDocObjType = null; // Тип объекта хозяйственной операции
    var svSrcDocClass = null; // Класс документа-источника хозяйственной операции
    var svSrcDocSubClass = null; // Подкласс документа-источника хозяйственной операции
    var svSrcDocObjType = null; // Тип объекта документа-источника хозяйственной операции
    var svScenario = null; // Сценарии бухгалтерской справки

    // Блок функций
    // Функция для получения кода сценария бухгалтерской справки
    var procGetScenarioCode = function(rop) {
       svScenario =  nvl(Act_TransDocApi.getObjAttrValue(rop, 'sScenarioSng'), 'NOTDEFINED');
       if (svScenario != 'NOTDEFINED') {
           @begin{
              let selectScenarioCode = `select
                                        cast(scen.scode as varchar) as scode
                                        from zsngbs_expscenarioname scen
                                        where scen.scaption = '`+svScenario+`'`;
              svScenario = sql(selectScenarioCode).asSingle().scode;
           }
       }
       return svScenario;
    }

    // Функция получения подкласса документа
    var procGetSubClass = function(rop) {
       let result =  null;
           @begin{
              result = Btk_ObjectTypeApi.load(rop.getByAttrName("idObjectType")).idSubClass;
           }
       return result;
    }

    // Блок создания объектов
    var rop = Act_TransDocApi.load(id); // Хозяйственная операция
      svDocSubClass = Btk_SubClassApi.load(procGetSubClass(rop)).sCode;
      svDocObjType = Btk_ObjectTypeApi.load(rop.idObjectType).sCode;

    if (isNotNull(rop.gidSrc)) {
      var ropDoc = Btk_ClassApi.loadObject(rop.gidSrc); // Документ-источник
      svSrcDocClass = Btk_ClassApi.load(parseIdClass(rop.gidSrc)).sName;
      svSrcDocSubClass = Btk_SubClassApi.load(procGetSubClass(rop)).sCode;
      svSrcDocObjType = Btk_ObjectTypeApi.load(ropDoc.idObjectType).sCode;
    }

    // Блок определения вида сценария
    if (svDocSubClass == 'Act_TransDoc_BusinessOperation') {
       if(svSrcDocClass = 'Pm_AdvRep') {
          return 'ACC_AO';
       }
    }
    else if (svDocSubClass == 'Act_TransDoc_AccountingInfo') {
      return procGetScenarioCode(rop);
    }
    else return 'NOTDEFINED';