각 오브젝트에 코딩을 시작해보겠습니다.
0. 오브젝트 위치 변경과 버튼 추가
정보의 분류를 위해 오브젝트 위치를 변경하고 공급자저정(발주서 생성)이라는 버튼을 넣었습니다.
빨간 선을 기준으로 발주에 해당하는 내용과 발주상세에 해당하는 내용을 분리해서 기록합니다.
몇가지 조건(원칙)을 가지고 코딩을 시작하겠습니다.
- 한번 저장한 공급자는 변경을 못한다. (카드 전표 취소하는 것처럼, 수정을 해야할때는 전체 취소를 하고 새로 작성하는 방법을 적용합니다. 다양한 기능을 넣으려면 그 만큼 여러가지를 생각하면 가능한 일이나, 가급적 단순하게 접근하겠습니다. 나중에 발주서 삭제 버튼이나 수정 버튼이 삽입될 예정입니다.)
- 공급자 저장 버튼이 선행되야, 발주상세에 기록이 가능하게 만든다.
1. 공급자명의 이벤트
행 원본 설정은 아래와 같이 해주시고,
형식의 열개수와 열너비를 수정해주세요.
잘 나옵니다.
이제 공급담당자와 모델코드의 rowsource에 영향을 주는 코드를 작성해보겠습니다. 아래 부분에 코드를 삽입하겠습니다.
공급담당자는 공급자 소속이고, 모델도 공급자 소속으로 where 절을 사용해서 rowsource를 바꿔주는 코드를 사용하겠습니다. 아래는 원하는 내용이 작동될 정도의 기초코드를 먼저 작성을 하고 아래 해당하는 콤보상자의 형식을 손보겠습니다.
Private Sub 공급자명_AfterUpdate()
'--[공급자담당자]
공급자담당자 = Null
공급자담당자.RowSource = "select ID, 담당자명, 담당자전화 from 공급담당자 where 공급자ID = " & 공급자명 & ""
'--[모델명]
모델코드 = Null
모델코드.RowSource = "select ID, 모델코드 from 아이템 where 공급자ID = " & 공급자명 & ""
End Sub
두개의 콤보상자가 있는데, 담당자 전화번호를 사용할 일이 있을 듯해서 조금 다르게 변형해줬습니다.
드랍다운을 누르면 아래와 같이 이름만 보이는데 전체 너비와 열너비중 보이려는 너비를 맞춰주시면 그림과 같이 보이게됩니다.
이제 회사를 바꾸면서 담당자와 모델코드가 제대로 바뀌는지 확인해보겠습니다.
오색 연필과 스댕가위 둘다 확인했지만, 귀차니즘에 스크린샷은 오색연필만 올립니다.
이 코드는 여기까지 우선하고 다른 코드 갔다가 다시 수정하겠습니다.
2. 모델코드의 이벤트
모델 코드가 업데이트 되면, 아이템명, 색상명, 공급가가 업데이트 되도록 만들어야합니다.
귀차니즘을 덜어내기 위해서, 공급자명에 썼던 모델코드쪽 코드를 수정하고, 속성시트의 형식부분도 아래와 같이 우선 수정을 하겠습니다. (아래는 전체코드가 아닙니다. 수정을 하시거나 부분만 복사해서 붙여넣기 하시면 됩니다.)
Private Sub 모델코드_AfterUpdate()
아이템명 = 모델코드.Column(2)
색상명 = 모델코드.Column(3)
공급가 = 모델코드.Column(4)
End Sub
아래와 같이 코드를 적용하고 콤보상자를 눌러 선택을 해보면
Private Sub 모델코드_AfterUpdate()
아이템명 = 모델코드.Column(2)
색상명 = 모델코드.Column(3)
공급가 = 모델코드.Column(4)
End Sub
3. 수량의 이벤트 코드
텍스트 박스 수량에 AfterUpdate 코드를 삽입하겠습니다.
Private Sub 수량_AfterUpdate()
If Nz(공급가, 0) = 0 Then
소계 = 0
Else
소계 = 공급가 * 수량
End If
End Sub
4. 중간 점검(1)
수량 AfterUpdate 까지 해보면, 위와 같이 회색 오브젝트 부분에 숫자들이 채워지는걸 볼 수 있습니다.
5. 배송지, 배송담당자 불러오기
배송지와 담당자가 내 회사 정보와 다르지 않은 경우는 내 정보에서 가져오는 경우를 사용하면되고,
창고가 분리되어 있다면, 기본 배송지와 담당자를 만들어 적용해도 됩니다. 전자의 경우는 dlookup을 사용해서 불러오고 후자의 경우는 폼의 코드안에 넣어주는 방식을 사용하면 됩니다. 그 외의 방법으로는 배송지 테이블을 따로 만들어서 불러오는 방법도 있습니다.
튜토리얼에서는 폼이 열릴 때 기본 배송지와 배송담당자를 불러오는 방식으로 진행하겠습니다.
Form Load 이벤트 하단에 아래와 같이 기본 배송정보를 지정해주면
'--[배송정보]
배송지 = "쓰고싶은 주소"
배송지담당자 = "김창열 대리 010-2222-3333"
폼이 로드되면서 아래와 같이 배송지와 배송지 담당자가 입력됩니다.
6. 발주 테이블 기록
위 그림에서 하늘색 배경을 한 오브젝트는 꼭 입력되야 되야할 내용들입니다.
- 위의 하늘색 배경중 하나라도 비어 있으면, 레코드 입력이 안되게끔 해야하고
- 동시에 발주상세의 저장 버튼도 안먹히게 만들어 놔야합니다. (데이터 꼬임 방지 or 에러유발 방지)
발주 상세 부분에 "버저장" 버튼에 먼저 클릭 방지용 코드를 넣겠습니다. 저장버튼에 아래와 같이 코드를 넣고, 코드 테스트를 하면서 진행하겠습니다.
* 직접 실행창과 debug.print
vba창 하단이 아래와 같다면 ctrl+G를 눌러보세요~
직접 실행창이 생깁니다.
debug.print 라는 명령어로 원하는 결과 값을 볼 수 있습니다.
아래의 코드를 넣고 실행을 할 예정인데, 여태까지는 이벤트에서 코드 삽입만 해보셨을 겁니다.
클릭 방지
Private Sub 버저장_Click()
클릭방지
End Sub
아래의 클릭방지는 이벤트가 없기 때문에 별도로 삽입해줍니다. (위, 아래 코드의 위치는 상관없습니다.)
Private Sub 클릭방지()
Dim 판단 As Long
판단 = Nz(DLookup("공급자ID", "발주", "발주번호 = " & 발주번호 & ""), 0)
Debug.Print 판단
End Sub
이제 "버저장"버튼을 눌러 테스트를 해보겠습니다.
0이 나왔네요.
테이블을 보니 공급자 ID가 0이 맞네요.
기본값 0이거나 nz(공급자,0)가 0이라면, 실행이 안되게 해야합니다.
Private Sub 클릭방지()
Dim 판단 As Long
판단 = Nz(DLookup("공급자ID", "발주", "발주번호 = " & 발주번호 & ""), 0)
If 판단 = 0 Then
MsgBox "발주서 작성을 선행해주세요."
Exit Sub
End If
End Sub
Private Sub 버삭제_Click()
클릭방지
End Sub
Private Sub 버저장_Click()
클릭방지
End Sub
"버삭제"나 "버저장" 버튼을 누르면 위와 같이 발주서 작성을 먼저 해달라는 내용을 출력합니다.
공급자 저장(발주서 생성) 버튼에 코드삽입을 합니다.
이번에는 필수 필드에 값이 없을때의 기록 방지입니다.
공급자 명과 공급담당자가 비어 있습니다.
둘다 콤보 상자고, 첫 열이 ID로 시작하기 때문에 숫자를 사용할 수 있습니다.
Private Sub 버공급자저장_Click()
If Nz(공급자명, 0) = 0 Or Nz(공급자담당자, 0) = 0 Or Nz(배송지, "") = "" Or Nz(배송지담당자, "") = "" Then
MsgBox "필수 필드를 작성해주세요."
Exit Sub
Else
MsgBox "!"
End If
CurrentDb.Execute "update 발주 set 공급자ID=" & 공급자명 & ",공급자명='" & 공급자명.Column(1) & "',공급담당자='" & 공급자담당자.Column(1) & "' " & _
",공급담당연락처='" & 공급자담당자.Column(2) & "',배송지주소='" & 배송지 & "',배송지담당자='" & 배송지담당자 & "' " & _
" where 발주번호 = " & 발주번호 & " ", dbSeeChanges
End Sub
발주서상 가장 테두리의 필수 정보가 입력됐습니다.
[이전 글]: 바코2://#26. 아이템, 재고 관련 (5) 공급주문 폼 - 폼 구성
[다음 글]: 바코2://#28. 아이템, 재고 관련 (7) 공급주문 폼 - 폼 구성
'바보처럼 코딩하기 > 바보처럼 코딩하기 ver.2' 카테고리의 다른 글
바코2://#29. 아이템, 재고 관련 (8) 공급주문 폼 - 폼 구성 (0) | 2022.02.07 |
---|---|
바코2://#28. 아이템, 재고 관련 (7) 공급주문 폼 - 폼 구성 (0) | 2022.01.19 |
바코2://#26. 아이템, 재고 관련 (5) 공급주문 폼 - 폼 구성 (1) | 2022.01.12 |
바코2://#25. 아이템, 재고 관련 (4) 공급주문 폼 - 주문 번호 생성하기 (0) | 2022.01.10 |
바코2://#24. 아이템, 재고 관련 (3-2) 공급주문 폼 (0) | 2022.01.10 |