5024 lines
286 KiB
C#
5024 lines
286 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;
|
|
using Kingdee.BOS.App.Core;
|
|
|
|
namespace HUIWEI.STK_InvAgeAnalyzeRpt
|
|
{
|
|
[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;
|
|
|
|
protected ISCMServiceForFIN FlexService;
|
|
|
|
protected GetFlexStrValueArgs AuxArg;
|
|
|
|
protected GetFlexStrValueArgs LocArg;
|
|
|
|
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");
|
|
FlexService = Kingdee.K3.BD.Contracts.ServiceFactory.GetSCMServiceForFIN(base.Context);
|
|
AuxArg = FlexService.CreateFlexStrValueArg(base.Context, 1);
|
|
LocArg = FlexService.CreateFlexStrValueArg(base.Context, 0);
|
|
}
|
|
|
|
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"] = FlexService.GetAuxPropExtValues(base.Context, AuxArg, Convert.ToInt64(reportData.Rows[i]["FAUXPROPID"]));
|
|
}
|
|
|
|
if (reportData.Columns.Contains("FSTOCKLOCID") && reportData.Rows[i]["FSTOCKLOCID"] != DBNull.Value && Convert.ToInt64(reportData.Rows[i]["FSTOCKLOCID"]) >= 0)
|
|
{
|
|
if (reportData.Columns.Contains("FSTOCKID") && reportData.Rows[i]["FSTOCKID"] != DBNull.Value)
|
|
{
|
|
reportData.Rows[i]["FSTOCKLOC"] = FlexService.GetStockLocExtValues(base.Context, LocArg, Convert.ToInt64(reportData.Rows[i]["FSTOCKLOCID"]), Convert.ToInt64(reportData.Rows[i]["FSTOCKID"]));
|
|
}
|
|
else
|
|
{
|
|
reportData.Rows[i]["FSTOCKLOC"] = FlexService.GetStockLocExtValues(base.Context, LocArg, 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}(
|
|
FGuid INT,
|
|
FSTOCKORGID INT , --库存组织ID
|
|
FStockOrgNumber NVARCHAR (80), --库存组织编码
|
|
FStockOrgName NVARCHAR (80), --库存组织名称
|
|
FOWNERTYPEID VARCHAR (36), --货主类别ID
|
|
FOWNERTYPENAME NVARCHAR (100),
|
|
FOWNERID INT,
|
|
FOwnerNumber NVARCHAR (100), --货主编码
|
|
FOwnerName NVARCHAR (255), --货主名称
|
|
FKEEPERTYPEID VARCHAR (36), --保管者类型
|
|
FKEEPERID INT, --保管者
|
|
FKEEPERNAME NVARCHAR (255), --保管者名称
|
|
FCATEGORYID INT, --存货类别ID
|
|
FMaterialTypeName NVARCHAR (100), --存货类别名称
|
|
FMATERIALID INT, --物料ID
|
|
FMaterialNumber NVARCHAR (80), --物料编码
|
|
FMaterialName NVARCHAR (255), --物料名称
|
|
FMaterialModel NVARCHAR (510), --规格型号
|
|
FLotID INT, --批号主档ID
|
|
FLotNo NVARCHAR (255), --批号
|
|
FBOMID INT,
|
|
FBOMNumber NVARCHAR (80), --BOMID
|
|
FMTONO NVARCHAR(255), --计划跟踪号
|
|
FPROJECTNO NVARCHAR(255), --项目编号
|
|
FAuxPropId INT, --辅助属性(注意)
|
|
FSTOCKID INT, --仓库ID
|
|
FPRODUCEDATE DATETIME NULL, --生成日期
|
|
FEXPIRYDATE DATETIME NULL, --有效期
|
|
FErpClsID INT, --物料属性
|
|
FMaterialGroup INT, --物料分组
|
|
FMaterialGroup_FNumber NVARCHAR (255), --物料分组名称
|
|
FMaterialGroupName NVARCHAR (255), --物料分组名称
|
|
FStockNumber NVARCHAR (80), --仓库编码
|
|
FStockName NVARCHAR (80), --仓库名称
|
|
FSTOCKSTATUSID INT, --库存状态
|
|
FSTOCKSTATUSNUMBER NVARCHAR (80), --库存状态编码
|
|
FSTOCKSTATUSNAME NVARCHAR (80), --库存状态名称
|
|
FStockLocId INT, --仓位ID(注意)
|
|
FSTOCKLOC NVARCHAR (300), --仓位
|
|
FBASEUNITID INT, --基本单位ID
|
|
FBaseUnitName NVARCHAR (80), --基本单位
|
|
FUnitID INT, --库存单位ID
|
|
FUnitName NVARCHAR (80), --库存单位
|
|
FSECUNITID INT, --辅助单位ID
|
|
FSecUnitName NVARCHAR (80), --辅助单位
|
|
FBASEQTY DECIMAL (23, 10), --基本数量
|
|
FQTY DECIMAL (23, 10), --库存数量
|
|
FSECQTY DECIMAL (23, 10), --辅助单位数量
|
|
FPRECISION INT, --单位精度
|
|
FBASEPRECISION INT, --基本单位精度
|
|
FSECPRECISION INT --辅助单位精度
|
|
);");
|
|
list.Add($@"CREATE TABLE {_tmpStockBillTb}(
|
|
FROWNO INT NOT NULL DEFAULT(0),
|
|
FGUID INT NOT NULL DEFAULT(0),
|
|
FFormId VARCHAR (36) ,---单据类型(FormId)
|
|
FCreateDate DATETIME, --单据日期
|
|
FBillDate DATETIME, --单据日期
|
|
FMATERIALID INT, --物料ID
|
|
FSTOCKORGID INT, --库存组织ID
|
|
FOWNERTYPEID VARCHAR (36), --货主类型ID
|
|
FOWNERID INT, --货主ID
|
|
FKEEPERTYPEID VARCHAR (36), --保管者类别ID
|
|
FKEEPERID INT, --保管者ID
|
|
FSTOCKID INT, --仓库ID
|
|
FSTOCKLOC INT, --仓位
|
|
FSTOCKSTATUSID INT, --库存状态
|
|
FAuxPropId INT, --辅助属性
|
|
FLOTID INT, --批号
|
|
FPRODUCEDATE DATETIME, --生产日期
|
|
FEXPIRYDATE DATETIME, --有效期至
|
|
FBOMID INT, --BOMID
|
|
FMTONO NVARCHAR(255), --计划跟踪号
|
|
FPROJECTNO NVARCHAR(255), --项目编号
|
|
FBASEUNITID INT, --基本单位ID
|
|
FBASEQTY DECIMAL (23, 10), --基本单位数量
|
|
FUNITID INT, --库存单位
|
|
FQTY DECIMAL (23, 10), --库存单位数量
|
|
FSECUNITID INT, --辅助单位
|
|
FSECQTY DECIMAL (23, 10), --辅助单位数量
|
|
FPrice DECIMAL (23, 10), --基本单位单价
|
|
FAMOUNT DECIMAL (23, 10), --金额
|
|
FLOCALCURRID INT, --本位币
|
|
FAGEDAYS varchar(10) , ---账龄天数
|
|
FAGEDAYSINT INT , ---账龄天数
|
|
FQTYADDOPTION INT --更新库存方向
|
|
)");
|
|
list.Add($@"CREATE TABLE {_tmpConvertStockBillTb}(
|
|
FFormId VARCHAR (36) ,---单据类型(FormId)
|
|
FBillDate DATETIME, --单据日期
|
|
FMATERIALID INT, --物料ID
|
|
FSTOCKORGID INT, --库存组织ID
|
|
FOWNERTYPEID VARCHAR (36), --货主类型ID
|
|
FOWNERID INT, --货主ID
|
|
FKEEPERTYPEID VARCHAR (36), --保管者类别ID
|
|
FKEEPERID INT, --保管者ID
|
|
FSTOCKID INT, --仓库ID
|
|
FSTOCKLOC INT, --仓位
|
|
FSTOCKSTATUSID INT, --库存状态
|
|
FAuxPropId INT, --辅助属性
|
|
FLOTID INT, --批号
|
|
FPRODUCEDATE DATETIME, --生产日期
|
|
FEXPIRYDATE DATETIME, --有效期至
|
|
FBOMID INT, --BOMID
|
|
FMTONO NVARCHAR(255), --计划跟踪号
|
|
FPROJECTNO NVARCHAR(255), --项目编号
|
|
FBASEUNITID INT, --基本单位ID
|
|
FBASEQTY DECIMAL (23, 10), --基本单位数量
|
|
FUNITID INT, --库存单位
|
|
FQTY DECIMAL (23, 10), --库存单位数量
|
|
FSECUNITID INT, --辅助单位
|
|
FSECQTY DECIMAL (23, 10), --辅助单位数量
|
|
FPrice DECIMAL (23, 10), --基本单位单价
|
|
FAMOUNT DECIMAL (23, 10), --金额
|
|
FLOCALCURRID INT, --本位币
|
|
FQTYADDOPTION INT, --更新库存方向
|
|
--调出方的数据
|
|
FOutSTOCKORGID INT, --库存组织ID
|
|
FOutOWNERTYPEID VARCHAR (36), --货主类型ID
|
|
FOutOWNERID INT, --货主ID
|
|
FOutKEEPERTYPEID VARCHAR (36), --保管者类别ID
|
|
FOutKEEPERID INT, --保管者ID
|
|
FOutSTOCKID INT, --仓库ID
|
|
FOutSTOCKLOC INT, --仓位
|
|
FOutSTOCKSTATUSID INT, --库存状态
|
|
FOutAuxPropId INT, --辅助属性
|
|
FOutLOTID INT, --批号
|
|
FOutPRODUCEDATE DATETIME, --生产日期
|
|
FOutEXPIRYDATE DATETIME --有效期至
|
|
)");
|
|
list.Add($@"CREATE TABLE {_tmpQcpTable}(
|
|
FSTOCKORGID INT, --库存组织
|
|
FMATERIALID INT, --物料编码
|
|
FCARGOOWNERTYPE VARCHAR (36), --货主类别
|
|
FCARGOOWNERID INT, --货主
|
|
FSTOCKID INT, --仓库
|
|
FSTOCKLOCID INT, --仓位
|
|
FSTOCKSTATUSID INT, --库存状态
|
|
FAUXPROPID INT, --辅助属性
|
|
FBOMID INT, --bomID
|
|
FLotID INT, --批号
|
|
FAMOUNT DECIMAL (23, 10),
|
|
FQTY DECIMAL (23, 10),
|
|
FPRICEDIGITS INT,
|
|
FAMOUNTDIGITS INT,
|
|
FMTONO NVARCHAR(255) NULL DEFAULT(' ')
|
|
)");
|
|
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
|
|
FROM T_STK_CLOSEPROFILE
|
|
WHERE FORGID IN ({_stkOrgIdCollect}) AND FCATEGORY = 'STK' AND FCLOSEDATE<{queryDate.ToKSQlFormat()}
|
|
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,
|
|
FSTOCKORGID , --库存组织ID
|
|
FStockOrgNumber, --库存组织编码
|
|
FStockOrgName, --库存组织名称
|
|
FOWNERTYPEID, --货主类别ID
|
|
FOWNERTYPENAME,
|
|
FOWNERID,
|
|
FOwnerNumber, --货主编码
|
|
FOwnerName, --货主名称
|
|
FKEEPERTYPEID, --保管者类型
|
|
FKEEPERID, --保管者
|
|
-- FKEEPERNAME, --保管者名称
|
|
FMATERIALID, --物料ID
|
|
FMaterialNumber, --物料编码
|
|
FMaterialName, --物料名称
|
|
FMaterialModel, --规格型号
|
|
FERPCLSID,
|
|
FLotID, --批号主档ID
|
|
FLotNo, --批号
|
|
FBOMID,
|
|
FBOMNumber, --BOMID
|
|
FMTONO, --计划跟踪号
|
|
FPROJECTNO , --项目编号
|
|
FAuxPropId, --辅助属性(注意)
|
|
FSTOCKID, --仓库ID
|
|
FPRODUCEDATE, --生成日期
|
|
FEXPIRYDATE, --有效期
|
|
FStockNumber, --仓库编码
|
|
FStockName, --仓库名称
|
|
FSTOCKSTATUSID, --库存状态
|
|
FSTOCKSTATUSNUMBER, --库存状态编码
|
|
FSTOCKSTATUSNAME, --库存状态名称
|
|
FStockLocId, --仓位ID(注意)
|
|
FSTOCKLOC, --仓位
|
|
FBASEUNITID, --基本单位ID
|
|
FBaseUnitName, --基本单位
|
|
FUnitID, --库存单位ID
|
|
FUnitName, --库存单位
|
|
FSECUNITID, --辅助单位ID
|
|
FSecUnitName, --辅助单位
|
|
FBASEQTY, --基本数量
|
|
FQTY, --库存数量
|
|
FSECQTY, --辅助单位数量
|
|
// FCATEGORYID, --库存类别
|
|
FPRECISION,FBASEPRECISION,FSECPRECISION", _tmpInvTable);
|
|
stringBuilder2 = stringBuilder2.AppendFormat(@" SELECT ROW_NUMBER() OVER(ORDER BY VO.FITEMID) AS FGuid,
|
|
I.FSTOCKORGID, --库存组织ID
|
|
O.FNUMBER AS FStockOrgNumber, --库存组织编码
|
|
OL.FNAME AS FStockOrgName, --库存组织名称
|
|
I.FOWNERTYPEID AS FOwnerTypeId, --货主类别ID
|
|
TMOL.FNAME AS FOWNERTYPENAME,
|
|
VO.FITEMID AS FOWNERID, --货主ID
|
|
VO.FNUMBER AS FOwnerNumber, --货主编码
|
|
VO_L.FNAME AS FOwnerName, --货主名称
|
|
I.FKEEPERTYPEID, --保管者类型
|
|
VK.FITEMID AS FKEEPERID, --保管者 原来用I.FKEEPERID
|
|
M.FMATERIALID, --物料ID
|
|
M.FNUMBER AS FMaterialNumber, --物料编码
|
|
ML.FNAME AS FMaterialName, --物料名称
|
|
ML.FSPECIFICATION AS FMaterialModel, --规格型号
|
|
MB.FERPCLSID,
|
|
I.FLOT AS FLotID, --批号主档ID
|
|
LT.FNUMBER AS FLotNo, --批号
|
|
ISNULL(EM.FID,0) AS FBOMID,
|
|
EM.FNUMBER AS FBOMNumber, --BOMID
|
|
I.FMTONO, --计划跟踪号
|
|
I.FPROJECTNO , --项目编号
|
|
I.FAUXPROPID AS FAuxPropId, --辅助属性(注意)
|
|
I.FSTOCKID, --仓库ID
|
|
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,--生成日期
|
|
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,--有效期
|
|
SK.FNUMBER AS FStockNumber, --仓库编码
|
|
SL.FNAME AS FStockName, --仓库名称
|
|
I.FSTOCKSTATUSID, --库存状态
|
|
ST.FNUMBER AS FSTOCKSTATUSNUMBER, --库存状态编码
|
|
STL.FNAME AS FSTOCKSTATUSNAME, --库存状态名称
|
|
I.FSTOCKLOCID AS FStockLocId, --仓位ID(注意)
|
|
{0} AS FSTOCKLOC, --仓位
|
|
I.FBASEUNITID, --基本单位ID
|
|
BUL.FNAME AS FBaseUnitName, --基本单位
|
|
I.FSTOCKUNITID AS FUnitID, --库存单位ID
|
|
UL.FNAME AS FUnitName, --库存单位
|
|
I.FSECUNITID, --辅助单位ID
|
|
SUL.FNAME AS FSecUnitName, --辅助单位
|
|
I.FBASEQTY, --基本数量
|
|
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, --库存数量
|
|
I.FSECQTY, --辅助单位数量
|
|
ISNULL(UU.FPRECISION,2) AS FPRECISION,
|
|
ISNULL(BU.FPRECISION,2) AS FBASEPRECISION,
|
|
ISNULL(SU.FPRECISION,2) AS FSECPRECISION", "' '");
|
|
stringBuilder3 = stringBuilder3.AppendFormat(@" FROM {6} I --即时库存
|
|
INNER JOIN T_ORG_ORGANIZATIONS O ON O.FORGID=I.FSTOCKORGID --机构
|
|
LEFT JOIN T_ORG_ORGANIZATIONS_L OL ON O.FORGID=OL.FORGID AND OL.FLOCALEID={0} --机构名称
|
|
INNER JOIN T_BD_MATERIAL M ON I.FMATERIALID = M.FMASTERID {2}
|
|
LEFT JOIN T_BD_MATERIAL_L ML ON M.FMATERIALID=ML.FMATERIALID AND ML.FLOCALEID={0} --物料名称、规格型号
|
|
INNER JOIN T_BD_MATERIALBASE MB ON M.FMATERIALID=MB.FMATERIALID
|
|
INNER JOIN T_BD_UNIT BU ON I.FBASEUNITID=BU.FUNITID --基本单位
|
|
LEFT JOIN T_BD_UNIT_L BUL ON I.FBASEUNITID=BUL.FUNITID AND BUL.FLOCALEID={0} --基本单位名称
|
|
LEFT JOIN T_BD_UNIT_L UL ON I.FSTOCKUNITID=UL.FUNITID AND UL.FLOCALEID={0} --库存单位名称
|
|
LEFT JOIN T_BD_UNIT_L SUL ON I.FSECUNITID=SUL.FUNITID AND SUL.FLOCALEID={0} --辅助单位名称
|
|
LEFT JOIN T_BD_UNIT UU ON I.FSTOCKUNITID=UU.FUNITID --库存单位
|
|
LEFT JOIN T_BD_UNIT SU ON I.FSECUNITID=SU.FUNITID --辅助单位
|
|
INNER JOIN T_BD_STOCK SK ON I.FSTOCKID = SK.FSTOCKID {3}
|
|
LEFT JOIN T_BD_STOCK_L SL ON SK.FSTOCKID=SL.FSTOCKID AND SL.FLOCALEID={0} --仓库名称
|
|
LEFT JOIN T_BD_LOTMASTER LT ON I.FLOT=LT.FMASTERID --批号
|
|
{4}--货主
|
|
|
|
LEFT JOIN T_META_OBJECTTYPE_L TMOL ON I.FOWNERTYPEID=TMOL.FID AND TMOL.FLOCALEID= {0}
|
|
LEFT JOIN T_BD_STOCKSTATUS AS ST ON ST.FSTOCKSTATUSID=I.FSTOCKSTATUSID
|
|
LEFT JOIN T_BD_STOCKSTATUS_L AS STL ON STL.FSTOCKSTATUSID=I.FSTOCKSTATUSID AND STL.FLOCALEID={0}--库存状态名称
|
|
LEFT JOIN T_ENG_BOM EM ON I.FBOMID = EM.FMASTERID {5}
|
|
{1}
|
|
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 = $" AND E.FMATERIALID IN (SELECT FMATERIALID FROM {_tmpInvTable}) ";
|
|
List<SqlObject> list = new List<SqlObject>();
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
stringBuilder.AppendFormat(@"SELECT
|
|
--T.FOBJECTTYPEID AS FFormId, --单据类型(FormId)
|
|
'STK_INSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID AS FMATERIALID, --物料ID
|
|
T.FStockOrgId AS FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID AS FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID AS FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID AS FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID AS FKEEPERID, --保管者ID
|
|
E.FSTOCKID AS FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID AS FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID AS FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID AS FAUXPROPERTYID, --辅助属性
|
|
E.FLOT AS FLOT, --批号
|
|
E.FPRODUCEDATE AS FPRODUCTDATE, --生产日期
|
|
E.FEXPIRYDATE AS FVALIDATETO, --有效期至
|
|
E.FBOMID AS FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO, --计划跟踪号
|
|
E.FBASEUNITID AS FBASEUNITID, --基本单位ID
|
|
E.FBASEUNITQTY AS FBASEQTY, --基本单位数量
|
|
E.FUNITID AS FUNITID, --库存单位
|
|
E.FREALQTY AS FQTY, --库存单位数量
|
|
E.FAUXUNITID AS FSECUNITID, --辅助单位
|
|
E.FAuxUnitQty AS FSECQTY, --辅助单位数量
|
|
F.FCostPrice*FExchangeRate AS FPrice, --基本单位单价
|
|
S.FBillAmount_LC AS FAMOUNT, --金额
|
|
S.FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_INSTOCK T
|
|
INNER JOIN t_STK_InStockFin S ON T.FID=S.FID
|
|
INNER JOIN T_STK_INSTOCKENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_INSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND E.FSTOCKFLAG='1' AND S.FISGENFORIOS = '0'
|
|
{2}
|
|
{3}
|
|
{4}
|
|
UNION ALL
|
|
SELECT
|
|
--T.FOBJECTTYPEID AS FFormId, --单据类型(FormId)
|
|
'STK_INSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FRECEIVEOWNERTYPEID, --货主类型ID
|
|
E.FRECEIVEOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FRECEIVESTOCKSTATUS, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FRECEIVEMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEUNITQTY, --基本单位数量
|
|
E.FUNITID AS FUNITID, --库存单位
|
|
E.FREALQTY AS FQTY, --库存单位数量
|
|
E.FAUXUNITID AS FSECUNITID, --辅助单位
|
|
E.FAuxUnitQty AS FSECQTY, --辅助单位数量
|
|
F.FCostPrice*FExchangeRate AS FPrice, --基本单位单价
|
|
S.FBillAmount_LC AS FAMOUNT, --金额
|
|
S.FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_INSTOCK T
|
|
INNER JOIN t_STK_InStockFin S ON T.FID=S.FID
|
|
INNER JOIN T_STK_INSTOCKENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_INSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND E.FReceiveStockFlag='1'AND FReceiveStockStatus<>null AND S.FISGENFORIOS = '0'
|
|
{2}
|
|
{3}
|
|
{5} ", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'PUR_RECEIVEBILL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEUNITQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FACTLANDQTY,
|
|
E.FAUXUNITID AS FSECUNITID, --辅助单位
|
|
E.FAuxUnitQty AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_PUR_Receive T
|
|
INNER JOIN T_PUR_RECEIVEENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_PUR_RECEIVEENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'SAL_RETURNSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate, --入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEUNITQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FREALQTY,
|
|
E.FAUXUNITID AS FSECUNITID, --辅助单位
|
|
E.FAuxUnitQty AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SAL_RETURNSTOCK T
|
|
INNER JOIN T_SAL_RETURNSTOCKENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_SAL_RETURNSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID
|
|
INNER JOIN T_SAL_RETURNSTOCKFIN S ON T.FID = S.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND S.FISGENFORIOS = '0'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'PRD_INSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBaseRealQty, --基本单位数量
|
|
E.FUNITID,
|
|
E.FREALQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSecRealQty AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCurrId,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_PRD_INSTOCK T
|
|
INNER JOIN T_PRD_INSTOCKENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND T.FENTRUSTINSTOCKID = 0
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'PRD_RETURNMTRL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
EA.FBASESTOCKQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FSTOCKQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECSTOCKQTY AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_PRD_RETURNMTRL T
|
|
INNER JOIN T_PRD_RETURNMTRLENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_PRD_RETURNMTRLENTRY_A EA ON E.FENTRYID=EA.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
string sql = $@"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,
|
|
FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,
|
|
FUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FQTYADDOPTION)
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,
|
|
-1 AS FGUID,
|
|
FFormId, --单据类型(FormId)
|
|
FCreateDate,
|
|
FBillDate, --单据日期
|
|
FMATERIALID, --物料ID
|
|
FSTOCKORGID, --库存组织ID
|
|
FOWNERTYPEID, --货主类型ID
|
|
FOWNERID, --货主ID
|
|
FKEEPERTYPEID, --保管者类别ID
|
|
FKEEPERID, --保管者ID
|
|
FSTOCKID, --仓库ID
|
|
ISNULL(FSTOCKPLACEID,0), --仓位
|
|
FSTOCKSTATUSID, --库存状态
|
|
ISNULL(FAUXPROPERTYID,0), --辅助属性
|
|
FLOT, --批号
|
|
TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期
|
|
TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至
|
|
ISNULL(FBOMID,0), --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO ,
|
|
FBASEUNITID, --基本单位ID
|
|
FBASEQTY, --基本单位数量
|
|
FUNITID,
|
|
FQTY,
|
|
FSECUNITID, --辅助单位
|
|
FSECQTY, --辅助单位数量
|
|
FPrice, --基本单位单价
|
|
FAMOUNT, --金额
|
|
FLOCALCURRID,
|
|
'',
|
|
FQTYADDOPTION --更新库存方向
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
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
|
|
'SP_INSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID , --库存状态
|
|
E.FAUXPROPID FAUXPROPERTYID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE FPRODUCTDATE, --生产日期
|
|
E.FEXPIRYDATE FVALIDATETO, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
N' ' AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBaseRealQty FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FREALQTY FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSecRealQty AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCURRID FLOCALCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SP_InStock T
|
|
INNER JOIN T_SP_InStockENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'SP_RETURNMTRL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
N' ' AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECSTOCKQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SP_ReturnMtrl T
|
|
INNER JOIN T_SP_ReturnMtrlENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_MISCELLANEOUS' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPrice AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FCURRENCYID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_MISCELLANEOUS T
|
|
INNER JOIN T_STK_MISCELLANEOUSENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FSTOCKFLAG=1 AND FStockDirect ='GENERAL'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_MISDELIVERY' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_MisDelivery T
|
|
INNER JOIN T_STK_MisDeliveryENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1' AND FStockDirect ='RETURN'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_TRANSFERIN' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FDESTSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID, --仓位
|
|
E.FDESTSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FDESTLOT AS FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_STKTRANSFERIN T
|
|
INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FOBJECTTYPEID='STK_TRANSFERIN'
|
|
AND FStockInFlag='1' AND T.FISGENFORIOS = '0'
|
|
{2}
|
|
{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,
|
|
FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,
|
|
FUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,
|
|
-1 AS FGUID,
|
|
FFormId, --单据类型(FormId)
|
|
FCreateDate,
|
|
FBillDate, --单据日期
|
|
FMATERIALID, --物料ID
|
|
FSTOCKORGID, --库存组织ID
|
|
FOWNERTYPEID, --货主类型ID
|
|
FOWNERID, --货主ID
|
|
FKEEPERTYPEID, --保管者类别ID
|
|
FKEEPERID, --保管者ID
|
|
FSTOCKID, --仓库ID
|
|
ISNULL(FSTOCKPLACEID,0), --仓位
|
|
FSTOCKSTATUSID, --库存状态
|
|
ISNULL(FAUXPROPERTYID,0), --辅助属性
|
|
FLOT, --批号
|
|
TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期
|
|
TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至
|
|
ISNULL(FBOMID,0), --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO ,
|
|
FBASEUNITID, --基本单位ID
|
|
FBASEQTY, --基本单位数量
|
|
FUNITID,
|
|
FQTY,
|
|
FSECUNITID, --辅助单位
|
|
FSECQTY, --辅助单位数量
|
|
FPrice, --基本单位单价
|
|
FAMOUNT, --金额
|
|
FLOCALCURRID,
|
|
'',
|
|
99999 AS FAGEDAYSINT,
|
|
FQTYADDOPTION --更新库存方向
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
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
|
|
'STK_ASSEMBLEDAPP' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FStockLocId FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID FAUXPROPERTYID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE FPRODUCTDATE, --生产日期
|
|
E.FEXPIRYDATE FVALIDATETO, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
CASE WHEN FAffairType ='Dassembly' THEN 0 ELSE 1 END AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_ASSEMBLY T
|
|
INNER JOIN T_STK_ASSEMBLYPRODUCT E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}
|
|
UNION ALL
|
|
SELECT
|
|
'STK_ASSEMBLEDAPP' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FINSTOCKDATE IS NULL OR E.FINSTOCKDATE > T.FDATE THEN T.FDATE ELSE E.FINSTOCKDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FStockLocId FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
CASE WHEN FAffairType ='Dassembly' THEN 1 ELSE 0 END AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_ASSEMBLY T
|
|
INNER JOIN T_STK_ASSEMBLYPRODUCT C ON T.FID=C.FID
|
|
INNER JOIN T_STK_ASSEMBLYSUBITEM E ON C.FENTRYID=E.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND E.FSTOCKFLAG='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_OEMINSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_OEMInStock T
|
|
INNER JOIN T_STK_OEMInStockENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_INVINIT' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FSTOCKINDATE IS NULL OR E.FSTOCKINDATE > TSTT.FVALUE THEN TSTT.FVALUE ELSE E.FSTOCKINDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
T.FKEEPERTYPEID, --保管者类别ID
|
|
T.FKEEPERID, --保管者ID
|
|
T.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
0 AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_InvInit T
|
|
INNER JOIN T_STK_INVINITDETAIL E ON T.FID=E.FID
|
|
INNER JOIN (SELECT FORGID, TO_DATE(FVALUE,'yyyy-MM-dd') - 1 AS FVALUE FROM T_BAS_SYSTEMPROFILE
|
|
WHERE FCATEGORY = 'STK' AND FKEY = 'STARTSTOCKDATE' AND FVALUE <> '{5}' AND FORGID IN ({4})) TSTT ON T.FStockOrgId = TSTT.FORGID
|
|
{0}
|
|
{1}
|
|
|
|
WHERE (CASE WHEN E.FSTOCKINDATE IS NULL OR E.FSTOCKINDATE > TSTT.FVALUE THEN TSTT.FVALUE ELSE E.FSTOCKINDATE END) >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{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
|
|
SELECT
|
|
'STK_STOCKCOUNTGAIN' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEGAINQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FGAINQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECGAINQTY AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FBASECURRID AS FLOCALCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_STKCOUNTGAIN T
|
|
INNER JOIN T_STK_STKCOUNTGAINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1'
|
|
{2}
|
|
{3}
|
|
{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
|
|
SELECT
|
|
'STK_TransferDirect' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID AS FMATERIALID, --物料ID
|
|
T.FStockOrgId AS FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID AS FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID AS FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID AS FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID AS FKEEPERID, --保管者ID
|
|
E.FDESTSTOCKID AS FSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID AS FSTOCKLOC, --仓位
|
|
E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID AS FAuxPropId, --辅助属性
|
|
E.FDESTLOT AS FLOTID, --批号
|
|
E.FPRODUCEDATE AS FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE AS FEXPIRYDATE, --有效期至
|
|
E.FBOMID AS FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID AS FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY AS FBASEQTY, --基本单位数量
|
|
E.FUNITID AS FUNITID,
|
|
E.FQTY AS FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
T.FBaseCurrID AS FLOCALCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
|
|
FROM T_STK_STKTRANSFERIN T
|
|
INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE T.FDATE >= @MinDate AND FOBJECTTYPEID='STK_TransferDirect' AND FStockInFlag='1'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{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.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,
|
|
FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,
|
|
FUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,
|
|
-1 AS FGUID,
|
|
FFormId, --单据类型(FormId)
|
|
FCreateDate,
|
|
FBillDate, --单据日期
|
|
FMATERIALID, --物料ID
|
|
FSTOCKORGID, --库存组织ID
|
|
FOWNERTYPEID, --货主类型ID
|
|
FOWNERID, --货主ID
|
|
FKEEPERTYPEID, --保管者类别ID
|
|
FKEEPERID, --保管者ID
|
|
FSTOCKID, --仓库ID
|
|
ISNULL(FSTOCKPLACEID,0), --仓位
|
|
FSTOCKSTATUSID, --库存状态
|
|
ISNULL(FAUXPROPERTYID,0), --辅助属性
|
|
FLOT, --批号
|
|
TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期
|
|
TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至
|
|
ISNULL(FBOMID,0), --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO ,
|
|
FBASEUNITID, --基本单位ID
|
|
FBASEQTY, --基本单位数量
|
|
FUNITID,
|
|
FQTY,
|
|
FSECUNITID, --辅助单位
|
|
FSECQTY, --辅助单位数量
|
|
FPrice, --基本单位单价
|
|
FAMOUNT, --金额
|
|
FLOCALCURRID,
|
|
'',
|
|
99999 AS FAGEDAYSINT,
|
|
FQTYADDOPTION --更新库存方向
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
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
|
|
'STK_STATUSCONVERT' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID FAUXPROPERTYID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE FPRODUCTDATE, --生产日期
|
|
E.FEXPIRYDATE FVALIDATETO, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FCONVERTQTY FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID FLOCALCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_StatusConvert T
|
|
INNER JOIN T_STK_StatusConvertEntry E ON T.FID=E.FID
|
|
INNER JOIN T_STK_StatusConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
{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
|
|
SELECT
|
|
'STK_STOCKCONVERT' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FCONVERTQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
|
|
FROM T_STK_StockConvert T
|
|
INNER JOIN T_STK_StockConvertEntry E ON T.FID=E.FID
|
|
INNER JOIN T_STK_StockConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
{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
|
|
SELECT
|
|
'STK_LOTADJUST' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN E.FBUSINESSDATE IS NULL OR E.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE E.FBUSINESSDATE END AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQty,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_LOTADJUST T
|
|
INNER JOIN T_STK_LOTADJUSTENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_LOTADJUSTENTRY OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE T.FDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
{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
|
|
SELECT
|
|
'REM_INSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBaseRealQty, --基本单位数量
|
|
E.FUNITID,
|
|
E.FREALQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSecRealQty AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCurrId,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_REM_INSTOCK T
|
|
INNER JOIN T_REM_INSTOCKENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'REM_ReturnMtrl' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
EA.FBASESTOCKQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FSTOCKQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECSTOCKQTY AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_REM_RETURNMTRL T
|
|
INNER JOIN T_REM_RETURNMTRLENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_REM_RETURNMTRLENTRY_A EA ON E.FENTRYID=EA.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@" UNION ALL
|
|
SELECT
|
|
'REM_TransferDirect' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID AS FMATERIALID, --物料ID
|
|
T.FStockOrgId AS FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID AS FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID AS FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID AS FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID AS FKEEPERID, --保管者ID
|
|
E.FDESTSTOCKID AS FSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID AS FSTOCKLOC, --仓位
|
|
E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID AS FAuxPropId, --辅助属性
|
|
E.FLOT AS FLOTID, --批号
|
|
E.FPRODUCEDATE AS FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE AS FEXPIRYDATE, --有效期至
|
|
E.FBOMID AS FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID AS FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY AS FBASEQTY, --基本单位数量
|
|
E.FUNITID AS FUNITID,
|
|
E.FQTY AS FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
T.FBaseCurrID AS FLOCALCURRID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
|
|
FROM T_REM_STKTRANSFERIN T
|
|
INNER JOIN T_REM_STKTRANSFERINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE T.FDATE >= @MinDate AND FStockInFlag='1'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{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
|
|
SELECT
|
|
'SUB_RETURNMTRL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --创建日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
A.FMTONO AS FMTONO, --#计划跟踪号
|
|
A.FPROJECTNO AS FPROJECTNO, --项目编号
|
|
E.FBASEUNITID, --#基本单位ID
|
|
E.FBASESTOCKQTY, --#基本单位数量
|
|
E.FUNITID,
|
|
E.FSTOCKQTY, --#实退数量
|
|
E.FSecUnitId AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPrice, --基本单位单价
|
|
E.FAMOUNT, --金额
|
|
T.FCURRID, --本位币
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SUB_RETURNMTRL T
|
|
INNER JOIN T_SUB_RETURNMTRLENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_SUB_RETURNMTRLENTRY_A A ON A.FENTRYID=E.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FSTOCKFLAG='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, _preStockJoinSql, _preFilter, _dateFilter, text).AppendLine();
|
|
sql = $@"INSERT INTO {_tmpStockBillTb}(FROWNO,FGUID,FFORMID,FCREATEDATE,FBILLDATE,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,
|
|
FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,
|
|
FUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,
|
|
-1 AS FGUID,
|
|
FFormId, --单据类型(FormId)
|
|
FCreateDate,
|
|
FBillDate, --单据日期
|
|
FMATERIALID, --物料ID
|
|
FSTOCKORGID, --库存组织ID
|
|
FOWNERTYPEID, --货主类型ID
|
|
FOWNERID, --货主ID
|
|
FKEEPERTYPEID, --保管者类别ID
|
|
FKEEPERID, --保管者ID
|
|
FSTOCKID, --仓库ID
|
|
ISNULL(FSTOCKPLACEID,0), --仓位
|
|
FSTOCKSTATUSID, --库存状态
|
|
ISNULL(FAUXPROPERTYID,0), --辅助属性
|
|
FLOT, --批号
|
|
TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期
|
|
TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至
|
|
ISNULL(FBOMID,0), --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO ,
|
|
FBASEUNITID, --基本单位ID
|
|
FBASEQTY, --基本单位数量
|
|
FUNITID,
|
|
FQTY,
|
|
FSECUNITID, --辅助单位
|
|
FSECQTY, --辅助单位数量
|
|
FPrice, --基本单位单价
|
|
FAMOUNT, --金额
|
|
FLOCALCURRID,
|
|
'',
|
|
99999 AS FAGEDAYSINT,
|
|
FQTYADDOPTION --更新库存方向
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
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
|
|
'SAL_OUTSTOCK' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID FSTOCKPLACEID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID FAUXPROPERTYID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE FPRODUCTDATE, --生产日期
|
|
E.FEXPIRYDATE FVALIDATETO, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEUNITQTY FBASEQTY, --基本单位数量
|
|
E.FUNITID ,
|
|
E.FREALQTY FQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FAUXUNITQTY AS FSECQTY, --辅助单位数量
|
|
F.FCostPrice AS FPrice, --基本单位单价
|
|
F.FAMOUNT AS FAMOUNT, --金额
|
|
TSF.FLocalCurrID,
|
|
0 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SAL_OUTSTOCK T
|
|
INNER JOIN T_SAL_OUTSTOCKFIN TSF ON T.FID=TSF.FID
|
|
INNER JOIN T_SAL_OUTSTOCKENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_SAL_OUTSTOCKENTRY_F F ON E.FENTRYID=F.FENTRYID AND F.FID=T.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND TSF.FISGENFORIOS = '0'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'PRD_PICKMTRL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
F.FOWNERTYPEID, --货主类型ID
|
|
F.FOWNERID, --货主ID
|
|
F.FKEEPERTYPEID, --保管者类别ID
|
|
F.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBaseActualQty, --基本单位数量
|
|
E.FUNITID,
|
|
E.FActualQty,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSecActualQty AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FCurrId,
|
|
0 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_PRD_PickMtrl T
|
|
INNER JOIN T_PRD_PICKMTRLDATA E ON T.FID=E.FID
|
|
INNER JOIN T_PRD_PICKMTRLDATA_A F ON F.FID=T.FID AND F.FENTRYID=E.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_MISDELIVERY' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
T.FOWNERTYPEID, --货主类型ID
|
|
T.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrId,
|
|
0 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_MisDelivery T
|
|
INNER JOIN T_STK_MISDELIVERYENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1' AND FStockDirect = 'GENERAL'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'SP_PICKMTRL' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
N' ' AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEACTUALQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FACTUALQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECACTUALQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FCurrId,
|
|
0 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_SP_PICKMTRL T
|
|
INNER JOIN T_SP_PICKMTRLDATA E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{4}", _preMaterialJoinSql, GetStockPreJoinSql("E", "FSTOCKID", "SK"), GetPreFilter("T.FStockOrgId", "M.FNUMBER", "SK.FNUMBER", "E.FLOT_TEXT"), _dateFilter, text).AppendLine();
|
|
stringBuilder.AppendFormat(@"UNION ALL
|
|
SELECT
|
|
'STK_TRANSFEROUT' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN ET.FBUSINESSDATE IS NULL OR ET.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE ET.FBUSINESSDATE END AS FBillDate, --单据日期
|
|
E.FDESTMATERIALID, --物料ID
|
|
T.FSTOCKINORGID, --库存组织ID
|
|
E.FOWNERTYPEINID, --货主类型ID
|
|
E.FOWNERINID, --货主ID
|
|
E.FKEEPERTYPEINID, --保管者类别ID
|
|
E.FKEEPERINID, --保管者ID
|
|
E.FDESTSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID, --仓位
|
|
E.FDESTSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FDESTLOT, --批号
|
|
E.FDESTPRODUCEDATE, --生产日期
|
|
E.FDESTEXPIRYDATE, --有效期至
|
|
E.FDESTBOMID, --BOMID
|
|
E.FDESTMTONO AS FMTONO, --计划跟踪号
|
|
E.FDESTPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_STKTRANSFEROUT T
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY_T ET ON E.FENTRYID=ET.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockInFlag='1' AND FVESTONWAY = 'B'
|
|
{2}
|
|
{3}
|
|
{4}
|
|
{7}
|
|
{10}
|
|
UNION ALL
|
|
SELECT
|
|
'STK_TRANSFEROUT' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
CASE WHEN ET.FBUSINESSDATE IS NULL OR ET.FBUSINESSDATE > T.FDATE THEN T.FDATE ELSE ET.FBUSINESSDATE END AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FSTOCKORGID, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSRCSTOCKID, --仓库ID
|
|
E.FSRCSTOCKLOCID, --仓位
|
|
E.FDESTSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_STK_STKTRANSFEROUT T
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY_T ET ON E.FENTRYID=ET.FENTRYID
|
|
{8}
|
|
{5}
|
|
WHERE T.FDATE >= @MinDate AND FStockOutFlag='1' AND FVESTONWAY = 'A'
|
|
{9}
|
|
{3}
|
|
{6}
|
|
{7}
|
|
{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
|
|
SELECT
|
|
'REM_PickMtrl' AS FFormId, --单据类型(FormId)
|
|
T.FCREATEDATE AS FCreateDate, --单据日期
|
|
T.FDATE AS FBillDate, --单据日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
F.FOWNERTYPEID, --货主类型ID
|
|
F.FOWNERID, --货主ID
|
|
F.FKEEPERTYPEID, --保管者类别ID
|
|
F.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBaseActualQty, --基本单位数量
|
|
E.FUNITID,
|
|
E.FActualQty,
|
|
E.FBASEUNITID AS FSECUNITID, --辅助单位
|
|
E.FSecActualQty AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FCurrId,
|
|
0 AS FQTYADDOPTION --更新库存方向
|
|
FROM T_REM_PICKMTRL T
|
|
INNER JOIN T_REM_PICKMTRLDATA E ON T.FID=E.FID
|
|
INNER JOIN T_REM_PICKMTRLDATA_A F ON F.FID=T.FID AND F.FENTRYID=E.FENTRYID
|
|
{0}
|
|
{1}
|
|
WHERE T.FDATE >= @MinDate AND FStockFlag='1'
|
|
{2}
|
|
{3}
|
|
{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,
|
|
FKEEPERTYPEID,FKEEPERID,FSTOCKID,FSTOCKLOC,FSTOCKSTATUSID,FAUXPROPID,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO,FBASEUNITID,FBASEQTY,
|
|
FUNITID,FQTY,FSECUNITID,FSECQTY,FPRICE,FAMOUNT,FLOCALCURRID,FAGEDAYS,FAGEDAYSINT,FQTYADDOPTION)
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY FMATERIALID) AS FROWNO,
|
|
-1 AS FGUID,
|
|
FFormId, --单据类型(FormId)
|
|
FCreateDate,
|
|
FBillDate, --单据日期
|
|
FMATERIALID, --物料ID
|
|
FSTOCKORGID, --库存组织ID
|
|
FOWNERTYPEID, --货主类型ID
|
|
FOWNERID, --货主ID
|
|
FKEEPERTYPEID, --保管者类别ID
|
|
FKEEPERID, --保管者ID
|
|
FSTOCKID, --仓库ID
|
|
ISNULL(FSTOCKPLACEID,0), --仓位
|
|
FSTOCKSTATUSID, --库存状态
|
|
ISNULL(FAUXPROPERTYID,0), --辅助属性
|
|
FLOT, --批号
|
|
TO_DATE(TO_CHAR(FPRODUCTDATE, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FPRODUCTDATE,--生产日期
|
|
TO_DATE(TO_CHAR(FVALIDATETO, 'YYYY-MM-DD'),'YYYY-MM-DD hh:mi:ss') FVALIDATETO,--有效期至
|
|
ISNULL(FBOMID,0), --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO ,
|
|
FBASEUNITID, --基本单位ID
|
|
FBASEQTY, --基本单位数量
|
|
FUNITID,
|
|
FQTY,
|
|
FSECUNITID, --辅助单位
|
|
FSECQTY, --辅助单位数量
|
|
FPrice, --基本单位单价
|
|
FAMOUNT, --金额
|
|
FLOCALCURRID,
|
|
'',
|
|
99999 AS FAGEDAYSINT,
|
|
FQTYADDOPTION --更新库存方向
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
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*/
|
|
merge into {0} IT using (
|
|
SELECT FGUID,FMATERIALID,FSTOCKORGID,FOWNERTYPEID,FOWNERID,FKEEPERTYPEID,FKEEPERID,
|
|
FSTOCKID,FStockLocId,FSTOCKSTATUSID,FAuxPropId,FLOTID,FPRODUCEDATE,FEXPIRYDATE,FBOMID,FMTONO,FPROJECTNO from {1} ) IT2
|
|
ON (IT.FMATERIALID=IT2.FMATERIALID
|
|
AND IT.FSTOCKORGID=IT2.FSTOCKORGID
|
|
AND IT.FOWNERTYPEID=IT2.FOWNERTYPEID
|
|
AND IT.FOWNERID=IT2.FOWNERID
|
|
AND IT.FKEEPERTYPEID=IT2.FKEEPERTYPEID
|
|
AND IT.FKEEPERID=IT2.FKEEPERID
|
|
AND IT.FSTOCKID=IT2.FSTOCKID
|
|
AND IT.FSTOCKLOC=IT2.FStockLocId
|
|
AND IT.FSTOCKSTATUSID=IT2.FSTOCKSTATUSID
|
|
AND IT.FAuxPropId=IT2.FAuxPropId
|
|
AND IT.FLOTID=IT2.FLOTID
|
|
AND (IT.FPRODUCEDATE=IT2.FPRODUCEDATE OR (IT.FPRODUCEDATE IS NULL AND IT2.FPRODUCEDATE IS NULL))
|
|
AND (IT.FEXPIRYDATE=IT2.FEXPIRYDATE OR (IT.FEXPIRYDATE IS NULL AND IT2.FEXPIRYDATE IS NULL))
|
|
AND IT.FBOMID=IT2.FBOMID
|
|
AND IT.FMTONO = IT2.FMTONO
|
|
AND IT.FPROJECTNO = IT2.FPROJECTNO
|
|
AND IT.FFormId IN ({3})
|
|
)
|
|
WHEN MATCHED THEN UPDATE SET IT.FGUID = IT2.FGUID {2}", _tmpStockBillTb, _tmpInvTable, (_ctx.DatabaseType == DatabaseType.MS_SQL_Server) ? ";" : "", _billSource);
|
|
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", KDDbType.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
|
|
using (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
|
|
WHERE t1.fmaterialid in (select fmaterialid from {0} ) ) T2
|
|
ON (IT.FMATERIALID = T2.FMATERIALID)
|
|
WHEN MATCHED THEN UPDATE
|
|
SET IT.FUNITID = T2.FSTOREUNITID,
|
|
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
|
|
'STK_TransferDirect' AS FFormId, --单据类型(FormId)
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FSRCMATERIALID AS FMATERIALID, --物料ID
|
|
T.FSTOCKOUTORGID AS FSTOCKORGID, --调出库存组织ID
|
|
E.FOWNERTYPEID AS FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID AS FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID AS FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID AS FKEEPERID, --保管者ID
|
|
E.FDESTSTOCKID AS FSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID AS FSTOCKLOC, --仓位
|
|
E.FDESTSTOCKSTATUSID AS FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID AS FAuxPropId, --辅助属性
|
|
E.FLOT AS FLOTID, --批号
|
|
E.FPRODUCEDATE AS FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE AS FEXPIRYDATE, --有效期至
|
|
E.FBOMID AS FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID AS FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY AS FBASEQTY, --基本单位数量
|
|
E.FUNITID AS FUNITID,
|
|
E.FQTY AS FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
0 AS FPrice, --基本单位单价
|
|
0 AS FAMOUNT, --金额
|
|
T.FBaseCurrID AS FLOCALCURRID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
T.FSTOCKOUTORGID AS FOutSTOCKORGID, --出库库存组织ID
|
|
E.FOWNERTYPEOUTID AS FOutOWNERTYPEID, --出库货主类型ID
|
|
E.FOWNEROUTID AS FOutOWNERID, --出库货主ID
|
|
E.FKEEPERTYPEOUTID AS FOutKEEPERTYPEID, --出库保管者类别ID
|
|
E.FKEEPEROUTID AS FOutKEEPERID, --出库保管者ID
|
|
E.FSRCSTOCKID AS FOutSTOCKID, --出库仓库ID
|
|
E.FSRCSTOCKLOCID AS FOutSTOCKLOC, --出库仓位
|
|
E.FSRCSTOCKSTATUSID AS FOutSTOCKSTATUSID, --出库库存状态
|
|
E.FAUXPROPID AS FOutAuxPropId, --出库辅助属性
|
|
E.FLOT AS FOutLOTID, --出库批号
|
|
E.FPRODUCEDATE AS FOutPRODUCEDATE, --出库生产日期
|
|
E.FEXPIRYDATE AS FOutEXPIRYDATE --出库有效期至
|
|
FROM T_STK_STKTRANSFERIN T
|
|
INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE E.FBUSINESSDATE >= @MinDate AND FOBJECTTYPEID='STK_TransferDirect' AND FStockInFlag='1'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
", _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
|
|
SELECT
|
|
'STK_TRANSFEROUT' AS FFormId, --单据类型(FormId)
|
|
F.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FSTOCKORGID, --库存组织ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FOWNERTYPEID
|
|
ELSE E.FOWNERTYPEINID
|
|
END), --货主类型ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FOWNERID
|
|
ELSE E.FOWNERINID
|
|
END), --货主ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FKEEPERTYPEID
|
|
ELSE E.FKEEPERTYPEINID
|
|
END), --保管者类别ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FKEEPERID
|
|
ELSE E.FKEEPERINID
|
|
END), --保管者ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FSRCSTOCKID
|
|
ELSE E.FDESTSTOCKID
|
|
END), --仓库ID
|
|
(CASE WHEN T.FVESTONWAY='A' THEN E.FSRCSTOCKLOCID
|
|
ELSE E.FDESTSTOCKLOCID
|
|
END), --仓位
|
|
E.FDESTSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
--
|
|
T.FStockInOrgID, --出库库存组织ID
|
|
E.FOWNERTYPEINID, --出库货主类型ID
|
|
E.FOWNERINID, --出库货主ID
|
|
E.FKEEPERTYPEINID, --出库保管者类别ID
|
|
E.FKEEPERINID, --出库保管者ID
|
|
E.FSRCSTOCKID, --出库仓库ID
|
|
E.FSRCSTOCKLOCID, --出库仓位
|
|
E.FSRCSTOCKSTATUSID, --出库库存状态
|
|
E.FAUXPROPID, --出库辅助属性
|
|
E.FLOT, --出库批号
|
|
E.FPRODUCEDATE, --出库生产日期
|
|
E.FEXPIRYDATE --出库有效期至
|
|
FROM T_STK_STKTRANSFEROUT T
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_STKTRANSFEROUTENTRY_T F ON F.FENTRYID=E.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE F.FBUSINESSDATE >= @MinDate AND FStockInFlag='1'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
", _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
|
|
SELECT
|
|
'STK_TRANSFERIN' AS FFormId, --单据类型(FormId)
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FDESTSTOCKID, --仓库ID
|
|
E.FDESTSTOCKLOCID, --仓位
|
|
E.FDESTSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
--
|
|
T.FSTOCKOUTORGID, --出库库存组织ID
|
|
E.FOWNERTYPEOUTID, --出库货主类型ID
|
|
E.FOWNEROUTID, --出库货主ID
|
|
E.FKEEPERTYPEOUTID, --出库保管者类别ID
|
|
E.FKEEPEROUTID, --出库保管者ID
|
|
E.FSRCSTOCKID, --出库仓库ID
|
|
E.FSRCSTOCKLOCID, --出库仓位
|
|
E.FSRCSTOCKSTATUSID, --出库库存状态
|
|
E.FAUXPROPID, --出库辅助属性
|
|
E.FLOT, --出库批号
|
|
E.FPRODUCEDATE, --出库生产日期
|
|
E.FEXPIRYDATE --出库有效期至
|
|
FROM T_STK_STKTRANSFERIN T
|
|
INNER JOIN T_STK_STKTRANSFERINENTRY E ON T.FID=E.FID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE E.FBUSINESSDATE >= @MinDate AND FOBJECTTYPEID='STK_TRANSFERIN'
|
|
AND FStockInFlag='1'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
", _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
|
|
SELECT
|
|
'STK_StatusConvert' AS FFormId, --单据类型(FormId)
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FCONVERTQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
--
|
|
T.FStockOrgId, --出库库存组织ID
|
|
OE.FOWNERTYPEID, --货主类型ID
|
|
OE.FOWNERID, --货主ID
|
|
OE.FKEEPERTYPEID, --保管者类别ID
|
|
OE.FKEEPERID, --保管者ID
|
|
OE.FSTOCKID, --仓库ID
|
|
OE.FSTOCKLOCID, --仓位
|
|
OE.FSTOCKSTATUSID, --库存状态
|
|
OE.FAUXPROPID, --辅助属性
|
|
OE.FLOT, --批号
|
|
OE.FPRODUCEDATE, --生产日期
|
|
OE.FEXPIRYDATE --有效期至
|
|
FROM T_STK_StatusConvert T
|
|
INNER JOIN T_STK_StatusConvertEntry E ON T.FID=E.FID
|
|
INNER JOIN T_STK_StatusConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
", _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
|
|
SELECT
|
|
'STK_StockConvert' AS FFormId, --单据类型(FormId)
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FCONVERTQTY,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
--
|
|
T.FStockOrgId, --出库库存组织ID
|
|
OE.FOWNERTYPEID, --货主类型ID
|
|
OE.FOWNERID, --货主ID
|
|
OE.FKEEPERTYPEID, --保管者类别ID
|
|
OE.FKEEPERID, --保管者ID
|
|
OE.FSTOCKID, --仓库ID
|
|
OE.FSTOCKLOCID, --仓位
|
|
OE.FSTOCKSTATUSID, --库存状态
|
|
OE.FAUXPROPID, --辅助属性
|
|
OE.FLOT, --批号
|
|
OE.FPRODUCEDATE, --生产日期
|
|
OE.FEXPIRYDATE --有效期至
|
|
FROM T_STK_StockConvert T
|
|
INNER JOIN T_STK_StockConvertEntry E ON T.FID=E.FID
|
|
INNER JOIN T_STK_StockConvertEntry OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
", _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
|
|
SELECT
|
|
'STK_LOTADJUST' AS FFormId, --单据类型(FormId)
|
|
E.FBUSINESSDATE AS FBillDate, --单据体入库日期
|
|
E.FMATERIALID, --物料ID
|
|
T.FStockOrgId, --库存组织ID
|
|
E.FOWNERTYPEID, --货主类型ID
|
|
E.FOWNERID, --货主ID
|
|
E.FKEEPERTYPEID, --保管者类别ID
|
|
E.FKEEPERID, --保管者ID
|
|
E.FSTOCKID, --仓库ID
|
|
E.FSTOCKLOCID, --仓位
|
|
E.FSTOCKSTATUSID, --库存状态
|
|
E.FAUXPROPID, --辅助属性
|
|
E.FLOT, --批号
|
|
E.FPRODUCEDATE, --生产日期
|
|
E.FEXPIRYDATE, --有效期至
|
|
E.FBOMID, --BOMID
|
|
E.FMTONO AS FMTONO, --计划跟踪号
|
|
E.FPROJECTNO AS FPROJECTNO,
|
|
E.FBASEUNITID, --基本单位ID
|
|
E.FBASEQTY, --基本单位数量
|
|
E.FUNITID,
|
|
E.FQty,
|
|
E.FSECUNITID AS FSECUNITID, --辅助单位
|
|
E.FSECQTY AS FSECQTY, --辅助单位数量
|
|
E.FPRICE AS FPrice, --基本单位单价
|
|
E.FAMOUNT AS FAMOUNT, --金额
|
|
T.FBaseCurrID,
|
|
1 AS FQTYADDOPTION, --更新库存方向
|
|
--
|
|
T.FStockOrgId, --出库库存组织ID
|
|
OE.FOWNERTYPEID, --货主类型ID
|
|
OE.FOWNERID, --货主ID
|
|
OE.FKEEPERTYPEID, --保管者类别ID
|
|
OE.FKEEPERID, --保管者ID
|
|
OE.FSTOCKID, --仓库ID
|
|
OE.FSTOCKLOCID, --仓位
|
|
OE.FSTOCKSTATUSID, --库存状态
|
|
OE.FAUXPROPID, --辅助属性
|
|
OE.FLOT, --批号
|
|
OE.FPRODUCEDATE, --生产日期
|
|
OE.FEXPIRYDATE --有效期至
|
|
FROM T_STK_LOTADJUST T
|
|
INNER JOIN T_STK_LOTADJUSTENTRY E ON T.FID=E.FID
|
|
INNER JOIN T_STK_LOTADJUSTENTRY OE ON E.FCONVERTENTRYID=OE.FENTRYID
|
|
{0}
|
|
{1}
|
|
{2}
|
|
WHERE E.FBUSINESSDATE >= @MinDate AND E.FStockFlag='1' AND E.FCONVERTTYPE='B'
|
|
{3}
|
|
{4}
|
|
{5}
|
|
{6}
|
|
{7}
|
|
", _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}
|
|
SELECT
|
|
FFormId ,---单据类型(FormId)
|
|
FBillDate , --单据日期
|
|
FMATERIALID , --物料ID
|
|
FSTOCKORGID , --库存组织ID
|
|
FOWNERTYPEID , --货主类型ID
|
|
FOWNERID , --货主ID
|
|
FKEEPERTYPEID , --保管者类别ID
|
|
FKEEPERID , --保管者ID
|
|
FSTOCKID , --仓库ID
|
|
FSTOCKLOC , --仓位
|
|
FSTOCKSTATUSID , --库存状态
|
|
FAuxPropId , --辅助属性
|
|
FLOTID , --批号
|
|
FPRODUCEDATE , --生产日期
|
|
FEXPIRYDATE , --有效期至
|
|
FBOMID , --BOMID
|
|
FMTONO , --计划跟踪号
|
|
FPROJECTNO,
|
|
FBASEUNITID , --基本单位ID
|
|
FBASEQTY , --基本单位数量
|
|
FUNITID , --库存单位
|
|
FQTY , --库存单位数量
|
|
FSECUNITID , --辅助单位
|
|
FSECQTY , --辅助单位数量
|
|
FPrice , --基本单位单价
|
|
FAMOUNT , --金额
|
|
FLOCALCURRID , --本位币
|
|
FQTYADDOPTION , --更新库存方向
|
|
--调出方的数据
|
|
FOutSTOCKORGID , --库存组织ID
|
|
FOutOWNERTYPEID , --货主类型ID
|
|
FOutOWNERID , --货主ID
|
|
FOutKEEPERTYPEID , --保管者类别ID
|
|
FOutKEEPERID , --保管者ID
|
|
FOutSTOCKID , --仓库ID
|
|
FOutSTOCKLOC , --仓位
|
|
FOutSTOCKSTATUSID , --库存状态
|
|
FOutAuxPropId , --辅助属性
|
|
FOutLOTID , --批号
|
|
FOutPRODUCEDATE , --生产日期
|
|
FOutEXPIRYDATE
|
|
FROM ({stringBuilder.ToString()}) AS TB
|
|
";
|
|
List<SqlParam> list = new List<SqlParam>();
|
|
list.Add(new SqlParam("@MinDate", KDDbType.DateTime, minDate));
|
|
if (historyStockQuery)
|
|
{
|
|
list.Add(new SqlParam("@MaxDate", KDDbType.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}
|
|
SELECT -1 AS FGUID,
|
|
T1.FFormId,---单据类型(FormId)
|
|
T1.FBillDate , --单据日期(调拨转换类单据2.0已加入库日期,可以在单据中直接取)
|
|
T1.FMATERIALID , --物料ID
|
|
T1.FSTOCKORGID , --库存组织ID
|
|
T1.FOWNERTYPEID , --货主类型ID
|
|
T1.FOWNERID , --货主ID
|
|
T1.FKEEPERTYPEID , --保管者类别ID
|
|
T1.FKEEPERID , --保管者ID
|
|
T1.FSTOCKID , --仓库ID
|
|
T1.FSTOCKLOC , --仓位
|
|
T1.FSTOCKSTATUSID , --库存状态
|
|
T1.FAuxPropId , --辅助属性
|
|
T1.FLOTID , --批号
|
|
T1.FPRODUCEDATE , --生产日期
|
|
T1.FEXPIRYDATE , --有效期至
|
|
T1.FBOMID , --BOMID
|
|
T1.FMTONO, --计划跟踪号
|
|
T1.FPROJECTNO, --项目编号
|
|
T1.FBASEUNITID , --基本单位ID
|
|
T1.FBASEQTY , --基本单位数量
|
|
T1.FUNITID , --库存单位
|
|
T1.FQTY , --库存单位数量
|
|
T1.FSECUNITID , --辅助单位
|
|
T1.FSECQTY , --辅助单位数量
|
|
T1.FPrice , --基本单位单价
|
|
T1.FAMOUNT, --金额
|
|
T1.FLOCALCURRID , --本位币
|
|
T1.FQTYADDOPTION --更新库存方向
|
|
FROM {1} T1
|
|
LEFT JOIN {0} T2
|
|
ON T1.FMATERIALID=T2.FMATERIALID
|
|
AND T1.FOutSTOCKORGID=T2.FSTOCKORGID
|
|
AND T1.FOutOWNERTYPEID=T2.FOWNERTYPEID
|
|
AND T1.FOutOWNERID=T2.FOWNERID
|
|
AND T1.FOutKEEPERTYPEID=T2.FKEEPERTYPEID
|
|
AND T1.FOutKEEPERID=T2.FKEEPERID
|
|
AND T1.FOutSTOCKID=T2.FSTOCKID
|
|
AND T1.FOutSTOCKLOC=T2.FSTOCKLOC
|
|
AND T1.FOutSTOCKSTATUSID=T2.FSTOCKSTATUSID
|
|
AND T1.FOutAuxPropId=T2.FAuxPropId
|
|
AND T1.FOutLOTID=T2.FLOTID
|
|
AND (T1.FOutPRODUCEDATE=T2.FPRODUCEDATE OR (T1.FOutPRODUCEDATE IS NULL AND T2.FPRODUCEDATE IS NULL))
|
|
AND (T1.FOutEXPIRYDATE=T2.FEXPIRYDATE OR (T1.FOutEXPIRYDATE IS NULL AND T2.FEXPIRYDATE IS NULL))
|
|
WHERE T2.FBillDate >= @MinDate {2}
|
|
ORDER BY T2.FBillDate DESC
|
|
", _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,
|
|
FSTOCKLOCID,FSTOCKSTATUSID,FAUXPROPID,FBOMID,FLotID,FAMOUNT,FQTY,FPRICEDIGITS,FAMOUNTDIGITS,FMTONO)";
|
|
stringBuilder.AppendFormat(@" SELECT
|
|
S.FSTOCKORGID, --库存组织
|
|
S.FMATERIALID, --物料编码
|
|
S.FCARGOOWNERTYPE, --货主类别
|
|
S.FCARGOOWNERID, --货主
|
|
S.FSTOCKID, --仓库
|
|
S.FSTOCKLOCID, --仓位
|
|
S.FSTOCKSTATUSID, --库存状态
|
|
S.FAUXPROPID, --辅助属性
|
|
S.FBOMID, --bomID
|
|
S.FLOT AS FLotID, --批号
|
|
I.FAMOUNT,
|
|
I.FQTY ,
|
|
2 AS FPRICEDIGITS,
|
|
2 AS FAMOUNTDIGITS,
|
|
S.FMTONO
|
|
FROM {0} I
|
|
INNER JOIN T_HS_InivStockDimension S ON I.FDIMEENTRYID=S.FENTRYID
|
|
INNER JOIN T_HS_OUTACCTG THO ON I.FID=THO.FID
|
|
INNER JOIN T_HS_CALDIMENSIONS TCH ON TCH.FDIMENSIONID=THO.FDIMENSIONID
|
|
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}
|
|
AND 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))));
|
|
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),
|
|
FSTOCKORGID INT NOT NULL DEFAULT(0),
|
|
FMATERIALID INT,
|
|
FCARGOOWNERTYPE VARCHAR(36),
|
|
FCARGOOWNERID INT,
|
|
FSTOCKID INT,
|
|
FLOTID INT,
|
|
FSTOCKLOCID INT,
|
|
FAUXPROPID INT,
|
|
FBOMID INT,
|
|
FSTOCKSTATUSID INT,
|
|
FMTONO NVARCHAR(255) NULL DEFAULT(' '),
|
|
FAMOUNT DECIMAL(23,10),
|
|
FQTY DECIMAL(23,10),
|
|
FACCTSYSTEMID INT NOT NULL DEFAULT(0),
|
|
FACCTPOLICYID INT NOT NULL DEFAULT(0),
|
|
FYEAR INT NOT NULL DEFAULT(0),
|
|
FPERIOD INT NOT NULL DEFAULT(0)
|
|
)";
|
|
DBUtils.Execute(base.Context, strSQL);
|
|
strSQL = string.Format(@"INSERT INTO {4} (FSTRPERIOD,FSTOCKORGID,FMATERIALID,FCARGOOWNERTYPE,FCARGOOWNERID,FSTOCKID,FAMOUNT,FQTY,FACCTSYSTEMID,FACCTPOLICYID,FYEAR,FPERIOD,
|
|
FLOTID,FSTOCKLOCID,FAUXPROPID,FBOMID,FSTOCKSTATUSID,FMTONO)
|
|
SELECT /*+ 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,
|
|
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
|
|
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
|
|
INNER JOIN (SELECT TOAE.FACCTSYSTEMID,TOAE.FDEFACCTPOLICY AS FACCTPOLICYID,TOAD.FSUBORGID AS FSTOCKORGID
|
|
FROM T_ORG_ACCTSYSENTRY TOAE INNER JOIN T_ORG_ACCOUNTSYSTEM TOA ON TOAE.FACCTSYSTEMID=TOA.FACCTSYSTEMID
|
|
LEFT JOIN T_ORG_ACCTSYSDETAIL TOAD ON TOAE.FENTRYID=TOAD.FENTRYID
|
|
WHERE {2} AND TOA.FISDEFAULT = '1' AND TOA.FFORBIDORID = 0
|
|
) TBK ON TBK.FACCTPOLICYID=PL.FACCTPOLICYID WHERE AP.FPERIODSTARTDATE <= {3} AND AP.FPERIODENDDATE >= {3}) TP
|
|
ON T.FACCTSYSTEMID= TP.FACCTSYSTEMID AND T.FACCTPOLICYID = TP.FACCTPOLICYID AND T.FSTOCKORGID = TP.FSTOCKORGID
|
|
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}(FSTRPERIOD,{2})", text3.Replace("TMP", ""), text3, string.Join(",", list).Replace("TD.", ""));
|
|
DBUtils.Execute(base.Context, strSQL);
|
|
strSQL = string.Format(@"INSERT INTO {0}({3},FAMOUNT,FQTY,FPRICEDIGITS,FAMOUNTDIGITS)
|
|
SELECT /*+ cardinality(TD {1})*/ {4},TD.FAMOUNT,TD.FQTY,2 AS FPRICEDIGITS,2 AS FAMOUNTDIGITS
|
|
FROM {2} TD INNER JOIN (SELECT MAX(TD1.FSTRPERIOD) FSTRPERIOD,{5}
|
|
FROM {2} TD1 WHERE (TD1.FAMOUNT!=0 OR TD1.FQTY!=0) GROUP BY {6}) TM
|
|
ON 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
|
|
USING (SELECT T1.FSETTLEORGID,T2.FPRICEDIGITS,T2.FAMOUNTDIGITS
|
|
FROM {defaultRateTypeAndCurrDataBySubOrgIds} T1 INNER JOIN T_BD_CURRENCY T2 ON T1.FLOCALCURRENCYID= T2.FCURRENCYID ) IT2
|
|
ON (IT.FSTOCKORGID = IT2.FSETTLEORGID)
|
|
WHEN MATCHED THEN
|
|
UPDATE 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,
|
|
AP.FYEAR,AP.FPERIOD,TBK.FSTOCKORGID, AC.FID AS FCALENDARID
|
|
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
|
|
INNER JOIN
|
|
(
|
|
SELECT TOAE.FACCTSYSTEMID,TOAE.FMAINORGID,TOAE.FDEFACCTPOLICY AS FACCTPOLICYID,TOAD.FSUBORGID AS FSTOCKORGID
|
|
FROM T_ORG_ACCTSYSENTRY TOAE
|
|
INNER JOIN T_ORG_ACCOUNTSYSTEM TOA ON TOAE.FACCTSYSTEMID=TOA.FACCTSYSTEMID
|
|
LEFT JOIN T_ORG_ACCTSYSDETAIL TOAD ON TOAE.FENTRYID=TOAD.FENTRYID
|
|
WHERE TOA.FISDEFAULT = '1' AND TOAD.FSUBORGID in ( {0} ) AND TOA.FFORBIDORID = 0
|
|
) TBK ON TBK.FACCTPOLICYID=PL.FACCTPOLICYID
|
|
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
|
|
FROM T_BD_ACCOUNTPERIOD a JOIN T_FA_ACCTPOLICY b ON b.FACCTCALENDARID=a.FID
|
|
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
|
|
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) ? $@"
|
|
SELECT
|
|
DISTINCT FSTOCKORGID,FStockOrgNumber,FStockOrgName
|
|
,0 AS FORDERBY
|
|
FROM {_tmpInvTable} TV {strFlexSql}
|
|
WHERE {_filterStr}
|
|
ORDER BY FSTOCKORGID,FORDERBY " : $@"
|
|
SELECT
|
|
DISTINCT FSTOCKORGID,FStockOrgNumber,FStockOrgName,FOWNERTYPEID,FOWNERID,FOwnerNumber,FOwnerName
|
|
,(CASE FOWNERTYPEID WHEN 'BD_Supplier' THEN 100 WHEN 'BD_Customer' THEN 200 ELSE 0 END) AS FORDERBY
|
|
FROM {_tmpInvTable} TV {strFlexSql}
|
|
WHERE {_filterStr}
|
|
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 = $@"
|
|
SELECT FGuid
|
|
,FSTOCKORGID --库存组织ID
|
|
,FStockOrgNumber --库存组织编码
|
|
,FStockOrgName --库存组织名称
|
|
,FOwnerTypeId --货主类别ID
|
|
,FOWNERTYPENAME
|
|
,FOWNERID --货主ID
|
|
,FOwnerNumber --货主编码
|
|
,FOwnerName --货主名称
|
|
,FKEEPERTYPEID --保管者类型
|
|
,FKEEPERID --保管者
|
|
,FKEEPERNAME --保管者名称
|
|
,FCATEGORYID --存货类别ID
|
|
,FMaterialTypeName --存货类别名称
|
|
,FMATERIALID --物料ID
|
|
,FMaterialNumber --物料编码
|
|
,FMaterialName --物料名称
|
|
,FMaterialModel --规格型号
|
|
,FLotID --批号主档ID
|
|
,FLotNo --批号
|
|
,FBOMID --BOMID
|
|
,FBOMNumber
|
|
,FMTONO
|
|
,FPROJECTNO
|
|
,TV.FAuxPropId --辅助属性(注意)
|
|
,' ' AS FAUXPROP
|
|
,TV.FAuxPropId AS FAuxPropIdR
|
|
,FSTOCKID --仓库ID
|
|
,FPRODUCEDATE --生成日期
|
|
,FEXPIRYDATE --生成日期
|
|
,FErpClsID --物料属性
|
|
,FMaterialGroup --物料分组
|
|
,FMaterialGroup_FNumber --物料分组编码
|
|
,FMaterialGroupName --物料分组名称
|
|
,FStockNumber --仓库编码
|
|
,FStockName --仓库名称
|
|
,FSTOCKSTATUSID --库存状态
|
|
,FSTOCKSTATUSNAME --库存状态名称
|
|
,TV.FStockLocId --仓位ID(注意)
|
|
,FSTOCKLOC --仓位
|
|
,TV.FStockLocId AS FStockLocIdR
|
|
,FBASEUNITID --基本单位ID
|
|
,FBaseUnitName --基本单位
|
|
,FUnitID --库存单位ID
|
|
,FUnitName --库存单位
|
|
,FSECUNITID --辅助单位ID
|
|
,FSecUnitName --辅助单位
|
|
,FBASEQTY --基本数量
|
|
,FQTY --库存数量
|
|
,FSECQTY --辅助单位数量
|
|
,FPRECISION --单位精度
|
|
,FBASEPRECISION --基本单位精度
|
|
,FSECPRECISION --辅助单位精度
|
|
,CONVERT(DECIMAL(23,10),0.0) AS FBasePrice
|
|
,CONVERT(DECIMAL(23,10),0.0) AS FPrice
|
|
,CONVERT(DECIMAL(23,10),0.0) AS FSecPrice
|
|
,CONVERT(DECIMAL(23,10),0.0) AS FAmount
|
|
,2 AS FPriceDecimal
|
|
,2 AS FAmountDecimal
|
|
,N'{((_outRange == null) ? "NOTHING" : _outRange)}' AS FAGEDAYS
|
|
,99999 AS FAGEDAYSINT
|
|
,FBASEQTY AS FLeftBaseQty
|
|
,FQTY AS FLeftQty
|
|
,FSECQTY AS FLeftSecQty
|
|
{((_intervalStr.Count() > 0) ? ("," + string.Join(",", _intervalStr)) : "")}
|
|
INTO {_tmpRptTable}
|
|
FROM {_tmpInvTable} TV {strFlexSql}
|
|
WHERE {_filterStr}
|
|
";
|
|
DBUtils.Execute(base.Context, empty);
|
|
CreateTmpRptTablIndex();
|
|
DBUtils.Execute(base.Context, $@"UPDATE {_tmpRptTable} SET FBASEQTY = ROUND(FBASEQTY,FBASEPRECISION),FLeftBaseQty = ROUND(FLeftBaseQty,FBASEPRECISION),
|
|
FQTY = ROUND(FQTY,FPRECISION),FLeftQty = ROUND(FLeftQty,FPRECISION),
|
|
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*/
|
|
merge into {0} IT using (
|
|
SELECT T0.*,T1.FPRICEDIGITS, T1.FAMOUNTDIGITS
|
|
FROM (SELECT {9}
|
|
,(CASE WHEN SUM(FQTY)=0 THEN 0
|
|
WHEN SUM(FQTY)<0.001 AND ({12}(RTRIM(REPLACE(SUM(FQTY),'0',' ')))-2+{12}(FLOOR(ABS(SUM(FAMOUNT)))))>12 THEN 0
|
|
ELSE CAST(CAST(SUM(FAMOUNT) AS {8}(23,10))/SUM(FQTY) AS {8}(23,10)) END) AS FAVGAMOUNT
|
|
FROM {1} WHERE EXISTS (SELECT 1 FROM {0} T3 WHERE T3.FMATERIALID = {1}.FMATERIALID) GROUP BY {10} ) T0
|
|
INNER JOIN (SELECT DISTINCT FMATERIALID,FPRICEDIGITS,FAMOUNTDIGITS FROM {1}) T1 ON T0.FMATERIALID = T1.FMATERIALID
|
|
) IT2
|
|
ON ({11})
|
|
WHEN MATCHED THEN UPDATE SET
|
|
IT.FBasePrice = {2}, IT.FPrice = {3}, IT.FSecPrice = {4}, IT.FAmount = {5},
|
|
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),
|
|
{intervalInfo.QtyKey}=CONVERT(DECIMAL(23,10),FLeftQty),
|
|
{intervalInfo.SecQtyKey}=CONVERT(DECIMAL(23,10),FLeftSecQty),
|
|
{intervalInfo.AmountKey}=ROUND(CONVERT(DECIMAL(23,10),FLeftBaseQty*FBasePrice), FAmountDecimal),
|
|
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),
|
|
(CASE
|
|
WHEN IT.FLeftQty>IT2.FQTY THEN IT2.FQTY
|
|
ELSE IT.FLeftQty
|
|
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(
|
|
(CASE
|
|
WHEN IT.FLeftQty>IT2.FQTY THEN IT2.FQTY
|
|
ELSE IT.FLeftQty
|
|
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 = $@"/*dialect*/
|
|
merge into {_tmpRptTable} IT using (
|
|
SELECT FGUID
|
|
,SUM(FBaseQTY) AS FBaseQTY
|
|
,SUM(FQTY) AS FQTY
|
|
,SUM(FSecQTY) AS FSecQTY
|
|
FROM {_tmpStockBillTb}
|
|
WHERE (FBILLDATE >={text10}
|
|
AND FBILLDATE <{text11})
|
|
AND FQTYADDOPTION=1--入库单
|
|
GROUP BY FGUID
|
|
) IT2 ON (IT.FGUID = IT2.FGUID)
|
|
WHEN MATCHED THEN UPDATE SET
|
|
IT.{intervalInfo.BaseQtyKey} = (CASE WHEN IT.FLeftBaseQty > IT2.FBaseQTY THEN IT2.FBaseQTY ELSE IT.FLeftBaseQty END),
|
|
IT.{intervalInfo.QtyKey} = (CASE WHEN IT.FLeftQty > IT2.FQTY THEN ROUND(IT2.FQTY,IT.FPRECISION) ELSE ROUND(IT.FLeftQty, IT.FPRECISION) END),
|
|
IT.{intervalInfo.SecQtyKey} = (CASE WHEN IT.FLeftSecQTY > IT2.FSecQTY THEN IT2.FSecQTY ELSE IT.FLeftSecQTY END),
|
|
IT.{intervalInfo.AmountKey} = {text9},
|
|
IT.FLeftBaseQty = (CASE WHEN IT.FLeftBaseQty > IT2.FBaseQTY THEN IT.FLeftBaseQty - IT2.FBaseQTY ELSE 0 END),
|
|
IT.FLeftQty = (CASE WHEN IT.FLeftQty > IT2.FQTY THEN ROUND(IT.FLeftQty - IT2.FQTY, IT.FPRECISION) ELSE 0 END),
|
|
IT.FLeftSecQTY = (CASE WHEN IT.FLeftSecQty > IT2.FSecQTY THEN IT.FLeftSecQty - IT2.FSecQTY ELSE 0 END)
|
|
{((_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
|
|
FROM {_tmpStockBillTb}
|
|
WHERE (FBILLDATE >= @BegDate
|
|
AND FBILLDATE < @EndDate)
|
|
AND FQTYADDOPTION =1
|
|
AND FGUID IN (SELECT FGUID FROM {_tmpInvTable} WHERE FBASEQTY > 0)
|
|
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 = @"(
|
|
FGUID INT,
|
|
FQTY DECIMAL(23,10),
|
|
FBASEQTY DECIMAL(23,10),
|
|
FSECQTY DECIMAL(23,10),
|
|
FSUMQTY DECIMAL(23,10),
|
|
FSUMBASEQTY DECIMAL(23,10),
|
|
FSUMSECQTY DECIMAL(23,10),
|
|
FAGEDAYS NVARCHAR(20),
|
|
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,
|
|
FOwnerName,FKEEPERTYPEID,FKEEPERID,FKEEPERNAME,FCATEGORYID,FMaterialTypeName,FMATERIALID,FMaterialNumber,FMaterialName,FMaterialModel,
|
|
FLotID,FLotNo,FBOMID,FBOMNumber,FMTONO,FAuxPropId,FAUXPROP,FAuxPropIdR,FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FErpClsID,FMaterialGroup,FMaterialGroup_FNumber,FMaterialGroupName,
|
|
FStockNumber,FStockName,FSTOCKSTATUSID,FSTOCKSTATUSNAME,FStockLocId,FSTOCKLOC,FStockLocIdR,FBASEUNITID,FBaseUnitName,FUnitID,FUnitName,FSECUNITID,
|
|
FSecUnitName,FBASEQTY,FQTY,FSECQTY,FPRECISION,FBASEPRECISION,FSECPRECISION,FBasePrice,FPrice,FSecPrice,FAmount,FPriceDecimal,FAmountDecimal,FAGEDAYS,FLeftQty,FAGEDAYSINT)
|
|
select IT.FGuid,FSTOCKORGID,FStockOrgNumber,FStockOrgName,FOwnerTypeId,FOWNERTYPENAME,FOWNERID,FOwnerNumber,
|
|
FOwnerName,FKEEPERTYPEID,FKEEPERID,FKEEPERNAME,FCATEGORYID, FMaterialTypeName,FMATERIALID,FMaterialNumber,FMaterialName,FMaterialModel,
|
|
FLotID,FLotNo,FBOMID,FBOMNumber,FMTONO,FAuxPropId,' ' As FAuxPropname,FAuxPropIdR,FSTOCKID,FPRODUCEDATE,FEXPIRYDATE,FErpClsID,FMaterialGroup,FMaterialGroup_FNumber,FMaterialGroupName,
|
|
FStockNumber,FStockName,FSTOCKSTATUSID,FSTOCKSTATUSNAME,FStockLocId,FSTOCKLOC,FStockLocIdR,FBASEUNITID,FBaseUnitName,FUnitID,FUnitName,FSECUNITID,
|
|
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,
|
|
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,
|
|
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,
|
|
FPRECISION,FBASEPRECISION,FSECPRECISION,FBasePrice,FPrice,FSecPrice,
|
|
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,
|
|
FPriceDecimal,FAmountDecimal,IT2.FAGEDAYS,FLeftQty,IT2.FAGEDAYSINT
|
|
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));
|
|
CommonFunction.GetReIndexSqls(base.Context, new HashSet<string>() { _tmpRptTable });
|
|
kDTransactionScope.Complete();
|
|
}
|
|
|
|
empty = string.Format(@" UPDATE {0} SET (FQTY,FBASEQTY,FSECQTY,FAMOUNT,FAGEDAYS) =
|
|
(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
|
|
(SELECT FGUID, SUM(FQTY) AS FQTY,SUM(FBASEQTY) AS FBASEQTY,SUM(FSECQTY) AS FSECQTY FROM {0} WHERE FAGEDAYS<> N'{1}' GROUP BY FGUID ) IT2
|
|
|
|
WHERE {0}.FGUID = IT2.FGUID AND {0}.FAGEDAYS= N'{1}' AND {0}.FQTY-IT2.FQTY>0
|
|
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"]);
|
|
var tmpBillSourceList = dyFilter["BillSource"].ToString().Split(',').ToList();
|
|
_billSource = $"'{string.Join("','", tmpBillSourceList)}'";
|
|
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*/
|
|
merge into {0} IT using (SELECT FGuid,FBaseQty,
|
|
(SELECT {10} FPrice FROM {1} T
|
|
WHERE T.FMATERIALID=T3.FMATERIALID
|
|
AND T.FSTOCKORGID=T3.FSTOCKORGID
|
|
AND T.FOWNERTYPEID=T3.FOWNERTYPEID
|
|
AND T.FOWNERID=T3.FOWNERID
|
|
AND T.FQTYADDOPTION={2}
|
|
{3}
|
|
AND T.FPrice<>0
|
|
{11}
|
|
--ORDER BY T.FCreateDate DESC,T.FPrice DESC
|
|
) AS FPrice,
|
|
(
|
|
SELECT {10} {8}(FPRICEDIGITS,2) FROM {1} T
|
|
LEFT JOIN T_BD_CURRENCY CON ON T.FLOCALCURRID=CON.FCURRENCYID
|
|
WHERE T.FMATERIALID=T3.FMATERIALID
|
|
AND T.FSTOCKORGID=T3.FSTOCKORGID
|
|
AND T.FOWNERTYPEID=T3.FOWNERTYPEID
|
|
AND T.FOWNERID=T3.FOWNERID
|
|
AND T.FQTYADDOPTION={2}
|
|
{3}
|
|
AND T.FPrice<>0
|
|
{11}
|
|
--ORDER BY T.FCreateDate DESC,T.FPrice DESC
|
|
) AS FPRICEDIGITS,
|
|
(
|
|
SELECT {10} {8}(FAMOUNTDIGITS,2) FROM {1} T
|
|
LEFT JOIN T_BD_CURRENCY CON ON T.FLOCALCURRID=CON.FCURRENCYID
|
|
WHERE T.FMATERIALID=T3.FMATERIALID
|
|
AND T.FSTOCKORGID=T3.FSTOCKORGID
|
|
AND T.FOWNERTYPEID=T3.FOWNERTYPEID
|
|
AND T.FOWNERID=T3.FOWNERID
|
|
AND T.FQTYADDOPTION={2}
|
|
AND T.FPrice<>0
|
|
{11}
|
|
--ORDER BY T.FCreateDate DESC,T.FPrice DESC
|
|
) AS FAMOUNTDIGITS
|
|
FROM {0} T3
|
|
) IT2 ON (IT.FGUID = IT2.FGUID AND IT.FOWNERTYPEID<>'BD_Supplier'
|
|
AND IT.FOWNERTYPEID<>'BD_Customer')
|
|
WHEN MATCHED THEN UPDATE SET
|
|
IT.FBasePrice = {4}, IT.FPrice = {5}, IT.FSecPrice = {6}, IT.FAmount = {7},
|
|
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
|
|
USING (SELECT TOP 1 T1.FSETTLEORGID,T2.FPRICEDIGITS,T2.FAMOUNTDIGITS
|
|
FROM {defaultRateTypeAndCurrDataBySubOrgIds} T1 INNER JOIN T_BD_CURRENCY T2 ON T1.FLOCALCURRENCYID= T2.FCURRENCYID ) IT2
|
|
ON (1 = 1)
|
|
WHEN MATCHED THEN
|
|
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*/
|
|
MERGE INTO {0} IT USING (SELECT * FROM {1} WHERE FGUID IS NOT NULL ) IT2
|
|
ON (IT.FMATERIALID=IT2.FMATERIALID {2} )
|
|
WHEN MATCHED THEN UPDATE
|
|
SET IT.FBasePrice = {3}, IT.FPrice = {4}, IT.FSecPrice = {5},
|
|
IT.FAmount = {6},
|
|
IT.FPriceDecimal = {7}(IT2.FPRICEDIGITS,IT.FPriceDecimal),
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_SAL_RETURNSTOCKENTRY TSE
|
|
INNER JOIN T_SAL_RETURNSTOCK TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
INNER JOIN T_SAL_RETURNSTOCKENTRY_F TSEF ON TSEF.FID = TSE.FID AND TSEF.FENTRYID = TSE.FENTRYID
|
|
INNER JOIN T_SAL_RETURNSTOCKFIN TSF ON TSF.FID = TS.FID
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_PRD_RETURNMTRLENTRY TSE
|
|
INNER JOIN T_PRD_RETURNMTRL TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_SUB_RETURNMTRLENTRY TSE
|
|
INNER JOIN T_SUB_RETURNMTRL TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_ASSEMBLYPRODUCT TSE
|
|
INNER JOIN T_STK_ASSEMBLY TS ON TSE.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_ASSEMBLYSUBITEM TSE
|
|
INNER JOIN T_STK_ASSEMBLYPRODUCT TSEP ON TSEP.FENTRYID=TSE.FENTRYID
|
|
INNER JOIN T_STK_ASSEMBLY TS ON TSEP.FID=TS.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_STKCOUNTGAINENTRY TSE
|
|
INNER JOIN T_STK_STKCOUNTGAIN TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_LOTADJUSTENTRY TSE
|
|
INNER JOIN T_STK_LOTADJUST TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_STOCKCONVERTENTRY TSE
|
|
INNER JOIN T_STK_STOCKCONVERT TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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,
|
|
{3}TSE.FMATERIALID AS FMATERIALID
|
|
FROM T_STK_STATUSCONVERTENTRY TSE
|
|
INNER JOIN T_STK_STATUSCONVERT TS ON TS.FID = TSE.FID AND TS.FDOCUMENTSTATUS<>'Z' AND TS.FCANCELSTATUS='A'
|
|
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
|
|
FROM T_BAS_FLEXVALUES LF
|
|
LEFT JOIN T_BAS_FLEXVALUES_L LFL ON LF.FID=LFL.FID
|
|
AND LFL.FLOCALEID = {ctx.UserLocale.LCID}
|
|
WHERE FDOCUMENTSTATUS = 'C' AND FFLEXNUMBER <> ' ' ORDER BY LF.FID " : $@" SELECT FFLEXNUMBER AS FKey,LFL.FNAME AS FlexValue
|
|
FROM T_BD_FLEXAUXPROPERTY LF
|
|
LEFT JOIN T_BD_FLEXAUXPROPERTY_L LFL ON LF.FID=LFL.FID
|
|
AND LFL.FLOCALEID = {ctx.UserLocale.LCID}
|
|
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;
|
|
}
|
|
}
|
|
}
|