생산관리_mbom 제작수량 로직 변경 (항목수량*총생산수량 -> 상위의 항목수량 계속 곱해가면서 계산)

This commit is contained in:
2026-03-09 17:03:58 +09:00
parent 1fd0e035c2
commit 8c2cdc40ad

View File

@@ -957,6 +957,9 @@ function fn_initGrid() {
function fn_preprocessBomData(dataList) {
if(!dataList || dataList.length === 0) return dataList;
// 레벨별 항목수량 추적 (제작수량 누적 곱 계산용)
var parentItemQtyByLevel = {};
dataList.forEach(function(row) {
// 필드명 정규화 (소문자 → 대문자 복사, 기존 대문자 유지)
if(row.part_unit_qty !== undefined && row.PART_UNIT_QTY === undefined) {
@@ -985,13 +988,27 @@ function fn_initGrid() {
console.log("전처리 - PART_NO:", row.PART_NO, "소재품번:", row.RAW_MATERIAL_NO, "소재소요량(DB):", savedRequiredQty, "소재소요량(최종):", row.REQUIRED_QTY);
// 제작수량: 저장된 값이 있으면 유지, 없으면 항목수량 × 총생산수량으로 자동계산
// 제작수량: 상위 항목수량을 누적 곱하여 계산
var level = parseInt(row.LEVEL) || 1;
var itemQty = parseFloat(row.ITEM_QTY || row.item_qty) || 0;
// 현재 레벨의 항목수량 저장 (하위 레벨 계산에 사용)
parentItemQtyByLevel[level] = itemQty;
// 현재 레벨보다 깊은 레벨 데이터 제거 (형제 노드 전환 시 오염 방지)
for(var l = level + 1; l <= _maxLevel; l++) {
delete parentItemQtyByLevel[l];
}
var savedProdQty = parseFloat(row.PRODUCTION_QTY) || 0;
if(savedProdQty > 0) {
row.PRODUCTION_QTY = savedProdQty;
} else {
var itemQty = parseFloat(row.ITEM_QTY || row.item_qty) || 0;
row.PRODUCTION_QTY = itemQty * totalProductionQty;
// 최상위(1)부터 현재 레벨까지 항목수량 누적 곱 × 총생산수량
var cumulativeItemQty = 1;
for(var l = 1; l <= level; l++) {
cumulativeItemQty *= (parentItemQtyByLevel[l] || 1);
}
row.PRODUCTION_QTY = cumulativeItemQty * totalProductionQty;
}
// 소재발주수량: 저장된 값이 있으면 유지, 없으면 계산