コード例 #1
0
 public long InsertInfo(SapTranOutInfo info)
 {
     return(dal.Add(info));
 }
コード例 #2
0
        /// <summary>
        /// 根据交易记录以及基础数据配置数据,产生交易接口数据 Create By Xue
        /// </summary>
        private string CreateSapTranData(TranDetailsInfo tranDetailsInfo, ZonesInfo sourceZonesInfo, ZonesInfo targetZonesInfo, PlantInfo sourcePlantInfo, PlantInfo targetPlantInfo)
        {
            ///
            if (tranDetailsInfo == null)
            {
                return(string.Empty);
            }
            ///是否启用SAP交易记录同步接口
            if (string.IsNullOrEmpty(sapTranDataEnableFlag) || sapTranDataEnableFlag.ToLower() != "true")
            {
                return(string.Empty);
            }
            ///
            StringBuilder stringBuilder = new StringBuilder();

            #region SapTranOutInfo
            SapTranOutInfo sapTranOutInfo = new SapTranOutInfo();
            sapTranOutInfo.Matnr       = tranDetailsInfo.PartNo;
            sapTranOutInfo.Menge       = tranDetailsInfo.ActualQty;
            sapTranOutInfo.Budat       = tranDetailsInfo.TranDate;
            sapTranOutInfo.Lifnr       = tranDetailsInfo.SupplierNum;
            sapTranOutInfo.ProcessFlag = (int)ProcessFlagConstants.Untreated;
            sapTranOutInfo.CreateUser  = loginUser;
            #endregion

            ///如果没有目标库区则有可能是出成本中心的业务数据
            if (targetZonesInfo == null)
            {
                ///若单据类型为物料预留、物料退货
                if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)OutboundTypeConstants.ReserveOutbound + 2000) ||
                    tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)OutboundTypeConstants.MaterialReturns + 2000))
                {
                    SapPurchaseOrderDetailInfo sapPurchaseOrderDetailInfo = new SapPurchaseOrderDetailBLL().GetInfo(tranDetailsInfo.TranNo, tranDetailsInfo.PartNo);
                    if (sapPurchaseOrderDetailInfo == null)
                    {
                        return(string.Empty);                                   ///TODO:物料预留未能找到原始单据
                    }
                    ///如果没有成本中心则不具备产生SAP事务数据的条件
                    if (string.IsNullOrEmpty(sapPurchaseOrderDetailInfo.SapKostl))
                    {
                        return(string.Empty);
                    }

                    ///采购订单中有SAP采购订单号的需要生成101入库交易
                    if (!string.IsNullOrEmpty(sapPurchaseOrderDetailInfo.SapEbeln))
                    {
                        #region 转入库存地点收货数据
                        SapTranOutInfo sapTranOut = sapTranOutInfo.Clone();
                        ///目标库存地点
                        sapTranOut.Lgort = sapPurchaseOrderDetailInfo.SapLgort;
                        sapTranOut.Werks = sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode;
                        ///采购订单
                        sapTranOut.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln;
                        sapTranOut.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp;
                        ///101
                        sapTranOut.Bwart = ((int)SapTranTypeConstants.Inbound).ToString();
                        #endregion
                        stringBuilder.AppendLine(SapTranOutDAL.GetInsertSql(sapTranOut));
                    }
                    ///来源库存地点
                    sapTranOutInfo.Lgort = sapPurchaseOrderDetailInfo.SapLgort;
                    sapTranOutInfo.Werks = sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode;
                    ///目标库存地点
                    sapTranOutInfo.Umlgo = sapPurchaseOrderDetailInfo.SapUmlgo;
                    sapTranOutInfo.Unwrk = targetPlantInfo == null ? string.Empty : targetPlantInfo.SapPlantCode;
                    ///成本中心
                    sapTranOutInfo.Kostl = sapPurchaseOrderDetailInfo.SapKostl;
                    ///预留单号
                    sapTranOutInfo.Rsnum = sapPurchaseOrderDetailInfo.SapRsnum;
                    ///采购订单
                    sapTranOutInfo.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln;
                    sapTranOutInfo.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp;
                    ///移动类型
                    sapTranOutInfo.Bwart = sapPurchaseOrderDetailInfo.SapBwart;
                    stringBuilder.AppendLine(SapTranOutDAL.GetInsertSql(sapTranOutInfo));
                    return(stringBuilder.ToString());
                }
            }
            ///据交易记录中的目标存储区是否结算标记
            //todo
            if (targetZonesInfo != null /*&& targetZonesInfo.SettlementFlag.GetValueOrDefault()*/)
            {
                ///接收工厂
                sapTranOutInfo.Unwrk = targetPlantInfo == null ? string.Empty : targetPlantInfo.SapPlantCode;
                ///接收库存地点
                sapTranOutInfo.Umlgo = targetZonesInfo.StockPlaceNo;
                ///发出工厂
                string werks = (sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode);
                ///发出库存地点
                string lgort = (sourceZonesInfo == null ? string.Empty : sourceZonesInfo.StockPlaceNo);

                ///如果没有来源库存地点,并且物料未结算
                if (string.IsNullOrEmpty(lgort) && !tranDetailsInfo.SettledFlag.GetValueOrDefault())
                {
                    ///正常入库
                    if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.NormalInbound + 1000))
                    {
                        sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Inbound).ToString();
                    }
                    ///返利入库单 -> 免费收货
                    if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.RebateInbound + 1000))
                    {
                        sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.RebateInbound).ToString();
                    }
                    ///采购订单 -> 正常入库
                    if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.PurchaseOrder + 1000))
                    {
                        SapPurchaseOrderDetailInfo sapPurchaseOrderDetailInfo = new SapPurchaseOrderDetailBLL().GetInfo(tranDetailsInfo.RunsheetNo, tranDetailsInfo.PartNo);
                        if (sapPurchaseOrderDetailInfo == null)
                        {
                            return(string.Empty);                                   ///TODO:物料预留未能找到原始单据
                        }
                        sapTranOutInfo.Umlgo = sapPurchaseOrderDetailInfo.SapUmlgo;
                        sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Inbound).ToString();
                        sapTranOutInfo.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln;
                        sapTranOutInfo.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp;
                    }
                    return(SapTranOutDAL.GetInsertSql(sapTranOutInfo));
                }
                ///如果有发出库存地点,并且物料已结算
                if (!string.IsNullOrEmpty(lgort) && tranDetailsInfo.SettledFlag.GetValueOrDefault())
                {
                    ///如果来源与目标的SAP库存地点相同则不产生移动数据
                    if (lgort == sapTranOutInfo.Umlgo)
                    {
                        return(string.Empty);
                    }
                    sapTranOutInfo.Lgort = lgort;
                    sapTranOutInfo.Werks = werks;
                    sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Movement).ToString();
                    return(SapTranOutDAL.GetInsertSql(sapTranOutInfo));
                }
            }
            return(string.Empty);
        }