246 lines
10 KiB
C#
246 lines
10 KiB
C#
|
|
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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|