preenchimentro de cheque

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
fabiana correa
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 24 Jun 2008 11:29 am
Localização: Rio de janeiro

quetro preencher por extenso um cheque no valor de 3.844,84
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Fabiana, boa tarde.

Na verdade, teria que ser desenvolvida uma função que retorna esses valores dinamicamente.

Talvez alguém aqui no fórum tenha, pra lhe ajudar.

Caso contrário, tento procurar ou desenvolver algo e posto aqui pra vocês.
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

1 - Pegue o Cheque;
2 - Abra o talão;
3 - Selecione a Folha que deseja Usar;
4 - Preencha o Cheque por extenso como deseja;
Espero ter ajudado.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Puts! :roll:


achei essa aqui no banco da empresa, roda ela no seu banco e veja se serve:

Selecionar tudo

CREATE OR REPLACE FUNCTION extenso( pn_numero   NUMBER   ,
                  pc_moeda    VARCHAR2 ,
                  pc_moedas   VARCHAR2 ,
                  pc_centavo  VARCHAR2 ,
                  pc_centavos VARCHAR2 ) RETURN VARCHAR2 IS
/* Exemplo de chamada:
		x := extenso(111.25, 'Real', 'Reais', 'Centavo', 'Centavos');

*/

  vn_numero   NUMBER;
  você_moeda    VARCHAR2( 0300 );
  você_moedas   VARCHAR2( 0300 );
  você_centavo  VARCHAR2( 0300 );
  você_centavos VARCHAR2( 0300 );

  você_ret      VARCHAR2( 10000 );


  você_numero   VARCHAR2( 0300 );

  você_status1  VARCHAR2( 001 );
  você_status2  VARCHAR2( 001 );

  vn_i        NUMBER;
  você_extenso  VARCHAR2( 0300 );

  você_aux      VARCHAR2( 0300 );
  vn_dezena   NUMBER;
  vn_unidade  NUMBER;
  vn_unidade1 NUMBER;

  você_mil     VARCHAR2( 010 ) := 'Mil '    ;
  você_milhao  VARCHAR2( 010 ) := 'Milh?o ' ;
  você_milhoes VARCHAR2( 010 ) := 'Milh?es ';
  você_bilhao  VARCHAR2( 010 ) := 'Bilh?o ' ;
  você_bilhoes VARCHAR2( 010 ) := 'Bilh?es ';


  TYPE Taap IS TABLE OF VARCHAR2(0200) INDEX BY BINARY_INTEGER;
  aap   Taap;

  TYPE Tatexto IS TABLE OF VARCHAR2(5000) INDEX BY BINARY_INTEGER;
  atexto   Tatexto;

  TYPE Tvc_n IS TABLE OF VARCHAR2(05000) INDEX BY BINARY_INTEGER;
  você_n   Tvc_n;


BEGIN

  aap(1) := NULL;
  aap(2) := NULL;
  aap(3) := NULL;
  aap(4) := NULL;
  aap(5) := NULL;

  atexto(1) := NULL;
  atexto(2) := NULL;
  atexto(3) := NULL;
  atexto(4) := NULL;
  atexto(5) := NULL;

  você_n(01) := 'Um ';
  você_n(02) := 'Dois ';
  você_n(03) := 'Tres ';
  você_n(04) := 'Quatro ';
  você_n(05) := 'Cinco ';
  você_n(06) := 'Seis ';
  você_n(07) := 'Sete ';
  você_n(08) := 'Oito ';
  você_n(09) := 'Nove ';
  você_n(00) := ' ';
  você_n(10) := 'Dez ';
  você_n(11) := 'Onze ';
  você_n(12) := 'Doze ';
  você_n(13) := 'Treze ';
  você_n(14) := 'Quatorze ';
  você_n(15) := 'Quinze ';
  você_n(16) := 'Dezesseis ';
  você_n(17) := 'Dezessete ';
  você_n(18) := 'Dezoito ';
  você_n(19) := 'Dezenove ';
  você_n(20) := 'Vinte ';
  você_n(30) := 'Trinta ';
  você_n(40) := 'Quarenta ';
  você_n(50) := 'Cinquenta ';
  você_n(60) := 'Sessenta ';
  você_n(70) := 'Setenta ';
  você_n(80) := 'Oitenta ';
  você_n(90) := 'Noventa ';
  você_n(000) := ' ';
  você_n(100) := 'Cento ';
  você_n(200) := 'Duzentos ';
  você_n(300) := 'Trezentos ';
  você_n(400) := 'Quatrocentos ';
  você_n(500) := 'Quinhentos ';
  você_n(600) := 'Seiscentos ';
  você_n(700) := 'Setecentos ';
  você_n(800) := 'Oitocentos ';
  você_n(900) := 'Novecentos ';

  vn_numero   := pn_numero  ;
  você_moeda    := pc_moeda   ;
  você_moedas   := pc_moedas  ;
  você_centavo  := pc_centavo ;
  você_centavos := pc_centavos;

  IF você_moeda IS NULL THEN
    você_moeda := 'real ';

  ELSIF pc_moeda = '#' THEN
  	você_moeda := NULL;

  ELSE
    IF SUBSTR( você_moeda,NVL( LENGTH( você_moeda ),0 ),1 ) <> ' ' THEN
      você_moeda := você_moeda||' ';
    END IF;
  END IF;

  IF você_moedas IS NULL THEN
    você_moedas := 'reais ';

  ELSIF pc_moedas = '#' THEN
  	você_moedas := NULL;

  ELSE
    IF SUBSTR( você_moedas,NVL( LENGTH( você_moedas ),0 ),1 ) <> ' ' THEN
      você_moedas := você_moedas||' ';
    END IF;
  END IF;

  IF você_centavo IS NULL THEN
    você_centavo := 'centavo ';

  ELSIF pc_centavo = '#' THEN
  	você_centavo := NULL;

  ELSE
    IF SUBSTR( você_centavo,NVL( LENGTH( você_centavo ),0 ),1 ) <> ' ' THEN
      você_centavo := você_centavo||' ';
    END IF;
  END IF;

  IF você_centavos IS NULL THEN
    você_centavos := 'centavos ';

  ELSIF pc_centavos = '#' THEN
    você_centavos := NULL;

  ELSE
    IF SUBSTR( você_centavos,NVL( LENGTH( você_centavos ),0 ),1 ) <> ' ' THEN
      você_centavos := você_centavos||' ';
    END IF;
  END IF;

  IF vn_numero IS NULL OR vn_numero = 0 THEN
    você_ret := 'Zero '||você_moeda;
    RETURN LTRIM( RTRIM( você_ret ) );
  END IF;

  IF vn_numero < 0 THEN
    vn_numero := vn_numero * ( -1 );
  END IF;

  você_numero := LPAD( TO_CHAR( TRUNC( vn_numero ) ),13,'0' );
  vn_i := 1;
  aap(1) := SUBSTR( você_numero, 2,3 );
  aap(2) := SUBSTR( você_numero, 5,3 );
  aap(3) := SUBSTR( você_numero, 8,3 );
  aap(4) := SUBSTR( você_numero,11,3 );
  aap(5) := LPAD( TO_CHAR( ( vn_numero-TRUNC( vn_numero ) )*100 ),2,'0' );

  atexto(1) := '';
  atexto(2) := '';
  atexto(3) := '';
  atexto(4) := '';
  atexto(5) := '';

  IF TO_NUMBER( aap(1) ) = 0 THEN
    você_status1 := ' ';
  ELSIF TO_NUMBER( aap(1) ) = 1 THEN
    você_status1 := '1';
  ELSE
    você_status1 := '2';
  END IF;

  IF TO_NUMBER( aap(2) ) = 0 THEN
    você_status2 := ' ';
  ELSIF TO_NUMBER( aap(2) ) = 1 THEN
    você_status2 := '1';
  ELSE
    você_status2 := '2';
  END IF;

  LOOP
    EXIT WHEN vn_i > 5;
    LOOP
      EXIT WHEN vn_i > 5;
      IF aap(vn_i) = '000' THEN
        você_extenso := '';
      ELSE
        você_extenso := TO_CHAR( TO_NUMBER( aap(vn_i) ));
      END IF;

      IF NVL( LENGTH( você_extenso ),0 ) = 3 THEN
        IF você_extenso  = '100' THEN
          atexto(vn_i) := atexto(vn_i)||'cem ';
          vn_i := vn_i + 1;
          EXIT;
        END IF;
        IF SUBSTR( você_extenso,NVL( LENGTH( você_extenso ),0 )-2+1,2 ) = '00' THEN
          atexto(vn_i) := atexto(vn_i)||você_n(SUBSTR( você_extenso,1,1 )||'00');
          vn_i := vn_i + 1;
          EXIT;
        END IF;
        você_aux := você_n(TO_NUMBER(SUBSTR( você_extenso,1,1 )||'00'));
        atexto(vn_i) := você_aux||'e ';
        vn_dezena := TO_NUMBER( SUBSTR( você_extenso,NVL( LENGTH( você_extenso ),0 )-2+1,2 ) );
        IF vn_dezena < 20 THEN
          você_aux := você_n(TO_NUMBER(SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-2+1,2 )));
          atexto(vn_i) := atexto(vn_i)||você_aux;
          vn_i := vn_i + 1;
          EXIT;
        ELSE
          você_aux := você_n(TO_NUMBER(SUBSTR( você_extenso,2,1 )||'0'));
          atexto(vn_i) := atexto(vn_i)||você_aux;
          você_aux := '0'||SUBSTR( você_extenso,NVL( LENGTH( você_extenso ),0 )-1+1,1 );
          vn_unidade := TO_NUMBER( SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-1+1,1 ) );
          IF vn_unidade > 0 AND TO_NUMBER( você_extenso ) > 10 THEN
            atexto(vn_i) := atexto(vn_i)||'e ';
          END IF;
          IF você_aux = '00' THEN
            atexto(vn_i) := atexto(vn_i)||' ';
          ELSE
            atexto(vn_i) := atexto(vn_i)||você_n( TO_NUMBER(você_aux) );
          END IF;
        END IF;
      ELSIF NVL( LENGTH( você_extenso ),0 ) = 2 THEN
        vn_dezena := TO_NUMBER( SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-2+1,2 ) );
        IF vn_dezena < 20 THEN
          você_aux := você_n(SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-2+1,2 ));
          atexto(vn_i) := atexto(vn_i)||você_aux;
          vn_i := vn_i + 1;
          EXIT;
        ELSE
          você_aux := você_n(SUBSTR( você_extenso,1,1 )||'0');
          atexto(vn_i) := atexto(vn_i)||você_aux;
          você_aux := '0'||SUBSTR( você_extenso,NVL( LENGTH( você_extenso ),0 )-1+1,1 );
          vn_unidade1 := TO_NUMBER( SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-1+1,1 ) );
          IF vn_unidade1 > 0 THEN
            atexto(vn_i) := atexto(vn_i)||'e ';
          END IF;
          IF você_aux = '00' THEN
            atexto(vn_i) := atexto(vn_i)||' ';
          ELSE
            atexto(vn_i) := atexto(vn_i)||você_n( você_aux );
          END IF;
        END IF;
      ELSIF NVL( LENGTH( você_extenso ),0 ) = 1 THEN
        você_aux := '0'||SUBSTR( você_extenso,NVL(LENGTH( você_extenso ), 0)-1+1,1 );
        IF você_aux = '00' THEN
          atexto(vn_i) := atexto(vn_i)||' ';
        ELSE
          atexto(vn_i) := atexto(vn_i)||você_n( você_aux );
        END IF;
      ELSE
        atexto(vn_i) := ' ';
      END IF;
      vn_i := vn_i + 1;
    END LOOP;
  END LOOP;


	IF TO_NUMBER( aap(1)||aap(2)||aap(3)||aap(4) )<> 0 THEN
		IF NVL(aap(1), 0) > 0 THEN
			você_ret := atexto(1);
			IF TO_NUMBER(aap(1)) > 1 THEN
				você_ret := você_ret||RTRIM(você_bilhoes);
			ELSE
				você_ret := você_ret||RTRIM(você_bilhao);
			END IF;
			IF NVL(aap(2), 0) > 0 THEN
				você_ret := você_ret||', ';
			ELSE
				você_ret := você_ret||' ';
			END IF;
		END IF;

		IF NVL(aap(2), 0) > 0 THEN
			você_ret := você_ret||atexto(2);
			IF TO_NUMBER(aap(2)) > 1 THEN
				você_ret := você_ret||RTRIM(você_milhoes);
			ELSE
				você_ret := você_ret||RTRIM(você_milhao);
			END IF;
			IF NVL(aap(3), 0) > 0 THEN
				você_ret := você_ret||', ';
			ELSE
				você_ret := você_ret||' ';
			END IF;
		END IF;

		IF NOT NVL(aap(3), 0) > 0 AND NOT NVL(aap(4), 0) > 0 THEN
			você_ret := você_ret||' de '||você_moedas;
		END IF;

		IF NVL(aap(3), 0) > 0 THEN
			você_ret := você_ret||atexto(3)||você_mil;

			IF NOT NVL(aap(4), 0) > 0 THEN
				você_ret := você_ret||você_moedas;
			END IF;
		END IF;

		IF NVL(aap(4), 0) > 0 THEN
			IF você_ret IS NOT NULL THEN
					--você_ret := você_ret||'e ';
			--=============
			  IF SUBSTR(NVL(aap(4), 0),1,1) <> '0' THEN
		   			você_ret := você_ret||', ';
			  ELSE
			    você_ret := você_ret||'e ';
			  END IF;
			--=============

			END IF;

			você_ret := você_ret||atexto(4);
			IF TO_NUMBER(aap(4)) > 1 OR NVL(aap(3), 0) > 0 OR NVL(aap(2), 0) > 0 OR NVL(aap(1), 0) > 0 THEN
				você_ret := você_ret||você_moedas;
			ELSE
				você_ret := você_ret||você_moeda;
			END IF;
		END IF;


		IF NVL(aap(5), 0) > 0 THEN
			IF você_ret IS NOT NULL THEN
				você_ret := você_ret||'e '||atexto(5);
			ELSE
				você_ret := você_ret||atexto(5);
			END IF;

			IF TO_NUMBER(aap(5)) > 1 THEN
				você_ret := você_ret||você_centavos;
			ELSE
				você_ret := você_ret||você_centavo;
			END IF;
		END IF;


	ELSIF NVL(aap(5), 0) > 0 THEN
		IF você_ret IS NOT NULL THEN
			você_ret := você_ret||' e '||atexto(5);
		ELSE
			você_ret := você_ret||' '||atexto(5);
		END IF;

		IF TO_NUMBER(aap(5)) > 1 THEN
			você_ret := você_ret||você_centavos;
		ELSE
			você_ret := você_ret||você_centavo;
		END IF;
	END IF;

  RETURN LTRIM( RTRIM( você_ret ) );

END;
/

no teu caso, pra funcionar eu tive que passar o valor dessa forma: 3844.84 (sem a vírgula)

Selecionar tudo

SELECT Extenso(3844.84, 'Real', 'Reais', 'Centavo', 'Centavos') FROM dual;

Resultado:

Tres Mil , Oitocentos e Quarenta e Quatro Reais e Oitenta e Quatro Centavos
Responder
  • Informação