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

提高性能;

上级 dbf255be
......@@ -46,6 +46,19 @@ namespace LQKJ_OFLCostReport
[Description("获取销售订单明细报表数据"), HotUpdate]
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;
public override void OnLoad(EventArgs e)
......@@ -56,6 +69,26 @@ namespace LQKJ_OFLCostReport
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)
......@@ -66,21 +99,9 @@ namespace LQKJ_OFLCostReport
{
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;
DataTable dataTable = GetSaleDetailData();
string tmpTableName = createTmpTable(dataTable);
//向表插入数据
using (KDTransactionScope scope = new KDTransactionScope(TransactionScopeOption.Required))
{
DBUtils.BulkInserts(this.Context, dataTable);
scope.Complete();
}
CreateView();
string tmpTableName = GetSaleDetailData();
CreateView(tmpTableName);
this.View.Session["ProcessRateValue"] = 100;
isLoading = true;
this.View.Refresh();
......@@ -97,23 +118,8 @@ END";
}, 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;
ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(this.Context);
......@@ -145,81 +151,202 @@ END";
p.FilterParameter = filter;
p.FilterFieldInfo = model.FilterFieldInfo;
p.BaseDataTempTable.AddRange(permissionService.GetBaseDataTempTable(this.Context, saleMetadata.BusinessInfo.GetForm().Id));
using (DataTable dt = sysReporSservice.GetData(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就是报表数据,接下来就是你发挥的时间。
}
return sysReporSservice.GetDataTableName(this.Context, saleMetadata.BusinessInfo, p);
} finally
{
this.View.Session["ProcessRateValue"] = 50;
ServiceFactory.CloseService(sysReporSservice);
ServiceFactory.CloseService(permissionService);
}
}
public string createTmpTable(DataTable data)
private void CreateView(string tmpTableName)
{
this.View.Session["ProcessRateValue"] = 60;
string fieldColumnSql = GetCreateTmpTableNameSql(data.Columns);
string tmpTableName = "cbmxCursor";
data.TableName = tmpTableName;
if (!DBServiceHelper.IsExistTable(this.Context, "cbmxCursor"))
{
DBServiceHelper.Execute(this.Context, $@"select *,{this.Context.UserId} FUSERID into cbmxCursor from {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*/
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = '{tmpTableName}')
BEGIN
CREATE TABLE {tmpTableName} {fieldColumnSql};
CREATE INDEX idx_cbmx_FBillEntryId ON {tmpTableName} (FBillEntryId);
CREATE INDEX idx_cbmx_FBillNo ON {tmpTableName} (FBillNo);
CREATE INDEX idx_cbmx_FBillSeq ON {tmpTableName} (FBillSeq);
CREATE INDEX idx_cbmx_FSTOCKID ON {tmpTableName} (FSTOCKID);
CREATE INDEX idx_cbmx_FEXPENSEID ON {tmpTableName} (FEXPENSEID);
CREATE INDEX idx_cbmx_FUserId ON {tmpTableName} (FUserID);
END
ELSE
BEGIN
ALTER INDEX idx_cbmx_FBillEntryId ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FBillNo ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FBillSeq ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FSTOCKID ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FEXPENSEID ON {tmpTableName} REBUILD;
ALTER INDEX idx_cbmx_FUserId ON {tmpTableName} REBUILD;
END
";
CREATE INDEX idx_cbmx_FBillEntryId ON cbmxCursor (FBillEntryId);
CREATE INDEX idx_cbmx_FBillNo ON cbmxCursor (FBillNo);
CREATE INDEX idx_cbmx_FBillSeq ON cbmxCursor (FBillSeq);
CREATE INDEX idx_cbmx_FSTOCKID ON cbmxCursor (FSTOCKID);
CREATE INDEX idx_cbmx_FEXPENSEID ON cbmxCursor (FEXPENSEID);
CREATE INDEX idx_cbmx_FUserId ON cbmxCursor (FUserID);
CREATE INDEX idx_cbmxCursor_ckzjcl_FBillNo ON cbmxCursor_ckzjcl (FBillNo);
CREATE INDEX idx_cbmxCursor_ckzjcl_FBillSeq ON cbmxCursor_ckzjcl (FBillSeq);
CREATE INDEX idx_cbmxCursor_ckzjcl_FUserId ON cbmxCursor_ckzjcl (FUSERID);
CREATE INDEX idx_cbmxCursor_ckzjrg_FBillNo ON cbmxCursor_ckzjrg (FBillNo);
CREATE INDEX idx_cbmxCursor_ckzjrg_FBillSeq ON cbmxCursor_ckzjrg (FBillSeq);
CREATE INDEX idx_cbmxCursor_ckzjrg_FUserId ON cbmxCursor_ckzjrg (FUSERID);
CREATE INDEX idx_cbmxCursor_ckzzfy_FBillNo ON cbmxCursor_ckzzfy (FBillNo);
CREATE INDEX idx_cbmxCursor_ckzzfy_FBillSeq ON cbmxCursor_ckzzfy (FBillSeq);
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);
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;
string sql = $@"/*dialect*/IF OBJECT_ID('T_BAS_PREBDTWO', 'V') IS NULL
BEGIN
EXEC('CREATE VIEW T_BAS_PREBDTWO AS
select ROW_NUMBER() OVER (ORDER BY FOutBillNo,FOutBillSeq) AS FID,* from (
select ''0'' FNUMBER,
select ROW_NUMBER() OVER (ORDER BY FOutBillNo,FOutBillSeq) AS FID,* from (
select ''0'' FNUMBER,
''0'' FMASTERID,
''0'' FUSEORGID,
''0'' FFORBIDSTATUS,
......@@ -230,8 +357,8 @@ select ''0'' FNUMBER,
t1.FMaterialName, -- 物料名称
t1.FSpecification, -- 规格型号
ckmx.FREALQTY FOutQty, --出库数量
t1.FUserID,
ck.FNAME FSTOCKID, --仓库
t1.FUSERID,
ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料
ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工
ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用
......@@ -248,30 +375,20 @@ select ''0'' FNUMBER,
t2.FNOTAXAMOUNT FNOTAXAMOUNTFOR, --不含税金额
t2.FTAXAMOUNTFOR, --税额
t2.FALLAMOUNTFOR, --价税合计
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial, -- 收入直接材料
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor, -- 收入直接人工
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost, -- 收入制造费用
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation, -- 收入累计折旧
(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(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) * ISNULL(t2.FPRICEQTY, 0)) +
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
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_AR_RECEIVABLEENTRY_LK yslk
on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_OUTSTOCKENTRY''
......@@ -281,63 +398,25 @@ from cbmxCursor t1
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_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
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) ckzjcl
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,
left join cbmxCursor_ckzjcl ckzjcl
on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUSERID = ckzjcl.FUSERID
left join cbmxCursor_ckzjrg ckzjrg
on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUSERID = ckzjrg.FUSERID
left join cbmxCursor_ckzzfy ckzzfy
on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUSERID = ckzzfy.FUSERID
left join cbmxCursor_ckljzj 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.FBillSeq,
t5.FNUMBER,
t1.FMaterialName,
t1.FSpecification,
ckmx.FREALQTY,
t1.FUserID,
ck.FNAME,
t3.FDATE,
t1.FUSERID,
t3.FBILLNO,
t2.FPRICEQTY,
t2.FTAXPRICE,
......@@ -351,9 +430,9 @@ group by t1.FBillDate,
ckzjrg.FOutDirectLabor,
ckzzfy.FOutManufacturingCost,
ckljzj.FOutAddDepreciation
union all
union all
select DISTINCT ''0'' FNUMBER,
select DISTINCT ''0'' FNUMBER,
''0'' FMASTERID,
''0'' FUSEORGID,
''0'' FFORBIDSTATUS,
......@@ -364,8 +443,8 @@ select DISTINCT ''0'' FNUMBER,
t1.FMaterialName, -- 物料名称
t1.FSpecification, -- 规格型号
ckmx.FREALQTY FOutQty, --出库数量
t1.FUserID,
ck.FNAME FSTOCKID, --仓库
t1.FUSERID,
ISNULL(ckzjcl.FOutDirectMaterial, 0) FOutDirectMaterial, --出库直接材料
ISNULL(ckzjrg.FOutDirectLabor, 0) FOutDirectLabor, --出库直接人工
ISNULL(ckzzfy.FOutManufacturingCost, 0) FOutManufacturingCost, --出库制造费用
......@@ -386,19 +465,19 @@ select DISTINCT ''0'' FNUMBER,
(ISNULL(ckzjcl.FOutDirectMaterial, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectMaterial,
-- 收入直接人工
-- 收入直接人工
(ISNULL(ckzjrg.FOutDirectLabor, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInDirectLabor,
-- 收入制造费用
-- 收入制造费用
(ISNULL(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInManufacturingCost,
-- 收入累计折旧
-- 收入累计折旧
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
ISNULL(t2.FPRICEQTY, 0)) AS FInAddDepreciation,
-- 收入成本合计
-- 收入成本合计
(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(ckzzfy.FOutManufacturingCost, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
......@@ -406,7 +485,7 @@ select DISTINCT ''0'' FNUMBER,
(ISNULL(ckljzj.FOutAddDepreciation, 0) / NULLIF(ISNULL(ckmx.FREALQTY, 0), 0) *
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_AR_RECEIVABLEENTRY_LK yslk
on t1.FBillEntryId = yslk.FSID and yslk.FSTABLENAME = ''T_SAL_RETURNSTOCKENTRY''
......@@ -416,56 +495,18 @@ from cbmxCursor t1
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_MATERIAL t5 on t1.FMATERIALID = t5.FMATERIALID
left join (SELECT t1.FBillNo,
t1.FBillSeq,
t1.FUserID,
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) ckzjcl
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
union all
--查没有原单应收单
select ''0'' FNUMBER,
left join cbmxCursor_ckzjcl ckzjcl
on t1.FBillNo = ckzjcl.FBillNo and t1.FBillSeq = ckzjcl.FBillSeq and t1.FUSERID = ckzjcl.FUSERID
left join cbmxCursor_ckzjrg ckzjrg
on t1.FBillNo = ckzjrg.FBillNo and t1.FBillSeq = ckzjrg.FBillSeq and t1.FUSERID = ckzjrg.FUSERID
left join cbmxCursor_ckzzfy ckzzfy
on t1.FBillNo = ckzzfy.FBillNo and t1.FBillSeq = ckzzfy.FBillSeq and t1.FUSERID = ckzzfy.FUSERID
left join cbmxCursor_ckljzj 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'' FUSEORGID,
''0'' FFORBIDSTATUS,
......@@ -476,8 +517,8 @@ select ''0'' FNUMBER,
t3L.FNAME, -- 物料名称
t3L.FSpecification, -- 规格型号
0 FOutQty, --出库数量
t4.FUserID,
null FSTOCKID, --仓库
t4.FUSERID,
0 FOutDirectMaterial, --出库直接材料
0 FOutDirectLabor, --出库直接人工
0 FOutManufacturingCost, --出库制造费用
......@@ -497,16 +538,16 @@ select ''0'' FNUMBER,
0 AS FInManufacturingCost, -- 收入制造费用
0 AS FInAddDepreciation, -- 收入累计折旧
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_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 (select FUserID from cbmxCursor group by FUserID) t4 on 1 = 1
where FSOURCETYPE = ''''
)t1
')
where FSOURCETYPE = ''''
)t1
')
END
";
";
DBServiceHelper.Execute(this.Context, sql);
this.View.Session["ProcessRateValue"] = 90;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论