Página 1 de 1

ECF: usando a Daruma32.DLL

Enviado: 09 Mar 2010 15:59
por MARINI
Boa tarde,

Para cadastrar um alíquota via comando no manual da Daruma explica o seguinte:

Método: Daruma_FI_ProgramaAliquota [Índice 302]

Programa alíquota tributária na Impressora Fiscal.
· Parâmetros do Método: (2 Parâmetros)
1. Alíquota: String com o valor da alíquota a ser programada.
2. Vínculo: INTEIRO com o valor 0 (zero) para vincular a alíquota ao ICMS e 1 (um ) para vincular ao ISS.

Este parâmetro 2 tem que um INTEIRO. Estudando os exemplos abaixo:
· Exemplo em Visual Basic 6.0:
Dim Str_Valor_da_Aliquota As String
Dim Int_Tipo_da_Aliquota As Integer
Str_Valor_da_Aliquota = "1800"
Int_Tipo_da_Aliquota = "0"
Int_Tipo_da_Aliquota = CInt(TX_Tipo_da_Aliquota.Text)
Int_Retorno = Daruma_FI_ProgramaAliquota(Str_Valor_da_Aliquota, _
Int_Tipo_da_Aliquota)

· Exemplo em Delphi 7.0:
var
Str_Valor_da_Aliquota: String;
Int_Tipo_da_Aliquota: Integer;
begin
Str_Valor_da_Aliquota := '1800';
Int_Tipo_da_Aliquota :='0'
Int_Tipo_da_Aliquota := StrToInt(Trim(Tipo_da_Aliquota.Text));
Int_Retorno := Daruma_FI_ProgramaAliquota( pchar( Str_Valor_da_Aliquota ), Int_Tipo_da_Aliquota );
cheguei a conclusão que isto seria o mesmo que estivesse dizendo ALLTRIM(1) -- isto não é possivel --, por exemplo, ou
seja o tamanho de caracteres do número teria que ser igual a 1 e não 10 como podemos conferir usando a condição
INT(STR(1))

Analisando os exemplos acima temos em Visual a função CInt e em Delphi StrToInt para fazer esta conversão.
Não encontrei nada em xHarbor que faça isto.
Alguém saberia me dizer qual a solução?

Re: ECF: usando a Daruma32.DLL

Enviado: 09 Mar 2010 16:10
por DLZ
A função StrtoInt do Delphi equivale, mais ou menos, a função Val no Clipper ou xharbour.
Portanto, vc pode usar val("0") ou simplesmente passar 0(zero) no segundo parametro da função

Re: ECF: usando a Daruma32.DLL

Enviado: 09 Mar 2010 16:13
por DLZ
esqueci de colocar o exemplo eheheh
ficaria assim:

Str_Valor_da_Aliquota := "1800"
Int_Tipo_da_Aliquota :=0
Int_Retorno := Daruma_FI_ProgramaAliquota( Str_Valor_da_Aliquota , Int_Tipo_da_Aliquota )

Re: ECF: usando a Daruma32.DLL

Enviado: 09 Mar 2010 16:34
por MARINI
Obrigado pela resposta.
Se passar 0, "0" ou VAL("0") cadastra sempre um ISS;
Se passar 1, "1" ou VAL("1") cadastra sempre um ISS;
Ou seja, qualquer parâmetro passado sempre cadastra um ISS e nunca
um ICMS,
Então deduzo que tem alguma coisa de errado justamente
nesta condição de ser INTEIRO e não NUMÉRICO, que consta
no manual da DARUMA.
Se fizer o teste @ 0,0 say LEN(STR(VAL("0"))) retorna 1
e LEN(STR(0))=10. Então se passar VAL("0"), deveria
funcionar:


Str_Valor_da_Aliquota := "1800"
Int_Tipo_da_Aliquota := VAL("0")
Int_Retorno := Daruma_FI_ProgramaAliquota( Str_Valor_da_Aliquota , Int_Tipo_da_Aliquota )

Mas não funciona.

Grato

Re: ECF: usando a Daruma32.DLL

Enviado: 09 Mar 2010 18:21
por alaminojunior
Confirmando a orientação do Dércio:

O comando que uso:

Código: Selecionar todos

ret:=  dllcall(h1,32,"Daruma_FI_ProgramaAliquota","0215", 0)

Re: ECF: usando a Daruma32.DLL

Enviado: 10 Mar 2010 08:27
por MARINI
Bom dia,
Obrigado pelas respostas.
Descobri onde estava o problema.
Tinha feito uma função com o DllCall e estava passando os
parâmentos por referência @...
Estava tudo funcionando menos neste caso que o valor é numérico.
Tirei o @ dos parâmetros e ficou tudo certo.
Abraços.