a
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
||||
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Kingdee.BOS;
|
||||
using Kingdee.BOS.Util;
|
||||
using Kingdee.BOS.Core;
|
||||
using Kingdee.BOS.Orm.DataEntity;
|
||||
using Kingdee.BOS.ServiceHelper;
|
||||
using Kingdee.BOS.Core.Metadata.EntityElement;
|
||||
using System.ComponentModel;
|
||||
using Kingdee.BOS.Core.Metadata.FieldElement;
|
||||
using Kingdee.BOS.Core.Metadata.Operation;
|
||||
using System.Runtime.Remoting.Contexts;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace GZ.LJY000.Enpower.STK_MISCELLANEOUS
|
||||
{
|
||||
[HotUpdate, Description("其他入库批号获取")]
|
||||
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
|
||||
{
|
||||
|
||||
public override void DataChanged(DataChangedEventArgs e)
|
||||
{
|
||||
base.DataChanged(e);
|
||||
if (DoDetection())
|
||||
{
|
||||
var stockDirectObj = this.View.Model.GetValue("FStockDirect");
|
||||
var stockDirectVal = stockDirectObj == null ? "" : stockDirectObj.ToString();
|
||||
if (stockDirectVal.Equals("GENERAL"))
|
||||
{
|
||||
if (e.Field.Key.ToUpper().Equals("FDATE"))
|
||||
{
|
||||
|
||||
var details = this.View.BusinessInfo.GetEntity("FEntity");
|
||||
if (details != null)
|
||||
{
|
||||
var entrys = this.View.Model.GetEntityDataObject(details);
|
||||
if (entrys != null && entrys.Count > 0)
|
||||
{
|
||||
var dateValue = e.NewValue.ToString();
|
||||
if (dateValue.IsNullOrEmptyOrWhiteSpace())
|
||||
return;
|
||||
|
||||
var tableSqlL = new List<string>();
|
||||
foreach (var entry in entrys)
|
||||
{
|
||||
var rowIndex = this.View.Model.GetRowIndex(details, entry);
|
||||
var materialObjValue = entry["MaterialId_Id"];
|
||||
var materialValue = materialObjValue == null ? 0 : materialObjValue.Long2Int();
|
||||
|
||||
tableSqlL.Add($" SELECT {materialValue} AS 'FMATERIALID',{rowIndex} rowIdx ");
|
||||
}
|
||||
|
||||
if (tableSqlL.Any())
|
||||
GetPrdLot(dateValue, string.Join(" UNION ", tableSqlL));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Field.Key.ToUpper().Equals("FMATERIALID"))
|
||||
{
|
||||
var dateObj = this.View.Model.GetValue("FDate");
|
||||
var dateValue = dateObj == null ? "" : dateObj.ToString();
|
||||
//this.View.Model.SetValue("FLOT", "002", 0);
|
||||
var materialId = e.NewValue.Long2Int();
|
||||
if (materialId > 0 && !dateValue.IsNullOrEmptyOrWhiteSpace())
|
||||
GetPrdLot(dateValue, string.Join(" UNION ", $" SELECT {materialId} AS 'FMATERIALID',{e.Row} rowIdx "));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void AfterCreateNewEntryRow(CreateNewEntryEventArgs e)
|
||||
{
|
||||
base.AfterCreateNewEntryRow(e);
|
||||
|
||||
}
|
||||
private bool DoDetection()
|
||||
{
|
||||
var orgObj = this.View.Model.GetValue("FStockOrgId") as DynamicObject;
|
||||
|
||||
if (this.Context.DBId.ToLower().Equals("66eec1c506d225"))
|
||||
return true;
|
||||
|
||||
if (orgObj["Id"].Long2Int() == 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取批号
|
||||
/// </summary>
|
||||
/// <param name="dateTime"></param>
|
||||
/// <param name="tableSql"></param>
|
||||
private void GetPrdLot(string dateTime, string tableSql)
|
||||
{
|
||||
var sqlL = $@"/*dialect*/
|
||||
|
||||
|
||||
DECLARE @date datetime
|
||||
SET @date = '{dateTime}'
|
||||
|
||||
;WITH #基础数据 AS (
|
||||
{tableSql}
|
||||
)
|
||||
SELECT tt.*,t1.*
|
||||
FROM #基础数据 tt
|
||||
INNER JOIN T_BD_MATERIALSTOCK t0s on tt.FMATERIALID = t0s.FMATERIALID AND t0s.FISBATCHMANAGE = 1
|
||||
CROSS APPLY (
|
||||
SELECT TOP 1 tt.FBILLNO,tt.FMATERIALID,tt.FREALQTY,tt.FLOT,tt.FLOT_TEXT,tt.Seq,ROW_NUMBER()OVER (ORDER BY tt.FREALQTY DESC,tt.FCREATEDATE DESC) RN
|
||||
FROM (
|
||||
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t1.FBILLNO FLOT_TEXT,0 Seq,t0.FCREATEDATE
|
||||
FROM T_PRD_INSTOCK t0
|
||||
INNER JOIN T_PRD_INSTOCKENTRY t0e on t0.FID = t0e.FID
|
||||
INNER JOIN T_PRD_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 'T_PRD_MOENTRY'
|
||||
INNER JOIN T_PRD_MO t1 on t1.FID = t0e_lk.FSBILLID
|
||||
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '2'
|
||||
WHERE 1=1 AND t0e.FLOT != 0
|
||||
AND t0e.FMATERIALID = tt.FMATERIALID
|
||||
AND t0.FCREATEDATE <= @date
|
||||
ORDER BY t0.FCREATEDATE DESC
|
||||
UNION ALL
|
||||
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t2.FBILLNO,0 Seq,t0.FCREATEDATE
|
||||
FROM T_STK_INSTOCK t0
|
||||
INNER JOIN T_STK_INSTOCKENTRY t0e on t0.FID = t0e.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 't_PUR_POOrderEntry'
|
||||
INNER JOIN T_PUR_POORDERENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SUB_REQORDERENTRY'
|
||||
INNER JOIN T_SUB_REQORDER t2 on t2.FID = t1e_lk.FSBILLID
|
||||
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '3'
|
||||
WHERE 1=1
|
||||
AND t0.FBUSINESSTYPE = 'WW'
|
||||
AND t0e.FLOT != 0
|
||||
AND t0e.FMATERIALID = tt.FMATERIALID
|
||||
AND t0.FCREATEDATE <= @date
|
||||
ORDER BY t0.FCREATEDATE DESC
|
||||
UNION ALL
|
||||
SELECT '',0,0,0,RIGHT(CONVERT(varchar(100),CONVERT(int, CONVERT(VARCHAR(6),@date,112)) * 100 + DATEPART(ISO_WEEK, @date)),6),1 Seq,@date
|
||||
) tt
|
||||
--ORDER BY tt.FREALQTY DESC,tt.Seq ASC
|
||||
) t1
|
||||
|
||||
";
|
||||
|
||||
var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
if (res != null && res.Count > 0)
|
||||
{
|
||||
LotField field = this.View.Model.BillBusinessInfo.GetField("FLOT") as LotField;
|
||||
|
||||
foreach (var item in res)
|
||||
{
|
||||
if (field.InputModel == LotField.Enum_InputModel.OnlySelect)
|
||||
{
|
||||
this.View.Model.SetValue("FLOT", item["FLOT"].Long2Int(), item["rowIdx"].Long2Int());
|
||||
}
|
||||
else
|
||||
{
|
||||
//this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int());
|
||||
this.View.Model.SetValue("FLOT", item["FLOT_TEXT"].ToString(), item["rowIdx"].Long2Int());
|
||||
}
|
||||
}
|
||||
|
||||
//this.View.UpdateView("FLOT");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
import clr
|
||||
clr.AddReference("System")
|
||||
clr.AddReference("Kingdee.BOS")
|
||||
clr.AddReference("Kingdee.BOS.Core")
|
||||
clr.AddReference("Kingdee.BOS.DataEntity")
|
||||
clr.AddReference("Kingdee.BOS.App")
|
||||
clr.AddReference("Kingdee.BOS.Contracts")
|
||||
clr.AddReference("Kingdee.BOS.ServiceHelper")
|
||||
|
||||
from Kingdee.BOS import *
|
||||
from Kingdee.BOS.Core import *
|
||||
from Kingdee.BOS.Core.Metadata.EntityElement import *
|
||||
from Kingdee.BOS.Orm.DataEntity import *
|
||||
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
|
||||
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
|
||||
from Kingdee.BOS.Util import *
|
||||
from System import *
|
||||
from System.ComponentModel import *
|
||||
from System.Collections.Generic import *
|
||||
from System.Text import*
|
||||
from Kingdee.BOS.ServiceHelper import *
|
||||
|
||||
def DataChanged(e):
|
||||
if str(e.Field.Key).upper() == "FDate":
|
||||
if DoDetection():
|
||||
|
||||
stockDirectObj = this.View.Model.GetValue("FStockDirect")
|
||||
stockDirectVal = "" if stockDirectObj == None else stockDirectObj
|
||||
if stockDirectVal == "GENERAL":
|
||||
details = this.View.BusinessInfo.GetEntity("FEntity")
|
||||
|
||||
if details != None:
|
||||
entrys = this.View.Model.GetEntityDataObject(details)
|
||||
if entrys != None and entrys.Count > 0:
|
||||
dateValue = "" if e.NewValue == None else e.NewValue
|
||||
if dateValue == "":
|
||||
return;
|
||||
|
||||
tableSqlL = List[str]();
|
||||
for entry in entrys:
|
||||
rowIndex = this.View.Model.GetRowIndex(details, entry)
|
||||
|
||||
materialObjValue = entry["MaterialId_Id"];
|
||||
materialValue = 0 if materialObjValue == None else materialObjValue
|
||||
tableSqlL.Add(" SELECT {0} AS 'FMATERIALID',{1} rowIdx ".format(materialValue,rowIndex))
|
||||
|
||||
if tableSqlL.Count() > 0:
|
||||
GetPrdLot(dateValue, " UNION ".join(tableSqlL))
|
||||
return;
|
||||
|
||||
if str(e.Field.Key).upper() == "FMATERIALID":
|
||||
dateObj = this.View.Model.GetValue("FDate")
|
||||
dateValue = "" if dateObj == None else str(dateObj)
|
||||
materialId = int(e.NewValue)
|
||||
if materialId > 0 and dateValue != "":
|
||||
GetPrdLot(dateValue," SELECT {0} AS 'FMATERIALID',{1} rowIdx ".format(materialId,e.Row))
|
||||
|
||||
|
||||
def DoDetection():
|
||||
orgObj = this.View.Model.GetValue("FStockOrgId")
|
||||
if orgObj["Id"] == 1:
|
||||
return True
|
||||
|
||||
return False
|
||||
# return True
|
||||
|
||||
def GetPrdLot(dateTime,tableSql):
|
||||
sqlL = """/*dialect*/
|
||||
DECLARE @date datetime
|
||||
SET @date = '{0}'
|
||||
|
||||
;WITH #基础数据 AS (
|
||||
{1}
|
||||
)
|
||||
SELECT tt.*,t1.*
|
||||
FROM #基础数据 tt
|
||||
INNER JOIN T_BD_MATERIALSTOCK t0s on tt.FMATERIALID = t0s.FMATERIALID AND t0s.FISBATCHMANAGE = 1
|
||||
CROSS APPLY (
|
||||
SELECT TOP 1 tt.FBILLNO,tt.FMATERIALID,tt.FREALQTY,tt.FLOT,tt.FLOT_TEXT,tt.Seq,ROW_NUMBER()OVER (ORDER BY tt.FREALQTY DESC,tt.FCREATEDATE DESC) RN
|
||||
FROM (
|
||||
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t1.FBILLNO FLOT_TEXT,0 Seq,t0.FCREATEDATE
|
||||
FROM T_PRD_INSTOCK t0
|
||||
INNER JOIN T_PRD_INSTOCKENTRY t0e on t0.FID = t0e.FID
|
||||
INNER JOIN T_PRD_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 'T_PRD_MOENTRY'
|
||||
INNER JOIN T_PRD_MO t1 on t1.FID = t0e_lk.FSBILLID
|
||||
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '2'
|
||||
WHERE 1=1 AND t0e.FLOT != 0
|
||||
AND t0e.FMATERIALID = tt.FMATERIALID
|
||||
AND t0.FCREATEDATE <= @date
|
||||
ORDER BY t0.FCREATEDATE DESC
|
||||
UNION ALL
|
||||
SELECT TOP 10 t0.FBILLNO,t0e.FMATERIALID,t0e.FREALQTY,t0e.FLOT,t2.FBILLNO,0 Seq,t0.FCREATEDATE
|
||||
FROM T_STK_INSTOCK t0
|
||||
INNER JOIN T_STK_INSTOCKENTRY t0e on t0.FID = t0e.FID
|
||||
INNER JOIN T_STK_INSTOCKENTRY_LK t0e_lk on t0e_lk.FENTRYID = t0e.FENTRYID AND t0e_lk.FSTABLENAME = 't_PUR_POOrderEntry'
|
||||
INNER JOIN T_PUR_POORDERENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0e_lk.FSID AND t1e_lk.FSTABLENAME = 'T_SUB_REQORDERENTRY'
|
||||
INNER JOIN T_SUB_REQORDER t2 on t2.FID = t1e_lk.FSBILLID
|
||||
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0e.FMATERIALID AND t1b.FERPCLSID = '3'
|
||||
WHERE 1=1
|
||||
AND t0.FBUSINESSTYPE = 'WW'
|
||||
AND t0e.FLOT != 0
|
||||
AND t0e.FMATERIALID = tt.FMATERIALID
|
||||
AND t0.FCREATEDATE <= @date
|
||||
ORDER BY t0.FCREATEDATE DESC
|
||||
UNION ALL
|
||||
SELECT '',0,0,0,RIGHT(CONVERT(varchar(100),CONVERT(int, CONVERT(VARCHAR(6),@date,112)) * 100 + DATEPART(ISO_WEEK, @date)),6),1 Seq,@date
|
||||
) tt
|
||||
--ORDER BY tt.FREALQTY DESC,tt.Seq ASC
|
||||
) t1
|
||||
|
||||
""".format(dateTime,tableSql)
|
||||
|
||||
res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
|
||||
if res != None and res.Count > 0:
|
||||
field = this.View.Model.BillBusinessInfo.GetField("FLOT")
|
||||
for item in res:
|
||||
# if field.InputModel == LotField.Enum_InputModel.OnlySelect:
|
||||
# this.View.Model.SetValue("FLOT", item["FLOT"], item["rowIdx"])
|
||||
# else:
|
||||
this.View.Model.SetValue("FLOT", item["FLOT_TEXT"], item["rowIdx"])
|
||||
Reference in New Issue
Block a user