본문으로 바로가기
바코2://#31. 아이템, 재고 관련 (10) 공급주문 폼 - 폼 구성 - 바보처럼코딩하기

바코2://#31. 아이템, 재고 관련 (10) 공급주문 폼 - 폼 구성

반응형


지난 시간 계획을 해놓고 못한 것들입니다.

 

2) 전체 열람 버튼 생성 + 코딩 : 전체 리스팅

3) 공급자명 콤보상자에 + 코딩 : 공급자별 리스팅

 

(2,3번 관련) 조건은 날짜와 업체관련 필드 이렇게 두가지를 다뤄가면서 진행합니다.

오늘의 튜토리얼은 위의 예시를 가지고, Rowsource를 비우고, 컨트롤 하는 방법과 필요에 따라서 쓰면 좋은 이유 같은 내용을 생각하시면서 봐주시길 바라면서 작성합니다.

오늘의 목적은 위의 내용을 완성하는 것이고, 그 전에 저번 포스트에 이어서 마무리를 해야할 부분들이 필요합니다. 

우선 데이터가 좀 필요하겠네요. 각기 다른 회사에 거래장과 상세 내용을 2개 이상씩 넣어주려고 합니다.


시작에 앞서 커피 한잔 해야겠습니다. 오늘은 설명할 것들이 많아서 "이걸 어떻게 설명하나?" 고민하고 있습니다. @,.@

 

우선 그림을 그려보겠습니다.

대략의 큰 진도는 아래와 같고, 부분부분 같이 연동해야하는 부분은 추가해서 진행하겠습니다.

1) [리스트] 선택하면 상세정보가 오브젝트에 채워진다.

2) [발주리스트] 선택하면 상단정보가 오브젝트에 채워진다.

3) [공급자명] 선택하면 [발주리스트]가 해당 업체 발주기록 (최신순)으로 정렬된다.

4) [전체리스트버튼] 생성해서 [발주리스트]가 전체기록을 보여준다.

리스트를 구성하실때 항상 그리고 꼭 생각해야 할 부분이 있습니다.

위에 말한것 처럼
"오늘의 튜토리얼은 위의 예시를 가지고, Rowsource를 비우고, 컨트롤 하는 방법과 필요에 따라서 쓰면 좋은 이유 같은 내용을 생각하시면서 봐주시길 바라면서 작성합니다."
이런 내용인데, 조금 구체적으로 말씀드리겠습니다. 

1. 리스트 구성시 매번 생각해야 될 부분

1) 리스트의 양이 얼마나 될것인가?

많은 ID(데이터)가 있는 테이블을 리스트에 담는다면 어떻게 될까요? 폼을 열고 리스트는 한참 로딩이 될것입니다.

폼이 하나 열리는데가 아닌, 리스트하나 때문에 프로그램에 에러가 나는 경우가 생깁니다. 

 

내게 필요한 리스트 정보의 양을 먼저 정해두고 리스팅을 하는것이 가볍게 프로그램을 유지하는데 도움이 됩니다.

 

2) 보여줄 단위는 얼마나 될것인가?

 

리스팅을 할 때는

ㄱ) 얼마나 보여줄것인가?

ㄴ) 언제 보여줄것인가?

에 대한 계획이 있어야 불필요한 컴퓨팅(연산) 자원을 소모하지 않습니다.

 

ㄱ)

예를 들어 발주리스트의 경우 필요에 의해서 내가 찾는 기록이 작년기록일 수는 있지만, 오늘 날짜에서 작년 날짜까지 365일을 담아 놓는건 많은 자원을 소모합니다. 업무 특성상 내가 적당히 봐야하는 정도가 일주일까지인지, 아니면 30일 기준인지, 기간을 정해 놓는것이 좋습니다.

 

ㄴ) 폼이 로드될때 아무런 이벤트가 없이 열리는 폼도 있지만, 로드동시에 이벤트를 걸어놓는 경우는 프로그램이 힘들어하는 경우가 생깁니다. 구지 필요없다고 생각되는 부분은 과감히 시간차이를 둬서 나중에 계산하게끔 하는 방법을 선택하는게 프로그램 부하를 줄입니다. 


2. [리스트] 선택하면 상세정보가 오브젝트에 채워진다.

Private Sub 리스트_AfterUpdate()
상세ID = 리스트
순번 = 리스트.Column(1)
모델코드 = DLookup("id", "아이템", "모델코드 = '" & 리스트.Column(2) & "'")
아이템명 = 리스트.Column(3)
색상명 = 리스트.Column(4)
수량 = 리스트.Column(5)
공급가 = 리스트.Column(6)
소계 = 리스트.Column(7)
발주번호 = 리스트.Column(8)
End Sub

그림. 리스트 Afterupdate() 결과

글을 작성하다보니, 흔히 쓰는 클릭과 onclick() 같은 이벤트를 혼동해서 사용하고 있다는걸 발견했습니다. 이후로는 이벤트를 설명할때는 영어로 원래 단어를 사용하고, 한글은 일반적인 동작을 표현할때 사용하겠습니다.

예) 리스트를 클릭하니 잘 나옵니다. : 실제로는 Afterupdate()가 발동되서 나오는 부분이지만 행위는 클릭이므로 한글로 클릭이라고 표현했습니다.

리스트 클릭을 하니 잘 나옵니다.

위의 리스트_afterupdate() 코드중 모델보드 부분은 좀 다른데 살펴보겠습니다.

 

모델코드 = DLookup("id", "아이템", "모델코드 = '" & 리스트.Column(2) & "'")

 

콤보상자에 걸린 rowsource의 첫행은 모델코드의 ID부분입니다. Dlookup으로 ID를 찾아서 보낸 경우입니다.


3. 하위 부분 수정 및 완성하기

폼의 내용중, 아래의 그림에 해당하는 부분의 코드를 완성하겠습니다. (추후에 추가/수정될 부분이 있지만 우선은 데이터 입력하는데 문제가 없게끔 완성을 해보겠습니다.) 

 

아래의 버 저장의 코드중에서 아래의 주황색 부분을 공급자명으로 수정해줍니다. [공급자ID]로 잘못적혀 있었네요.

 

Private Sub 버저장_Click()

'모델코드 수량이 없으면 저장이 안되게함 + 거래장 생성이 안돼있으면 에러출력
If Nz(모델코드, "") = "" Or Nz(수량, 0) = 0 Or Nz(순번, 0) = 0 Then
MsgBox "코드나 수량없음 or 거래장생성이 안돼있음."
Exit Sub
End If
If Nz(상세ID, 0) = 0 Then '새로등록
CurrentDb.Execute "insert into 발주상세 (발주번호,발주일,공급자ID,순번,모델코드,아이템명,색상명,수량, " & _
"공급가,소계,부가세,합계액) " & _
"values(" & 발주번호 & ",#" & 발주일 & "#," & 공급자명 & "," & 순번 & ",'" & 모델코드.Column(1) & "','" & 아이템명 & "' , " & _
"'" & 색상명 & "', " & 수량 & ", " & 공급가 & ", " & 소계 & "," & 소계 * 0.1 & " ," & 소계 * 1.1 & ")", dbsechanges
MsgBox "등록"
Else '업데이트
CurrentDb.Execute "update 발주상세 set 발주번호 = " & 발주번호 & ", 발주일 = #" & 발주일 & "#, " & _
"공급자ID = " & 공급자명 & ",순번=" & 순번 & ",모델코드='" & 모델코드.Column(1) & "',아이템명='" & 아이템명 & "' " & _
",색상명='" & 색상명 & "', 수량=" & 수량 & ", 공급가 = " & 공급가 & ", 소계= " & 소계 & ",부가세=" & 소계 * 0.1 & " " & _
",합계액=" & 소계 * 1.1 & " where ID = " & 상세ID & "", dbsechanges
MsgBox "수정"
End If
버초기화_Click
'추가/수정사항이 있을 예정
순번생성
End Sub

 

삭제 이후, 순번 생성이 안되어 있네요. 아래 리스트는 잘 비워졌구요.

 

아래의 코드에 순번생성을 삽입하고 결과를 보겠습니다.

Private Sub 버삭제_Click()
If Nz(상세ID, 0) = 0 Then
MsgBox "선택한 상세ID 없음"
Exit Sub
Else
CurrentDb.Execute "delete * from 발주상세 where id = " & 상세ID & "", dbsechanges
MsgBox "삭제"
End If
버초기화_Click
순번생성
End Sub

 

삭제이후 순번이 제대로 나옵니다.

복제 버튼을 살펴보겠습니다.

상세ID는 잘 없어졌는데 순번이 사라졌네요. 삭제때와 마찬가지로 순번생성을 넣어주겠습니다. 

Private Sub 버복제_Click()
상세ID = Null
순번 = Null
'추가/수정사항이 있을 예정
순번생성
End Sub

 

정상적으로 작동합니다.

 

"이 복제 버튼이 필요한가?" 라는 의문이 있으실 분들이 계실텐데, 꼭 필요한 버튼은 아닙니다. 반복작업을 하다보면 저런 버튼이 유용하다는걸 보여드리기 위해서 만들어 보여드리고 있습니다.

초기화 버튼은 잘 작동합니다.

 

 

오늘은 여기까지 포스팅을 마치겠습니다. 좋은 주말 되시길 바랍니다.

 


[이전 글]: 바코2://#30. 아이템, 재고 관련 (9) 공급주문 폼 - 폼 구성

[다음 글]: 바코2://#32. 아이템, 재고 관련 (11) 공급주문 폼 - 폼 구성


 

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