Você está na página 1de 2

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.

Você também pode gostar