Создание позиции счета-фактуры от позиции авансового отчета#
Создает позицию счета-фактуры на основании данных позиции авансового отчета. Скрипт показывает пример создания сущностей одного документа с использованием данных другого документа, проверки значений на null, вывода идентификаторов созданных объектов в лог и импорта Java-библиотеки.
Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт
Тип: JEXL-скрипт
// Испортируем методы
let classLoader = session.getClass().getClassLoader();
let BigDecimal = classLoader.loadClass('java.math.BigDecimal');
// Объявляем переменные
const idvDoc = toLong(33203); // id счета-фактуры, с которым работаем
const gidvSrcDet = toString('51451/33557'); // gid позиции документа источника, с которой хотим связать создаваемую позицию
const gidvGdsSrv = Gds_ServiceApi.load(Gds_ServiceApi.findByMnemoCode('Аванс')).gid(); // gid служебной услуги для авансового счета-фактуры
const nvMethodCalculation = 2b;
// Получаем атрибуты позиции документа источника
const aSrcDetAttr = sql(`select
docsrcdet.idvatrate as idvatrate
,docsrcdet.scaption as scaption
,docsrcdet.nqty as nqty
,docsrcdet.nsumexprep as nsum
,docsrcdet.nsumrepbase as nsumbase
,docsrcdet.nsumvatexprep as nsumvat
,docsrcdet.nsumvatexpbase as nsumvatbase
,repitem.scode as scoderepitem
from pm_advrepdet docsrcdet
left join bs_advrepitem repitem on docsrcdet.idadvrepitem = repitem.id
where docsrcdet.gid = '`+gidvSrcDet+`'
;`).asSingle();
let nvQtySrcDet = null;
let svSrcDetCaption = null;
let idvSrcDetVATRate = null;
let svRepItemCode = null;
let nvSrcDetSum = null;
let nvSrcDetSumBase = null;
let nvSrcDetSumVAT = null;
let nvSrcDetSumVATBase = null;
if(isNotNull(aSrcDetAttr.idvatrate)) {
idvSrcDetVATRate = aSrcDetAttr.idvatrate;
}
if(isNotNull(aSrcDetAttr.scoderepitem)) {
svRepItemCode = aSrcDetAttr.scoderepitem;
}
if(isNotNull(aSrcDetAttr.scaption)) {
svSrcDetCaption = aSrcDetAttr.scaption;
}
if(isNotNull(aSrcDetAttr.nqty)) {
nvQtySrcDet = BigDecimal.valueOf(toDouble(aSrcDetAttr.nqty));
}
if(isNotNull(aSrcDetAttr.nsum)) {
nvSrcDetSum = aSrcDetAttr.nsum;
}
if(isNotNull(aSrcDetAttr.nsumbase)) {
nvSrcDetSumBase = aSrcDetAttr.nsumbase;
}
if(isNotNull(aSrcDetAttr.nsumvat)) {
nvSrcDetSumVAT = aSrcDetAttr.nsumvat;
}
if(isNotNull(aSrcDetAttr.nsumvatbase)) {
nvSrcDetSumVATBase = aSrcDetAttr.nsumvatbase;
}
// Создаем объекты счета-фактуры (с которым работаем) и позиции, которую хотим добавить
const ropDoc = Stm_InvBillDocInApi.load(idvDoc);
const ropDocDet = Stm_BillDetApi.insertByParent(ropDoc);
// Заполняем атрибуты созданной позиции
Stm_BillDetApi.setgidSrc(ropDocDet, gidvSrcDet);
Stm_BillDetApi.setgidGdsSrv(ropDocDet, gidvGdsSrv);
Stm_BillDetApi.setsOtherProduct(ropDocDet, toString(svRepItemCode + " / Элемент АО " + svRepItemCode + " " + svSrcDetCaption));
Stm_BillDetApi.setidVATRate(ropDocDet, idvSrcDetVATRate);
Stm_BillDetApi.setnMethodCalculation(ropDocDet, nvMethodCalculation);
Stm_BillDetApi.setnQty(ropDocDet, nvQtySrcDet);
Stm_BillDetApi.setnQtyBase(ropDocDet, nvQtySrcDet);
Stm_BillDetApi.setnSum(ropDocDet, nvSrcDetSum);
Stm_BillDetApi.setnSumDoc(ropDocDet, nvSrcDetSum);
Stm_BillDetApi.setnSumBase(ropDocDet, nvSrcDetSumBase);
Stm_BillDetApi.setnSumToPay(ropDocDet, nvSrcDetSum);
Stm_BillDetApi.setnSumToPayBase(ropDocDet, nvSrcDetSum);
Stm_BillDetApi.setnSumToPayDoc(ropDocDet, nvSrcDetSum);
Stm_BillDetApi.setnSumVAT(ropDocDet, nvSrcDetSumVAT);
Stm_BillDetApi.setnSumVATBase(ropDocDet, nvSrcDetSumVATBase);
Stm_BillDetApi.setnSumVATDoc(ropDocDet, nvSrcDetSumVATBase);
Stm_BillDetApi.setnSumNoTax(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumNoTaxBase(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumNoTaxDoc(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumToPayNoTax(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumToPayNoTaxBase(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumToPayNoTaxDoc(ropDocDet, nvSrcDetSum - nvSrcDetSumVAT);
Stm_BillDetApi.setnSumToPayVAT(ropDocDet, nvSrcDetSumVAT);
Stm_BillDetApi.setnSumToPayVATBase(ropDocDet, nvSrcDetSumVATBase);
Stm_BillDetApi.setnSumToPayVATDoc(ropDocDet, nvSrcDetSumVATBase);
// Выводим в лог gid созданной позиции счета-фактуры
Btk_InfoLogPkg.info("Счет-фактура: " + toString(ropDoc.gid));
Btk_InfoLogPkg.info("Новая позиция счета-фактуры: " + toString(ropDocDet.gid));