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