Замена счета-фактуры в позициях авансового отчета#
Заменяет счет-фактуру в указанных позициях авансового отчета на целевой счет-фактуру. Скрипт загружает авансовый отчет и счет-фактуру, удаляет записи включения счета-фактуры в книгу покупок/продаж, временно переводит счет-фактуру в состояние создания, заменяет ссылку на счет-фактуру в позициях и возвращает счет-фактуру в исходное состояние.
Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт
Тип: JEXL-скрипт
var ropDoc = Pm_AdvRepApi.load(toLong(37302)); // id авансового отчета
var ropInvoice = Stm_InvBillDocInApi.load(toLong(33552)); // id счета-фактуры, который оставляем
const idvDocDet = [33802, 33803]; // id позиций авансового отчета, в которых выполняется замена
const idvCurrentState = Btk_ClassStateApi.findByNameAndIdClass('Stm_Accepted', ropInvoice.idClass, 0B);
const idvAnnuledState = Btk_ClassStateApi.findByNameAndIdClass('Stm_Create', ropInvoice.idClass, 0B);
// Поиск записей включения счета-фактуры в книгу покупок/продаж
var avidVATBook = sql(`
select
id
from
stm_bookinclsetting vatbooksetting
where
vatbooksetting.giddoc = '` + ropInvoice.gid + `'
;`).asList();
// Удаление найденных записей включения
for (w : avidVATBook) {
Stm_BookInclSettingApi.delete(Stm_BookInclSettingApi.load(toLong(w.id)));
}
// Временный перевод счета-фактуры в состояние создания
Stm_InvBillDocInApi.setidState(ropInvoice, idvAnnuledState);
// Замена счета-фактуры в позициях авансового отчета
for (let i = 0; i < size(idvDocDet); ++i) {
var ropDocDet = Pm_AdvRepDetApi.load(toLong(idvDocDet[i]));
Pm_AdvRepDetApi.setidInvBillDocIn(ropDocDet, null);
Pm_AdvRepDetApi.setidInvBillDocInOT(ropDocDet, ropInvoice.idObjectType);
Pm_AdvRepDetApi.setidInvBillDocIn(ropDocDet, ropInvoice.id);
Pm_AdvRepDetApi.includeInInvBillDocIn(ropDocDet, ropInvoice.id);
}
// Возврат счета-фактуры в исходное состояние
Stm_InvBillDocInApi.setidState(ropInvoice, idvCurrentState);