You are on page 1of 3

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.

You might also like