BEMAFI.PRG

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Sergio Cabral
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 18 Set 2004 18:51
Localização: São José dos Campos

BEMAFI.PRG

Mensagem por Sergio Cabral »

Meu programa é em Clipper 5.01.
Compilei o meu programa junto com o BEMAFI.PRG para poder definir onde eu quero que seja criado o arquivo BEMAFI.CMD (no caso c:\DOS),
Na rotina BEMAFI.PRG tem o comando FILESIZE que não tem no Clipper 5.01, então eu peguei uma rotina colocada neste forum mas ao executar o programa onde é utlizado o arquivo BEMAFI.PRG, aparece a seguinte mensagem : "Programa muito grande para ser alocado na memória"

Alguém sabe como resolver isto???

Abaixo a rotina do BEMAFI.PRG com a modificação:

// BEMATECH

#include "Fileio.ch"
#include "fiscal.ch"

///////
FUNCTION fopen_bema
///////
Parameters ponteiro, modo

if !file(ponteiro+"b")
nHandle = fOpen("BEMAFI.INI", FO_READWRITE)
aux = -1 //aux de retorno

if FERROR() = 0 //Confirma se abriu
nTam = FSeek(nHandle, 0, FS_END) //tamanho do arquivo para verificar se existe
if nTam > 0
FileTop(nHandle)

FSeek ( nHandle, 19, FS_SET )

FWrite( nHandle, if(UPPER(ponteiro) = "COM1", "0", if( UPPER(ponteiro) = "COM2", "1", if( UPPER(ponteiro) = "COM3", "2", "3"))), 1)

if FERROR() = 0
aux = 6
else
aux = -1
endif
endif
fvar(ponteiro+"b", " ", "E")
endif
Fclose(nHandle)
else
aux = 6
endIf
return aux

///////
FUNCTION FWrite_bema
///////
PARAMETERS ponteiro, comando, qtde

Delete File( "c:\dos\BEMAFI.CMD" )
Delete File( "STATUS.TXT" )
Delete File( "RETORNO.TXT" )

if len(comando) = qtde
nHandle = FCreate( "c:\dos\BEMAFI.CMD" )
FWrite( nHandle, @Comando, Len( Comando ) )
if FERROR() = 0
FClose( nHandle )
!BEMAFI.EXE
situacao = len(comando) //retorno padrao do fwrite
else
situacao = 0
endif
endif

Return Situacao


///////
FUNCTION Fread_bema
///////
PARAMETERS ponteiro, retorno, qtde

LOCAL nStatus
LOCAL nRetorno := " "
sRetorno = " "
if File("STATUS.TXT")

nStatus = Fopen("STATUS.TXT")
nTamStatus = FSeek( nStatus, 0, FS_END )
Fclose(nStatus)
nStatus = Fopen("STATUS.TXT")
sStatus = " "
posStatus = 0
aux_Status = " "
vezes = val(Fvar("VEZES","1","L"))
if nTamStatus > 0
for posStatus = 1 to nTamStatus
FRead( nStatus, @aux_status, 1)
sStatus = sStatus + aux_status
next
fclose(nStatus)
if vezes = 1 //escreve o retorno de acordo com n-vezes
sRetorno = chr(val(Left(sStatus,4)))
else
if vezes = 2
sRetorno = chr(val(substr(sStatus, 5,3)))
else
if vezes = 3
sRetorno = chr(val(Right(sStatus, 3)))
Delete File ("VEZES")
Delete File ("STATUS.TXT")
endIf
endIf
endIf
if !(vezes >= 3)
vezes++
Fvar("VEZES", str(vezes), "E")
Fclose(nStatus)
endif
endif

else

if FILE("RETORNO.TXT")

nHandle = fOpen("RETORNO.TXT")
nTamRetorno = FSeek( nHandle, 0, FS_END )
fclose( nHandle )

indice = fvar( "INDICE", "1", "L" )

nHandle = FOpen("RETORNO.TXT")

PosRetorno = 0

for PosRetorno = 1 to val(indice)
FRead(nHandle, @nRetorno, 1)
next
fclose(nHandle)

indice = STR(val(indice)+1)

fvar("INDICE", LTRIM(indice), "E")

if val(LTRIM(indice)) > nTamRetorno
delete file ("RETORNO.TXT")
delete file ("INDICE")
endIf
else
sRetorno = " "
endIf

if (nRetorno != " ")
sretorno := nRetorno
endIf

endif
retorno = sretorno
return if (sretorno = " ",0, 1)

////////////////////
FUNCTION fvar
////////////////////
PARAMETERS variavel, valor, ler
aux = " "
aux1 = " "
ContVar = 0
if FILE ( variavel ) .AND. UPPER(Ler) = "L"
nHandle = FOpen(variavel)
nTam := FSEEK(nHandle, 0, FS_END)
* nTam = FileSize(nHandle) // era este o comando usado originalmente
FClose(nHandle)
nHandle = FOpen(variavel)
for ContVar = 1 to nTam
FRead(nHandle, @aux1, 1)
aux := aux + aux1
next
else
nHandle = FCreate( Variavel )
Fwrite(nHandle, ltrim(valor), len(valor))
aux = ltrim(valor)
endif
Fclose(nHandle)

RETURN AUX
Sou programador em Clipper 5.01 a 15 anos e procuro melhorar meus conhecimentos. Este site me parece muito bom e poderemos nos ajudar.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

BEMAFI

Mensagem por Pablo César »

Caro Sergio,

Como eu disse, não tenho experiência com essa parte fiscal. Tenho impremido nessas impressoras a doidado. Não analizei o teu fonte aqui postado. Mas acho que você deveria passar JÁ à versão do CLIPPER 5.2. Que eu saiba a versão 5.1 tem alguns BUGS. Não use mais essa versão. Você não terá nada que fazer nos teus fontes para mudar a versão. Só instalar o 5.2e ou 5.3, eu prefiro 5.2 (por enquanto). A outra questão que diz "Programa muito grande para ser alocado na memória", deve ser porque não gerou o executável adequadamente. Tente com CLIPPER 5.2.

E se tem algum erro, poste tuas dúvidas.

Boa sorte, :)Pos
support sistemas
Usuário Nível 2
Usuário Nível 2
Mensagens: 73
Registrado em: 22 Set 2005 23:43
Localização: Londrina

Mensagem por support sistemas »

Sergio Cabral vc conseguiu resolver seu problema ???


Se sim informe como
Alessandro
Usuário Nível 3
Usuário Nível 3
Mensagens: 141
Registrado em: 07 Jul 2004 09:39
Localização: Santo Antonio da Platina-PR

Mensagem por Alessandro »

Sérgio

Passei pelo mesmo problema, e realmente a migração para o 5.2 é inevitável, se for usar do bemafi.exe.
support sistemas
Usuário Nível 2
Usuário Nível 2
Mensagens: 73
Registrado em: 22 Set 2005 23:43
Localização: Londrina

Mensagem por support sistemas »

ja passei para clipper 52 e continua o mesmo problema


funcao FILESIZE nao exite
Alessandro
Usuário Nível 3
Usuário Nível 3
Mensagens: 141
Registrado em: 07 Jul 2004 09:39
Localização: Santo Antonio da Platina-PR

Mensagem por Alessandro »

Verifique se não está faltando na compilação a bemafi.lib, blxclp52.lib, e se está carregando o fiscal.ch.

No meu funcionou corretamente, qq problema poste o erro, o código, para podermos ajudar melhor.

OK
Genildo
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 05 Out 2006 10:19
Localização: Nilopolis-RJ

Mensagem por Genildo »

quando eu descobrir como se usa um ALIAS eu posso dar opinião rsss
P4-256 mem ... q merreca rss
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinhos:

Sergio Cabral:

Coloque o seguinte codigo no inicio de seu arquivo BEMAFI.PRG:

Código: Selecionar todos

#define FileTop(nHandle) (FSEEK(nHandle, 0, 1))
#define FileSize(nHandle, tam) ( tam := FSEEK(nHandle, 0, FS_END) ) //Escreve em tam o tamanho do arquivo
#define FilePos (nHandle, pos) ( pos := FSEEK(nHandle, 0, 1)      ) //Escreve em pos a posicao atual
#define FileaPos(nHandle, pos) ( FSEEK(nHandle, pos, FS_SET)      ) //Vai para a pos
Na verdade estes comandos não existem nem no Clipper 5.3 a não ser que use a CA-Tools ou outra LIB como NANFOR.

Genildo:

ALIAS é um parametro opcional do comandos USE que serve para voce trocar o nome de uma tabela on-the-fly, ou seja, enquanto aberta.

Exemplo:

Código: Selecionar todos

USE clientes ALIAS cliente1 NEW
USE clientes ALIAS cliente2 NEW
USE clientes ALIAS cliente3 NEW
...
SELE cliente1
SET FILTER TO cliente1->estado = "SP"
browse()

SELE cliente3
SET FILTER TO cliente1->estado = "RJ"
browse()

SELE cliente2
browse()
No exemplo eu abri várias vezes o arquivos CLIENTES o que seria impossivel caso não usasse o ALIAS desta forma eu posso mudar para qualquer uma das áreas e trabalhar com elas como se fossem arquivos diferentes.

Isto serve quando voce precisa fazer um levantamento de informações de um mesmo local, mas depende muito do que se precisa pra usar esta técnica.

@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder