|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
Array Out of Bounds (2 0f 0) Importar CSV Produtos |
|
Versão: |
12.1.2210 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
LUCADVPL
em 05/09/2024, 15:20 h
Local: SP Registro: 05/02/2024 Postagens: 14 |
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
|
|
|
Mensagem do
FPAZINATO
em 06/09/2024, 08:48 h
Local: RS Registro: 12/06/2024 Postagens: 1 |
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.
|
|
|
Mensagem do
ROBERTOMEN
em 06/09/2024, 11:49 h
Local: PR Registro: 04/07/2017 Postagens: 547 |
Bom dia.
Anexe o .csv para analisarmos... |
|
|
Mensagem do
LUCADVPL
em 06/09/2024, 14:21 h
Local: SP Registro: 05/02/2024 Postagens: 14 |
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. |
|
|
Mensagem do
LUCADVPL
em 06/09/2024, 14:24 h
Local: SP Registro: 05/02/2024 Postagens: 14 |
Fala ROBERTOMEN, o csv ultrapassa o tamanho permitido de envio aqui no chat
|
|
|
Mensagem do
LUCADVPL
em 06/09/2024, 14:26 h
Local: SP Registro: 05/02/2024 Postagens: 14 |
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;; |
|
|
Mensagem do
EOLOSALES
em 06/09/2024, 16:27 h
Local: PB Registro: 02/08/2024 Postagens: 1 |
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 |
|
|
Mensagem do
LUCADVPL
em 12/09/2024, 16:14 h
Local: SP Registro: 05/02/2024 Postagens: 14 |
Muito obrigado EOLOSALES!
|
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|