using Kingdee.BOS; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Gatedge.K3.Pilot.PlugIn.Services.DBService { public class SalOutStockDAL : BaseDAL { public SalOutStockDAL(Context context) : base(context) { } /// /// 获取销售出库单的订单数据 /// /// /// public DynamicObjectCollection GetSalOutStockSrcPO(int entryId) { var sql = $@"/*dialect*/ WITH #销售出库单采购入库 AS ( SELECT t0.FBILLNO AS '销售出库单' ,t0.FDATE AS '销售出库日期' ,t0e.FENTRYID AS '销售出库单分录ID' ,t0e.FREALQTY AS '出库数量' ,SUM(t0e.FREALQTY) OVER (PARTITION BY t3e.FENTRYID) '合计出库数量' ,t1.FBILLNO AS '发货通知单' ,t1e.FENTRYID AS '发货通知单分录ID' ,t1e.FQTY AS '通知数量' ,t2.FBILLNO AS '销售订单' ,t2e.FENTRYID AS '销售订单分录ID' ,t2e.FQTY AS '订单数量' ,t3.FBILLNO AS '采购订单' ,t3.FDATE AS '采购日期' ,t3e.FSEQ AS '采购订单行号' ,t3e.FID AS '采购订单内码' ,t3e.FENTRYID AS '采购订单分录内码' ,t3e.FQTY AS '采购数量' ,ISNULL(t4.FACTRECEIVEQTY,0) AS '收料数量' ,ISNULL(t4.FREALQTY,0) '采购入库数量' --INTO #销售出库单采购入库 FROM T_SAL_OUTSTOCK t0 INNER JOIN T_SAL_OUTSTOCKENTRY t0e on t0e.FID = t0.FID INNER JOIN T_SAL_OUTSTOCKENTRY_LK t0e_lk on t0e.FENTRYID = t0e_lk.FENTRYID AND t0e_lk.FSTABLENAME = 'T_SAL_DELIVERYNOTICEENTRY' INNER JOIN T_SAL_DELIVERYNOTICE t1 on t1.FID = t0e_lk.FSBILLID INNER JOIN T_SAL_DELIVERYNOTICEENTRY t1e on t1.FID = t1e.FID AND t0e_lk.FSBILLID = t1e.FID AND t0e_lk.FSID = t1e.FENTRYID INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e.FENTRYID = t1e_lk.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' INNER JOIN T_SAL_ORDER t2 on t2.FID = t1e_lk.FSBILLID INNER JOIN T_SAL_ORDERENTRY t2e on t1e_lk.FSBILLID = t2e.FID AND t1e_lk.FSID = t2e.FENTRYID INNER JOIN T_SAL_ORDERENTRY_LK t2e_lk on t2e.FENTRYID = t2e_lk.FENTRYID AND t2e_lk.FSTABLENAME = 't_PUR_POOrderEntry' INNER JOIN T_PUR_POORDER t3 on t2e_lk.FSBILLID = t3.FID INNER JOIN T_PUR_POORDERENTRY t3e on t3.FID = t3e.FID AND t2e_lk.FSBILLID = t3e.FID AND t2e_lk.FSID = t3e.FENTRYID AND t3e.FMRPCLOSESTATUS = 'A' INNER JOIN T_PUR_POORDERENTRY_LK t3e_lk on t3e_lk.FENTRYID = t3e.FENTRYID OUTER APPLY ( SELECT SUM(t4e.FACTRECEIVEQTY) 'FACTRECEIVEQTY',SUM(ISNULL(t5.FREALQTY,0)) 'FREALQTY' --,STRING_AGG(t4e.FENTRYID,';') '收料单分录ID' --,STRING_AGG(ISNULL(t5.FREALQTY,0),';') '收料单分录入库数量' FROM T_PUR_RECEIVE t4 INNER JOIN T_PUR_RECEIVEENTRY t4e on t4e.FID = t4.FID INNER JOIN T_PUR_RECEIVEENTRY_LK t4e_lk on t4e_lk.FENTRYID = t4e.FENTRYID AND t4e_lk.FSTABLENAME = 'T_PUR_POORDERENTRY' OUTER APPLY ( SELECT t5e_lk.FSID,SUM(t5e.FREALQTY) 'FREALQTY' FROM T_STK_INSTOCK t5 INNER JOIN T_STK_INSTOCKENTRY t5e on t5.fID = t5e.FID INNER JOIN T_STK_INSTOCKENTRY_LK t5e_lk on t5e_lk.FENTRYID = t5e.FENTRYID AND t5e_lk.FSTABLENAME = 'T_PUR_RECEIVEENTRY' WHERE t5e_lk.FSBILLID = t4e.FID AND t5e_lk.FSID = t4e.FENTRYID GROUP BY t5e_lk.FSID ) t5 WHERE t3e.FENTRYID = t4e_lk.FSID AND t3e.FID = t4e_lk.FSBILLID GROUP BY t4e_lk.FSID ) t4 WHERE t3.FCLOSESTATUS = 'A' ) SELECT t0.* FROM #销售出库单采购入库 t0 WHERE 1 = 1 AND t0.销售出库单分录ID = {entryId} ORDER BY t0.采购订单,t0.采购订单行号,t0.销售出库日期,t0.销售出库单分录ID "; return DBServiceHelper.ExecuteDynamicObject(this.Context, sql); } } }