7.7.7. Управление потребностями#
7.7.7.1. Описание раздела#
Скрипты и запросы для управления и анализа данных потребностей: синхронизация количеств, коррекция ссылок, ручное распределение, а также диагностика связей между заявками, договорами и проводками закупок.
7.7.7.2. Скрипты#
7.7.7.2.1. Коррекция ссылок на источник и объект потребности в проводке закупки#
Используется чтобы вручную обновить ссылки на источник (idSrcTrans) и объект потребности (idNeedObj) в проводках закупок. Применяется при постобработке после миграции или ошибок настройки. Требует указания конкретных идентификаторов в коде.
Внимание
В текущем виде содержит захардкоженные ID — перед использованием необходимо заменить на актуальные значения.
Место применения: Сервис > Инструменты > jexl-скрипт.
Тип: JEXL-скрипт
const avRow = sql(`
select t.id, t.idsrctrans, t.idneedobj
from prs_purchtrans t
where t.gidsrcdetobj = '48051/77672'
`).asList();
for (r : avRow) {
ropPT = Prs_PurchTransApi.load(r.id);
Prs_PurchTransApi.setidSrcTrans(ropPT, 187367L);
Prs_PurchTransApi.setidNeedObj(ropPT, 121832L);
Prs_PurchTransApi.recalcQtyOpenBase(r.idsrctrans, true, true);
Prs_TransPkg.reCalcNeedObjQtyOther(r.idneedobj, true, true);
}
7.7.7.2.2. Синхронизация количества для заявок на услуги#
Используется чтобы автоматически синхронизировать количество в объектах потребности и проводках закупок с суммой без НДС из позиции заявки. Применяется для заявок на услуги, где объём определяется финансово. При наличии связи с договором также пересчитывает спецификацию.
Место применения: Сервис > Инструменты > jexl-скрипт.
Тип: JEXL-скрипт
const avRow = sql(`
select det.id as iddet
,n.id as idneedobj
,pt.id as idpurchtrans
from Prs_PurchReqDet det
join Prs_PurchReqVer ver on ver.id = det.idPurchReqVer
join Prs_PurchReq req on req.id = ver.idPurchReq
join Prs_NeedObj n on det.idPurchReqPos = getGidId(n.gidDetNeed)
join Prs_PurchTrans pt on pt.idNeedObj = n.id
join Btk_ObjectType ot on req.idObjectType = ot.id
where ot.sCode = 'Prs_PurchReqCC'
and coalesce(det.nPriceRate, 0) <> 0
order by det.id
`).asList();
for (r : avRow) {
var ropDet = Prs_PurchReqDetApi.load(r.iddet);
var ropNeedObj = Prs_NeedObjApi.load(r.idneedobj);
var ropPurchTrans = Prs_PurchTransApi.load(r.idpurchtrans);
if (parseIdClass(ropPurchTrans.gidSrcDetObj) == Cnt_ContractSpecApi.idClass()) {
// Обновляем объект потребности, а так же проводку
if (ropDet.nTotalSumNoTax != ropNeedObj.nQtyBase) {
Prs_NeedObjApi.setnQtyBase(ropNeedObj, ropDet.nTotalSumNoTax);
}
if (ropDet.nTotalSumNoTax != ropPurchTrans.nQtyBase) {
Prs_PurchTransApi.setnQtyBase(ropPurchTrans, ropDet.nTotalSumNoTax);
// Обновляем позицию спецификации
var ropCntSpec = Cnt_ContractSpecApi.loadByGid(ropPurchTrans.gidSrcDetObj);
Prs_ContractPkg.recalcQtyByPurchTrans(ropCntSpec);
}
}
session.flush();
};
session.commit();
7.7.7.2.3. Ручное распределение позиции акта по проводкам закупки#
Используется чтобы вручную распределить количество из позиции приходного акта по нескольким проводкам закупки. Для каждой проводки рассчитывается доступный объём, и фиксируется привязка к объекту потребности. Применяется в сложных сценариях, когда автоматический подбор недостаточен. Требует указания конкретных идентификаторов в коде.
Внимание
В текущем виде содержит захардкоженные ID — перед использованием необходимо заменить на актуальные значения.
Место применения: Сервис > Инструменты > jexl-скрипт.
Тип: JEXL-скрипт
const ropActDet = Stm_ActInDetApi.load(136129L);
var nQty = ropActDet.nQty;
const ropPT1 = Prs_PurchTransApi.load(301653L);
const nQty1 = nQty.min(ropPT1.nQty);
Stmprs_ActInPkg.setObjNeedDetQtyBase(ropActDet.idDoc, ropActDet.gid, nQty1, ropPT1.idNeedObj, ropActDet.idMsr, ropPT1.id);
nQty = nQty - nQty1;
Btk_InfoLogPkg.info(nQty.toString());
const ropPT2 = Prs_PurchTransApi.load(476615L);
const nQty2 = nQty.min(ropPT2.nQty);
Stmprs_ActInPkg.setObjNeedDetQtyBase(ropActDet.idDoc, ropActDet.gid, nQty2, ropPT2.idNeedObj, ropActDet.idMsr, ropPT2.id);
nQty = nQty - nQty2;
Btk_InfoLogPkg.info(nQty.toString());
const ropPT3 = Prs_PurchTransApi.load(476623L);
const nQty3 = nQty.min(ropPT.nQty);
Stmprs_ActInPkg.setObjNeedDetQtyBase(ropActDet.idDoc, ropActDet.gid, nQty3, ropPT3.idNeedObj, ropActDet.idMsr, ropPT3.id);
nQty = nQty - nQty3;
Btk_InfoLogPkg.info(nQty.toString());
const ropPT4 = Prs_PurchTransApi.load(301666L);
const nQty4 = nQty.min(ropPT4.nQty);
Stmprs_ActInPkg.setObjNeedDetQtyBase(ropActDet.idDoc, ropActDet.gid, nQty4, ropPT4.idNeedObj, ropActDet.idMsr, ropPT4.id);
nQty = nQty - nQty4;
Btk_InfoLogPkg.info(nQty.toString());
session.commit();
7.7.7.2.4. Поиск договора и заявки по позиции заявки#
Используется чтобы найти номер заявки, номер позиции и связанный договор по идентификатору (gid) позиции заявки на потребность. Применяется для аудита или отладки связей между документами.
Внимание
Перед выполнением замените '100651/23472' на актуальный gid позиции.
Место применения: Сервис > Инструменты > Выполнить запрос.
Тип: SQL-запрос
with PurchTrans AS (
select
purchreq.snumdoc AS RequestNumber,
reqdet.nRow as PositionNumber,
contract.sDocNumber AS ContractNumber
FROM
Prs_PurchReqDet reqdet
JOIN Prs_NeedObj needobj on needobj.gidsrcobj = reqdet.gid
JOIN Prs_PurchTrans trans on trans.idneedobj = needobj.id
JOIN Prs_PurchReqPos reqpos on reqpos.id = reqdet.idpurchreqpos
join Prs_PurchReq purchreq on purchreq.id = reqpos.idpurchreq
JOIN Cnt_Contract contract on contract.id = trans.idcontract
WHERE reqdet.gid = '100651/23472'
)
SELECT * FROM PurchTrans;
7.7.7.2.5. Получение всех объектов потребности по заявке#
Используется чтобы получить список всех объектов потребности, связанных с указанной заявкой на закупку. Помогает выявить пропущенные или несформированные позиции.
Внимание
Перед выполнением замените <тут id заявки> на реальный идентификатор.
Место применения: Сервис > Инструменты > Выполнить запрос.
Тип: SQL-запрос
select * from prs_needobj no
left join prs_purchreqpos reqpos on no.giddetneed = reqpos.gid
left join prs_purchreq reqdoc on reqpos.idpurchreq = reqdoc.id
where reqdoc.id = <тут id заявки>;
7.7.7.2.6. Анализ распределения потребностей по документам закупки#
Используется чтобы найти проводки закупки, связанные с заданными объектами потребности, и отфильтровать их по типу связанного документа (например, заказы или договоры). Применяется для анализа маршрутизации потребностей.
Внимание
Перед выполнением замените список gid в IN (...) и шаблоны LIKE на актуальные значения.
Место применения: Сервис > Инструменты > Выполнить запрос.
Тип: SQL-запрос
with Transes AS (
select
no.gid as NeedObj,
pt.gid as PurchTrans,
pt.gidDocObj as DocObj
from
Prs_PurchTrans pt
join Prs_NeedObj no on pt.idNeedObj = no.id
and no.gid in ('298400/21852', '298400/21853')
where pt.gidDocObj like '30151/%' or pt.gidDocObj like '125351/%'
)
SELECT * FROM Transes;
7.7.7.2.7. Детализация структуры заявки и связанных потребностей#
Используется чтобы отобразить полную цепочку данных: версии заявки, её позиции, детализацию и связанные объекты потребности. Позволяет проверить корректность формирования потребностей и проанализировать заданные количества.
Внимание
Перед выполнением замените 23753 на id нужной заявки.
Место применения: Сервис > Инструменты > Выполнить запрос.
Тип: SQL-запрос
select
reqver.nnum as snumreqver
,needobj.id as idneedobj
,needobj.nqty as nqtyneedobj
,needobj.giddetneed as giddetneed
,purchpos.id as idpurchpos
,purchdet.id as idpurchdet
from prs_purchreqver reqver
left join prs_purchreqdet as purchdet on purchdet.idpurchreqver = reqver.id
left join prs_purchreqpos as purchpos on purchdet.idpurchreqpos = purchpos.id
left join prs_needobj as needobj on needobj.gidsrcobj = purchdet.gid
where purchpos.idpurchreq = 23753