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

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

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

Место применения: Сервис > Инструменты > Выполнить 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();
      });
    }
  }
}