Bom dia Amigos.
Venho mais uma vez solicitar a ajuda de voces. Estou desenvolvendo o layout para custodia de cheques do Bando do Brasil para nao precisar usar o leitor de Cheques. Mas no layout tem o campo: CMC7, que e exatamente o que a leitora faz.
Pergunto: Alguem tem a funcao para montar o CMC7 atraves da informacoes do cheque? Atualmente e feito o cadastro de todas as informacoes dos cheques no controle.
Agradeco a ajuda de todos
CMC7 - Codigo no rodape do cheque
Moderador: Moderadores
-
ALEX BORELLI
- Usuário Nível 3

- Mensagens: 118
- Registrado em: 24 Jan 2008 22:21
- Localização: Concórdia - SC
Re: CMC7 - Codigo no rodape do cheque
cheguei a usar a muito tempo atras para leitura de cheques, o leitor de cheque era via teclado.
Frazato
---
Nota da Moderação (Maligno):
O presente tópico foi editado para a inserção das tags de indentação de código, a fim de facilitar a leitura. Por favor, no futuro, use essas yags. Ler o código alheio muitas vezes não é uma tarefa fácil. Sem a devida indentação, fica mais difícil ainda.
Frazato
Código: Selecionar todos
*----------------------------------------------------
FUNCTION ERRO_LEIT(campo_01,campo_02,campo_03) &&campo_04 (Se existir a
* posmarcacao do cheque,
* este campo corresponde
* ao valor
**===================================================
** Verificacao de caracteres nao numericos
**
** CAMPO 1
Local Erro := 0
DECLARE C01[8],C02[10],C03[12],C04[12]
DECLARE MAT_ERRO[20]
FOR I = 1 TO 8
C01[i] = SUBSTR(CAMPO_01,I,1)
IF ASC(C01[I]) < 48 .OR. ASC(C01[I]) > 57
ERRO = 10
RETURN (ERRO)
ENDIF
NEXT I
*-------------------------------------------------------
** CAMPO 2
**
FOR I = 1 TO 10
C02[I] = SUBSTR(CAMPO_02,I,1)
IF ASC(C02[I]) < 48 .OR. ASC(C02[I]) > 57
ERRO = 11
RETURN (ERRO)
ENDIF
NEXT I
*-------------------------------------------------------
** CAMPO 3
**
FOR I = 1 TO 12
C03[I] = SUBSTR(CAMPO_03,I,1)
IF ASC(C03[I]) < 48 .OR. ASC(C03[I]) > 57
ERRO = 12
RETURN (ERRO)
ENDIF
NEXT I
**------------------------------------------------------
**
** CAMPO 4 (OPCIONAL PARA LEITURA DE POS-MARCACAO
**
**FOR I = 1 TO 1
** C04[i] = SUBSTR(CAMPO_04,I,1)
** IF ASC(C04[I]) <> 32
** ERRO = 4
** RETURN (ERRO)
** ENDIF
**NEXT I
*------------------------------------------------------
**....................................................
**==================================================
**
** CALCULO DO DIGITO VERIFICADOR (MODULO 10)
**
** FORMULA - Comecando da direita para esquerda multiplicar cada digito ** pelos
** numeros 2 e 1 alternadamente.
**
** N1 N2 N3 N4 N5 N6 N7 N8
** x1 x2 x1 x2 x1 x2 x1 x2
** ---------------------------------------
** Nx Nx Nx Nx Nx Nx Nx Nx
**
** Somar o resultado por algarismo individualmente. Ex:
** 12 07 10 ---> 1 + 2 + 0 + 7 + 1 + 0 = 11 e nao 29
**
** dividir o numero por 10
** subtrair de 10 o resto da divisao. Ex:
** 11 / 10 = quociente = 1 resto = 1
** digito = 10 - resto => 9
**
**
*-------------------------------------------------------
** CALCULO DO DIGITO DO CAMPO 1 (OITAVA POSICAO)
** SERA COMPARADO COM CAMPO 3 (PRIMEIRA POSICAO) - ( DV1 )
S1 = 0
M1 = 0
FOR I = 7 TO 1 STEP -2
M1 = VAL(C01[I]) * 2
IF M1 > 9
S1 = S1 + (VAL(SUBSTR(STR(M1),9,1)) + VAL(SUBSTR(STR(M1),10,1)))
ELSE
S1 = S1 + M1
ENDIF
NEXT I
FOR I = 6 TO 2 STEP -2
S1 = S1 + VAL(C01[I])
NEXT I
IF VAL(SUBSTR(STR(S1),10,1)) <> 0
C1 = 10 - VAL(SUBSTR(STR(S1),10,1))
ELSE
C1 = 0
ENDIF
IF C1 <> VAL(SUBSTR(CAMPO_03,1,1))
ERRO = 14
RETURN (ERRO)
ENDIF
*---------------------------------------------
** CALCULO DO DIGITO DO CAMPO 2
** SERA COMPARADO COM CAMPO 1 (PRIMEIRA POSICAO) - ( DV2 )
S2 = 0
M2 = 0
FOR I = 10 TO 2 STEP -2
M2 = VAL(C02[I]) * 2
IF M2 > 9
S2 = S2 + (VAL(SUBSTR(STR(M2),9,1)) + VAL(SUBSTR(STR(M2),10,1)))
ELSE
S2 = S2 + M2
ENDIF
NEXT I
FOR I = 9 TO 1 STEP -2
S2 = S2 + VAL(C02[I])
NEXT I
IF VAL(SUBSTR(STR(S2),10,1)) <> 0
C2 = 10 - VAL(SUBSTR(STR(S2),10,1))
ELSE
C2 = 0
ENDIF
IF C2 <> VAL(SUBSTR(CAMPO_01,8,1))
ERRO := 15
RETURN (ERRO)
ENDIF
*----------------------------------------------------
** CALCULO DO DIGITO DO CAMPO 3
** SERA COMPARADO COM CAMPO 3 (DECIMA SEGUNDA POSICAO) - ( DV3 )
S3 = 0
M3 = 0
FOR I = 11 TO 3 STEP -2
M3 = VAL(C03[I]) * 2
IF M3 > 9
S3 = S3 + (VAL(SUBSTR(STR(M3),9,1)) + VAL(SUBSTR(STR(M3),10,1)))
ELSE
S3 = S3 + M3
ENDIF
NEXT I
FOR I = 10 TO 2 STEP -2
S3 = S3 + VAL(C03[I])
NEXT I
IF VAL(SUBSTR(STR(S3),10,1)) <> 0
C3 = 10 - VAL(SUBSTR(STR(S3),10,1))
ELSE
C3 = 0
ENDIF
IF C3 <> VAL(SUBSTR(CAMPO_03,12,1))
ERRO := 16
RETURN (ERRO)
ENDIF
RETURN ( Erro )
Function Erro_Tarj_Leitura(M_ERRO)
DECLARE MAT_ERRO[20]
MAT_ERRO[1] = [CAMPO 1 NAO NUMERICO.]
MAT_ERRO[2] = [CAMPO 2 NAO NUMERICO.]
MAT_ERRO[3] = [CAMPO 3 NAO NUMERICO.]
MAT_ERRO[4] = [CAMPO 4 NAO NUMERICO.]
MAT_ERRO[5] = [DIGITO C1 INVALIDO.]
MAT_ERRO[6] = [DIGITO C2 INVALIDO.]
MAT_ERRO[7] = [DIGITO C3 INVALIDO.]
MAT_ERRO[8] = [CHEQUE JA DIGITADO.]
MAT_ERRO[9] = [CHEQUE PERTENCE A COMPENSACAO < MENOR >.]
MAT_ERRO[10]= [CHEQUE PERTENCE A COMPENSACAO < MAIOR >.]
MAT_ERRO[11]= [CHEQUE PERTENCE A COMPENSACAO < INTERNA >.]
MAT_ERRO[12]= [BANCO NAO CADASTRADO NO SIRC.]
MAT_ERRO[13]= [FALTA VALOR DO < PISO >. CONSULTE O SUPERVISOR. !!!]
MAT_ERRO[14]= [NAO FOI POSSIVEL CAPTURAR ESTE CHEQUE.]
MAT_ERRO[15]= [COMPENSACAO ANTERIOR NAO ATUALIZADA.]
MAT_ERRO[16]= [BANCO NAO CONVENIADO.]
MAT_ERRO[17]= [CHEQUE NAO PERTENCE A COMP. < INTERNA >]
MAT_ERRO[18]= [TOTAL CAPTURADO <> DO TOTAL INFORMADO.]
MAT_ERRO[19]= [NR.DOC.DIGITADO <> DO NR.DOC.INFORMADO.]
MAT_ERRO[20]= [ERRO NAO DEFINIDO. CONSULTE O SUPERVISOR.]
IF M_ERRO <> 0
Alert(MAT_ERRO[M_ERRO])
Leitura := .F.
Else
Leitura := .T.
ENDIF
RETURN ( Leitura )---
Nota da Moderação (Maligno):
O presente tópico foi editado para a inserção das tags de indentação de código, a fim de facilitar a leitura. Por favor, no futuro, use essas yags. Ler o código alheio muitas vezes não é uma tarefa fácil. Sem a devida indentação, fica mais difícil ainda.