Imprimi Página | Fechar janela |
Array Out of Bounds (2 0f 0) Importar CSV Produtos Impresso de: Helpfacil - Portal do conhecimento Nome do Forum: ADVPL Descrição do Forum: Dúvidas sobre a programação em ADVPL URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44598 Data da Impressão: sexta-feira, 4 de outubro de 2024 at 23:28 Topico: Array Out of Bounds (2 0f 0) Importar CSV Produtos Postado por: LUCADVPL Assunto: Array Out of Bounds (2 0f 0) Importar CSV Produtos Data Postagem: quinta-feira, 5 de setembro de 2024 at 15:20 Fala pessoal boa tarde, blz? Eu estou fazendo uma função para importar um csv de produtos para a tabela SB1. Nesse CSV os campos não estão escritos iguais aos campos da SB1, então estou fazendo uma condição que "traduz" os campos do CSV para os campos da SB1. O problema que estou enfrentando é de Array Out Of Bounds (2 of 0) na linha 57: Aadd(aDadosSB1, {"B1_COD" , aDados[2], NIL}). Porém conforme a iteração do for acontece, os dados de aDados são adicionados ao array aDadosSB1 normalmente. Somente no final da execução (acredito eu que no ExecAuto), que da esse erro. Alguem tem alguma ideia? Obrigado desde já. Segue a função: User Function fImpCsv() Local cDiret Local cLinha := "" Local lPrimlin := .T. Local aCampos := {} // Campos do Cabecalho Local aDados := {} // Linhas/Dados Local aDadosSB1 := {} Local i Local j Private aErro := {} PUBLIC __TTSINUSE := .T. PUBLIC __cLogSiga := "" cDiret := cGetFile( ‘Arquivo CSV|*.csv| Arquivo TXT|*.txt| Arquivo XML|*.xml‘,; // [ cMascara], ‘Selecao de Arquivos‘,; // [ cTitulo], 0,; // [ cMascPadrao], ‘C:\‘,; // [ cDirInicial], .F.,; // [ lSalvar], GETF_LOCALHARD + GETF_NETWORKDRIVE,; // [ nOpcoes], .T.) // Processo de preenchimento do array de cabecalho e do array de dados FT_FUSE(cDiret) ProcRegua(FT_FLASTREC()) FT_FGOTOP() While ! FT_FEOF() IncProc("Lendo arquivo texto...") cLinha := FT_FREADLN() If lPrimlin // Primeira linha do arquivo - Cabecalho aCampos := Separa(cLinha,";",.T.) // Quebra das linhas ; lPrimlin := .F. Else aAdd(aDados, Separa(cLinha,";",.T.)) EndIf FT_FSKIP() EndDo // Fim do processo // Importação dos registros para a tabela SB1 Begin Transaction ProcRegua(Len(aDados)) For i := 1 to Len(aDados) IncProc("Importando Registros...") // Destino // Origem Aadd(aDadosSB1, {"B1_COD" , aDados[2], NIL}) Aadd(aDadosSB1, {"B1_DESC" , aDados[3], NIL}) Aadd(aDadosSB1, {"B1_UM" , aDados[4], NIL}) Aadd(aDadosSB1, {"B1_POSIPI" , aDados[5], NIL}) Aadd(aDadosSB1, {"B1_ORIGEM" , aDados[6], NIL}) Aadd(aDadosSB1, {"B1_PRV1" , aDados[7], NIL}) Aadd(aDadosSB1, {"B1_IPI" , aDados[8], NIL}) Aadd(aDadosSB1, {"B1_OBS" , aDados[9], NIL}) Aadd(aDadosSB1, {"B1_SITPROD" , aDados[10], NIL}) Aadd(aDadosSB1, {"B1_QTDINIC" , aDados[11], NIL}) Aadd(aDadosSB1, {"B1_CUSTD" , aDados[12], NIL}) Aadd(aDadosSB1, {"B1_PROC" , aDados[13], NIL}) // Fornecedor - Nome do Fornecedor Aadd(aDadosSB1, {"B1_LOCALIZ" , aDados[15], NIL}) Aadd(aDadosSB1, {"B1_EMAX" , aDados[16], NIL}) Aadd(aDadosSB1, {"B1_ESTSEG" , aDados[17], NIL}) Aadd(aDadosSB1, {"B1_PESO" , aDados[18], NIL}) Aadd(aDadosSB1, {"B1_PESBRU" , aDados[19], NIL}) Aadd(aDadosSB1, {"B1_CODGTIN" , aDados[20], NIL}) Aadd(aDadosSB1, {"B1_CODEMB" , aDados[21], NIL}) // Largura do Produto // Altura do Produto // Profundidade Aadd(aDadosSB1, {"B1_PRVALID" , aDados[25], NIL}) // Descrição do Produto no Fornecedor Aadd(aDadosSB1, {"B1_ESPECIF" , aDados[27], NIL})- // Unidade por Caixa // Produto Variação Aadd(aDadosSB1, {"B1_IPPT" , aDados[30], NIL}) Aadd(aDadosSB1, {"B1_SELOEN" , aDados[31], NIL}) Aadd(aDadosSB1, {"B1_CNAE" , aDados[32], NIL}) Aadd(aDadosSB1, {"B1_TIPO" , aDados[33], NIL}) // Grupo de Tags/Tags Aadd(aDadosSB1, {"B1_TFETHAB" , aDados[35], NIL}) Aadd(aDadosSB1, {"B1_PRODPAI" , aDados[36], NIL}) Aadd(aDadosSB1, {"B1_CODBAR" , aDados[37], NIL}) Aadd(aDadosSB1, {"B1_GRUPO" , aDados[38], NIL}) // Marca - B1_FABRIC - Talvez Aadd(aDadosSB1, {"B1_CEST" , aDados[40], NIL}) // Volumes Aadd(aDadosSB1, {"B1_ESPECIF" , aDados[42], NIL}) // Cross-Docking // Url Imagens Externas // Link Externo // Meses Garantia no Fornecedor // Clonar dados do pai // Condição do produto // Frete Grátis Aadd(aDadosSB1, {"B1_NUMFCI" , aDados[50], NIL}) Aadd(aDadosSB1, {"B1_SETOR" , aDados[51], NIL}) // Unidade de Medida Aadd(aDadosSB1, {"B1_UPRC" , aDados[53], NIL}) Aadd(aDadosSB1, {"B1_REFBAS" , aDados[54], NIL}) // Valor ICMS ST para retenção Aadd(aDadosSB1, {"B1_INT_ICM" , aDados[56], NIL}) // Categoria do produto // Informações adicionais Next i End Transaction // Execução Mata010 MSExecAuto({|x,y| Mata010(x,y)},aDadosSB1,3) ApMsgInfo("Importação concluída com sucesso!", "Sucesso!") Return Respostas: Postado Por: FPAZINATO Data Postagem: sexta-feira, 6 de setembro de 2024 at 08:48 Bom dia, LUCADVPL Espero que esteja tudo bem com o senhor. Acredito que o problema está no ponto de chamada do ExecAuto. Você está passando todas as linhas do arquivo de uma só vez no array aDadosSB1. Esta chamada deve ocorrer a cada iteração do FOR Teste alterando a parte final do for no código para algo deste tipo. . . . Aadd(aDadosSB1, {"B1_INT_ICM" , aDados[56], NIL}) // Categoria do produto // Informações adicionais // Execução Mata010 MSExecAuto({|x,y| Mata010(x,y)},aDadosSB1,3) // Limpa o array de dados do produto posicionado aDadosSB1 := {} Next i Acredito ser necessário revisar as posições do transaction. Outras alternativas podem ser colocar toda a execução no mesmo While ao inves de segmentar em capturar de dados e gravação de dados. Ou separar cada etapa em uma Static Function chamadas na função principal para aproveitar melhor os conceitos de clean code e reutilização de codigo. Atenciosamente. Postado Por: ROBERTOMEN Data Postagem: sexta-feira, 6 de setembro de 2024 at 11:49 Bom dia. Anexe o .csv para analisarmos... Postado Por: LUCADVPL Data Postagem: sexta-feira, 6 de setembro de 2024 at 14:21 Fala FPAZINATO, obrigado pelo retorno, espero que esteja bem também. Show de bola sua dica, me ajudou. O MsExecAuto começou a rodar. Porém estava debugando agora, e la pelo registro 2500 e pouco deu pau dnv, com o mesmo problema. Mas vou continuar testando, obrigado pela ajuda. Postado Por: LUCADVPL Data Postagem: sexta-feira, 6 de setembro de 2024 at 14:24 Fala ROBERTOMEN, o csv ultrapassa o tamanho permitido de envio aqui no chat Postado Por: LUCADVPL Data Postagem: sexta-feira, 6 de setembro de 2024 at 14:26 Segue linhas iniciais do csv: ID;Código;Descrição;Unidade;NCM;Origem;Preço;Valor IPI fixo;Observações;Situação;Estoque;Preço de custo;Cód no fornecedor;Fornecedor;Localização;Estoque maximo;Estoque minimo;Peso líquido (Kg);Peso bruto (Kg);GTIN/EAN;GTIN/EAN da embalagem;Largura do Produto;Altura do Produto;Profundidade do produto;Data Validade;Descrição do Produto no Fornecedor;Descrição Complementar;Unidade por Caixa;Produto Variação;Tipo Produção;Classe de enquadramento do IPI;Código da lista de serviços;Tipo do item;Grupo de Tags/Tags;Tributos;Código Pai;Código Integração;Grupo de produtos;Marca;CEST;Volumes;Descrição Curta;Cross-Docking;URL Imagens Externas;Link Externo;Meses Garantia no Fornecedor;Clonar dados do pai;Condição do produto;Frete Grátis;Número FCI;Vídeo;Departamento;Unidade de medida;Preço de compra;Valor base ICMS ST para retenção;Valor ICMS ST para retenção;Valor ICMS próprio do substituto;Categoria do produto;Informações Adicionais 6129529196;12416 ;PARAFUSADEIRA1/4ABAT3,6LI - WS2012;PC;8467.29.92;2;163,2860000000;0,00;;Ativo;0,00;81,6430000000; WS2012;POSITEC IMPORTACAO DE FERRAMENTAS LTDA;A/43;0,00;0,00;0,000;0,000; 6924328310150; 6924328310150;0.00;0.00;0.00;;PARAFUSADEIRA1/4ABAT3,6LI;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado com ST;;08.019.00;0;;0; https://www.google.com/imgres?imgurl=https://images-americanas.b2w.io/produtos/01/00/oferta/48106/2/48106249_3SZ.jpg&imgrefurl=https://www.americanas.com.br/produto/48106246&docid=zxWYUa5lhnx-XM&tbnid=hpHmphxbTGkxBM:&vet=1&w=1000&h=1000&source=sh/x/im;;0;NÃO;NOVO;NÃO;;;;Centímetro;73,1900000000;0,0000;0,0000;0,0000;; 16198253228;PC6 ;PURGADOR 1/4 MOTOCOMPRESSOR;UN;8414.90.39;2;2,2400000000;0,00;;Ativo;0,00;2,2400000000; 00006167.6;GARTHEN INDUSTRIA E COMERCIO DE MAQUINAS LTDA;;0,00;0,00;0,000;0,000; ; ;0.00;0.00;0.00;;PURGADOR 1/4 MOTOCOMPRESSOR;;0,00;;Terceiros;;;Outros insumos;;0,00; ;0;Importado sem ST;GARTHEN;;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;2,2400000000;0,0000;0,0000;0,0000;; 10883178654;15450 ;( ) MASCARA DESCARTAVEL COMUM - 3 CAMADAS (6,83%);UN;6307.90.10;2;34,0000000000;0,00;;Inativo;0,00;17,0000000000; 0000008;MEDICAL SYSTEM BRASIL IMPORTACAO E COMER;;0,00;0,00;0,000;0,000; 656750365854; 656750365854;0.00;0.00;0.00;;( ) MASCARA DESCARTAVEL COMUM - 3 CAMADAS (6,83%);;0,00;Produto;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;Medical System;;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;17,0000000000;0,0000;0,0000;0,0000;; 15868576478;20643 ;(E) 1653 MOP LAVA E SECA FIT - 972694;UN;9603.90.00;2;80,8920000000;0,00;;Ativo;229,00;40,4460000000; 972694;PERFECT EQUIPAMENTOS DE LIMPEZA LTDA;A19/48,07 A17/05,06;0,00;0,00;0,000;0,000; 7891055797396; 7891055797396;0.00;0.00;0.00;;F*1653 MOP LAVA E SECA FIT 1X1 - MOP LAVA E SECA FIT;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;Condor;;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;40,4500000000;0,0000;0,0000;0,0000;; 16310347034;24154 ;(E) 3501AMAR CAIXA COM 01 RECIPIENTE TERMICO - CAIXA TERMICA 20L AMARELO 2023 - 58372;un;3923.10.90;0;87,4927333334;0,00;;Ativo;700,00;43,7463666667; 58372;TERMOLAR S/A.;X16 A21/01,02,03,04;0,00;0,00;0,000;0,000; 7891023583723; 7891023583723;0.00;0.00;0.00;;(E) 3501AMAR CAIXA COM 01 RECIPIENTE TERMICO - CAIXA TERMICA 20L AMARELO 2023 - Numero da ;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Nacional sem ST;TERMOLAR S/A.;;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;39,8600000000;0,0000;0,0000;0,0000;; 16298559457;24098 ;(E) 3501PRT CAIXA COM 01 RECIPIENTE TERMICO CAIXA TERMICA 20L PRETA AMARELO - 58358;UN;3923.10.90;0;87,4927076924;0,00;;Ativo;4.355,00;43,7463538462; 58358;TERMOLAR S/A.;ATRAS DO A16 D47,355,541 A19/04 A17/10 A23/02,03;0,00;0,00;0,000;0,000; 7891023583587; 7891023571959;0.00;0.00;0.00;;3501PRT CAIXA COM 01 RECIPIENTE TERMICO CAIXA TERMICA 20L PRETA AMARELLO - Numero da FCI: D361A6D7-5764-43A8-98DB-E90FFA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Nacional sem ST;TERMOLAR S/A.;;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;39,8600000000;0,0000;0,0000;0,0000;; 16228500340;23829 ;(E) ADAPTADOR DE LIXADEIRA TRIANGULAR - 7495;UN;8467.99.00;2;60,0000000000;0,00;;Ativo;0,00;30,0000000000; 6918041076956;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A134/Z48;0,00;0,00;0,000;0,000; 6918041074956; 6918041074956;0.00;0.00;0.00;;KIT LIXA PARA ESMERILHADEIRA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado com ST;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;08.019.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;30,0000000000;0,0000;0,0000;0,0000;; 16113573375;22920 ;(E) ADAPTADOR FURADEIRA/PARAFUSADEIRA CORTA CHAPA - 691804105859;UN;8207.90.00;2;70,0000000000;0,00;;Ativo;140,00;35,0000000000; 691804105859;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A135;0,00;0,00;0,000;0,000; 6918041058598; 6918041058598;0.00;0.00;0.00;;ADAPTADOR FURADEIRA/PARAFUSADEIRA CORTA CHAPA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado com ST;FORÇA CHINESA;08.013.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;35,0000000000;0,0000;0,0000;0,0000;; 16168985644;23403 ;(E) ADAPTADOR LIXADEIRA DE CINTA PARA ESMERILHADEIRA - 6918041061635;UN;8467.99.00;2;150,0000000000;0,00;;Ativo;10,00;75,0000000000; 6918041061635;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A264;0,00;0,00;0,000;0,000; 6918041061635; 6918041061635;0.00;0.00;0.00;;ADAPTADOR LIXADEIRA DE CINTA PARA PARAFUSADEIRA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;08.019.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;75,0000000000;0,0000;0,0000;0,0000;; 16194525590;23627 ;(E) ADAPTADOR PARA CHAVE DE IMPACTO - ACI21I;UN;8467.99.00;2;6,4172000000;0,00;;Ativo;0,00;3,2086000000; ACI21I;THE BLACK PARTICIPACOES LTDA;Z/14;0,00;0,00;0,000;0,000; ; ;0.00;0.00;0.00;;ADAPTADOR PARA CHAVE DE IMPACTO - ACI21I;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;THE BLACK PARTICIPACOES LTDA;08.019.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;3,0500000000;0,0000;0,0000;0,0000;; 16168986718;23404 ;(E) ADAPTADOR SERRA PARA FURADEIRA/ PARAFUSADEIRA - 6918041074987;UN;8467.99.00;2;60,0000000000;0,00;;Ativo;249,00;30,0000000000; 6918041074987;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A17/34,25,23 A18/16;0,00;0,00;0,000;0,000; 6918041074987; 6918041074987;0.00;0.00;0.00;;ADAPTADOR SERRA PARA FURADEIRA/ PARAFUSADEIRA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;08.019.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;30,0000000000;0,0000;0,0000;0,0000;; 16100994693;22761 ;(E) ADAPTADOR SOQUETE PARA PARAFUSAFEIRAS, FURADEIRA - 210000208;Un;8207.90.00;2;11,0000000000;0,00;;Ativo;27,00;5,5000000000; 2100002085277;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A20/42;0,00;0,00;0,000;0,000; 6918041057669; 6918041057669;0.00;0.00;0.00;;FERRAMENTAS INTERCAMBIAVEIS PARA FERRAMENTAS MANUAIS, SENDO ADAPTADOR SOQUETE PARA PARAFUSAFEIRAS, FURADEIRA;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado com ST;FORÇA CHINESA6918041057669;08.013.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;5,5000000000;0,0000;0,0000;0,0000;; 16168981877;23402 ;(E) ALICATE 5 EM 1 - 690008029002sj;UN;8203.20.10;2;170,0000000000;0,00;;Ativo;0,00;85,0000000000; 690008029002sj;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;A13/42-CD04/;0,00;0,00;0,000;0,000; 6918041062342; 6918041062342;0.00;0.00;0.00;;ALICATE 5 EM 1;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;FORCA CHINESA COMERCIO DE VARIEDADES EIRELI;08.008.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;85,0000000000;0,0000;0,0000;0,0000;; 16073766825;30350 ;(E) ALICATE BICO MEIA CANA 6 AC - AL8200;UN;8203.20.10;2;11,4878342100;0,00;;Ativo;1,00;5,7439171050; AL8200;BSD COMERCIO DE ELETRONICOS S.A. SC;A200;0,00;0,00;0,000;0,000; 7898722070387; 7898722070387;0.00;0.00;0.00;;Alicate bico meia cana 6 AC p;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;BSD;08.008.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;6,5000000000;0,0000;0,0000;0,0000;; 16073762858;30348 ;(E) ALICATE CORTE DIAGONAL 6 AL-8100 OZ;UN;8203.20.10;2;11,3400000000;0,00;;Ativo;0,00;5,6702802520; AL8100;BSD COMERCIO DE ELETRONICOS S.A. SC;A67;0,00;0,00;0,000;0,000; 7898722070370; 7898722070370;0.00;0.00;0.00;;Alicate corte diagonal 6 AC p;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;OZ;08.008.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;6,1800000000;0,0000;0,0000;0,0000;; 16143233456;23180 ;(E) Alicate de pressao 10‘‘ ap100;UN;8203.20.10;2;24,7200000000;0,00;;Ativo;49,00;12,3600000000; AP100;BSD COMERCIO DE ELETRONICOS S.A. SC;A90;0,00;0,00;0,000;0,000; 7898722071308; 7898722071308;0.00;0.00;0.00;;Alicate de pressao 10‘‘;;0,00;;Terceiros;;;Mercadoria para Revenda;;0,00; ;0;Importado sem ST;BSD;08.008.00;0;;0; ;;0;NÃO;NOVO;NÃO;;;;Centímetro;12,3600000000;0,0000;0,0000;0,0000;; Postado Por: EOLOSALES Data Postagem: sexta-feira, 6 de setembro de 2024 at 16:27 Caro LUCADVPL, O Protheus tem um acelerador de importação (Mile) em que você não precisa de nenhum código. Basta configurar o LAYOUT de importação com a sequencia dos dados da sua base CSV e o Protheus faz o restante via ExecAuto. Segue link de um vídeo da TOTVS para lhe orientar melhor: https://www.youtube.com/watch?v=qD346qkdMfQ Postado Por: LUCADVPL Data Postagem: quinta-feira, 12 de setembro de 2024 at 16:14 Muito obrigado EOLOSALES! |
Imprimir Página | Fechar Janela |