본문으로 바로가기
바코2://#22. 아이템, 재고 관련 (2) - 바보처럼코딩하기

바코2://#22. 아이템, 재고 관련 (2)

반응형

1. 아이템 > 공급주문 > 재고의 시퀀스 라인 형성

이전 포스트에서 다이어그램으로 보여드린 라인은

공급주문 > 재고 와 판매입력(상품주문) > 재고의 두 줄기를 가지고 있습니다.

 

이번 포스트에서는 아이템 > 공급주문 > 재고까지 설정을 먼저 진행하고, 판매관련 폼이 완성되면 다른 줄기를 찾아가는 방식으로 진행하겠습니다. 

 

공급자 등록폼에 ctrl+c, ctrl+v를 해서 아이템등록폼을 만듭니다.

아이템등록폼을 디자인 보기로 열어 필요한 오브젝트만 남기고 나머지는 삭제 해줍니다.

 

 

위와 같이 폼을 수정하고, 저장, 삭제, 초기화 버튼과 리스트에 이벤트를 넣어줍니다. 버튼은 click 이벤트, 리스트는 after update로 이전 폼 구성할때와 같은 방법 이벤트를 삽입합니다.

 

Private Sub 버초기화_Click()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null
공급업체명 = Null
공급단가 = Null
판매단가 = Null

리스트.Requery
End Sub

 

공급업체명의 형식을 변경해줍니다. 

열개수: 2, 열너비: 0 cm

데이터 >  원본을 삽입하겠습니다.

 

정상적으로 잘 작동됩니다.

잠시간...제가 네트워크 드라이브를 잘못사용하는 바람에...파일을 처음부터 다시 만들었습니다;;
보이시는 스크린샷이 이전과 조금 다르더라도 이해 부탁드립니다. 

오늘 하나 알게 된게, 네트워크 드라이브가 동기화 중이면 파일을 못쓰게 되는 에러를 갖게됩니다.
작업파일은 로컬에서 작업하시길 바랍니다.

 

아래의 테이블 필드를 보면서, 저장 버튼에 코드를 삽입하겠습니다.

 

---------------------------------------------------------

** 간혹 코드에 " & _ 같은 부분을 사용하는데, 한 줄 아래로 내릴 때 사용하는 코드입니다.

strSQL = "select 아이템.id, 아이템.아이템명, 아이템.색상명, 아이템.모델코드, 아이템.공급자ID, 아이템.공급업체명, 아이템.공급단가, 아이템.판매단가 from 아이템"

 

이런 문장이 있다면 보기 편하기 위해서

아래와 같이 바꿔줄 수 있습니다.

 

strSQL = "select 아이템.id, 아이템.아이템명, 아이템.색상명, 아이템.모델코드, " & _

"아이템.공급자ID, 아이템.공급업체명, 아이템.공급단가, 아이템.판매단가 from 아이템"

 

두 줄을 이어주기 위해서 필요한건 앞에 빈 칸 하나를 포함한  " & _과 다음 줄 시작부분에 " (더블 쿼트) 입니다.

---------------------------------------------------------

리스트에 행원본을 넣습니다. 행원본에 해당하는 스크린샷을 드리고 그 아래 행원본을 넣는 다른 방법을 알려드리겠습니다.

아이템 테이블의 ID, 아이템명, 모델코드를 오름차순으로 넣었습니다. (행 원본 넣는 법도 반복이라 다음부터는 원본에 어떤것만 넣었는지로 설명하면서 진행하겠습니다.

 

다른 방법으로 행원본을 넣는 방법은 직접 코드를 쳐서 넣는 방법이 있습니다.

바로 하시기에 귀찮거나 어려울 수 있으니, 우리는 여기서 복사해서 붙여넣는 방법으로 대체하겠습니다.

 

* 알아두시면 좋은...속성시트에서 빨간 박스 친곳을 클릭하시면 옆에 코드 전체가 선택됩니다.

아래의 코드를 복사하셔서 행 원본 위치에 붙여 넣기 하시면 됩니다.

SELECT 아이템.ID, 아이템.아이템명, 아이템.모델코드 FROM 아이템 ORDER BY 아이템.모델코드;

형식은 열개수 3에 열이름 0 입니다.

 

우선 데이터 하나를 넣어야 하니 아래의 코드를 저장 버튼에 삽입해 줍니다.

Private Sub 버저장_Click()
If Nz(ID, 0) = 0 Then
CurrentDb.Execute "insert into 아이템 (아이템명,색상명,모델코드,공급자ID,공급업체명,공급단가,판매단가) " & _
"values('" & 아이템명 & "','" & 색상명 & "','" & 모델코드 & "'," & 공급업체명 & ",'" & 공급업체명.Column(1) & "'," & 공급단가 & "," & 판매단가 & ")", dbSeeChanges


MsgBox "저장"
Else


CurrentDb.Execute "update set 아이템 아이템명='" & 아이템명 & "',색상명= '" & 색상명 & "',모델코드 = '" & 모델코드 & "', " & _
"공급자ID =" & 공급업체명 & ",공급업체명='" & 공급업체명.Column(1) & "',공급단가=" & 공급단가 & ",판매단가=" & 판매단가 & " where ID = " & ID & "", dbSeeChanges
MsgBox "수정"
End If

버초기화_Click
End Sub

등록이 정상적으로 진행됐습니다.

 

이번엔 삭제 코드를 삽입하겠습니다. 삭제 코드를 삽입하기 위해서 선행되야할것이 리스트의 afterupdate 코드삽입입니다.  (리스트의 AfterUpdate 이벤트에서 정보를 가져오는 방법은 리스트에서 바로 값을 가져오는 방법과 레코드셋을 이용해서 가져오는 방법 이렇게 두가지로 번갈아 가면서 설명을 드리고 있습니다. 필요에 따라 쓰임을 적절히 배분해서 사용해보시면 좋을 듯합니다.) 이번에는 다시 레코드셋을 이용하는 방법을 사용하겠습니다.

Private Sub 리스트_AfterUpdate()
ID = 리스트

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from 아이템 where ID = " & ID & "", dbOpenDynaset, dbSeeChanges)
With RS
아이템명 = !아이템명
색상명 = !색상명
공급업체명 = !공급자ID
공급단가 = !공급단가
판매단가 = !판매단가
모델코드 = !모델코드

End With
Set RS = Nothing

End Sub

아래와 같이 클릭을 하면 오브젝트에 데이터가 채워지는 코드가 완성됐습니다.

이제 삭제코드를 삽입하겠습니다.

Private Sub 버삭제_Click()
If Nz(ID, 0) = 0 Then
Exit Sub
MsgBox "id없음"
Else

CurrentDb.Execute "delete * from 아이템 where id = " & ID & "", dbSeeChanges
MsgBox "삭제"
End If
버초기화_Click

End Sub

아이템명 d를 삭제했습니다.

다 잘된것 같아 보이지만, 이제 수정해야 할 부분이 있습니다.

 

이 리스트는 원래 공급업체에 따라서 보여지는 리스트 입니다. 공급업체명이 업데이트 되면 리스트의 내용도 해당 공급업체와 연관된 아이템만 보여져야합니다.

 

폼에서 가나쪼고레트를 선택하고 공급업체명을 변경해보겠습니다. 우선 아래의 코드를 넣고 실행을 해보면

Private Sub 공급업체명_AfterUpdate()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null

공급단가 = Null
판매단가 = Null

리스트.Requery
End Sub

우리회사로 공급업체명이 변경됐지만, 리스트안에 있는 가나쪼꼬레트는 사라지지 않습니다.

 

코딩시 가장 손이 덜가는 방법은, 리스트는 전체 출력에 사용자가 아이템별 사용자를 다 기억해가면서 사용하는 방법이 있습니다만, 그렇게 되며  A회사에서 B회사의 제품을 발주하게되는 상황이 발생하게됩니다. 1인 업자라면 자기 실수라 관계없겠지만, 조금 더 편하게 사용하고자 하거나, 실수를 줄일려면 나눠 주시는것이 문서 작성시 오류를 줄일 수 있습니다.

 

튜토리얼이니 이 부분도 수정하는 경험을 하시면서 가보시는게 어떨까 싶습니다.

 

시간 순으로 리스트의 원하는 출력 내용을 구분해보겠습니다.

1. 폼이 열렸을때: 초기화되고, 전체 아이템 내용이 가나다 순으로 정렬이 되서 클릭해서 바로 볼수 있었으면 좋겠다.

왜? 추후 잘못기재된 내용을 바로 파악하기 좋기 때문이다. 전체리스트가 안나오면 모든 회사를 일일이 클릭해서 들어가야 하는 불편한 점이 발생한다. (초기화클릭이후 ID는, ID = null or 0 )이다.

 

2. 아이템을 클릭했을때: 오브젝트에 데이터가 뿌려지고, 리스트는 해당 회사의 제품으로 추려진다. (ID는 선택되어 있다.)

 

3. 공급업체명을 업데이트 했을때: 해당 업체의 아이템으로만 다시 출력한다. (ID는 선택되어 있다.)

 

리스트의 행 원본을 삭제 해주고 저장을 해줍니다.

공급업체명_AfterUpdate: 가장 하단에 리스트.rowsource 부분 수정

Private Sub 공급업체명_AfterUpdate()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null

공급단가 = Null
판매단가 = Null

리스트.RowSource = "select * from 아이템 where 공급자ID = " & 공급업체명 & ""
End Sub

리스트_AfterUpdate: 가장 하단에 리스트.rowsource 부분 수정

Private Sub 리스트_AfterUpdate()
ID = 리스트

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from 아이템 where ID = " & ID & "", dbOpenDynaset, dbSeeChanges)
With RS
아이템명 = !아이템명
색상명 = !색상명
공급업체명 = !공급자ID
공급단가 = !공급단가
판매단가 = !판매단가
모델코드 = !모델코드

End With
Set RS = Nothing

리스트.RowSource = "select * from 아이템 where 공급자ID = " & 공급업체명 & ""
End Sub

버초기화_Click: 가장 하단에 리스트.rowsource 부분 수정

Private Sub 버초기화_Click()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null
공급업체명 = Null
공급단가 = Null
판매단가 = Null

리스트.RowSource = "select * from 아이템"

End Sub

초기화 버튼 클릭후

리스트에서 가나쪼꼬레트 선택후

공급업체명에서 우리회사 선택후

이렇게 아이템 등록 폼은 마무리를 짓겠습니다.

 

아이템등록 코드 전문

Option Compare Database


Private Sub 공급업체명_AfterUpdate()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null

공급단가 = Null
판매단가 = Null

리스트.RowSource = "select * from 아이템 where 공급자ID = " & 공급업체명 & ""
End Sub

Private Sub 리스트_AfterUpdate()
ID = 리스트

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from 아이템 where ID = " & ID & "", dbOpenDynaset, dbSeeChanges)
With RS
아이템명 = !아이템명
색상명 = !색상명
공급업체명 = !공급자ID
공급단가 = !공급단가
판매단가 = !판매단가
모델코드 = !모델코드

End With
Set RS = Nothing

리스트.RowSource = "select * from 아이템 where 공급자ID = " & 공급업체명 & ""
End Sub

Private Sub 버삭제_Click()
If Nz(ID, 0) = 0 Then
Exit Sub
MsgBox "id없음"
Else

CurrentDb.Execute "delete * from 아이템 where id = " & ID & "", dbSeeChanges
MsgBox "삭제"
End If
버초기화_Click

End Sub

Private Sub 버저장_Click()
If Nz(ID, 0) = 0 Then
CurrentDb.Execute "insert into 아이템 (아이템명,색상명,모델코드,공급자ID,공급업체명,공급단가,판매단가) " & _
"values('" & 아이템명 & "','" & 색상명 & "','" & 모델코드 & "'," & 공급업체명 & ",'" & 공급업체명.Column(1) & "'," & 공급단가 & "," & 판매단가 & ")", dbSeeChanges


MsgBox "저장"
Else


CurrentDb.Execute "update set 아이템 아이템명='" & 아이템명 & "',색상명= '" & 색상명 & "',모델코드 = '" & 모델코드 & "', " & _
"공급자ID =" & 공급업체명 & ",공급업체명='" & 공급업체명.Column(1) & "',공급단가=" & 공급단가 & ",판매단가=" & 판매단가 & " where ID = " & ID & "", dbSeeChanges
MsgBox "수정"
End If

버초기화_Click
End Sub

Private Sub 버초기화_Click()
ID = Null
아이템명 = Null
색상명 = Null
모델코드 = Null
공급업체명 = Null
공급단가 = Null
판매단가 = Null

리스트.RowSource = "select * from 아이템"

End Sub

 

 

[이전 글]: 바코2://#21. 아이템, 재고 관련 (1. 가장 중요한 스토리라인, 테이블 구성)

[다음 글]: 바코2://#23. 아이템, 재고 관련 (3-1) feat. 주문 요약 분석

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