Files
GateDge2023_ljy/07.珠海英搏尔/GZ.LJY000.Enpower/InvAgeAnalyzeOverrideEx.cs
PastSaid 9725ab5376 a
2024-12-05 15:39:19 +08:00

2555 lines
329 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Transactions;
using Kingdee.BOS;
using Kingdee.BOS.App;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.Enums;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Permission.Objects;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.Util;
using Kingdee.K3.BD.Contracts;
using Kingdee.K3.BD.Contracts.FIN;
using Kingdee.K3.BD.Contracts.SCM;
using Kingdee.K3.Core.SCM.Args;
using Kingdee.K3.Core.SCM.STK;
using Kingdee.K3.SCM.App.Core;
using Kingdee.K3.SCM.App.Utils;
using Kingdee.K3.SCM.App.Stock.Report;
using System.ComponentModel;
namespace GZ.LJY000.Enpower
{
[Description("覆盖重写:Kingdee.K3.SCM.App.Stock.Report.InvAgeAnalyze"), HotUpdate]
public class InvAgeAnalyzeOverrideEx : SysReportBaseService
{
private class IntervalDayInfo
{
public string IntervalTxt { get; set; }
public int IntervalDay { get; set; }
public int DownDay { get; set; }
public int UpperDay { get; set; }
public string BaseQtyKey { get; set; }
public string QtyKey { get; set; }
public string SecQtyKey { get; set; }
public string AmountKey { get; set; }
}
private List<string> tbNameList = new List<string>();
private string _tmpInvTable;
private string _tmpStockBillTb;
private string _tmpConvertStockBillTb;
private string _tmpRptTable;
private string _tmpQcpTable;
private string _tmpNewpTable;
private int _localeID;
private Context _ctx;
private string _stkOrgIdCollect;
private int _priceSource;
private int _qcZeroPriceType;
private string _materialFrom;
private string _materialTo;
private string _stockFrom;
private string _stockTo;
private string _lotFrom;
private string _lotTo;
private string _preMaterialJoinSql;
private string _preStockJoinSql;
private string _preFilter;
private bool _isShowFBaseQty;
private bool _isShowFStockQty;
private bool _isShowFSecQty;
private bool _isShowAmout;
private bool _curDateIsOne;
protected Dictionary<string, KeyValuePair<string, string>> auxPropValues;
protected Dictionary<long, DynamicObject> auxPropDatas = new Dictionary<long, DynamicObject>();
protected FormMetadata flexMetadata;
protected IViewService iserver;
protected string tempAuxTableName = string.Empty;
protected Dictionary<long, DynamicObject> stockLocDatas = new Dictionary<long, DynamicObject>();
protected Dictionary<string, KeyValuePair<string, string>> stockLocValues;
protected FormMetadata flexStockLocMetadata;
protected string tempStockLocTableName = string.Empty;
private string _dateFilter;
private string _outRange;
private DateTime queryDate;
private bool historyStockQuery;
private bool _showRange;
private int _queryRange;
private string _rangeUnit;
private string _supperFilter;
private List<string> lstSqlKey = new List<string>();
private bool isSplitPageByOwner = true;
private string _billSource = "";
private string _filterStr;
private string _ageDaysDelFilter = "";
private int _ageDaysTo;
private string _sBaseDataIsolationSql;
private List<IntervalDayInfo> _intervalInfoList = new List<IntervalDayInfo>();
private List<string> _intervalStr = new List<string>();
private List<string> _intervalSumStr = new List<string>();
private List<long> _stockOrgIds = new List<long>();
private bool _showForbitMat;
protected List<string> HsStockFields = new List<string>();
protected bool IsHsStockFields;
private int _trackPeriods = 3;
private bool _isBusy;
private Dictionary<string, object> dctStockParam;
private Dictionary<long, DateTime> m_StkOrgStartDate;
private string m_GetherTableName = string.Empty;
private bool _isViewAmout = true;
private Dictionary<long, DateTime> StkCloseDate { get; set; }
private Dictionary<long, DateTime> StkOrgStartDate
{
get
{
m_StkOrgStartDate = new Dictionary<long, DateTime>();
foreach (KeyValuePair<string, object> item in dctStockParam)
{
if (item.Value != null)
{
m_StkOrgStartDate.Add(Convert.ToInt64(item.Key), DateTime.Parse(item.Value.ToString()));
}
}
return m_StkOrgStartDate;
}
}
private string GetherTableName => m_GetherTableName;
protected virtual bool IsShowStockLocFlexItemName => true;
public override void Initialize()
{
base.ReportProperty.ReportType = ReportType.REPORTTYPE_MOVE;
base.ReportProperty.IsGroupSummary = true;
base.ReportProperty.SimpleAllCols = true;
_localeID = base.Context.UserLocale.LCID;
_ctx = base.Context;
_isViewAmout = true;
SetDecimalControlField();
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FKEEPERID", "FKEEPERNAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FBOMID", "FBOMNumber");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FMATERIALID", "FMaterialNumber");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FOWNERTYPEID", "FOWNERTYPENAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FOWNERID", "FOWNERNAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKID", "FSTOCKNAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKSTATUSID", "FSTOCKSTATUSNAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FMATERIALTYPEID", "FMaterialTypeName");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FAUXPROPID", "FAUXPROP");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKLOCID", "FSTOCKLOC");
}
public override ReportTitles GetReportTitles(IRptParams filter)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
ReportTitles reportTitles = new ReportTitles();
if (base.CacheDataList == null || base.CacheDataList.Count == 0)
{
string text = customFilter["StockOrgId"].ToString();
if (string.IsNullOrEmpty(text))
{
reportTitles.AddTitle("FStockOrg", "");
}
else
{
List<SelectorItemInfo> list = new List<SelectorItemInfo>();
list.Add(new SelectorItemInfo("FORGID"));
list.Add(new SelectorItemInfo("FNUMBER"));
list.Add(new SelectorItemInfo("FNAME"));
string filterClauseWihtKey = $" FORGID IN ({text}) ";
QueryBuilderParemeter queryBuilderParemeter = new QueryBuilderParemeter();
queryBuilderParemeter.FormId = "ORG_Organizations";
queryBuilderParemeter.SelectItems = list;
queryBuilderParemeter.FilterClauseWihtKey = filterClauseWihtKey;
QueryBuilderParemeter para = queryBuilderParemeter;
IQueryService service = Kingdee.BOS.Contracts.ServiceFactory.GetService<IQueryService>(base.Context);
DynamicObjectCollection dynamicObjectCollection = service.GetDynamicObjectCollection(base.Context, para);
using IEnumerator<DynamicObject> enumerator = dynamicObjectCollection.GetEnumerator();
if (enumerator.MoveNext())
{
DynamicObject current = enumerator.Current;
reportTitles.AddTitle("FStockOrg", string.Format("{0}({1})", current["FNUMBER"].ToString(), Convert.ToString(current["FNAME"])));
}
}
}
else
{
DataRow dataRow = base.CacheDataList[filter.CurrentPosition];
reportTitles.AddTitle("FStockOrg", string.Format("{0}({1})", dataRow["FStockOrgNumber"].ToString(), dataRow["FStockOrgName"].ToString()));
if (isSplitPageByOwner)
{
reportTitles.AddTitle("FOwnerType", ReturnOwnerType(Convert.ToString(dataRow["FOWNERTYPEID"])));
reportTitles.AddTitle("FOwner", string.Format("{0}({1})", Convert.ToString(dataRow["FOwnerNumber"]), Convert.ToString(dataRow["FOwnerName"])));
}
reportTitles.AddTitle("FSTOCKORGID", dataRow["FSTOCKORGID"].ToString());
}
reportTitles.AddTitle("FMaterialRange", GetTitleScrope((DynamicObject)customFilter["MaterialFrom"], (DynamicObject)customFilter["MaterialTo"]));
reportTitles.AddTitle("FStockRange", GetTitleScrope((DynamicObject)customFilter["StockFrom"], (DynamicObject)customFilter["StockTo"]));
reportTitles.AddTitle("FLotRange", GetTitleNumScrope((DynamicObject)customFilter["LotFrom"], (DynamicObject)customFilter["LotTo"]));
reportTitles.AddTitle("FPriceSource", GetPriceSource(Convert.ToInt32(customFilter["PriceSource"])));
return reportTitles;
}
public override ReportHeader GetReportHeaders(IRptParams filter)
{
ReportHeader reportHeader = new ReportHeader();
int num = 1;
ListHeader listHeader = reportHeader.AddChild("FMATERIALID", new LocaleValue(ResManager.LoadKDString("物料编码", "004021030000826", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMaterialName", new LocaleValue(ResManager.LoadKDString("物料名称", "004021030000829", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMaterialModel", new LocaleValue(ResManager.LoadKDString("规格型号", "004021030000832", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMATERIALTYPEID", new LocaleValue(ResManager.LoadKDString("存货类别", "004021030006003", SubSystemType.SCM), base.Context.UserLocale.LCID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FLotNo", new LocaleValue(ResManager.LoadKDString("批号", "004021030000841", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FOwnerTypeId", new LocaleValue(ResManager.LoadKDString("货主类型", "004021030004570", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FOwnerId", new LocaleValue(ResManager.LoadKDString("货主", "004021030004573", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
if (base.CacheDataList.Count > 0)
{
listHeader = reportHeader.AddChild("FErpClsID", new LocaleValue(ResManager.LoadKDString("物料属性", "004021030006001", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMaterialGroup_FNumber", new LocaleValue(ResManager.LoadKDString("物料分组编码", "004021000035996", SubSystemType.SCM), base.Context.UserLocale.LCID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMATERIALGROUPNAME", new LocaleValue(ResManager.LoadKDString("物料分组", "004021030006002", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSTOCKID", new LocaleValue(ResManager.LoadKDString("仓库", "004021030006009", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSTOCKLOCID", new LocaleValue(ResManager.LoadKDString("仓位", "004021030006010", SubSystemType.SCM), base.Context.UserLocale.LCID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FBOMID", new LocaleValue(ResManager.LoadKDString("BOM版本", "004021030006004", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSTOCKSTATUSID", new LocaleValue(ResManager.LoadKDString("库存状态", "004021030006012", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FPRODUCEDATE", new LocaleValue(ResManager.LoadKDString("生产日期", "004021030006006", SubSystemType.SCM), _localeID), SqlStorageType.SqlSmalldatetime);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FEXPIRYDATE", new LocaleValue(ResManager.LoadKDString("有效期至", "004021030006007", SubSystemType.SCM), _localeID), SqlStorageType.SqlSmalldatetime);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FKEEPERTYPEID", new LocaleValue(ResManager.LoadKDString("保管者类型", "004021030006014", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FKEEPERID", new LocaleValue(ResManager.LoadKDString("保管者", "004021030006016", SubSystemType.SCM), _localeID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FAUXPROPID", new LocaleValue(ResManager.LoadKDString("辅助属性", "004021030000835", SubSystemType.SCM), base.Context.UserLocale.LCID));
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FMtoNo", new LocaleValue(ResManager.LoadKDString("计划跟踪号", "004021030006005", SubSystemType.SCM), base.Context.UserLocale.LCID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FBaseUnitName", new LocaleValue(ResManager.LoadKDString("基本单位", "004021030000853", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSecUnitName", new LocaleValue(ResManager.LoadKDString("辅助单位", "004021030000859", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FBaseQty", new LocaleValue(ResManager.LoadKDString("数量(基本)", "004021030000865", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSecQty", new LocaleValue(ResManager.LoadKDString("数量(辅助)", "004021030000877", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
listHeader.ColIndex = num++;
}
num += 40;
listHeader = reportHeader.AddChild("FUnitName", new LocaleValue(ResManager.LoadKDString("库存单位", "004021030000856", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FQTY", new LocaleValue(ResManager.LoadKDString("数量(库存)", "004021030000871", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
listHeader.ColIndex = num++;
if (_isShowAmout && _isViewAmout)
{
num += 40;
listHeader = reportHeader.AddChild("FBasePrice", new LocaleValue(ResManager.LoadKDString("参考价(基本)", "004021030009042", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal, _isViewAmout);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FPrice", new LocaleValue(ResManager.LoadKDString("参考价(库存)", "004021030009049", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal, _isViewAmout);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FSecPrice", new LocaleValue(ResManager.LoadKDString("参考价(辅助)", "004021030009047", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal, _isViewAmout);
listHeader.ColIndex = num++;
listHeader = reportHeader.AddChild("FAmount", new LocaleValue(ResManager.LoadKDString("参考金额", "004021030009048", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal, _isViewAmout);
listHeader.ColIndex = num++;
}
if (!_showRange)
{
num += 40;
listHeader = reportHeader.AddChild("FAGEDAYS", new LocaleValue(ResManager.LoadKDString("账龄天数", "004021000014249", SubSystemType.SCM), _localeID), SqlStorageType.SqlSysname, visible: true);
listHeader.ColIndex = num++;
}
num += 40;
if ((_isShowAmout && _isViewAmout) || _isShowFBaseQty || _isShowFStockQty || _isShowFSecQty)
{
reportHeader.GetChildCount();
foreach (IntervalDayInfo intervalInfo in _intervalInfoList)
{
ListHeader listHeader2 = reportHeader.AddChild();
listHeader2.Caption = new LocaleValue(intervalInfo.IntervalTxt, _localeID);
if (_isShowFBaseQty)
{
listHeader2.AddChild(intervalInfo.BaseQtyKey, new LocaleValue(ResManager.LoadKDString("数量(基本)", "004021030000865", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
}
if (_isShowFStockQty)
{
listHeader2.AddChild(intervalInfo.QtyKey, new LocaleValue(ResManager.LoadKDString("数量(库存)", "004021030000871", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
}
if (_isShowFSecQty)
{
listHeader2.AddChild(intervalInfo.SecQtyKey, new LocaleValue(ResManager.LoadKDString("数量(辅助)", "004021030000877", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal);
}
if (_isShowAmout && _isViewAmout)
{
listHeader2.AddChild(intervalInfo.AmountKey, new LocaleValue(ResManager.LoadKDString("参考金额", "004021030009048", SubSystemType.SCM), _localeID), SqlStorageType.SqlDecimal, _isViewAmout);
}
listHeader2.ColIndex = num++;
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = intervalInfo.BaseQtyKey,
DecimalControlFieldName = "FBASEPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = intervalInfo.QtyKey,
DecimalControlFieldName = "FPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = intervalInfo.SecQtyKey,
DecimalControlFieldName = "FSECPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = intervalInfo.AmountKey,
DecimalControlFieldName = "FAmountDecimal"
});
}
}
return reportHeader;
}
protected override DataTable GetReportData(string tablename, IRptParams filter)
{
long num = 0L;
if (filter.IsOnlyQuerySumData && base.CacheDataList != null)
{
DataRow dataRow = base.CacheDataList[filter.CurrentPosition];
num = Convert.ToInt64(dataRow["FSTOCKORGID"]);
}
DataTable reportData = base.GetReportData(tablename, filter);
if (num > 0 && reportData.Rows.Count > 0)
{
reportData.Rows[0]["FSTOCKORGID"] = num;
}
for (int i = 0; i < reportData.Rows.Count; i++)
{
if (reportData.Columns.Contains("FAUXPROPID") && reportData.Rows[i]["FAUXPROPID"] != DBNull.Value && Convert.ToInt64(reportData.Rows[i]["FAUXPROPID"]) > 0)
{
reportData.Rows[i]["FAUXPROP"] = RptCommon.GetAuxPropExtValues(base.Context, flexMetadata, iserver, ref auxPropValues, ref auxPropDatas, Convert.ToInt64(reportData.Rows[i]["FAUXPROPID"]));
}
if (reportData.Columns.Contains("FSTOCKLOCID") && reportData.Rows[i]["FSTOCKLOCID"] != DBNull.Value && Convert.ToInt64(reportData.Rows[i]["FSTOCKLOCID"]) >= 0)
{
reportData.Rows[i]["FSTOCKLOC"] = RptCommon.GetStockLocExtValues(base.Context, flexStockLocMetadata, iserver, ref stockLocValues, ref stockLocDatas, Convert.ToInt64(reportData.Rows[i]["FSTOCKLOCID"]));
}
}
return reportData;
}
private DateTime GetMinDate(DateTime dt)
{
switch (_rangeUnit)
{
case "Y":
dt = dt.AddYears(-1 * _queryRange);
_outRange = _queryRange + ResManager.LoadKDString("年以上", "004021000014250", SubSystemType.SCM);
break;
case "M":
dt = dt.AddMonths(-1 * _queryRange);
_outRange = _queryRange + ResManager.LoadKDString("月以上", "004021000014251", SubSystemType.SCM);
break;
case "D":
dt = dt.AddDays(-1 * _queryRange);
_outRange = _queryRange + ResManager.LoadKDString("日以上", "004021000014252", SubSystemType.SCM);
break;
}
return dt;
}
public override DataTable GetList(IRptParams filter)
{
_isBusy = true;
SetFilter(filter);
DateTime systemDateTime = ServiceHelper.GetService<ITimeService>().GetSystemDateTime(base.Context);
if (!string.IsNullOrWhiteSpace(_stkOrgIdCollect))
{
_stockOrgIds = (from p in _stkOrgIdCollect.Split(',')
select Convert.ToInt64(p)).ToList();
DateTime minDate;
if (_showRange)
{
int num = -1 * (_intervalInfoList[_intervalInfoList.Count - 1].DownDay + 1);
minDate = systemDateTime.AddDays(num).Date;
if (historyStockQuery)
{
minDate = queryDate.AddDays(num).Date;
}
}
else
{
minDate = GetMinDate(systemDateTime);
if (historyStockQuery)
{
minDate = GetMinDate(queryDate);
}
}
CreateTempTable();
InitInventory();
CreateStockBillData(minDate);
string sumField = GetSumField(filter);
if ((_priceSource == 3 || _priceSource == 4) && _qcZeroPriceType == 2)
{
CreateQcpTableDataNew(sumField.ToUpperInvariant());
}
else
{
CreateQcpTableData();
}
string sortString = filter.FilterParameter.SortString;
if (!string.IsNullOrEmpty(sortString))
{
sortString = sortString.Replace("FPRODUCEDATE", "TO_CHAR(FPRODUCEDATE,'yyyy-MM-dd')").Replace("FEXPIRYDATE", "TO_CHAR(FEXPIRYDATE,'yyyy-MM-dd')");
KSQL_SEQ = string.Format(KSQL_SEQ, sortString);
}
else
{
KSQL_SEQ = string.Format(KSQL_SEQ, "FMATERIALID");
}
_intervalSumStr.Add(KSQL_SEQ);
string joinFelxSql = GetJoinFelxSql();
FillRptData(filter, minDate, joinFelxSql, sumField.ToUpperInvariant());
return FillPageDt(joinFelxSql);
}
_isBusy = false;
return null;
}
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
_isBusy = true;
if (base.CacheDataList.Count > 0)
{
DataRow dataRow = base.CacheDataList[filter.CurrentPosition];
StringBuilder stringBuilder = new StringBuilder();
string arg = " FAmount ";
string arg2 = " FAmount ";
string arg3 = " FAmount ";
if (_priceSource == 1)
{
arg = "FBASEQTY*FBasePrice";
arg2 = "FQTY*FPrice";
arg3 = "FSECQTY*FSecPrice";
}
string sumField = GetSumField(filter);
sumField = sumField.Replace("FMATERIALNUMBER,", "");
stringBuilder.Append("SELECT FSTOCKORGID,FStockOrgNumber,FStockOrgName,");
stringBuilder.AppendFormat("FMATERIALID,FMATERIALNUMBER, {0}", sumField);
stringBuilder.AppendLine("FBASEUNITID,FBaseUnitName,");
stringBuilder.AppendLine("FUnitID,FUnitName,FSECUNITID,FSecUnitName,FPRECISION,FBASEPRECISION,FSECPRECISION");
stringBuilder.AppendLine(",SUM(FBASEQTY) AS FBASEQTY,SUM(FQTY) AS FQTY,SUM(FSECQTY) AS FSECQTY,");
stringBuilder.AppendFormat(" CONVERT(DECIMAL(23,10),CASE WHEN SUM(FBASEQTY)=0 THEN 0 ELSE ROUND(TO_DECIMAL(SUM({0}),23,10)/SUM(FBASEQTY),FPriceDecimal) END) AS FBasePrice, ", arg);
stringBuilder.AppendFormat(" CONVERT(DECIMAL(23,10),CASE WHEN SUM(FQTY)=0 THEN 0 ELSE ROUND(TO_DECIMAL(SUM({0}),23,10)/SUM(FQTY),FPriceDecimal) END) AS FPrice,", arg2);
stringBuilder.AppendFormat(" CONVERT(DECIMAL(23,10),CASE WHEN SUM(FSECQTY)=0 THEN 0 ELSE ROUND(TO_DECIMAL(SUM({0}),23,10)/SUM(FSECQTY),FPriceDecimal) END) AS FSecPrice,", arg3);
stringBuilder.AppendLine(" ROUND(SUM(FAmount), FAmountDecimal) AS FAmount,FPriceDecimal,FAmountDecimal,FAGEDAYS ");
stringBuilder.AppendFormat(",{0}", string.Join(",", _intervalSumStr));
stringBuilder.AppendFormat(" INTO {0} FROM {1} AS T", tableName, _tmpRptTable);
stringBuilder.AppendFormat(" WHERE T.FSTOCKORGID={0}", dataRow["FSTOCKORGID"]);
if (isSplitPageByOwner)
{
stringBuilder.AppendFormat(" AND T.FOWNERTYPEID='{0}' AND T.FOWNERID={1}", dataRow["FOWNERTYPEID"], dataRow["FOWNERID"]);
}
stringBuilder.AppendLine(" GROUP BY FSTOCKORGID,FStockOrgNumber,FStockOrgName,");
stringBuilder.AppendFormat("FMATERIALID,FMATERIALNUMBER,{0}", sumField.Replace("AS FMATERIALTYPEID", "").Replace("AS FPRODUCEDATE", "").Replace("AS FEXPIRYDATE", ""));
stringBuilder.AppendLine("FBASEUNITID,FBaseUnitName,");
stringBuilder.AppendLine("FUnitID,FUnitName,FSECUNITID,FSecUnitName,FPRECISION,FBASEPRECISION,FSECPRECISION,FPriceDecimal,FAmountDecimal,FAGEDAYS");
DBUtils.Execute(base.Context, stringBuilder.ToString());
}
_isBusy = false;
}
private string GetSumField(IRptParams filter)
{
StringBuilder stringBuilder = new StringBuilder();
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("FMATERIALNUMBER", "FMATERIALNUMBER,");
dictionary.Add("FMATERIALNAME", "FMATERIALNAME,");
dictionary.Add("FMATERIALMODEL", "FMATERIALMODEL,");
dictionary.Add("FERPCLSID", "FERPCLSID,");
dictionary.Add("FMATERIALGROUPNAME", "FMaterialGroup,FMATERIALGROUPNAME,");
dictionary.Add("FMATERIALGROUP_FNUMBER", "FMaterialGroup_FNumber,");
dictionary.Add("FMATERIALTYPEID", "FCATEGORYID AS FMATERIALTYPEID,FMaterialTypeName,");
dictionary.Add("FSTOCKID", "FSTOCKID,FStockNumber,FStockName,");
dictionary.Add("FSTOCKLOCID", "FStockLocId,FSTOCKLOC,");
dictionary.Add("FSTOCKLOCIDR", "FSTOCKLOCIDR,");
dictionary.Add("FSTOCKSTATUSID", "FSTOCKSTATUSID,FSTOCKSTATUSNAME,");
dictionary.Add("FLOTNO", "FLotID,FLotNo,");
dictionary.Add("FOWNERTYPEID", "FOwnerTypeId,FOWNERTYPENAME,");
dictionary.Add("FOWNERID", "FOWNERID,FOwnerNumber,FOwnerName,");
dictionary.Add("FKEEPERTYPEID", "FKEEPERTYPEID,");
dictionary.Add("FKEEPERID", "FKEEPERID,FKEEPERNAME,");
dictionary.Add("FPRODUCEDATE", "FPRODUCEDATE,");
dictionary.Add("FEXPIRYDATE", "FEXPIRYDATE,");
dictionary.Add("FBOMID", "FBOMID,FBOMNumber,");
dictionary.Add("FAUXPROPID", "FAuxPropId,FAUXPROP,");
dictionary.Add("FAUXPROPIDR", "FAUXPROPIDR,");
dictionary.Add("FMTONO", "FMTONO,");
string empty = string.Empty;
List<string> list = new List<string>();
foreach (ColumnField item in filter.FilterParameter.ColumnInfo)
{
empty = "";
empty = ((!string.IsNullOrWhiteSpace(item.FlexParentFieldKey)) ? item.FlexParentFieldKey.ToUpperInvariant() : item.Key.ToUpperInvariant());
if (dictionary.Keys.Contains(empty) && !list.Contains(empty))
{
stringBuilder.Append(dictionary[empty]);
list.Add(empty);
}
}
foreach (Kingdee.BOS.Core.CommonFilter.SummaryField summaryRow in filter.FilterParameter.SummaryRows)
{
empty = "";
empty = ((!(summaryRow.Field is RelatedFlexGroupField)) ? summaryRow.Key.ToUpperInvariant() : ((RelatedFlexGroupField)summaryRow.Field).FieldName.ToUpperInvariant());
if (dictionary.Keys.Contains(empty) && !list.Contains(empty))
{
stringBuilder.Append(dictionary[empty]);
list.Add(empty);
}
}
string sortString = filter.FilterParameter.SortString;
if (!string.IsNullOrEmpty(sortString))
{
string[] array = sortString.ToUpperInvariant().Replace("DESC", "").Replace("ASC", "")
.Split(',');
string[] array2 = array;
foreach (string text in array2)
{
string text2 = text.Trim();
string text3 = stringBuilder.ToString().ToUpperInvariant();
if (!text3.Contains(text2))
{
stringBuilder.AppendLine($"{text2},");
}
}
}
return stringBuilder.ToString();
}
public override List<Kingdee.BOS.Core.Report.SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
List<Kingdee.BOS.Core.Report.SummaryField> list = new List<Kingdee.BOS.Core.Report.SummaryField>();
list.Add(new Kingdee.BOS.Core.Report.SummaryField("FBaseQty", BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField("FSecQty", BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField("FQTY", BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField("FAmount", BOSEnums.Enu_SummaryType.SUM));
foreach (IntervalDayInfo intervalInfo in _intervalInfoList)
{
list.Add(new Kingdee.BOS.Core.Report.SummaryField(intervalInfo.BaseQtyKey, BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField(intervalInfo.QtyKey, BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField(intervalInfo.SecQtyKey, BOSEnums.Enu_SummaryType.SUM));
list.Add(new Kingdee.BOS.Core.Report.SummaryField(intervalInfo.AmountKey, BOSEnums.Enu_SummaryType.SUM));
}
return list;
}
public override void CloseReport()
{
RptHelper.DropTmpTable(_ctx, _isBusy, tbNameList);
}
private void CreateTempTable()
{
_tmpInvTable = RptHelper.CreateTmpTableName(base.Context, tbNameList);
_tmpStockBillTb = RptHelper.CreateTmpTableName(base.Context, tbNameList);
_tmpQcpTable = RptHelper.CreateTmpTableName(base.Context, tbNameList);
_tmpConvertStockBillTb = RptHelper.CreateTmpTableName(base.Context, tbNameList);
List<string> list = new List<string>();
list.Add($"CREATE TABLE {_tmpInvTable}(\r\n FGuid INT,\r\n FSTOCKORGID INT , --库存组织ID\r\n FStockOrgNumber NVARCHAR (80), --库存组织编码\r\n FStockOrgName NVARCHAR (80),\t\t --库存组织名称\r\n FOWNERTYPEID VARCHAR (36),\t --货主类别ID\r\n FOWNERTYPENAME NVARCHAR (100),\r\n FOWNERID INT,\r\n FOwnerNumber NVARCHAR (100),\t\t--货主编码\r\n FOwnerName NVARCHAR (255),\t\t\t--货主名称\r\n FKEEPERTYPEID VARCHAR (36),\t\t\t\t\t--保管者类型\r\n FKEEPERID INT,\t\t\t\t\t\t--保管者\r\n FKEEPERNAME NVARCHAR (255), --保管者名称\r\n FCATEGORYID INT,\t\t\t\t\t--存货类别ID\r\n FMaterialTypeName NVARCHAR (100),\t--存货类别名称\r\n FMATERIALID INT,\t\t\t\t\t--物料ID\r\n FMaterialNumber NVARCHAR (80),\t\t--物料编码\r\n FMaterialName NVARCHAR (255),\t\t--物料名称\r\n FMaterialModel NVARCHAR (510), --规格型号\r\n FLotID INT,\t\t\t\t\t--批号主档ID\r\n FLotNo NVARCHAR (255),\t\t\t\t--批号\r\n FBOMID INT,\r\n FBOMNumber NVARCHAR (80), --BOMID\r\n FMTONO NVARCHAR(255), --计划跟踪号\r\n FPROJECTNO NVARCHAR(255), --项目编号\r\n FAuxPropId INT,\t\t--辅助属性(注意)\r\n FSTOCKID INT,\t\t\t\t\t\t--仓库ID\r\n FPRODUCEDATE DATETIME NULL, --生成日期\r\n FEXPIRYDATE DATETIME NULL, --有效期\r\n FErpClsID INT, --物料属性\r\n FMaterialGroup INT, --物料分组\r\n FMaterialGroup_FNumber NVARCHAR (255), --物料分组名称\r\n FMaterialGroupName NVARCHAR (255), --物料分组名称\r\n FStockNumber NVARCHAR (80),\t\t--仓库编码\r\n FStockName NVARCHAR (80),\t\t\t--仓库名称\r\n FSTOCKSTATUSID INT,\t\t\t\t\t--库存状态\r\n FSTOCKSTATUSNUMBER NVARCHAR (80), --库存状态编码\r\n FSTOCKSTATUSNAME NVARCHAR (80), --库存状态名称\r\n FStockLocId INT,\t\t--仓位ID(注意)\r\n FSTOCKLOC NVARCHAR (300), --仓位\r\n FBASEUNITID INT,\t\t\t\t\t--基本单位ID\r\n FBaseUnitName NVARCHAR (80),\t\t--基本单位\r\n FUnitID INT,\t\t--库存单位ID\r\n FUnitName NVARCHAR (80),\t\t\t--库存单位\r\n FSECUNITID INT,\t\t\t\t\t\t--辅助单位ID\r\n FSecUnitName NVARCHAR (80),\t\t--辅助单位\r\n FBASEQTY DECIMAL (23, 10),\t\t\t\t\t\t--基本数量\r\n FQTY DECIMAL (23, 10),\t\t\t\t\t\t\t--库存数量\r\n FSECQTY DECIMAL (23, 10),\t\t\t\t\t\t--辅助单位数量\r\n FPRECISION INT, --单位精度\r\n FBASEPRECISION INT, --基本单位精度\r\n FSECPRECISION INT --辅助单位精度\r\n );");
list.Add($"CREATE TABLE {_tmpStockBillTb}(\r\n FROWNO INT NOT NULL DEFAULT(0),\r\n FGUID INT NOT NULL DEFAULT(0),\r\n FFormId VARCHAR (36) ,---单据类型(FormId)\r\n FCreateDate DATETIME,\t\t\t\t--单据日期\r\n FBillDate DATETIME,\t\t\t\t--单据日期\r\n FMATERIALID INT,\t\t--物料ID\r\n FSTOCKORGID INT,\t\t--库存组织ID\r\n FOWNERTYPEID VARCHAR (36),\t\t--货主类型ID\r\n FOWNERID INT,\t\t\t\t--货主ID\r\n FKEEPERTYPEID VARCHAR (36),\t--保管者类别ID\r\n FKEEPERID INT,\t\t\t--保管者ID\r\n FSTOCKID INT,\t\t\t\t--仓库ID\r\n FSTOCKLOC INT,\t\t--仓位\r\n FSTOCKSTATUSID INT,\t--库存状态\r\n FAuxPropId INT,\t\t--辅助属性\r\n FLOTID INT,\t\t\t\t\t\t--批号\r\n FPRODUCEDATE DATETIME,\t\t--生产日期\r\n FEXPIRYDATE DATETIME,\t\t--有效期至\r\n FBOMID INT,\t\t\t\t\t--BOMID\r\n FMTONO NVARCHAR(255), --计划跟踪号\r\n FPROJECTNO NVARCHAR(255), --项目编号\r\n FBASEUNITID INT,\t\t--基本单位ID\r\n FBASEQTY DECIMAL (23, 10),\t\t\t--基本单位数量\r\n FUNITID INT,\t\t\t\t--库存单位\r\n FQTY DECIMAL (23, 10),\t\t\t\t\t--库存单位数量\r\n FSECUNITID INT,\t\t\t--辅助单位\r\n FSECQTY DECIMAL (23, 10),\t\t\t--辅助单位数量\r\n FPrice DECIMAL (23, 10),\t\t\t\t--基本单位单价\r\n FAMOUNT DECIMAL (23, 10),\t\t\t\t\t\t\t--金额\r\n FLOCALCURRID INT,\t\t\t\t\t\t--本位币\r\n FAGEDAYS varchar(10) , ---账龄天数\r\n FAGEDAYSINT INT , ---账龄天数\r\n FQTYADDOPTION INT\t\t\t\t\t--更新库存方向\r\n )");
list.Add($"CREATE TABLE {_tmpConvertStockBillTb}(\r\n FFormId VARCHAR (36) ,---单据类型(FormId)\r\n FBillDate DATETIME,\t\t\t\t--单据日期\r\n FMATERIALID INT,\t\t--物料ID\r\n FSTOCKORGID INT,\t\t--库存组织ID\r\n FOWNERTYPEID VARCHAR (36),\t\t--货主类型ID\r\n FOWNERID INT,\t\t\t\t--货主ID\r\n FKEEPERTYPEID VARCHAR (36),\t--保管者类别ID\r\n FKEEPERID INT,\t\t\t--保管者ID\r\n FSTOCKID INT,\t\t\t\t--仓库ID\r\n FSTOCKLOC INT,\t\t--仓位\r\n FSTOCKSTATUSID INT,\t--库存状态\r\n FAuxPropId INT,\t\t--辅助属性\r\n FLOTID INT,\t\t\t\t\t\t--批号\r\n FPRODUCEDATE DATETIME,\t\t--生产日期\r\n FEXPIRYDATE DATETIME,\t\t--有效期至\r\n FBOMID INT,\t\t\t\t\t--BOMID\r\n FMTONO NVARCHAR(255), --计划跟踪号\r\n FPROJECTNO NVARCHAR(255), --项目编号\r\n FBASEUNITID INT,\t\t--基本单位ID\r\n FBASEQTY DECIMAL (23, 10),\t\t\t--基本单位数量\r\n FUNITID INT,\t\t\t\t--库存单位\r\n FQTY DECIMAL (23, 10),\t\t\t\t\t--库存单位数量\r\n FSECUNITID INT,\t\t\t--辅助单位\r\n FSECQTY DECIMAL (23, 10),\t\t\t--辅助单位数量\r\n FPrice DECIMAL (23, 10),\t\t\t\t--基本单位单价\r\n FAMOUNT DECIMAL (23, 10),\t\t\t\t\t\t\t--金额\r\n FLOCALCURRID INT,\t\t\t\t\t\t--本位币\r\n FQTYADDOPTION INT,\t\t\t\t\t--更新库存方向\r\n --调出方的数据\r\n FOutSTOCKORGID INT,\t\t--库存组织ID\r\n FOutOWNERTYPEID VARCHAR (36),\t\t--货主类型ID\r\n FOutOWNERID INT,\t\t\t\t--货主ID\r\n FOutKEEPERTYPEID VARCHAR (36),\t--保管者类别ID\r\n FOutKEEPERID INT,\t\t\t--保管者ID\r\n FOutSTOCKID INT,\t\t\t\t--仓库ID\r\n FOutSTOCKLOC INT,\t\t--仓位\r\n FOutSTOCKSTATUSID INT,\t--库存状态\r\n FOutAuxPropId INT,\t\t--辅助属性\r\n FOutLOTID INT,\t\t\t\t\t\t--批号\r\n FOutPRODUCEDATE DATETIME,\t\t--生产日期\r\n FOutEXPIRYDATE DATETIME\t\t--有效期至\r\n )");
list.Add($"CREATE TABLE {_tmpQcpTable}(\r\n FSTOCKORGID INT,\t\t\t\t\t\t--库存组织\r\n FMATERIALID INT,\t\t\t\t\t\t--物料编码\r\n FCARGOOWNERTYPE VARCHAR (36),\t\t\t\t--货主类别\r\n FCARGOOWNERID INT,\t\t\t\t\t--货主\r\n FSTOCKID INT,\t\t\t\t\t\t\t--仓库\r\n FSTOCKLOCID INT,\t\t\t\t\t\t--仓位\r\n FSTOCKSTATUSID INT,\t\t\t\t\t\t--库存状态\r\n FAUXPROPID INT,\t\t\t\t\t\t--辅助属性\r\n FBOMID INT,\t\t\t\t\t\t\t--bomID\r\n FLotID INT,\t\t\t\t\t\t\t\t--批号\r\n FAMOUNT DECIMAL (23, 10),\r\n FQTY DECIMAL (23, 10),\r\n FPRICEDIGITS INT,\r\n FAMOUNTDIGITS INT,\r\n FMTONO NVARCHAR(255) NULL DEFAULT(' ') \r\n )");
DBUtils.ExecuteBatch(_ctx, list, 1);
}
private void CreateStockBillTableIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpStockBillTb.ToUpperInvariant().Replace("TMP", "IM"), _tmpStockBillTb);
DBUtils.Execute(base.Context, strSQL);
strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FGUID)", _tmpStockBillTb.ToUpperInvariant().Replace("TMP", "ID"), _tmpStockBillTb);
DBUtils.Execute(base.Context, strSQL);
}
protected void CreateConvertStockBillTbIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpConvertStockBillTb.ToUpperInvariant().Replace("TMP", "IM"), _tmpConvertStockBillTb);
DBUtils.Execute(base.Context, strSQL);
}
protected void CreateInvTableIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FGUID)", _tmpInvTable.ToUpperInvariant().Replace("TMP", "ID"), _tmpInvTable);
DBUtils.Execute(base.Context, strSQL);
strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpInvTable.ToUpperInvariant().Replace("TMP", "IM"), _tmpInvTable);
DBUtils.Execute(base.Context, strSQL);
}
private void CreateQcTbIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpQcpTable.ToUpperInvariant().Replace("TMP", "IM"), _tmpQcpTable);
DBUtils.Execute(base.Context, strSQL);
}
private void CreateTmpRptTablIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpRptTable.ToUpperInvariant().Replace("TMP", "IM"), _tmpRptTable);
DBUtils.Execute(base.Context, strSQL);
strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FGUID)", _tmpRptTable.ToUpperInvariant().Replace("TMP", "IG"), _tmpRptTable);
DBUtils.Execute(base.Context, strSQL);
}
private void TruncateTmpTable()
{
string format = "TRUNCATE TABLE {0}";
List<string> list = new List<string>();
list.Add(string.Format(format, _tmpInvTable));
list.Add(string.Format(format, _tmpStockBillTb));
list.Add(string.Format(format, _tmpQcpTable));
list.Add(string.Format(format, _tmpConvertStockBillTb));
DBUtils.ExecuteBatch(_ctx, list, 1);
}
private void InitInventory()
{
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Expected O, but got Unknown
string empty = string.Empty;
using (new SessionScope())
{
try
{
if (historyStockQuery)
{
new List<OrgDate>();
StkCloseDate = new Dictionary<long, DateTime>();
empty = $" SELECT FORGID,MAX(FCLOSEDATE) AS FCLOSEDATE \r\n FROM T_STK_CLOSEPROFILE \r\n WHERE FORGID IN ({_stkOrgIdCollect}) AND FCATEGORY = 'STK' AND FCLOSEDATE<{queryDate.ToKSQlFormat()} \r\n GROUP BY FORGID ";
DynamicObjectCollection dynamicObjectCollection = DBUtils.ExecuteDynamicObject(base.Context, empty, null, null, CommandType.Text);
if (dynamicObjectCollection != null && dynamicObjectCollection.Count() > 0)
{
foreach (DynamicObject item in dynamicObjectCollection)
{
long key = Convert.ToInt64(item["FORGID"]);
if (!StkCloseDate.ContainsKey(key))
{
StkCloseDate.Add(key, Convert.ToDateTime(item["FCLOSEDATE"]));
}
}
}
StartStockService val = new StartStockService();
dctStockParam = val.GetBatchStockDate(_ctx, _stockOrgIds);
BuildStockInvChangedDetail(_ctx, _stockOrgIds);
}
}
finally
{
tbNameList.Add(GetherTableName);
}
}
string text = "AND I.FSTOCKORGID = M.FUSEORGID";
string text2 = "";
string text3 = "AND I.FSTOCKORGID = EM.FUSEORGID";
CommonService.GetBaseDataShareString(_ctx, ref text, ref text3, ref text2);
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder2 = new StringBuilder();
StringBuilder stringBuilder3 = new StringBuilder();
stringBuilder = stringBuilder.AppendFormat("INSERT INTO {0} (FGuid,\r\n FSTOCKORGID , --库存组织ID\r\n FStockOrgNumber, --库存组织编码\r\n FStockOrgName,\t\t --库存组织名称\r\n FOWNERTYPEID,\t --货主类别ID\r\n FOWNERTYPENAME,\r\n FOWNERID,\r\n FOwnerNumber,\t\t--货主编码\r\n FOwnerName,\t\t\t--货主名称\r\n FKEEPERTYPEID,\t\t\t\t\t--保管者类型\r\n FKEEPERID,\t\t\t\t\t\t--保管者\r\n -- FKEEPERNAME, --保管者名称\r\n FMATERIALID,\t\t\t\t\t--物料ID\r\n FMaterialNumber,\t\t--物料编码\r\n FMaterialName,\t\t--物料名称\r\n FMaterialModel, --规格型号\r\n FERPCLSID,\r\n FLotID,\t\t\t\t\t--批号主档ID\r\n FLotNo,\t\t\t\t--批号\r\n FBOMID,\r\n FBOMNumber, --BOMID\r\n FMTONO, --计划跟踪号\r\n FPROJECTNO , --项目编号\r\n FAuxPropId,\t\t--辅助属性(注意)\r\n FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n FPRODUCEDATE, --生成日期\r\n FEXPIRYDATE, --有效期\r\n FStockNumber,\t\t--仓库编码\r\n FStockName,\t\t\t--仓库名称\r\n FSTOCKSTATUSID,\t\t\t\t\t--库存状态\r\n FSTOCKSTATUSNUMBER, --库存状态编码\r\n FSTOCKSTATUSNAME, --库存状态名称\r\n FStockLocId,\t\t--仓位ID(注意)\r\n FSTOCKLOC, --仓位\r\n FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n FBaseUnitName,\t\t--基本单位\r\n FUnitID,\t\t--库存单位ID\r\n FUnitName,\t\t\t--库存单位\r\n FSECUNITID,\t\t\t\t\t\t--辅助单位ID\r\n FSecUnitName,\t\t--辅助单位\r\n FBASEQTY,\t\t\t\t\t\t--基本数量\r\n FQTY,\t\t\t\t\t\t\t--库存数量\r\n FSECQTY,\t\t\t\t\t\t--辅助单位数量\r\n// FCATEGORYID, --库存类别\r\n FPRECISION,FBASEPRECISION,FSECPRECISION", _tmpInvTable);
stringBuilder2 = stringBuilder2.AppendFormat(" SELECT ROW_NUMBER() OVER(ORDER BY VO.FITEMID) AS FGuid,\r\n I.FSTOCKORGID, --库存组织ID\r\n\t O.FNUMBER AS FStockOrgNumber,\t --库存组织编码\r\n\t OL.FNAME AS FStockOrgName,\t\t--库存组织名称\r\n\t I.FOWNERTYPEID AS FOwnerTypeId,\t--货主类别ID\r\n TMOL.FNAME AS FOWNERTYPENAME,\r\n\t VO.FITEMID AS FOWNERID,\t\t\t\t\t\t--货主ID\r\n\t VO.FNUMBER AS FOwnerNumber,\t\t--货主编码\r\n\t VO_L.FNAME AS FOwnerName,\t\t\t--货主名称\r\n I.FKEEPERTYPEID,\t\t\t\t\t--保管者类型\r\n VK.FITEMID AS FKEEPERID,\t\t\t--保管者 原来用I.FKEEPERID\r\n \t M.FMATERIALID,\t\t\t\t\t--物料ID\r\n M.FNUMBER AS FMaterialNumber,\t\t--物料编码\r\n ML.FNAME AS FMaterialName,\t\t--物料名称\r\n ML.FSPECIFICATION AS FMaterialModel, --规格型号\r\n MB.FERPCLSID,\r\n I.FLOT AS FLotID,\t\t\t\t\t--批号主档ID\r\n\t LT.FNUMBER AS FLotNo,\t\t\t\t--批号\r\n ISNULL(EM.FID,0) AS FBOMID,\r\n EM.FNUMBER AS FBOMNumber, --BOMID\r\n I.FMTONO, --计划跟踪号\r\n I.FPROJECTNO , --项目编号\r\n\t I.FAUXPROPID AS FAuxPropId,\t\t--辅助属性(注意)\r\n\t I.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n TO_DATE(CASE WHEN TMS.FISEXPPARTOFLOT = '1' THEN TO_CHAR(LT.FPRODUCEDATE,'yyyy-MM-dd') ELSE TO_CHAR(I.FPRODUCEDATE,'yyyy-MM-dd') END,'yyyy-MM-dd') AS FPRODUCEDATE,--生成日期\r\n TO_DATE(CASE WHEN TMS.FISEXPPARTOFLOT = '1' THEN TO_CHAR(LT.FEXPIRYDATE,'yyyy-MM-dd') ELSE TO_CHAR(I.FEXPIRYDATE,'yyyy-MM-dd') END,'yyyy-MM-dd') AS FEXPIRYDATE,--有效期\r\n SK.FNUMBER AS FStockNumber,\t\t--仓库编码\r\n\t SL.FNAME AS FStockName,\t\t\t--仓库名称\r\n I.FSTOCKSTATUSID,\t\t\t\t\t--库存状态 \r\n ST.FNUMBER AS FSTOCKSTATUSNUMBER, --库存状态编码\r\n STL.FNAME AS FSTOCKSTATUSNAME, --库存状态名称\r\n\t I.FSTOCKLOCID AS FStockLocId,\t\t--仓位ID(注意)\r\n {0} AS FSTOCKLOC, --仓位\r\n\t I.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n\t BUL.FNAME AS FBaseUnitName,\t\t--基本单位\r\n\t I.FSTOCKUNITID AS FUnitID,\t\t--库存单位ID\r\n\t UL.FNAME AS FUnitName,\t\t\t--库存单位\r\n\t I.FSECUNITID,\t\t\t\t\t\t--辅助单位ID\r\n\t SUL.FNAME AS FSecUnitName,\t\t--辅助单位\r\n\t I.FBASEQTY,\t\t\t\t\t\t--基本数量\r\n\t CASE WHEN TMS.FSTOREURNUM=0 OR TMS.FSTOREURNOM=0 THEN I.FBASEQTY ELSE TO_DECIMAL(TO_DECIMAL(I.FBASEQTY*TMS.FSTOREURNOM,23, 10)/TMS.FSTOREURNUM,23,10) END AS FQTY,\t--库存数量\r\n\t I.FSECQTY,\t\t\t\t\t\t--辅助单位数量\r\n ISNULL(UU.FPRECISION,2) AS FPRECISION,\r\n ISNULL(BU.FPRECISION,2) AS FBASEPRECISION,\r\n ISNULL(SU.FPRECISION,2) AS FSECPRECISION", "' '");
stringBuilder3 = stringBuilder3.AppendFormat(" FROM {6} I\t--即时库存\r\n INNER JOIN T_ORG_ORGANIZATIONS O ON O.FORGID=I.FSTOCKORGID\t--机构\r\n LEFT JOIN T_ORG_ORGANIZATIONS_L OL ON O.FORGID=OL.FORGID AND OL.FLOCALEID={0} --机构名称\r\n INNER JOIN T_BD_MATERIAL M ON I.FMATERIALID = M.FMASTERID {2}\r\n LEFT JOIN T_BD_MATERIAL_L ML ON M.FMATERIALID=ML.FMATERIALID AND ML.FLOCALEID={0}\t--物料名称、规格型号\r\n INNER JOIN T_BD_MATERIALBASE MB ON M.FMATERIALID=MB.FMATERIALID\r\n INNER JOIN T_BD_UNIT BU ON I.FBASEUNITID=BU.FUNITID --基本单位\r\n LEFT JOIN T_BD_UNIT_L BUL ON I.FBASEUNITID=BUL.FUNITID AND BUL.FLOCALEID={0}\t\t\t--基本单位名称\r\n LEFT JOIN T_BD_UNIT_L UL ON I.FSTOCKUNITID=UL.FUNITID AND UL.FLOCALEID={0}\t\t--库存单位名称\r\n LEFT JOIN T_BD_UNIT_L SUL ON I.FSECUNITID=SUL.FUNITID AND SUL.FLOCALEID={0}\t--辅助单位名称\r\n LEFT JOIN T_BD_UNIT UU ON I.FSTOCKUNITID=UU.FUNITID \t\t--库存单位\r\n LEFT JOIN T_BD_UNIT SU ON I.FSECUNITID=SU.FUNITID \t--辅助单位\r\n INNER JOIN T_BD_STOCK SK ON I.FSTOCKID = SK.FSTOCKID {3}\r\n LEFT JOIN T_BD_STOCK_L SL ON SK.FSTOCKID=SL.FSTOCKID AND SL.FLOCALEID={0}\t--仓库名称\r\n LEFT JOIN T_BD_LOTMASTER LT ON I.FLOT=LT.FMASTERID\t--批号\r\n {4}--货主\r\n \r\n LEFT JOIN T_META_OBJECTTYPE_L TMOL ON I.FOWNERTYPEID=TMOL.FID AND TMOL.FLOCALEID= {0}\r\n LEFT JOIN T_BD_STOCKSTATUS AS ST ON ST.FSTOCKSTATUSID=I.FSTOCKSTATUSID\r\n LEFT JOIN T_BD_STOCKSTATUS_L AS STL ON STL.FSTOCKSTATUSID=I.FSTOCKSTATUSID AND STL.FLOCALEID={0}--库存状态名称\r\n LEFT JOIN T_ENG_BOM EM ON I.FBOMID = EM.FMASTERID {5} \r\n {1}\r\n INNER JOIN T_BD_MATERIALSTOCK TMS ON M.FMATERIALID=TMS.FMATERIALID ", _localeID, "", text, " ", CommonService.GetMultiItemJoinSql(_ctx, "I", "V_ITEMCLASS_OWNER", "VO", "FOWNERTYPEID", "FOWNERID", "FSTOCKORGID", "INNER", true), text3, historyStockQuery ? m_GetherTableName : "T_STK_INVENTORY");
string text4 = string.Format(" WHERE I.FBASEQTY<>0 {0}", GetPreFilter("I.FSTOCKORGID", "M.FNUMBER", "SK.FNUMBER", "LT.FNUMBER"));
stringBuilder.Append(",FMaterialGroup,FMATERIALGROUPNAME");
stringBuilder2.Append(",M.FMaterialGroup, GL.FNAME AS FMaterialGroupName");
stringBuilder3.AppendFormat(" LEFT JOIN T_BD_MATERIALGROUP_L AS GL ON GL.FID=M.FMaterialGroup AND GL.FLOCALEID={0} ", _localeID);
stringBuilder.Append(",FMATERIALGROUP_FNUMBER");
stringBuilder2.Append(",G.FNumber AS FMATERIALGROUP_FNUMBER");
stringBuilder3.AppendLine(" LEFT JOIN T_BD_MATERIALGROUP AS G ON G.FID=M.FMaterialGroup ");
stringBuilder.Append(",FKEEPERNAME");
stringBuilder2.Append(",VK_L.FNAME AS FKEEPERNAME");
stringBuilder3.AppendFormat(CommonService.GetMultiItemJoinSql(_ctx, "I", "V_ITEMCLASS_KEEPER", "VK", "FKEEPERTYPEID", "FKEEPERID", "FSTOCKORGID", "LEFT", true));
stringBuilder.Append(",FCATEGORYID,FMATERIALTYPENAME");
stringBuilder2.Append(", MB.FCATEGORYID, CL.FNAME AS FMaterialTypeName");
stringBuilder3.AppendFormat(" LEFT JOIN T_BD_MATERIALCATEGORY_L CL ON MB.FCATEGORYID=CL.FCATEGORYID AND CL.FLOCALEID={0} ", _localeID);
List<string> list = new List<string>();
empty = stringBuilder.ToString() + ")" + stringBuilder2.ToString() + stringBuilder3.ToString() + text4;
list.Add(empty);
DBUtils.ExecuteBatch(_ctx, list, 1);
CreateInvTableIndex();
}
private void BuildStockInvChangedDetail(Context ctx, List<long> needOrgIds)
{
List<OrgDate> list = new List<OrgDate>();
List<long> list2 = new List<long>();
OrgDate orgDate = null;
foreach (KeyValuePair<long, DateTime> item in StkCloseDate)
{
if (needOrgIds.Contains(item.Key))
{
OrgDate orgDate2 = new OrgDate();
orgDate2.OrgId = item.Key;
orgDate2.BeginDate = item.Value;
orgDate = orgDate2;
list.Add(orgDate);
list2.Add(item.Key);
}
}
foreach (KeyValuePair<long, DateTime> item2 in StkOrgStartDate)
{
if (needOrgIds.Contains(item2.Key) && !StkCloseDate.ContainsKey(Convert.ToInt64(item2.Key)) && StkOrgStartDate.ContainsKey(item2.Key))
{
_ = StkOrgStartDate[item2.Key];
OrgDate orgDate3 = new OrgDate();
orgDate3.OrgId = Convert.ToInt64(item2.Key);
orgDate3.BeginDate = DateTime.Parse(item2.Value.ToString()).AddDays(-1.0);
orgDate = orgDate3;
list.Add(orgDate);
list2.Add(Convert.ToInt64(item2.Key));
}
}
if (list2.Count >= 1)
{
StockBillDataRptCommon stockBillDataRptCommon = new StockBillDataRptCommon(ctx, list, StkCloseDate, StkOrgStartDate, queryDate);
string stockBillFilter = GetStockBillFilter();
m_GetherTableName = stockBillDataRptCommon.GetStockData(stockBillFilter);
}
}
private string GetStockBillFilter()
{
StringBuilder stringBuilder = new StringBuilder();
if (!string.IsNullOrWhiteSpace(_stkOrgIdCollect))
{
stringBuilder.AppendFormat(" AND SETTING[FSTOCKORGID] IN ({0}) ", _stkOrgIdCollect);
}
if (!string.IsNullOrWhiteSpace(_materialFrom))
{
stringBuilder.AppendFormat(" AND SETTING[FMATERIALNUMBER] >= '{0}' ", _materialFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_materialTo))
{
stringBuilder.AppendFormat(" AND SETTING[FMATERIALNUMBER] <= '{0}' ", _materialTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockFrom))
{
stringBuilder.AppendFormat(" AND SETTING[FSTOCKNUMBER] >= '{0}' ", _stockFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockTo))
{
stringBuilder.AppendFormat(" AND SETTING[FSTOCKNUMBER] <= '{0}' ", _stockTo.Replace("'", "''"));
}
return stringBuilder.ToString();
}
private void CreateStockBillData(DateTime minDate)
{
string text = string.Format(" AND E.FMATERIALID IN (SELECT FMATERIALID FROM {0}) \r\nAND E.FSTOCKID IN (SELECT FSTOCKID FROM {0}) \r\nAND ISNULL(E.FBOMID, 0) IN (SELECT FBOMID FROM {0})\r\nAND ISNULL(E.FLOT, 0) IN (SELECT FLOTID FROM {0})\r\nAND ISNULL(E.FAUXPROPID, 0) IN (SELECT FAUXPROPID FROM {0})\r\nAND ISNULL(E.FSTOCKLOCID,0) IN (SELECT FSTOCKLOCID FROM {0})", _tmpInvTable);
List<SqlObject> list = new List<SqlObject>();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendFormat("SELECT \r\n --T.FOBJECTTYPEID AS FFormId,\t\t\t--单据类型(FormId)\r\n 'STK_INSTOCK' AS FFormId, --单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期 \r\n T.FDATE AS FBillDate,\t\t\t\t--单据日期\r\n E.FMATERIALID AS FMATERIALID,\t\t--物料ID\r\n T.FStockOrgId AS FSTOCKORGID,\t\t--库存组织ID\r\n E.FOWNERTYPEID AS FOWNERTYPEID,\t\t--货主类型ID\r\n E.FOWNERID AS FOWNERID,\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID AS FKEEPERTYPEID,\t--保管者类别ID\r\n E.FKEEPERID AS FKEEPERID,\t\t\t--保管者ID\r\n E.FSTOCKID AS FSTOCKID,\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID AS FSTOCKPLACEID,\t\t--仓位\r\n E.FSTOCKSTATUSID AS FSTOCKSTATUSID,\t--库存状态\r\n E.FAUXPROPID AS FAUXPROPERTYID,\t\t--辅助属性\r\n E.FLOT AS FLOT,\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE AS FPRODUCTDATE,\t\t--生产日期\r\n E.FEXPIRYDATE AS FVALIDATETO,\t\t--有效期至\r\n E.FBOMID AS FBOMID,\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO, --计划跟踪号\r\n E.FBASEUNITID AS FBASEUNITID,\t\t--基本单位ID\r\n E.FBASEUNITQTY AS FBASEQTY,\t\t\t--基本单位数量\r\n E.FUNITID AS FUNITID,\t\t\t\t--库存单位\r\n E.FREALQTY AS FQTY,\t\t\t\t\t--库存单位数量\r\n E.FAUXUNITID AS FSECUNITID,\t\t\t--辅助单位\r\n E.FAuxUnitQty AS FSECQTY,\t\t\t--辅助单位数量\r\n F.FCostPrice*FExchangeRate AS FPrice,\t\t\t\t--基本单位单价\r\n S.FBillAmount_LC AS FAMOUNT,\t\t\t\t\t\t\t--金额\r\n S.FLOCALCURRID,\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM T_STK_INSTOCK T\r\n INNER JOIN t_STK_InStockFin S ON T.FID=S.FID\r\n INNER JOIN T_STK_INSTOCKENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_INSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND E.FSTOCKFLAG='1' AND S.FISGENFORIOS = '0'\r\n {2}\r\n {3}\r\n {4}\r\n UNION ALL\r\n SELECT \r\n --T.FOBJECTTYPEID AS FFormId,\t\t\t--单据类型(FormId)\r\n 'STK_INSTOCK' AS FFormId, --单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期 \r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FRECEIVEOWNERTYPEID,\t\t\t--货主类型ID\r\n E.FRECEIVEOWNERID,\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FRECEIVESTOCKSTATUS,\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FRECEIVEMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEUNITQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID AS FUNITID,\t\t\t\t--库存单位\r\n E.FREALQTY AS FQTY,\t\t\t\t\t--库存单位数量\r\n E.FAUXUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FAuxUnitQty AS FSECQTY,\t\t--辅助单位数量\r\n F.FCostPrice*FExchangeRate AS FPrice,\t\t\t\t--基本单位单价\r\n S.FBillAmount_LC AS FAMOUNT,\t\t\t\t\t\t\t--金额\r\n S.FLOCALCURRID,\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_INSTOCK T\r\n INNER JOIN t_STK_InStockFin S ON T.FID=S.FID\r\n INNER JOIN T_STK_INSTOCKENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_INSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID\r\n {0}\r\n {1} \r\n WHERE T.FDATE >= @MinDate AND E.FReceiveStockFlag='1'AND FReceiveStockStatus<>null AND S.FISGENFORIOS = '0'\r\n {2} \r\n {3}\r\n {5} ", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL \r\n SELECT \r\n 'PUR_RECEIVEBILL' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEUNITQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FACTLANDQTY,\r\n E.FAUXUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FAuxUnitQty AS FSECQTY,\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_PUR_Receive T\r\n INNER JOIN T_PUR_RECEIVEENTRY E ON T.FID=E.FID\r\n INNER JOIN T_PUR_RECEIVEENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID\r\n {0}\r\n {1} \r\n WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1' \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'SAL_RETURNSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEUNITQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FREALQTY,\r\n E.FAUXUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FAuxUnitQty AS FSECQTY,\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SAL_RETURNSTOCK T\r\n INNER JOIN T_SAL_RETURNSTOCKENTRY E ON T.FID=E.FID\r\n INNER JOIN T_SAL_RETURNSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID\r\n INNER JOIN T_SAL_RETURNSTOCKFIN S ON T.FID = S.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND S.FISGENFORIOS = '0' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'PRD_INSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBaseRealQty,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FREALQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSecRealQty AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCurrId,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_PRD_INSTOCK T\r\n INNER JOIN T_PRD_INSTOCKENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND T.FENTRUSTINSTOCKID = 0 \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'PRD_RETURNMTRL' AS FFormId, --单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n EA.FBASESTOCKQTY,\t\t \t--基本单位数量\r\n E.FUNITID,\r\n E.FSTOCKQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECSTOCKQTY AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_PRD_RETURNMTRL T\r\n INNER JOIN T_PRD_RETURNMTRLENTRY E ON T.FID=E.FID\r\n INNER JOIN T_PRD_RETURNMTRLENTRY_A EA ON E.FENTRYID=EA.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
string sql = $"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,\r\nFKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,\r\nFUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FQTYADDOPTION)\r\n SELECT \r\n ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,\r\n -1 AS FGUID, \r\n FFormId,\t\t\t--单据类型(FormId) \r\n FCreateDate, \r\n FBillDate,\t\t\t\t--单据日期 \r\n FMATERIALID,\t\t--物料ID \r\n FSTOCKORGID,\t\t--库存组织ID \r\n FOWNERTYPEID,\t\t--货主类型ID \r\n FOWNERID,\t\t\t\t--货主ID \r\n FKEEPERTYPEID,\t--保管者类别ID \r\n FKEEPERID,\t\t\t--保管者ID \r\n FSTOCKID,\t\t\t\t--仓库ID \r\n ISNULL(FSTOCKPLACEID,0),\t\t--仓位 \r\n FSTOCKSTATUSID,\t--库存状态 \r\n ISNULL(FAUXPROPERTYID,0),\t\t--辅助属性 \r\n FLOT,\t\t\t\t\t\t--批号\r\n TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期\r\n TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至\r\n ISNULL(FBOMID,0),\t\t\t\t\t--BOMID \r\n FMTONO , --计划跟踪号 \r\n FPROJECTNO ,\r\n FBASEUNITID,\t\t--基本单位ID \r\n FBASEQTY,\t\t\t--基本单位数量 \r\n FUNITID,\r\n FQTY, \r\n FSECUNITID,\t\t\t--辅助单位 \r\n FSECQTY,\t\t\t--辅助单位数量 \r\n FPrice,\t\t\t--基本单位单价 \r\n FAMOUNT,\t\t\t\t\t\t\t--金额 \r\n FLOCALCURRID,\r\n '', \r\n FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM ({stringBuilder.ToString()}) AS TB\r\n ORDER BY FBillDate DESC";
if (historyStockQuery)
{
List<SqlParam> list2 = new List<SqlParam>();
list2.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
list2.Add(new SqlParam("@MaxDate", KDDbType.DateTime, queryDate.AddDays(1.0)));
list.Add(new SqlObject(sql, list2));
}
else
{
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
stringBuilder.Clear();
stringBuilder.AppendFormat("SELECT \r\n 'SP_INSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID FSTOCKPLACEID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID ,\t\t\t\t--库存状态\r\n E.FAUXPROPID FAUXPROPERTYID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE FPRODUCTDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE FVALIDATETO,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n N' ' AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBaseRealQty FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FREALQTY FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSecRealQty AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCURRID FLOCALCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SP_InStock T\r\n INNER JOIN T_SP_InStockENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'SP_RETURNMTRL' AS FFormId,\t\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n N' ' AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECSTOCKQTY AS FSECQTY,\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SP_ReturnMtrl T\r\n INNER JOIN T_SP_ReturnMtrlENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_MISCELLANEOUS' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCURRENCYID,\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_MISCELLANEOUS T\r\n INNER JOIN T_STK_MISCELLANEOUSENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FSTOCKFLAG=1 AND FStockDirect ='GENERAL' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_MISDELIVERY' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_MisDelivery T\r\n INNER JOIN T_STK_MisDeliveryENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1' AND FStockDirect ='RETURN' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_TRANSFERIN' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID,\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FDESTLOT AS FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号 \r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_STKTRANSFERIN T\r\n INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FOBJECTTYPEID='STK_TRANSFERIN' \r\n AND FStockInFlag='1' AND T.FISGENFORIOS = '0' \r\n {2}\r\n {3}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FDESTSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FDESTLOT_TEXT"), text.Replace("E.FSTOCKID", "E.FDESTSTOCKID").Replace("E.FLOT", "E.FDESTLOT").Replace("E.FSTOCKLOCID", "E.FDESTSTOCKLOCID")).AppendLine();
sql = $"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,\r\nFKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,\r\nFUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)\r\n SELECT \r\n ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,\r\n -1 AS FGUID, \r\n FFormId,\t\t\t--单据类型(FormId) \r\n FCreateDate, \r\n FBillDate,\t\t\t\t--单据日期 \r\n FMATERIALID,\t\t--物料ID \r\n FSTOCKORGID,\t\t--库存组织ID \r\n FOWNERTYPEID,\t\t--货主类型ID \r\n FOWNERID,\t\t\t\t--货主ID \r\n FKEEPERTYPEID,\t--保管者类别ID \r\n FKEEPERID,\t\t\t--保管者ID \r\n FSTOCKID,\t\t\t\t--仓库ID \r\n ISNULL(FSTOCKPLACEID,0),\t\t--仓位 \r\n FSTOCKSTATUSID,\t--库存状态 \r\n ISNULL(FAUXPROPERTYID,0),\t\t--辅助属性 \r\n FLOT,\t\t\t\t\t\t--批号\r\n TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期\r\n TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至\r\n ISNULL(FBOMID,0),\t\t\t\t\t--BOMID \r\n FMTONO , --计划跟踪号 \r\n FPROJECTNO ,\r\n FBASEUNITID,\t\t--基本单位ID \r\n FBASEQTY,\t\t\t--基本单位数量 \r\n FUNITID,\r\n FQTY, \r\n FSECUNITID,\t\t\t--辅助单位 \r\n FSECQTY,\t\t\t--辅助单位数量 \r\n FPrice,\t\t\t--基本单位单价 \r\n FAMOUNT,\t\t\t\t\t\t\t--金额 \r\n FLOCALCURRID,\r\n '', \r\n 99999 AS FAGEDAYSINT,\r\n FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM ({stringBuilder.ToString()}) AS TB\r\n ORDER BY FBillDate DESC";
if (historyStockQuery)
{
List<SqlParam> list3 = new List<SqlParam>();
list3.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
list3.Add(new SqlParam("@MaxDate", KDDbType.DateTime, queryDate.AddDays(1.0)));
list.Add(new SqlObject(sql, list3));
}
else
{
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
stringBuilder.Clear();
stringBuilder.AppendFormat("SELECT \r\n 'STK_ASSEMBLEDAPP' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FStockLocId FSTOCKPLACEID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t--库存状态\r\n E.FAUXPROPID FAUXPROPERTYID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE FPRODUCTDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE FVALIDATETO,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n CASE WHEN FAffairType ='Dassembly' THEN 0 ELSE 1 END AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_ASSEMBLY T\r\n INNER JOIN T_STK_ASSEMBLYPRODUCT E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}\r\n UNION ALL\r\n SELECT \r\n 'STK_ASSEMBLEDAPP' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t\t\t\t--单据日期\r\n CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FStockLocId FSTOCKPLACEID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n CASE WHEN FAffairType ='Dassembly' THEN 1 ELSE 0 END AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_ASSEMBLY T\r\n INNER JOIN T_STK_ASSEMBLYPRODUCT C ON T.FID=C.FID\r\n INNER JOIN T_STK_ASSEMBLYSUBITEM E ON C.FENTRYID=E.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND E.FSTOCKFLAG='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_OEMINSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_OEMInStock T\r\n INNER JOIN T_STK_OEMInStockENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_INVINIT' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FSTOCKINDATE IS NULL OR E.FSTOCKINDATE > TSTT.FVALUE THEN TSTT.FVALUE ELSE E.FSTOCKINDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n T.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n T.FKEEPERID,\t\t\t\t\t--保管者ID\r\n T.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n 0 AS FLOCALCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_InvInit T\r\n INNER JOIN T_STK_INVINITDETAIL E ON T.FID=E.FID\r\n INNER JOIN (SELECT FORGID, TO_DATE(FVALUE,'yyyy-MM-dd') - 1 AS FVALUE FROM T_BAS_SYSTEMPROFILE \r\n WHERE FCATEGORY = 'STK' AND FKEY = 'STARTSTOCKDATE' AND FVALUE <> '{5}' AND FORGID IN ({4})) TSTT ON T.FStockOrgId = TSTT.FORGID\r\n {0}\r\n {1}\r\n \r\n WHERE (CASE WHEN E.FSTOCKINDATE IS NULL OR E.FSTOCKINDATE > TSTT.FVALUE THEN TSTT.FVALUE ELSE E.FSTOCKINDATE END) >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {6}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), GetMaxDateFilter("E", "FSTOCKINDATE"), _stkOrgIdCollect, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "" : " ", text.Replace("E.FSTOCKID", "T.FSTOCKID")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_STOCKCOUNTGAIN' AS FFormId, --单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期\r\n E.FMATERIALID, --物料ID\r\n T.FStockOrgId, --库存组织ID\r\n E.FOWNERTYPEID, --货主类型ID\r\n E.FOWNERID, --货主ID\r\n E.FKEEPERTYPEID, --保管者类别ID\r\n E.FKEEPERID, --保管者ID\r\n E.FSTOCKID, --仓库ID\r\n E.FSTOCKLOCID, --仓位\r\n E.FSTOCKSTATUSID, --库存状态\r\n E.FAUXPROPID, --辅助属性\r\n E.FLOT, --批号\r\n E.FPRODUCEDATE, --生产日期\r\n E.FEXPIRYDATE, --有效期至\r\n E.FBOMID, --BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID, --基本单位ID\r\n E.FBASEGAINQTY, --基本单位数量\r\n E.FUNITID,\r\n E.FGAINQTY,\r\n E.FSECUNITID AS FSECUNITID, --辅助单位\r\n E.FSECGAINQTY AS FSECQTY, --辅助单位数量\r\n E.FPrice, --基本单位单价\r\n E.FAMOUNT, --金额\r\n T.FBASECURRID AS FLOCALCURRID, --本位币\r\n 1 AS FQTYADDOPTION --更新库存方向\r\n FROM T_STK_STKCOUNTGAIN T\r\n INNER JOIN T_STK_STKCOUNTGAINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), GetMaxDateFilter("T", "FDATE"), text).AppendLine();
stringBuilder.AppendFormat(" UNION ALL\r\n SELECT \r\n 'STK_TransferDirect' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID AS FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId AS FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID AS FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID AS FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID AS FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID AS FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID AS FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID AS FSTOCKLOC,\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID AS FAuxPropId,\t\t\t\t\t--辅助属性\r\n E.FDESTLOT AS FLOTID,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE AS FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE AS FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID AS FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID AS FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY AS FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID AS FUNITID,\r\n E.FQTY AS FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID AS FLOCALCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t--更新库存方向\r\n\r\n FROM T_STK_STKTRANSFERIN T\r\n INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE T.FDATE >= @MinDate AND FOBJECTTYPEID='STK_TransferDirect' AND FStockInFlag='1'\r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND ( T.FSTOCKORGID IN ({0}) OR T.FSTOCKOUTORGID IN ({0}) )", _stkOrgIdCollect), GetPreFilter("", "M.FNUMBER", "", "E.FDESTLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("T", "FDATE"), text.Replace("E.FSTOCKID", "E.FDESTSTOCKID").Replace("E.FLOT", "E.FDESTLOT").Replace("E.FSTOCKLOCID", "E.FDESTSTOCKLOCID")).AppendLine();
sql = $"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,\r\nFKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,\r\nFUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)\r\n SELECT \r\n ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,\r\n -1 AS FGUID, \r\n FFormId,\t\t\t--单据类型(FormId) \r\n FCreateDate, \r\n FBillDate,\t\t\t\t--单据日期 \r\n FMATERIALID,\t\t--物料ID \r\n FSTOCKORGID,\t\t--库存组织ID \r\n FOWNERTYPEID,\t\t--货主类型ID \r\n FOWNERID,\t\t\t\t--货主ID \r\n FKEEPERTYPEID,\t--保管者类别ID \r\n FKEEPERID,\t\t\t--保管者ID \r\n FSTOCKID,\t\t\t\t--仓库ID \r\n ISNULL(FSTOCKPLACEID,0),\t\t--仓位 \r\n FSTOCKSTATUSID,\t--库存状态 \r\n ISNULL(FAUXPROPERTYID,0),\t\t--辅助属性 \r\n FLOT,\t\t\t\t\t\t--批号\r\n TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期\r\n TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至\r\n ISNULL(FBOMID,0),\t\t\t\t\t--BOMID \r\n FMTONO , --计划跟踪号 \r\n FPROJECTNO ,\r\n FBASEUNITID,\t\t--基本单位ID \r\n FBASEQTY,\t\t\t--基本单位数量 \r\n FUNITID,\r\n FQTY, \r\n FSECUNITID,\t\t\t--辅助单位 \r\n FSECQTY,\t\t\t--辅助单位数量 \r\n FPrice,\t\t\t--基本单位单价 \r\n FAMOUNT,\t\t\t\t\t\t\t--金额 \r\n FLOCALCURRID,\r\n '', \r\n 99999 AS FAGEDAYSINT,\r\n FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM ({stringBuilder.ToString()}) AS TB\r\n ORDER BY FBillDate DESC";
if (historyStockQuery)
{
List<SqlParam> list4 = new List<SqlParam>();
list4.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
list4.Add(new SqlParam("@MaxDate", KDDbType.DateTime, queryDate.AddDays(1.0)));
list.Add(new SqlObject(sql, list4));
}
else
{
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
stringBuilder.Clear();
stringBuilder.AppendFormat("SELECT \r\n 'STK_STATUSCONVERT' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID FSTOCKPLACEID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID FAUXPROPERTYID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE FPRODUCTDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE FVALIDATETO,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FCONVERTQTY FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID FLOCALCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t--更新库存方向\r\n FROM T_STK_StatusConvert T\r\n INNER JOIN T_STK_StatusConvertEntry E ON T.FID=E.FID\r\n INNER JOIN T_STK_StatusConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n {8}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("T", "FDATE"), text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_STOCKCONVERT' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FCONVERTQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION\t\t\t--更新库存方向\r\n \r\n FROM T_STK_StockConvert T\r\n INNER JOIN T_STK_StockConvertEntry E ON T.FID=E.FID\r\n INNER JOIN T_STK_StockConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n {8}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("T", "FDATE"), text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_LOTADJUST' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQty,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION\t\t\t--更新库存方向\r\n FROM T_STK_LOTADJUST T\r\n INNER JOIN T_STK_LOTADJUSTENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_LOTADJUSTENTRY OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n {8}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("T", "FDATE"), text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'REM_INSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBaseRealQty,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FREALQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSecRealQty AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCurrId,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_REM_INSTOCK T\r\n INNER JOIN T_REM_INSTOCKENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'REM_ReturnMtrl' AS FFormId, --单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n EA.FBASESTOCKQTY,\t\t \t--基本单位数量\r\n E.FUNITID,\r\n E.FSTOCKQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECSTOCKQTY AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_REM_RETURNMTRL T\r\n INNER JOIN T_REM_RETURNMTRLENTRY E ON T.FID=E.FID\r\n INNER JOIN T_REM_RETURNMTRLENTRY_A EA ON E.FENTRYID=EA.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
stringBuilder.AppendFormat(" UNION ALL\r\n SELECT \r\n 'REM_TransferDirect' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID AS FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId AS FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID AS FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID AS FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID AS FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID AS FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID AS FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID AS FSTOCKLOC,\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID AS FAuxPropId,\t\t\t\t\t--辅助属性\r\n E.FLOT AS FLOTID,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE AS FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE AS FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID AS FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID AS FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY AS FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID AS FUNITID,\r\n E.FQTY AS FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID AS FLOCALCURRID,\r\n 1 AS FQTYADDOPTION\t\t\t--更新库存方向\r\n\r\n FROM T_REM_STKTRANSFERIN T\r\n INNER JOIN T_REM_STKTRANSFERINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE T.FDATE >= @MinDate AND FStockInFlag='1'\r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND ( T.FSTOCKORGID IN ({0}) OR T.FSTOCKOUTORGID IN ({0}) )", _stkOrgIdCollect), GetPreFilter("", "M.FNUMBER", "", "E.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("T", "FDATE"), text.Replace("E.FSTOCKID", "E.FDESTSTOCKID").Replace("E.FSTOCKLOCID", "E.FDESTSTOCKLOCID")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'SUB_RETURNMTRL' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--创建日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n A.FMTONO AS FMTONO, --#计划跟踪号\r\n A.FPROJECTNO AS FPROJECTNO, --项目编号\r\n E.FBASEUNITID,\t\t\t\t\t--#基本单位ID\r\n E.FBASESTOCKQTY,\t\t\t\t\t--#基本单位数量\r\n E.FUNITID, \r\n E.FSTOCKQTY, --#实退数量\r\n E.FSecUnitId AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t--辅助单位数量\r\n E.FPrice,\t\t\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT,\t\t\t\t\t\t\t\t--金额\r\n T.FCURRID,\t\t\t\t\t\t\t--本位币\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SUB_RETURNMTRL T\r\n INNER JOIN T_SUB_RETURNMTRLENTRY E ON T.FID=E.FID\r\n INNER JOIN T_SUB_RETURNMTRLENTRY_A A ON A.FENTRYID=E.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1'\r\n {2} \r\n {3}\r\n {4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
sql = $"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,\r\nFKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,\r\nFUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)\r\n SELECT \r\n ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,\r\n -1 AS FGUID, \r\n FFormId,\t\t\t--单据类型(FormId) \r\n FCreateDate, \r\n FBillDate,\t\t\t\t--单据日期 \r\n FMATERIALID,\t\t--物料ID \r\n FSTOCKORGID,\t\t--库存组织ID \r\n FOWNERTYPEID,\t\t--货主类型ID \r\n FOWNERID,\t\t\t\t--货主ID \r\n FKEEPERTYPEID,\t--保管者类别ID \r\n FKEEPERID,\t\t\t--保管者ID \r\n FSTOCKID,\t\t\t\t--仓库ID \r\n ISNULL(FSTOCKPLACEID,0),\t\t--仓位 \r\n FSTOCKSTATUSID,\t--库存状态 \r\n ISNULL(FAUXPROPERTYID,0),\t\t--辅助属性 \r\n FLOT,\t\t\t\t\t\t--批号\r\n TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期\r\n TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至\r\n ISNULL(FBOMID,0),\t\t\t\t\t--BOMID \r\n FMTONO , --计划跟踪号 \r\n FPROJECTNO ,\r\n FBASEUNITID,\t\t--基本单位ID \r\n FBASEQTY,\t\t\t--基本单位数量 \r\n FUNITID,\r\n FQTY, \r\n FSECUNITID,\t\t\t--辅助单位 \r\n FSECQTY,\t\t\t--辅助单位数量 \r\n FPrice,\t\t\t--基本单位单价 \r\n FAMOUNT,\t\t\t\t\t\t\t--金额 \r\n FLOCALCURRID,\r\n '', \r\n 99999 AS FAGEDAYSINT,\r\n FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM ({stringBuilder.ToString()}) AS TB\r\n ORDER BY FBillDate DESC";
if (historyStockQuery)
{
List<SqlParam> list5 = new List<SqlParam>();
list5.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
list5.Add(new SqlParam("@MaxDate", KDDbType.DateTime, queryDate.AddDays(1.0)));
list.Add(new SqlObject(sql, list5));
}
else
{
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
stringBuilder.Clear();
stringBuilder.AppendFormat("SELECT \r\n 'SAL_OUTSTOCK' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID FSTOCKPLACEID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID FAUXPROPERTYID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE FPRODUCTDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE FVALIDATETO,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEUNITQTY FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID ,\r\n E.FREALQTY FQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FAUXUNITQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n F.FCostPrice AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n F.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n TSF.FLocalCurrID,\r\n 0 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SAL_OUTSTOCK T\r\n INNER JOIN T_SAL_OUTSTOCKFIN TSF ON T.FID=TSF.FID\r\n INNER JOIN T_SAL_OUTSTOCKENTRY E ON T.FID=E.FID\r\n INNER JOIN T_SAL_OUTSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND TSF.FISGENFORIOS = '0' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'PRD_PICKMTRL' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n F.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n F.FOWNERID,\t\t\t\t\t\t--货主ID\r\n F.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n F.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBaseActualQty,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FActualQty,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSecActualQty AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCurrId,\r\n 0 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_PRD_PickMtrl T\r\n INNER JOIN T_PRD_PICKMTRLDATA E ON T.FID=E.FID\r\n INNER JOIN T_PRD_PICKMTRLDATA_A F ON F.FID=T.FID AND F.FENTRYID=E.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_MISDELIVERY' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n T.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n T.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FBaseCurrId,\r\n 0 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_MisDelivery T\r\n INNER JOIN T_STK_MISDELIVERYENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND FStockDirect = 'GENERAL' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'SP_PICKMTRL' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n N' ' AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEACTUALQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FACTUALQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECACTUALQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCurrId,\r\n 0 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_SP_PICKMTRL T\r\n INNER JOIN T_SP_PICKMTRLDATA E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_TRANSFEROUT' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN ET.FBUSINESSDATE IS NULL OR ET.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE ET.FBUSINESSDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FDESTMATERIALID,\t\t\t\t\t--物料ID\r\n T.FSTOCKINORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEINID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERINID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEINID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERINID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FDESTLOT,\t\t\t\t\t\t\t--批号\r\n E.FDESTPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FDESTEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FDESTBOMID,\t\t\t\t\t\t--BOMID\r\n E.FDESTMTONO AS FMTONO, --计划跟踪号\r\n E.FDESTPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_STKTRANSFEROUT T\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY_T ET ON E.FENTRYID=ET.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockInFlag='1' AND FVESTONWAY = 'B'\r\n {2}\r\n {3}\r\n {4}\r\n {7}\r\n {10}\r\n UNION ALL \r\n SELECT \r\n 'STK_TRANSFEROUT' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n CASE WHEN ET.FBUSINESSDATE IS NULL OR ET.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE ET.FBUSINESSDATE END AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSRCSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSRCSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_STK_STKTRANSFEROUT T\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY_T ET ON E.FENTRYID=ET.FENTRYID\r\n {8}\r\n {5}\r\n WHERE T.FDATE >= @MinDate AND FStockOutFlag='1' AND FVESTONWAY = 'A' \r\n {9}\r\n {3}\r\n {6}\r\n {7}\r\n {11}", _preMaterialJoinSql.Replace("E.FMATERIALID", "E.FDESTMATERIALID"), GetStockPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetPreFilter("", "M.FNUMBER", "", "E.FDestLOT_TEXT"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND (T.FSTOCKORGID IN ({0}) OR T.FSTOCKINORGID IN ({0})) ", _stkOrgIdCollect), GetPreFilter("", "", "SKD.FNUMBER", ""), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), GetPreFilter("", "", "SKS.FNUMBER", ""), _dateFilter, _preMaterialJoinSql, GetPreFilter("", "M.FNUMBER", "", "E.FLOT_TEXT"), text.Replace("E.FMATERIALID", "E.FDESTMATERIALID").Replace("E.FSTOCKID", "E.FDESTSTOCKID").Replace("E.FSTOCKLOCID", "E.FDESTSTOCKLOCID")
.Replace("E.FLOT", "E.FDESTLOT")
.Replace("E.FBOMID", "E.FDESTBOMID"), text.Replace("E.FSTOCKID", "E.FSRCSTOCKID").Replace("E.FSTOCKLOCID", "E.FSRCSTOCKLOCID")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'REM_PickMtrl' AS FFormId,\t--单据类型(FormId)\r\n T.FCREATEDATE AS FCreateDate,\t--单据日期\r\n T.FDATE AS FBillDate,\t\t\t--单据日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n F.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n F.FOWNERID,\t\t\t\t\t\t--货主ID\r\n F.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n F.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBaseActualQty,\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FActualQty,\r\n E.FBASEUNITID AS FSECUNITID,\t--辅助单位\r\n E.FSecActualQty AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t\t\t\t--金额\r\n T.FCurrId,\r\n 0 AS FQTYADDOPTION\t\t\t\t--更新库存方向\r\n FROM T_REM_PICKMTRL T\r\n INNER JOIN T_REM_PICKMTRLDATA E ON T.FID=E.FID\r\n INNER JOIN T_REM_PICKMTRLDATA_A F ON F.FID=T.FID AND F.FENTRYID=E.FENTRYID\r\n {0}\r\n {1}\r\n WHERE T.FDATE >= @MinDate AND FStockFlag='1' \r\n {2}\r\n {3}\r\n {4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
sql = $"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,\r\nFKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,\r\nFUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)\r\n SELECT \r\n ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,\r\n -1 AS FGUID, \r\n FFormId,\t\t\t--单据类型(FormId) \r\n FCreateDate, \r\n FBillDate,\t\t\t\t--单据日期 \r\n FMATERIALID,\t\t--物料ID \r\n FSTOCKORGID,\t\t--库存组织ID \r\n FOWNERTYPEID,\t\t--货主类型ID \r\n FOWNERID,\t\t\t\t--货主ID \r\n FKEEPERTYPEID,\t--保管者类别ID \r\n FKEEPERID,\t\t\t--保管者ID \r\n FSTOCKID,\t\t\t\t--仓库ID \r\n ISNULL(FSTOCKPLACEID,0),\t\t--仓位 \r\n FSTOCKSTATUSID,\t--库存状态 \r\n ISNULL(FAUXPROPERTYID,0),\t\t--辅助属性 \r\n FLOT,\t\t\t\t\t\t--批号\r\n TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期\r\n TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至\r\n ISNULL(FBOMID,0),\t\t\t\t\t--BOMID \r\n FMTONO , --计划跟踪号 \r\n FPROJECTNO ,\r\n FBASEUNITID,\t\t--基本单位ID \r\n FBASEQTY,\t\t\t--基本单位数量 \r\n FUNITID,\r\n FQTY, \r\n FSECUNITID,\t\t\t--辅助单位 \r\n FSECQTY,\t\t\t--辅助单位数量 \r\n FPrice,\t\t\t--基本单位单价 \r\n FAMOUNT,\t\t\t\t\t\t\t--金额 \r\n FLOCALCURRID,\r\n '', \r\n 99999 AS FAGEDAYSINT,\r\n FQTYADDOPTION\t\t\t\t\t--更新库存方向\r\n FROM ({stringBuilder.ToString()}) AS TB\r\n ORDER BY FBillDate DESC";
if (historyStockQuery)
{
List<SqlParam> list6 = new List<SqlParam>();
list6.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
list6.Add(new SqlParam("@MaxDate", KDDbType.DateTime, queryDate.AddDays(1.0)));
list.Add(new SqlObject(sql, list6));
}
else
{
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
DBUtils.ExecuteBatch(_ctx, list);
CreateStockBillTableIndex();
sql = string.Format("/*dialect*/ \r\n merge into {0} IT using (\r\n SELECT FGUID,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,FKEEPERTYPEID,FKEEPERID,\r\n FSTOCKID,FStockLocId,FSTOCKSTATUSID,FAuxPropId,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO from {1} ) IT2 \r\n ON (IT.FMATERIALID=IT2.FMATERIALID\r\n AND IT.FSTOCKORGID=IT2.FSTOCKORGID\r\n AND IT.FOWNERTYPEID=IT2.FOWNERTYPEID\r\n AND IT.FOWNERID=IT2.FOWNERID\r\n AND IT.FKEEPERTYPEID=IT2.FKEEPERTYPEID\r\n AND IT.FKEEPERID=IT2.FKEEPERID\r\n AND IT.FSTOCKID=IT2.FSTOCKID\r\n AND IT.FSTOCKLOC=IT2.FStockLocId\r\n AND IT.FSTOCKSTATUSID=IT2.FSTOCKSTATUSID\r\n AND IT.FAuxPropId=IT2.FAuxPropId\r\n AND IT.FLOTID=IT2.FLOTID\r\n AND (IT.FPRODUCEDATE=IT2.FPRODUCEDATE OR (IT.FPRODUCEDATE IS NULL AND IT2.FPRODUCEDATE IS NULL))\r\n AND (IT.FEXPIRYDATE=IT2.FEXPIRYDATE OR (IT.FEXPIRYDATE IS NULL AND IT2.FEXPIRYDATE IS NULL))\r\n AND IT.FBOMID=IT2.FBOMID \r\n AND IT.FMTONO = IT2.FMTONO\r\n AND IT.FPROJECTNO = IT2.FPROJECTNO\r\n )\r\n WHEN MATCHED THEN UPDATE SET IT.FGUID = IT2.FGUID {2}", _tmpStockBillTb, _tmpInvTable, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "");
list.Clear();
list.Add(new SqlObject(sql, new List<SqlParam>()));
sql = $"DELETE {_tmpStockBillTb} WHERE FGUID = -1";
list.Add(new SqlObject(sql, new List<SqlParam>()));
if (!_showRange)
{
sql = $"UPDATE {_tmpStockBillTb} SET FAGEDAYS=CONVERT(varchar(10),DATEDIFF(D,FBIllDATE,@endDate)), FAGEDAYSINT=DATEDIFF(D,FBIllDATE,@endDate)";
List<SqlParam> list7 = new List<SqlParam>();
list7.Add(new SqlParam("@endDate", DbType.DateTime, _curDateIsOne ? queryDate.AddDays(1.0) : queryDate));
list.Add(new SqlObject(sql, list7));
}
DBUtils.ExecuteBatch(base.Context, list);
new List<string>();
string strSQL = string.Format("merge into {0} IT \r\nusing (select t1.fmaterialid,t1.FSTOREURNOM,t1.FSTOREURNUM,t2.FPRECISION,t1.FSTOREUNITID FROM T_BD_MATERIALSTOCK t1 inner join t_bd_unit t2 on t1.FSTOREUNITID = t2.funitid \r\n WHERE t1.fmaterialid in (select fmaterialid from {0} ) ) T2\r\nON (IT.FMATERIALID = T2.FMATERIALID)\r\nWHEN MATCHED THEN UPDATE\r\nSET IT.FUNITID = T2.FSTOREUNITID,\r\n IT.FQTY = ROUND(CASE WHEN T2.FSTOREURNUM = 0 THEN IT.FBASEQTY ELSE TO_DECIMAL(TO_DECIMAL(IT.FBASEQTY * T2.FSTOREURNOM, 23, 10) / T2.FSTOREURNUM, 23,10) END,T2.FPRECISION)", _tmpStockBillTb);
DBUtils.Execute(base.Context, strSQL);
}
private void CreateConvertStockBillTb(DateTime minDate)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendFormat("SELECT \r\n 'STK_TransferDirect' AS FFormId,\t--单据类型(FormId)\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FSRCMATERIALID AS FMATERIALID, --物料ID\r\n T.FSTOCKOUTORGID AS FSTOCKORGID,\t\t\t\t\t--调出库存组织ID\r\n E.FOWNERTYPEID AS FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID AS FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID AS FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID AS FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID AS FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID AS FSTOCKLOC,\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID AS FAuxPropId,\t\t\t\t\t--辅助属性\r\n E.FLOT AS FLOTID,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE AS FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE AS FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID AS FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID AS FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY AS FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID AS FUNITID,\r\n E.FQTY AS FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n 0 AS FPrice,\t\t\t\t--基本单位单价\r\n 0 AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID AS FLOCALCURRID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n T.FSTOCKOUTORGID AS FOutSTOCKORGID,\t\t\t\t\t--出库库存组织ID\r\n E.FOWNERTYPEOUTID AS FOutOWNERTYPEID,\t\t--出库货主类型ID\r\n E.FOWNEROUTID AS FOutOWNERID,\t\t\t\t--出库货主ID\r\n E.FKEEPERTYPEOUTID AS FOutKEEPERTYPEID,\t--出库保管者类别ID\r\n E.FKEEPEROUTID AS FOutKEEPERID,\t\t\t--出库保管者ID\r\n E.FSRCSTOCKID AS FOutSTOCKID,\t\t\t\t--出库仓库ID\r\n E.FSRCSTOCKLOCID AS FOutSTOCKLOC,\t\t--出库仓位\r\n E.FSRCSTOCKSTATUSID AS FOutSTOCKSTATUSID,\t--出库库存状态\r\n E.FAUXPROPID AS FOutAuxPropId,\t\t--出库辅助属性\r\n E.FLOT AS FOutLOTID,\t\t\t\t\t\t--出库批号\r\n E.FPRODUCEDATE AS FOutPRODUCEDATE,\t\t--出库生产日期\r\n E.FEXPIRYDATE AS FOutEXPIRYDATE\t\t--出库有效期至\r\n FROM T_STK_STKTRANSFERIN T\r\n INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE E.FBUSINESSDATE >= @MinDate AND FOBJECTTYPEID='STK_TransferDirect' AND FStockInFlag='1'\r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND (T.FSTOCKORGID IN ({0}) OR T.FSTOCKOUTORGID IN ({0}) )", _stkOrgIdCollect), GetPreFilter("", "M.FNUMBER", "", "E.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("E", "FBUSINESSDATE")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_TRANSFEROUT' AS FFormId,\t--单据类型(FormId)\r\n F.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FSTOCKORGID,\t\t\t\t\t--库存组织ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FOWNERTYPEID\r\n ELSE E.FOWNERTYPEINID\r\n END), --货主类型ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FOWNERID\r\n ELSE E.FOWNERINID\r\n END), \t\t\t\t\t\t--货主ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FKEEPERTYPEID\r\n ELSE E.FKEEPERTYPEINID\r\n END),\t\t\t\t --保管者类别ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FKEEPERID\r\n ELSE E.FKEEPERINID\r\n END),\t\t\t\t\t --保管者ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FSRCSTOCKID\r\n ELSE E.FDESTSTOCKID\r\n END),\t\t\t\t\t --仓库ID\r\n (CASE WHEN T.FVESTONWAY='A' THEN E.FSRCSTOCKLOCID\r\n ELSE E.FDESTSTOCKLOCID\r\n END),\t\t\t\t --仓位 \t\t\t\t\r\n E.FDESTSTOCKSTATUSID, --库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n --\r\n T.FStockInOrgID,\t\t\t\t\t--出库库存组织ID\r\n E.FOWNERTYPEINID,\t\t--出库货主类型ID\r\n E.FOWNERINID,\t\t\t\t--出库货主ID\r\n E.FKEEPERTYPEINID,\t--出库保管者类别ID\r\n E.FKEEPERINID,\t\t\t--出库保管者ID\r\n E.FSRCSTOCKID,\t\t\t\t--出库仓库ID\r\n E.FSRCSTOCKLOCID,\t\t--出库仓位\r\n E.FSRCSTOCKSTATUSID,\t--出库库存状态\r\n E.FAUXPROPID,\t\t--出库辅助属性\r\n E.FLOT,\t\t\t\t\t\t--出库批号\r\n E.FPRODUCEDATE,\t\t--出库生产日期\r\n E.FEXPIRYDATE\t\t--出库有效期至\r\n FROM T_STK_STKTRANSFEROUT T\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_STKTRANSFEROUTENTRY_T F ON F.FENTRYID=E.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE F.FBUSINESSDATE >= @MinDate AND FStockInFlag='1'\r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n ", _preMaterialJoinSql, GetStockTransOutPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND T.FSTOCKORGID IN ({0}) OR T.FSTOCKINORGID IN ({0})", _stkOrgIdCollect), GetPreFilter("", "M.FNUMBER", "", "E.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("F", "FBUSINESSDATE")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_TRANSFERIN' AS FFormId,\t--单据类型(FormId)\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FDESTSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FDESTSTOCKLOCID,\t\t\t\t--仓位\r\n E.FDESTSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n --\r\n T.FSTOCKOUTORGID,\t\t\t\t\t--出库库存组织ID\r\n E.FOWNERTYPEOUTID,\t\t--出库货主类型ID\r\n E.FOWNEROUTID,\t\t\t\t--出库货主ID\r\n E.FKEEPERTYPEOUTID,\t--出库保管者类别ID\r\n E.FKEEPEROUTID,\t\t\t--出库保管者ID\r\n E.FSRCSTOCKID,\t\t\t\t--出库仓库ID\r\n E.FSRCSTOCKLOCID,\t\t--出库仓位\r\n E.FSRCSTOCKSTATUSID,\t--出库库存状态\r\n E.FAUXPROPID,\t\t--出库辅助属性\r\n E.FLOT,\t\t\t\t\t\t--出库批号\r\n E.FPRODUCEDATE,\t\t--出库生产日期\r\n E.FEXPIRYDATE\t\t--出库有效期至\r\n FROM T_STK_STKTRANSFERIN T\r\n INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE E.FBUSINESSDATE >= @MinDate AND FOBJECTTYPEID='STK_TRANSFERIN' \r\n AND FStockInFlag='1'\r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FDESTSTOCKID", "SKD"), GetStockPreJoinSql("E", "FSRCSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : string.Format(" AND T.FSTOCKORGID IN ({0}) OR T.FSTOCKOUTORGID IN ({0})", _stkOrgIdCollect), GetPreFilter("", "M.FNUMBER", "", "E.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("E", "FBUSINESSDATE")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_StatusConvert' AS FFormId,\t--单据类型(FormId)\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FCONVERTQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n --\r\n T.FStockOrgId,\t\t\t\t\t--出库库存组织ID\r\n OE.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n OE.FOWNERID,\t\t\t\t\t\t--货主ID\r\n OE.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n OE.FKEEPERID,\t\t\t\t\t--保管者ID\r\n OE.FSTOCKID,\t\t\t\t\t--仓库ID\r\n OE.FSTOCKLOCID,\t\t\t\t--仓位\r\n OE.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n OE.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n OE.FLOT,\t\t\t\t\t\t\t--批号\r\n OE.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n OE.FEXPIRYDATE\t\t\t\t\t--有效期至\r\n FROM T_STK_StatusConvert T\r\n INNER JOIN T_STK_StatusConvertEntry E ON T.FID=E.FID\r\n INNER JOIN T_STK_StatusConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("E", "FBUSINESSDATE")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_StockConvert' AS FFormId,\t--单据类型(FormId)\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FCONVERTQTY,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n --\r\n T.FStockOrgId,\t\t\t\t\t--出库库存组织ID\r\n OE.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n OE.FOWNERID,\t\t\t\t\t\t--货主ID\r\n OE.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n OE.FKEEPERID,\t\t\t\t\t--保管者ID\r\n OE.FSTOCKID,\t\t\t\t\t--仓库ID\r\n OE.FSTOCKLOCID,\t\t\t\t--仓位\r\n OE.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n OE.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n OE.FLOT,\t\t\t\t\t\t\t--批号\r\n OE.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n OE.FEXPIRYDATE\t\t\t\t\t--有效期至\r\n FROM T_STK_StockConvert T\r\n INNER JOIN T_STK_StockConvertEntry E ON T.FID=E.FID\r\n INNER JOIN T_STK_StockConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("E", "FBUSINESSDATE")).AppendLine();
stringBuilder.AppendFormat("UNION ALL\r\n SELECT \r\n 'STK_LOTADJUST' AS FFormId,\t--单据类型(FormId)\r\n E.FBUSINESSDATE AS FBillDate,\t\t\t--单据体入库日期\r\n E.FMATERIALID,\t\t\t\t\t--物料ID\r\n T.FStockOrgId,\t\t\t\t\t--库存组织ID\r\n E.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n E.FOWNERID,\t\t\t\t\t\t--货主ID\r\n E.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n E.FKEEPERID,\t\t\t\t\t--保管者ID\r\n E.FSTOCKID,\t\t\t\t\t--仓库ID\r\n E.FSTOCKLOCID,\t\t\t\t--仓位\r\n E.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n E.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n E.FLOT,\t\t\t\t\t\t\t--批号\r\n E.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n E.FEXPIRYDATE,\t\t\t\t\t--有效期至\r\n E.FBOMID,\t\t\t\t\t\t--BOMID\r\n E.FMTONO AS FMTONO, --计划跟踪号\r\n E.FPROJECTNO AS FPROJECTNO,\r\n E.FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n E.FBASEQTY,\t\t\t\t\t\t--基本单位数量\r\n E.FUNITID,\r\n E.FQty,\r\n E.FSECUNITID AS FSECUNITID,\t\t--辅助单位\r\n E.FSECQTY AS FSECQTY,\t\t\t--辅助单位数量\r\n E.FPRICE AS FPrice,\t\t\t\t--基本单位单价\r\n E.FAMOUNT AS FAMOUNT,\t\t\t--金额\r\n T.FBaseCurrID,\r\n 1 AS FQTYADDOPTION,\t\t\t\t--更新库存方向\r\n --\r\n T.FStockOrgId,\t\t\t\t\t--出库库存组织ID\r\n OE.FOWNERTYPEID,\t\t\t\t\t--货主类型ID\r\n OE.FOWNERID,\t\t\t\t\t\t--货主ID\r\n OE.FKEEPERTYPEID,\t\t\t\t--保管者类别ID\r\n OE.FKEEPERID,\t\t\t\t\t--保管者ID\r\n OE.FSTOCKID,\t\t\t\t\t--仓库ID\r\n OE.FSTOCKLOCID,\t\t\t\t--仓位\r\n OE.FSTOCKSTATUSID,\t\t\t\t--库存状态\r\n OE.FAUXPROPID,\t\t\t\t\t--辅助属性\r\n OE.FLOT,\t\t\t\t\t\t\t--批号\r\n OE.FPRODUCEDATE,\t\t\t\t\t--生产日期\r\n OE.FEXPIRYDATE\t\t\t\t\t--有效期至\r\n FROM T_STK_LOTADJUST T\r\n INNER JOIN T_STK_LOTADJUSTENTRY E ON T.FID=E.FID\r\n INNER JOIN T_STK_LOTADJUSTENTRY OE ON E.FCONVERTENTRYID=OE.FENTRYID\r\n {0}\r\n {1}\r\n {2}\r\n WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B' \r\n {3}\r\n {4}\r\n {5}\r\n {6}\r\n {7}\r\n ", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SKD"), GetStockPreJoinSql("OE", "FSTOCKID", "SKS"), string.IsNullOrWhiteSpace(_stkOrgIdCollect) ? "" : $" AND T.FSTOCKORGID IN ({_stkOrgIdCollect}) ", GetPreFilter("", "M.FNUMBER", "", ""), GetConvertLotTextFilter("E.FLOT_TEXT", "OE.FLOT_TEXT"), GetTransStockFilter("SKD.FNUMBER", "SKS.FNUMBER"), GetMaxDateFilter("E", "FBUSINESSDATE")).AppendLine();
string strSQL = $"INSERT INTO {_tmpConvertStockBillTb}\r\n SELECT \r\n FFormId ,---单据类型(FormId)\r\n FBillDate ,\t\t\t\t--单据日期\r\n FMATERIALID ,\t\t--物料ID\r\n FSTOCKORGID ,\t\t--库存组织ID\r\n FOWNERTYPEID ,\t\t--货主类型ID\r\n FOWNERID ,\t\t\t\t--货主ID\r\n FKEEPERTYPEID ,\t--保管者类别ID\r\n FKEEPERID ,\t\t\t--保管者ID\r\n FSTOCKID ,\t\t\t\t--仓库ID\r\n FSTOCKLOC ,\t\t--仓位\r\n FSTOCKSTATUSID ,\t--库存状态\r\n FAuxPropId ,\t\t--辅助属性\r\n FLOTID ,\t\t\t\t\t\t--批号\r\n FPRODUCEDATE ,\t\t--生产日期\r\n FEXPIRYDATE ,\t\t--有效期至\r\n FBOMID ,\t\t\t\t\t--BOMID\r\n FMTONO , --计划跟踪号\r\n FPROJECTNO,\r\n FBASEUNITID ,\t\t--基本单位ID\r\n FBASEQTY ,\t\t\t--基本单位数量\r\n FUNITID ,\t\t\t\t--库存单位\r\n FQTY ,\t\t\t\t\t--库存单位数量\r\n FSECUNITID ,\t\t\t--辅助单位\r\n FSECQTY ,\t\t\t--辅助单位数量\r\n FPrice ,\t\t\t\t--基本单位单价\r\n FAMOUNT ,\t\t\t\t\t\t\t--金额\r\n FLOCALCURRID ,\t\t\t\t\t\t--本位币\r\n FQTYADDOPTION ,\t\t\t\t\t--更新库存方向\r\n --调出方的数据\r\n FOutSTOCKORGID ,\t\t--库存组织ID\r\n FOutOWNERTYPEID ,\t\t--货主类型ID\r\n FOutOWNERID ,\t\t\t\t--货主ID\r\n FOutKEEPERTYPEID ,\t--保管者类别ID\r\n FOutKEEPERID ,\t\t\t--保管者ID\r\n FOutSTOCKID ,\t\t\t\t--仓库ID\r\n FOutSTOCKLOC ,\t\t--仓位\r\n FOutSTOCKSTATUSID ,\t--库存状态\r\n FOutAuxPropId ,\t\t--辅助属性\r\n FOutLOTID ,\t\t\t\t\t\t--批号\r\n FOutPRODUCEDATE ,\t\t--生产日期\r\n FOutEXPIRYDATE\r\n FROM ({stringBuilder.ToString()}) AS TB \r\n ";
List<SqlParam> list = new List<SqlParam>();
list.Add(new SqlParam("@MinDate", DbType.DateTime, minDate));
if (historyStockQuery)
{
list.Add(new SqlParam("@MaxDate", DbType.DateTime, queryDate));
}
DBUtils.Execute(_ctx, strSQL, list);
CreateConvertStockBillTbIndex();
}
private void AllotQtyToBillData(DateTime minDate)
{
List<SqlObject> list = new List<SqlObject>();
for (int i = 0; i < 2; i++)
{
string sql = string.Format("INSERT INTO {0} \r\n SELECT -1 AS FGUID,\r\n T1.FFormId,---单据类型(FormId)\r\n T1.FBillDate ,\t\t\t\t--单据日期(调拨转换类单据2.0已加入库日期,可以在单据中直接取)\r\n T1.FMATERIALID ,\t\t--物料ID\r\n T1.FSTOCKORGID ,\t\t--库存组织ID\r\n T1.FOWNERTYPEID ,\t\t--货主类型ID\r\n T1.FOWNERID ,\t\t\t\t--货主ID\r\n T1.FKEEPERTYPEID ,\t--保管者类别ID\r\n T1.FKEEPERID ,\t\t\t--保管者ID\r\n T1.FSTOCKID ,\t\t\t\t--仓库ID\r\n T1.FSTOCKLOC ,\t\t--仓位\r\n T1.FSTOCKSTATUSID ,\t--库存状态\r\n T1.FAuxPropId ,\t\t--辅助属性\r\n T1.FLOTID ,\t\t\t\t\t\t--批号\r\n T1.FPRODUCEDATE ,\t\t--生产日期\r\n T1.FEXPIRYDATE ,\t\t--有效期至\r\n T1.FBOMID ,\t\t\t\t\t--BOMID\r\n T1.FMTONO, --计划跟踪号\r\n T1.FPROJECTNO, --项目编号\r\n T1.FBASEUNITID ,\t\t--基本单位ID\r\n T1.FBASEQTY ,\t\t\t--基本单位数量\r\n T1.FUNITID ,\t\t\t\t--库存单位\r\n T1.FQTY ,\t\t\t\t\t--库存单位数量\r\n T1.FSECUNITID ,\t\t\t--辅助单位\r\n T1.FSECQTY ,\t\t\t--辅助单位数量\r\n T1.FPrice ,\t\t\t\t--基本单位单价\r\n T1.FAMOUNT,\t\t\t\t\t\t\t--金额\r\n T1.FLOCALCURRID ,\t\t\t\t\t\t--本位币\r\n T1.FQTYADDOPTION \t\t\t\t\t--更新库存方向\r\n FROM {1} T1\r\n LEFT JOIN {0} T2 \r\n ON T1.FMATERIALID=T2.FMATERIALID\r\n AND T1.FOutSTOCKORGID=T2.FSTOCKORGID\r\n AND T1.FOutOWNERTYPEID=T2.FOWNERTYPEID\r\n AND T1.FOutOWNERID=T2.FOWNERID\r\n AND T1.FOutKEEPERTYPEID=T2.FKEEPERTYPEID\r\n AND T1.FOutKEEPERID=T2.FKEEPERID\r\n AND T1.FOutSTOCKID=T2.FSTOCKID\r\n AND T1.FOutSTOCKLOC=T2.FSTOCKLOC\r\n AND T1.FOutSTOCKSTATUSID=T2.FSTOCKSTATUSID\r\n AND T1.FOutAuxPropId=T2.FAuxPropId\r\n AND T1.FOutLOTID=T2.FLOTID\r\n AND (T1.FOutPRODUCEDATE=T2.FPRODUCEDATE OR (T1.FOutPRODUCEDATE IS NULL AND T2.FPRODUCEDATE IS NULL))\r\n AND (T1.FOutEXPIRYDATE=T2.FEXPIRYDATE OR (T1.FOutEXPIRYDATE IS NULL AND T2.FEXPIRYDATE IS NULL))\r\n WHERE T2.FBillDate >= @MinDate {2}\r\n ORDER BY T2.FBillDate DESC\r\n ", _tmpStockBillTb, _tmpConvertStockBillTb, (i == 0) ? " AND T1.FFormId='STK_TRANSFEROUT'" : " AND T1.FFormId<>'STK_TRANSFEROUT'");
list.Add(new SqlObject(sql, new SqlParam("@MinDate", KDDbType.DateTime, minDate)));
}
DBUtils.ExecuteBatch(_ctx, list);
}
private void CreateQcpTableData()
{
string empty = string.Empty;
if (_priceSource == 3 || _priceSource == 5)
{
empty = "0";
}
else
{
if (_priceSource != 4)
{
return;
}
empty = "1";
}
DynamicObjectCollection stkOrgAcctPeriod = GetStkOrgAcctPeriod();
if (_priceSource == 5 && stkOrgAcctPeriod != null && stkOrgAcctPeriod.Count() > 0)
{
int year = Convert.ToInt32(stkOrgAcctPeriod[0]["FYEAR"]);
int period = Convert.ToInt32(stkOrgAcctPeriod[0]["FPERIOD"]);
List<long> acctPolicyIds = stkOrgAcctPeriod.Select((DynamicObject m) => Convert.ToInt64(m["FACCTPOLICYID"])).Distinct().ToList();
DynamicObjectCollection nextAcctPeriod = GetNextAcctPeriod(acctPolicyIds, year, period);
foreach (DynamicObject item in stkOrgAcctPeriod)
{
Func<DynamicObject, bool> predicate = (DynamicObject m) => m["FACCTPOLICYID"].ToString().Trim() == item["FACCTPOLICYID"].ToString().Trim();
DynamicObject dynamicObject = nextAcctPeriod.Where(predicate).FirstOrDefault();
if (dynamicObject != null)
{
item["FYEAR"] = dynamicObject["FYEAR"].ToString();
item["FPERIOD"] = dynamicObject["FPERIOD"].ToString();
}
}
}
string empty2 = string.Empty;
StringBuilder stringBuilder = new StringBuilder();
List<string> list = new List<string>();
list.Add("FAMOUNT");
list.Add("FQTY");
list.Add("FDIMEENTRYID");
list.Add("FID");
list.Add("FEndInitKey");
bool value = empty == "1";
string targetSqlString = FINSplitTableCommon.GetTargetSqlString(base.Context, "T_HS_INIVBALANCE", stkOrgAcctPeriod, value, list);
string text = "";
if (!FINSplitTableCommon.EnableSplitTable(base.Context))
{
text = FINSplitTableCommon.GetTargetSqlString(base.Context, "T_HS_INIVBALANCE_H", stkOrgAcctPeriod, value, list);
}
empty2 = $"INSERT INTO {_tmpQcpTable}(FSTOCKORGID,FMATERIALID,FCARGOOWNERTYPE,FCARGOOWNERID,FSTOCKID,\r\n FSTOCKLOCID,FSTOCKSTATUSID,FAUXPROPID,FBOMID,FLotID,FAMOUNT,FQTY,FPRICEDIGITS,FAMOUNTDIGITS,FMTONO)";
stringBuilder.AppendFormat(" SELECT\r\n S.FSTOCKORGID,\t\t\t\t\t\t--库存组织\r\n S.FMATERIALID,\t\t\t\t\t\t--物料编码\r\n S.FCARGOOWNERTYPE,\t\t\t\t--货主类别\r\n S.FCARGOOWNERID,\t\t\t\t\t--货主\r\n S.FSTOCKID,\t\t\t\t\t\t\t--仓库\r\n S.FSTOCKLOCID,\t\t\t\t\t\t--仓位\r\n S.FSTOCKSTATUSID,\t\t\t\t\t\t--库存状态\r\n S.FAUXPROPID,\t\t\t\t\t\t--辅助属性\r\n S.FBOMID,\t\t\t\t\t\t\t--bomID\r\n S.FLOT AS FLotID,\t\t\t\t\t\t\t\t--批号\r\n I.FAMOUNT,\r\n I.FQTY ,\r\n 2 AS FPRICEDIGITS,\r\n 2 AS FAMOUNTDIGITS,\r\n S.FMTONO\r\n FROM {0} I\r\n INNER JOIN T_HS_InivStockDimension S ON I.FDIMEENTRYID=S.FENTRYID\r\n INNER JOIN T_HS_OUTACCTG THO ON I.FID=THO.FID\r\n INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID=THO.FDIMENSIONID\r\n WHERE I.FEndInitKey='{1}' ", targetSqlString, empty);
if (stkOrgAcctPeriod != null && stkOrgAcctPeriod.Count() > 0)
{
stringBuilder.AppendLine(" AND (");
int num = 1;
foreach (DynamicObject item2 in stkOrgAcctPeriod)
{
if (num > 1)
{
stringBuilder.Append(" OR ");
}
stringBuilder.AppendLine(string.Format(" (TCH.FACCTSYSTEMID={0} AND TCH.FACCTPOLICYID = {1} AND THO.FYEAR={2} \r\nAND THO.FPERIOD={3} AND S.FSTOCKORGID = {4} AND EXISTS (SELECT 1 FROM {5} TP WHERE TP.FMATERIALID = S.FMATERIALID AND TP.FSTOCKORGID = {4})) ", item2["FACCTSYSTEMID"].ToString(), item2["FACCTPOLICYID"].ToString(), item2["FYEAR"].ToString(), item2["FPERIOD"].ToString(), item2["FSTOCKORGID"].ToString(), _tmpInvTable));
num++;
}
stringBuilder.AppendLine(" ) ");
}
if (!string.IsNullOrWhiteSpace(text))
{
stringBuilder.AppendLine(" UNION ALL " + stringBuilder.ToString().Replace(targetSqlString, text));
}
empty2 += stringBuilder.ToString();
DBUtils.Execute(_ctx, empty2);
UpdatePriceDigits();
CreateQcTbIndex();
}
private void CreateQcpTableDataNew(string fields)
{
if (_stockOrgIds == null || _stockOrgIds.Count < 1)
{
return;
}
bool isEnd;
if (_priceSource == 3 || _priceSource == 5)
{
isEnd = false;
}
else
{
if (_priceSource != 4)
{
return;
}
isEnd = true;
}
DynamicObjectCollection stkOrgAcctPeriod = GetStkOrgAcctPeriod();
string text = RptHelper.CreateTmpTableName(base.Context, tbNameList);
int traceHSInivBalDataTable = RptCommon.GetTraceHSInivBalDataTable(base.Context, _stockOrgIds, stkOrgAcctPeriod, _tmpInvTable, "FMATERIALID", isEnd, _trackPeriods, text);
string strSQL = string.Format("CREATE INDEX IX{0} ON {1}(FACCTSYSTEMID,FACCTPOLICYID,FSTOCKORGID,FYEAR,FPERIOD)", text.Replace("TMP", ""), text);
DBUtils.Execute(base.Context, strSQL);
List<string> list = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();
list.Add("TD.FSTOCKORGID");
list.Add("TD.FMATERIALID");
list2.Add("TD.FSTOCKORGID");
list2.Add("TD.FMATERIALID");
list3.Add("TD.FSTOCKORGID = TM.FSTOCKORGID ");
list3.Add("TD.FMATERIALID = TM.FMATERIALID ");
if (fields.Contains("FOWNERTYPEID") && fields.Contains("FOWNERID"))
{
list.Add("TD.FCARGOOWNERTYPE");
list.Add("TD.FCARGOOWNERID");
list2.Add("TD.FCARGOOWNERTYPE");
list2.Add("TD.FCARGOOWNERID");
list3.Add("TD.FCARGOOWNERTYPE = TM.FCARGOOWNERTYPE ");
list3.Add("TD.FCARGOOWNERID = TM.FCARGOOWNERID ");
}
if (IsHsStockFields)
{
if (fields.Contains("FSTOCKID") && HsStockFields.Exists((string m) => m == "FSTOCKID"))
{
list.Add("TD.FSTOCKID");
list2.Add("TD.FSTOCKID");
list3.Add("TD.FSTOCKID = TM.FSTOCKID ");
}
if (fields.Contains("FLOTNO") && HsStockFields.Exists((string m) => m == "FLOTNO"))
{
list.Add("TD.FLOTID");
list2.Add("TD.FLOTID");
list3.Add("TD.FLOTID = TM.FLOTID ");
}
if (fields.Contains("FSTOCKLOCID") && HsStockFields.Exists((string m) => m == "FSTOCKLOCID"))
{
list.Add("TD.FSTOCKLOCID");
list2.Add("TD.FSTOCKLOCID");
list3.Add("TD.FSTOCKLOCID = TM.FSTOCKLOCID ");
}
if (fields.Contains("FAUXPROPID") && HsStockFields.Exists((string m) => m == "FAUXPROPID"))
{
list.Add("TD.FAUXPROPID");
list2.Add("TD.FAUXPROPID");
list3.Add("TD.FAUXPROPID = TM.FAUXPROPID ");
}
if (fields.Contains("FBOMID") && HsStockFields.Exists((string m) => m == "FBOMID"))
{
list.Add("TD.FBOMID");
list2.Add("TD.FBOMID");
list3.Add("TD.FBOMID = TM.FBOMID ");
}
if (fields.Contains("FSTOCKSTATUSID") && HsStockFields.Exists((string m) => m == "FSTOCKSTATUSID"))
{
list.Add("TD.FSTOCKSTATUSID");
list2.Add("TD.FSTOCKSTATUSID");
list3.Add("TD.FSTOCKSTATUSID = TM.FSTOCKSTATUSID ");
}
if (fields.Contains("FMTONO") && HsStockFields.Exists((string m) => m == "FMTONO"))
{
list.Add("TD.FMTONO");
list2.Add("TD.FMTONO");
list3.Add("TD.FMTONO = TM.FMTONO ");
}
}
string text2 = ((_stockOrgIds.Count == 1) ? $" S.FSTOCKORGID = {_stockOrgIds[0]} " : ((_stockOrgIds.Count >= 50) ? $" S.FSTOCKORGID IN (SELECT /*+ cardinality(b {_stockOrgIds.Count})*/ FID FROM table(fn_StrSplit(@OrgId, ',',1)) b) " : string.Format(" S.FSTOCKORGID IN ({0}) ", string.Join(",", _stkOrgIdCollect))));
if (base.Context.DatabaseType == DatabaseType.MS_SQL_Server)
{
strSQL = "";
List<SqlParam> list4 = new List<SqlParam>();
if (_stockOrgIds.Count >= 50)
{
text2 = string.Format(" TOAD.FSUBORGID IN (SELECT b.FID FROM @FID_udt1 b) ", _stockOrgIds.Count);
list4.Add(new SqlParam("@FID", KDDbType.udt_inttable, _stockOrgIds.Distinct().ToArray()));
}
else
{
text2 = text2.Replace("S.FSTOCKORGID", "TOAD.FSUBORGID");
}
strSQL = string.Format("/*dialect*/ \r\nWITH TD AS (SELECT {0} T.* FROM {1} T \r\nINNER JOIN (SELECT TBK.FACCTSYSTEMID,TBK.FACCTPOLICYID,AP.FYEAR,AP.FPERIOD,TBK.FSTOCKORGID \r\n FROM T_BD_ACCOUNTCALENDAR AC INNER JOIN T_BD_ACCOUNTPERIOD AP ON AC.FID=AP.FID INNER JOIN T_FA_ACCTPOLICY PL ON PL.FACCTCALENDARID = AC.FID\r\n INNER JOIN (SELECT TOAE.FACCTSYSTEMID,TOAE.FDEFACCTPOLICY AS FACCTPOLICYID,TOAD.FSUBORGID AS FSTOCKORGID\r\n\t\t\t FROM T_ORG_ACCTSYSENTRY TOAE INNER JOIN T_ORG_ACCOUNTSYSTEM TOA ON TOAE.FACCTSYSTEMID=TOA.FACCTSYSTEMID \r\n\t\t\t LEFT JOIN T_ORG_ACCTSYSDETAIL TOAD ON TOAE.FENTRYID=TOAD.FENTRYID \r\n\t\t\t WHERE {2} AND TOA.FISDEFAULT = '1' AND TOA.FFORBIDORID = 0\r\n ) TBK ON TBK.FACCTPOLICYID=PL.FACCTPOLICYID WHERE AP.FPERIODSTARTDATE<= {3} AND AP.FPERIODENDDATE>= {3}) TP \r\n ON T.FACCTSYSTEMID= TP.FACCTSYSTEMID AND T.FACCTPOLICYID = TP.FACCTPOLICYID AND T.FSTOCKORGID = TP.FSTOCKORGID\r\n AND (T.FYEAR < TP.FYEAR OR (T.FYEAR = TP.FYEAR AND T.FPERIOD <= TP.FPERIOD)))\r\nINSERT INTO {4}({5},FAMOUNT,FQTY,FPRICEDIGITS,FAMOUNTDIGITS)\r\nSELECT {6},TD.FAMOUNT,TD.FQTY,2 AS FPRICEDIGITS,2 AS FAMOUNTDIGITS FROM TD \r\n INNER JOIN (SELECT MAX(TD.FSTRPERIOD) FSTRPERIOD,{6} \r\n FROM TD GROUP BY {7}) TM\r\nON TD.FSTRPERIOD = TM.FSTRPERIOD AND {8} ", "", text, text2, queryDate.ToKSQlFormat(), _tmpQcpTable, string.Join(",", list).Replace("TD.", ""), string.Join(",", list), string.Join(",", list2), string.Join(" AND ", list3));
DBUtils.Execute(base.Context, strSQL, list4);
}
else
{
strSQL = "";
List<SqlParam> list4 = new List<SqlParam>();
if (_stockOrgIds.Count >= 50)
{
text2 = $" TOAD.FSUBORGID IN (SELECT /*+ cardinality(b {_stockOrgIds.Count})*/ FID FROM table(fn_StrSplit(@OrgId, ',',1)) b) ";
list4.Add(new SqlParam("@OrgId", KDDbType.udt_inttable, _stockOrgIds.Distinct().ToArray()));
}
else
{
text2 = text2.Replace("S.FSTOCKORGID", "TOAD.FSUBORGID");
}
string text3 = RptHelper.CreateTmpTableName(base.Context, tbNameList);
strSQL = $"CREATE TABLE {text3} (FSTRPERIOD VARCHAR(10),\r\nFSTOCKORGID INT NOT NULL DEFAULT(0),\r\nFMATERIALID INT,\r\nFCARGOOWNERTYPE VARCHAR(36),\r\nFCARGOOWNERID INT,\r\nFSTOCKID INT,\r\nFLOTID INT,\r\nFSTOCKLOCID INT,\r\nFAUXPROPID INT,\r\nFBOMID INT,\r\nFSTOCKSTATUSID INT,\r\nFMTONO NVARCHAR(255) NULL DEFAULT(' '),\r\nFAMOUNT DECIMAL(23,10),\r\nFQTY DECIMAL(23,10),\r\nFACCTSYSTEMID INT NOT NULL DEFAULT(0),\r\nFACCTPOLICYID INT NOT NULL DEFAULT(0),\r\nFYEAR INT NOT NULL DEFAULT(0),\r\nFPERIOD INT NOT NULL DEFAULT(0)\r\n)";
DBUtils.Execute(base.Context, strSQL);
strSQL = string.Format("INSERT INTO {4} (FSTRPERIOD,FSTOCKORGID,FMATERIALID,FCARGOOWNERTYPE,FCARGOOWNERID,FSTOCKID,FAMOUNT,FQTY,FACCTSYSTEMID,FACCTPOLICYID,FYEAR,FPERIOD,\r\n FLOTID,FSTOCKLOCID,FAUXPROPID,FBOMID,FSTOCKSTATUSID,FMTONO)\r\nSELECT /*+ cardinality(T {0})*/ T.FSTRPERIOD,T.FSTOCKORGID,T.FMATERIALID,T.FCARGOOWNERTYPE,T.FCARGOOWNERID,T.FSTOCKID,T.FAMOUNT,T.FQTY,T.FACCTSYSTEMID,T.FACCTPOLICYID,T.FYEAR,T.FPERIOD,\r\n T.FLOTID,T.FSTOCKLOCID,T.FAUXPROPID,T.FBOMID,T.FSTOCKSTATUSID,T.FMTONO FROM {1} T INNER JOIN (SELECT TBK.FACCTSYSTEMID,TBK.FACCTPOLICYID,AP.FYEAR,AP.FPERIOD,TBK.FSTOCKORGID \r\n FROM T_BD_ACCOUNTCALENDAR AC INNER JOIN T_BD_ACCOUNTPERIOD AP ON AC.FID=AP.FID INNER JOIN T_FA_ACCTPOLICY PL ON PL.FACCTCALENDARID = AC.FID\r\n INNER JOIN (SELECT TOAE.FACCTSYSTEMID,TOAE.FDEFACCTPOLICY AS FACCTPOLICYID,TOAD.FSUBORGID AS FSTOCKORGID\r\n\t\t\t FROM T_ORG_ACCTSYSENTRY TOAE INNER JOIN T_ORG_ACCOUNTSYSTEM TOA ON TOAE.FACCTSYSTEMID=TOA.FACCTSYSTEMID \r\n\t\t\t LEFT JOIN T_ORG_ACCTSYSDETAIL TOAD ON TOAE.FENTRYID=TOAD.FENTRYID \r\n\t\t\t WHERE {2} AND TOA.FISDEFAULT = '1' AND TOA.FFORBIDORID = 0\r\n ) TBK ON TBK.FACCTPOLICYID=PL.FACCTPOLICYID WHERE AP.FPERIODSTARTDATE <= {3} AND AP.FPERIODENDDATE >= {3}) TP \r\n ON T.FACCTSYSTEMID= TP.FACCTSYSTEMID AND T.FACCTPOLICYID = TP.FACCTPOLICYID AND T.FSTOCKORGID = TP.FSTOCKORGID\r\n AND (T.FYEAR < TP.FYEAR OR (T.FYEAR = TP.FYEAR AND T.FPERIOD <= TP.FPERIOD))", traceHSInivBalDataTable, text, text2, queryDate.ToKSQlFormat(), text3);
traceHSInivBalDataTable = DBUtils.Execute(base.Context, strSQL, list4);
strSQL = string.Format("CREATE INDEX IX{0} ON {1}(FMATERIALID,FSTRPERIOD,FSTOCKORGID,FCARGOOWNERTYPE,FCARGOOWNERID)", text3.Replace("TMP", ""), text3);
DBUtils.Execute(base.Context, strSQL);
strSQL = string.Format("INSERT INTO {0}({3},FAMOUNT,FQTY,FPRICEDIGITS,FAMOUNTDIGITS)\r\nSELECT /*+ cardinality(TD {1})*/ {4},TD.FAMOUNT,TD.FQTY,2 AS FPRICEDIGITS,2 AS FAMOUNTDIGITS \r\nFROM {2} TD INNER JOIN (SELECT MAX(TD1.FSTRPERIOD) FSTRPERIOD,{5} \r\n FROM {2} TD1 GROUP BY {6}) TM\r\nON TD.FSTRPERIOD = TM.FSTRPERIOD AND {7}", _tmpQcpTable, traceHSInivBalDataTable, text3, string.Join(",", list).Replace("TD.", ""), string.Join(",", list), string.Join(",", list).Replace("TD.", "TD1."), string.Join(",", list2).Replace("TD.", "TD1."), string.Join(" AND ", list3));
DBUtils.Execute(base.Context, strSQL);
}
UpdatePriceDigits();
CreateQcTbIndex();
}
private string UpdatePriceDigits()
{
string defaultRateTypeAndCurrDataBySubOrgIds = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IFINServiceForCommon>(base.Context).GetDefaultRateTypeAndCurrDataBySubOrgIds(base.Context, _stkOrgIdCollect, 0L);
string text = $"MERGE INTO {_tmpQcpTable} IT \r\nUSING (SELECT T1.FSETTLEORGID,T2.FPRICEDIGITS,T2.FAMOUNTDIGITS \r\n FROM {defaultRateTypeAndCurrDataBySubOrgIds} T1 INNER JOIN T_BD_CURRENCY T2 ON T1.FLOCALCURRENCYID= T2.FCURRENCYID ) IT2 \r\nON (IT.FSTOCKORGID = IT2.FSETTLEORGID)\r\nWHEN MATCHED THEN \r\nUPDATE SET IT.FPRICEDIGITS = IT2.FPRICEDIGITS,IT.FAMOUNTDIGITS=IT2.FAMOUNTDIGITS";
DBUtils.Execute(base.Context, text);
List<string> list = new List<string>();
list.Add(defaultRateTypeAndCurrDataBySubOrgIds);
RptHelper.DropTmpTable(base.Context, list);
return text;
}
private DynamicObjectCollection GetStkOrgAcctPeriod()
{
DynamicObjectCollection dynamicObjectCollection = null;
string strSQL = string.Format("SELECT TBK.FACCTSYSTEMID,TBK.FMAINORGID, TBK.FACCTPOLICYID,\r\nAP.FYEAR,AP.FPERIOD,TBK.FSTOCKORGID, AC.FID AS FCALENDARID \r\n FROM T_BD_ACCOUNTCALENDAR AC \r\n INNER JOIN T_BD_ACCOUNTPERIOD AP ON AC.FID=AP.FID \r\n INNER JOIN T_FA_ACCTPOLICY PL ON PL.FACCTCALENDARID = AC.FID\r\n INNER JOIN \r\n ( \r\n SELECT TOAE.FACCTSYSTEMID,TOAE.FMAINORGID,TOAE.FDEFACCTPOLICY AS FACCTPOLICYID,TOAD.FSUBORGID AS FSTOCKORGID\r\n FROM T_ORG_ACCTSYSENTRY TOAE \r\n INNER JOIN T_ORG_ACCOUNTSYSTEM TOA ON TOAE.FACCTSYSTEMID=TOA.FACCTSYSTEMID \r\n LEFT JOIN T_ORG_ACCTSYSDETAIL TOAD ON TOAE.FENTRYID=TOAD.FENTRYID \r\n WHERE TOA.FISDEFAULT = '1' AND TOAD.FSUBORGID in ( {0} ) AND TOA.FFORBIDORID = 0\r\n ) TBK ON TBK.FACCTPOLICYID=PL.FACCTPOLICYID\r\n AND AP.FPERIODSTARTDATE<={1} AND AP.FPERIODENDDATE>={1} ", _stkOrgIdCollect, queryDate.ToKSQlFormat());
return DBUtils.ExecuteDynamicObject(base.Context, strSQL, null, null, CommandType.Text);
}
private DynamicObjectCollection GetNextAcctPeriod(List<long> acctPolicyIds, int year, int period)
{
string arg = year + ((period > 9) ? period.ToString() : ("0" + period));
string format = "SELECT TB.* FROM (SELECT b.FACCTPOLICYID AS FACCTPOLICYID,a.FYEAR,a.FPERIOD,ROW_NUMBER() OVER(PARTITION BY b.FACCTPOLICYID ORDER BY b.FACCTPOLICYID,CONVERT(VARCHAR(10),a.FYEAR)||(CASE WHEN a.FPERIOD>9 THEN CONVERT(VARCHAR(10),a.FPERIOD) ELSE '0'||CONVERT(VARCHAR(10),a.FPERIOD) END)) ROWINDEX \r\n FROM T_BD_ACCOUNTPERIOD a JOIN T_FA_ACCTPOLICY b ON b.FACCTCALENDARID=a.FID\r\n WHERE b.FACCTPOLICYID IN ({0}) AND CONVERT(VARCHAR(10),a.FYEAR)||(CASE WHEN a.FPERIOD>9 THEN CONVERT(VARCHAR(10),a.FPERIOD) ELSE '0'||CONVERT(VARCHAR(10),a.FPERIOD) END)>'{1}') TB \r\n WHERE TB.ROWINDEX=1";
format = string.Format(format, string.Join(",", acctPolicyIds), arg);
return DBUtils.ExecuteDynamicObject(base.Context, format, null, null, CommandType.Text);
}
private DataTable FillPageDt(string strFlexSql)
{
string empty = string.Empty;
DataTable result = DBUtils.ExecuteDataSet(strSQL: (!isSplitPageByOwner) ? $" \r\n SELECT \r\n DISTINCT FSTOCKORGID,FStockOrgNumber,FStockOrgName\r\n ,0 AS FORDERBY\r\n FROM {_tmpInvTable} TV {strFlexSql}\r\n WHERE {_filterStr}\r\n ORDER BY FSTOCKORGID,FORDERBY " : $" \r\n SELECT \r\n DISTINCT FSTOCKORGID,FStockOrgNumber,FStockOrgName,FOWNERTYPEID,FOWNERID,FOwnerNumber,FOwnerName\r\n ,(CASE FOWNERTYPEID WHEN 'BD_Supplier' THEN 100 WHEN 'BD_Customer' THEN 200 ELSE 0 END) AS FORDERBY\r\n FROM {_tmpInvTable} TV {strFlexSql}\r\n WHERE {_filterStr}\r\n ORDER BY FSTOCKORGID,FORDERBY,FOwnerNumber ", ctx: base.Context).Tables[0];
_isBusy = false;
return result;
}
private void FillRptData(IRptParams filter, DateTime minDate, string strFlexSql, string fields)
{
if (!string.IsNullOrWhiteSpace(_tmpRptTable))
{
RptHelper.DropTmpTable(_ctx, _tmpRptTable);
}
_tmpRptTable = RptHelper.CreateTmpTableName(_ctx, tbNameList);
string empty = string.Empty;
empty = string.Format("SELECT FGuid,FSTOCKORGID, --库存组织ID\r\n\t FStockOrgNumber,\t --库存组织编码\r\n\t FStockOrgName,\t\t--库存组织名称\r\n\t FOwnerTypeId,\t--货主类别ID\r\n FOWNERTYPENAME,\r\n\t FOWNERID,\t\t\t\t\t\t--货主ID\r\n\t FOwnerNumber,\t\t--货主编码\r\n\t FOwnerName,\t\t\t--货主名称\r\n FKEEPERTYPEID,\t\t\t\t\t--保管者类型\r\n FKEEPERID,\t\t\t\t\t\t--保管者\r\n FKEEPERNAME, --保管者名称\r\n\t FCATEGORYID,\t\t\t\t\t--存货类别ID\r\n\t FMaterialTypeName,\t--存货类别名称\r\n\t FMATERIALID,\t\t\t\t\t--物料ID\r\n FMaterialNumber,\t\t--物料编码\r\n FMaterialName,\t\t--物料名称\r\n FMaterialModel, --规格型号\r\n FLotID,\t\t\t\t\t--批号主档ID\r\n\t FLotNo,\t\t\t\t--批号\r\n FBOMID, --BOMID\r\n FBOMNumber,\r\n FMTONO,\r\n FPROJECTNO,\r\n\t TV.FAuxPropId,\t\t--辅助属性(注意)\r\n ' ' AS FAUXPROP,\r\n TV.FAuxPropId AS FAuxPropIdR,\t\r\n\t FSTOCKID,\t\t\t\t\t\t--仓库ID\r\n FPRODUCEDATE,--生成日期\r\n FEXPIRYDATE,--生成日期\r\n FErpClsID, --物料属性\r\n FMaterialGroup, --物料分组\r\n FMaterialGroup_FNumber, --物料分组编码\r\n FMaterialGroupName, --物料分组名称\r\n\t FStockNumber,\t\t--仓库编码\r\n\t FStockName,\t\t\t--仓库名称\r\n FSTOCKSTATUSID,\t\t\t\t\t--库存状态\r\n FSTOCKSTATUSNAME, --库存状态名称\r\n\t TV.FStockLocId,\t\t--仓位ID(注意)\r\n FSTOCKLOC, --仓位\r\n TV.FStockLocId AS FStockLocIdR,\t\t\r\n\t FBASEUNITID,\t\t\t\t\t--基本单位ID\r\n\t FBaseUnitName,\t\t--基本单位\r\n\t FUnitID,\t\t--库存单位ID\r\n\t FUnitName,\t\t\t--库存单位\r\n\t FSECUNITID,\t\t\t\t\t\t--辅助单位ID\r\n\t FSecUnitName,\t\t--辅助单位\r\n\t FBASEQTY,\t\t\t\t\t\t--基本数量\r\n\t FQTY,\t\t\t\t\t\t\t--库存数量\r\n\t FSECQTY,\t\t\t\t\t\t--辅助单位数量\r\n FPRECISION, --单位精度\r\n FBASEPRECISION, --基本单位精度\r\n FSECPRECISION, --辅助单位精度\r\n CONVERT(DECIMAL(23,10),0.0) AS FBasePrice\r\n ,CONVERT(DECIMAL(23,10),0.0) AS FPrice\r\n ,CONVERT(DECIMAL(23,10),0.0) AS FSecPrice\r\n ,CONVERT(DECIMAL(23,10),0.0) AS FAmount\r\n ,2 AS FPriceDecimal\r\n ,2 AS FAmountDecimal\r\n ,N'{0}' AS FAGEDAYS\r\n , 99999 AS FAGEDAYSINT\r\n ,FBASEQTY AS FLeftBaseQty\r\n ,FQTY AS FLeftQty\r\n ,FSECQTY AS FLeftSecQty\r\n {1} \r\n INTO {2}\r\n FROM {3} TV {4}\r\n WHERE {5}\r\n ", (_outRange == null) ? "NOTHING" : _outRange, (_intervalStr.Count() > 0) ? ("," + string.Join(",", _intervalStr)) : "", _tmpRptTable, _tmpInvTable, strFlexSql, _filterStr);
DBUtils.Execute(base.Context, empty);
CreateTmpRptTablIndex();
DBUtils.Execute(base.Context, $"UPDATE {_tmpRptTable} SET FBASEQTY = ROUND(FBASEQTY,FBASEPRECISION),FLeftBaseQty = ROUND(FLeftBaseQty,FBASEPRECISION),\r\n FQTY = ROUND(FQTY,FPRECISION),FLeftQty = ROUND(FLeftQty,FPRECISION),\r\n FSECQTY = ROUND(FSECQTY,FSECPRECISION),FLeftSecQty = ROUND(FLeftSecQty,FSECPRECISION)");
if (_priceSource == 3 || _priceSource == 4 || _priceSource == 5)
{
List<string> list = new List<string>();
List<string> list2 = new List<string>();
List<string> list3 = new List<string>();
list.Add("FSTOCKORGID");
list.Add("FMATERIALID");
list2.Add("FSTOCKORGID");
list2.Add("FMATERIALID");
list3.Add("IT2.FSTOCKORGID=IT.FSTOCKORGID ");
list3.Add("IT2.FMATERIALID=IT.FMATERIALID ");
if (fields.Contains("FOWNERTYPEID") && fields.Contains("FOWNERID"))
{
list.Add("FCARGOOWNERTYPE");
list.Add("FCARGOOWNERID");
list2.Add("FCARGOOWNERTYPE");
list2.Add("FCARGOOWNERID");
list3.Add("IT.FOWNERTYPEID = IT2.FCARGOOWNERTYPE ");
list3.Add("IT.FOWNERID = IT2.FCARGOOWNERID ");
}
if (IsHsStockFields)
{
if (fields.Contains("FSTOCKID") && HsStockFields.Exists((string m) => m == "FSTOCKID"))
{
list.Add("FSTOCKID");
list2.Add("FSTOCKID");
list3.Add("IT.FSTOCKID = IT2.FSTOCKID ");
}
if (fields.Contains("FLOTNO") && HsStockFields.Exists((string m) => m == "FLOTNO"))
{
list.Add("FLOTID");
list2.Add("FLOTID");
list3.Add("IT.FLOTID = IT2.FLOTID ");
}
if (fields.Contains("FSTOCKLOCID") && HsStockFields.Exists((string m) => m == "FSTOCKLOCID"))
{
list.Add("FSTOCKLOCID");
list2.Add("FSTOCKLOCID");
list3.Add("IT.FSTOCKLOCID = IT2.FSTOCKLOCID ");
}
if (fields.Contains("FAUXPROPID") && HsStockFields.Exists((string m) => m == "FAUXPROPID"))
{
list.Add("FAUXPROPID");
list2.Add("FAUXPROPID");
list3.Add("IT.FAUXPROPID = IT2.FAUXPROPID ");
}
if (fields.Contains("FBOMID") && HsStockFields.Exists((string m) => m == "FBOMID"))
{
list.Add("FBOMID");
list2.Add("FBOMID");
list3.Add("IT.FBOMID = IT2.FBOMID ");
}
if (fields.Contains("FSTOCKSTATUSID") && HsStockFields.Exists((string m) => m == "FSTOCKSTATUSID"))
{
list.Add("FSTOCKSTATUSID");
list2.Add("FSTOCKSTATUSID");
list3.Add("IT.FSTOCKSTATUSID = IT2.FSTOCKSTATUSID ");
}
if (fields.Contains("FMTONO") && HsStockFields.Exists((string m) => m == "FMTONO"))
{
list.Add("FMTONO");
list2.Add("FMTONO");
list3.Add("IT.FMTONO = IT2.FMTONO ");
}
}
string text = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "DECIMAL" : "NUMBER");
string text2 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "ISNULL" : "NVL");
string text3 = ((base.Context.DatabaseType == DatabaseType.MS_SQL_Server) ? "LEN" : "LENGTH");
string text4 = $" CAST(IT2.FAVGAMOUNT AS {text}(23,10)) ";
string text5 = string.Format("CAST((CASE WHEN IT.FQTY=0 THEN 0 ELSE CAST(IT2.FAVGAMOUNT*IT.FBaseQty AS {0}(23,10))/IT.FQTY END) AS {0}(23,10))", text);
string text6 = string.Format("CAST((CASE WHEN IT.FSecQty=0 THEN 0 ELSE CAST(IT2.FAVGAMOUNT*IT.FBaseQty AS {0}(23,10))/IT.FSecQty END) AS {0}(23,10))", text);
string text7 = $"CAST(IT2.FAVGAMOUNT*IT.FBaseQty AS {text}(23,10))";
empty = string.Format("/*dialect*/ \r\nmerge into {0} IT using (\r\n SELECT T0.*,T1.FPRICEDIGITS, T1.FAMOUNTDIGITS \r\n FROM (SELECT {9} \r\n ,(CASE WHEN SUM(FQTY)=0 THEN 0 \r\n WHEN SUM(FQTY)<0.001 AND ({12}(RTRIM(REPLACE(SUM(FQTY),'0',' ')))-2+{12}(FLOOR(ABS(SUM(FAMOUNT)))))>12 THEN 0 \r\n ELSE CAST(CAST(SUM(FAMOUNT) AS {8}(23,10))/SUM(FQTY) AS {8}(23,10)) END) AS FAVGAMOUNT\r\n FROM {1} WHERE EXISTS (SELECT 1 FROM {0} T3 WHERE T3.FMATERIALID = {1}.FMATERIALID) GROUP BY {10} ) T0 \r\n INNER JOIN (SELECT DISTINCT FMATERIALID,FPRICEDIGITS,FAMOUNTDIGITS FROM {1}) T1 ON T0.FMATERIALID = T1.FMATERIALID\r\n ) IT2\r\nON ({11})\r\nWHEN MATCHED THEN UPDATE SET \r\n IT.FBasePrice = {2}, IT.FPrice = {3}, IT.FSecPrice = {4}, IT.FAmount = {5}, \r\n IT.FPriceDecimal = {6}(IT2.FPRICEDIGITS,IT.FPriceDecimal), IT.FAmountDecimal = {6}(IT2.FAMOUNTDIGITS,IT.FAmountDecimal) {7} ", _tmpRptTable, _tmpQcpTable, text4, text5, text6, text7, text2, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "", text, string.Join(",", list), string.Join(",", list2), string.Join(" AND ", list3), text3);
DBUtils.Execute(base.Context, empty);
if (_qcZeroPriceType == 3)
{
empty = $"SELECT 1 FROM {_tmpRptTable} WHERE FBasePrice = 0 ";
if (DBUtils.ExecuteScalar(base.Context, empty, 0) > 0)
{
MergeNewInPrice(filter, minDate, onlyUpZeroPrice: true);
}
}
else if (_qcZeroPriceType == 4)
{
empty = $"SELECT 1 FROM {_tmpRptTable} WHERE FBasePrice = 0 ";
if (DBUtils.ExecuteScalar(base.Context, empty, 0) > 0)
{
MergeNewOutPrice(filter, minDate, onlyUpZeroPrice: true);
}
}
}
else if (_priceSource == 1)
{
MergeNewInPrice(filter, minDate, onlyUpZeroPrice: false);
}
else
{
MergeNewOutPrice(filter, minDate, onlyUpZeroPrice: false);
}
List<SqlObject> list4 = new List<SqlObject>();
List<SqlParam> paramList = new List<SqlParam>();
list4.Add(new SqlObject($"UPDATE {_tmpRptTable} SET FAMOUNT = ROUND(FAMOUNT, FAmountDecimal) ", new List<SqlParam>()));
if (_curDateIsOne)
{
queryDate = queryDate.AddDays(1.0);
}
using (new SessionScope())
{
string text8 = "";
bool flag = false;
if (_showRange)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (IntervalDayInfo intervalInfo in _intervalInfoList)
{
if (intervalInfo.DownDay > 0 && intervalInfo.UpperDay == 0)
{
empty = $" UPDATE {_tmpRptTable} SET {intervalInfo.BaseQtyKey}=CONVERT(DECIMAL(23,10),FLeftBaseQty),\r\n {intervalInfo.QtyKey}=CONVERT(DECIMAL(23,10),FLeftQty),\r\n {intervalInfo.SecQtyKey}=CONVERT(DECIMAL(23,10),FLeftSecQty),\r\n {intervalInfo.AmountKey}=ROUND(CONVERT(DECIMAL(23,10),FLeftBaseQty*FBasePrice), FAmountDecimal),\r\n FLeftBaseQty=0,FLeftQty=0,FLeftSecQty=0";
list4.Add(new SqlObject(empty, paramList));
}
else
{
string text9 = "";
string text10 = "";
string text11 = "";
if (_ctx.DatabaseType == DatabaseType.MS_SQL_Server)
{
text9 = "ROUND(CONVERT(DECIMAL(23,10),\r\n (CASE\r\n WHEN IT.FLeftQty>IT2.FQTY THEN IT2.FQTY\r\n ELSE IT.FLeftQty\r\n END)*IT.FPrice), FAmountDecimal) ";
text10 = "'" + queryDate.AddDays(-intervalInfo.UpperDay).Date.ToString("yyyy-MM-dd HH:mm:ss") + "'";
text11 = "'" + queryDate.AddDays(-intervalInfo.DownDay + 1).Date.ToString("yyyy-MM-dd HH:mm:ss") + "'";
}
else
{
text9 = "ROUND(CAST(\r\n (CASE\r\n WHEN IT.FLeftQty>IT2.FQTY THEN IT2.FQTY\r\n ELSE IT.FLeftQty\r\n END)*IT.FPrice AS NUMBER(23,10)), FAmountDecimal) ";
text10 = "TO_DATE('" + queryDate.AddDays(-intervalInfo.UpperDay).Date.ToString("yyyy-MM-dd HH:mm:ss") + "','YYYY-MM-DD HH24:MI:SS')";
text11 = "TO_DATE('" + queryDate.AddDays(-intervalInfo.DownDay + 1).Date.ToString("yyyy-MM-dd HH:mm:ss") + "','YYYY-MM-DD HH24:MI:SS')";
}
empty = string.Format("/*dialect*/ \r\nmerge into {0} IT using (SELECT FGUID, SUM(FBaseQTY) AS FBaseQTY, SUM(FQTY) AS FQTY, SUM(FSecQTY) AS FSecQTY\r\n FROM {1} \r\n WHERE (FBILLDATE >={2} AND FBILLDATE <{3})\r\n AND FQTYADDOPTION=1--入库单\r\n GROUP BY FGUID\r\n ) IT2 ON (IT.FGUID = IT2.FGUID)\r\nWHEN MATCHED THEN UPDATE SET \r\n IT.{4} = (CASE WHEN IT.FLeftBaseQty>IT2.FBaseQTY THEN IT2.FBaseQTY ELSE IT.FLeftBaseQty END), \r\n IT.{5} = (CASE WHEN IT.FLeftQty>IT2.FQTY THEN ROUND(IT2.FQTY,IT.FPRECISION) ELSE ROUND(IT.FLeftQty, IT.FPRECISION) END), \r\n IT.{6} = (CASE WHEN IT.FLeftSecQTY>IT2.FSecQTY THEN IT2.FSecQTY ELSE IT.FLeftSecQTY END), \r\n IT.{7} = {8}, \r\n IT.FLeftBaseQty = (CASE WHEN IT.FLeftBaseQty>IT2.FBaseQTY THEN IT.FLeftBaseQty-IT2.FBaseQTY ELSE 0 END), \r\n IT.FLeftQty = (CASE WHEN IT.FLeftQty>IT2.FQTY THEN ROUND(IT.FLeftQty-IT2.FQTY, IT.FPRECISION) ELSE 0 END), \r\n IT.FLeftSecQTY = (CASE WHEN IT.FLeftSecQty>IT2.FSecQTY THEN IT.FLeftSecQty-IT2.FSecQTY ELSE 0 END)\r\n{9} ", _tmpRptTable, _tmpStockBillTb, text10, text11, intervalInfo.BaseQtyKey, intervalInfo.QtyKey, intervalInfo.SecQtyKey, intervalInfo.AmountKey, text9, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "");
paramList = new List<SqlParam>();
list4.Add(new SqlObject(empty, paramList));
}
stringBuilder.AppendFormat("- {0} ", intervalInfo.AmountKey);
}
foreach (IntervalDayInfo intervalInfo2 in _intervalInfoList)
{
empty = string.Format("UPDATE {0} SET {1} = {1} + FAMOUNT {2} WHERE {3} <> 0 AND {4} <> 0 AND FAMOUNT <> {5} ", _tmpRptTable, intervalInfo2.AmountKey, stringBuilder.ToString(), intervalInfo2.QtyKey, intervalInfo2.BaseQtyKey, stringBuilder.ToString(1, stringBuilder.Length - 1).Replace("-", "+"));
list4.Add(new SqlObject(empty, new List<SqlParam>()));
}
}
else
{
text8 = "TM_STK_INVAGERPTBILLSUM";
DataTable dataTable = CreateTargetInfoDt(text8);
empty = $"SELECT FGUID,FAGEDAYS,FAGEDAYSINT,SUM(FQTY) AS FQTY,SUM(FBASEQTY) AS FBASEQTY,SUM(FSECQTY) AS FSECQTY\r\n FROM {_tmpStockBillTb} WHERE (FBILLDATE >=@BegDate AND FBILLDATE<@EndDate)\r\n AND FQTYADDOPTION =1 AND FGUID IN (SELECT FGUID FROM {_tmpInvTable} WHERE FBASEQTY > 0)\r\n GROUP BY FGUID,FAGEDAYS,FAGEDAYSINT order by FGUID,FAGEDAYSINT ASC";
paramList = new List<SqlParam>();
paramList.Add(new SqlParam("@BegDate", KDDbType.Date, minDate));
paramList.Add(new SqlParam("@EndDate", KDDbType.Date, queryDate.AddDays(1.0)));
DynamicObjectCollection dynamicObjectCollection = DBUtils.ExecuteDynamicObject(base.Context, empty, null, null, CommandType.Text, paramList.ToArray());
long num = -1L;
decimal num2 = 0m;
decimal num3 = 0m;
decimal num4 = 0m;
if (dynamicObjectCollection != null && dynamicObjectCollection.Count() > 0)
{
foreach (DynamicObject item in dynamicObjectCollection)
{
if (num == -1 || Convert.ToInt64(item["FGUID"]) != num)
{
num = Convert.ToInt64(item["FGUID"]);
num2 = Convert.ToDecimal(item["FQTY"]);
num3 = Convert.ToDecimal(item["FBASEQTY"]);
num4 = Convert.ToDecimal(item["FSECQTY"]);
}
else
{
num2 += Convert.ToDecimal(item["FQTY"]);
num3 += Convert.ToDecimal(item["FBASEQTY"]);
num4 += Convert.ToDecimal(item["FSECQTY"]);
}
DataRow dataRow = dataTable.NewRow();
dataRow["FGUID"] = Convert.ToInt64(item["FGUID"]);
dataRow["FAGEDAYS"] = Convert.ToString(item["FAGEDAYS"]);
dataRow["FSUMQTY"] = num2;
dataRow["FSUMBASEQTY"] = num3;
dataRow["FSUMSECQTY"] = num4;
dataRow["FQTY"] = Convert.ToDecimal(item["FQTY"]);
dataRow["FBASEQTY"] = Convert.ToDecimal(item["FBASEQTY"]);
dataRow["FSECQTY"] = Convert.ToDecimal(item["FSECQTY"]);
dataRow["FAGEDAYSINT"] = Convert.ToInt32(item["FAGEDAYSINT"]);
dataTable.Rows.Add(dataRow);
}
}
if (dataTable.Rows.Count > 0)
{
string createSql = "( \r\n FGUID INT,\r\n FQTY DECIMAL(23,10),\r\n FBASEQTY DECIMAL(23,10),\r\n FSECQTY DECIMAL(23,10),\r\n FSUMQTY DECIMAL(23,10),\r\n FSUMBASEQTY DECIMAL(23,10),\r\n FSUMSECQTY DECIMAL(23,10),\r\n FAGEDAYS NVARCHAR(20),\r\n FAGEDAYSINT INT)";
text8 = (dataTable.TableName = DBUtils.CreateSessionTemplateTable(base.Context, "TM_STK_INVAGERPTBILLSUM", createSql));
DBUtils.BulkInserts(base.Context, dataTable);
string arg = Guid.NewGuid().ToString("N").Substring(0, 21);
string indexSql = $" CREATE INDEX IDX_GUID{arg} ON {text8} (FGUID) ";
DBUtils.CreateSessionTemplateTableIndex(base.Context, indexSql);
flag = true;
dataTable = null;
empty = string.Format("INSERT INTO {0} (FGuid,FSTOCKORGID,FStockOrgNumber,FStockOrgName,FOwnerTypeId,FOWNERTYPENAME,FOWNERID,FOwnerNumber,\r\n\t FOwnerName,FKEEPERTYPEID,FKEEPERID,FKEEPERNAME,FCATEGORYID,FMaterialTypeName,FMATERIALID,FMaterialNumber,FMaterialName,FMaterialModel,\r\n FLotID,FLotNo,FBOMID,FBOMNumber,FMTONO,FAuxPropId,FAUXPROP,FAuxPropIdR,FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FErpClsID,FMaterialGroup,FMaterialGroup_FNumber,FMaterialGroupName,\r\n\t FStockNumber,FStockName,FSTOCKSTATUSID,FSTOCKSTATUSNAME,FStockLocId,FSTOCKLOC,FStockLocIdR,FBASEUNITID,FBaseUnitName,FUnitID,FUnitName,FSECUNITID,\r\n\t FSecUnitName,FBASEQTY,FQTY,FSECQTY,FPRECISION,FBASEPRECISION,FSECPRECISION,FBasePrice,FPrice,FSecPrice,FAmount,FPriceDecimal,FAmountDecimal,FAGEDAYS,FLeftQty,FAGEDAYSINT)\r\n select IT.FGuid,FSTOCKORGID,FStockOrgNumber,FStockOrgName,FOwnerTypeId,FOWNERTYPENAME,FOWNERID,FOwnerNumber,\r\n FOwnerName,FKEEPERTYPEID,FKEEPERID,FKEEPERNAME,FCATEGORYID,\tFMaterialTypeName,FMATERIALID,FMaterialNumber,FMaterialName,FMaterialModel,\r\n FLotID,FLotNo,FBOMID,FBOMNumber,FMTONO,FAuxPropId,' ' As FAuxPropname,FAuxPropIdR,FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FErpClsID,FMaterialGroup,FMaterialGroup_FNumber,FMaterialGroupName,\r\n FStockNumber,FStockName,FSTOCKSTATUSID,FSTOCKSTATUSNAME,FStockLocId,FSTOCKLOC,FStockLocIdR,FBASEUNITID,FBaseUnitName,FUnitID,FUnitName,FSECUNITID,\r\n FSecUnitName, CASE WHEN IT.FBASEQTY>=IT2.FSUMBASEQTY THEN IT2.FBASEQTY WHEN IT2.FBASEQTY-(IT2.FSUMBASEQTY-IT.FBASEQTY)<0 THEN 0 ELSE IT2.FBASEQTY-(IT2.FSUMBASEQTY-IT.FBASEQTY) END AS FBASEQTY,\r\n CASE WHEN IT.FQTY>=IT2.FSUMQTY THEN IT2.FQTY WHEN IT2.FQTY-(IT2.FSUMQTY-IT.FQTY)<0 THEN 0 ELSE IT2.FQTY-(IT2.FSUMQTY-IT.FQTY) END AS FQTY,\r\n CASE WHEN IT.FSECQTY>=IT2.FSUMSECQTY THEN IT2.FSECQTY WHEN IT2.FSECQTY-(IT2.FSUMSECQTY-IT.FSECQTY)<0 THEN 0 ELSE IT2.FSECQTY-(IT2.FSUMSECQTY-IT.FSECQTY) END AS FSECQTY,\r\n FPRECISION,FBASEPRECISION,FSECPRECISION,FBasePrice,FPrice,FSecPrice,\r\n CONVERT(DECIMAL(23,10),(CASE WHEN IT.FQTY>=IT2.FSUMQTY THEN IT2.FQTY ELSE IT2.FQTY-(IT2.FSUMQTY-IT.FQTY) END)*IT.FPrice) AS FAmount,\r\n FPriceDecimal,FAmountDecimal,IT2.FAGEDAYS,FLeftQty,IT2.FAGEDAYSINT\r\n from {0} IT INNER JOIN {1} IT2 ON (IT.FGUID = IT2.FGUID) ", _tmpRptTable, text8);
list4.Add(new SqlObject(empty, new List<SqlParam>()));
DBUtils.ExecuteBatch(base.Context, list4);
list4.Clear();
if (base.Context.DatabaseType != DatabaseType.MS_SQL_Server)
{
using KDTransactionScope kDTransactionScope = new KDTransactionScope((TransactionScopeOption)2);
DBUtils.Execute(base.Context, CommonFunction.GetAnalizeTableStat(_tmpRptTable));
kDTransactionScope.Complete();
}
empty = string.Format(" UPDATE {0} SET (FQTY,FBASEQTY,FSECQTY,FAMOUNT,FAGEDAYS) = \r\n (SELECT {0}.FQTY-IT2.FQTY,{0}.FBASEQTY-IT2.FBASEQTY,{0}.FSECQTY-IT2.FSECQTY,CONVERT(DECIMAL(23,10),({0}.FQTY-IT2.FQTY)*{0}.FPRICE), N'{1}' FROM \r\n (SELECT FGUID, SUM(FQTY) AS FQTY,SUM(FBASEQTY) AS FBASEQTY,SUM(FSECQTY) AS FSECQTY FROM {0} WHERE FAGEDAYS<> N'{1}' GROUP BY FGUID ) IT2\r\n \r\n WHERE {0}.FGUID = IT2.FGUID AND {0}.FAGEDAYS= N'{1}' AND {0}.FQTY-IT2.FQTY>0 \r\n AND EXISTS (SELECT 1 FROM {2} where {0}.FGUID=FGUID))", _tmpRptTable, _outRange, text8);
list4.Add(new SqlObject(empty, new List<SqlParam>()));
empty = string.Format("delete {0} where ((FAGEDAYS= N'{1}' AND FLeftQty=FQTY AND EXISTS (SELECT 1 FROM {2} where {0}.FGUID=FGUID)) OR (FQTY=0 AND FAGEDAYS<> N'{1}')) {3} ", _tmpRptTable, _outRange, text8, _ageDaysDelFilter);
list4.Add(new SqlObject(empty, new List<SqlParam>()));
}
else if (_ageDaysTo < 99999)
{
list4.Add(new SqlObject("TRUNCATE TABLE " + _tmpRptTable, new List<SqlParam>()));
}
}
DBUtils.ExecuteBatch(base.Context, list4);
if (flag)
{
DBUtils.DropSessionTemplateTable(base.Context, text8);
}
}
}
private void CreateNewpTableIndex()
{
string strSQL = string.Format(" IF NOT EXISTS (SELECT 1 FROM KSQL_INDEXES WHERE KSQL_INDNAME = '{0}') CREATE INDEX {0} ON {1} (FMATERIALID)", _tmpNewpTable.ToUpperInvariant().Replace("TMP", "IM"), _tmpNewpTable);
DBUtils.Execute(base.Context, strSQL);
}
private string GetJoinFelxSql()
{
StringBuilder stringBuilder = new StringBuilder();
string empty = string.Empty;
IBDFlexService service = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IBDFlexService>(base.Context);
if (_filterStr.IndexOf("FAUXPROPID") > 0)
{
empty = $"select distinct FAUXPROPID from {_tmpInvTable} ";
IList<long> lstFlexID = (from p in DBUtils.ExecuteDynamicObject(base.Context, empty, null, null, CommandType.Text)
select Convert.ToInt64(p["FAUXPROPID"])).ToList();
tempAuxTableName = service.CreateAuxPropData(base.Context, auxPropDatas, lstFlexID, "FAUXPROPID", 1);
stringBuilder.AppendFormat(" LEFT JOIN {0} ON TV.FAUXPROPID={0}.FAUXPROPID ", tempAuxTableName);
tbNameList.Add(tempAuxTableName);
}
if (_filterStr.ToUpperInvariant().IndexOf("FSTOCKLOCID") > 0)
{
empty = $"select distinct FSTOCKLOCID from {_tmpInvTable} ";
IList<long> lstFlexID2 = (from p in DBUtils.ExecuteDynamicObject(base.Context, empty, null, null, CommandType.Text)
select Convert.ToInt64(p["FSTOCKLOCID"])).ToList();
tempStockLocTableName = service.CreateAuxPropData(base.Context, stockLocDatas, lstFlexID2, "FSTOCKLOCID", 0);
stringBuilder.AppendFormat(" LEFT JOIN {0} ON TV.FSTOCKLOCID={0}.FSTOCKLOCID ", tempStockLocTableName);
tbNameList.Add(tempStockLocTableName);
}
return stringBuilder.ToString();
}
private DataTable CreateTargetInfoDt(string tmpStockBillSumTb)
{
DataTable dataTable = new DataTable(tmpStockBillSumTb);
DataColumn dataColumn = new DataColumn();
dataColumn.DataType = typeof(long);
dataColumn.ColumnName = "FGUID";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(decimal);
dataColumn.ColumnName = "FSUMQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(decimal);
dataColumn.ColumnName = "FSUMBASEQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(decimal);
dataColumn.ColumnName = "FSUMSECQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(decimal);
dataColumn.ColumnName = "FQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.ColumnName = "FBASEQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.ColumnName = "FSECQTY";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(string);
dataColumn.ColumnName = "FAGEDAYS";
dataTable.Columns.Add(dataColumn);
dataColumn = new DataColumn();
dataColumn.DataType = typeof(int);
dataColumn.ColumnName = "FAGEDAYSINT";
dataTable.Columns.Add(dataColumn);
return dataTable;
}
private void SetFilter(IRptParams filter)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
SetQuickFilter(customFilter);
_supperFilter = filter.FilterParameter.FilterString.Trim().Replace("$$", "");
_isShowFBaseQty = false;
_isShowFStockQty = false;
_isShowFSecQty = false;
_isShowAmout = false;
if (filter.FilterParameter.SummaryRows.Count > 0)
{
base.ReportProperty.IsDefaultOnlyDspSumAndDetailData = false;
}
else
{
base.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
}
foreach (Kingdee.BOS.Core.CommonFilter.SummaryField summaryRow in filter.FilterParameter.SummaryRows)
{
if (summaryRow.Key.ToUpperInvariant().Equals("FERPCLSID") || summaryRow.Key.ToUpperInvariant().Equals("FMATERIALGROUPNAME") || summaryRow.Key.ToUpperInvariant().Equals("FMATERIALGROUP_FNUMBER") || summaryRow.Key.ToUpperInvariant().Equals("FMATERIALTYPEID") || summaryRow.Key.ToUpperInvariant().Equals("FKEEPERID"))
{
lstSqlKey.Add(summaryRow.Key.ToUpperInvariant());
}
}
foreach (ColumnField item in filter.FilterParameter.ColumnInfo)
{
string text = item.FieldName.ToUpperInvariant();
switch (text)
{
case "FERPCLSID":
case "FMATERIALGROUPNAME":
case "FMATERIALGROUP_FNUMBER":
case "FMATERIALTYPEID":
case "FKEEPERID":
if (!lstSqlKey.Contains(text))
{
lstSqlKey.Add(text);
}
break;
case "FBASEQTY":
_isShowFBaseQty = true;
break;
case "FQTY":
_isShowFStockQty = true;
break;
case "FSECQTY":
_isShowFSecQty = true;
break;
case "FAMOUNT":
_isShowAmout = true;
break;
}
}
string text2 = _supperFilter.ToUpperInvariant();
if (!lstSqlKey.Contains("FMATERIALTYPEID") && text2.IndexOf("FMATERIALTYPENAME") > 0)
{
lstSqlKey.Add("FMATERIALTYPEID");
}
if (!lstSqlKey.Contains("FMATERIALGROUPNAME") && text2.IndexOf("FMATERIALGROUPNAME") > 0)
{
lstSqlKey.Add("FMATERIALGROUPNAME");
}
if (!lstSqlKey.Contains("FMATERIALGROUP_FNUMBER") && text2.IndexOf("FMATERIALGROUP_FNUMBER") > 0)
{
lstSqlKey.Add("FMATERIALGROUP_FNUMBER");
}
if (customFilter.Contains("FIsHsStockField") && customFilter["FIsHsStockField"] != null)
{
string text3 = customFilter["FIsHsStockField"].ToString();
if (!string.IsNullOrWhiteSpace(text3))
{
HsStockFields = text3.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
IsHsStockFields = true;
}
else
{
IsHsStockFields = false;
}
}
List<BaseDataTempTable> baseDataTempTable = filter.BaseDataTempTable;
IBDCommonService service = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IBDCommonService>(base.Context);
_sBaseDataIsolationSql = service.GetBaseDataIsolationSql(base.Context, "T_BAS_RptDataRuleConfig", "STK_InvAgeAnalyzeRpt", baseDataTempTable);
_ageDaysDelFilter = "";
_ageDaysTo = 0;
if (!_showRange && customFilter.Contains("FilteAgeDays") && Convert.ToBoolean(customFilter["FilteAgeDays"]))
{
_ageDaysTo = Convert.ToInt32(customFilter["AgeDaysTo"]);
if (_ageDaysTo < 99999)
{
_ageDaysDelFilter = string.Format(" OR FAGEDAYSINT < {0} OR FAGEDAYSINT > {1} ", Convert.ToInt32(customFilter["AgeDaysFrom"]), _ageDaysTo);
}
else
{
_ageDaysDelFilter = string.Format(" OR FAGEDAYSINT < {0} ", Convert.ToInt32(customFilter["AgeDaysFrom"]));
}
}
SplitFilter();
}
private void SetQuickFilter(DynamicObject dyFilter)
{
_stkOrgIdCollect = dyFilter["StockOrgId"].ToString();
queryDate = Convert.ToDateTime(dyFilter["QueryDate"]);
string str = Convert.ToString(dyFilter["QueryGroup"]);
if (str.EqualsIgnoreCase("History"))
{
historyStockQuery = true;
_dateFilter = GetMaxDateFilter("T", "FDATE");
}
else
{
queryDate = ServiceHelper.GetService<ITimeService>().GetSystemDateTime(base.Context).Date;
historyStockQuery = false;
_dateFilter = string.Empty;
}
if (dyFilter.DynamicObjectType.Properties.ContainsKey("CurDateIsOne"))
{
_curDateIsOne = Convert.ToBoolean(dyFilter["CurDateIsOne"]);
}
string str2 = Convert.ToString(dyFilter["RadioGroup"]);
if (str2.EqualsIgnoreCase("A"))
{
_showRange = true;
}
else
{
_showRange = false;
_queryRange = Convert.ToInt32(dyFilter["QueryRange"]);
_rangeUnit = Convert.ToString(dyFilter["RangeUnit"]);
}
isSplitPageByOwner = Convert.ToBoolean(dyFilter["SplitPageByOwner"]);
dyFilter["BillSource"].ToString().Split(',').ToList();
DynamicObjectCollection dynamicObjectCollection = (DynamicObjectCollection)dyFilter["InvAgeEntity"];
_intervalInfoList.Clear();
_intervalStr = new List<string>();
_intervalSumStr = new List<string>();
if (dynamicObjectCollection.Count > 1 && _showRange)
{
_intervalInfoList = (from p in dynamicObjectCollection
where p["IntervalTxt"] != null
select new IntervalDayInfo
{
IntervalTxt = p["IntervalTxt"].ToString(),
IntervalDay = Convert.ToInt32(p["IntervalDay"]),
DownDay = Convert.ToInt32(p["DownDay"]),
UpperDay = Convert.ToInt32(p["UpperDay"]),
BaseQtyKey = "FBaseQty_" + p["DownDay"].ToString(),
QtyKey = "FStockQty_" + p["DownDay"].ToString(),
SecQtyKey = "FSecQty_" + p["DownDay"].ToString(),
AmountKey = "FAmount_" + p["DownDay"].ToString()
} into p
orderby p.DownDay
select p).ToList();
_intervalStr = _intervalInfoList.Select((IntervalDayInfo p) => $"CONVERT(DECIMAL(23,10),0.0) AS {p.BaseQtyKey},CONVERT(DECIMAL(23,10),0.0) AS {p.QtyKey},CONVERT(DECIMAL(23,10),0.0) AS {p.SecQtyKey},CONVERT(DECIMAL(23,10),0.0) AS {p.AmountKey}").ToList();
_intervalSumStr = _intervalInfoList.Select((IntervalDayInfo p) => string.Format("SUM({0}) AS {0},SUM({1}) AS {1},SUM({2}) AS {2},ROUND(SUM({3}),FAmountDecimal) AS {3}", p.BaseQtyKey, p.QtyKey, p.SecQtyKey, p.AmountKey)).ToList();
}
_materialFrom = GetBaseDateNumber((DynamicObject)dyFilter["MaterialFrom"]);
_materialTo = GetBaseDateNumber((DynamicObject)dyFilter["MaterialTo"]);
_stockFrom = GetBaseDateNumber((DynamicObject)dyFilter["StockFrom"]);
_stockTo = GetBaseDateNumber((DynamicObject)dyFilter["StockTo"]);
_lotFrom = GetBaseDateNumber((DynamicObject)dyFilter["LotFrom"]);
_lotTo = GetBaseDateNumber((DynamicObject)dyFilter["LotTo"]);
_priceSource = ((dyFilter["PriceSource"] != null && !string.IsNullOrWhiteSpace(dyFilter["PriceSource"].ToString())) ? Convert.ToInt32(dyFilter["PriceSource"]) : 0);
_qcZeroPriceType = ((dyFilter["ZeroBegPriceType"] != null && !string.IsNullOrWhiteSpace(dyFilter["ZeroBegPriceType"].ToString())) ? Convert.ToInt32(dyFilter["ZeroBegPriceType"]) : 0);
_showForbitMat = false;
if (dyFilter.DynamicObjectType.Properties.ContainsKey("ShowForbidMaterial"))
{
_showForbitMat = Convert.ToBoolean(dyFilter["ShowForbidMaterial"]);
}
_preMaterialJoinSql = GetMaterialPreJoinSql("E", "FMATERIALID", "M");
_preStockJoinSql = GetStockPreJoinSql("E", "FSTOCKID", "SK");
_preFilter = GetPreFilter("T.FSTOCKORGID", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT");
if (dyFilter.DynamicObjectType.Properties.ContainsKey("TrackPeriods"))
{
_trackPeriods = Convert.ToInt32(dyFilter["TrackPeriods"]);
}
else
{
_trackPeriods = 3;
}
if (_trackPeriods < 0)
{
_trackPeriods = 0;
}
}
private void SplitFilter()
{
_filterStr = $" FSTOCKORGID IN ({_stkOrgIdCollect}) ";
if (!string.IsNullOrWhiteSpace(_materialFrom))
{
_filterStr += string.Format(" AND FMaterialNumber>='{0}' ", _materialFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_materialTo))
{
_filterStr += string.Format(" AND FMaterialNumber<='{0}' ", _materialTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockFrom))
{
_filterStr += string.Format(" AND FStockNumber>='{0}' ", _stockFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockTo))
{
_filterStr += string.Format(" AND FStockNumber<='{0}' ", _stockTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_lotFrom))
{
_filterStr += string.Format(" AND FLotNo>='{0}' ", _lotFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_lotTo))
{
_filterStr += string.Format(" AND FLotNo<='{0}' ", _lotTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_supperFilter))
{
_filterStr += $" AND {_supperFilter} ";
}
if (!string.IsNullOrWhiteSpace(_sBaseDataIsolationSql))
{
_sBaseDataIsolationSql = _sBaseDataIsolationSql.Replace("TM.FMATERIALID", "FMATERIALID");
_sBaseDataIsolationSql = _sBaseDataIsolationSql.Replace("TUB.FUNITID", "FBASEUNITID");
_sBaseDataIsolationSql = _sBaseDataIsolationSql.Replace("MB.FCATEGORYID", "FCATEGORYID");
_sBaseDataIsolationSql = _sBaseDataIsolationSql.Replace("TS.FStockId", "FSTOCKID");
_filterStr += _sBaseDataIsolationSql;
}
}
private string GetMaterialPreJoinSql(string matFieldTableas, string matIdField, string matTableAs)
{
string result = "";
if (!string.IsNullOrWhiteSpace(_materialFrom) || !string.IsNullOrWhiteSpace(_materialTo) || !_showForbitMat)
{
result = string.Format(" INNER JOIN T_BD_MATERIAL {0} ON {1}.{2} = {0}.FMATERIALID ", matTableAs, matFieldTableas, matIdField);
}
return result;
}
private string GetStockPreJoinSql(string stockFieldTableAs, string stockField, string stockTableAs)
{
string result = "";
if (!string.IsNullOrWhiteSpace(_stockFrom) || !string.IsNullOrWhiteSpace(_stockTo))
{
result = string.Format(" INNER JOIN T_BD_STOCK {0} ON {1}.{2} = {0}.FSTOCKID ", stockTableAs, stockFieldTableAs, stockField);
}
return result;
}
private string GetStockTransOutPreJoinSql(string stockFieldTableAs, string stockField, string stockTableAs)
{
string result = "";
if (!string.IsNullOrWhiteSpace(_stockFrom) || !string.IsNullOrWhiteSpace(_stockTo))
{
result = string.Format(" LEFT JOIN T_BD_STOCK {0} ON {1}.{2} = {0}.FSTOCKID ", stockTableAs, stockFieldTableAs, stockField);
}
return result;
}
private string GetPreFilter(string orgIdField, string matNumberField, string stockNumberField, string lotNumberField)
{
StringBuilder stringBuilder = new StringBuilder();
if (!string.IsNullOrWhiteSpace(_stkOrgIdCollect) && !string.IsNullOrWhiteSpace(orgIdField))
{
stringBuilder.AppendFormat(" AND {0} IN ({1}) ", orgIdField, _stkOrgIdCollect);
}
if (!string.IsNullOrWhiteSpace(_materialFrom) && !string.IsNullOrWhiteSpace(matNumberField))
{
stringBuilder.AppendFormat(" AND {0} >= '{1}' ", matNumberField, _materialFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_materialTo) && !string.IsNullOrWhiteSpace(matNumberField))
{
stringBuilder.AppendFormat(" AND {0} <= '{1}' ", matNumberField, _materialTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockFrom) && !string.IsNullOrWhiteSpace(stockNumberField))
{
stringBuilder.AppendFormat(" AND {0} >= '{1}' ", stockNumberField, _stockFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_stockTo) && !string.IsNullOrWhiteSpace(stockNumberField))
{
stringBuilder.AppendFormat(" AND {0} <= '{1}' ", stockNumberField, _stockTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_lotFrom) && !string.IsNullOrWhiteSpace(lotNumberField))
{
stringBuilder.AppendFormat(" AND {0} >= '{1}' ", lotNumberField, _lotFrom.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(_lotTo) && !string.IsNullOrWhiteSpace(lotNumberField))
{
stringBuilder.AppendFormat(" AND {0} <= '{1}' ", lotNumberField, _lotTo.Replace("'", "''"));
}
if (!string.IsNullOrWhiteSpace(matNumberField) && !_showForbitMat && matNumberField.IndexOf('.') > 0)
{
string text = matNumberField.Substring(0, matNumberField.IndexOf('.'));
if (!string.IsNullOrWhiteSpace(text))
{
stringBuilder.AppendFormat(" AND ISNULL({0}.FFORBIDSTATUS, 'A') = 'A' ", text);
}
}
return stringBuilder.ToString();
}
private string GetMaxDateFilter(string dateFieldTableAs, string dateField)
{
string result = string.Empty;
if (historyStockQuery)
{
result = $" AND {dateFieldTableAs}.{dateField}<@MaxDate ";
}
return result;
}
private string GetTransStockFilter(string stkNumberField1, string stkNumberField2)
{
if (string.IsNullOrWhiteSpace(stkNumberField1))
{
return "";
}
string preFilter = GetPreFilter("", "", stkNumberField1, "");
if (string.IsNullOrWhiteSpace(preFilter))
{
return "";
}
string preFilter2 = GetPreFilter("", "", stkNumberField2, "");
return $" AND ( {preFilter.Substring(5, preFilter.Length - 5)} OR ({preFilter2.Substring(5, preFilter2.Length - 5)}) ) ";
}
private object GetConvertLotTextFilter(string lotTextField1, string lotTextField2)
{
if (string.IsNullOrWhiteSpace(lotTextField1))
{
return "";
}
string preFilter = GetPreFilter("", "", "", lotTextField1);
if (string.IsNullOrWhiteSpace(preFilter))
{
return "";
}
string preFilter2 = GetPreFilter("", "", "", lotTextField2);
return $" AND ( {preFilter.Substring(5, preFilter.Length - 5)} OR ({preFilter2.Substring(5, preFilter2.Length - 5)}) ) ";
}
protected void CreateNewpTbl()
{
IDBService service = ServiceHelper.GetService<IDBService>();
_tmpNewpTable = service.CreateTemporaryTableName(base.Context);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine($"CREATE TABLE {_tmpNewpTable} ( ");
stringBuilder.AppendLine(" FGUID VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FIOPRICE DECIMAL(23,10) NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FDATE VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FMATERIALID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FLOT INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FOWNERTYPEID VARCHAR(36) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FOWNERID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FKEEPERTYPEID VARCHAR(36) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FKEEPERID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKORGID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKSTATUSID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FAUXPROPID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKLOCID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FBOMID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FPRODUCEDATE VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FEXPIRYDATE VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FPRICEDIGITS INT NULL DEFAULT(0),");
stringBuilder.AppendLine(" FAMOUNTDIGITS INT NULL DEFAULT(0)");
stringBuilder.AppendLine(" ) ");
using KDTransactionScope kDTransactionScope = new KDTransactionScope((TransactionScopeOption)2);
DBUtils.Execute(base.Context, stringBuilder.ToString());
kDTransactionScope.Complete();
}
private string CreatePriceAmountAllTbl()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine(" ( ");
stringBuilder.AppendLine(" FGUID VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FPRICE DECIMAL(23,10) NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FAMOUNT DECIMAL(23,10) NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FPRICEDIGITS INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FAMOUNTDIGITS INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FDATE VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FMATERIALID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FLOT INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FLOTNO NVARCHAR(255) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FOWNERTYPEID VARCHAR(36) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FOWNERID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FKEEPERTYPEID VARCHAR(36) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FKEEPERID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKORGID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKSTATUSID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FAUXPROPID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FSTOCKLOCID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FBOMID INT NULL DEFAULT(0), ");
stringBuilder.AppendLine(" FMTONO NVARCHAR(255) NULL DEFAULT(' '), ");
stringBuilder.AppendLine(" FPRODUCEDATE VARCHAR(36) NULL, ");
stringBuilder.AppendLine(" FEXPIRYDATE VARCHAR(36) NULL ");
stringBuilder.AppendLine(" ) ");
return DBUtils.CreateSessionTemplateTable(base.Context, "TM_STK_NEWAllIOAMOUNTPRICE", stringBuilder.ToString());
}
private void MergeNewOutPrice(IRptParams filter, DateTime minDate, bool onlyUpZeroPrice)
{
string text = "";
string text2 = "";
string text3 = ",FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FAUXPROPID,FOWNERTYPEID,FOWNERID,FSTOCKSTATUSID,FKEEPERTYPEID,FKEEPERID,";
foreach (ColumnField item in filter.FilterParameter.ColumnInfo)
{
string text4 = "";
text4 = ((!string.IsNullOrWhiteSpace(item.FlexParentFieldKey)) ? item.FlexParentFieldKey.ToUpperInvariant() : item.Key.ToUpperInvariant());
if (text4.Equals("FSTOCKSTATUSNAME") && !text2.Contains("FSTOCKSTATUSID"))
{
text += " AND T.FSTOCKSTATUSID=T3.FSTOCKSTATUSID ";
text2 += string.Format(" T.{0}, ", "FSTOCKSTATUSID");
}
else if (text4.Equals("FLOTNO") && !text2.Contains("FLOT"))
{
text += $" AND T.FLOTID=T3.FLOTID ";
text2 += string.Format(" T.{0}, ", "FLOT");
}
else if ((text4.Equals("FSTOCKLOC") || text4.Equals("FSTOCKLOCID") || text4.Equals("FSTOCKLOCIDR")) && !text2.Contains("FSTOCKLOCID"))
{
text += $" AND T.FSTOCKLOC=T3.FSTOCKLOCID ";
text2 += string.Format(" T.{0}, ", "FSTOCKLOCID");
}
else if ((text4.Equals("FAUXPROP") || text4.Equals("FAUXPROPID") || text4.Equals("FAUXPROPIDR")) && !text2.Contains("FAUXPROPID"))
{
text += $" AND T.FAUXPROPID=T3.FAUXPROPID ";
}
else if (text4.Equals("FSTOCKNAME") && !text2.Contains("FSTOCKID"))
{
text += $" AND T.FSTOCKID=T3.FSTOCKID ";
text2 += string.Format(" T.{0}, ", "FSTOCKID");
}
else if (text3.IndexOf(text4) > 0 && !text2.Contains(text4))
{
if (text4.Equals("FPRODUCEDATE") || text4.Equals("FEXPIRYDATE"))
{
text += string.Format(" AND (T.{0}=T3.{0} OR (T.{0} IS NULL AND T3.{0} IS NULL)) ", text4);
text2 += $" T.{text4}, ";
}
else
{
text += string.Format(" AND T.{0}=T3.{0} ", text4);
text2 += $" T.{text4}, ";
}
}
}
string text5 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "DECIMAL" : "NUMBER");
string text6 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "ISNULL" : "NVL");
string text7 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? " TOP 1 " : " ");
string text8 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? " " : " AND ROWNUM <=1 ");
string text9 = $" CAST(IT2.FPrice AS {text5}(23,10)) ";
string text10 = string.Format("CAST((CASE WHEN IT.FQTY=0 THEN 0 ELSE CAST(IT2.FBaseQty * {0}(IT2.FPrice,0) AS {1}(23,10))/IT.FQTY END) AS {1}(23,10))", text6, text5);
string text11 = string.Format("CAST((CASE WHEN IT.FSecQty=0 THEN 0 ELSE CAST(IT2.FBaseQty * {0}(IT2.FPrice,0) AS {1}(23,10))/IT.FSecQty END) AS {1}(23,10))", text6, text5);
string text12 = $"CAST(IT2.FBaseQty * {text6}(IT2.FPrice,0) AS {text5}(23,10))";
if (onlyUpZeroPrice)
{
text9 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FBasePrice ELSE {text9} END ";
text10 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FPrice ELSE {text10} END ";
text11 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FSecPrice ELSE {text11} END ";
text12 = $" CASE WHEN IT.FBasePrice <> 0 THEN IT.FAmount ELSE {text12} END ";
}
string strSQL = string.Format("/*dialect*/ \r\nmerge into {0} IT using (SELECT FGuid,FBaseQty,\r\n (SELECT {10} FPrice FROM {1} T\r\n WHERE T.FMATERIALID=T3.FMATERIALID\r\n AND T.FSTOCKORGID=T3.FSTOCKORGID\r\n AND T.FOWNERTYPEID=T3.FOWNERTYPEID\r\n AND T.FOWNERID=T3.FOWNERID\r\n AND T.FQTYADDOPTION={2}\r\n {3}\r\n AND T.FPrice<>0\r\n {11}\r\n --ORDER BY T.FCreateDate DESC,T.FPrice DESC \r\n ) AS FPrice,\r\n (\r\n SELECT {10} {8}(FPRICEDIGITS,2) FROM {1} T\r\n LEFT JOIN T_BD_CURRENCY CON ON T.FLOCALCURRID=CON.FCURRENCYID\r\n WHERE T.FMATERIALID=T3.FMATERIALID\r\n AND T.FSTOCKORGID=T3.FSTOCKORGID\r\n AND T.FOWNERTYPEID=T3.FOWNERTYPEID\r\n AND T.FOWNERID=T3.FOWNERID\r\n AND T.FQTYADDOPTION={2}\r\n {3}\r\n AND T.FPrice<>0\r\n {11}\r\n --ORDER BY T.FCreateDate DESC,T.FPrice DESC\r\n ) AS FPRICEDIGITS,\r\n (\r\n SELECT {10} {8}(FAMOUNTDIGITS,2) FROM {1} T\r\n LEFT JOIN T_BD_CURRENCY CON ON T.FLOCALCURRID=CON.FCURRENCYID\r\n WHERE T.FMATERIALID=T3.FMATERIALID\r\n AND T.FSTOCKORGID=T3.FSTOCKORGID\r\n AND T.FOWNERTYPEID=T3.FOWNERTYPEID\r\n AND T.FOWNERID=T3.FOWNERID\r\n AND T.FQTYADDOPTION={2}\r\n AND T.FPrice<>0\r\n {11}\r\n --ORDER BY T.FCreateDate DESC,T.FPrice DESC\r\n ) AS FAMOUNTDIGITS\r\n FROM {0} T3 \r\n) IT2 ON (IT.FGUID = IT2.FGUID AND IT.FOWNERTYPEID<>'BD_Supplier'\r\n AND IT.FOWNERTYPEID<>'BD_Customer')\r\nWHEN MATCHED THEN UPDATE SET \r\n IT.FBasePrice = {4}, IT.FPrice = {5}, IT.FSecPrice = {6}, IT.FAmount = {7}, \r\n IT.FPriceDecimal = {8}(IT2.FPRICEDIGITS,IT.FPriceDecimal), IT.FAmountDecimal = {8}(IT2.FAMOUNTDIGITS,IT.FAmountDecimal) {9} ", _tmpRptTable, _tmpStockBillTb, 0, text, text9, text10, text11, text12, text6, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "", text7, text8);
DBUtils.Execute(base.Context, strSQL);
}
private void MergeNewInPrice(IRptParams filter, DateTime minDate, bool onlyUpZeroPrice)
{
List<SqlObject> list = new List<SqlObject>();
string text = " ";
string text2 = "";
string text3 = ",FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FAUXPROPID,FOWNERTYPEID,FOWNERID,FSTOCKSTATUSID,FKEEPERTYPEID,FKEEPERID,";
foreach (ColumnField item in filter.FilterParameter.ColumnInfo)
{
string text4 = "";
text4 = ((!string.IsNullOrWhiteSpace(item.FlexParentFieldKey)) ? item.FlexParentFieldKey.ToUpperInvariant() : item.Key.ToUpperInvariant());
if (text4.Equals("FSTOCKSTATUSNAME") && !text.Contains("FSTOCKSTATUSID"))
{
text2 += " AND TCC.FSTOCKSTATUSID=TPC.FSTOCKSTATUSID ";
text += string.Format(" TSE.{0}, ", "FSTOCKSTATUSID");
}
else if (text4.Equals("FLOTNO") && !text.Contains("FLOT"))
{
text2 += $" AND TCC.FLOT=TPC.FLOT ";
text += string.Format(" TSE.{0}, ", "FLOT");
}
else if ((text4.Equals("FSTOCKLOC") || text4.Equals("FSTOCKLOCID") || text4.Equals("FSTOCKLOCIDR")) && !text.Contains("FSTOCKLOCID"))
{
text2 += $" AND TCC.FSTOCKLOCID=TPC.FSTOCKLOCID ";
text += string.Format(" TSE.{0}, ", "FSTOCKLOCID");
}
else if ((text4.Equals("FAUXPROP") || text4.Equals("FAUXPROPID") || text4.Equals("FAUXPROPIDR")) && !text.Contains("FAUXPROPID"))
{
text2 += $" AND TCC.FAUXPROPID=TPC.FAUXPROPID ";
text += string.Format(" TSE.{0}, ", "FAUXPROPID");
}
else if (text4.Equals("FSTOCKNAME") && !text.Contains("FSTOCKID"))
{
text2 += $" AND TCC.FSTOCKID=TPC.FSTOCKID ";
text += string.Format(" TSE.{0}, ", "FSTOCKID");
}
else if (text3.IndexOf(text4) > 0 && !text.Contains(text4))
{
if (text4.Equals("FPRODUCEDATE") || text4.Equals("FEXPIRYDATE"))
{
text2 += string.Format(" AND (TCC.{0}=TPC.{0} OR (TCC.{0} IS NULL AND TPC.{0} IS NULL)) ", text4);
text += $" TSE.{text4}, ";
}
else
{
text2 += string.Format(" AND TCC.{0}=TPC.{0} ", text4);
text += $" TSE.{text4}, ";
}
}
}
CreateNewpTbl();
GetNewInPriceSql(list, filter, minDate, text, text2);
CreateNewpTableIndex();
string defaultRateTypeAndCurrDataBySubOrgIds = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IFINServiceForCommon>(base.Context).GetDefaultRateTypeAndCurrDataBySubOrgIds(base.Context, _stkOrgIdCollect, 0L);
string sql = $"MERGE INTO {_tmpNewpTable} IT \r\n USING (SELECT TOP 1 T1.FSETTLEORGID,T2.FPRICEDIGITS,T2.FAMOUNTDIGITS \r\n FROM {defaultRateTypeAndCurrDataBySubOrgIds} T1 INNER JOIN T_BD_CURRENCY T2 ON T1.FLOCALCURRENCYID= T2.FCURRENCYID ) IT2 \r\n ON (1 = 1)\r\n WHEN MATCHED THEN \r\n UPDATE SET IT.FPRICEDIGITS = IT2.FPRICEDIGITS,IT.FAMOUNTDIGITS=IT2.FAMOUNTDIGITS";
list.Add(new SqlObject(sql, new List<SqlParam>()));
string text5 = text2.Replace("TCC.", "IT.");
text5 = text5.Replace("TPC.", "IT2.");
text5 = text5.Replace("IT.FLOT", "IT.FLOTID");
string text6 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "DECIMAL" : "NUMBER");
string text7 = ((_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? "ISNULL" : "NVL");
string text8 = $" CAST(IT2.FIOPRICE AS {text6}(23,10)) ";
string text9 = string.Format("CAST((CASE WHEN IT.FQTY=0 THEN 0 ELSE CAST(IT.FBaseQty * {0}(IT2.FIOPRICE,0) AS {1}(23,10))/IT.FQTY END) AS {1}(23,10))", text7, text6);
string text10 = string.Format("CAST((CASE WHEN IT.FSecQty=0 THEN 0 ELSE CAST(IT.FBaseQty * {0}(IT2.FIOPRICE,0) AS {1}(23,10))/IT.FSecQty END) AS {1}(23,10))", text7, text6);
string text11 = $"CAST(IT.FBaseQty * {text7}(IT2.FIOPRICE,0) AS {text6}(23,10))";
if (onlyUpZeroPrice)
{
text8 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FBasePrice ELSE {text8} END ";
text9 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FPrice ELSE {text9} END ";
text10 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FSecPrice ELSE {text10} END ";
text11 = $" CASE WHEN IT.FBasePrice > 0 THEN IT.FAmount ELSE {text11} END ";
}
string sql2 = string.Format("/*dialect*/ \r\n MERGE INTO {0} IT USING (SELECT * FROM {1} WHERE FGUID IS NOT NULL ) IT2 \r\n ON (IT.FMATERIALID=IT2.FMATERIALID {2} )\r\n WHEN MATCHED THEN UPDATE \r\n SET IT.FBasePrice = {3}, IT.FPrice = {4}, IT.FSecPrice = {5}, \r\n IT.FAmount = {6}, \r\n IT.FPriceDecimal = {7}(IT2.FPRICEDIGITS,IT.FPriceDecimal), \r\n IT.FAmountDecimal = {7}(IT2.FAMOUNTDIGITS,IT.FAmountDecimal) {8} ", _tmpRptTable, _tmpNewpTable, text5, text8, text9, text10, text11, text7, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "");
list.Add(new SqlObject(sql2, new List<SqlParam>()));
DBUtils.ExecuteBatch(base.Context, list);
}
private void GetNewInPriceSql(List<SqlObject> lstSql, IRptParams filter, DateTime minDate, string strSelect, string inwhereStr)
{
List<string> list = new List<string>();
list.Add("STK_INSTOCK");
list.Add("STK_MISCELLANEOUS");
list.Add("PRD_INSTOCK");
list.Add("STK_INVINIT");
list.Add("SP_INSTOCK");
list.Add("STK_TRANSFERIN");
list.Add("SAL_RETURNSTOCK");
list.Add("PRD_RETURNMTRL");
list.Add("SUB_RETURNMTRL");
list.Add("STK_ASSEMBLEDAPP");
list.Add("STK_STOCKCOUNTGAIN");
list.Add("STK_LOTADJUST");
list.Add("STK_STOCKCONVERT");
list.Add("STK_STATUSCONVERT");
List<string> list2 = list;
StringBuilder stringBuilder = new StringBuilder();
string text = "NVL";
string text2 = "TO_CHAR(";
string text3 = " 'YYYY-MM-DD HH24:MI:SS')";
string arg = "LOWER(SYS_GUID())";
string text4 = ":BegDate";
string arg2 = "(TO_DATE(T0.FVALUE, 'YYYY-MM-DD HH24:MI:SS') -1)";
string arg3 = " ";
string text5 = $"IN({_stkOrgIdCollect})";
if (base.Context.DatabaseType == DatabaseType.MS_SQL_Server)
{
text = "ISNULL";
text2 = "CONVERT(VARCHAR(20),";
text3 = "20)";
arg = "LOWER(NEWID())";
text4 = "@MinDate";
arg2 = "DATEADD(DD, -1, CONVERT(DATETIME, T0.FVALUE))";
arg3 = "";
}
using (new SessionScope())
{
string text6 = CreatePriceAmountAllTbl();
stringBuilder.Clear();
stringBuilder.AppendLine(string.Format(" INSERT /*+ APPEND */ INTO {0} (FGUID,FPRICE,FDATE,{1} FMATERIALID,FPRICEDIGITS,FAMOUNTDIGITS) ", text6, strSelect.Replace("TSE.", "")));
string value = stringBuilder.ToString();
int num = 3;
int num2 = ((list2.Count % num == 0) ? (list2.Count / num) : (list2.Count / num + 1));
for (int i = 0; i < num2; i++)
{
List<string> list3 = list2.Skip(i * num).Take(num).ToList();
stringBuilder.Clear();
stringBuilder.AppendLine("/*dialect*/ ");
if (base.Context.DatabaseType != DatabaseType.MS_SQL_Server)
{
stringBuilder.AppendLine(value);
}
stringBuilder.AppendLine("WITH TPC AS (SELECT T0.* FROM (");
bool flag = false;
foreach (string item in list3)
{
if (flag)
{
stringBuilder.AppendLine(" UNION ALL ");
}
else
{
flag = true;
}
switch (item.ToUpperInvariant())
{
case "STK_INSTOCK":
stringBuilder.AppendLine(string.Format(" SELECT CASE WHEN {0}(TSEF.FCOSTPRICE_LC,0)=0 THEN (CAST({0}(TSEF.FCOSTPRICE,0)*{0}(TSF.FEXCHANGERATE,1) AS DECIMAL(23,10))) ELSE TSEF.FCOSTPRICE_LC END AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE, ", text, text2, text3));
stringBuilder.AppendLine($" {strSelect}TSE.FMATERIALID AS FMATERIALID ");
stringBuilder.AppendLine(" FROM T_STK_INSTOCKENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_STK_INSTOCKENTRY_F TSEF ON TSE.FID=TSEF.FID AND TSE.FENTRYID=TSEF.FENTRYID ");
stringBuilder.AppendLine(" INNER JOIN T_STK_INSTOCK TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine(" INNER JOIN T_STK_INSTOCKFIN TSF ON TSE.FID=TSF.FID ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {text5} AND {text}(TSEF.FCOSTPRICE,0)<>0 ");
break;
case "STK_MISCELLANEOUS":
stringBuilder.AppendLine($" SELECT {text}(TSE.FPRICE,0) AS FIOPRICE,{text2}TS.FCREATEDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine($" {strSelect}TSE.FMATERIALID AS FMATERIALID ");
stringBuilder.AppendLine(" FROM T_STK_MISCELLANEOUSENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_STK_MISCELLANEOUS TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FPRICE,0)<>0 ");
break;
case "PRD_INSTOCK":
stringBuilder.AppendLine($" SELECT {text}(TSE.FPRICE,0) AS FIOPRICE,{text2}TS.FCREATEDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine($" {strSelect}TSE.FMATERIALID AS FMATERIALID ");
stringBuilder.AppendLine(" FROM T_PRD_INSTOCKENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_PRD_INSTOCK TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FPRICE,0)<>0 ");
break;
case "STK_INVINIT":
stringBuilder.AppendLine($" SELECT CAST({text}(TSE.FAMOUNT/TSE.FBASEQTY, 0) AS DECIMAL(23,10)) AS FIOPRICE, {text2}TT.FSARTDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine(string.Format(" {0}TSE.FMATERIALID AS FMATERIALID ", strSelect.Replace("TSE.FKEEPERTYPEID", "TS.FKEEPERTYPEID").Replace("TSE.FKEEPERID", "TS.FKEEPERID")));
stringBuilder.AppendLine(" FROM T_STK_INVINITDETAIL TSE ");
stringBuilder.AppendLine(" INNER JOIN T_STK_INVINIT TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' ");
stringBuilder.AppendLine($" INNER JOIN (SELECT {arg2} FSARTDATE,T0.FORGID FROM (SELECT FORGID,FVALUE FROM T_BAS_SYSTEMPROFILE ");
stringBuilder.AppendLine($" WHERE FORGID {text5} AND FCATEGORY = 'STK' AND FKEY = 'STARTSTOCKDATE' AND FVALUE <> '{arg3}' AND FVALUE IS NOT NULL) T0) TT ");
stringBuilder.AppendLine(" ON TS.FSTOCKORGID = TT.FORGID");
stringBuilder.AppendLine($" WHERE TSE.FBASEQTY <> 0 AND TT.FSARTDATE >= {text4} AND TS.FDOCUMENTSTATUS ='C' AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FAMOUNT,0)<>0 ");
break;
case "SP_INSTOCK":
stringBuilder.AppendLine($" SELECT {text}(TSE.FPRICE,0) AS FIOPRICE,{text2}TS.FCREATEDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine($" {strSelect}TSE.FMATERIALID AS FMATERIALID ");
stringBuilder.AppendLine(" FROM T_SP_INSTOCKENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_SP_INSTOCK TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FPRICE,0)<>0 ");
break;
case "STK_TRANSFERIN":
stringBuilder.AppendLine($" SELECT {text}(TSE.FPRICE,0) AS FIOPRICE,{text2}TS.FCREATEDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine(string.Format(" {0}TSE.FMATERIALID AS FMATERIALID ", strSelect.Replace("TSE.FSTOCKID", "TSE.FDESTSTOCKID AS FSTOCKID").Replace("TSE.FSTOCKLOCID", "TSE.FDESTSTOCKLOCID AS FSTOCKLOCID").Replace("TSE.FSTOCKSTATUSID", "TSE.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID")
.Replace("TSE.FLOT", "TSE.FDESTLOT")));
stringBuilder.AppendLine(" FROM T_STK_STKTRANSFERINENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_STK_STKTRANSFERIN TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FISGENFORIOS<>'1' AND TS.FOBJECTTYPEID='STK_TRANSFERIN' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FPRICE,0)<>0 ");
stringBuilder.AppendLine(" UNION ALL ");
stringBuilder.AppendLine($" SELECT {text}(TSE.FPRICE,0) AS FIOPRICE,{text2}TS.FCREATEDATE,{text3} AS FBIZDATE, ");
stringBuilder.AppendLine(string.Format(" {0}TSE.FMATERIALID AS FMATERIALID ", strSelect.Replace("TSE.FSTOCKID", "TSE.FDESTSTOCKID AS FSTOCKID").Replace("TSE.FSTOCKLOCID", "TSE.FDESTSTOCKLOCID AS FSTOCKLOCID").Replace("TSE.FSTOCKSTATUSID", "TSE.FSRCSTOCKSTATUSID AS FSTOCKSTATUSID")
.Replace("TSE.FLOT", "TSE.FDESTLOT")));
stringBuilder.AppendLine(" FROM T_STK_STKTRANSFERINENTRY TSE ");
stringBuilder.AppendLine(" INNER JOIN T_STK_STKTRANSFERIN TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' ");
stringBuilder.AppendLine($" WHERE TS.FCREATEDATE >= {text4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FVESTONWAY ='B' AND TS.FISGENFORIOS<>'1' AND TS.FOBJECTTYPEID='STK_TRANSFERIN' AND TS.FSTOCKORGID {text5} AND {text}(TSE.FPRICE,0)<>0 ");
break;
case "SAL_RETURNSTOCK":
stringBuilder.AppendLine(string.Format("SELECT CASE WHEN {0}(TSEF.FCOSTPRICE,0)=0 THEN (CAST({0}(TSEF.FSALCOSTPRICE,0)*{0}(TSF.FEXCHANGERATE,1) AS DECIMAL(23,10))) ELSE TSEF.FCOSTPRICE END AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_SAL_RETURNSTOCKENTRY TSE\r\n INNER JOIN T_SAL_RETURNSTOCK TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'\r\n INNER JOIN T_SAL_RETURNSTOCKENTRY_F TSEF ON TSEF.FID = TSE.FID AND TSEF.FENTRYID = TSE.FENTRYID\r\n INNER JOIN T_SAL_RETURNSTOCKFIN TSF ON TSF.FID = TS.FID\r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {5} AND {0}(TSEF.FSALCOSTPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "PRD_RETURNMTRL":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_PRD_RETURNMTRLENTRY TSE\r\n INNER JOIN T_PRD_RETURNMTRL TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'\r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "SUB_RETURNMTRL":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_SUB_RETURNMTRLENTRY TSE\r\n INNER JOIN T_SUB_RETURNMTRL TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'\r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "STK_ASSEMBLEDAPP":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_ASSEMBLYPRODUCT TSE \r\n INNER JOIN T_STK_ASSEMBLY TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' \r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FAFFAIRTYPE='Assembly' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
stringBuilder.AppendLine(" UNION ALL ");
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_ASSEMBLYSUBITEM TSE \r\n INNER JOIN T_STK_ASSEMBLYPRODUCT TSEP ON TSEP.FENTRYID=TSE.FENTRYID\r\n INNER JOIN T_STK_ASSEMBLY TS ON TSEP.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' \r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FAFFAIRTYPE='Dassembly' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "STK_STOCKCOUNTGAIN":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_STKCOUNTGAINENTRY TSE\r\n INNER JOIN T_STK_STKCOUNTGAIN TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'\r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "STK_LOTADJUST":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_LOTADJUSTENTRY TSE\r\n INNER JOIN T_STK_LOTADJUST TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' \r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TSE.FCONVERTTYPE='B' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "STK_STOCKCONVERT":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_STOCKCONVERTENTRY TSE\r\n INNER JOIN T_STK_STOCKCONVERT TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' \r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TSE.FCONVERTTYPE='B' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
case "STK_STATUSCONVERT":
stringBuilder.AppendLine(string.Format("SELECT {0}(TSE.FPRICE,0) AS FIOPRICE,{1}TS.FCREATEDATE,{2} AS FBIZDATE,\r\n {3}TSE.FMATERIALID AS FMATERIALID \r\n FROM T_STK_STATUSCONVERTENTRY TSE\r\n INNER JOIN T_STK_STATUSCONVERT TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A' \r\n WHERE TS.FCREATEDATE >= {4} AND TSE.FOWNERTYPEID = 'BD_OwnerOrg' AND TSE.FCONVERTTYPE='B' AND TS.FSTOCKORGID {5} AND {0}(TSE.FPRICE,0)<>0 ", text, text2, text3, strSelect, text4, text5));
break;
}
}
stringBuilder.AppendLine($" ) T0 WHERE EXISTS (SELECT 1 FROM {_tmpRptTable} T1 WHERE T0.FMATERIALID=T1.FMATERIALID) ) ");
if (base.Context.DatabaseType == DatabaseType.MS_SQL_Server)
{
stringBuilder.AppendLine(value);
}
stringBuilder.AppendLine(string.Format(" SELECT {0}, MAX(TPC.FIOPRICE) FPRICE, MAX(TCC.FBIZDATE) FDATE, {1} TCC.FMATERIALID,2,2 FROM (", arg, strSelect.Replace("TSE.", "TCC.")));
stringBuilder.AppendLine(string.Format("SELECT MAX(FBIZDATE) FBIZDATE,{0} FMATERIALID FROM TPC GROUP BY {0} FMATERIALID ) TCC", strSelect.Replace("TSE.", "")));
stringBuilder.AppendLine($" INNER JOIN TPC ON TCC.FBIZDATE = TPC.FBIZDATE AND TCC.FMATERIALID = TPC.FMATERIALID {inwhereStr} ");
stringBuilder.AppendLine(string.Format(" GROUP BY {0} TCC.FMATERIALID ", strSelect.Replace("TSE.", "TCC.")));
DBUtils.Execute(base.Context, stringBuilder.ToString(), new List<SqlParam>
{
new SqlParam(text4, KDDbType.DateTime, minDate.Date.AddYears(-1))
});
}
stringBuilder.Clear();
stringBuilder.AppendLine("/*dialect*/ ");
stringBuilder.AppendLine(string.Format(" INSERT /*+ APPEND */ INTO {0} (FGUID,FIOPRICE,FDATE,{1} FMATERIALID,FPRICEDIGITS,FAMOUNTDIGITS) ", _tmpNewpTable, strSelect.Replace("TSE.", "")));
stringBuilder.AppendLine(string.Format(" SELECT {0}, MAX(TPC.FPRICE) FIOPRICE, MAX(TCC.FDATE) FDATE, {1} TCC.FMATERIALID,2 AS FPRICEDIGITS,2 AS FAMOUNTDIGITS FROM (", arg, strSelect.Replace("TSE.", "TCC.")));
stringBuilder.AppendLine(string.Format("SELECT MAX(FDATE) FDATE,{0} FMATERIALID FROM {1} GROUP BY {0} FMATERIALID ) TCC", strSelect.Replace("TSE.", ""), text6));
stringBuilder.AppendLine(string.Format(" INNER JOIN {1} TPC ON TCC.FDATE = TPC.FDATE AND TCC.FMATERIALID = TPC.FMATERIALID {0} ", inwhereStr, text6));
stringBuilder.AppendLine(string.Format(" GROUP BY {0} TCC.FMATERIALID ", strSelect.Replace("TSE.", "TCC.")));
DBUtils.Execute(base.Context, stringBuilder.ToString());
DBUtils.DropSessionTemplateTable(base.Context, text6);
}
}
private string GetBaseDateNumber(DynamicObject obj)
{
if (obj == null)
{
return "";
}
if (obj["Number"] != null)
{
return obj["Number"].ToString();
}
return "";
}
protected string GetTitleScrope(DynamicObject from, DynamicObject to)
{
string empty = string.Empty;
if (GetDataByKey(from, "Number").Length > 0 && GetDataByKey(to, "Number").Length > 0)
{
empty = string.Format("{0}({1})", GetDataByKey(from, "Number"), GetDataByKey(from, "Name"));
empty += "--";
return empty + string.Format("{0}({1})", GetDataByKey(to, "Number"), GetDataByKey(to, "Name"));
}
if (GetDataByKey(from, "Number").Length > 0)
{
empty = string.Format("{0}({1})", GetDataByKey(from, "Number"), GetDataByKey(from, "Name"));
return empty + "--";
}
if (GetDataByKey(to, "Number").Length > 0)
{
empty = "--";
return empty + string.Format("{0}({1})", GetDataByKey(to, "Number"), GetDataByKey(to, "Name"));
}
return ResManager.LoadKDString("全部", "004021030004576", SubSystemType.SCM);
}
protected string GetTitleNumScrope(DynamicObject from, DynamicObject to)
{
string empty = string.Empty;
if (GetDataByKey(from, "Number").Length > 0 && GetDataByKey(to, "Number").Length > 0)
{
empty = string.Format("{0}", GetDataByKey(from, "Number"));
empty += "--";
return empty + string.Format("{0}", GetDataByKey(to, "Number"));
}
if (GetDataByKey(from, "Number").Length > 0)
{
empty = string.Format("{0}", GetDataByKey(from, "Number"));
return empty + "--";
}
if (GetDataByKey(to, "Number").Length > 0)
{
empty = "--";
return empty + string.Format("{0}", GetDataByKey(to, "Number"));
}
return ResManager.LoadKDString("全部", "004021030004576", SubSystemType.SCM);
}
protected string GetDataByKey(DynamicObject dy, string key)
{
if (dy != null && dy[key] != null && !string.IsNullOrWhiteSpace(dy[key].ToString()))
{
return dy[key].ToString();
}
return string.Empty;
}
protected string GetPriceSource(int value)
{
string result = string.Empty;
switch ((StockRptEnums.Enu_QcSrcPrice)value)
{
case StockRptEnums.Enu_QcSrcPrice.KdNewInPrice:
result = ResManager.LoadKDString("最新入库成本价", "004021030004579", SubSystemType.SCM);
break;
case StockRptEnums.Enu_QcSrcPrice.KdNewOutPrice:
result = ResManager.LoadKDString("最新出库成本价", "004021030004582", SubSystemType.SCM);
break;
case StockRptEnums.Enu_QcSrcPrice.KdQcAvgPrice:
result = ResManager.LoadKDString("期初加权平均价", "004021030004585", SubSystemType.SCM);
break;
case StockRptEnums.Enu_QcSrcPrice.KdQmAvgPrice:
result = ResManager.LoadKDString("期末加权平均价", "004021000013839", SubSystemType.SCM);
break;
case StockRptEnums.Enu_QcSrcPrice.KdNextAvgPrice:
result = ResManager.LoadKDString("下期期初加权平均价", "004021030009057", SubSystemType.SCM);
break;
}
return result;
}
private string ReturnOwnerType(string type)
{
return type.ToUpperInvariant() switch
{
"BD_SUPPLIER" => ResManager.LoadKDString("供应商", "004021030004588", SubSystemType.SCM),
"BD_CUSTOMER" => ResManager.LoadKDString("客户", "004021030004591", SubSystemType.SCM),
_ => ResManager.LoadKDString("业务组织", "004021030004594", SubSystemType.SCM),
};
}
private void SetDecimalControlField()
{
base.ReportProperty.DecimalControlFieldList = new List<DecimalControlField>();
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FBaseQty",
DecimalControlFieldName = "FBASEPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FQTY",
DecimalControlFieldName = "FPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FSecQty",
DecimalControlFieldName = "FSECPRECISION"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FBasePrice",
DecimalControlFieldName = "FPriceDecimal"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FPrice",
DecimalControlFieldName = "FPriceDecimal"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FSecPrice",
DecimalControlFieldName = "FPriceDecimal"
});
base.ReportProperty.DecimalControlFieldList.Add(new DecimalControlField
{
ByDecimalControlFieldName = "FAmount",
DecimalControlFieldName = "FAmountDecimal"
});
}
public Dictionary<string, string> GetFlexValues(Context ctx, int type = 0)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
string strSQL = ((type == 0) ? $" SELECT FFLEXNUMBER AS FKey,LFL.FNAME AS FlexValue\r\n FROM T_BAS_FLEXVALUES LF\r\n LEFT JOIN T_BAS_FLEXVALUES_L LFL ON LF.FID=LFL.FID \r\n AND LFL.FLOCALEID = {ctx.UserLocale.LCID}\r\n WHERE FDOCUMENTSTATUS = 'C' AND FFLEXNUMBER <> ' ' ORDER BY LF.FID " : $" SELECT FFLEXNUMBER AS FKey,LFL.FNAME AS FlexValue\r\n FROM T_BD_FLEXAUXPROPERTY LF\r\n LEFT JOIN T_BD_FLEXAUXPROPERTY_L LFL ON LF.FID=LFL.FID \r\n AND LFL.FLOCALEID = {ctx.UserLocale.LCID}\r\n WHERE FDOCUMENTSTATUS = 'C' AND FFLEXNUMBER <> ' ' ORDER BY LF.FNUMBER ");
using IDataReader dataReader = DBUtils.ExecuteReader(ctx, strSQL);
while (dataReader.Read())
{
dictionary.Add(dataReader["FKey"].ToString(), dataReader["FlexValue"].ToString());
}
dataReader.Close();
return dictionary;
}
}
}