본문으로 바로가기
37. 재고 보정수량에 디테일 주는 과정 - 바보처럼코딩하기

37. 재고 보정수량에 디테일 주는 과정

반응형

 

엑세스따라하기37.accdb
1.80MB

36화 코드 정정건과 설명.

우선 마져 이야기를 못하고 녹화가 끊긴 부분에 대한 추가 설명을 해드립니다.

저에게 이런 댓글이 달리다니 감동했습니다.

 

 

오늘 올린 영상을 보시고 바로 피드백을 주시다니!!! 보람이 생깁니다. 36화에 대한 추가설명을 몇개 하고 37화로 넘어가겠습니다.

 

*36화 추가설명(설명이 빠진것들)

(1) 아래의 레코드셋은 RS만 사용하셔도 사실 무방합니다. 두개를 동시에 사용할때 구분을 지어 보시라고 RS와 RS1으로 사용했습니다. 이유는 RS의 사용부분에서 RS.Close  set RS = Nothing을 해줬기 때문에 이미 RS가 비워진 상태입니다. 그러므로 뒤에 나오는 레코드셋을 다시 RS에 담으실수 있습니다. 물론 반복작업이 이어지는 경우는 RS를 닫지 않고 RS1을 이용해서 작업하는 중간에 RS를 소환해서 사용이 가능합니다.

 

(2) 초기재고와 보정수량이 어떤 부분에 들어갈수 있을지 두가지의 예를 보여줍니다.

CurrentDb.Execute "insert into t_재고(아이템ID,모델코드) values(" & RS!ID & ",'" & RS!모델코드 & "')", dbSeeChanges

처음설명에서 보여준 아이템ID와 모델코드만 들어가는 코드는 위의 코드와 같습니다.

이후 RS1에서

'RS1!초기재고 = Nz(DLookup("초기재고", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)
'RS1!보정수량 = Nz(DLookup("보정수량", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)

RS1!구매수량 = DSum("수량", "t_발주", "아이템ID = " & RS1!아이템ID & "")
RS1!판매수량 = DSum("수량", "t_거래입력", "아이템ID = " & RS1!아이템ID & "")

RS1!현재고 = RS1!초기재고 + RS1!구매수량 - RS1!판매수량 + RS1!보정수량

이렇게 넣어줌으로써 현재고가 완성됩니다.

 

같은 결과를 내는 두번째 방법은

CurrentDb.Execute "insert into t_재고(아이템ID,모델코드,초기재고,보정수량) values(" & RS!ID & ",'" & RS!모델코드 & "'," & Nz(RS!초기재고, 0) & "," & Nz(RS!보정수량, 0) & ")", dbSeeChanges 

애초에 초기재고와 보정수량을 가져오고

RS1!초기재고 = Nz(DLookup("초기재고", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)
RS1!보정수량 = Nz(DLookup("보정수량", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)

RS1!구매수량 = DSum("수량", "t_발주", "아이템ID = " & RS1!아이템ID & "")
RS1!판매수량 = DSum("수량", "t_거래입력", "아이템ID = " & RS1!아이템ID & "")

RS1!현재고 = RS1!초기재고 + RS1!구매수량 - RS1!판매수량 + RS1!보정수량

밑줄 부분을 활성화해서 계산을 하는 방법이 있습니다.

 

제 표현으로 '이벤트순서 정하기'라고 하는것을 말씀드리는 부분입니다.앞으로 조금 더 디테일하게 봐줘야 할것 중에 하나가 이벤트 순서를 어떻게 나누는지입니다.

 

-----<코드 원문>------

Dim RS As DAO.Recordset, RS1 As DAO.Recordset   '(1)
Set RS = CurrentDb.OpenRecordset("select * from t_아이템정보", dbOpenDynaset, dbSeeChanges)

If RS.RecordCount Then
RS.MoveFirst
Do

CurrentDb.Execute "insert into t_재고(아이템ID,모델코드,초기재고,보정수량) values(" & RS!ID & ",'" & RS!모델코드 & "'," & Nz(RS!초기재고, 0) & "," & Nz(RS!보정수량, 0) & ")", dbSeeChanges   '(2)
RS.MoveNext

Loop Until RS.EOF

End If

RS.Close

set RS = Nothing

 

'반복해서 계산해서 넣기

Set RS1 = CurrentDb.OpenRecordset("select * from t_재고", dbOpenDynaset, dbSeeChanges)

If RS1.RecordCount Then
RS1.MoveFirst
Do

RS1.Edit

'(2)

'RS1!초기재고 = Nz(DLookup("초기재고", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)
'RS1!보정수량 = Nz(DLookup("보정수량", "t_아이템정보", "ID = " & RS1!아이템ID & ""), 0)

RS1!구매수량 = DSum("수량", "t_발주", "아이템ID = " & RS1!아이템ID & "")
RS1!판매수량 = DSum("수량", "t_거래입력", "아이템ID = " & RS1!아이템ID & "")

RS1!현재고 = RS1!초기재고 + RS1!구매수량 - RS1!판매수량 + RS1!보정수량

RS1.Update

RS1.MoveNext

Loop Until RS1.EOF

End If

RS1.Close

Set RS1 = Nothing


-----<코드 원문 끝>------

 
중급코스인 36화부터는 큰 줄기에 조금씩 다른 디테일로 우리가 필요로 하는 데이터를 산출하는 방법을 다루고 있습니다. 중급코스는 큰줄기+디테일의 반복이며, 이 디테일들을 잘 조합하신다면 업종과 관계없이 원하는 답을 구할수 있으실 겁니다. 소재는 리테일 또는 훌세일의 판매업이지만, 여기서 사용하는 코드들은 제조업 또한 적용가능합니다. 업종보다는 개발자가 원하는 접근방식이 프로그램에 가장 큰 영향을 미칩니다.

 

중급과정에 대한 안내 & 학습 패턴 소개

 

제 영상에서 만들어지는 프로그램과 여러분의 만드실 프로그램을 도식화 해보면 아래와 같습니다.

저는 A~F까지 프로그램을 쌓아갑니다. 구조적으로 필요한 부분을 보여드리는게 가장 큰 목적입니다.

36강에서 보신 '재고=입고-출고'가 (가장왼쪽 첫번째 그림) 구조만 있는 부분이라면 거기에 다른 디테일을 추가한것이 '초기재고'와 '보정수량'을 추가한 부분(왼쪽에서 두번째 그림) 입니다. 제 영상을 보시는 분들은 자신만의 프로그램을 갖는것이 목적이라고 생각합니다. 이렇게 디테일을 유닛으로 인식하시고, 변화를 시도하다보면 세번째 그림 같이 자신만의 색깔을 가진 프로그램이 완성됩니다. 그리고 한발더 나아가서 디테일을 위해서 구조를 변경해서 사용하시다가, 구조부터 설계를 하시는 수준까지 올라가시길 기원한답니다.

 

프로그램에는 정답은 없고, 잘 만든 프로그램과 그렇지 못한 프로그램이 있을 것이고,  잘 만든 프로그램의 수준은 '구조 설계와 디테일'의 수준이 높겠지요?


위의 그림과 같이 점점 더 진화해서 최종적으로 자신이 원하는 프로그램을 꼭 찾으시길 바랍니다.

 

중급 과정을 진행하시면서 참고하실것

중급과정을 진행하시면서 위와 같이 자신이 필요로 하는 다른 디테일은 제가 속해 있는 엑온까페(cafe.naver.com/xpath_)의 글들을 참고하시길 권합니다. 중급과정은 따라하시면서 만들어가시기 좋은 과정입니다. 골자만 쫓아오시면서 디테일은 변형을 해보시는 것도 프로그램에 대한 스스로의 학습에 많은 도움이 될것이라 생각합니다.

 

37강 내용

36강에서는 35강에서 했던 보정수량에 대한 디테일을 추가 및 변형을 합니다. 

이런식의 변형이라고 보시면 됩니다. 제 강의 영상을 보시면서 이런 도식화가 '프로그램 개발'을 이해하는데 도움이 되길 바랍니다. 머릿속에 그림이 그려지기 시작하면, 개발이 조금 더 수월해지는건 사실이니까요 ^_^.

 

위 그림은 모델을 그림으로 표현한 도식입니다. 36강에서는 'f_구매_재고'의 '재고리스트'에서 현시점의 재고를 구하는데 그쳤지만, 이제 기능을 하나 더 추가해보기 위해서 't_재고_보정'이라는 테이블을 생성했습니다.

 

새로운 기능은 내가 정한 과거의 어떤 시점에서 재고가 얼마였는지 구하는 것인데요, 보통 청구서에 등장하는 월별 합계에 이용되는 기능입니다. 

 

다음시간에는 월별로 리스팅하는것으로 이어가보겠습니다.

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유