Categorias

Verificação de Inscrição Estadual

fornecido por Amauri Leme da Silva.

Verificação de Inscrição Estadual

FUNCTION ZILLO_CALCULO_INSC_ESTADUAL.
*"----------------------------------------------------------------------
*"*"Interface local:
*"       IMPORTING
*"             VALUE(NUMBER_PART) TYPE  SY-REPID
*"             VALUE(ESTADO) TYPE  SY-REPID
*"             VALUE(VERIFICA) TYPE  C DEFAULT 'S'
*"       EXPORTING
*"             VALUE(CHECK_DIGIT) TYPE  SY-REPID
*"             VALUE(MSG) TYPE  SY-MSGV1
*"             VALUE(SAIDA) TYPE  SY-REPID
*"       EXCEPTIONS
*"              NAO_NUMERICO
*"----------------------------------------------------------------------
  PERFORM LE_ZILLO_CALC_DIG CHANGING ESTADO
                                     CHECK_DIGIT
                                     REC.
  CHECK NOT REC IS INITIAL.            " nao achou estado
  CLEAR : CHECK_DIGIT_AUX .
*** tira os digitos , trata estados
  WORK_STRING = NUMBER_PART.
  PERFORM ACERTA_ENTRADA CHANGING  WORK_STRING MSG VERIFICA .
****
  ENTRADA = WORK_STRING . " torna NUM , USADO EM COMPARACOES DE >  <
*  number_part = work_string.
***
  IF REC-ESTADO NE 'MG'.               " Minas eh diferente
    PERFORM LOOP_01.
  ENDIF.
***
  CASE REC-ESTADO.
    WHEN 'PE' OR 'RO'.
      PERFORM CALC_PE.
    WHEN 'PI' OR 'RS' OR 'RJ' OR 'SC' OR 'SE' OR 'TO' OR 'PB' OR 'ES'
              OR 'MA' OR 'MT' OR 'MS' OR 'PA' OR 'CE' OR 'AM'.
      PERFORM CALC_PI.
    WHEN 'RN' OR 'AL'.
      PERFORM CALC_RN USING ESTADO.
    WHEN 'RR'.
      PERFORM CALC_RR.
    WHEN 'GO'.
      PERFORM CALC_GO.
    WHEN 'AP'.
      PERFORM CALC_AP.
    WHEN 'DF' OR 'PR' OR 'AC'.              " DOIS DIGITOS
      PERFORM CALC_PI.
      MODU_AUX = MODU.
      CHECK_DIGIT_AUX = MODU_AUX.
      CONCATENATE WORK_STRING MODU_AUX INTO WORK_STRING.
      PERFORM LOOP_01.
      PERFORM CALC_PI.
    WHEN 'BA'.                         " DOIS DIGITOS
      CASE WORK_STRING(1).
        WHEN '6' OR '7' OR '9'.
          PERFORM CALC_PI.
          MODU_AUX = MODU.
          CHECK_DIGIT_AUX = MODU_AUX.
          CONCATENATE WORK_STRING MODU_AUX INTO WORK_STRING.
          PERFORM LOOP_01.
          PERFORM CALC_PI.
        WHEN OTHERS.
          PERFORM CALC_BA.
          MODU_AUX = MODU.
          CHECK_DIGIT_AUX = MODU_AUX.
          CONCATENATE WORK_STRING MODU_AUX INTO WORK_STRING.
          PERFORM LOOP_01.
          PERFORM CALC_BA.
      ENDCASE.
    WHEN 'MG'.
      PERFORM CALC_MG. " CALCULATE_CHECK_DIGIT_MOD10 , 1° digito
      CONCATENATE WORK_STRING CHECK_DIGIT_AUX INTO WORK_STRING.
      ESTADO = 'XM'.                   " Pesos Extra para Minas
      PERFORM LE_ZILLO_CALC_DIG CHANGING ESTADO CHECK_DIGIT REC.
      CHECK NOT REC IS INITIAL.
      PERFORM LOOP_01.
      PERFORM CALC_PI.                 " 2° digito
    WHEN 'SP'.
      PERFORM CALC_RN USING ESTADO.
      IF NUMBER_PART(1) NE 'P'.        " NOT RURAL
        MODU_AUX = MODU.
        CHECK_DIGIT_AUX = MODU_AUX.
        CONCATENATE NUMBER_PART(8) MODU_AUX  NUMBER_PART+9(2)
                                             INTO WORK_STRING.
        ESTADO = 'XS'.                 " Pesos Extra para SP
        PERFORM LE_ZILLO_CALC_DIG CHANGING ESTADO CHECK_DIGIT REC.
        CHECK NOT REC IS INITIAL.
        PERFORM LOOP_01.
        PERFORM CALC_RN USING ESTADO.
      ENDIF.
  ENDCASE.
  MODU_AUX = MODU.
  CHECK_DIGIT = MODU_AUX.
  IF   REC-ESTADO EQ 'RO'.             " 3 primeiros digitos
    CONCATENATE NUMBER_PART(3) WORK_STRING INTO WORK_STRING.
  ENDIF.
  CONCATENATE WORK_STRING CHECK_DIGIT INTO SAIDA.
  IF NUMBER_PART(1) = 'P'.  " produtor rural sp
    CONCATENATE NUMBER_PART(1) SAIDA NUMBER_PART+10 INTO  SAIDA.
  ENDIF.
  CASE  REC-ESTADO .
    WHEN 'BA'.                         " dois digitos
      CONCATENATE CHECK_DIGIT CHECK_DIGIT_AUX INTO CHECK_DIGIT.
      WORK_STRING = WORK_STRING(REC-CONTROLE).
      CONCATENATE WORK_STRING CHECK_DIGIT INTO SAIDA.
    WHEN 'MG'.                         " dois digitos , invertido
      CONCATENATE CHECK_DIGIT_AUX  CHECK_DIGIT INTO CHECK_DIGIT.
    WHEN OTHERS.                       " soh um digito
      CONCATENATE CHECK_DIGIT_AUX CHECK_DIGIT INTO CHECK_DIGIT.
  ENDCASE.

ENDFUNCTION.