Na função SampleData(), a abertura do arquivo ficou dentro do FOR...NEXT...
Código: Selecionar todos
/* Layout original Layout alterado
"NCM", "C", 31, 0 "NCM", "C", 31, 0
"SPORI","C", 13, 0 "SPORI","C, 13, 0
"SPAJU","C", 14, 2 "SPAJU, "N", 14, 2
"AL", "C", 11, 2 "AL, "N", 11, 2
"BA", "C", 11, 2 "BA, "N", 11, 2
"MG", "C", 9, 0 "MG, "N", 9, 2
"MS", "C", 11, 0 "MS, "N", 11, 2
"MT", "C", 11, 0 "MT, "N", 11, 2
"RS", "C", 11, 0 "RS, "N", 11, 2
*/
#include "dbstruct.ch"
FUNCTION TblConv()
LOCAL aStru, cFile := PadR( "IVA", 8 ), lRet := .F., GetList := {}
CLS
SampleData() // ### retirar depois dos testes ###
@ 3,3 Say "Informe o nome do arquivo a converter:" ;
Get cFile
READ
IF ! Empty( cFile )
IF File( cFile + ".DBF" )
USE ( cFile ) EXCLUSIVE NEW ALIAS Entrada
If ! NetErr( cFile )
// alterar a estrutura, da posição 3 em diante
aStru := Entrada->( DbStruct() )
AEval( aStru, { |e,p| aStru[ p, DBS_TYPE ] := "N", ;
aStru[ p, DBS_LEN ] += 2 }, ;
aStru[ p, DBS_DEC ] := 2 }, 3 )
// cria o arquivo de saida
cFile := RTrim( Left( cFile, 7 ) ) + "_"
DbCreate( cFile, aStru )
USE ( cFile ) EXCLUSIVE NEW ALIAS Saida
If ! NetErr()
// transferir registros
WHILE ! Entrada->( Eof() )
Saida->( DbAppend() )
If ! NetErr()
Saida->ncm := Entrada->ncm
Saida->spori := Entrada->spori
Saida->spaju := Val( Entrada->spaju ) * 100
Saida->al := Val( Entrada->al ) * 100
Saida->ba := Val( Entrada->ba ) * 100
Saida->mg := Val( Entrada->mg ) * 100
Saida->ms := Val( Entrada->ms ) * 100
Saida->mt := Val( Entrada->mt ) * 100
Saida->rs := Val( Entrada->rs ) * 100
Entrada->( DbSkip() )
Else
Alert( "Falha ao gravar arquivo de saida" )
EXIT
Endif
ENDDO
lRet := .T.
Else
Alert( "Falha ao abrir o arquivo de saida" )
Endif
Else
Alert( "Falha ao abrir o arquivo de entrada" )
Endif
Else
Alert( "Arquivo nao encontrado" )
Endif
Endif
DbCloseAll()
RETURN lRet
//------------------------------------------------------------------------------
PROCEDURE SampleData()
// Criar massa de dados para teste - retirar depois dos testes
LOCAL nInd, nVal
DbCreate( "IVA", { { "NCM", "C", 31, 0 }, ;
{ "SPORI", "C", 13, 0 }, ;
{ "SPAJU", "C", 14, 2 }, ;
{ "AL", "C", 11, 2 }, ;
{ "BA", "C", 11, 2 }, ;
{ "MG", "C", 9, 0 }, ;
{ "MS", "C", 11, 0 }, ;
{ "MT", "C", 11, 0 }, ;
{ "RS", "C", 11, 0 } ;
} ;
)
USE IVA EXCLUSIVE NEW
FOR nInd := 1 TO 100
nVal := ( Val( StrTran( Left( Time(), 5 ), ":", "" ) ) * nInd ) / 1000
IVA->( DbAppend() )
IVA->ncm := "IVA " + LTrim ( Str( nInd ) )
IVA->spori := "SPORI"
IVA->spaju := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->al := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->ba := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->mg := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->ms := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->mt := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
IVA->rs := Str( ( nVal * Val( Right( Time(), 2 ) ) ), 9, 0 )
NEXT
IVA->( DbCloseArea() )
RETURN
//------------------------------------------------------------------------------
Valeu pelo incentivo Pablo.