From 534540059664da51fad27b31c7a2de4f3a75ee08 Mon Sep 17 00:00:00 2001
From: zhou keda <1315948824@qq.com>
Date: Fri, 19 Jul 2024 16:51:07 +0800
Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=89=A9=E6=96=99=20?=
=?UTF-8?q?=E7=89=A9=E6=96=99=E6=B8=85=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dto/BasEbom/EbomTreeOutput.cs | 4 +-
.../Dto/SubBomListOutput.cs | 4 +-
.../Tnb.BasicData.Entities/Entity/BasEbomD.cs | 4 +-
.../Entity/BasMaterial.cs | 5 +
.../Entity/BasMbomInput.cs | 4 +-
.../Entity/BasMbomOutput.cs | 4 +-
BasicData/Tnb.BasicData/BasEbomService.cs | 2 +-
.../MaterialPreparationPlanOutput.cs | 4 +-
.../Entity/ErpEntity/BomList.cs | 38 +++
.../Entity/ErpEntity/ErpBdMaterial.cs | 4 +
.../Tnb.ProductionMgr/MesForErpService.cs | 6 +-
.../Tnb.ProductionMgr/PrdMoService.cs | 6 +-
.../Tnb.ProductionMgr/TimeWorkService.cs | 243 +++++++++++++++---
.../WmsMaterialTransferService.cs | 2 +-
14 files changed, 280 insertions(+), 50 deletions(-)
create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/BomList.cs
diff --git a/BasicData/Tnb.BasicData.Entities/Dto/BasEbom/EbomTreeOutput.cs b/BasicData/Tnb.BasicData.Entities/Dto/BasEbom/EbomTreeOutput.cs
index 637fec3b..497b111c 100644
--- a/BasicData/Tnb.BasicData.Entities/Dto/BasEbom/EbomTreeOutput.cs
+++ b/BasicData/Tnb.BasicData.Entities/Dto/BasEbom/EbomTreeOutput.cs
@@ -82,11 +82,11 @@ namespace Tnb.BasicData.Entities.Dto
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
}
\ No newline at end of file
diff --git a/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
index 8b149423..75b8f853 100644
--- a/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
+++ b/BasicData/Tnb.BasicData.Entities/Dto/SubBomListOutput.cs
@@ -67,10 +67,10 @@
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
}
diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasEbomD.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasEbomD.cs
index eacd115d..de340f9e 100644
--- a/BasicData/Tnb.BasicData.Entities/Entity/BasEbomD.cs
+++ b/BasicData/Tnb.BasicData.Entities/Entity/BasEbomD.cs
@@ -76,10 +76,10 @@ public partial class BasEbomD : BaseEntity
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterial.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterial.cs
index 72b051b5..75971bc9 100644
--- a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterial.cs
+++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterial.cs
@@ -278,4 +278,9 @@ public partial class BasMaterial : BaseEntity
/// 物料型号
///
public string? material_standard { get; set; }
+
+ ///
+ /// erp修改时间
+ ///
+ public string erp_modify_time { get; set; }
}
diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMbomInput.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMbomInput.cs
index a710a2f2..94b86d5e 100644
--- a/BasicData/Tnb.BasicData.Entities/Entity/BasMbomInput.cs
+++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMbomInput.cs
@@ -52,10 +52,10 @@ public partial class BasMbomInput : BaseEntity
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMbomOutput.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMbomOutput.cs
index b238218b..b64b889b 100644
--- a/BasicData/Tnb.BasicData.Entities/Entity/BasMbomOutput.cs
+++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMbomOutput.cs
@@ -52,10 +52,10 @@ public partial class BasMbomOutput : BaseEntity
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
diff --git a/BasicData/Tnb.BasicData/BasEbomService.cs b/BasicData/Tnb.BasicData/BasEbomService.cs
index a84a6cfc..72dc9960 100644
--- a/BasicData/Tnb.BasicData/BasEbomService.cs
+++ b/BasicData/Tnb.BasicData/BasEbomService.cs
@@ -60,7 +60,7 @@ namespace Tnb.BasicData
material_id_id = b.id,
status = SqlFunc.IIF(a.status == "0", "禁用", "启用"),
descrip = a.descrip,
- quantity = a.quantity,
+ // quantity = a.quantity,
version = a.version,
route_id = c.name,
route_id_id = c.id,
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/MaterialPreparationPlanOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/MaterialPreparationPlanOutput.cs
index 44cc660a..5d70733d 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/MaterialPreparationPlanOutput.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/MaterialPreparationPlanOutput.cs
@@ -31,11 +31,11 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
///
/// 比列分子
///
- public int molecule { get; set; }
+ public decimal molecule { get; set; }
///
/// 比列分母
///
- public int denominator { get; set; }
+ public decimal denominator { get; set; }
}
}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/BomList.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/BomList.cs
new file mode 100644
index 00000000..598840e3
--- /dev/null
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/BomList.cs
@@ -0,0 +1,38 @@
+using SqlSugar;
+
+namespace Tnb.ProductionMgr.Entities.Entity.ErpEntity
+{
+ [SugarTable("BOM_LIST")]
+ public class BomList
+ {
+ ///
+ /// 关联id
+ ///
+ public string BOMID { get; set; }
+ ///
+ /// 父物料编号
+ ///
+ public string MPRODID { get; set; }
+ ///
+ /// 父物料单位
+ ///
+ public string UNIT { get; set; }
+ ///
+ /// 版本
+ ///
+ public string HVERSION { get; set; }
+ ///
+ /// 子物料编号
+ ///
+ public string SUBPRODID { get; set; }
+
+ ///
+ /// 底数
+ ///
+ public decimal DISHU { get; set; }
+ ///
+ /// 数量
+ ///
+ public decimal BATCHAMOUNT { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/ErpBdMaterial.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/ErpBdMaterial.cs
index ac90fc09..194606da 100644
--- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/ErpBdMaterial.cs
+++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/ErpEntity/ErpBdMaterial.cs
@@ -52,5 +52,9 @@ namespace Tnb.ProductionMgr.Entities.Entity.ErpEntity
/// 物料主键+物料主单位
///
public string AID { get; set; }
+ ///
+ /// 修改时间
+ ///
+ public string MODIFIEDTIME { get; set; }
}
}
\ No newline at end of file
diff --git a/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs
index 8d6a5ce1..13a4194a 100644
--- a/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/MesForErpService.cs
@@ -7,6 +7,7 @@ using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Message.Service;
+using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.System;
using JNPF.TaskScheduler;
using Microsoft.AspNetCore.Authorization;
@@ -92,8 +93,10 @@ namespace Tnb.ProductionMgr
throw Oops.Bah($"系统中无法找到物料清单{item.ebom_version}版本");
}
-
+ DictionaryDataEntity unitDic = await _db.Queryable().Where(x=>x.DictionaryTypeId==WmsWareHouseConst.UNITTYPEID && x.EnCode==item.unit_id).FirstAsync();
+
item.id = SnowflakeIdHelper.NextId();
+ item.material_id = basMaterial.id;
item.mo_source = "1";
item.mo_type = moTypeDic[item.mo_type];
item.mo_code = item.mo_code;
@@ -103,6 +106,7 @@ namespace Tnb.ProductionMgr
item.erp_mo_pk = item.erp_mo_pk;
item.erp_line_pk = item.erp_line_pk;
item.erp_lineno = item.erp_lineno;
+ item.unit_id = unitDic?.Id ?? item.unit_id;
moList.Add(item);
}
diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
index eb673953..62d1a8ee 100644
--- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs
@@ -758,7 +758,7 @@ namespace Tnb.ProductionMgr
foreach (BasEbomD item in basEbomDs)
{
// decimal? num1 = beforeReportNum / basEbomH.quantity * item.quantity;
- decimal? num1 = beforeReportNum / basEbomH.quantity * (item.molecule/item.denominator);
+ decimal? num1 = beforeReportNum / (item.molecule/item.denominator);
List prdFeedingDs = await _db.Queryable()
.LeftJoin((a, b) => a.feeding_id == b.id)
.Where((a, b) => a.material_id == item.material_id && b.mo_task_id == mo_task_id)
@@ -775,7 +775,7 @@ namespace Tnb.ProductionMgr
else
{
// decimal? num2 = prdReport.reported_qty / basEbomH.quantity * item.quantity;
- decimal? num2 = prdReport.reported_qty / basEbomH.quantity * (item.molecule/item.denominator);
+ decimal? num2 = prdReport.reported_qty / (item.molecule/item.denominator);
if (sum2 <= num2)
{
prdFeedingIds.Add(item.id);
@@ -1094,7 +1094,7 @@ namespace Tnb.ProductionMgr
foreach (PrdReport prdReport in prdReports)
{
// decimal needNum = (prdReport.reported_qty ?? 0) / basEbomH.quantity * basEbomD.quantity;
- decimal needNum = (prdReport.reported_qty ?? 0) / basEbomH.quantity * (basEbomD.molecule/basEbomD.denominator);
+ decimal needNum = (prdReport.reported_qty ?? 0) / (basEbomD.molecule/basEbomD.denominator);
if (beforeIn - needNum >= 0)
{
beforeIn -= needNum;
diff --git a/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs b/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs
index 20863fa6..1c6b3b3f 100644
--- a/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/TimeWorkService.cs
@@ -773,47 +773,226 @@ namespace Tnb.ProductionMgr
[AllowAnonymous]
public async Task SyncBaseData()
{
- var mysqlDb = _db.AsTenant().GetConnection("erpdb");
- List list = await mysqlDb.Queryable().ToListAsync();
- List erpExtendFields = await _db.Queryable().Where(x=>x.table_name=="base_dictionarydata").ToListAsync();
- Dictionary unitDic = await _db.Queryable().Where(x=>x.DictionaryTypeId==WmsWareHouseConst.UNITTYPEID).ToDictionaryAsync(x=>x.Id,y=>y.EnCode);
- List materials = await _db.Queryable().ToListAsync();
- List insertMaterial = new List();
- List insertMaterialUnits = new List();
- List insertExtendFields = new List();
- foreach (ErpBdMaterial erpBdMaterial in list)
+ try
{
- if (erpExtendFields.All(x => x.cmaterialoid != erpBdMaterial.ID))
+ string[] tables = new[] { "base_dictionarydata", "bas_material" };
+ var erpdb = _db.AsTenant().GetConnection("erpdb");
+ List list = await erpdb.Queryable().ToListAsync();
+ List bomList = erpdb.Queryable().ToList();
+ List erpExtendFields = await _db.Queryable()
+ .Where(x => tables.Contains(x.table_name)).ToListAsync();
+ Dictionary unitDic = await _db.Queryable()
+ .Where(x => x.DictionaryTypeId == WmsWareHouseConst.UNITTYPEID)
+ .ToDictionaryAsync(x => x.Id, y => y.EnCode);
+ Dictionary unitDic2 = await _db.Queryable()
+ .Where(x => x.DictionaryTypeId == WmsWareHouseConst.UNITTYPEID)
+ .ToDictionaryAsync(x => x.FullName, y => y.EnCode);
+ List materials = await _db.Queryable().ToListAsync();
+ List basEbomHs = await _db.Queryable().ToListAsync();
+ List insertMaterial = new List();
+ List insertMaterialUnits = new List();
+ List insertBasEbomHs = new List();
+ List insertBasEbomDs = new List();
+ List insertExtendFields = new List();
+
+ await _db.Ado.BeginTranAsync();
+
+ foreach (ErpBdMaterial erpBdMaterial in list)
{
string unitId = erpExtendFields.Find(x => x.cunitid == erpBdMaterial.PK_MEASDOC)?.table_id ?? "";
unitId = unitDic.ContainsKey(unitId) ? unitDic[unitId].ToString() : "";
- string auxiliaryUnitId = erpExtendFields.Find(x => x.cunitid == erpBdMaterial.FMEASDOC)?.table_id ?? "";
+ string auxiliaryUnitId =
+ erpExtendFields.Find(x => x.cunitid == erpBdMaterial.FMEASDOC)?.table_id ?? "";
auxiliaryUnitId = unitDic.ContainsKey(auxiliaryUnitId) ? unitDic[auxiliaryUnitId].ToString() : "";
- BasMaterial basMaterial = new BasMaterial()
- {
- id = SnowflakeIdHelper.NextId(),
- name = erpBdMaterial.NAME,
- code = erpBdMaterial.CODE,
- org_id = WmsWareHouseConst.AdministratorOrgId,
- material_specification = erpBdMaterial.MATERIALSPEC,
- material_standard = erpBdMaterial.MATERIALTYPE,
- category_id = "[\"CGJCJ\"]",
- unit_id = unitId,
- };
- insertMaterial.Add(basMaterial);
-
string[] unitArr = erpBdMaterial.MEASRATE.Split("/");
- insertMaterialUnits.Add(new BasMaterialUnit()
+ if (erpExtendFields.All(x => x.cmaterialoid != erpBdMaterial.ID))
{
- id = SnowflakeIdHelper.NextId(),
- material_id = basMaterial.id,
- number_of_primary_unit = unitArr[0],
- number_of_auxiliary_unit = unitArr[1],
- auxiliary_unit_id = auxiliaryUnitId
- });
+ BasMaterial basMaterial = new BasMaterial()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ name = erpBdMaterial.NAME,
+ code = erpBdMaterial.CODE,
+ org_id = WmsWareHouseConst.AdministratorOrgId,
+ material_specification = erpBdMaterial.MATERIALSPEC,
+ material_standard = erpBdMaterial.MATERIALTYPE,
+ category_id = "[\"CGJCJ\"]",
+ unit_id = unitId,
+ create_time = DateTime.Now
+ };
+ insertMaterial.Add(basMaterial);
+
+ insertMaterialUnits.Add(new BasMaterialUnit()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ material_id = basMaterial.id,
+ number_of_primary_unit = unitArr[0],
+ number_of_auxiliary_unit = unitArr[1],
+ auxiliary_unit_id = auxiliaryUnitId
+ });
+ }
+ else
+ {
+ ErpExtendField extendField = erpExtendFields.Find(x => x.cmaterialoid == erpBdMaterial.ID);
+ string materialId = extendField?.table_id ?? "";
+ BasMaterial basMaterial = await _db.Queryable().SingleAsync(x => x.id == materialId);
+ if (erpBdMaterial.MODIFIEDTIME != basMaterial.erp_modify_time)
+ {
+ int updateRow = await _db.Updateable()
+ .SetColumns(x => x.name == erpBdMaterial.NAME)
+ .SetColumns(x => x.code == erpBdMaterial.CODE)
+ .SetColumns(x => x.material_specification == erpBdMaterial.MATERIALSPEC)
+ .SetColumns(x => x.material_standard == erpBdMaterial.MATERIALTYPE)
+ .SetColumns(x => x.unit_id == unitId)
+ .SetColumns(x => x.name == erpBdMaterial.NAME)
+ .SetColumns(x => x.erp_modify_time == erpBdMaterial.MODIFIEDTIME)
+ .Where(x => x.id == materialId)
+ .ExecuteCommandAsync();
+ if (updateRow <= 0)
+ {
+ Log.Error($"未找到物料{erpBdMaterial.ID},跳过此条数据");
+ continue;
+ }
+
+ BasMaterialUnit basMaterialUnit = await _db.Queryable()
+ .Where(x => x.material_id == materialId && x.auxiliary_unit_id == auxiliaryUnitId)
+ .FirstAsync();
+ if (basMaterialUnit == null)
+ {
+ insertMaterialUnits.Add(new BasMaterialUnit()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ material_id = materialId,
+ number_of_primary_unit = unitArr[0],
+ number_of_auxiliary_unit = unitArr[1],
+ auxiliary_unit_id = auxiliaryUnitId
+ });
+ }
+ else
+ {
+ await _db.Updateable()
+ .SetColumns(x => x.number_of_primary_unit == unitArr[0])
+ .SetColumns(x => x.number_of_auxiliary_unit == unitArr[1])
+ .Where(x => x.id == basMaterialUnit.id)
+ .ExecuteCommandAsync();
+ }
+ }
+ }
}
+
+ await _db.Insertable(insertMaterial).ExecuteCommandAsync();
+ await _db.Insertable(insertMaterialUnits).ExecuteCommandAsync();
+
+ //物料清单开始同步
+ materials = await _db.Queryable().ToListAsync();
+ var groupList = bomList.GroupBy(x => x.BOMID);
+ foreach (var item in groupList)
+ {
+ string key = item.Key;
+ List itemList = item.ToList();
+ BomList firstItemInList = itemList[0];
+ BasMaterial material = materials.Find(x => x.code==firstItemInList.MPRODID);
+ if (material == null) continue;
+ string unitId = unitDic.ContainsKey(firstItemInList.UNIT) ? unitDic[firstItemInList.UNIT].ToString() : "";
+ if (basEbomHs.All(x => x.material_id != material.id && x.version != firstItemInList.HVERSION))
+ {
+ BasEbomH basEbomH = new BasEbomH()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ org_id = WmsWareHouseConst.AdministratorOrgId,
+ material_id = material.id,
+ unit_id = unitId,
+ version = firstItemInList.HVERSION,
+ create_time = DateTime.Now,
+ };
+
+
+ bool flag = false;
+ List tempList = new List();
+ foreach (var children in itemList)
+ {
+ BasMaterial childrenMaterial = materials.Find(x => x.code==children.SUBPRODID);
+ if (childrenMaterial == null)
+ {
+ flag = true;
+ tempList = new List();
+ break;
+ }
+
+ BasEbomD basEbomD = new BasEbomD()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ ebom_id = basEbomH.id,
+ material_id = childrenMaterial.id,
+ denominator = children.DISHU,
+ molecule = children.BATCHAMOUNT,
+ };
+ tempList.Add(basEbomD);
+ }
+
+ if (flag)
+ {
+ continue;
+ }
+
+ insertBasEbomHs.Add(basEbomH);
+ insertBasEbomDs.AddRange(tempList);
+
+ }
+ else
+ {
+ BasEbomH basEbomH = await _db.Queryable().Where(x=>x.material_id==material.id && x.version==firstItemInList.HVERSION).FirstAsync();
+ if (basEbomH == null) continue;
+
+ bool flag = false;
+ List tempList = new List();
+ foreach (var children in itemList)
+ {
+ BasMaterial childrenMaterial = materials.Find(x => x.code==children.SUBPRODID);
+ if (childrenMaterial == null)
+ {
+ flag = true;
+ tempList = new List();
+ break;
+ }
+
+ BasEbomD basEbomD = new BasEbomD()
+ {
+ id = SnowflakeIdHelper.NextId(),
+ ebom_id = basEbomH.id,
+ material_id = childrenMaterial.id,
+ denominator = children.DISHU,
+ molecule = children.BATCHAMOUNT,
+ };
+ tempList.Add(basEbomD);
+ }
+
+ if (flag)
+ {
+ continue;
+ }
+
+ insertBasEbomDs.AddRange(tempList);
+ await _db.Updateable()
+ .SetColumns(x => x.unit_id == unitId)
+ .Where(x => x.id == basEbomH.id)
+ .ExecuteCommandAsync();
+ await _db.Deleteable().Where(x => x.ebom_id == basEbomH.id).ExecuteCommandAsync();
+ }
+ }
+
+ await _db.Insertable(insertBasEbomHs).ExecuteCommandAsync();
+ await _db.Insertable(insertBasEbomDs).ExecuteCommandAsync();
+
+ await _db.Ado.CommitTranAsync();
}
- return "true";
+ catch (Exception e)
+ {
+ Log.Error(e.Message, e);
+ await _db.Ado.RollbackTranAsync();
+ throw Oops.Bah(e.Message);
+ }
+
+ return "成功";
}
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
index 5ebb027f..c621c60f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
@@ -871,7 +871,7 @@ namespace Tnb.WarehouseMgr
["crowno"] = wmsMaterialTransferd.lineno,
["csourcebillbid"] = wmsMaterialTransferd.erp_line_pk,
["csourcebillhid"] = wmsMaterialTransfer.erp_pk,
- ["cunitid"] = erpExtendFields.Find(x=>x.table_id==unitData.Id)?.cunitid ?? "",
+ ["cunitid"] = erpExtendFields.Find(x=>x.table_id==unitData?.Id)?.cunitid ?? "",
["cvendorid"] = "",
["cvendorvid"] = "",
["dbizdate"] = nowStr,