1
This commit is contained in:
@@ -117,8 +117,9 @@ def DoDetection():
|
||||
orgObj = this.View.Model.GetValue("FStockOrgId")
|
||||
if orgObj["Id"] == 101542:
|
||||
return True
|
||||
# return False
|
||||
return True
|
||||
|
||||
return False
|
||||
# return True
|
||||
|
||||
def DoQueryBeforeCheck(materialId,stockId,dateVal,row):
|
||||
flag = materialId == 0 or stockId == 0 or dateVal == ""
|
||||
@@ -137,6 +138,8 @@ def DoQueryBeforeCheck(materialId,stockId,dateVal,row):
|
||||
|
||||
def GetMaterialReferPrice(rowList):
|
||||
sqlL = """/*dialect*/
|
||||
declare @val nvarchar(MAX)
|
||||
SET @val = '{0}'
|
||||
SELECT
|
||||
rowSet2.[1] AS 'FMATERIALID'
|
||||
,CONVERT(int,rowSet2.[2]) AS 'inRow'
|
||||
@@ -146,7 +149,7 @@ SELECT
|
||||
,rowSet2.[6] AS 'FSID'
|
||||
,rowSet2.[7] AS 'FSTABLENAME'
|
||||
INTO #TMP_DATA
|
||||
FROM (SELECT 1 ID,CAST('<v>'+ REPLACE('{0}',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
||||
FROM (SELECT 1 ID,CAST('<v>'+ REPLACE(@val,';','</v><v>') + '</v>' AS XML) AS xmlVal
|
||||
) AS valSet
|
||||
OUTER APPLY (
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
import clr
|
||||
clr.AddReference("System")
|
||||
clr.AddReference('System.Data')
|
||||
clr.AddReference("Kingdee.BOS")
|
||||
clr.AddReference("Kingdee.BOS.DataEntity")
|
||||
clr.AddReference("Kingdee.BOS.Core")
|
||||
clr.AddReference('Kingdee.BOS.App')
|
||||
clr.AddReference("Kingdee.BOS.ServiceHelper")
|
||||
|
||||
from Kingdee.BOS.Core import *
|
||||
from Kingdee.BOS.Util import *
|
||||
from Kingdee.BOS.Orm.DataEntity import *
|
||||
from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn import *
|
||||
from Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args import *
|
||||
from System import *
|
||||
from System.Data import *
|
||||
from System.Collections.Generic import *
|
||||
from Kingdee.BOS.ServiceHelper import *
|
||||
|
||||
# 数据装换完毕后触发事件
|
||||
def AfterConvert(e):
|
||||
if this.OperationNumber == "Draw":
|
||||
# raise Exception(JsonUtil.Serialize(e.TargetBusinessInfo))
|
||||
|
||||
billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity
|
||||
# raise Exception(JsonUtil.Serialize(billHead))
|
||||
stockOrgObj_id = billHead["StockOrgId_Id"]
|
||||
if stockOrgObj_id == 101542:
|
||||
dateObjValue = billHead["Date"]
|
||||
dateValue = "" if dateObjValue == None else str(dateObjValue)
|
||||
|
||||
dataList = List[str]()
|
||||
|
||||
entrys = billHead["BillEntry"]
|
||||
for entry in entrys:
|
||||
rowIndex = entry["Seq"] - 1
|
||||
materialObjValue = entry["MaterialId_Id"]
|
||||
materialValue = 0 if materialObjValue == None else materialObjValue
|
||||
|
||||
stockObjValue = entry["StockId_Id"];
|
||||
stockValue = 0 if stockObjValue == None else stockObjValue
|
||||
|
||||
entityLinkObj = None;
|
||||
entityLinkObjList = entry["FEntity_Link"]
|
||||
|
||||
if entityLinkObjList != None and entityLinkObjList.Count > 0:
|
||||
entityLinkObj = entityLinkObjList[0]
|
||||
|
||||
sBillId = 0 if entityLinkObj == None else entityLinkObj["SBillId"];
|
||||
sId = 0 if entityLinkObj == None else entityLinkObj["SId"];
|
||||
sTableName = "" if entityLinkObj == None else entityLinkObj["STableName"];
|
||||
|
||||
if DoQueryBeforeCheck(materialValue, stockValue, dateValue):
|
||||
dataList.Add("{0},{1},{2},{3},{4},{5},{6}".format(materialValue,rowIndex,stockValue,dateValue,sBillId,sId,sTableName));
|
||||
else:
|
||||
entry["FReferPrice"] = 0
|
||||
entry["FReferAmount"] = 0
|
||||
entry["FExplain"] = "没有找到价格"
|
||||
|
||||
if dataList.Count > 0:
|
||||
GetMaterialReferPrice(";".join(dataList), entrys)
|
||||
|
||||
|
||||
def DoQueryBeforeCheck(materialId,stockId,dateVal):
|
||||
flag = materialId == 0 or stockId == 0 or dateVal == ""
|
||||
return not flag
|
||||
|
||||
def GetMaterialReferPrice(rowList,entrys):
|
||||
sqlL = """/*dialect*/
|
||||
SELECT
|
||||
rowSet2.[1] AS 'FMATERIALID'
|
||||
,CONVERT(int,rowSet2.[2]) AS 'inRow'
|
||||
,rowSet2.[3] AS 'FSTOCKID'
|
||||
,rowSet2.[4] AS 'FDate'
|
||||
,rowSet2.[5] AS 'FSBILLID'
|
||||
,rowSet2.[6] AS 'FSID'
|
||||
,rowSet2.[7] AS 'FSTABLENAME'
|
||||
INTO #TMP_DATA
|
||||
FROM (SELECT 1 ID,CAST('<v>'+ REPLACE('{0}',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
||||
) AS valSet
|
||||
OUTER APPLY (
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
|
||||
,CAST('<v>'+ REPLACE(T.C.value('.','varchar(100)'),',','</v><v>') + '</v>' AS XML) xmlVal
|
||||
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
||||
) rowSet
|
||||
OUTER APPLY (
|
||||
SELECT TT2.* FROM (
|
||||
SELECT T.C.value('.','varchar(100)') AS xmlVal
|
||||
,ROW_NUMBER() OVER (ORDER BY rowSet.RN) RowNo
|
||||
FROM rowSet.xmlVal.nodes('/v') AS T(C)
|
||||
) TT
|
||||
PIVOT (MAX(TT.xmlVal) FOR TT.RowNo IN ([1],[2],[3],[4],[5],[6],[7])) TT2
|
||||
) rowSet2
|
||||
|
||||
/***********************************取上游单据start*****************************************/
|
||||
SELECT t0e_lk.FMATERIALID
|
||||
,(CASE t0e_lk.FSTABLENAME
|
||||
WHEN 'T_STK_MISDELIVERYENTRY' THEN t1.FPRICE --其他出库(退货)-成本价
|
||||
WHEN 'T_STK_INSTOCKENTRY' THEN t2.FPRICE --采购入库 -单价(不含税)
|
||||
WHEN 'T_STK_STKTRANSFERINENTRY1' THEN t3.FPRICE --分步式调入 -参考单价
|
||||
ELSE 0
|
||||
END) AS 'newReferPrice'
|
||||
,(CASE t0e_lk.FSTABLENAME
|
||||
WHEN 'T_STK_MISDELIVERYENTRY' THEN '源_其他出库单:'+ t1.FBILLNO
|
||||
WHEN 'T_STK_INSTOCKENTRY' THEN '源_采购入库单:'+ t2.FBILLNO
|
||||
WHEN 'T_STK_STKTRANSFERINENTRY1' THEN (CASE t3.FPRICE WHEN 0 THEN '' ELSE '源_分步式调入单:'+ t3.FBILLNO END)
|
||||
ELSE ''
|
||||
END) AS 'newExplain'
|
||||
,t0e_lk.FSTABLENAME
|
||||
,t0e_lk.FDATE
|
||||
,t0e_lk.FSTOCKID
|
||||
,t0e_lk.inRow
|
||||
,YEAR(t0e_lk.FDATE) * 100 + MONTH(t0e_lk.FDATE) AS DateNum
|
||||
,t4.FMASTERID
|
||||
,t4i.FINVPTYID
|
||||
,t4i.FISAFFECTCOST
|
||||
,t4i.FISENABLE
|
||||
INTO #TMP_HAS_PARENT_MIS
|
||||
FROM #TMP_DATA t0e_lk
|
||||
OUTER APPLY (
|
||||
SELECT t1.FBILLNO,t1e.FPRICE
|
||||
FROM T_STK_MISDELIVERY t1 --其他出库单
|
||||
INNER JOIN T_STK_MISDELIVERYENTRY t1e on t1.FID = t1e.FID
|
||||
AND (t1e.FMATERIALID = t0e_lk.FMATERIALID AND t1e.FID = t0e_lk.FSBILLID AND t1e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_MISDELIVERYENTRY')
|
||||
) t1
|
||||
OUTER APPLY (
|
||||
SELECT t2.FBILLNO,t2e_f.FPRICE
|
||||
FROM T_STK_INSTOCK t2 --采购入库单
|
||||
INNER JOIN T_STK_INSTOCKENTRY t2e on t2e.FID = t2.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F t2e_f on t2e.FID = t2e_f.FID AND t2e.FENTRYID = t2e_f.FENTRYID
|
||||
AND (t2e.FMATERIALID = t0e_lk.FMATERIALID AND t2e.FID = t0e_lk.FSBILLID AND t2e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_INSTOCKENTRY')
|
||||
) t2
|
||||
OUTER APPLY (
|
||||
SELECT t3.FBILLNO
|
||||
,t3e.F_GAT_DECIMAL AS FPRICE
|
||||
-- ,(CASE LTRIM(RTRIM(t3e.FReferPrice)) WHEN '' THEN 0 ELSE CONVERT(decimal(23,6) ,t3e.FReferPrice) END) AS FPRICE
|
||||
FROM T_STK_STKTRANSFERIN t3 --分步式调入
|
||||
INNER JOIN T_STK_STKTRANSFERINENTRY t3e on t3.FID = t3e.FID
|
||||
AND (t3e.FMATERIALID = t0e_lk.FMATERIALID AND t3e.FID = t0e_lk.FSBILLID AND t3e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_STKTRANSFERINENTRY1')
|
||||
) t3
|
||||
INNER JOIN T_BD_MATERIAL t4 on t4.FMATERIALID = t0e_lk.FMATERIALID
|
||||
INNER JOIN T_BD_MATERIALINVPTY t4i on t0e_lk.FMATERIALID = t4i.FMATERIALID AND t4i.FINVPTYID = 10001 --AND t4i.FISENABLE = 1
|
||||
WHERE 1 = 1
|
||||
/***********************************取上游单据end********************************************/
|
||||
|
||||
/***********************************存货收发结存start***************************************************/
|
||||
SELECT t0.FDATE
|
||||
--,t0.FBILLNO,t0.FID,t0.FENTRYID
|
||||
,t0.FMASTERID,t0.FMATERIALID,t0.FSTOCKID,t0.FINVPTYID,t0.FISAFFECTCOST,t0.FISENABLE
|
||||
,t0.inRow
|
||||
,ISNULL((CASE t0.newReferPrice WHEN 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1 THEN t2.FDATE ELSE t3.FDATE END)
|
||||
ELSE t0.newExplain
|
||||
END),'') AS 'newExplain'
|
||||
,ISNULL((CASE t0.newReferPrice WHEN 0 THEN
|
||||
(CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN t2.PRICE
|
||||
ELSE (CASE WHEN t3.FQTY <> 0 THEN ROUND(t3.FAMOUNT/t3.FQTY,6) ELSE 0 END)
|
||||
END)
|
||||
ELSE t0.newReferPrice
|
||||
END),0) AS 'newReferPrice'
|
||||
INTO #TMP_结存单价_END_LIST
|
||||
FROM #TMP_HAS_PARENT_MIS t0
|
||||
OUTER APPLY(
|
||||
SELECT TOP 1 tt1.FDATE
|
||||
,(CASE WHEN tt1.FQTY <> 0 THEN ROUND(tt1.FAMOUNT/tt1.FQTY,6) ELSE 0 END) AS PRICE
|
||||
FROM V_MATERIAL_INIVSTOCKDIMENSION tt1
|
||||
WHERE 1 = 1
|
||||
AND t0.FMASTERID = tt1.FMASTERID
|
||||
AND t0.FSTOCKID = tt1.FSTOCKID
|
||||
AND tt1.DateNum <= t0.DateNum
|
||||
AND (t0.FISENABLE = 1 AND t0.FISAFFECTCOST = 1)
|
||||
AND t0.newReferPrice = 0
|
||||
AND tt1.FQTY > 0
|
||||
ORDER BY tt1.FYEAR DESC,tt1.FPERIOD DESC
|
||||
) t2
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 tt2.FYEAR,tt2.FPERIOD
|
||||
,CONVERT(nvarchar(10),FYEAR) + '.' + CONVERT(nvarchar(10),FPERIOD) AS FDATE
|
||||
,SUM(tt2.FAMOUNT) AS FAMOUNT,SUM(tt2.FQTY) AS FQTY
|
||||
FROM V_MATERIAL_INIVSTOCKDIMENSION tt2
|
||||
WHERE 1 = 1
|
||||
AND t0.FMASTERID = tt2.FMASTERID
|
||||
AND tt2.DateNum <= t0.DateNum
|
||||
AND (t0.FISENABLE = 0 OR t0.FISAFFECTCOST = 0)
|
||||
AND t0.newReferPrice = 0
|
||||
GROUP BY tt2.FYEAR,tt2.FPERIOD
|
||||
HAVING SUM(tt2.FQTY) > 0
|
||||
ORDER BY tt2.FYEAR DESC,tt2.FPERIOD DESC
|
||||
) t3
|
||||
|
||||
/*****************************************存货收发结存end***********************************************/
|
||||
/*****************************************合同单价、采购入库单start**********************************************/
|
||||
SELECT t0.FDATE
|
||||
--,t0.FBILLNO,t0.FID,t0.FENTRYID
|
||||
,t0.FMASTERID,t0.FMATERIALID,t0.FSTOCKID,t0.FINVPTYID,t0.FISAFFECTCOST
|
||||
,t0.inRow
|
||||
,ISNULL((CASE WHEN t0.newReferPrice = 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN (CASE WHEN t1.FMATERIALID IS NOT NULL THEN t1.FPRICE ELSE t2.FPRICE END)
|
||||
ELSE (CASE WHEN t2.FMATERIALID IS NOT NULL THEN t2.FPRICE ELSE t1.FPRICE END)
|
||||
END)
|
||||
ELSE t0.newReferPrice
|
||||
END),0) AS 'newReferPrice'
|
||||
,ISNULL((CASE WHEN t0.newReferPrice = 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN (CASE WHEN t1.FMATERIALID IS NOT NULL THEN '取采购入库单单价,单据:'+t1.FBILLNO ELSE '取合同价,合同号为:'+t2.FBILLNO END)
|
||||
ELSE (CASE WHEN t2.FMATERIALID IS NOT NULL THEN '取合同价,合同号为:'+t2.FBILLNO ELSE '取采购入库单单价,单据:'+t1.FBILLNO END)
|
||||
END)
|
||||
ELSE t0.newExplain
|
||||
END),'没有找到价格') AS 'newExplain'
|
||||
FROM #TMP_结存单价_END_LIST t0
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 tt0.FBILLNO,tt0e.FMATERIALID,tt0e.FSTOCKID
|
||||
,tt0e_f.FPRICE,tt0e_f.FCOSTPRICE
|
||||
FROM T_STK_INSTOCK tt0 --采购入库
|
||||
INNER JOIN T_STK_INSTOCKENTRY tt0e on tt0.FID = tt0e.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F tt0e_f on tt0e.FENTRYID = tt0e_f.FENTRYID
|
||||
WHERE
|
||||
tt0.FDOCUMENTSTATUS = 'C'
|
||||
AND tt0.FCANCELSTATUS = 'A'
|
||||
AND tt0.FSTOCKORGID = 101542
|
||||
AND (tt0e_f.FPRICE != 0 OR tt0e_f.FCOSTPRICE <> 0)
|
||||
AND t0.FMATERIALID = tt0e.FMATERIALID AND tt0e.FSTOCKID = t0.FSTOCKID
|
||||
AND DATEDIFF(DAY,tt0.FDATE, t0.FDATE) > -1
|
||||
ORDER BY tt0.FDATE DESC
|
||||
) t1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
tt0e.F_QNV_BASE1 AS FMATERIALID
|
||||
--,tt0e.F_QNV_DECIMAL3 AS FPRICE--综合单价
|
||||
--,tt0e.F_QNV_DECIMAL1 AS FPRICE--含税单价
|
||||
,tt0e.F_QNV_PRICE AS FPRICE--不含税单价
|
||||
,tt0.F_QNV_TEXT2 AS FBILLNO
|
||||
,tt1.FMASTERID
|
||||
,ROW_NUMBER() OVER (PARTITION BY tt1.FMASTERID ORDER BY F_QNV_DATE2 DESC, tt1.FUSEORGID DESC) 'RN'
|
||||
FROM QNV_t_Cust_Entry100003 tt0 --供应商年度合同
|
||||
INNER JOIN QNV_t_Cust_Entry100004 tt0e on tt0.FID = tt0e.FID
|
||||
INNER JOIN T_BD_MATERIAL tt1 on tt1.FMATERIALID = tt0e.F_QNV_BASE1
|
||||
WHERE 1 = 1
|
||||
AND tt0.FDOCUMENTSTATUS = 'C'
|
||||
AND tt0e.F_QNV_PRICE != 0
|
||||
) t2 on t0.FMASTERID = t2.FMASTERID AND t2.RN = 1
|
||||
/*****************************************合同单价、采购入库单end**********************************************/
|
||||
|
||||
DROP TABLE #TMP_DATA
|
||||
DROP TABLE #TMP_HAS_PARENT_MIS
|
||||
DROP TABLE #TMP_结存单价_END_LIST
|
||||
""".format(rowList)
|
||||
|
||||
res = DBServiceHelper.ExecuteDynamicObject(this.Context,sqlL)
|
||||
|
||||
if res != None and res.Count > 0:
|
||||
for item in res:
|
||||
rowIndex = item["inRow"]
|
||||
referPriceVal = item["newReferPrice"]
|
||||
newExplain = item["newExplain"]
|
||||
# this.View.Model.SetValue("FReferPrice", referPriceVal, rowIndex)
|
||||
# this.View.Model.SetValue("FExplain", newExplain, rowIndex)
|
||||
entrys[rowIndex]["FReferPrice"] = referPriceVal
|
||||
entrys[rowIndex]["FExplain"] = newExplain
|
||||
fqty = this.View.Model.GetValue("FQty",rowIndex)
|
||||
# this.View.Model.SetValue("FReferAmount", referPriceVal * fqty, rowIndex)
|
||||
entrys[rowIndex]["FReferAmount"] = referPriceVal * fqty
|
||||
# this.View.InvokeFieldUpdateService("FReferPrice", rowIndex)
|
||||
materialId = str(item["FMATERIALID"])
|
||||
dateVal = str(item["FDATE"])
|
||||
stockId = str(item["FSTOCKID"])
|
||||
entrys[rowIndex]["FInstockPrice"] = GetInstockPrice(rowIndex ,dateVal ,materialId,stockId)
|
||||
|
||||
# 获取采购申请单价
|
||||
def GetInstockPrice(Row, Fdate, FmaterialId, stockValue):
|
||||
# raise Exception(str(Row)+","+str(Fdate)+","+str(FmaterialId)+","+str(stockValue))
|
||||
sqlL = """/*dialect*/
|
||||
SELECT top 1
|
||||
A.FBILLNO, CASE WHEN FPrice = 0 THEN round( C.FCostPrice ,2) else round( C.FPrice ,2) end as 'FPrice'
|
||||
FROM T_STK_INSTOCK A
|
||||
INNER JOIN T_STK_INSTOCKENTRY B ON A.FID = B.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F C ON C.FENTRYID = B.FENTRYID
|
||||
WHERE
|
||||
A.FDOCUMENTSTATUS = 'C'
|
||||
AND A.FCANCELSTATUS = 'A'
|
||||
AND A.FSTOCKORGID = 101542
|
||||
AND B.FMATERIALID = {1}
|
||||
AND B.FSTOCKID = {2}
|
||||
AND CONVERT(nvarchar(10),FDATE,23) <= '{0}'
|
||||
AND CONVERT(nvarchar(10),FAPPROVEDATE,23) <= '{0}'
|
||||
AND (c.FPrice <> 0 or c.FCostPrice <> 0)
|
||||
ORDER BY FDATE DESC, FAPPROVEDATE DESC
|
||||
""".format(Fdate, FmaterialId, stockValue)
|
||||
# raise Exception(sqlL)
|
||||
InstockPrice = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL)
|
||||
_instockPriceVal = 0.01
|
||||
if InstockPrice != None and InstockPrice.Count > 0:
|
||||
_instockPriceVal = InstockPrice[0]["FPrice"]
|
||||
else:
|
||||
_instockPriceVal = 0
|
||||
|
||||
# this.View.Model.SetValue("FInstockPrice", _instockPriceVal, Row)
|
||||
return _instockPriceVal
|
||||
@@ -23,6 +23,7 @@
|
||||
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="STK_TRANSFERIN\" />
|
||||
<Folder Include="PUR_Requisition\sql\" />
|
||||
<Folder Include="STK_MisDelivery\" />
|
||||
<Folder Include="PUR_Requisition\" />
|
||||
@@ -30,6 +31,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="PUR_Requisition\BillEventPlugInEx.py" />
|
||||
<Compile Include="STK_MisDelivery\BillEventPlugInEx.py" />
|
||||
<Compile Include="STK_TRANSFERIN\BillConvertEventPlugInEx.py" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="PUR_Requisition\sql\获取合同年度单价.sql" />
|
||||
|
||||
BIN
02.珠海市供水有限公司/ZHSW.zip
Normal file
BIN
02.珠海市供水有限公司/ZHSW.zip
Normal file
Binary file not shown.
15
02.珠海市供水有限公司/ZHSW/SAL_OUTSTOCK/SQLServer/更新物料税收分类编码.sql
Normal file
15
02.珠海市供水有限公司/ZHSW/SAL_OUTSTOCK/SQLServer/更新物料税收分类编码.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
SELECT t0.FNUMBER,t0.FMATERIALID,t0_l.*,t1.税收分类编码,t0s.FTAXCATEGORYCODEID,t2.FID AS '税收分类编码ID',t2.FTAXPOLICY
|
||||
--UPDATE t0s SET t0s.FTAXCATEGORYCODEID = t2.FID
|
||||
-- ,t0s.FTAXDISCOUNTSTYPE = t2.FTAXPOLICY
|
||||
-- ,t0s.FIsTaxEnjoy = CASE WHEN (LEN(t2.FTAXPOLICY) = 0) THEN 0 ELSE 1 END
|
||||
FROM T_BD_MATERIAL t0
|
||||
INNER JOIN T_BD_MATERIALSALE t0s on t0.FMATERIALID = t0s.FMATERIALID
|
||||
INNER JOIN T_BD_MATERIAL_L t0_l on t0s.FMATERIALID = t0_l.FMATERIALID AND t0_l.FLOCALEID = 2052
|
||||
INNER JOIN (
|
||||
SELECT t1.货物名称,t1.税收分类编码
|
||||
FROM 税收分类编码导入EXCEL t1
|
||||
GROUP BY t1.货物名称,t1.税收分类编码
|
||||
) t1 on t0_l.FNAME = t1.货物名称
|
||||
INNER JOIN T_IV_GTTAXCODE t2 on t2.FTAXCODE = t1.税收分类编码
|
||||
WHERE 1=1
|
||||
AND t0s.FTAXCATEGORYCODEID !=0
|
||||
332
02.珠海市供水有限公司/ZHSW/STK_TRANSFERIN/BillConvertEventPlugInEx.cs
Normal file
332
02.珠海市供水有限公司/ZHSW/STK_TRANSFERIN/BillConvertEventPlugInEx.cs
Normal file
@@ -0,0 +1,332 @@
|
||||
using ExtensionMethods;
|
||||
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
|
||||
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
|
||||
using Kingdee.BOS.Core.Metadata.EntityElement;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.ServiceHelper;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace ZHSW.STK_TRANSFERIN
|
||||
{
|
||||
[Description("其他出库单选单插件-分步式调入单"), HotUpdate]
|
||||
public class BillConvertEventPlugInEx : AbstractConvertPlugIn
|
||||
{
|
||||
public override void AfterConvert(AfterConvertEventArgs e)
|
||||
{
|
||||
base.AfterConvert(e);
|
||||
if (this.OperationNumber.Equals("Draw"))
|
||||
{
|
||||
var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity;
|
||||
|
||||
|
||||
var stockOrgObj_id = billHead["StockOrgId_Id"].Long2Int();
|
||||
if (stockOrgObj_id == 101542)
|
||||
{
|
||||
var dateObjValue = billHead["Date"];
|
||||
var dateValue = dateObjValue == null ? "" : ((DateTime)dateObjValue).ToString("yyyy-MM-dd");
|
||||
|
||||
|
||||
var dataList = new List<string>();
|
||||
|
||||
|
||||
var entrys = billHead["BillEntry"] as DynamicObjectCollection;
|
||||
foreach (var entry in entrys)
|
||||
{
|
||||
var rowIndex = entry["Seq"].Long2Int() - 1;
|
||||
var materialObjValue = entry["MaterialId_Id"];
|
||||
var materialValue = materialObjValue.Long2Int();
|
||||
|
||||
var stockObjValue = entry["StockId_Id"];
|
||||
var stockValue = stockObjValue.Long2Int();
|
||||
|
||||
DynamicObject entityLinkObj = null;
|
||||
var entityLinkObjList = (DynamicObjectCollection)entry["FEntity_Link"];
|
||||
|
||||
if (entityLinkObjList != null && entityLinkObjList.Count > 0)
|
||||
entityLinkObj = entityLinkObjList[0];
|
||||
|
||||
|
||||
var sBillId = entityLinkObj["SBillId"].Long2Int();
|
||||
var sId = entityLinkObj["SId"].Long2Int();
|
||||
var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString();
|
||||
|
||||
if (DoQueryBeforeCheck(materialValue, stockValue, dateValue))
|
||||
{
|
||||
dataList.Add(string.Format("{0},{1},{2},{3},{4},{5},{6}", materialValue, rowIndex, stockValue, dateValue, sBillId, sId, sTableName));
|
||||
}
|
||||
else
|
||||
{
|
||||
entry["FReferPrice"] = 0;
|
||||
entry["FReferAmount"] = 0;
|
||||
entry["FExplain"] = "没有找到价格";
|
||||
}
|
||||
|
||||
}
|
||||
if (dataList.Count > 0)
|
||||
GetMaterialReferPrice(string.Join(";", dataList), entrys.ToList());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取值
|
||||
/// </summary>
|
||||
/// <param name="rowList"></param>
|
||||
/// <param name="entrys"></param>
|
||||
private void GetMaterialReferPrice(string rowList, List<DynamicObject> entrys)
|
||||
{
|
||||
var sqlL = $@"/*dialect*/
|
||||
SELECT
|
||||
rowSet2.[1] AS 'FMATERIALID'
|
||||
,CONVERT(int,rowSet2.[2]) AS 'inRow'
|
||||
,rowSet2.[3] AS 'FSTOCKID'
|
||||
,rowSet2.[4] AS 'FDate'
|
||||
,rowSet2.[5] AS 'FSBILLID'
|
||||
,rowSet2.[6] AS 'FSID'
|
||||
,rowSet2.[7] AS 'FSTABLENAME'
|
||||
INTO #TMP_DATA
|
||||
FROM (SELECT 1 ID,CAST('<v>'+ REPLACE('{rowList}',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
||||
) AS valSet
|
||||
OUTER APPLY (
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
|
||||
,CAST('<v>'+ REPLACE(T.C.value('.','varchar(100)'),',','</v><v>') + '</v>' AS XML) xmlVal
|
||||
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
||||
) rowSet
|
||||
OUTER APPLY (
|
||||
SELECT TT2.* FROM (
|
||||
SELECT T.C.value('.','varchar(100)') AS xmlVal
|
||||
,ROW_NUMBER() OVER (ORDER BY rowSet.RN) RowNo
|
||||
FROM rowSet.xmlVal.nodes('/v') AS T(C)
|
||||
) TT
|
||||
PIVOT (MAX(TT.xmlVal) FOR TT.RowNo IN ([1],[2],[3],[4],[5],[6],[7])) TT2
|
||||
) rowSet2
|
||||
|
||||
/***********************************取上游单据start*****************************************/
|
||||
SELECT t0e_lk.FMATERIALID
|
||||
,(CASE t0e_lk.FSTABLENAME
|
||||
WHEN 'T_STK_MISDELIVERYENTRY' THEN t1.FPRICE --其他出库(退货)-成本价
|
||||
WHEN 'T_STK_INSTOCKENTRY' THEN t2.FPRICE --采购入库 -单价(不含税)
|
||||
WHEN 'T_STK_STKTRANSFERINENTRY1' THEN t3.FPRICE --分步式调入 -参考单价
|
||||
ELSE 0
|
||||
END) AS 'newReferPrice'
|
||||
,(CASE t0e_lk.FSTABLENAME
|
||||
WHEN 'T_STK_MISDELIVERYENTRY' THEN '源_其他出库单:'+ t1.FBILLNO
|
||||
WHEN 'T_STK_INSTOCKENTRY' THEN '源_采购入库单:'+ t2.FBILLNO
|
||||
WHEN 'T_STK_STKTRANSFERINENTRY1' THEN (CASE t3.FPRICE WHEN 0 THEN '' ELSE '源_分步式调入单:'+ t3.FBILLNO END)
|
||||
ELSE ''
|
||||
END) AS 'newExplain'
|
||||
,t0e_lk.FSTABLENAME
|
||||
,t0e_lk.FDATE
|
||||
,t0e_lk.FSTOCKID
|
||||
,t0e_lk.inRow
|
||||
,YEAR(t0e_lk.FDATE) * 100 + MONTH(t0e_lk.FDATE) AS DateNum
|
||||
,t4.FMASTERID
|
||||
,t4i.FINVPTYID
|
||||
,t4i.FISAFFECTCOST
|
||||
,t4i.FISENABLE
|
||||
INTO #TMP_HAS_PARENT_MIS
|
||||
FROM #TMP_DATA t0e_lk
|
||||
OUTER APPLY (
|
||||
SELECT t1.FBILLNO,t1e.FPRICE
|
||||
FROM T_STK_MISDELIVERY t1 --其他出库单
|
||||
INNER JOIN T_STK_MISDELIVERYENTRY t1e on t1.FID = t1e.FID
|
||||
AND (t1e.FMATERIALID = t0e_lk.FMATERIALID AND t1e.FID = t0e_lk.FSBILLID AND t1e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_MISDELIVERYENTRY')
|
||||
) t1
|
||||
OUTER APPLY (
|
||||
SELECT t2.FBILLNO,t2e_f.FPRICE
|
||||
FROM T_STK_INSTOCK t2 --采购入库单
|
||||
INNER JOIN T_STK_INSTOCKENTRY t2e on t2e.FID = t2.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F t2e_f on t2e.FID = t2e_f.FID AND t2e.FENTRYID = t2e_f.FENTRYID
|
||||
AND (t2e.FMATERIALID = t0e_lk.FMATERIALID AND t2e.FID = t0e_lk.FSBILLID AND t2e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_INSTOCKENTRY')
|
||||
) t2
|
||||
OUTER APPLY (
|
||||
SELECT t3.FBILLNO
|
||||
,t3e.F_GAT_DECIMAL AS FPRICE
|
||||
-- ,(CASE LTRIM(RTRIM(t3e.FReferPrice)) WHEN '' THEN 0 ELSE CONVERT(decimal(23,6) ,t3e.FReferPrice) END) AS FPRICE
|
||||
FROM T_STK_STKTRANSFERIN t3 --分步式调入
|
||||
INNER JOIN T_STK_STKTRANSFERINENTRY t3e on t3.FID = t3e.FID
|
||||
AND (t3e.FMATERIALID = t0e_lk.FMATERIALID AND t3e.FID = t0e_lk.FSBILLID AND t3e.FENTRYID = t0e_lk.FSID AND t0e_lk.FSTABLENAME = 'T_STK_STKTRANSFERINENTRY1')
|
||||
) t3
|
||||
INNER JOIN T_BD_MATERIAL t4 on t4.FMATERIALID = t0e_lk.FMATERIALID
|
||||
INNER JOIN T_BD_MATERIALINVPTY t4i on t0e_lk.FMATERIALID = t4i.FMATERIALID AND t4i.FINVPTYID = 10001 --AND t4i.FISENABLE = 1
|
||||
WHERE 1 = 1
|
||||
/***********************************取上游单据end********************************************/
|
||||
|
||||
/***********************************存货收发结存start***************************************************/
|
||||
SELECT t0.FDATE
|
||||
--,t0.FBILLNO,t0.FID,t0.FENTRYID
|
||||
,t0.FMASTERID,t0.FMATERIALID,t0.FSTOCKID,t0.FINVPTYID,t0.FISAFFECTCOST,t0.FISENABLE
|
||||
,t0.inRow
|
||||
,ISNULL((CASE t0.newReferPrice WHEN 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1 THEN t2.FDATE ELSE t3.FDATE END)
|
||||
ELSE t0.newExplain
|
||||
END),'') AS 'newExplain'
|
||||
,ISNULL((CASE t0.newReferPrice WHEN 0 THEN
|
||||
(CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN t2.PRICE
|
||||
ELSE (CASE WHEN t3.FQTY <> 0 THEN ROUND(t3.FAMOUNT/t3.FQTY,6) ELSE 0 END)
|
||||
END)
|
||||
ELSE t0.newReferPrice
|
||||
END),0) AS 'newReferPrice'
|
||||
INTO #TMP_结存单价_END_LIST
|
||||
FROM #TMP_HAS_PARENT_MIS t0
|
||||
OUTER APPLY(
|
||||
SELECT TOP 1 tt1.FDATE
|
||||
,(CASE WHEN tt1.FQTY <> 0 THEN ROUND(tt1.FAMOUNT/tt1.FQTY,6) ELSE 0 END) AS PRICE
|
||||
FROM V_MATERIAL_INIVSTOCKDIMENSION tt1
|
||||
WHERE 1 = 1
|
||||
AND t0.FMASTERID = tt1.FMASTERID
|
||||
AND t0.FSTOCKID = tt1.FSTOCKID
|
||||
AND tt1.DateNum <= t0.DateNum
|
||||
AND (t0.FISENABLE = 1 AND t0.FISAFFECTCOST = 1)
|
||||
AND t0.newReferPrice = 0
|
||||
AND tt1.FQTY > 0
|
||||
ORDER BY tt1.FYEAR DESC,tt1.FPERIOD DESC
|
||||
) t2
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 tt2.FYEAR,tt2.FPERIOD
|
||||
,CONVERT(nvarchar(10),FYEAR) + '.' + CONVERT(nvarchar(10),FPERIOD) AS FDATE
|
||||
,SUM(tt2.FAMOUNT) AS FAMOUNT,SUM(tt2.FQTY) AS FQTY
|
||||
FROM V_MATERIAL_INIVSTOCKDIMENSION tt2
|
||||
WHERE 1 = 1
|
||||
AND t0.FMASTERID = tt2.FMASTERID
|
||||
AND tt2.DateNum <= t0.DateNum
|
||||
AND (t0.FISENABLE = 0 OR t0.FISAFFECTCOST = 0)
|
||||
AND t0.newReferPrice = 0
|
||||
GROUP BY tt2.FYEAR,tt2.FPERIOD
|
||||
HAVING SUM(tt2.FQTY) > 0
|
||||
ORDER BY tt2.FYEAR DESC,tt2.FPERIOD DESC
|
||||
) t3
|
||||
|
||||
/*****************************************存货收发结存end***********************************************/
|
||||
/*****************************************合同单价、采购入库单start**********************************************/
|
||||
SELECT t0.FDATE
|
||||
--,t0.FBILLNO,t0.FID,t0.FENTRYID
|
||||
,t0.FMASTERID,t0.FMATERIALID,t0.FSTOCKID,t0.FINVPTYID,t0.FISAFFECTCOST
|
||||
,t0.inRow
|
||||
,ISNULL((CASE WHEN t0.newReferPrice = 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN (CASE WHEN t1.FMATERIALID IS NOT NULL THEN t1.FPRICE ELSE t2.FPRICE END)
|
||||
ELSE (CASE WHEN t2.FMATERIALID IS NOT NULL THEN t2.FPRICE ELSE t1.FPRICE END)
|
||||
END)
|
||||
ELSE t0.newReferPrice
|
||||
END),0) AS 'newReferPrice'
|
||||
,ISNULL((CASE WHEN t0.newReferPrice = 0
|
||||
THEN (CASE WHEN t0.FISAFFECTCOST = 1 AND t0.FISENABLE = 1
|
||||
THEN (CASE WHEN t1.FMATERIALID IS NOT NULL THEN '取采购入库单单价,单据:'+t1.FBILLNO ELSE '取合同价,合同号为:'+t2.FBILLNO END)
|
||||
ELSE (CASE WHEN t2.FMATERIALID IS NOT NULL THEN '取合同价,合同号为:'+t2.FBILLNO ELSE '取采购入库单单价,单据:'+t1.FBILLNO END)
|
||||
END)
|
||||
ELSE t0.newExplain
|
||||
END),'没有找到价格') AS 'newExplain'
|
||||
FROM #TMP_结存单价_END_LIST t0
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 tt0.FBILLNO,tt0e.FMATERIALID,tt0e.FSTOCKID
|
||||
,tt0e_f.FPRICE,tt0e_f.FCOSTPRICE
|
||||
FROM T_STK_INSTOCK tt0 --采购入库
|
||||
INNER JOIN T_STK_INSTOCKENTRY tt0e on tt0.FID = tt0e.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F tt0e_f on tt0e.FENTRYID = tt0e_f.FENTRYID
|
||||
WHERE
|
||||
tt0.FDOCUMENTSTATUS = 'C'
|
||||
AND tt0.FCANCELSTATUS = 'A'
|
||||
AND tt0.FSTOCKORGID = 101542
|
||||
AND (tt0e_f.FPRICE != 0 OR tt0e_f.FCOSTPRICE <> 0)
|
||||
AND t0.FMATERIALID = tt0e.FMATERIALID AND tt0e.FSTOCKID = t0.FSTOCKID
|
||||
AND DATEDIFF(DAY,tt0.FDATE, t0.FDATE) > -1
|
||||
ORDER BY tt0.FDATE DESC
|
||||
) t1
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
tt0e.F_QNV_BASE1 AS FMATERIALID
|
||||
--,tt0e.F_QNV_DECIMAL3 AS FPRICE--综合单价
|
||||
--,tt0e.F_QNV_DECIMAL1 AS FPRICE--含税单价
|
||||
,tt0e.F_QNV_PRICE AS FPRICE--不含税单价
|
||||
,tt0.F_QNV_TEXT2 AS FBILLNO
|
||||
,tt1.FMASTERID
|
||||
,ROW_NUMBER() OVER (PARTITION BY tt1.FMASTERID ORDER BY F_QNV_DATE2 DESC, tt1.FUSEORGID DESC) 'RN'
|
||||
FROM QNV_t_Cust_Entry100003 tt0 --供应商年度合同
|
||||
INNER JOIN QNV_t_Cust_Entry100004 tt0e on tt0.FID = tt0e.FID
|
||||
INNER JOIN T_BD_MATERIAL tt1 on tt1.FMATERIALID = tt0e.F_QNV_BASE1
|
||||
WHERE 1 = 1
|
||||
AND tt0.FDOCUMENTSTATUS = 'C'
|
||||
AND tt0e.F_QNV_PRICE != 0
|
||||
) t2 on t0.FMASTERID = t2.FMASTERID AND t2.RN = 1
|
||||
/*****************************************合同单价、采购入库单end**********************************************/
|
||||
|
||||
DROP TABLE #TMP_DATA
|
||||
DROP TABLE #TMP_HAS_PARENT_MIS
|
||||
DROP TABLE #TMP_结存单价_END_LIST
|
||||
";
|
||||
|
||||
var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
|
||||
if (res != null || res.Count > 0)
|
||||
{
|
||||
foreach (var item in res)
|
||||
{
|
||||
var rowIndex = item["inRow"].Long2Int();
|
||||
var referPriceVal = item["newReferPrice"].ToDecimal();
|
||||
var newExplain = item["newExplain"];
|
||||
entrys[rowIndex]["FReferPrice"] = referPriceVal;
|
||||
entrys[rowIndex]["FExplain"] = newExplain;
|
||||
var fqty = entrys[rowIndex]["Qty"].ToDecimal();
|
||||
entrys[rowIndex]["FReferAmount"] = referPriceVal * fqty;
|
||||
var materialId = item["FMATERIALID"].ToString();
|
||||
var dateVal = item["FDATE"].ToString();
|
||||
var stockId = item["FSTOCKID"].Long2Int();
|
||||
entrys[rowIndex]["FInstockPrice"] = GetInstockPrice(rowIndex, dateVal, materialId, stockId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 采购入库单价
|
||||
/// </summary>
|
||||
/// <param name="rowIndex"></param>
|
||||
/// <param name="dateVal"></param>
|
||||
/// <param name="materialId"></param>
|
||||
/// <param name="stockId"></param>
|
||||
/// <returns></returns>
|
||||
private decimal GetInstockPrice(int rowIndex, string dateVal, string materialId, int stockId)
|
||||
{
|
||||
var sqlL = $@"/*dialect*/
|
||||
SELECT top 1
|
||||
A.FBILLNO, CASE WHEN FPrice = 0 THEN round( C.FCostPrice ,2) else round( C.FPrice ,2) end as 'FPrice'
|
||||
FROM T_STK_INSTOCK A
|
||||
INNER JOIN T_STK_INSTOCKENTRY B ON A.FID = B.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_F C ON C.FENTRYID = B.FENTRYID
|
||||
WHERE
|
||||
A.FDOCUMENTSTATUS = 'C'
|
||||
AND A.FCANCELSTATUS = 'A'
|
||||
AND A.FSTOCKORGID = 101542
|
||||
AND B.FMATERIALID = {materialId}
|
||||
AND B.FSTOCKID = {stockId}
|
||||
AND CONVERT(nvarchar(10),FDATE,23) <= '{dateVal}'
|
||||
AND CONVERT(nvarchar(10),FAPPROVEDATE,23) <= '{dateVal}'
|
||||
AND (c.FPrice <> 0 or c.FCostPrice <> 0)
|
||||
ORDER BY FDATE DESC, FAPPROVEDATE DESC
|
||||
";
|
||||
var InstockPrice = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
var _instockPriceVal = 0M;
|
||||
if (InstockPrice != null && InstockPrice.Count > 0)
|
||||
_instockPriceVal = InstockPrice[0]["FPrice"].ToDecimal();
|
||||
|
||||
return _instockPriceVal;
|
||||
}
|
||||
|
||||
private bool DoQueryBeforeCheck(long materialId, long stockId, string dateVal)
|
||||
{
|
||||
var flag = materialId == 0 || stockId == 0 || dateVal == "";
|
||||
return !flag;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,7 @@
|
||||
<Compile Include="SAL_OUTSTOCK\Utils\HttpWebHelper.cs" />
|
||||
<Compile Include="SAL_OUTSTOCK\Utils\SHA256Helper.cs" />
|
||||
<Compile Include="STK_MisDelivery\BillEventPlugInEx.cs" />
|
||||
<Compile Include="STK_TRANSFERIN\BillConvertEventPlugInEx.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="SAL_OUTSTOCK\SQLServer\销售出库单子表信息.sql" />
|
||||
|
||||
Reference in New Issue
Block a user