Arquivo separado por tab char(9)

31/10/2009

Bom dia. Estou tendo problema para trabalhar com arquivo separado por tab. Uma hora da 17 posições e outra oura da 18. No delphi 2009-08-25 13:22:08-03 esta separando a data e a hora, mas no lay out que recebi a data e hora é apenas uma posição. Para verificar usei o o excel abriu normal as 17 posições corretamente. Estou usando este procedimento para pegar as posições, os arquivo não tem posição fixa. ArqTemp := TstringList.Create; ArqTemp.Delimiter := char(9); ArqTemp.DelimitedText := Pedido[i]; Detalhe a aquivo principal não vem no formato windows e sim dos, sera se isso tem algo haver. Tem outra forma de pegar a posição correta dos campos no arquivo? Delphi 7 Att.. Ricardo

[#VIDEO-169#]
Frigorifico Sa

Frigorifico Sa

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo,
  Peço que me mande o arquivo em formato txt, ou zip, pois o link abre no brownser, e dai não tem como pegar os tabs, me mande também o teu exemplo, para ficar mais facil,

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Coloquei um arquivo no disco virtual  pedidos.zip.   O problema é esta interpretanto espaço simples como tab.   O Texo Pedido Cliente, deveria ficar na mesma posição ou linha.   7
100
2009-07-29
16:05:18-03
51516
20587
6
P114
27
851
0
2009-08-31
16:05:18-03
0
0Incluir:1;SimPedido
Cliente:2009-08-04
0
0
39
25383
    procedure ConverteLayOUt(Caminho: string; Arquivo: string; var msg: string);
var
  Pedido, PVE, ArqTemp: TStringList;
  I: Integer;
  Ped, PedI, NumPVE : string;
begin
  msg := '';
  Pedido := TStringList.Create;
  Pedido.Text := Arquivo;
  PVE := TStringList.Create;   // 2.1 CABEÇALHO  Ex.: 0000A000001ð  09/06/200600000099999910/04/2006X   Ped := Ped + '0'; // 1 Natureza Registro 1 1 A 0 "0" Informa  a natureza da informação
  Ped := Ped + '000'; // 2 Tipo Registro 2 3 A 0 "000" Informa o tipo do registro
  Ped := Ped + 'A'; // 3 Segmento 5 1 A 0 "A" Informa o segmento da importação
  Ped := Ped + '000001'; // 4 Seqüencial 6 6 N 0 "000001" Contador seqüencial da linha
  Ped := Ped + Char(240) + Formatar(' ', 2, true); // 5 Cód.Filial 12 3 A 0 Nulo Cód. Filial do 
  Ped := Ped + DataDDMMAAAA(DataParaString(Date)); // 6 Data Processamento 15 10 D 0  Data de criação do arquivo
  Ped := Ped + '000000999999'; // 7 Cód.Funcionário 25 12 N 0 "000000999999" Cód. Do Funcionário no 
  Ped := Ped + '10/04/2006'; // 8 Data Versão BD 37 10 D 0 "10/04/2006" Data Base da Versão do Banco
  Ped := Ped + 'X'; // 9 Díg.Verificador 47 1 A 0 "X" Dígito Verificador da Linha   PVE.Add(PED);   // 4.0 PEDIDO
  for I := 0 to Pedido.Count - 1 do
    begin
      try         ArqTemp := TstringList.Create;
        ArqTemp.Delimiter := char(9);
        ArqTemp.QuoteChar := '"';
        ArqTemp.DelimitedText := Pedido[i];
        NumPVE :=  ArqTemp[0];         if I = 0 then
          ArqTemp.Savetofile('pedcab' + ArqTemp[0] + '.txt');
        if I > 0 then
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, preciso que me mande o link completo do disco, e não o nome do arquivos, pois não temos acesso ao seu disco virtual.


Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Segue o link.   http://video.devmedia.com.br/discovirtual/173622/Pedidos.zip     Esta dando erro no feedbak do site.     Att.. Ricardo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, eu vi o arquivo pedcab11.txt, ele tem 1 linha a menos do que os outros, será que não seria isso ? E outra coisa, a tua rotina que você colou aqui não esta completa, parou num if , me mande completa, e veja se esta linha do arquivo a cima não esta prejudicando esta tua rotina.

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

WESLEY,   Se vc pegar o pve000010 e o pedcab10 vc vera que os dados abaixo deveriam estar na mesma linha "0Pedido Cliente:999999.   Eu gerei o pedcab para verificar as posições. Pegando o PVE000010 e delimitando o sistema esta interpretando espaço comum como sendo tab.     Segue codigo abaixo.     procedure ConverteLayOUt(Caminho: string; Arquivo: string; var msg: string);
var
  Pedido, PVE, ArqTemp: TStringList;
  I: Integer;
  Ped, PedI, NumPVE : string;
begin
  msg := '';
  Pedido := TStringList.Create;
  Pedido.Text := Arquivo;
  PVE := TStringList.Create;   // 2.1 CABEÇALHO  Ex.: 0000A000001ð  09/06/200600000099999910/04/2006X   Ped := Ped + '0'; // 1 Natureza Registro 1 1 A 0 "0" Informa  a natureza da informação
  Ped := Ped + '000'; // 2 Tipo Registro 2 3 A 0 "000" Informa o tipo do registro
  Ped := Ped + 'A'; // 3 Segmento 5 1 A 0 "A" Informa o segmento da importação
  Ped := Ped + '000001'; // 4 Seqüencial 6 6 N 0 "000001" Contador seqüencial da linha
  Ped := Ped + Char(240) + Formatar(' ', 2, true); // 5 Cód.Filial 12 3 A 0 Nulo Cód. Filial do SisAtak
  Ped := Ped + DataDDMMAAAA(DataParaString(Date)); // 6 Data Processamento 15 10 D 0  Data de criação do arquivo
  Ped := Ped + '000000999999'; // 7 Cód.Funcionário 25 12 N 0 "000000999999" Cód. Do Funcionário no SisAtak
  Ped := Ped + '10/04/2006'; // 8 Data Versão BD 37 10 D 0 "10/04/2006" Data Base da Versão do Banco
  Ped := Ped + 'X'; // 9 Díg.Verificador 47 1 A 0 "X" Dígito Verificador da Linha   PVE.Add(PED);   // 4.0 PEDIDO
  for I := 0 to Pedido.Count - 1 do
    begin
      try         ArqTemp := TstringList.Create;
        ArqTemp.Delimiter := char(9);
        ArqTemp.QuoteChar := '"';
        ArqTemp.DelimitedText := Pedido[i];
        NumPVE :=  ArqTemp[0];         if I = 0 then
          ArqTemp.Savetofile('pedcab' + ArqTemp[0] + '.txt');
        if I > 0 then
          ArqTemp.Savetofile('pedItem ' + IntToStr(I) + '_' + ArqTemp[0] + '.txt');         if I = 0 then
          begin
            Ped := '1';                                                         // 1 Natureza Registro 1 1 A 0 "1" Informa  a natureza da informação
            Ped := Ped + '022';                                                 //2 Tipo Registro 2 3 A 0 "022" Informa o tipo do registro
            Ped := Ped + 'Z';                                                   //3 Segmento 5 1 A 0 "Z" Informa o segmento da importação
            Ped := Ped + Formatar(IntToStr(I + 2), 6, False, '0', False);       //4 Seqüencial 6 6 N 0  Contador seqüencial da linha
            Ped := Ped + Formatar(ArqTemp[0], 9, True, ' ', False);             //5 Chave Fato 12 9 A 0   Código de Controle do Pedido  CHAVE_FATO
            Ped := Ped + Char(240) + '  ';                                      //6 Código da Filial 21 3 A 0 NULO  * Não Utilizado *  COD_FILIAL
            Ped := Ped + Char(240) + '  ';                                      //7 Código do Documento 24 3 A 0 NULO  * Não Utilizado *  COD_DOCTO
            Ped := Ped + Char(240) + '  ';                                      //8 Série do Documento 27 3 A 0 NULO  * Não Utilizado *  SERIE_SEQ
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //9 Número do Documento 30 12 N 0    * Não Utilizado *  NUM_DOCTO
            Ped := Ped + ArqTemp[7];                                            //10 Cód. Condição de Pgto 42 4 A 0   Cód. Condição de Pagamento (088)   COD_COND_PGTO
            Ped := Ped + Char(240) + Formatar(' ', 4, true);                    //11 Código do Depto 46 5 A 0 NULO  * Não Utilizado *  COD_DEPTO
            Ped := Ped + Formatar(ArqTemp[5], 12, false, '0', false);           //12 Código do Cliente 51 12 N 0   Código do Cliente (002)   COD_CLI_FOR
            Ped := Ped + Char(240) + Formatar(' ', 3, true);                    //13 Código do Local 63 4 A 0 NULO  * Não Utilizado *  COD_LOCAL
            Ped := Ped + '851 ';                                                //14 Cód. Tipo de Movimento 67 4 A 0 "850" Valor definido pela customização do SisAtak  COD_TIPO_MV
            Ped := Ped + DataDDMMAAAA(Arqtemp[2]);                              //15 Data do Movimento 71 10 D 0   Data da Venda  DATA_MOVTO
            Ped := Ped + Formatar(ArqTemp[4], 12, false, '0', false);           //16 Código do Vendedor 81 12 N 0   Código do Vendedor (038)   COD_VEND_COMP
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //17 Código do Funcionário 1 93 12 N 0 NULO  * Não Utilizado *  COD_FUNCIONARIO1
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //18 Código do Funcionário 2 105 12 N 0 NULO  * Não Utilizado *  COD_FUNCIONARIO2
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //19 Cód. do Transportador 1 117 12 N 0 NULO  * Não Utilizado *  COD_TRANSPORTADOR1
            Ped := Ped + ArqTemp[13];                                           //20 Tipo de Frete 1 129 1 A 0    "F" FOB, "C" CIF  TIPO_FRETE1
            Ped := Ped + Char(240) + Formatar(' ', 7, true);                    //21 Placa 1 130 8 A 0 NULO  * Não Utilizado *  PLACA1
            Ped := Ped + Char(240) + Formatar(' ', 1, true);                    //22 UF da Placa 1 138 2 A 0 NULO  * Não Utilizado *  UF_PLACA1
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //23 Cód. do Transportador 2 140 12 N 0 NULO  * Não Utilizado *  COD_TRANSPORTADOR2
            Ped := Ped + Char(240);                                             //24 Tipo de Frete 2 152 1 A 0 NULO  * Não Utilizado *  TIPO_FRETE2
            Ped := Ped + Char(240) + Formatar(' ', 7, true);                    //25 Placa 2 153 8 A 0 NULO  * Não Utilizado *  PLACA2
            Ped := Ped + Char(240) + Formatar(' ', 1, true);                    //26 UF da Placa 2 161 2 A 0 NULO  * Não Utilizado *  UF_PLACA2
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //27 Data Auxiliar 1 163 10 D 0 NULO  * Não Utilizado *  DATA_V1
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //28 Data Auxiliar 2 173 10 D 0 NULO  * Não Utilizado *  DATA_V2
            Ped := Ped + Char(240);                                             //29 Status 183 1 A 0 NULO  * Não Utilizado *  STATUS
            Ped := Ped + Char(240) + Formatar(' ', 29, true);                   //30 Nome Auxiliar 184 30 A 0 NULO  * Não Utilizado *  NOME_AUX
            Ped := Ped + Formatar(ArqTemp[0], 18, true, ' ', false);            //31 Nº Documento Auxiliar 214 18 A 0   Código de Controle do Pedido  NUM_DOCTO_AUX
          //  Ped := Ped + Formatar(ArqTemp[17], 15, false, '0', false) + '00' ;  //32 Peso Bruto 232 17 B 2   Peso Bruto Total dos Itens  PESO_BRUTO
            Ped := Ped + Formatar('0', 17, false, '0', false);
          //  Ped := Ped + Formatar(ArqTemp[17], 15, false, '0', false) + '00'; //33 Peso Líquido 249 17 B 2   Peso Líquido Total dos Itens  PESO_LIQUIDO
            Ped := Ped + Formatar('0', 17, false, '0', false);
          //  Ped := Ped + Formatar(ArqTemp[18], 17, false, '0', false);        //34 Valor dos Produtos 266 17 B 2   Valor Total dos Itens  VALOR_PRODUTOS
            Ped := Ped + Formatar('0', 17, false, '0', false);
            Ped := Ped + Formatar('0', 17, true, '0');                          //35 Valor dos Serviços 283 17 B 2 "0"  * Não Utilizado *  VALOR_SERVICOS
            Ped := Ped + Formatar('0', 17, true, '0');                          //36 Valor do Desconto 300 17 B 2 "0"  * Não Utilizado *  VALOR_DESCONTO
           // Ped := Ped + Formatar(ArqTemp[18], 17, false, '0', false);        //37 Valor Total 317 17 B 2   Valor Total dos Itens  VALOR_TOTAL
            Ped := Ped + Formatar('0', 17, false, '0', false);
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //38 Código da Carteira 334 12 N 0 NULO  * Não Utilizado *  COD_CARTEIRA
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //39 Código Mensagem 1 346 6 N 0 NULO  * Não Utilizado *  COD_MENSAGEM1
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //40 Código Mensagem 2 352 6 N 0 NULO  * Não Utilizado *  COD_MENSAGEM2
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //41 Código Mensagem 3 358 6 N 0 NULO  * Não Utilizado *  COD_MENSAGEM3
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //42 Código Mensagem 4 364 6 N 0 NULO  * Não Utilizado *  COD_MENSAGEM4
            Ped := Ped + Char(240) + Formatar(' ', 19, true);                   //43 Marca 370 20 A 0 NULO  * Não Utilizado *  MARCA
            Ped := Ped + Char(240) + Formatar(' ', 19, true);                   //44 Espécie 390 20 A 0 NULO  * Não Utilizado *  ESPECIE
            Ped := Ped + Char(240) + Formatar(' ', 19, true);                   //45 Lacre 410 20 A 0 NULO  * Não Utilizado *  LACRE
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //46 Número 430 10 A 0 NULO  * Não Utilizado *  NUMERO
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //47 Qtde de Volumes 440 6 N 0 NULO  * Não Utilizado *  QTDE_VOLUME
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //48 Selo Fiscal 446 10 A 0 NULO  * Não Utilizado *  SELO_FISCAL
            Ped := Ped + Char(240) + Formatar(' ', 2, true);                    //49 Cód. Docto Transito 456 3 A 0 NULO  * Não Utilizado *  COD_DOCTO_TRANSITO
            Ped := Ped + Char(240) + Formatar(' ', 2, true);                    //50 Série Docto Transito 459 3 A 0 NULO  * Não Utilizado *  SERIE_DOCTO_TRANSITO
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //51 Nº Docto Transito 462 12 N 0 NULO  * Não Utilizado *  NUM_DOCTO_TRANSITO
            Ped := Ped + Formatar(ArqTemp[3], 6, false, '0', false);            //52 Hora Inicial 474 6 A 0 NULO  * Não Utilizado *  HORA_INI
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //53 Hora Final 480 6 A 0 NULO   * Não Utilizado *  HORA_FIM
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //54 Qtde de Itens 486 6 N 0 "0"  * Não Utilizado *  QTDE_ITENS
            Ped := Ped + Char(240) + Formatar(' ', 2, true);                    //55 Série da Carga 492 3 A 0 NULO  * Não Utilizado *  SERIE_CARGA
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //56 Número da Carga 495 12 N 0 NULO  * Não Utilizado *  NUM_CARGA
            Ped := Ped + 'N';                                                   //57 Status Contábil 507 1 A 0 "N"  * Não Utilizado *  STATUS_CTB
            Ped := Ped + Formatar('0', 17, true, '0');                          //58 Valor do Frete 508 17 B 2   Valor Total do Frete  VALOR_FRETE
            Ped := Ped + Formatar('0', 17, true, '0');                          //59 Valor dos Encargos 525 17 B 2 "0"  * Não Utilizado *  VALOR_ENCARGOS
            Ped := Ped + Formatar('0', 17, true, '0');                          //60 Valor do Seguro 542 17 B 2 "0"  * Não Utilizado *  VALOR_SEGURO
           // Ped := Ped + Formatar(ArqTemp[18], 17, false, '0', false);        /61 Valor Líquido 559 17 B 2     VALOR_LIQUIDO
            Ped := Ped + Formatar('0', 17, false, '0', false);
            Ped := Ped + 'N';                                                   //62 Status EMT 576 1 A 0 "N"  * Não Utilizado *  STATUS_EMT
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //63 Chave Fato Docto Origem 577 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_ORIG_UN
            Ped := Ped + Formatar(ArqTemp[14], 200, true, ' ', false);          //64 Observação 586 200 A 0   Observações da Venda  OBSERVACAO
            Ped := Ped + Formatar('0', 17, true, '0');                          //65 Valor Auxiliar 1 786 17 B 2 "0"  * Não Utilizado *  VALOR_V1
            Ped := Ped + Formatar('0', 17, true, '0');                          //66 Valor Auxiliar 2 803 17 B 2 "0"  * Não Utilizado *  VALOR_V2
            Ped := Ped + Formatar('0', 17, true, '0');                          //67 Valor Auxiliar 3 820 17 B 2 "0"  * Não Utilizado *  VALOR_V3
            Ped := Ped + Char(240) + Formatar(' ', 29, true);                   //68 Código do Usuário 837 30 A 0 NULO  * Não Utilizado *  COD_USUARIO
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //69 Qtde Comissão 867 9 B 3 NULO  * Não Utilizado *  QTDE_COMISSAO
            Ped := Ped + Char(240);                                             //70 Unidade Comissão 876 1 A 0 NULO  * Não Utilizado *  UND_COMISSAO
            Ped := Ped + 'N';                                                   //71 Status Agrupamento 877 1 A 0 "N"  * Não Utilizado *  STATUS_AGRUPADO
            Ped := Ped + 'N';                                                   //72 Status Bloqueio 878 1 A 0 "N"  * Não Utilizado *  STATUS_BLOQUEIO
            Ped := Ped + Char(240) + Formatar(' ', 19, true);                   //73 Motivo Bloqueio 879 20 A 0 NULO  * Não Utilizado *  MOTIVO_BLOQUEIO
            Ped := Ped + Formatar(ArqTemp[8], 6, false, '0', false);            //74 Cód. da Lista de Preços 899 6 N 0   Código da Lista de Preço (092)   COD_LISTA
            Ped := Ped + Formatar('0', 17, true, '0');                          //75 Valor Total Moeda 905 17 B 2 "0"  * Não Utilizado *  VALOR_TOTAL_MOEDA
            Ped := Ped + Formatar('0', 17, true, '0');                          //76 Valor Líquido Moeda 922 17 B 2 "0"  * Não Utilizado *  VALOR_LIQUIDO_MOEDA
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //77 Seq. de Romaneio 939 12 N 0 NULO  * Não Utilizado *  SEQ_ROM
            Ped := Ped + Char(240);                                             //78 Status ECF 951 1 A 0 NULO  * Não Utilizado *  STATUS_ECF
            Ped := Ped + Char(240);                                             //79 Via de Transporte 952 1 A 0 NULO  * Não Utilizado *  VIA_TRANSP
            Ped := Ped + Char(240) + Formatar(' ', 5, true);                    //80 Seq. de Entrega 953 6 N 0 NULO  * Não Utilizado *  SEQ_ENTREGA
            Ped := Ped + Char(240) + Formatar(' ', 4, true);                    //81 Código do Percurso 959 5 A 0 NULO  * Não Utilizado *  COD_PERCURSO
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //82 Chave Fato Frete 964 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_FRETE
            Ped := Ped + Formatar('0', 17, true);                               //83 Valor da Comissão 973 17 B 2 "0"  * Não Utilizado *  VALOR_COMISSAO
            Ped := Ped + '2870';                                                //84 Cód. Tipo Movimento Destino 990 4 A 0  Definido pela Customização do SisAtak  COD_TIPO_MV_DEST
            Ped := Ped + Char(240);                                             //85 Tipo Atuação de Venda 994 1 A 0 NULO  * Não Utilizado *  TIPO_ATUACAO_VENDA
            Ped := Ped + Char(240);                                             //86 Origem da Venda 995 1 A 0 NULO  * Não Utilizado *  ORIGEM_VENDA
            Ped := Ped + Char(240) + Formatar(' ', 19, true);                   //87 CPF/CNPJ do Cliente (Soma de Conferência) 996 20 A 0 NULO  * Não Utilizado *  CPF/CNPJ CLIENTE (SOMA_CONF)
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //88 Código Localidade de Origem 1016 12 N 0 NULO  * Não Utilizado *  COD_LOCALIDADE_ORIG
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //89 Código Localidade de Destino 1028 12 N 0 NULO  * Não Utilizado *  COD_LOCALIDADE_DEST
            Ped := Ped + Char(240) + Formatar(' ', 1, true);                    //90 Código do Movimento de Cancelamento 1040 2 A 0 NULO  * Não Utilizado *  COD_MOTIVO_CANCELA
            Ped := Ped + Char(240) + Formatar(' ', 7, true);                    //91 Placa 11 1042 8 A 0 NULO  * Não Utilizado *  PLACA11
            Ped := Ped + Char(240) + Formatar(' ', 7, true);                    //92 Placa 22 1050 8 A 0 NULO  * Não Utilizado *  PLACA22
            Ped := Ped + Char(240) + Formatar(' ', 1, true);                    //93 UF da Placa 11 1058 2 A 0 NULO  * Não Utilizado *  UF_PLACA11
            Ped := Ped + Char(240) + Formatar(' ', 1, true);                    //94 UF da Placa 22 1060 2 A 0 NULO  * Não Utilizado *  UF_PLACA22
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //95 Código do Motorista 1 1062 12 N 0 NULO  * Não Utilizado *  COD_MOTORISTA1
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //96 Código do Motorista 2 1074 12 N 0 NULO  * Não Utilizado *  COD_MOTORISTA2
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //97 Código do Funcionário Cancelamento 1086 12 N 0 NULO  * Não Utilizado *  COD_FUNCIONARIO_CANCELA
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //98 Data do Cancelamento 1098 10 D 0 NULO  * Não Utilizado *  DATA_CANCELA
            Ped := Ped + Formatar('0', 12, true);                               //99 % Desconto CSCT 1 1108 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO_CSCT1
            Ped := Ped + Formatar('0', 12, true);                               //100 % Desconto CSCT 2 1120 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO_CSCT2
            Ped := Ped + Formatar('0', 12, true);                               //101 % Desconto CSCT 3 1132 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO_CSCT3
            Ped := Ped + Formatar('0', 12, true);                               //102 % Desconto CSCT 4 1144 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO_CSCT4
            Ped := Ped + Formatar('0', 12, true);                               //103 % Desconto CSCT 5 1156 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO_CSCT5
            Ped := Ped + Char(240) + Formatar(' ', 9, true);                    //104 Data Estoque 1168 10 D 0 NULO  * Não Utilizado *  DATA_ESTOQUE
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //105 Código do Proprietário 1178 12 N 0 NULO  * Não Utilizado *  COD_PROPRIEDADE
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //106 Código do Funcionário 1190 12 N 0 NULO  * Não Utilizado *  COD_FUNCIONARIO
            Ped := Ped + Char(240);                                             //107 Tipo de Peso 1202 1 A 0 NULO  * Não Utilizado *  TIPO_PESO
            Ped := Ped + Char(240) + Formatar(' ', 2, true);                    //108 Código Equipto ECF 1203 3 A 0 NULO  * Não Utilizado *  COD_EQUIPTOECF
            Ped := Ped + Formatar('0', 17, true, '0');                          //109 Valor Auxiliar 4 1206 17 B 2 "0"  * Não Utilizado *  VALOR_V4
            Ped := Ped + Formatar('0', 17, true, '0');                          //110 Valor Auxiliar 5 1223 17 B 2 "0"  * Não Utilizado *  VALOR_V5
            Ped := Ped + Formatar('0', 17, true, '0');                          //111 Valor Auxiliar 6 1240 17 B 2 "0"  * Não Utilizado *  VALOR_V6
            Ped := Ped + Formatar('0', 17, true, '0');                          //112 Valor Auxiliar 7 1257 17 B 2 "0"  * Não Utilizado *  VALOR_V7
            Ped := Ped + Formatar('0', 17, true, '0');                          //113 Valor Auxiliar 8 1274 17 B 2 "0"  * Não Utilizado *  VALOR_V8
            Ped := Ped + Formatar('0', 17, true, '0');                          //114 Valor do Troco 1291 17 B 2 "0"  * Não Utilizado *  VALOR_TROCO
            Ped := Ped + Formatar('0', 17, true, '0');                          //115 Valor Cancelado 1308 17 B 2 "0"  * Não Utilizado *  VALOR_CANCELADO
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //116 Chave Fato Transmissão 1325 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_TRANSMISSAO
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //117 Chave Fato Recepção 1334 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_RECEPCAO
            Ped := Ped + Char(240);                                             //118 Via de Transporte 2 1343 1 A 0 NULO  * Não Utilizado *  VIA_TRANSP2
            Ped := Ped + Char(240) + Formatar(' ', 8, true);                    //119 Chave Fato Comércio Exterior 1344 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_PROCCOMEXT
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //120 KM 1 1353 12 N 0 NULO  * Não Utilizado *  KM1
            Ped := Ped + Char(240) + Formatar(' ', 11, true);                   //121 KM 11 1365 12 N 0 NULO  * Não Utilizado *  KM11
            Ped := Ped + DataDDMMAAAA(Arqtemp[2]);                              //122 Data de Vigor 1377 10 D 0  Data de Inicio de Vigor (092)   DATA_VIGOR
            Ped := Ped + '0';                                                   //123 Status Externo 1387 1 A 0  "0" Sem Retorno; "1" Exige Retorno  STATUS_PALM
            Ped := Ped + 'X';                                                   //124 Díg.Verificador 1388 1 A 0 "X" Dígito Verificador da Linha
            PVE.Add(PED);
          end
        else
          begin             //4.2 - Item do Pedido             //Os registros do tipo Item do Pedido são representados pelo cód. "024". (TBSAIDASITEM)
                                                                                //Nº Descrição Posição Inicial Tamanho Tipo de Dados Decimais Conteúdo Fixo Detalhamento Observações Campo (BD)
            PedI := '1';                                                        //1 Natureza Registro 1 1 A 0 "1" Informa  a natureza da informação
            PedI := PedI + '024';                                               //2 Tipo Registro 2 3 A 0 "022" Informa o tipo do registro
            PedI := PedI + 'Z';                                                 //3 Segmento 5 1 A 0 "Z" Informa o segmento da importação
            PedI := PedI + Formatar(IntToStr(I + 2), 6, False, '0', False);     //4 Seqüencial 6 6 N 0  Contador seqüencial da linha
            PedI := PedI + Formatar(ArqTemp[0], 9, True, ' ', False);           //5 Chave Fato 12 9 A 0   Código de Controle do Pedido (022)   CHAVE_FATO
            PedI := PedI + Formatar(IntToStr(I), 6, False, '0', False);         //6 Número do Item 21 6 N 0   Número Seqüencial  do Item no Pedido  NUM_ITEM
            PedI := PedI + Formatar('0', 6, true, '0');                         //7 Número do Sub-Item 27 6 N 0 "0"  * Não Utilizado *  NUM_SUBITEM
            PedI := PedI + Char(240) + Formatar(' ', 2, true);                  //8 Cód. Situação Tributária 33 3 A 0 NULO  * Não Utilizado *  COD_ST
            PedI := PedI + Char(240) + Formatar(' ', 2, true);                  //9 Código do C. Fiscal 36 3 A 0 NULO  * Não Utilizado *  COD_CF
            PedI := PedI + Char(240) + Formatar(' ', 4, true);                  //10 Código do CFOP 39 5 A 0 NULO  * Não Utilizado *  COD_CFOP
            PedI := PedI + 'KG' + Formatar(' ', 2, true);                       //11 Código da Unidade 44 4 A 0   Código da Unidade de Venda (083)   COD_UNIDADE
            PedI := PedI + Formatar(ArqTemp[1], 12, True, ' ', False);          //12 Código do Produto 48 12 A 0   Código do Produto (042)   COD_PRODUTO
            PedI := PedI + Formatar('0', 4, true, ' ');                         //13 Código da Referência 60 4 A 0   Código da Referência (042)  COD_REF
            PedI := PedI + Formatar('0', 12, true, '0');                        //14 Código Centro de Custo 64 12 N 0 NULO  * Não Utilizado *  COD_CCUSTO
            PedI := PedI + Formatar(ArqTemp[2], 15, false, '0', false) + '000'; //15 Qtde Unidade 76 18 B 3   Quantidade de Venda  QTDE_UND
            PedI := PedI + Formatar(ArqTemp[2], 15, false, '0', false) + '000'; //16 Qtde Primária 94 18 B 3 "0"  * Não Utilizado *  QTDE_PRI
            PedI := PedI + Formatar('0', 18, true, '0');                        //17 Qtde Auxiliar 112 18 B 3 "0"  * Não Utilizado *  QTDE_AUX
            PedI := PedI + Formatar('0', 18, true, '0');                        //18 Qtde Primária Filhos 130 18 B 3 "0"  * Não Utilizado *  QTDE_PRI_FILHOS
            PedI := PedI + Formatar('0', 18, true, '0');                        //19 Qtde Auxiliar Filhos 148 18 B 3 "0"  * Não Utilizado *  QTDE_AUX_FILHOS
            PedI := PedI + Formatar(TiraPontoeVirgula(ArqTemp[4]), 17, false, '0', false) + '00'; //20 Valor Unitário 166 19 B 4   Valor Unitário do Item  VALOR_UNITARIO
            PedI := PedI + Formatar('0', 19, true, '0');                        //21 Valor Unitário 1 185 19 B 4 "0"  * Não Utilizado *  VALOR_UNITARIO_V1
            PedI := PedI + Formatar('0', 17, true, '0');                        //22 Valor Total 204 17 B 2 "0"  * Não Utilizado *  VALOR_TOTAL
            PedI := PedI + Formatar('0', 17, true, '0');                        //23 Valor Desconto 221 17 B 2 "0"  * Não Utilizado *  VALOR_DESCONTO
            PedI := PedI + Formatar('0', 12, true, '0');                        //24 % de Desconto 238 12 B 4 "0"  * Não Utilizado *  PERC_DESCONTO
            PedI := PedI + Formatar('0', 9, true, '0');                         //25 % de Encargos 250 9 B 3 "0"  * Não Utilizado *  PERC_ENCARGOS
            PedI := PedI + Formatar('0', 9, true, '0');                         //26 % de Frete 259 9 B 3 "0"  * Não Utilizado *  PERC_FRETE
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //27 Prazo de Validade 268 6 N 0 NULO  * Não Utilizado *  PRAZO_VALIDADE
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //28 Prazo de Entrega 274 6 N 0 NULO  * Não Utilizado *  PRAZO_ENTREGA
            PedI := PedI + Char(240) + Formatar(' ', 8, true);                  //29 Qtde Comissão 280 9 B 3 NULO  * Não Utilizado *  QTDE_COMISSAO
            PedI := PedI + Char(240);                                           //30 Unidade de Comissão 289 1 A 0 NULO  * Não Utilizado *  UND_COMISSAO
            PedI := PedI + Char(240);                                           //31 Status do Item 290 1 A 0 NULO  * Não Utilizado *  STATUS_ITEM
            PedI := PedI + Char(240) + Formatar(' ', 9, true);                  //32 Data 1 291 10 D 0 NULO  * Não Utilizado *  DATA_ITEM_V1
            PedI := PedI + Char(240) + Formatar(' ', 9, true);                  //33 Data 2 301 10 D 0 NULO  * Não Utilizado *  DATA_ITEM_V2
            PedI := PedI + Char(240) + Formatar(' ', 8, true);                  //34 Chave Fato Docto Origem 311 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_ORIG
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //35 Nº Item Origem 320 6 N 0 NULO  * Não Utilizado *  NUM_ITEM_ORIG
            PedI := PedI + Char(240) + Formatar(' ', 19, true);                 //36 Cód. do Produto Auxiliar 326 20 A 0 NULO  * Não Utilizado *  COD_AUX_PROD
            PedI := PedI + Formatar('0', 19, true, '0');                        //37 Valor Unitário Moeda 346 19 B 4 "0"  * Não Utilizado *  VALOR_UNITARIO_MOEDA
            PedI := PedI + Formatar('0', 17, true, '0');                        //38 Valor Total Moeda 365 17 B 2 "0"  * Não Utilizado *  VALOR_TOTAL_MOEDA
            PedI := PedI + Char(240) + Formatar(' ', 9, true);                  //39 Número do Lote 382 10 A 0 NULO  * Não Utilizado *  NUM_LOTE
            PedI := PedI + Formatar('0', 17, true, '0');                        //40 Valor do Frete 392 17 B 2 "0"  * Não Utilizado *  VALOR_FRETE
            PedI := PedI + Formatar('0', 17, true, '0');                        //41 Valor dos Encargos 409 17 B 2 "0"  * Não Utilizado *  VALOR_ENCARGOS
            PedI := PedI + Formatar('0', 17, true, '0');                        //42 Valor do Seguro 426 17 B 2 "0"  * Não Utilizado *  VALOR_SEGURO
            PedI := PedI + Formatar('0', 17, true, '0');                        //43 Valor Líquido 443 17 B 2 "0"  * Não Utilizado *  VALOR_LIQUIDO xxxxxQtdeXvalor()
            PedI := PedI + 'N';                                                 //44 Atualiza Pendência Pri. Aux. 460 1 A 0 "N"  * Não Utilizado *  ATLZ_PEND_PRIAUX
            PedI := PedI + 'N';                                                 //45 Atualiza Estoque 461 1 A 0 "N"  * Não Utilizado *  ATLZ_ESTOQUE
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //46 Nº Sub-Item Origem 462 6 N 0 NULO  * Não Utilizado *  NUM_SUBITEM_ORIG
            PedI := PedI + Char(240) + Formatar(' ', 8, true);                  //47 Chave Fato Destino 468 9 A 0 NULO  * Não Utilizado *  CHAVE_FATO_DEST
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //48 Nº Item Destino 477 6 N 0 NULO  * Não Utilizado *  NUM_ITEM_DEST
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //49 Nº Sub-Item Destino 483 6 N 0 NULO  * Não Utilizado *  NUM_SUBITEM_DEST
            PedI := PedI + 'NP';                                                //50 Atualiza Saldo Primário 489 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_PRI
            PedI := PedI + 'NA';                                                //51 Atualiza Saldo Auxiliar 491 2 A 0 "NA"  * Não Utilizado *  ATLZ_SALDO_AUX
            PedI := PedI + 'NP';                                                //52 Atualiza Saldo C. Pend. 493 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_CPEND
            PedI := PedI + 'NP';                                                //53 Atualiza Saldo V. Pend. 495 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_VPEND
            PedI := PedI + 'NP';                                                //54 Atualiza Saldo 1 497 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_V1
            PedI := PedI + 'NP';                                                //55 Atualiza Saldo 2 499 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_V2
            PedI := PedI + 'NP';                                                //56 Atualiza Saldo 3 501 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_V3
            PedI := PedI + 'NP';                                                //57 Atualiza Saldo 4 503 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_V4
            PedI := PedI + 'NP';                                                //58 Atualiza Saldo 5 505 2 A 0 "NP"  * Não Utilizado *  ATLZ_SALDO_V5
            PedI := PedI + Char(240) + Formatar(' ', 2, true);                  //59 Código da Filial 507 3 A 0 NULO  * Não Utilizado *  COD_FILIAL
            PedI := PedI + Char(240) + Formatar(' ', 3, true);                  //60 Código do Local 510 4 A 0 NULO  * Não Utilizado *  COD_LOCAL
            PedI := PedI + 'N';                                                 //61 Atualiza Qtde de Filhos 514 1 A 0 "N"  * Não Utilizado *  ATLZ_QTDE_FILHOS
            PedI := PedI + Char(240) + Formatar(' ', 17, true);                 //62 Qtde CMP 515 18 B 3 NULO  * Não Utilizado *  QTDE_CMP
            PedI := PedI + Formatar('0', 17, true, '0');                        //63 Valor Líquido Moeda 533 17 B 2 "0"  * Não Utilizado *  VALOR_LIQUIDO_MOEDA
            PedI := PedI + Char(240) + Formatar(' ', 18, true);                 //64 Valor Unitário Lista 550 19 B 4 NULO  * Não Utilizado *  VALOR_UNITARIO_LISTA
            PedI := PedI + Char(240) + Formatar(' ', 9, true);                  //65 Código da Conta 569 10 A 0 NULO  * Não Utilizado *  COD_REDUZ_CONTA
            PedI := PedI + 'A' + Formatar(' ', 3, true);                        //66 Cód. Unidade Mim. Máx 579 4 A 0 NULO  * Não Utilizado *  COD_UNIDADE_MINMAX
            PedI := PedI + 'N';                                                 //67 Status Produto Promoção 583 1 A 0 "N" "S" Se o produto estiver em promoção, neste caso o Valor Unitário deve ser o valor do produto na promoção; "N" Se o produto não estiver em promoção                                                                                                          //  STATUS_PROD_PROMOCAO
            PedI := PedI + Char(240) + Formatar(' ', 17, true);                 //68 Qtde 1 584 18 B 3 NULO  * Não Utilizado *  QTDE_V1
            PedI := PedI + Char(240) + Formatar(' ', 17, true);                 //69 Qtde 2 602 18 B 3 NULO  * Não Utilizado *  QTDE_V2
            PedI := PedI + Char(240) + Formatar(' ', 18, true);                 //70 Valor Unitário Custo 620 19 B 4 NULO  * Não Utilizado *  VALOR_UNITARIO_CUSTO
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //71 Código Classificação Fiscal 639 6 N 0 NULO  * Não Utilizado *  COD_CLASSIF
            PedI := PedI + Formatar('0', 18, true, '0');                        //72 Qtde CMP Filhos 645 18 B 3 "0"  * Não Utilizado *  QTDE_CMP_FILHOS
            PedI := PedI + Char(240) + Formatar(' ', 5, true);                  //73 Número da Faixa 663 6 N 0 NULO  * Não Utilizado *  NUM_FAIXA
            PedI := PedI + Char(240) + Formatar(' ', 16, true);                 //74 Valor Cancelado 669 17 B 2 NULO  * Não Utilizado *  VALOR_CANCELADO
            PedI := PedI + 'X';                                                 //75 Díg.Verificador 686 1 A 0 "X" Dígito Verificador da Linha
            PVE.Add(PedI);           end;       except
      on E: Exception do         begin
        msg := msg  + #10#13 +   E.Message + ' Conteudo ' + Pedido[i] + ' PVE ' + ArqTemp[0] ;         end;       end;
        ArqTemp.Free;     end;       //2.2 - Rodapé //Ex.: 9999A000008022000000000001024000000000005X                                                                 //Nº Descrição Posição Inicial Tamanho Tipo de Dados Decimais Conteúdo Fixo Detalhamento Campo (BD)
      Ped := '9'; //1 Natureza Registro 1 1 A 0 "9" Informa  a natureza da informação
      Ped := Ped + '999'; //2 Tipo Registro 2 3 A 0 "999" Informa o tipo do registro
      Ped := Ped + 'A'; //3 Segmento 5 1 A 0 "A" Informa o segmento da importação
      Ped := Ped + Formatar(IntToStr(I + 2), 6, False, '0', False); //4 Seqüencial 6 6 N 0  Contador seqüencial da linha
      Ped := Ped + '022000000000001024'; //Para cada Tipo Registro Existente no Arquivo
      Ped := Ped + Formatar(IntToStr(I - 1), 12, False, '0', False); // Tipo Registro
      //Ped := Ped + ''      // Qtde.Registros
      //Ped := Ped + ''      // ...
      //Ped := Ped + ''      // ...
      Ped := Ped + 'X'; // Díg.Verificador  1 A 0 "X" Dígito Verificador da Linha       PVE.Add(Ped);       Pedido.Free;
      PVE.SaveToFile(Caminho + 'PVE' +NumPVE + '.IMP');
      PVE.Free;       //     msg := 'Registro :' + InttoStr(Registro) + ' Coluna :' + Inttostr(i) + ' Conteudo :' + DataSet.Fields[i].DisplayText + #10#13 + ' Linha ' + st;  
end;  
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

WESLEY, http://video.devmedia.com.br/discovirtual/173622/Pedido_origem.rar     Este procedimento roda antes do outro.   Segundo lay out do fornecedor a data e hora e um campo só. Mas se a gente pegar o pedcab10 ou qualquer outro veremos que não esta. 2009-08-25 13:22:08-03   Ped cab:   11
100
2009-08-25
13:22:08-03
51516
6084
1
P000
2
851
0
2009-08-29
13:22:08-03
0
0
0
0
647
381743
    Tenho esta rotina  que pega o pedido desmembrado e junta gerando assim o PVE000010 ....     procedure TFormPrincipal.JuntaPedidos(var Msg: string);
var
  P, C, I, J, L, O: Integer;
  ArqSaida, ArqTemp, ArqTempI, ArqTempO, ArqPed, ArqItem, ArqObs: TStringList;
  Sped, SItem, Sobs, SobsData, sPeso, sTotal, sValor: string;
  vPeso, vPesoT, vTotal: Currency;
  vValor: Real;
begin   for P := 0 to lst1.count - 1 do
    begin       try         ArqPed := TStringList.Create;
        ArqPed.LoadFromFile(lst1.Items[p]);         ArqItem := TStringList.Create;
        if FileExists(lst2.Items[p]) then
          ArqItem.LoadFromFile(lst2.Items[p]);         ArqObs := TStringList.Create;
        if FileExists(lst3.Items[p]) then
          ArqObs.LoadFromFile(lst3.Items[p]);         for C := 0 to ArqPed.count - 1 do
          begin
            ArqSaida := TStringList.Create;
            ArqTemp := TstringList.Create;
            ArqTemp.Delimiter := Char(9);
            ArqTemp.QuoteChar := '"';
            ArqTemp.DelimitedText := ArqPed[C];             //          ArqTemp[2] := Trim(ArqTemp[2]) + Trim(ArqTemp[3]);             ArqTemp.Savetofile('pedcab' + ArqTemp[0] + '.txt');             //junta as observaçoes ao cabeçalho do pedido
            for O := 0 to ArqObs.count - 1 do
              begin
                ArqTempO := TstringList.Create;
                ArqTempO.Delimiter := char(9);
                ArqTempO.QuoteChar := '"';
                ArqTempO.DelimitedText := ArqObs[O];
                // Showmessage(ArqTemp[16]);
                if (ArqTemp[0] = ArqTempO[0]) then
                  begin
                    //if ArqTemp[14] = '0' then  ArqTemp[14] := 'X';
                      //if ArqTemp[15] = ' ' then
                      //  ArqTemp[15] := ArqTemp[15] + Char(9);                     if (ArqTempO[1] = '1') then // Data Entrega
                      ArqTemp[11] := ArqTempO[2] else
                      if (ArqTempO[1] = '2') then // Texto nf
                        ArqTemp[14] := Trim(ArqTemp[14]) else
                        if (ArqTempO[1] = '3') then
                          ArqTemp[14] := ArqTemp[15] + 'Periodo Entrega:' + Trim(ArqTempO[2]) else
                          if (ArqTempO[1] = '4') then
                            ArqTemp[14] := ArqTemp[14] + 'Pedido Cliente:' + Trim(ArqTempO[2]) else
                            if (ArqTempO[1] = '5') then
                              ArqTemp[14] := ArqTemp[14] + 'Encarte:' + Trim(ArqTempO[2]) else
                              if (ArqTempO[1] = '6') then
                                ArqTemp[14] := ArqTemp[14] + 'Incluir:' + Trim(ArqTempO[2]) else
                                if (ArqTempO[1] = '7') then
                                  ArqTemp[14] := ArqTemp[14] + 'Juntar no Pedido:' + Trim(ArqTempO[2]) else
                                  if (ArqTempO[1] = '8') then
                                    ArqTemp[14] := ArqTemp[14] + 'Encarte Rede:' + Trim(ArqTempO[2]) else
                                    if ArqTemp[14] = '0' then
                                      ArqTemp[14] := ArqTemp[14] + 'pve' + arqTemp[0] + Char(9);
                    //if ArqTemp[0] = '11' then
                    //begin
                    //Showmessage(ArqTemp[14]);
                    //end;                   end;
              end;             ArqTempO.Free;             Sped := '';
            for L := 0 to ArqTemp.Count - 1 do
              begin
                if (L = ArqTemp.Count - 1) then
                  Sped := Sped + ArqTemp[L] else
                  if ((L = 2) or (L = 11)) then
                    Sped := Sped + ArqTemp[L] + ' ' else
                    Sped := Sped + ArqTemp[L] + Char(9);               end;             //Atribui o valor total, peso total ao pedido
            vPeso := 0;
            for I := 0 to ArqItem.count - 1 do
              begin
                ArqTempI := TstringList.Create;
                ArqTempI.Delimiter := char(9);
                ArqTempI.QuoteChar := '"';
                ArqTempI.DelimitedText := ArqItem[i];
                //ArqTempI.Savetofile('peditem' + ArqTemp[0] + '.txt');
                vPeso := StrToCurr(ArqTempI[2]);
                vPesoT := vPesoT + vPeso;
                sVAlor := ArqTempI[4];
                sValor := TiraPontoeVirgula(sValor);
                vValor := StrToFloat(sVAlor);
                vTotal := vTotal + (vValor * vPeso)               end;
            Sped := Sped + Char(9) + CurrTostr(vPesoT);
            Sped := Sped + Char(9) + CurrTostr(vTotal);
            ArqSaida.Add(Sped); //cabecalho do pedido             //junta os itens ao cabeçalho do pedido
            for I := 0 to ArqItem.count - 1 do
              begin
                ArqTempI := TstringList.Create;
                ArqTempI.Delimiter := char(9);
                ArqTempI.QuoteChar := '"';
                ArqTempI.DelimitedText := ArqItem[i];
                if ArqTemp[0] = ArqTempI[0] then
                  ArqSaida.Add(ArqItem.Strings[I]);
              end;
            ArqTempI.Free;             ArqSaida.SaveToFile('pve' + Formatar(ArqTemp[0], 6, False, '0') + '.txt');
            ArqTemp.Free;
            ArqSaida.Free;           end;         ArqPed.Free;
        ArqItem.Free;
        ArqObs.Free;       except
       on  E : Exception do
        begin
        msg := msg + #10#13 + E.message + ' PVE ' +  ArqPed[0];
        end;
      end;     end; end;
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, se o seu problema é quando ler 17 posições e as vezes 18, o problema é o arquivo, não tem como adivinhar, um arquivo txt, tem este problema,se fosse um XML, seria muito mais fácil. Quanto ao tab, os seus arquivos não tem TAB, apenas uma quebra de linha, correto ?
  Agora qual é o padrão ? 17 linhas ? ou 18 LInhas ? Sem um padrão até mesmo no Excel, você verá esta diferença.

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Me de um tempinho, vou te enviar o arquivo que vem do fornecedor.   Att.. Horoi
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, sem problemas fico no aguardo.


Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Wesley,     O problema é que quando o campo 14 - Observação vem nulo fica dois tab  por isso o pedido 18 tem uma linha a menos do que o pedido 19 apos a utlização da Tstringlist. E o campo 3 Data do Pedido é um campo unico data e hora e a TstringList esta separando.       Segue pedido do fornecedor: http://video.devmedia.com.br/discovirtual/173622/pc_20091105_133859.rar     Lay out   D Decimal numérico inteiro 2147483648
S Texto/String Sem limite caso coluna T não
preenchido
F Numérico com 2 casas decimais/Float 2 casas decimais caso coluna T
não preenchido
B Booleano – trate como um Decimal 0 (Falso) ou 1 (Verdadeiro)
T Time/Data   Arquivo de Pedidos Sentido Polibrás -> Empresas 1.a – Cabeçalho do Pedido (pc_AAAAMMDD_HHMMSS.ped)
Campo Tipo Ini Tam Observações
1 Código do Pedido D
2 Organização de venda D
3 Data do Pedido T YYYY-MM-DD HH:MM:SS-03
4 Código do Vendedor S
5 Código do Cliente S
6 Código do Meio S
7 Código do Prazo S
8 Código da Tabela S
9 Código do Tipo de Venda S
10 Situação B 0 – Liberado ; 1 - Bloqueado
11 Data Extra T YYYY-MM-DD HH:MM:SS-03
12 Cliente Retira D 2 – Retira ; 0 – Não Retira
13 Código do Cliente Fatura S
14 Observação S Observação Padrão
15 IPI F
16 Desconto Pé do Talão F     Att.. Ricardo  
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, estou analisando o chamado. Logo retornarei.


Att,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, fiz um teste com 3 arquivos que você me mandou, ".pad", os mesmos me parecem estar corretos, veja o exemplo que montei.

Link : http://www.rwsolution.com.br/Pedido_origem.rar

Um abraço

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Wesley,     Quando separo os campos, o campo data e hora deveria ficar junto mas não fica criando uma nova posição.   O arquivo deveria ter 15 posições, esta separando data e hora. Ou confundido espaço simples com char(9) tab.     Se verificar os ped cab vera o que esta acontecendo.   Se eu abrir o arquivo c usando o excel separdo por tabulação, aparece exatemente 15 posições começando do 0.           http://video.devmedia.com.br/discovirtual/173622/Pedido_origem_new.rar     Att.. Ricardo        
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, veja se esta alteração ajuda,

  //Arquivo 1
  Lista1 := TStringList.Create;

  Lista1.LoadFromFile('a.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste1.txt');

  //Arquivo 2
  Lista1.LoadFromFile('b.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste2.txt');


  //Arquivo 3
  Lista1.LoadFromFile('C.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste3.txt');

Fico no aguardo da sua resposta,

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Caro Amigo,   Infelismente não.   Continua na mesma.   11
100
2009-08-25
13:22:08-03
51516
6084
1
P000
2
851
0
2009-08-25
13:22:08-03
0
0
0
0
    var
  i : Integer;
begin
//Arquivo 1
  Lista1 := TStringList.Create;   Lista1.LoadFromFile('a.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste1.txt');   //Arquivo 2
  Lista1.LoadFromFile('b.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste2.txt');
  //Arquivo 3
  Lista1.LoadFromFile('C.ped');
  Lista1.Delimiter := Char(9);
  Lista1.SaveToFile('teste3.txt');     Lista1.LoadFromFile('teste3.txt');     for i := 0 to Lista1.Count -1 do
  begin   Lista2.DelimitedText := Lista1[i];   Lista2.SaveToFile('pedcabteste'+ Inttostr(i) +'.txt');
  end;
Att.. Ricardo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro,

Olha só com o código que eu fiz os meus arquivos ficam salvos da seguinte forma, senao for assim não estou conseguindo entender o que você esta querendo fazer, os arquivos não tem que ficar assim ? Data e hra na mesma linha? Correto ?








Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Ola,   Data e hora na mesma linha esta correto.     O problema é na hora de tratar os dados delimitados.     for i := 0 to Lista1.Count -1 do
  begin   Lista2.DelimitedText := Lista1[i];  // Lista2.SaveToFile('pedcabteste'+ Inttostr(i) +'.txt');   ShowMessage(Lista2[2]); //data   ShowMessage(Lista2[3]); // hora   end;
  O campo data e hora tem que estar na mesma posição, sendo que eles não vem separdos por tab.   Faz um teste fazendo um favor.     Att.. Ricardo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, o que você quer dizer com a seguinte linha

for i := 0 to Lista1.Count -1 do
  begin   Lista2.DelimitedText := Lista1[i];   Lista2.DelimitedText := Lista1.DelimitedText; //Não seria assim não ?
  ShowMessage(Lista2[2]); //data   ShowMessage(Lista2[3]); // hora   end;

Realmente desta forma que você esta fazendo ele esta quebrando em data e hora.

Não seria pegar o mesmo delimiter da Lista1 ? E pra que ter 2 listas ?

Att,

Wesley Y


GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Preciso que o arquivo manipulado pela sttinglist ou outra forma me de as 16 posições começado do 1 e data e hora no mesmo campo.   Observe o anexo:     http://video.devmedia.com.br/discovirtual/173622/TESTE3.rar     Att.. Horoi
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá meu caro, com este arquivo que você mandou, não consigo quebrar o mesmo, pois não existe somente o tab como separador, me diz uma coisa, quem te gera este arquivo? Os arquivos .pad, funcionam porém este txt não funciona, se por um acaso, você copiou e montou este teste3.txt, o fato de ter copiado poder ser que tenha perdido a formatação. Quem sabe da forma que for gerado este arquivo, não possamos resolver de outra forma.

Fico no aguardo


Att

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Perfeito, como vc sonseguiu o .ped?   Eu preciso pegar o .ped e trabalhar nele para gerar outro, com  o mesmo delmitador.   Att.. Ricardo        
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Perfeito, como vc sonseguiu o .ped?   Eu preciso pegar o .ped e trabalhar nele para gerar outro, com  o mesmo delmitador.   Att.. Ricardo        
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

OLá amigo, vamos lá.

1- Você consegue salvar o arquivo com separador sendo o ";' , certo ?eu fiz um teste desta forma, e funcionou, veja o arquivo como eu deixei.


10;100;2009-08-25 13:08:04-03;51516;18330;1;P114;27;851;0;2009-08-25 13:08:04-03;0;0;0;0
11;100;2009-08-25 13:22:08-03;51516;6084;1;P000;2;851;0;2009-08-25 13:22:08-03;0;0;0;0
12;100;2009-08-25 13:46:53-03;51516;7443;1;P107;27;851;0;2009-08-25 13:46:53-03;0;0;0;0
13;100;2009-08-25 13:50:19-03;51516;8163;1;P103;27;851;0;2009-08-25 13:50:19-03;0;0;1:Sim;0;0

Todo separado por ";", assim com a rotina que eu desenvolvi você pode facilmente quebrar este arquivo, veja a função :


function TForm1.Explode(str, separador: string): TStringList;
var
  p: integer;
begin
  Result := TStringList.Create;

  p := Pos(separador, str);
  while (p > 0) do
  begin
    Result.Add(Copy(str, 1, p-1));
    Delete(str, 1, p + Length(separador) - 1);
    p := Pos(separador, str);
  end;

  if (str <> '') then
    Result.Add(str);
end;



E por último crie uma  TStringList, e coloque um memo, e um botão, no clique do botão implemente o seguinte.


procedure TForm1.Button1Click(Sender: TObject);
Var
  I : Integer;
begin
  Lista:= TStringList.Create;
  Lista.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'd.ped');
  For I := 0 to Pred(Lista.Count) do
  begin
      Memo1.Lines.AddStrings(Explode(Lista.Strings[I],'#9'));
  end;
end;



d.ped = arquivo separado pro ";"

Faça esta adaptação e veja se não lhe atende.

Forte abraço,

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, consegui fazer funcionar o exemplo ? Estamos no aguardo para qualquer duvida

UM abraço

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,     O problema é que o arquivo não vem por ponto e virgula. E nem esta configurado conforme abaixo.    http://forum.devmedia.com.br/viewtopic.php?p=332601&sid=d15993e49f6ca74704be2f6e495786d8   Achei isto no forum da DEVMEDIA.     note que o desmembramento poderia ser feito com a propriedade DelimitedText em conjunto com a propriedade QuoteChar e Delimiter da stringlist, porém dessa forma, nas colunas em que o conteudo tenha espaços em brancos, estes DEVERÃO estar entre aspas, caso contrário, cada espaço será considerado um separador. para ilustrar:
12[TAB]TESTE DE CAMPO[TAB]VALOR 1[ENTER] resulta em:
12
TESTE
DE
CAMPO
VALOR
1

12[TAB]'TESTE DE CAMPO'[TAB]'VALOR 1'[ENTER] (conteúdo entre aspas) resulta em:
12
TESTE DE CAMPO
VALOR 1     O que me intrigou é que no excel ou no acess importa certo sem que o conteudo esteja entre aspas simples ou dupla.     Sera que não deveria usar o QuotedChar?   sl.Delimiter := #9; // [tab]
  sl.QuoteChar := #39 // 34 para aspas duplas, 39 para aspas simples
  Se a classe não resolve.  Pode encerrar.   No momento vou tentar resolver de outra forma.       Muito Obrigado.   Att.. Ricardo
         
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo,
  Desculpe a demora, porém não me conformei com o seu problema, estava intrigado com isso, veja a solução.

Adicione um Button, e um Memo, e um OpenDialog(para localizar os arquivos), e crie uma função chamada Explode

function TForm1.Explode(str, separador: string): TStringList;
var
  p: integer;
begin
  Result := TStringList.Create;

  p := Pos(separador, str);
  while (p > 0) do
  begin
    Result.Add(Copy(str, 1, p-1));
    Delete(str, 1, p + Length(separador) - 1);
    p := Pos(separador, str);
  end;

  if (str <> '') then
    Result.Add(str);
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  I : Integer;
begin
  if OpenDialog1.Execute then
  begin
    Lista:= TStringList.Create;
    Lista.LoadFromFile(OpenDialog1.FileName);
    For I := 0 to Pred(Lista.Count) do
        Memo1.Lines.AddStrings(Explode(Lista.Strings[I],'#9'));
  end;
end;


Teste o exemplo e me diga o resultado.

Um abraço

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Coloquei a rotina abaixo e o resultado foi o mesmo.      lista2.Delimiter:= #9;
   lista2.DelimitedText :=  memo1.Text;
   for I := 0 to  Pred(Lista2.Count) do
   begin    ShowMessage(lista2.Strings[i]);    end;
Att.. Ricardo.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, não entendi, esta rotina funcionou ? Você fez como lhe falei ? Fez o exemplo ? E não funcionou foi isso ?

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Desculpe.   Fiz da forma que vc disse e não funcionou.   Att.. Ricardo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo,

 Veja o link http://www.rwsolution.com.br/Teste_TAB.rar

 O meu exemplo esta funcionando, veja se consegue funcionar.


Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá   O Exemplo executa.   Mas como ler cada coluna separado por tab?   Att.. Ricardo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, este é o a.ped , onde voCê encontra as barras em negrito são os Tabs que existem no arquivo.



E aqui é o memo com a função que desenvolvi, para quebrar por tab



Não é isso que você quer ? Senão for não estou conseguindo entender o que realmente você quer

Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Fiz o teste aqui e não deu certo.     procedure TForm1.btn1Click(Sender: TObject);
var
  lista2: TStringList;
  I: Integer;
begin   lista2 := TStringList.Create;
  lista2.Delimiter := #9;
  lista2.DelimitedText := Memo1.Text;   for I := 0 to Pred(Lista2.Count) do
    begin
      lista2.DelimitedText := memo1.Lines[i];
      ShowMessage(lista2[0]); //cooluna zero
      ShowMessage(lista2[1]); //cooluna um
      ShowMessage(lista2[2]); //cooluna dois     end;   lista2.Free; end;
  O conteudo da coluna dois na posição 1 da linha deveria ser 2009-08-31 13:13:15-03 e aparece somente a data 2009-08-31.     Veja como fica.       Att.. Ricardo      
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

31/10/2009

Olá amigo, o que você esta tentando fazer não vai funcionar, pois o memo foi "montado" de acordo com a extração da função explode.
  Não tem como gerar este arquivo separado por ";" ? Pois da maneira que está parece que foi gerado errado ou algo do tipo, pois ele consegue separar a linha

10    4    999999
10    1    2009-08-31 13:13:15-03
11    2    nao usar.

Mas parece que o caracter que esta entre as colunas não é um tab, já diferente do que esta na data, pois ele divide em 2 colunas.
 
Infelizmente não consegui ver outra forma, estou procurando, mas não estou consegui resolver estes teus arquivos.


Att,

Wesley Y
GOSTEI 0
Frigorifico Sa

Frigorifico Sa

31/10/2009

Olá,   Sem problema neste arquivo como só uma coluna esta dando problema, consigo resolver de outra forma.   Se futuramente aparecer outro peço para gerarem com separador ";" ou por tab da forma correta.   Pode Encerrar.   Muito Obrigado.   Att.. Ricardo
GOSTEI 0
POSTAR