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

# Синхронизация количества для заявок на услуги

Используется для синхронизации количества в объектах потребности и проводках закупок с суммой без НДС из позиции заявки. Применяется для заявок на услуги, где объем определяется финансово. При наличии связи с договором также пересчитывает спецификацию.

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

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

    const avRow = sql(`
    select det.id as iddet
          ,n.id as idneedobj
          ,pt.id as idpurchtrans
    from Prs_PurchReqDet det
    join Prs_PurchReqVer ver on ver.id = det.idPurchReqVer
    join Prs_PurchReq req on req.id = ver.idPurchReq
    join Prs_NeedObj n on det.idPurchReqPos = getGidId(n.gidDetNeed)
    join Prs_PurchTrans pt on pt.idNeedObj = n.id
    join Btk_ObjectType ot on req.idObjectType = ot.id
    where ot.sCode = 'Prs_PurchReqCC'
    and coalesce(det.nPriceRate, 0) <> 0
    order by det.id
    `).asList();

    for (r : avRow) {
      var ropDet = Prs_PurchReqDetApi.load(r.iddet);
      var ropNeedObj = Prs_NeedObjApi.load(r.idneedobj);
      var ropPurchTrans = Prs_PurchTransApi.load(r.idpurchtrans);

      if (parseIdClass(ropPurchTrans.gidSrcDetObj) == Cnt_ContractSpecApi.idClass()) {
        // Обновляем объект потребности, а так же проводку
        if (ropDet.nTotalSumNoTax != ropNeedObj.nQtyBase) {
          Prs_NeedObjApi.setnQtyBase(ropNeedObj, ropDet.nTotalSumNoTax);
        }
        if (ropDet.nTotalSumNoTax != ropPurchTrans.nQtyBase) {
          Prs_PurchTransApi.setnQtyBase(ropPurchTrans, ropDet.nTotalSumNoTax);
          // Обновляем позицию спецификации
          var ropCntSpec = Cnt_ContractSpecApi.loadByGid(ropPurchTrans.gidSrcDetObj);
          Prs_ContractPkg.recalcQtyByPurchTrans(ropCntSpec);
        }
      }
      session.flush();
    };

    session.commit();