• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
기술지원31
조회 수 : 1184
2009.10.19 (09:59:27)
OnColumnChanged 이벤트는 컬럼이 변경될 때마다 발생하는데
이벤트 발생 중에 다른 스크립트 함수에서 또 컬럼을 변경해서
동일한 이벤트 함수를 계속 호출해서 문제가 생기는 겁니다.

해결 방법은 이벤트 작동시에 복사 DataSet을 만들어 놓고
복사 DataSet을 변경한 다음에 변경된 내용을 그리드에 옮기던가
아니면 다른 방법을 연구해서 사용하셔야 할 것 같습니다.

가우스 컴포넌트 구조상 이런 형태의 코딩은 불가능합니다.


>게시판을 이용해 주셔서 감사합니다.
>다음양식에 맞게 입력해주세요.
>
>* 고객시스템명 :
>* 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 컴포넌트가 설치되지 않습니다. 파일
박정우
1538 2009-10-19
5268 no image teechat8 컴포넌트가 설치되지 않습니다.
관리자
1018 2009-10-21
5267 no image 아래 5243번 글에 대한 추가질문입니다.
김한제
958 2009-10-17
안녕하세요. 현재 저희는 다국어 지원을 위해 UTF-8로 개발중에 있으며, 출력 Report안에 한글이 포함됨에 따라 토인비 Report컴포넌트가 아닌 아래의 UTF-8용 Report 컴포넌트를 이용하고 있습니다. MxReportU 9683681E-FAD6-45F1-86B3-FD60C7101BC9 MxReportU.cab 2,0,1,22 올려주신 샘플은 토인비 컴포넌트로서, 이를 가지고 테스트 해보니 바코드 폰트는 적용이 되나 한글이 깨지는 문제가 생기고, 기존처럼 UTF-8용 컴포넌트에서는 한글은 안깨지지만 바코드 폰트가 안먹는 현상이 나타납니다. UTF-8용 Report컴포넌트는 바코드 폰트를 지원하지 않아서 샘플에는 토인비 컴포넌트를 이용하신 건지요? UTF-8용 Report 컴포넌트를 이용한 바코드 폰트 적용 샘플을 주시면 감사하겠습니다. >관련링크1의 예제를 참고하세요. > > >레포트 작업시 바코드 찍는 샘플입니다. >우선 알고계셔야 하는 사항은 >1. 가우스는 바코드 폰트를 제공하지 않는다. > 각 업체에서 해당업무에 맞는 바코드 폰트가 각 사용자에게 설치되어 있어야 함. >2. 레포트 디자인시( 툴 ) 바코드를 찍는 영역에 맞춰 컬럼을 갖다놓고 크기를 조정해 맞춘후 > 속성->글꼴에서 바코드에 맞는 폰트를 설정하면 됩니다. > >* 첨부된 바코드가 정상 출력되려면 PC 에 해당 바코드 폰트를 설치 후 동작하면 됩니다. > > >>게시판을 이용해 주셔서 감사합니다. >>다음양식에 맞게 입력해주세요. >> >>* 고객시스템명 : SDI >>* GAUCE 버전 : 3.5 >>* WAS 종류(WebLogic 등등) : Weblogic >>* DB 종류 : Oracle 9i >>* 문의 유형(질문/요청/참조) : >>* 내용 : >>MxReportU Component를 이용하여 출력문서를 디자인하였습니다. >>출력문서의 특정필드를 바코드로 출력하려고 하는데, >>아래와 같이 바코드 폰트를 지정하여도 바코드형식으로 출력이 되지 않네요. >> >>" <T>id='*BARCODE*', left=450, top=13, right=830, bottom=61, face='3 of 9 Barcode', size=14, bold=false, underline=false, italic=false, forecolor=#000000, backcolor=#FFFFFF</T>" >> >> >>Report Component에서의 바코드 출력은 전혀 불가능한가요? >> >>첨부 : 바코드 폰트 >
5266 no image 아래 5243번 글에 대한 추가질문입니다. 파일
기술지원31
1341 2009-10-19
MxReportU 컴포넌트의 경우 font가 'Tahoma'로 강제지정되어 있습니다. 바코드같은경우 특정폰트를 사용하여야 출력이 가능하기 때문에 폰트제한을 풀어서 사용하셔야 합니다. <param name="EnableFontFace" value="true"> 속성을 추가하시면 됩니다. 샘플을 참고하세요 >안녕하세요. >현재 저희는 다국어 지원을 위해 UTF-8로 개발중에 있으며, 출력 Report안에 한글이 포함됨에 따라 >토인비 Report컴포넌트가 아닌 아래의 UTF-8용 Report 컴포넌트를 이용하고 있습니다. >MxReportU 9683681E-FAD6-45F1-86B3-FD60C7101BC9 MxReportU.cab 2,0,1,22 > >올려주신 샘플은 토인비 컴포넌트로서, 이를 가지고 테스트 해보니 바코드 폰트는 적용이 되나 >한글이 깨지는 문제가 생기고, 기존처럼 UTF-8용 컴포넌트에서는 한글은 안깨지지만 바코드 폰트가 >안먹는 현상이 나타납니다. UTF-8용 Report컴포넌트는 바코드 폰트를 지원하지 않아서 >샘플에는 토인비 컴포넌트를 이용하신 건지요? >UTF-8용 Report 컴포넌트를 이용한 바코드 폰트 적용 샘플을 주시면 감사하겠습니다. > > >>관련링크1의 예제를 참고하세요. >> >> >>레포트 작업시 바코드 찍는 샘플입니다. >>우선 알고계셔야 하는 사항은 >>1. 가우스는 바코드 폰트를 제공하지 않는다. >> 각 업체에서 해당업무에 맞는 바코드 폰트가 각 사용자에게 설치되어 있어야 함. >>2. 레포트 디자인시( 툴 ) 바코드를 찍는 영역에 맞춰 컬럼을 갖다놓고 크기를 조정해 맞춘후 >> 속성->글꼴에서 바코드에 맞는 폰트를 설정하면 됩니다. >> >>* 첨부된 바코드가 정상 출력되려면 PC 에 해당 바코드 폰트를 설치 후 동작하면 됩니다. >> >> >>>게시판을 이용해 주셔서 감사합니다. >>>다음양식에 맞게 입력해주세요. >>> >>>* 고객시스템명 : SDI >>>* GAUCE 버전 : 3.5 >>>* WAS 종류(WebLogic 등등) : Weblogic >>>* DB 종류 : Oracle 9i >>>* 문의 유형(질문/요청/참조) : >>>* 내용 : >>>MxReportU Component를 이용하여 출력문서를 디자인하였습니다. >>>출력문서의 특정필드를 바코드로 출력하려고 하는데, >>>아래와 같이 바코드 폰트를 지정하여도 바코드형식으로 출력이 되지 않네요. >>> >>>" <T>id='*BARCODE*', left=450, top=13, right=830, bottom=61, face='3 of 9 Barcode', size=14, bold=false, underline=false, italic=false, forecolor=#000000, backcolor=#FFFFFF</T>" >>> >>> >>>Report Component에서의 바코드 출력은 전혀 불가능한가요? >>> >>>첨부 : 바코드 폰트 >> >
5265 no image 그리드 체크 박스
정호균
934 2009-10-16
5264 no image 그리드 체크 박스
기술지원31
1034 2009-10-19
5263 no image Stack OverFlow 에러
서지원
1056 2009-10-16
게시판을 이용해 주셔서 감사합니다. 다음양식에 맞게 입력해주세요. * 고객시스템명 : * 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; }
Selected no image Stack OverFlow 에러
기술지원31
1184 2009-10-19
OnColumnChanged 이벤트는 컬럼이 변경될 때마다 발생하는데 이벤트 발생 중에 다른 스크립트 함수에서 또 컬럼을 변경해서 동일한 이벤트 함수를 계속 호출해서 문제가 생기는 겁니다. 해결 방법은 이벤트 작동시에 복사 DataSet을 만들어 놓고 복사 DataSet을 변경한 다음에 변경된 내용을 그리드에 옮기던가 아니면 다른 방법을 연구해서 사용하셔야 할 것 같습니다. 가우스 컴포넌트 구조상 이런 형태의 코딩은 불가능합니다. >게시판을 이용해 주셔서 감사합니다. >다음양식에 맞게 입력해주세요. > >* 고객시스템명 : >* 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; >} > > >
5261 no image 리포트 멀티라인 질문
신태환
869 2009-10-15
5260 no image 리포트 멀티라인 질문
기술지원31
1014 2009-10-16
5259 no image 리포트 멀티라인 질문(추가)
신태환
897 2009-10-21
5258 no image sql server의 image필드 인쇄
허석범
878 2009-10-15
5257 no image sql server의 image필드 인쇄
기술지원97
904 2009-10-15
5256 no image sql server의 image필드 인쇄
허석범
943 2009-10-15
5255 no image sql server의 image필드 인쇄
기술지원97
1460 2009-10-15
5254 no image 라이센스 관련 문의 파일
이정한
1278 2009-10-15
5253 no image 라이센스 관련 문의
기술지원97
1044 2009-10-15
5252 no image GRID에 관한 질문입니다.
배성인
919 2009-10-14
5251 no image GRID에 관한 질문입니다.
기술지원31
1155 2009-10-14
5250 no image 그리드를 이용해 게시판 만들때...
정호균
1088 2009-10-14
Tag List
XE Login