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

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

반응형

드디어 발주리스트를 사용하는 시간이 왔네요.

 

발주리스트는 발주테이블의 내용을 축약해서 보여줍니다. 상황에 따라서 리스트에 보이는 필드의 갯수를 늘릴수도 줄일 수도 있습니다. 

 

(잠정적 목표는 아래의 순서로 새로 만들 버튼과, 업체리스트 콤보상자에 이벤트를 넣어서 확인해볼 예정입니다만, 이번 포스트에서 다룰수 있을지 다음 포스트에서 다룰지는 잘 모르겠습니다. 중간 수정해야하는 것들이 있어 우선 목표를 정하고 해보는데 까지 가보겠습니다.)

 

1) 폼의 중간 수정: 불필요한 코드 삭제 및 수정

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

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

 

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

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

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

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

 

그런데, 아래와 같이 저장을 한 뒤에 새로 발주번호를 받아서 새로운 레코드를 넣고 싶다면?

지금 상태에서는 폼을 닫았다가 다시 열어야만 가능해집니다.

새로운 발주서를 만들기 위해서 단추를 만들어 줘야겠네요.


1. 폼의 상단부분을 활용해보기

디자인 보기 모드에서 본문(검은색 줄쳐진 부분: 원래는 흰색인데 선택하면 검정으로 변함)을 우클릭하면, 추가메뉴가 나오고 그 중에 '폼 머리글/바닥글'을 선택해줍니다.

위쪽에는 폼 머리글이 아래쪽에는 폼 바닥글이 생성됐습니다. 우리는 바닥글은 사용안할 예정입니다. 바닥글은 빨간 줄친 부분에 마우스로 클릭한 상태로 위로 드래그 올리시면 아래 그림과 같이 영역이 사라집니다.

폼 보기를 해서 확인을 해보면

머릿글 영역은 나왔고, 바닥글 영역은 없어졌습니다.

아시는 분들에게는 당연한 이야기 일수도 있지만, 안해보신 분들에게는 머릿글 영역에서 코딩이 본문에 어떤 영향을 주는지 뭐 특별한게 없는지 궁금해 하실수도 있을것 같아서, 직접 코딩을 해보고 별 차이 없다는걸 보여드리는 과정입니다.

2. 새 발주서 버튼만들기

 

이제 상단에 버튼을 하나 만들겠습니다. 캡션:새 발주서,  오브젝트명: 버새발주서

 

그리고 on click 이벤트를 하나 생성해줍니다. 

아래의 그림은 내가 어떻게 다음 단계로 가야할지 살펴보는 과정을 보인 그림입니다. 아무리 코딩에 도가 텃어도 매번 하는 것들이 다른 조건들이나 다른 기능을 요하게 되면, 머릿속에서만 생각하기 보다는 가급적 그림이던 엑셀이던 구체화 시켜서 아래와 같이 확인하는 과정을 거쳐보시길 권합니다.

노란 동그라미: 새롭게 업데이트 돼야하는 부분

빨간 엑스: 초기화되야할 부분

파랑 동그라미: 발주서가 생성되지 않았을때 클릭하면 나오는 에러를 수정해줘야할 부분


3. 클릭방지 코드 삭제 및 버저장, 버삭제 코드수정

파랑 동그라미 부분인 에러처리부터 해주겠습니다. 순번이 이제 나오기 때문에, 더이상 필요가 없어진, 이전에 사용했던 클릭 방지 코드 부분을 삭제해 줄 때가 됐습니다. 아래의 클릭방지 코드를 삭제해주고,

 

Private Sub 클릭방지()
Dim 판단 As Long
판단 = Nz(DLookup("공급자ID", "발주", "발주번호 = " & 발주번호 & ""), 0) 
If 판단 = 0 Then
MsgBox "발주서 작성을 선행해주세요."
Exit Sub
End If
End Sub

 

버저장의 코드의 윗부분을 아래와 같이 수정해줍니다.

Private Sub 버저장_Click()

'모델코드 수량이 없으면 저장이 안되게함 + 거래장 생성이 안돼있으면 에러출력
If Nz(모델코드, "") = "" Or Nz(수량, 0) = 0 Or Nz(순번, 0) = 0 Then
MsgBox "코드나 수량없음 or 거래장생성이 안돼있음."
Exit Sub
End If

 

버삭제의 코드도 아래와 같이 수정해줍니다.

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


4. Form_Load()에 넣었던 코드 빼서 새 발주서 버튼에 사용하기

Form_Load() 에 있던 내용을 그대로 '발주번호만들기'라는걸 하나 만들고, Form_load에는 아래와 같이 발주번호 만들기를 넣어줍니다.

Private Sub Form_Load()
발주번호만들기
End Sub
Private Sub 발주번호만들기()
'----[변환 파트]
발주일 = Date
Dim 앞자리 As String, 뒷자리 As String, 합치기 As Long
앞자리 = Format(Date, "yymmdd")
If DCount("ID", "발주", "발주일 = #" & Date & "#") = 0 Then
뒷자리 = Format(DCount("ID", "발주", "발주일 = #" & Date & "#") + 1, "00")
Else
뒷자리 = Format(DMax("right(발주번호,2)", "발주", "발주일 = #" & Date & "#") + 1, "00")
End If
합치기 = CLng(앞자리 & 뒷자리)
발주번호 = 합치기
'----[저장 파트]
CurrentDb.Execute "insert into 발주 (발주일,발주번호) values(#" & 발주일 & "#," & 합치기 & ")", dbseechanages
'--[배송정보]
배송지 = "쓰고싶은 주소"
배송지담당자 = "김창열 대리 010-2222-3333"
End Sub

"버새발주서" 버튼 클릭이벤트에  발주번호만들기를 삽입해줍니다. 그리고 코드를 아래와 같이 삽입해줍니다.

Private Sub 버새발주서_Click()
발주번호만들기

공급자명 = Null
공급자담당자 = Null
수량합계 = Null
합계액 = Null
상세ID = Null
순번 = Null
리스트.Requery

End Sub

위의 코드를 넣고 새거래장 버튼을 누르면 아래와 같이 생성이 됩니다. 이제 또 추가해줘야할것이 있습니다.

(초록색버튼) 공급자 저장을 더블클릭하거나 연타하면 발주번호가 계속 생성됩니다.

다행히 우리는 발주폼이 닫힐때 미리 코딩을 해둔게 있습니다.

Form_close에 넣어둔 코드를 위의 form_load때와 같이 변경을 해 줄 예정입니다.

 

Private Sub Form_Close()
Dim RS As DAO.Recordset
'거래입력이 없는 발주ID를 추출해서 발주테이블에서 삭제한다.
Set RS = CurrentDb.OpenRecordset("select 발주번호 from 발주 where (발주번호 not in (select 발주번호 from 발주상세))", dbOpenDynaset, dbSeeChanges)

If RS.RecordCount Then
RS.MoveFirst
    While Not RS.EOF
    CurrentDb.Execute "Delete * from 발주 where 발주번호 = " & RS!발주번호 & "", dbSeeChanges
    RS.MoveNext
Wend

End If

RS.Close
Set RS = Nothing

End Sub

 

뭐라고 이름을 지을까요? 음...  없는발주서정리() 정도로 하겠습니다. 아래와 같이 코드를 수정합니다.

Private Sub Form_Close()
없는발주서정리
End Sub
Private Sub 없는발주서정리()
Dim RS As DAO.Recordset
'거래입력이 없는 발주ID를 추출해서 발주테이블에서 삭제한다.
Set RS = CurrentDb.OpenRecordset("select 발주번호 from 발주 where (발주번호 not in (select 발주번호 from 발주상세))", dbOpenDynaset, dbSeeChanges)

If RS.RecordCount Then
RS.MoveFirst
    While Not RS.EOF
    CurrentDb.Execute "Delete * from 발주 where 발주번호 = " & RS!발주번호 & "", dbSeeChanges
    RS.MoveNext
Wend

End If

RS.Close
Set RS = Nothing
End Sub

이제 다시 새발주서 버튼의 코드를 수정해줍니다. 없는 발주서 정리가 선행되야하므로 위에 넣어줍니다.

Private Sub 버새발주서_Click()
없는발주서정리
발주번호만들기

공급자명 = Null
공급자담당자 = Null
수량합계 = Null
합계액 = Null
상세ID = Null
순번 = Null
리스트.Requery

End Sub

이제 연타를 해도, 발주번호가 증가 하지 않습니다.

 

작자의 변.

이번 포스트는 여기까지 입니다. 지금까지 보셔서 아시겠지만, 일반 튜토리얼과는 과정이 다르게 느껴지실 겁니다. 우선 제 실력의 한계도 있거니와 제가 경험한 코딩은 "코딩 = 계획 + 결과 + (수정 x 무한대)" 입니다. 겪어보시는 분들은 아시겠지만, 초보자 입장에서는 수정이 불가능해서 프로그램을 엎어버리고 처음부터 다시 만드는 경우가 허다합니다. 심지어 잘 만들었다고 생각하는 프로그램도 시간이 지나면 수정해야할 부분들이 눈에 들어옵니다. 

수정할 만한 상황속에서 설명과 코딩을 하려고 미리 설계(?)해 놓은 부분도 있고, 실력이 못 미쳐서 하다가 수정을 하는 부분도 있습니다. 미리 완성하고 하나씩 올리는 포스트가 아니기 때문에 완성된 코드를 순서대로 보여주는 튜토리얼은 아닙니다. 제 한계안에서 사부작 사부작 진행하고 있답니다. "왜 교과서 같이 직진으로 가지 못하는가?"에 대한 궁금증을 가지실 분들이 계실 수도 있을 것 같아 글을 남깁니다. 오늘도 고생하셨고, 다음 포스트에서 뵙겠습니다.

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

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


 

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