티스토리 뷰

반응형

중소형 회사들이 많이 사용하는 E카운트 ERP에 대해서 요즘 공부를 하는 중입니다.

중소기업 ERP 3대 솔루션 시장에서 사용하는 사용량(매출액) 2020년도 기준 조사를 잠시 해보니, 1위 이카운트(약300억), 2위 얼마에요(약130억), 3위 경리나라(약90억) 수준인데요, 아무래도 재고관리를 하려면 경리나라는 좀 약하고, 이카운트가 제조업에는 강점이 많네요. 다만, 경리나라는 핀테크나 기타 요즘 트렌드에 맞는 화면구성(UI, 커스텀마이징)으로 경리나라를 선호하는 트렌드가 있어요. '얼마에요'는 약간 중간위치 정도되는 것 같습니다.

Ecount ERP가 확장성과 API를 제공함으로써 더 사용자가 활용할 분야가 많은 것 같습니다.

막막한 Ecount ERP에 대해 조금씩 알아가는 내용 공유해 볼게요.

정보를 주고 받으려니, 테스터 함수를 만들어서 일단 시험해 보고 있습니다.

E카운트에서 제공하는 API테스트 키를 받고 시작하면서 하나하나 도전하고 있습니다.

ERP API에 대한 메뉴얼 형식으로 되어있는데, 최초 인증키를 발급받아야 접근할 수 있습니다.

 

 

직접 신호를 받기 위해서 여러가지 형태로 테스터를 진행했습니다.


function testit() {
// Json 결과값 연속배열로 실제값을 넣기 연구자료 주문서를 기준으로 일단 코딩한다.
console.log.clear;
     let i;
 for(i=0;i<grid.getRowCount();i++) 
 console.log(Number(grid.getValue(i, 'thickness'))) ;     
 

  let newjson = new Array();  // 여기에 누적해서 담을 것이다.

  const headerdata = '"SaleOrderList":';
  
  const tmpdata =  { "Line": "0",
"BulkDatas": {
"IO_DATE": "",                   //입력안하면 현재날짜
"UPLOAD_SER_NO": "",
"CUST": "",             //  거래처코드는 필수항목
"CUST_DES": "",
"EMP_CD": "23468",        // 최주임님
"WH_CD": "",           // 화면에 출하창고로 표기하고 입력받음 창고필수 eg J02
"IO_TYPE": "",
"PJT_CD": "",
"DOC_NO": "",
"PROD_CD": "211020008",                    // 품목코드 필수항목
"PROD_DES": "(test) 주문입력 자동입력",         // 품목코드로 자동생성
"SIZE_DES": "",
"UQTY": "",
"QTY": "1",
"PRICE": "100",
"USER_PRICE_VAT": "",
"SUPPLY_AMT": "",
"SUPPLY_AMT_F": "",
"VAT_AMT": "",

}          
}



let jsontmp = JSON.parse(JSON.stringify(tmpdata));

   let savejson = new Array();
   
savejson.push(jsontmp);
savejson.push(jsontmp);
savejson.push(jsontmp);
savejson.push(jsontmp);

   console.log(typeof jsontmp);        
   console.log(typeof savejson);        
   console.log(jsontmp);
   console.log(savejson);


// 전후 배열형태 추가함 [{ 등등
// Array 형태 다시 stringify해야 함.

   let strjson = headerdata + JSON.stringify(savejson) ;    
   // console.log(typeof strjson);        
   // console.log(strjson);

// 이제 전체를 parse해서 배열/객체 형태로 바꿔줌.
   let resultjson = JSON.stringify(strjson);    
   console.log(typeof resultjson);        
   console.log(resultjson);

  
         
 const path = [ 'SaleOrderList']
  let result = path.reduce((a,v) => a[v], tmp)   // 경로를 갖고 오는 것.
   console.log(result);
   
     newjson.splice(jsontmp,0,jsontmp.SaleOrderList);
  console.log(data);   
  console.log(newjson);   
  console.log(JSON.stringify(newjson, replacer));   
  const jsontmp = JSON.stringify(data, replacer);   
  // obj = JSON.parse(data);
  const jsonresult = jsontmp;
  const par = JSON.parse(jsonresult);
  console.log(jsonresult);   
  
function replacer(key, value) {
  // document.write(key + " : " + value + '<br>');
  if(key == 'PROD_CD') {
return $('#PROD_CD').val();  // 품명코드 화면입력분을 적용함.
  }
  if(key == 'PROD_DES') {
return $('#PROD_DES').val();  // 품명규격 화면입력분을 적용함.
  }   
  if(key == 'EMP_CD') {
return $('#EMP_CD').val();  // 품명규격 화면입력분을 적용함.
  }else {
return value;
  }                      
   
   
// Json 결과값 연구자료 (E카운트 전송 후 성공여부 확인)
console.log.clear;
  const data = {
"ProductList": [{
"Line": "0",
"BulkDatas": {
"PROD_CD": "test",               // 품목코드연습 앞에 'test'란 단어를 넣어서 많들어봄 20자리까지 가능함.
"PROD_DES": "(Test) 품명 자동전송",
"SIZE_FLAG": "1",
"SIZE_DES": "",
"EMP_CD": "23468",     //           원래 예제파일에는 없는 사항인데 최주임님 넣어줌
"UNIT": "Kg",
"PROD_TYPE": "",
"SET_FLAG": "",
"BAL_FLAG": "",
"WH_CD": "",
"IN_PRICE": "",
"IN_PRICE_VAT": "",
"OUT_PRICE": "",
"OUT_PRICE_VAT": "",
"REMARKS_WIN": "",
"CLASS_CD": "",
"CLASS_CD2": "",
"CLASS_CD3": "",
"BAR_CODE": "",
"VAT_YN": "",
"TAX": "",
"VAT_RATE_BY_BASE_YN": "",
"VAT_RATE_BY": "",
"CS_FLAG": "",
"REMARKS": "",
"INSPECT_TYPE_CD": "",
"INSPECT_STATUS": "",
"SAMPLE_PERCENT": "",
"EXCH_RATE": "",
"DENO_RATE": "",
"SAFE_A0001": "",
"SAFE_A0002": "",
"SAFE_A0003": "",
"SAFE_A0004": "",
"SAFE_A0005": "",
"SAFE_A0006": "",
"SAFE_A0007": "",
"CSORD_C0001": "",
"CSORD_TEXT": "",
"CSORD_C0003": "",
"IN_TERM": "",
"MIN_QTY": "",
"CUST": "1378624517",                      // 구매처코드는 등록된 코드로 넣어야 함. (자료 갖고 있어야 함.) 금영스틸을 샘플로 넣음.
"OUT_PRICE1": "",
"OUT_PRICE1_VAT_YN": "",
"OUT_PRICE2": "",
"OUT_PRICE2_VAT_YN": "",
"OUT_PRICE3": "",
"OUT_PRICE3_VAT_YN": "",
"OUT_PRICE4": "",
"OUT_PRICE4_VAT_YN": "",
"OUT_PRICE5": "",
"OUT_PRICE5_VAT_YN": "",
"OUT_PRICE6": "",
"OUT_PRICE6_VAT_YN": "",
"OUT_PRICE7": "",
"OUT_PRICE7_VAT_YN": "",
"OUT_PRICE8": "",
"OUT_PRICE8_VAT_YN": "",
"OUT_PRICE9": "",
"OUT_PRICE9_VAT_YN": "",
"OUT_PRICE10": "",
"OUT_PRICE10_VAT_YN": "",
"OUTSIDE_PRICE": "",
"OUTSIDE_PRICE_VAT": "",
"LABOR_WEIGHT": "",
"EXPENSES_WEIGHT": "",
"MATERIAL_COST": "",
"EXPENSE_COST": "",
"LABOR_COST": "",
"OUT_COST": "",
"CONT1": "전체",                           // 담당자 설정부분 전체라는 단어를 넣음
"CONT2": "",
"CONT3": "",
"CONT4": "",
"CONT5": "",
"CONT6": "",
"NO_USER1": "",
"NO_USER2": "",
"NO_USER3": "",
"NO_USER4": "",
"NO_USER5": "",
"NO_USER6": "",
"NO_USER7": "",
"NO_USER8": "",
"NO_USER9": "",
"NO_USER10": "",
"ITEM_TYPE": "",
"SERIAL_TYPE": "",
"PROD_SELL_TYPE": "",
"PROD_WHMOVE_TYPE": "",
"QC_BUY_TYPE": "",
"QC_YN": ""
}
}]
}     

  const jsontmp = JSON.stringify(data, replacer);   
  // obj = JSON.parse(data);
  const jsonresult = jsontmp;
  const par = JSON.parse(jsonresult);
  console.log(jsonresult);   
  
function replacer(key, value) {
  // document.write(key + " : " + value + '<br>');
  if(key == 'PROD_CD') {
return $('#PROD_CD').val();  // 품명코드 화면입력분을 적용함.
  }
  if(key == 'PROD_DES') {
return $('#PROD_DES').val();  // 품명규격 화면입력분을 적용함.
  }   
  if(key == 'EMP_CD') {
return $('#EMP_CD').val();  // 품명규격 화면입력분을 적용함.
  }else {
return value;
  }         
  
   }       
   
  
 console.log(par);   
  console.log(par.Data.ResultDetails[0].IsSuccess);   // 결과값을 받으려면 이렇게 코드를 작성해야 함.
  
  const data = {        // Json 결과값 연구자료
"Data": {
"EXPIRE_DATE": "",
"QUANTITY_INFO": "시간당 연속 오류 제한 건수 : 0/30건, 1시간 허용량 : 20/30000건, 1일 허용량 : 21/100000건",
"SuccessCnt": 1,
"FailCnt": 0,
"ResultDetails": [
{
"Line": 0,
"IsSuccess": true,
"TotalError": "[전표묶음0] OK",
"Errors": null,
"Code": null
}
],
"SlipNos": [
"20211125-21"
]
},
"Status": "200",
"Errors": null,
"Error": null,
"Timestamp": "2021-11-25 12:50:36.673",
"RequestKey": null,
"IsEnableNoL4": false,
"RefreshTimestamp": "0",
"AsyncActionKey": null
}
  
  
  
  const jsontmp = JSON.stringify(data);   
  // obj = JSON.parse(data);
  const jsonresult = jsontmp;
  const par = JSON.parse(jsonresult);
  console.log(jsonresult);   
  console.log(par);   
  console.log(par.Data.ResultDetails[0].IsSuccess);   // 결과값을 받으려면 이렇게 코드를 작성해야 함.   

}

판매주문을 넣는 양식인데, 폼이나 기타 자료를 안내해 주고 있네요.

메뉴얼보면서 차근차근 하나씩 만들어서 UI식으로 업무를 처리할 수 있도록 시간을 두고 개발해 보려고 합니다.

중소기업들 전산화를 하는데, 어려움이 많습니다. 전산인력이라고 따로 뽑을 수도 없는 환경에서 뭔가 체계적으로 관리하고 싶은 분들에게 Ecount API는 새로운 도전이 될 수 있을 것입니다.

하나씩 해나가는 모습을 보이고 싶네요.

새벽에 끄적끄적 해봅니다. 오늘도 몇가지 성공해서 기분은 좋네요~ 굿나잇 하시길...

반응형
댓글