Интеграции#

Описание раздела#

Скрипты, связанные с интеграционными сценариями, определением параметров обмена и выбором логики обработки данных при интеграции.

Скрипты#

Определение вида сценария 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';