• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
조회 수 : 998
2009.10.16 (09:56:30)
게시판을 이용해 주셔서 감사합니다.
다음양식에 맞게 입력해주세요.

* 고객시스템명 :
* GAUCE 버전 : 4013
* WAS 종류(WebLogic 등등) : weblogic
* DB 종류 : oracle
* 문의 유형(질문/요청/참조) : Stack OverFlow 에러
* 내용 :

                                10월   31주   32주  33주
가전(Total)                 150     70       30     50
     컴퓨터(Total)         150     70       30     50
                Tx-4000      100     20       30     50
                 Sx-1000      50     50        0      0


Dataset 은 위처럼 저장되고
Tx-4000제품의 월 수량을 입력하면 주로 배분되고 제품 주 수량을 수정하면 가전(Total), 컴퓨터(Total)의 수량도 변경되는 로직입니다. 즉  Tx-4000제품의 월 수량을 200으로 수정하면

가전(Total)                 250     90       60     100
     컴퓨터(Total)         250     90       60     100
                Tx-4000      200     40       60     100
                 Sx-1000      50     50        0       0

처럼 변경되는 로직입니다.

아래 소스처럼 입력했을때 datatset의 OnExit(row,colid,olddata) 이벤트를 타고
월분배=> jsResetMonthDiv 와 월총합계산 => jsResetMonthSum 함수를 타고

상단 Total 합계는 datatset의 OnColumnChanged 이벤트를 타고
상위 Level 총계를 변경 => jsResetTotalSum 함수를 타도록 개발했습니다.

근데 로직은 다 타고  "Stack Overflow at line:0" 에러가 발생합니다.

아래는 JSP 소스내용입니다.

<SCRIPT LANGUAGE="JAVASCRIPT" FOR="das_grid_sales_plan" EVENT="OnColumnChanged(row,colid)" >
<!--
    var intAddCnt = 0;
    var arrChgFlagId = new Array();
    var intChgFlag = 0;
    var boolFlag = true;
  
    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_"){
        return;
    }
    if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
            
                   for(var j=0; j<=arrChgFlagId.length; j++){
                           if(arrChgFlagId[j] == colid){
                                   boolFlag = false;        
                           }
                   }                   
                   if(boolFlag){
                           if(colid.substring(0,3) == "CD_"){
                                   if(iCnt%2 != 0){
                                           jsResetTotalSum( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
                                   } else {
                                           jsResetTotalSum2( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
                                   }
                                   iCnt++;        
                           }
                           if(colid.substring(0,3) == "CS_"){
                                   jsResetTotalSum3( row, colid, intAddCnt, das_grid_sales_plan, grid_sales_plan, "VIEW_SEQ", "01", "FILTER_COLUMN" );
                           }
                           
                           arrChgFlagId[intChgFlag] = colid;
                           intChgFlag++;
                   }
    }
    
    das_grid_sales_plan.ResetStatus();
-->
</SCRIPT>
<SCRIPT LANGUAGE="JAVASCRIPT" FOR="grid_sales_plan" EVENT="OnExit(row,colid,olddata)" >
<!--
    var intAddCnt = 0;
    var arrChgFlagId = new Array();
    var intChgFlag = 0;
    var boolFlag = true;
    if( !colid.substring(0,3) == "CS_" || !colid.substring(0,3) == "CD_" || das_grid_sales_plan.NameValue(row,"TFLAG" ) != "D"){
        return;
    }
           if( das_grid_sales_plan.NameValue(row,"add_yn" ) == "N"){
                   for(var j=0; j<=arrChgFlagId.length; j++){
                           if(arrChgFlagId[j] == colid){
                                   boolFlag = false;        
                           }
                   }                   
                   if(boolFlag){
                        if(colid.substring(0,3) == "CS_"){    
                                jsResetMonthDiv( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
                        }else if(colid.substring(0,3) == "CD_"){                                 
                                jsResetMonthSum( row, colid, das_empty_calendar, das_grid_sales_plan, grid_sales_plan);                                
                        }
                        arrChgFlagId[intChgFlag] = colid;
                           intChgFlag++;
                }
        }        
        
    das_grid_sales_plan.ResetStatus();
-->
</SCRIPT>


그리고 각 실행 함수는 다음과 같습니다.
=> 상위 총합계를 변경하는 함수
function jsResetTotalSum( row, colid, intAddCnt, dsObjName, gridObj, strColName, strColValue, strNaviColName ){
    gridObj.ReDraw = false;
    
    var arrNaviColValue = new Array();
    var strNaviValue    = dsObjName.NameValue(row, strNaviColName);
    var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
    var intCurLevel     = Number(dsObjName.NameValue(row,"T_LEVEL"));
    
    for(var i = 1; i <= row; i++ ){
        var intTotRow = i + intAddCnt;
        
        if(dsObjName.NameValue(intTotRow,strColName) == strColValue){
                var intTotSum       = parseInt(dsObjName.NameValue(intTotRow,colid)) - intOrgValue + intAmdValue;
                var strCurNaviValue = dsObjName.NameValue(intTotRow, strNaviColName);
                
                if(strNaviValue.indexOf(strCurNaviValue) != -1&& intCurLevel == Number(dsObjName.NameValue(i, "T_LEVEL"))+1){                        
                        dsObjName.NameValue(intTotRow, colid ) =  Math.round(intTotSum);                        
                        break;
                }
               }        
        }        
    gridObj.ReDraw = true;
}



=> 월합계를 변경하는 함수

function jsResetMonthSum( row, colid, dsCarlenName, dsObjName, gridObj){
          gridObj.ReDraw = false;
          var intOrgValue     = parseInt(dsObjName.OrgNameValue(row,colid));
    var intAmdValue     = parseInt(dsObjName.NameValue(row,colid));
    var strColid        = colid.substr(3,colid.length);
    
    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
        var strMonCode       = das_empty_calendar.NameValue(i,"m_code");
        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code");
        
        if(strWeekCode == strColid){
                   var intTotSumM = parseInt(dsObjName.NameValue(row,"CS_"+strMonCode)) - intOrgValue + intAmdValue;
                  dsObjName.NameValue(row, "CS_"+strMonCode ) =  Math.round(intTotSumM);
            break;
        }
    }
    gridObj.ReDraw = true;
}

=> 월을 주로 배분하는 함수
function jsResetMonthDiv( row, colid, dsCarlenName, dsObjName, gridObj){
        gridObj.ReDraw = false;
    
    var intAmdChgValue  = dsObjName.NameValue(row,colid) - dsObjName.OrgNameValue(row,colid);
    var strColid        = colid.substr(3,colid.length);
          var arrChgSum       = new Array();
          var arrColName      = new Array();
          var intChgIndex     = 0;
        
    for(var i = 1; i <= dsCarlenName.CountRow; i++ ){
        var strMonthAscRank  = das_empty_calendar.NameValue(i,"month_asc_rank"  );
        var strMonCode       = das_empty_calendar.NameValue(i,"m_code"          );
        var strWeekCode      = das_empty_calendar.NameValue(i,"h_code"          );
        
        if(strMonCode == strColid){            
                var intWeek = parseInt(dsObjName.NameValue(row,"CD_"+strWeekCode));
                var intMonth = parseInt(dsObjName.OrgNameValue(row,"CS_"+strMonCode));
                var intChgSum = intWeek + (intWeek/intMonth*intAmdChgValue);
                            
                            dsObjName.NameValue(row, "CD_"+strWeekCode ) =  Math.round(intChgSum);
                                        arrChgSum[intChgIndex] = intChgSum;
                                        arrColName[intChgIndex] = strWeekCode;
                            
                            intChgIndex++;                        
        }
    }
    
    var intRemainSum = 0;
    for(var j = 0; j < intChgIndex-1; j++){
            intRemainSum += parseInt(arrChgSum[j]);            
    }
    
    dsObjName.NameValue(row, "CD_"+ arrColName[intChgIndex-1]) =  parseInt(dsObjName.NameValue(row,colid)) - intRemainSum;
          gridObj.ReDraw = true;
}


번호 제목 닉네임 조회 등록일
5269 teechat8 컴포넌트가 설치되지 않습니다. 파일
박정우
1361 2009-10-19
5268 teechat8 컴포넌트가 설치되지 않습니다.
관리자
964 2009-10-21
5267 아래 5243번 글에 대한 추가질문입니다.
김한제
904 2009-10-17
5266 아래 5243번 글에 대한 추가질문입니다. 파일
기술지원31
1284 2009-10-19
5265 그리드 체크 박스
정호균
886 2009-10-16
5264 그리드 체크 박스
기술지원31
978 2009-10-19
Selected Stack OverFlow 에러
서지원
998 2009-10-16
5262 Stack OverFlow 에러
기술지원31
1046 2009-10-19
5261 리포트 멀티라인 질문
신태환
813 2009-10-15
5260 리포트 멀티라인 질문
기술지원31
956 2009-10-16
5259 리포트 멀티라인 질문(추가)
신태환
829 2009-10-21
5258 sql server의 image필드 인쇄
허석범
827 2009-10-15
5257 sql server의 image필드 인쇄
기술지원97
845 2009-10-15
5256 sql server의 image필드 인쇄
허석범
896 2009-10-15
5255 sql server의 image필드 인쇄
기술지원97
1301 2009-10-15
5254 라이센스 관련 문의 파일
이정한
1164 2009-10-15
5253 라이센스 관련 문의
기술지원97
995 2009-10-15
5252 GRID에 관한 질문입니다.
배성인
864 2009-10-14
5251 GRID에 관한 질문입니다.
기술지원31
1096 2009-10-14
5250 그리드를 이용해 게시판 만들때...
정호균
1029 2009-10-14
Tag List
XE Login