드로우홀릭 더베이직
안녕하십니까? 바코드출력관련 문의드립니다.
현재 10자리미만은 프린팅이 안되게 사용중이고, 중복프린팅 방지 코딩을 추가하고 싶은데 어디에, 어떻게 추가해야할지 몰라서 문의드립니다.
*10자리미만 운송장번호는 출력방지+ 한번출력된 운송장번호는 오류메시지 표시후 출력방지 를 하고싶습니다.
안녕하세요?
프린팅되면 테이블 출력여부를 업데이트하도록 수정했는데 잘 안됩니다.
1. 최초 출력시 업데이트가 안되고 다음출력시 업데이트됨
2. if 문으로 중복출력 방지조건을 해놨는데 작동이 안됨
어느부분을 수정해야할지 검토해주시면 감사하겠습니다,
지금 코드가 다음과 같이 되어 있습니다.
-----------------------------
Private Sub Text0_AfterUpdate()
Dim chklen As Integer
On Error Resume Next
chklen = Len(운송장번호)
If chklen < 10 Then
MsgBox "운송장번호는 12자리 입니다!!!", vbCritical, "오류"
Text0.SetFocus
Else
DoCmd.OpenReport "바코드출력 report", acViewNormal, , "[운송장번호]=[Forms]![바코드재출력]![text0]"
CurrentDb.Execute "update 바코드 set 출력여부 = true"
If 출력여부 = True Then
MsgBox "이미 출력된 운송장번호입니다!!!", vbCritical, "오류"
Text0.SetFocus
End If
End If
DoCmd.GoToRecord , , acNext
End Sub
-----------------------------
폼은 입력폼이고요.
그러니까 입력하면 실제 테이블에 저장이 되어 버립니다.
그리고 위 코드에 보면, 일단 출력한 다음에 '출력여부'를 체크합니다.
그러니까 '최초 출력시 업데이트가 안되고..' 이런 말씀을 하시는 것이죠.
이 문제를 해결하려면, 다음과 같은 작업을 하셔야 합니다.
1. 폼을 '언바운드 폼'으로 해야 합니다. 폼에 입력한 값이, 바로 DB로 입력되어서는 안됩니다.
2. 위 코드는 '출력' 한 다음에 출력여부를 체크합니다. 출력하기 전에 출력여부를 체크해야 하죠.
3. 전체적인 로직은 다음과 같습니다.
1) 언바운드 폼에서, 입력받은 운송장번호가 이미 출력된 적이 있는지 확인합니다.
2) 출력된 적이 있으면 오류 메시지를 표시하고 종료합니다.
3) 출력된 적이 없으면, 테이블에 데이터를 추가하고 출력합니다.
핵심은 '언바운드 폼' 입니다. 관련해서 공부해 보시고, 또 궁금한 점이 있으면 질문해 보십시오.
질문이, 게시판에서 답변드리기는 쉽지 않은 수준이네요.
죄송합니다만, 개념 정도만 말씀드리겠습니다.
1. 일단 화면 자체는 아주 간단합니다. 첨부한 파일에 보면 '바코드재출력' 이라는 화면이 있네요.
2. '중복프린팅 방지'의 정의: 한 번 출력된 운송장번호는 오류메시지 표시 후 출력방지한다.
3. 일단 컴퓨터가 '한 번 출력된 운송장'을 인식해야 겠습니다. 이것은 '바코드' 테이블에 '출력여부' 필드를 두고, 출력이 되면 '출력여부' 필드에 'Yes' 값을 기록하게 해 두면 됩니다.
4. '바코드재출력' 폼에서, 사용자가 '운송장번호'를 입력하면, 다음 작업을 수행하게 하면 됩니다.
'바코드' 테이블의 '출력여부' 필드가 'Yes'라면 --> 사용자에게 메시지 표시
'바코드' 테이블의 '출력여부' 필드가 'No'라면 --> 바코드 출력, 그리고 '바코드' 테이블에 '출력여부' 필드값을 'Yes'로 업데이트
그런데, 바코드가 실제로 출력이 되었는지의 문제가 있을 수 있겠죠.
출력 명령을 내렸는데, 프린터에서 종이가 끼어서 출력이 되지 않았던지 하는 문제 말씀입니다.
(그 외에도 여러 문제가 있을 수 있을 겁니다.)
이럴 때에는 '출력여부'가 'Yes'라고 하더라도, 강제로 출력할 수 있도록 해야겠죠.
예를 들어, 두 번 연속 같은 운송장번호를 입력하면, 첫 번째는 출력이 안되게 하고, 두 번째는 사용자에게 물어보고 출력하게 한다던지 하는 것 말씀입니다.
혹은 '바코드재출력' 화면에 '중복체크 안함' 이라는 체크박스를 하나 두고, 거기에 체크한 다음 출력할 때에는 '중복체크'를 하지 않고 출력이 되게 한다던지 하는 기능으로 만들 수도 있겠구요.
대략 개념은 설명드렸으니, 일단 고민해 보시고..
하실 수 있는 부분은 하시고, 좀 더 적은 범위에서 질문해 주시면 또 답변 드리겠습니다.