a
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
using ExtensionMethods;
|
||||
using Kingdee.BOS.Core;
|
||||
using Kingdee.BOS.Core.CommonFilter;
|
||||
using Kingdee.BOS.Core.DynamicForm;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
||||
using Kingdee.BOS.KDThread;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.ServiceHelper;
|
||||
using Kingdee.BOS.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace GZ.LJY000.Enpower.POSH_PRODUCTCOSTQUICKQUERY2
|
||||
{
|
||||
[Description("产品成本还原分解汇总报表"), HotUpdate]
|
||||
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
|
||||
{
|
||||
private FilterShowParameter _showParameter;
|
||||
|
||||
public BillEventPlugInEx() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按钮点击事件
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
public override void BarItemClick(BarItemClickEventArgs e)
|
||||
{
|
||||
base.BarItemClick(e);
|
||||
if (e.BarItemKey.Equals("tbShowFilterForm", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
|
||||
if (_showParameter == null)
|
||||
{
|
||||
_showParameter = new FilterShowParameter();
|
||||
_showParameter.FormId = "YCKE_PRODUCTCOSTQUICKQUERY_FILTER";
|
||||
_showParameter.ParentPageId = this.View.PageId;
|
||||
}
|
||||
|
||||
|
||||
this.View.ShowForm(_showParameter, (resultData) =>
|
||||
{
|
||||
var whereSql = "";
|
||||
|
||||
if (resultData != null && resultData.ReturnData != null)
|
||||
{
|
||||
var returnData = resultData.ReturnData as FilterParameter;
|
||||
var filterString = returnData.FilterString;
|
||||
|
||||
if (!filterString.IsNullOrEmptyOrWhiteSpace())
|
||||
whereSql += " AND " + filterString.Replace("FBILLNO", "t0.FPRODUCTNO");
|
||||
|
||||
var customFilter = returnData.CustomFilter;
|
||||
if (customFilter != null)
|
||||
{
|
||||
//年
|
||||
var FYear = customFilter["FYear"];
|
||||
var yearVal = FYear == null || FYear.IsNullOrEmptyOrWhiteSpace() ? 0 : FYear.Long2Int();
|
||||
//月
|
||||
var FPeriod = customFilter["FPeriod"];
|
||||
var periodVal = FPeriod == null || FPeriod.IsNullOrEmptyOrWhiteSpace() ? 0 : FPeriod.Long2Int();
|
||||
if (yearVal > 0)
|
||||
{
|
||||
whereSql += $" AND t2.FYEAR = {yearVal} ";
|
||||
if (periodVal > 0)
|
||||
whereSql += $" AND t2.FPERIOD = {yearVal} ";
|
||||
}
|
||||
|
||||
var FSelMoBillNo = customFilter["FSelMoBillNo"];
|
||||
var moBillNo = FSelMoBillNo == null ? "" : FSelMoBillNo.ToString();
|
||||
if (moBillNo != "")
|
||||
whereSql += $" AND t0.FPRODUCTNO = '{moBillNo}' ";
|
||||
}
|
||||
}
|
||||
|
||||
if (whereSql != "")
|
||||
{
|
||||
ShowProgressBar(whereSql);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进度条
|
||||
/// </summary>
|
||||
/// <param name="whereSql"></param>
|
||||
private void ShowProgressBar(string whereSql)
|
||||
{
|
||||
//
|
||||
var progressFormParameter = new DynamicFormShowParameter();
|
||||
progressFormParameter.PageId = Guid.NewGuid().ToString();
|
||||
progressFormParameter.FormId = "BOS_ReportProgressMsg";
|
||||
progressFormParameter.OpenStyle.ShowType = ShowType.Modal;
|
||||
progressFormParameter.Caption = "正在加载数据...";
|
||||
progressFormParameter.HiddenCloseButton = true;
|
||||
progressFormParameter.ParentPageId = this.View.PageId;
|
||||
//# true表示使用真实进度,在执行任务的方法中更新进度值:代码示例,this.View.Session["ProcessRateValue"] =10
|
||||
progressFormParameter.CustomParams.Add("UseTruePro", "true");
|
||||
this.View.ShowForm(progressFormParameter ,(result) =>
|
||||
{
|
||||
this.View.ShowMessage("数据加载完成!");
|
||||
});
|
||||
|
||||
MainWorker.QuequeTask(this.Context, () =>
|
||||
{
|
||||
|
||||
DocCompute(whereSql);
|
||||
|
||||
this.View.Session["ProcessRateValue"] = 100;
|
||||
}, (asynResult) =>
|
||||
{
|
||||
if (asynResult != null && asynResult.Exception != null)
|
||||
this.View.ShowErrMessage(asynResult.Exception.Message);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算数据
|
||||
/// </summary>
|
||||
/// <param name="whereSql"></param>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
private void DocCompute(string whereSql)
|
||||
{
|
||||
var moSqlL = $@"/*dialect*/
|
||||
DECLARE @ACCTGORGID int
|
||||
SET @ACCTGORGID = 1
|
||||
;WITH #列表数据 AS (
|
||||
SELECT t0.FPRODUCTNO
|
||||
,t0.FBILLID
|
||||
,t0.FBILLENTRYID
|
||||
,t0.FPRODUCTID
|
||||
,t0.FFORMID
|
||||
,t1.FPRODUCTDIMEID
|
||||
,t3.FQUALIFIEDINQTY AS '本期完工数量'
|
||||
,t3.FCURRINPUTQTY AS '本期投入数量'
|
||||
,t3.FSUMCURRINPUTQTY AS '累计投入数量'
|
||||
,t3.FSUMQUALIFIEDINQTY AS '累计完工数量'
|
||||
,RANK() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN'
|
||||
,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD'
|
||||
FROM T_CB_PROORDERDIME t0
|
||||
INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
|
||||
INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID
|
||||
LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID
|
||||
WHERE 1 = 1
|
||||
AND t2.FACCTGORGID = @ACCTGORGID
|
||||
AND t2.FCOMPUTEID != ''
|
||||
AND t1.FENDINITKEY = 1
|
||||
AND t0.FFORMID = 'PRD_MO'
|
||||
{whereSql}
|
||||
)
|
||||
SELECT t0.*,t1.FNUMBER,t1_l.FNAME
|
||||
FROM #列表数据 t0
|
||||
INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FPRODUCTID
|
||||
INNER jOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FPRODUCTID AND t1_l.FLOCALEID = 2052
|
||||
WHERE t0.RN = 1";
|
||||
|
||||
Thread.Sleep(100000);
|
||||
var proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity");
|
||||
var proRows = this.View.Model.GetEntityDataObject(proEntity);
|
||||
this.View.Model.BeginIniti();
|
||||
proRows.Clear();
|
||||
var datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL);
|
||||
if (datas != null && datas.Any())
|
||||
{
|
||||
var num = 0;
|
||||
var count = datas.Count;
|
||||
|
||||
foreach (var data in datas)
|
||||
{
|
||||
var row = new DynamicObject(proEntity.DynamicObjectType);
|
||||
|
||||
var period = data["FPERIOD"].Long2Int();
|
||||
var billNo = data["FPRODUCTNO"].ToString();
|
||||
|
||||
row["FMoBillNo"] = billNo;
|
||||
row["FProMaterialNumber"] = data["FNUMBER"];
|
||||
row["FProMaterialName"] = data["FNAME"];
|
||||
row["FQUALIFIEDINQTY"] = data["本期完工数量"];
|
||||
row["FResult"] = "计算中";
|
||||
|
||||
num++;
|
||||
|
||||
this.View.Session["ProcessRateValue"] = (num * 100 / count).Long2Int();
|
||||
this.View.Session["ProcessTips"] = $"共{count}条数据,已处理{num - 1}条数据,正在处理{billNo}";
|
||||
|
||||
var costDataList = GetExecCost(billNo, period, 1);
|
||||
|
||||
if (costDataList != null && costDataList.Count > 0)
|
||||
{
|
||||
var costData = costDataList[0];
|
||||
row["FMaterialCostQ"] = costData["原材料Q1"];
|
||||
row["FLaborCostS"] = costData["直接人工S"];
|
||||
row["FProcessCostO"] = costData["制造费用O"];
|
||||
var costR = costData["原材料Q1"].ToDecimal() + costData["直接人工S"].ToDecimal() + costData["制造费用O"].ToDecimal();
|
||||
row["FQ_O_S_T_R"] = costR;
|
||||
row["FMaterialCostT"] = costData["间接材料Q2"];
|
||||
row["FO2"] = costData["制造费用_职工薪酬"];
|
||||
row["FO3"] = costData["制造费用_股份支付"];
|
||||
row["FO4"] = costData["制造费用_劳动保护费"];
|
||||
row["FO5"] = costData["制造费用_差旅费"];
|
||||
row["FO6"] = costData["制造费用_业务招待费"];
|
||||
row["FO7"] = costData["制造费用_办公费"];
|
||||
row["FO8"] = costData["制造费用_折旧与摊销"];
|
||||
row["FO9"] = costData["制造费用_租赁费"];
|
||||
row["FO10"] = costData["制造费用_水电费"];
|
||||
row["FO11"] = costData["制造费用_物料消耗"];
|
||||
row["FO12"] = costData["制造费用_加工_修理_检测费"];
|
||||
row["FO13"] = costData["制造费用_车辆使用费"];
|
||||
row["FO14"] = costData["制造费用_其他"];
|
||||
row["FO15"] = costData["制造费用_委外加工费"];
|
||||
row["FALLHRWORKTIME"] = costData["总工时"];
|
||||
}
|
||||
|
||||
proRows.Add(row);
|
||||
}
|
||||
}
|
||||
|
||||
this.View.UpdateView("FEntity");
|
||||
this.View.Model.EndIniti();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算费用成本
|
||||
/// </summary>
|
||||
/// <param name="billNo"></param>
|
||||
/// <param name="period"></param>
|
||||
/// <param name="acctgOrgId"></param>
|
||||
/// <returns></returns>
|
||||
private List<DynamicObject> GetExecCost(string billNo, int period, int acctgOrgId)
|
||||
{
|
||||
var sqlL = $@"/*dialect*/
|
||||
EXEC TEST_CB_CPCBHYFXIBB_COMPUTE '{billNo}',{period},{acctgOrgId}
|
||||
";
|
||||
var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
|
||||
return res.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user