docs: @Override
    public final void cancel(final Map<String, Object> pRqVs,
      final CustOrder pCuOr, final EOrdStat pStat) throws Exception {
      Set<String> ndFl = new HashSet<String>();
      String tbn = CustOrderGdLn.class.getSimpleName();
      ndFl.add("itsId");
      ndFl.add("quant");
      ndFl.add("good");
      pRqVs.put(tbn + "neededFields", ndFl);
      pRqVs.put(tbn + "gooddeepLevel", 1);
      List<CustOrderGdLn> gds = this.srvOrm.retrieveListWithConditions(
        pRqVs, CustOrderGdLn.class, "where ITSOWNER=" + pCuOr.getItsId());
      pRqVs.remove(tbn + "neededFields");
      pRqVs.remove(tbn + "gooddeepLevel");
      ColumnsValues cvsIil = new ColumnsValues();
      cvsIil.getFormula().add("availableQuantity");
      for (CustOrderGdLn gl : gds) {
        List<GoodsPlace> gps = getSrvOrm().retrieveListWithConditions(pRqVs,
          GoodsPlace.class, "where ISALWAYS=0 and ITEM="
            + gl.getGood().getItsId());
        if (gps.size() > 0) {
          gps.get(0)
            .setItsQuantity(gps.get(0).getItsQuantity().add(gl.getQuant()));
          getSrvOrm().updateEntity(pRqVs, gps.get(0));
          cvsIil.put("itsVersion", new Date().getTime());
          cvsIil.put("availableQuantity", "AVAILABLEQUANTITY+" + gl.getQuant());
          this.srvDb.executeUpdate("ITEMINLIST", cvsIil,
            "ITSTYPE=0 and ITEMID=" + gps.get(0).getItem().getItsId());
        }
      }
      tbn = CustOrderSrvLn.class.getSimpleName();
      ndFl.remove("good");
      ndFl.add("service");
      ndFl.add("dt1");
      ndFl.add("dt2");
      pRqVs.put(tbn + "neededFields", ndFl);
      pRqVs.put(tbn + "gooddeepLevel", 1);
      List<CustOrderSrvLn> sls = this.srvOrm.retrieveListWithConditions(
        pRqVs, CustOrderSrvLn.class, "where ITSOWNER=" + pCuOr.getItsId());
      pRqVs.remove(tbn + "neededFields");
      pRqVs.remove(tbn + "gooddeepLevel");
      for (CustOrderSrvLn sl : sls) {
        if (sl.getDt1() == null) { //non-bookable:
          List<ServicePlace> sps = getSrvOrm().retrieveListWithConditions(pRqVs,
            ServicePlace.class, "where ISALWAYS=0 and ITEM=" + sl.getService()
              .getItsId());
          if (sps.size() > 0) {
            sps.get(0)
              .setItsQuantity(sps.get(0).getItsQuantity().add(sl.getQuant()));
            getSrvOrm().updateEntity(pRqVs, sps.get(0));
            cvsIil.put("itsVersion", new Date().getTime());
            cvsIil.put("availableQuantity", "AVAILABLEQUANTITY+" + sl.getQuant());
            this.srvDb.executeUpdate("ITEMINLIST", cvsIil,
              "ITSTYPE=1 and ITEMID=" + sps.get(0).getItem().getItsId());
          }
        } else { //bookable:
          List<SerBus> sebs = getSrvOrm().retrieveListWithConditions(pRqVs,
        SerBus.class, "where FRE=0 and SERV=" + sl.getService().getItsId()
  + " and FRTM=" + sl.getDt1().getTime() + " and TITM=" + sl.getDt1().getTime());
          if (sebs.size() == 1) {
            sebs.get(0).setFre(true);
            getSrvOrm().updateEntity(pRqVs, sebs.get(0));
          } else if (sebs.size() > 1) {
            this.log.error(pRqVs, CncOrd.class,
          "Several SERBUS for booked service: " + sl.getService().getItsId()
        + "/"  + sl.getDt1().getTime() + "/" + sl.getDt1().getTime());
            for (SerBus seb : sebs) {
              seb.setFre(true);
              getSrvOrm().updateEntity(pRqVs, seb);
            }
          } else {
            this.log.error(pRqVs, CncOrd.class,
          "There is no SERBUS for booked service: " + sl.getService().getItsId()
        + "/"  + sl.getDt1().getTime() + "/" + sl.getDt1().getTime());
          }
        }
      }
      String[] fieldsNames = new String[] {"itsId", "itsVersion", "stat"};
      pRqVs.put("fieldsNames", fieldsNames);
      pCuOr.setStat(pStat);
      getSrvOrm().updateEntity(pRqVs, pCuOr);
      pRqVs.remove("fieldsNames");
    }