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

# Заполнение, проведение и формирование проводок по документам за период

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

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

Внимание

Требует адаптации под конкретную задачу и тип документов. Перед запуском укажите актуальный идентификатор задачи в условии `t.id = ...`, проверьте условия отбора документов, правила перехода состояния и настройки формирования проводок.

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

    //выполнение проводок
    for (let rvx: sql(`select t.id from Asf_DeprCalcTask t where t.id = 255`).asList()) {
      const idvDoc = rvx.id;
      const vDocApi = Asf_DeprCalcTaskApi;
      const ropDoc = vDocApi.load(idvDoc);

      const vDepDocApi = Asf_DeprDocApi;
      const idvDeprDocSummarySC = vDepDocApi.idSummarySC();

      const idavBisObj = asJava(Asf_DeprCalcTaskBisObjApi.byParent(ropDoc).map(rop -> rop.idBisObj).toSet());
      const idavAccKind = asJava(Asf_DeprCalcTaskAccKindApi.byParent(ropDoc).map(rop -> rop.idAccKind).toSet());

      const mkSqlDate = (dp) -> `'${toString(dp, "dd.MM.yyyy")}"'::timestamp`;
      const svSqlFromDate = mkSqlDate(ropDoc.dFrom);
      const svSqlToDate = mkSqlDate(ropDoc.dTo);

      const makeTrans = (ropDoc) -> {
        const ropaSortedTots = Bs_TransObjTypeSettingApi
          .getByObjectTypeActive(ropDoc.idObjectType).sortWith((ropA, ropB) -> ropA.nStateOrder < ropB.nStateOrder);
        const gidvDoc = ropDoc.gid();
        const avParam = asScala({:});
        ropaSortedTots.foreach(ropTots -> {
         // Btk_InfoLogPkg.info(toString(ropTots.nStateOrder));
          Bs_TransPkg.procTransDoc(
            gidvDoc, idpTransSetting = ropTots.id,
            spOperationType = Bs_TransPkg.sMakeOperType(),
            apParam = avParam,
            bpWillValidateTrans = false
          );
        });
      };

      for (let idvBisObj: idavBisObj) {
        for (let idvAccKind: idavAccKind) {
          sql(`
            select t.id
              from Asf_DeprDoc t
             where t.idBisObj = ${idvBisObj}
               and t.idAccKind = ${idvAccKind}
               and t.dTrans between ${svSqlFromDate} and ${svSqlToDate}
               and t.idStateMC >= 100
               and t.idSubClass = ${idvDeprDocSummarySC}
          order by t.dTrans
          `).foreach(rvx -> {
            const ropDeprDoc = vDepDocApi.load(rvx.id);
            vDepDocApi.fillDoc(ropDeprDoc);
            commit();
            vDepDocApi.setidState(ropDeprDoc, vDepDocApi.idDoneState());
            commit();
            makeTrans(ropDeprDoc);
            commit();
          });
        }
      }
    }