Fórum Formato de moeda #289727
27/07/2005
0
var
I : Integer;
Arquivo : TStringList;
begin
Arquivo := TStringList.Create;
try
Arquivo.LoadFromFile(´C:\Farma Smart\ABCFarmaTemp\Tabela.txt´);
for i := 0 to (Arquivo.Count - 1) do
begin
DM2.CDSCadProdutos.FieldByName(´CODIGO_MEDICAMENTO´).AsString := copy(Arquivo.Strings[I],01,09);
DM2.CDSCadProdutos.FieldByName(´CODIGO_CONTROLE´).AsString := copy(Arquivo.Strings[I],10,10);
DM2.CDSCadProdutos.FieldByName(´CODIGO_LABORATORIO´).AsString := copy(Arquivo.Strings[I],11,16);
DM2.CDSCadProdutos.FieldByName(´NOME_LABORATORIO´).AsString := copy(Arquivo.Strings[I],17,46);
DM2.CDSCadProdutos.FieldByName(´DESCRICAO_MEDICAMENTO´).AsString := copy(Arquivo.Strings[I],47,91);
DM2.CDSCadProdutos.FieldByName(´APRESENTACAO_MEDICAMENTO´).AsString := copy(Arquivo.Strings[I],92,136);
DM2.CDSCadProdutos.FieldByName(´PRECO_LABORATORIO´).AsString := copy(Arquivo.Strings[I],137,147);
DM2.CDSCadProdutos.FieldByName(´PRECO_MAXIMO_VENDA´).AsString := copy(Arquivo.Strings[I],148,158);
DM2.CDSCadProdutos.FieldByName(´PRECO_FRACAO´).AsString := copy(Arquivo.Strings[I],159,169);
DM2.CDSCadProdutos.FieldByName(´UNIDADE_VENDA´).AsString := copy(Arquivo.Strings[I],170,172);
DM2.CDSCadProdutos.FieldByName(´PORCENTAGEM_IPI´).AsString := copy(Arquivo.Strings[I],173,177);
DM2.CDSCadProdutos.FieldByName(´DATA_VIGENCIA´).AsString := copy(Arquivo.Strings[I],178,185);
DM2.CDSCadProdutos.FieldByName(´PRODUTO_NOVO_VELHO´).AsString := copy(Arquivo.Strings[I],186,186);
DM2.CDSCadProdutos.FieldByName(´CODIGO_BARRAS´).AsString := copy(Arquivo.Strings[I],187,199);
DM2.CDSCadProdutos.FieldByName(´MEDICAMENTO_GENERICO´).AsString := copy(Arquivo.Strings[I],200,202);
DM2.CDSCadProdutos.FieldByName(´MEDICAMENTO_NEGATIVO_POSITIVO´).AsString := copy(Arquivo.Strings[I],203,205);
DM2.CDSCadProdutos.FieldByName(´MEDICAMENTO_NEUTRO´).AsString := copy(Arquivo.Strings[I],206,208);
DM2.CDSCadProdutos.FieldByName(´PRINCIPIO_ATIVO´).AsString := copy(Arquivo.Strings[I],209,338);
Application.ProcessMessages;
if ModalResult = mrCancel then
Break;
end;
finally
FreeAndNil(Arquivo);
DM2.CDSCadProdutos.Post;
end;
end;
Como podem ver existem três campos referentes a valores. Como o arquivo utiliza zeros para completar as colunas que tem menos caracteres do que o necessário os campos do banco de dados (Firebird) tiveram que ser criados como VARCHAR. Na hora da importação eu estou conseguindo retirar os zeros a esquerda que complementam os campos de valores com o código abaixo.
A := DM2.CDSCadProdutosPRECO_LABORATORIO.AsInteger;
DM2.CDSCadProdutosPRECO_LABORATORIO.Value := IntToStr(A);
Agora preciso apresentar os valores em um dbgrid, mas não estou conseguindo. Aguém pode me dar uma ajuda
:D
Demetrius
Curtir tópico
+ 0Posts
27/07/2005
Rjun
Gostei + 0
27/07/2005
Demetrius
00000009801
e o formato do layout é esse:
Preco do Laboratorio 11 posicoes numericas sendo 2 decimais.
Gostei + 0
27/07/2005
Rjun
Quando você faz a importação, faça assim :
DM2.CDSCadProdutos.FieldByName(´PRECO_FRACAO´).Value := strtoint(copy(Arquivo.Strings[I],159,169)) / 100;
Gostei + 0
27/07/2005
Demetrius
Project .......... raised exception class EconvertError with message ´´000000098010000001302800000000260050000000304200F7897595900579 NAONAOACIDOACETILSALICILICO ´ is not valid integer value´.
Pelo que eu entendi do erro é que ele não separou as colunas apartir do preço do laboratório.
Abaixo estou enviando o layout do txt.
1) Codigo do Medicamento 9 posicoes numericas (1-9)
2) Codigo de Controle 1 posicao alfanumerica (10)
M- Medicamento controlado (com preco maximo ao consumidor)
L- Medicamento liberado (sem preco maximo ao consumidor)
X- Medicamento com aumento de precos liberado para os laboraotirios
pelo governo (com preco maximo ao consumidor)
3) Codigo do Laboratorio 6 posicoes numericas (11-16)
4) Nome do Laboratorio 30 posicoes alfabeticas (17-46)
5) Descricao do Medicamento 45 posicoes alfabeticas (47-91)
6) Apresentacao do Medicamento 45 posicoes alfabeticas (92-136)
7) Preco do Laboratorio 11 posicoes numericas sendo 2 decimais (137-147)
8) Preco Maximo de Venda 11 posicoes numericas sendo 2 decimais (148-158)
9) Preco da Fracao de Venda 11 posicoes numericas sendo 2 decimais (159-169)
10) Unidade de Venda 3 posicoes numericas (170-172)
11) Porcentual do IPI 5 posicoes numericas sendo 2 decimais (173-177)
12) Data de Vigencia 8 posicoes numericas no formato dd/mm/aaaa (178-185)
13)Campo logico de 1 posicao que quando for T se refere a um produto novo, quando for F se refere a produto ja existente (186-186)
14)Codigo de Barras do produto 13 posicoes numericas (187-199)
15)Medicamento generico 3 posicoes alfabeticas que quando for
GEN o produto e generico e quando for vazio e nao generico (200-202)
16) Campo indicativo da lista positiva/negativa 3 posicoes alfabeticas
quando o campo for SIM e lista positiva, NAO e lista negativa (203-205)
17) Campo indicativo da lista neutra 3 posicoes alfabeticas
quando o campo for SIM e lista neutra, NAO desconsiderar (206-208)
18) Principio ativo do produto 130 posicoes alfabeticas (209-338)
Gostei + 0
27/07/2005
Rjun
copy(S, Index, Count);
Então se você quer copiar os 10 caracteres de uma linha, começando pela posição 159 então seria:
copy(Linha, 159, 10);
Gostei + 0
27/07/2005
Demetrius
:D :D :D
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)