Imprimi Página | Fechar janela |
Importação CSV 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=43738 Data da Impressão: quinta-feira, 18 de abril de 2024 at 21:53 Topico: Importação CSV Postado por: ADVPL_OS Assunto: Importação CSV Data Postagem: terça-feira, 10 de agosto de 2021 at 05:56 Bom dia galera, sou novato no ADVPL e com base em alguns fontes estou tentando fazer a importação de um arquivo de retorno que recebo em csv. Quero fazer esse arquivo pegar o índice 3 da minha SZB e atualizar campos específicos com os dados do arquivo. Porém ele não cai no bloco do Reclock de alteração. Alguém consegue me dar uma ajuda???????? User Function TIMPCSV() Processa({||IMPSZB()},"Importando CSV. Aguarde...") Return Static Function IMPSZB() Local nx := 0 Local cCodFunc := "" Private aTxt := {} Private aRet := {} If ParamBox({ {6,"Arquivo",SPACE(50),"","FILE(mv_par01)","", 55 ,.T.,"Arquivo .CSV |*.CSV"}},; "Importa Retorno Ticket",@aRet,,) //{1,"Importar .CSV",SPACE(10),"","dbSeek(xFilial(‘AF8‘)+AllTrim(mv_par03))","AF8","", 45 ,.F.},; //{3,"Versao do Project",1 ,{"Portugues","Ingles"},70,,.F.},; If (nHandle := FT_FUse(AllTrim(aRet[1])))== -1 Help(" ",1,"NOFILEIMPOR") Return EndIf FT_FGOTOP() While !FT_FEOF() PmsIncProc(.T.) cLinha := FT_FREADLN() AADD(aTxt,{}) nCampo := 1 While At(";",cLinha)>0 aAdd(aTxt[Len(aTxt)],Substr(cLinha,1,At(";",cLinha)-1)) nCampo ++ cLinha := StrTran(Substr(cLinha,At(";",cLinha)+1,Len(cLinha)-At(";",cLinha)),‘"‘,‘‘) Enddo If Len(AllTrim(cLinha)) > 0 aAdd(aTxt[Len(aTxt)],StrTran(Substr(cLinha,1,Len(cLinha)),‘"‘,‘‘) ) Else aAdd(aTxt[Len(aTxt)],"") Endif FT_FSKIP() Enddo FT_FUSE() DBSELECTAREA("SZB") DBSETORDER(3) DBGOTOP() cFilSZB := xFilial("SZB") For nX := 2 to Len(aTxt) cZBMat := PADL(aTxt[nx][07],6,"0") cZBData := aTxt[nx][02] cZBPedi := aTxt[nx][01] cZBGSTT := aTxt[nx][34] cZBOBST := aTxt[nx][38] cZBVlPr := aTxt[nx][29] cZBVLOt := aTxt[nx][35] // *** Filtra os registros da Tabela *** // //SET FILTER TO (ZB_FILIAL+ZB_MAT+ZB_COMP) = (cFilSZB+cZBMat+cZBData) //DBGOTOP() IF DBSeek(xFilial("SZB")+ZB_MAT+ZB_COMP) // *** Se o Registro não for encontrado, ele abre um novo Registro em Branco e Grava as Informações da Importação *** // While !EOF() .AND. xFilial("SZB") == SZB->ZB_FILIAL .AND. SZB->ZB_MAT == cZBMat .AND. SZB->ZB_COMP == cZBData Reclock("SZB", .F.) SZB->ZB_PED1 := cZBPedi SZB->ZB_VLPRC1 := cZBVlPr SZB->ZB_SALDO1 := cZBVLOt SZB->ZB_GSTT := cZBGSTT SZB->ZB_OBST := cZBOBST SZB->(MsUnlock()) Enddo Set Filter To // *** Encerra o Filtro EndIF Next Nx ApMsgInfo("Importação concluída com sucesso!","Sucesso!") Endif Return Respostas: Postado Por: LABAMBAMOG Data Postagem: quarta-feira, 18 de agosto de 2021 at 21:59 #Include "Protheus.ch" User Function TIMPCSV() Processa({||IMPSZB()},"Importando CSV. Aguarde...") Return Static Function IMPSZB() Local nx := 0 Local nHandle := 0 Local aTxt := {} Local aRet := {} Local lExiste,cLinha,nAtual,nTotReg,cZBPedi,cZBData,cZBMat,cZBVlPr,cZBGSTT,cZBVLOt,cZBOBST //Cuidado com o uso de funções não disponibilizadas pela nave-mãe... //https://centraldeatendimento.totvs.com/hc/pt-br/articles/360026045651-MP-ADVPL-Fun%C3%A7%C3%A3o-parambox-gera-erro-em-ponto-de-entrada //http://www.blacktdn.com.br/2012/05/para-quem-precisar-desenvolver-uma.html //https://terminaldeinformacao.com/knowledgebase/parambox/ If ParamBox({ {6,"Arquivo",SPACE(50),"","FILE(mv_par01)","", 55 ,.T.,"Arquivo .CSV |*.CSV"} },; "Importa Retorno Ticket",@aRet,,) //{1,"Importar .CSV",SPACE(10),"","dbSeek(xFilial('AF8')+AllTrim(mv_par03))","AF8","", 45 ,.F.},; //{3,"Versao do Project",1 ,{"Portugues","Ingles"},70,,.F.},; If (nHandle := FT_FUse(AllTrim(aRet[1])))== -1 Help(" ",1,"NOFILEIMPOR") Return EndIf // Posiciona na primeira linha FT_FGoTop() nAtual := 0 nTotReg := FT_FLastRec() ProcRegua(nTotReg) While !FT_FEof() nAtual++ IncProc("Lendo arq. linha "+cValToChar(nAtual)+" de "+cValToChar(nTotReg)+"...") cLinha := FT_FReadLn() AADD(aTxt,{}) While At(";",cLinha) > 0 aAdd(aTxt[Len(aTxt)],Substr(cLinha,1,At(";",cLinha)-1)) cLinha := Substr(cLinha,At(";",cLinha)+1,Len(cLinha)) Enddo aAdd(aTxt[Len(aTxt)],cLinha) FT_FSkip() Enddo // Fecha o arquivo FT_FUse() dbSSelectArea("SZB") dbSetOrder(3) nAtual := 0 For nX := 2 to Len(aTxt) nAtual++ IncProc("Atualizando registro "+cValToChar(nAtual)+" de "+cValToChar(nTotReg)+"...") cZBPedi := aTxt[nx][01] cZBData := aTxt[nx][02] cZBMat := PADL(aTxt[nx][07],6,"0") cZBVlPr := aTxt[nx][29] cZBGSTT := aTxt[nx][34] cZBVLOt := aTxt[nx][35] cZBOBST := aTxt[nx][38] //Cara, baseado na sua linha do while (que não é necessária) "SZB->ZB_COMP == cZBData", //imagino que a chave 3 do SZB seja por matrícula e DtoC(data)), apesar de achar estranho o nome do campo "ZB_COMP" //parece mais como "componente", mas como não tenho como adivinhar, se a análise estiver errada, faça as //correções aqui e na atribuição do campo "SZB->ZB_COMP := CtoD(cZBData)" lExiste := dbSeek(xFilial("SZB")+cZBMat+DtoC(CtoD(cZBData))) Reclock("SZB", !lExiste) SZB->ZB_FILIAL := xFilial("SZB") SZB->ZB_PED1 := cZBPedi SZB->ZB_COMP := CtoD(cZBData) //Aqui imagino que no arq. csv o formato seja dd/mm/yy SZB->ZB_MAT := cZBMat SZB->ZB_VLPRC1 := cZBVlPr SZB->ZB_GSTT := cZBGSTT SZB->ZB_SALDO1 := cZBVLOt SZB->ZB_OBST := cZBOBST SZB->(MsUnlock()) Next Nx ApMsgInfo("Importação concluída com sucesso!","Sucesso!") Endif Return Boa sorte, t+ Postado Por: WALTERFCAR Data Postagem: quinta-feira, 19 de agosto de 2021 at 10:03 bom dia no suturo considere usar o FWFileReader() Vai ficar mais simples seu código https://tdn.totvs.com/display/framework/FWFileReader |
Imprimir Página | Fechar Janela |