CMC7 - Codigo no rodape do cheque

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

CMC7 - Codigo no rodape do cheque

Mensagem por ALEX BORELLI »

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
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Re: CMC7 - Codigo no rodape do cheque

Mensagem por frazato »

cheguei a usar a muito tempo atras para leitura de cheques, o leitor de cheque era via teclado.


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.
Responder