Замена контрагента договора с обновлением связанных данных#
Используется для массовой корректировки контрагента по договору и связанным с ним данным. Скрипт заменяет контрагента договора на головного контрагента, добавляет стороны договора, обновляет связанные платежные документы, регистры, объекты баланса, оплаты, акты, счета-фактуры и проводки.
Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт
Внимание
Требует адаптации под конкретный договор и структуру данных. Перед запуском укажите актуальный идентификатор договора в переменной idvCnt, проверьте стороны договора в вызовах Cnt_SideApi.findByMnemoCode(...) и убедитесь, что прямые SQL-обновления соответствуют задаче. Скрипт изменяет данные сразу в нескольких связанных объектах.
Тип: JEXL-скрипт
const idvCnt = 49740L;//id договора
const ropCnt = Cnt_ContractApi.load(idvCnt);
const ropContr = Bs_ContrasApi.load(parseId(ropCnt.gidOtherSettler));
if (isNull(ropContr.idCorporation)) {
raise("Не найден головной контрагент");
}
const gidvOldSettler = ropCnt.gidOtherSettler;
const gidvNewSettler = Bs_ContrasApi.getGid(ropContr.idCorporation);
if (ropCnt.gidOtherSettler == gidvNewSettler) {
raise("В договоре уже стоит головной контрагент");
}
var rop_Cnt_ContractSide1 = Cnt_ContractSideApi.insertByParent(ropCnt);
Cnt_ContractSideApi.setidSide(rop_Cnt_ContractSide1, Cnt_SideApi.findByMnemoCode("consignor")); //!!!подставить нужное!!!
Cnt_ContractSideApi.setgidSettler(rop_Cnt_ContractSide1, gidvOldSettler);
var rop_Cnt_ContractSide2 = Cnt_ContractSideApi.insertByParent(ropCnt);
Cnt_ContractSideApi.setidSide(rop_Cnt_ContractSide2, Cnt_SideApi.findByMnemoCode("receiver")); //!!!подставить нужное!!!
Cnt_ContractSideApi.setgidSettler(rop_Cnt_ContractSide2, gidvOldSettler);
session.flush();
tsql(`update Cnt_Contract c set gidOtherSettler = '`+gidvNewSettler+`' where c.id = `+idvCnt).execute();
tsql(`update Cnt_Contract c set gidOtherSettler = '`+gidvNewSettler+`' where c.idParentContract = `+idvCnt).execute();
//tsql(`update Cnt_ContractSide c set gidSettler = '`+gidvNewSettler+`' where c.bMain = 1 and c.idContract = `+idvCnt).execute();
var func = function() {
var sQ0 = `
select t.id
from Cnt_ContractSide t
where t.bMain = 1 and t.idContract = `+idvCnt;
var qq = sql(sQ0).asList();
for (w: qq) {
const rop = Cnt_ContractSideApi.load(w.id);
Cnt_ContractSideApi.setgidSettler(rop, gidvNewSettler);
}
}
Cnt_ContractApi.forDisabledTaxType(func);
//график платежей
tsql(`update Cnt_PaySchedule c set gidSettler = '`+gidvNewSettler+`' where c.idMainContract = `+idvCnt).execute();
//все ДПП
tsql(`update Pm_ExpectedPay c set gidSettler = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
//все ЗнП
tsql(`update pm_payrequest c set gidSettlerPayFor = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
tsql(`update Pm_PayRequestSumDistrJournal c set gidSettlerPayFor = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
//все ПП
tsql(`update Pm_OrderBankOut c set gidSettlerPayFor = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
//ПМ регистр
tsql(`update Pm_PayMoveReg c set gidSettler = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
//Объекты баланса
tsql(`update Pm_BalObj c set gidSettler = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
//ключи поисковые обновить
var sQ1 = `
select t.id
from Pm_BalObj t
where t.idContract = `+idvCnt
;
var l1 = sql(sQ1).asList();
for (w: l1) {
const rop = Pm_BalObjApi.load(w.id);
Pm_BalObjApi.setsFindKey(rop, Pm_BalObjApi.gensFindKey(w.id));
}
flush();
tsql(`update Pm_PayMoveReg c set sFindKey = t.sFindKey from Pm_BalObj t where c.idBalObj = t.id and c.idContract = `+idvCnt).execute();
tsql(`update Pm_PayMoveReg c set sFindKeyFrom = t.sFindKey from Pm_BalObj t where c.idBalObjFrom = t.id and c.idContract = `+idvCnt).execute();
//оплаты
tsql(`update Pm_PayMove c set gidSettlerFrom = '`+gidvNewSettler+`' where c.idContractFrom = `+idvCnt).execute();
tsql(`update Pm_PayMove c set gidSettlerTo = '`+gidvNewSettler+`' where c.idContractTo = `+idvCnt).execute();
var sQ2 = `
select t.id
from Pm_PayMove t
where t.idContractFrom = `+idvCnt+`
union
select t.id
from Pm_PayMove t
where t.idContractTo = `+idvCnt
;
var l2 = sql(sQ2).asList();
for (w: l2) {
const rop = Pm_PayMoveApi.load(w.id);
Pm_PayMoveApi.refreshFindKeyFrom(rop);
Pm_PayMoveApi.refreshFindKeyTo(rop);
}
flush();
//акты
tsql(`update Stm_ActIn c set gidSettler = '`+gidvNewSettler+`' where c.idContract = `+idvCnt).execute();
// с.ф.
tsql(`update Stm_InvBillDocIn c set gidSettler = '`+gidvNewSettler+`' from stm_actin a where c.id = a.idInvBillDocIn and a.idContract = `+idvCnt).execute();
tsql(`update Stm_BookInclSetting c set gidSettler = a.gidSettler from Stm_InvBillDocIn a where c.gidDoc = a.gid and a.gidSettler = '`+gidvNewSettler+`'`).execute();
//проводки
var sQ3 = `
select distinct t.idtrans id
from act_transreg t
where t.idContract = `+idvCnt+`
and t.gidSettler = '`+gidvOldSettler+`'
and t.bCredit = 1
`;
var l3 = sql(sQ3).asList();
for (w: l3) {
const rop = Act_TransApi.load(w.id);
Act_TransApi.setAttrCr(rop,"gidSettlerBranch",gidvOldSettler);
Act_TransApi.setAttrCr(rop,"gidSettler",gidvNewSettler);
}
flush();
var sQ4 = `
select distinct t.idtrans id
from act_transreg t
where t.idContract = `+idvCnt+`
and t.gidSettler = '`+gidvOldSettler+`'
and t.bCredit = 0
`;
var l4 = sql(sQ4).asList();
for (w: l4) {
const rop = Act_TransApi.load(w.id);
Act_TransApi.setAttrDeb(rop,"gidSettlerBranch",gidvOldSettler);
Act_TransApi.setAttrDeb(rop,"gidSettler",gidvNewSettler);
}
commit();