提交 9df16ae2 authored 作者: 谢雨莎's avatar 谢雨莎

提高性能;

上级 dbf255be
...@@ -46,6 +46,19 @@ namespace LQKJ_OFLCostReport ...@@ -46,6 +46,19 @@ namespace LQKJ_OFLCostReport
[Description("获取销售订单明细报表数据"), HotUpdate] [Description("获取销售订单明细报表数据"), HotUpdate]
public class CostReportPlugin : AbstractListPlugIn public class CostReportPlugin : AbstractListPlugIn
{ {
public override void PreOpenForm(PreOpenFormEventArgs e)
{
if (DBServiceHelper.IsExistTable(e.Context, "cbmxCursor"))
{
DBServiceHelper.Execute(e.Context, $"DELETE FROM cbmxCursor_ckzjcl where FUserID ={e.Context.UserId};");
DBServiceHelper.Execute(e.Context, $"DELETE FROM cbmxCursor_ckzjrg where FUserID ={e.Context.UserId};");
DBServiceHelper.Execute(e.Context, $"DELETE FROM cbmxCursor_ckzzfy where FUserID ={e.Context.UserId};");
DBServiceHelper.Execute(e.Context, $"DELETE FROM cbmxCursor_ckljzj where FUserID ={e.Context.UserId};");
DBServiceHelper.Execute(e.Context, $"DELETE FROM cbmxCursor where FUserID ={e.Context.UserId};");
}
base.PreOpenForm(e);
}
private bool isLoading = false; private bool isLoading = false;
public override void OnLoad(EventArgs e) public override void OnLoad(EventArgs e)
...@@ -56,6 +69,26 @@ namespace LQKJ_OFLCostReport ...@@ -56,6 +69,26 @@ namespace LQKJ_OFLCostReport
ShowProgressBar(false); ShowProgressBar(false);
} }
public override void FormClosed(FormClosedEventArgs e)
{
base.FormClosed(e);
if (DBServiceHelper.IsExistTable(this.Context, "cbmxCursor"))
{
DBServiceHelper.Execute(this.Context, $"DELETE FROM cbmxCursor_ckzjcl where FUserID ={this.Context.UserId};");
DBServiceHelper.Execute(this.Context, $"DELETE FROM cbmxCursor_ckzjrg where FUserID ={this.Context.UserId};");
DBServiceHelper.Execute(this.Context, $"DELETE FROM cbmxCursor_ckzzfy where FUserID ={this.Context.UserId};");
DBServiceHelper.Execute(this.Context, $"DELETE FROM cbmxCursor_ckljzj where FUserID ={this.Context.UserId};");
DBServiceHelper.Execute(this.Context, $"DELETE FROM cbmxCursor where FUserID ={this.Context.UserId};");
}
}
public override void PrepareFilterParameter(FilterArgs e)
{
base.PrepareFilterParameter(e);
e.FilterString = $@"FUserID={this.Context.UserId}";
}
private void ShowProgressBar(bool userTruePro) private void ShowProgressBar(bool userTruePro)
...@@ -66,21 +99,9 @@ namespace LQKJ_OFLCostReport ...@@ -66,21 +99,9 @@ namespace LQKJ_OFLCostReport
{ {
try try
{ {
string sql = $@"IF EXISTS (SELECT * FROM sys.tables WHERE name = 'cbmxCursor')
BEGIN
delete cbmxCursor where FUserID ={this.Context.UserId}
END";
DBServiceHelper.Execute(this.Context, sql);
this.View.Session["ProcessRateValue"] = 10; this.View.Session["ProcessRateValue"] = 10;
DataTable dataTable = GetSaleDetailData(); string tmpTableName = GetSaleDetailData();
string tmpTableName = createTmpTable(dataTable); CreateView(tmpTableName);
//向表插入数据
using (KDTransactionScope scope = new KDTransactionScope(TransactionScopeOption.Required))
{
DBUtils.BulkInserts(this.Context, dataTable);
scope.Complete();
}
CreateView();
this.View.Session["ProcessRateValue"] = 100; this.View.Session["ProcessRateValue"] = 100;
isLoading = true; isLoading = true;
this.View.Refresh(); this.View.Refresh();
...@@ -97,23 +118,8 @@ END"; ...@@ -97,23 +118,8 @@ END";
}, null); }, null);
} }
public override void FormClosed(FormClosedEventArgs e)
{
base.FormClosed(e);
string sql = $@"IF EXISTS (SELECT * FROM sys.tables WHERE name = 'cbmxCursor')
BEGIN
delete cbmxCursor where FUserID ={this.Context.UserId}
END";
DBServiceHelper.Execute(this.Context, sql);
}
public override void PrepareFilterParameter(FilterArgs e)
{
base.PrepareFilterParameter(e);
e.FilterString = $@"FUserID={this.Context.UserId}";
}
// 获取销售明细简单账表数据 // 获取销售明细简单账表数据
public DataTable GetSaleDetailData() public string GetSaleDetailData()
{ {
this.View.Session["ProcessRateValue"] = 20; this.View.Session["ProcessRateValue"] = 20;
ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(this.Context); ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(this.Context);
...@@ -145,81 +151,202 @@ END"; ...@@ -145,81 +151,202 @@ END";
p.FilterParameter = filter; p.FilterParameter = filter;
p.FilterFieldInfo = model.FilterFieldInfo; p.FilterFieldInfo = model.FilterFieldInfo;
p.BaseDataTempTable.AddRange(permissionService.GetBaseDataTempTable(this.Context, saleMetadata.BusinessInfo.GetForm().Id)); p.BaseDataTempTable.AddRange(permissionService.GetBaseDataTempTable(this.Context, saleMetadata.BusinessInfo.GetForm().Id));
using (DataTable dt = sysReporSservice.GetData(this.Context, saleMetadata.BusinessInfo, p)) return sysReporSservice.GetDataTableName(this.Context, saleMetadata.BusinessInfo, p);
{
DataColumn newColumn = new DataColumn("FUserID", typeof(int));
dt.Columns.Add(newColumn);
foreach (DataRow row in dt.Rows)
{
row["FUserID"] = this.Context.UserId;
}
//dt.Rows
return dt;
//dt就是报表数据,接下来就是你发挥的时间。
}
} finally } finally
{ {
this.View.Session["ProcessRateValue"] = 50; this.View.Session["ProcessRateValue"] = 50;
ServiceFactory.CloseService(sysReporSservice); ServiceFactory.CloseService(sysReporSservice);
ServiceFactory.CloseService(permissionService); ServiceFactory.CloseService(permissionService);
} }
} }
public string createTmpTable(DataTable data)
private void CreateView(string tmpTableName)
{ {
this.View.Session["ProcessRateValue"] = 60; if (!DBServiceHelper.IsExistTable(this.Context, "cbmxCursor"))
string fieldColumnSql = GetCreateTmpTableNameSql(data.Columns); {
string tmpTableName = "cbmxCursor"; DBServiceHelper.Execute(this.Context, $@"select *,{this.Context.UserId} FUSERID into cbmxCursor from {tmpTableName}");
data.TableName = tmpTableName;
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectMaterial--直接材料
into cbmxCursor_ckzjcl FROM cbmxCursor t1
left join T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = '材料成本'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
SELECT t1.FBillNo, t1.FUSERID, t1.FBillSeq, SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectLabor--直接人工
into cbmxCursor_ckzjrg FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = '工资'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutManufacturingCost--制造费用
into cbmxCursor_ckzzfy FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME <> '材料成本'
and t2L.FNAME <> '工资'
and FNAME not like '%折旧费用%'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutAddDepreciation --累计折旧
into cbmxCursor_ckljzj FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where FNAME like '%折旧费用%'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
string createTmpTableSql = $@"/*dialect*/ string createTmpTableSql = $@"/*dialect*/
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = '{tmpTableName}') CREATE INDEX idx_cbmx_FBillEntryId ON cbmxCursor (FBillEntryId);
BEGIN CREATE INDEX idx_cbmx_FBillNo ON cbmxCursor (FBillNo);
CREATE TABLE {tmpTableName} {fieldColumnSql}; CREATE INDEX idx_cbmx_FBillSeq ON cbmxCursor (FBillSeq);
CREATE INDEX idx_cbmx_FBillEntryId ON {tmpTableName} (FBillEntryId); CREATE INDEX idx_cbmx_FSTOCKID ON cbmxCursor (FSTOCKID);
CREATE INDEX idx_cbmx_FBillNo ON {tmpTableName} (FBillNo); CREATE INDEX idx_cbmx_FEXPENSEID ON cbmxCursor (FEXPENSEID);
CREATE INDEX idx_cbmx_FBillSeq ON {tmpTableName} (FBillSeq); CREATE INDEX idx_cbmx_FUserId ON cbmxCursor (FUserID);
CREATE INDEX idx_cbmx_FSTOCKID ON {tmpTableName} (FSTOCKID);
CREATE INDEX idx_cbmx_FEXPENSEID ON {tmpTableName} (FEXPENSEID); CREATE INDEX idx_cbmxCursor_ckzjcl_FBillNo ON cbmxCursor_ckzjcl (FBillNo);
CREATE INDEX idx_cbmx_FUserId ON {tmpTableName} (FUserID); CREATE INDEX idx_cbmxCursor_ckzjcl_FBillSeq ON cbmxCursor_ckzjcl (FBillSeq);
END CREATE INDEX idx_cbmxCursor_ckzjcl_FUserId ON cbmxCursor_ckzjcl (FUSERID);
ELSE
BEGIN
ALTER INDEX idx_cbmx_FBillEntryId ON {tmpTableName} REBUILD; CREATE INDEX idx_cbmxCursor_ckzjrg_FBillNo ON cbmxCursor_ckzjrg (FBillNo);
ALTER INDEX idx_cbmx_FBillNo ON {tmpTableName} REBUILD; CREATE INDEX idx_cbmxCursor_ckzjrg_FBillSeq ON cbmxCursor_ckzjrg (FBillSeq);
ALTER INDEX idx_cbmx_FBillSeq ON {tmpTableName} REBUILD; CREATE INDEX idx_cbmxCursor_ckzjrg_FUserId ON cbmxCursor_ckzjrg (FUSERID);
ALTER INDEX idx_cbmx_FSTOCKID ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FEXPENSEID ON {tmpTableName} REBUILD; CREATE INDEX idx_cbmxCursor_ckzzfy_FBillNo ON cbmxCursor_ckzzfy (FBillNo);
ALTER INDEX idx_cbmx_FUserId ON {tmpTableName} REBUILD; CREATE INDEX idx_cbmxCursor_ckzzfy_FBillSeq ON cbmxCursor_ckzzfy (FBillSeq);
END CREATE INDEX idx_cbmxCursor_ckzzfy_FUserId ON cbmxCursor_ckzzfy (FUSERID);
"; CREATE INDEX idx_cbmxCursor_ckljzj_FBillNo ON cbmxCursor_ckljzj (FBillNo);
CREATE INDEX idx_cbmxCursor_ckljzj_FBillSeq ON cbmxCursor_ckljzj (FBillSeq);
CREATE INDEX idx_cbmxCursor_ckljzj_FUserId ON cbmxCursor_ckljzj (FUSERID);
";
DBServiceHelper.Execute(this.Context, createTmpTableSql); DBServiceHelper.Execute(this.Context, createTmpTableSql);
this.View.Session["ProcessRateValue"] = 70;
return tmpTableName;
}
private string GetCreateTmpTableNameSql(DataColumnCollection fieldColumn)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("(");
List<string> listStr = new List<string>();
foreach (var field in fieldColumn)
{
listStr.Add(Convert.ToString(field).Trim() + " nvarchar(1000)");
}
stringBuilder.AppendLine(String.Join(",", listStr.Distinct()));
stringBuilder.AppendLine(")");
return stringBuilder.ToString();
} }
private void CreateView() else
{ {
DBServiceHelper.Execute(this.Context, $@"insert into cbmxCursor select *,{this.Context.UserId} FUSERID from {tmpTableName}");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
insert into cbmxCursor_ckzjcl SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectMaterial--直接材料
FROM cbmxCursor t1
left join T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = '材料成本'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
insert into cbmxCursor_ckzjrg SELECT t1.FBillNo,t1.FUSERID, t1.FBillSeq, SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectLabor--直接人工
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = '工资'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
insert into cbmxCursor_ckzzfy SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutManufacturingCost--制造费用
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME <> '材料成本'
and t2L.FNAME <> '工资'
and FNAME not like '%折旧费用%'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
DBServiceHelper.Execute(this.Context, $@"/*dialect*/
insert into cbmxCursor_ckljzj SELECT t1.FBillNo,
t1.FUSERID,
t1.FBillSeq,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutAddDepreciation --累计折旧
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where FNAME like '%折旧费用%'
and t1.FEXPENSENAME <> '小计'
group by t1.FBillNo, t1.FBillSeq, t1.FUSERID
");
string createTmpTableSql = $@"/*dialect*/
ALTER INDEX idx_cbmx_FBillEntryId ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmx_FBillNo ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmx_FBillSeq ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmx_FSTOCKID ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmx_FEXPENSEID ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmx_FUserId ON cbmxCursor REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjcl_FBillNo ON cbmxCursor_ckzjcl REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjcl_FBillSeq ON cbmxCursor_ckzjcl REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjcl_FUserId ON cbmxCursor_ckzjcl REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjrg_FBillNo ON cbmxCursor_ckzjrg REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjrg_FBillSeq ON cbmxCursor_ckzjrg REBUILD;
ALTER INDEX idx_cbmxCursor_ckzjrg_FUserId ON cbmxCursor_ckzjrg REBUILD;
ALTER INDEX idx_cbmxCursor_ckzzfy_FBillNo ON cbmxCursor_ckzzfy REBUILD;
ALTER INDEX idx_cbmxCursor_ckzzfy_FBillSeq ON cbmxCursor_ckzzfy REBUILD;
ALTER INDEX idx_cbmxCursor_ckzzfy_FUserId ON cbmxCursor_ckzzfy REBUILD;
ALTER INDEX idx_cbmxCursor_ckljzj_FBillNo ON cbmxCursor_ckljzj REBUILD;
ALTER INDEX idx_cbmxCursor_ckljzj_FBillSeq ON cbmxCursor_ckljzj REBUILD;
ALTER INDEX idx_cbmxCursor_ckljzj_FUserId ON cbmxCursor_ckljzj REBUILD;
";
DBServiceHelper.Execute(this.Context, createTmpTableSql);
}
this.View.Session["ProcessRateValue"] = 80; this.View.Session["ProcessRateValue"] = 80;
string sql = $@"/*dialect*/IF OBJECT_ID('T_BAS_PREBDTWO', 'V') IS NULL string sql = $@"/*dialect*/IF OBJECT_ID('T_BAS_PREBDTWO', 'V') IS NULL
BEGIN BEGIN
EXEC('CREATE VIEW T_BAS_PREBDTWO AS EXEC('CREATE VIEW T_BAS_PREBDTWO AS
select ROW_NUMBER() OVER (ORDER BY FOutBillNo,FOutBillSeq) AS FID,* from ( select ROW_NUMBER() OVER (ORDER BY FOutBillNo,FOutBillSeq) AS FID,* from (
select ''0'' FNUMBER, select ''0'' FNUMBER,
''0'' FMASTERID, ''0'' FMASTERID,
''0'' FUSEORGID, ''0'' FUSEORGID,
''0'' FFORBIDSTATUS, ''0'' FFORBIDSTATUS,
...@@ -230,8 +357,8 @@ select ''0'' FNUMBER, ...@@ -230,8 +357,8 @@ select ''0'' FNUMBER,
t1.FMaterialName, -- 物料名称 t1.FMaterialName, -- 物料名称
t1.FSpecification, -- 规格型号 t1.FSpecification, -- 规格型号
ckmx.FREALQTY FOutQty, --出库数量 ckmx.FREALQTY FOutQty, --出库数量
t1.FUserID,
ck.FNAME FSTOCKID, --仓库 ck.FNAME FSTOCKID, --仓库
t1.FUSERID,
ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料 ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料
ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工 ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工
ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用 ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用
...@@ -248,30 +375,20 @@ select ''0'' FNUMBER, ...@@ -248,30 +375,20 @@ select ''0'' FNUMBER,
t2.FNOTAXAMOUNT FNOTAXAMOUNTFOR, --不含税金额 t2.FNOTAXAMOUNT FNOTAXAMOUNTFOR, --不含税金额
t2.FTAXAMOUNTFOR, --税额 t2.FTAXAMOUNTFOR, --税额
t2.FALLAMOUNTFOR, --价税合计 t2.FALLAMOUNTFOR, --价税合计
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial, -- 收入直接材料 ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial, -- 收入直接材料
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor, -- 收入直接人工 ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor, -- 收入直接人工
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost, -- 收入制造费用 ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost, -- 收入制造费用
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation, -- 收入累计折旧 ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation, -- 收入累计折旧
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) + (ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) + (ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) + (ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInTotalCost -- 收入成本合计 ISNULL(t2.FPRICEQTY, 0)) AS FInTotalCost -- 收入成本合计
from cbmxCursor t1
from cbmxCursor t1
left join T_SAL_OUTSTOCKENTRY ckmx on ckmx.FENTRYID = t1.FBillEntryId and t1.FBillFormId = ''SAL_OUTSTOCK'' left join T_SAL_OUTSTOCKENTRY ckmx on ckmx.FENTRYID = t1.FBillEntryId and t1.FBillFormId = ''SAL_OUTSTOCK''
left join T_AR_RECEIVABLEENTRY_LK yslk left join T_AR_RECEIVABLEENTRY_LK yslk
on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_OUTSTOCKENTRY'' on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_OUTSTOCKENTRY''
...@@ -281,63 +398,25 @@ from cbmxCursor t1 ...@@ -281,63 +398,25 @@ from cbmxCursor t1
left join T_BD_STOCK_L ck on t1.FSTOCKID = ck.FSTOCKID left join T_BD_STOCK_L ck on t1.FSTOCKID = ck.FSTOCKID
left join T_BD_EXPENSE t4 on t1.FEXPENSEID = t4.FNUMBER left join T_BD_EXPENSE t4 on t1.FEXPENSEID = t4.FNUMBER
left join T_BD_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID left join T_BD_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID
left join (SELECT t1.FBillNo, left join cbmxCursor_ckzjcl ckzjcl
t1.FBillSeq, on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUSERID = ckzjcl.FUSERID
t1.FUserID, left join cbmxCursor_ckzjrg ckzjrg
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectMaterial--直接材料 on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUSERID = ckzjrg.FUSERID
FROM cbmxCursor t1 left join cbmxCursor_ckzzfy ckzzfy
left join T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUSERID = ckzzfy.FUSERID
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052 left join cbmxCursor_ckljzj ckljzj
where t2L.FNAME = ''材料成本'' on t1.FBillNo = ckljzj.FBillNo and t1.FBillSeq = ckljzj.FBillSeq and t1.FUSERID = ckljzj.FUSERID
and t1.FEXPENSENAME <> ''小计'' where ckmx.FID is not null
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzjcl group by t1.FBillDate,
on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUserID = ckzjcl.FUserID
left join (SELECT t1.FBillNo, t1.FBillSeq, t1.FUserID, SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectLabor--直接人工
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = ''工资''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzjrg
on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUserID = ckzjrg.FUserID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutManufacturingCost--制造费用
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME <> ''材料成本''
and t2L.FNAME <> ''工资''
and FNAME not like ''%折旧费用%''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzzfy
on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUserID = ckzzfy.FUserID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutAddDepreciation --累计折旧
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where FNAME like ''%折旧费用%''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckljzj
on t1.FBillNo = ckljzj.FBillNo and t1.FBillSeq = ckljzj.FBillSeq and t1.FUserID = ckljzj.FUserID
where ckmx.FID is not null
group by t1.FBillDate,
t1.FBillNo, t1.FBillNo,
t1.FBillSeq, t1.FBillSeq,
t5.FNUMBER, t5.FNUMBER,
t1.FMaterialName, t1.FMaterialName,
t1.FSpecification, t1.FSpecification,
ckmx.FREALQTY, ckmx.FREALQTY,
t1.FUserID,
ck.FNAME, ck.FNAME,
t3.FDATE, t3.FDATE,
t1.FUSERID,
t3.FBILLNO, t3.FBILLNO,
t2.FPRICEQTY, t2.FPRICEQTY,
t2.FTAXPRICE, t2.FTAXPRICE,
...@@ -351,9 +430,9 @@ group by t1.FBillDate, ...@@ -351,9 +430,9 @@ group by t1.FBillDate,
ckzjrg.FOutDirectLabor, ckzjrg.FOutDirectLabor,
ckzzfy.FOutManufacturingCost, ckzzfy.FOutManufacturingCost,
ckljzj.FOutAddDepreciation ckljzj.FOutAddDepreciation
union all union all
select DISTINCT ''0'' FNUMBER, select DISTINCT ''0'' FNUMBER,
''0'' FMASTERID, ''0'' FMASTERID,
''0'' FUSEORGID, ''0'' FUSEORGID,
''0'' FFORBIDSTATUS, ''0'' FFORBIDSTATUS,
...@@ -364,8 +443,8 @@ select DISTINCT ''0'' FNUMBER, ...@@ -364,8 +443,8 @@ select DISTINCT ''0'' FNUMBER,
t1.FMaterialName, -- 物料名称 t1.FMaterialName, -- 物料名称
t1.FSpecification, -- 规格型号 t1.FSpecification, -- 规格型号
ckmx.FREALQTY FOutQty, --出库数量 ckmx.FREALQTY FOutQty, --出库数量
t1.FUserID,
ck.FNAME FSTOCKID, --仓库 ck.FNAME FSTOCKID, --仓库
t1.FUSERID,
ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料 ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料
ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工 ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工
ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用 ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用
...@@ -386,19 +465,19 @@ select DISTINCT ''0'' FNUMBER, ...@@ -386,19 +465,19 @@ select DISTINCT ''0'' FNUMBER,
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial, ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial,
-- 收入直接人工 -- 收入直接人工
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor, ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor,
-- 收入制造费用 -- 收入制造费用
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost, ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost,
-- 收入累计折旧 -- 收入累计折旧
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation, ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation,
-- 收入成本合计 -- 收入成本合计
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) + (ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) + (ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
...@@ -406,7 +485,7 @@ select DISTINCT ''0'' FNUMBER, ...@@ -406,7 +485,7 @@ select DISTINCT ''0'' FNUMBER,
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * (ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInTotalCost ISNULL(t2.FPRICEQTY, 0)) AS FInTotalCost
from cbmxCursor t1 from cbmxCursor t1
left join T_SAL_RETURNSTOCKENTRY ckmx on ckmx.FENTRYID = t1.FBillEntryId and t1.FBillFormId = ''SAL_RETURNSTOCK'' left join T_SAL_RETURNSTOCKENTRY ckmx on ckmx.FENTRYID = t1.FBillEntryId and t1.FBillFormId = ''SAL_RETURNSTOCK''
left join T_AR_RECEIVABLEENTRY_LK yslk left join T_AR_RECEIVABLEENTRY_LK yslk
on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_RETURNSTOCKENTRY'' on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_RETURNSTOCKENTRY''
...@@ -416,56 +495,18 @@ from cbmxCursor t1 ...@@ -416,56 +495,18 @@ from cbmxCursor t1
left join T_BD_STOCK_L ck on t1.FSTOCKID = ck.FSTOCKID left join T_BD_STOCK_L ck on t1.FSTOCKID = ck.FSTOCKID
left join T_BD_EXPENSE t4 on t1.FEXPENSEID = t4.FNUMBER left join T_BD_EXPENSE t4 on t1.FEXPENSEID = t4.FNUMBER
left join T_BD_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID left join T_BD_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID
left join (SELECT t1.FBillNo, left join cbmxCursor_ckzjcl ckzjcl
t1.FBillSeq, on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUSERID = ckzjcl.FUSERID
t1.FUserID, left join cbmxCursor_ckzjrg ckzjrg
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectMaterial--直接材料 on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUSERID = ckzjrg.FUSERID
FROM cbmxCursor t1 left join cbmxCursor_ckzzfy ckzzfy
left join T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUSERID = ckzzfy.FUSERID
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052 left join cbmxCursor_ckljzj ckljzj
where t2L.FNAME = ''材料成本'' on t1.FBillNo = ckljzj.FBillNo and t1.FBillSeq = ckljzj.FBillSeq and t1.FUSERID = ckljzj.FUSERID
and t1.FEXPENSENAME <> ''小计'' where ckmx.FID is not null
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzjcl union all
on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUserID = ckzjcl.FUserID --查没有原单应收单
left join (SELECT t1.FBillNo, t1.FBillSeq, t1.FUserID, SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutDirectLabor--直接人工 select ''0'' FNUMBER,
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME = ''工资''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzjrg
on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUserID = ckzjrg.FUserID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutManufacturingCost--制造费用
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where t2L.FNAME <> ''材料成本''
and t2L.FNAME <> ''工资''
and FNAME not like ''%折旧费用%''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckzzfy
on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUserID = ckzzfy.FUserID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
SUM(CAST(t1.FAmount AS DECIMAL(18, 2))) FOutAddDepreciation --累计折旧
FROM cbmxCursor t1
left join
T_BD_EXPENSE t2 ON t1.FEXPENSEID = t2.FNUMBER
left join T_BD_EXPENSE_L t2L on t2.FEXPID = t2L.FEXPID and t2L.FLOCALEID = 2052
where FNAME like ''%折旧费用%''
and t1.FEXPENSENAME <> ''小计''
group by t1.FBillNo, t1.FBillSeq, t1.FUserID) ckljzj
on t1.FBillNo = ckljzj.FBillNo and t1.FBillSeq = ckljzj.FBillSeq and t1.FUserID = ckljzj.FUserID
where ckmx.FID is not null
union all
--查没有原单应收单
select ''0'' FNUMBER,
''0'' FMASTERID, ''0'' FMASTERID,
''0'' FUSEORGID, ''0'' FUSEORGID,
''0'' FFORBIDSTATUS, ''0'' FFORBIDSTATUS,
...@@ -476,8 +517,8 @@ select ''0'' FNUMBER, ...@@ -476,8 +517,8 @@ select ''0'' FNUMBER,
t3L.FNAME, -- 物料名称 t3L.FNAME, -- 物料名称
t3L.FSpecification, -- 规格型号 t3L.FSpecification, -- 规格型号
0 FOutQty, --出库数量 0 FOutQty, --出库数量
t4.FUserID,
null FSTOCKID, --仓库 null FSTOCKID, --仓库
t4.FUSERID,
0 FOutDirectMaterial, --出库直接材料 0 FOutDirectMaterial, --出库直接材料
0 FOutDirectLabor, --出库直接人工 0 FOutDirectLabor, --出库直接人工
0 FOutManufacturingCost, --出库制造费用 0 FOutManufacturingCost, --出库制造费用
...@@ -497,16 +538,16 @@ select ''0'' FNUMBER, ...@@ -497,16 +538,16 @@ select ''0'' FNUMBER,
0 AS FInManufacturingCost, -- 收入制造费用 0 AS FInManufacturingCost, -- 收入制造费用
0 AS FInAddDepreciation, -- 收入累计折旧 0 AS FInAddDepreciation, -- 收入累计折旧
0 AS FInTotalCost -- 收入成本合计 0 AS FInTotalCost -- 收入成本合计
from t_AR_receivable t1 from (select FUserID from cbmxCursor group by FUserID) t4
cross join t_AR_receivable t1
left join T_AR_RECEIVABLEENTRY t2 on t1.FID = t2.FID left join T_AR_RECEIVABLEENTRY t2 on t1.FID = t2.FID
left join T_BD_MATERIAL t3 on t3.FMATERIALID = t2.FMATERIALID left join T_BD_MATERIAL t3 on t3.FMATERIALID = t2.FMATERIALID
left join T_BD_MATERIAL_L t3L on t3.FMATERIALID = t3L.FMATERIALID and t3L.FLOCALEID = 2052 left join T_BD_MATERIAL_L t3L on t3.FMATERIALID = t3L.FMATERIALID and t3L.FLOCALEID = 2052
left join (select FUserID from cbmxCursor group by FUserID) t4 on 1 = 1 where FSOURCETYPE = ''''
where FSOURCETYPE = '''' )t1
)t1 ')
')
END END
"; ";
DBServiceHelper.Execute(this.Context, sql); DBServiceHelper.Execute(this.Context, sql);
this.View.Session["ProcessRateValue"] = 90; this.View.Session["ProcessRateValue"] = 90;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论