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

# Замена счета-фактуры в позициях авансового отчета

Заменяет счет-фактуру в указанных позициях авансового отчета на целевой счет-фактуру. Скрипт загружает авансовый отчет и счет-фактуру, удаляет записи включения счета-фактуры в книгу покупок/продаж, временно переводит счет-фактуру в состояние создания, заменяет ссылку на счет-фактуру в позициях и возвращает счет-фактуру в исходное состояние.

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