- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- INSERIR DADOS NA SC8
×
Linguagem de Programação ADVPL
Perguntas INSERIR DADOS NA SC8
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 4 meses atrás - 7 anos 4 meses atrás #32266
por manoelcarlosjunior
INSERIR DADOS NA SC8 foi criado por manoelcarlosjunior
Help Guys !!! estou montando uma rotina para atualizar minhas cotações via um arquivo .CSV recebido dos meus fornecedores.
Preciso inserir dados na SC8 tentei via msexeauto, juro que estava funcionando kkkk mas, já estou a quatro dias tentando analisar o erro e nada. Perguntas.:
1 - Pensei em tentar inserir esses dados para atualizar a cotação via insert, tem algum exemplo ADVPL ? 2 - Se puderem dar uma olhada para identificar o erro o código esta abaixo. 3 - Lebrando que não da erro simplesmente não atualiza a cotação ja debuguei centenas de vezes e não identifiquei o erro e msexecauto é o do MATA150.
USER FUNCTION ImporSC8()
Local aLayout := {} Local aArquivo := {} Local nPosicao := 0 Local nColuna := 0 Local i,j := 0 Local nLog := 0 Local cLinha := "" Local cMenErro := ""
//Local cBuffer := "" //Local cFileOpen := "" Local cTitulo1 := "Selecione o arquivo" Local cExtens := "Arquivo CSV | *.csv" Local cFilial := "" Local cNCotacao := "" Local cLoja := "" Local cCadastro := " deu erro" Local cNItem := ""Local cCFornec := "" Local cPreco := ""Local nPreco := ""Local cQuant := "" Local cLoja := "" Local cCond := "" Local cContato := "" Local cFilialEnt:= "" Local cMoeda := "" Local cEmissao := "" Local cSeguro := "" Local cProposta := "" Local cProduto := "" Local aCabec:={} Local aItens:={}
Private wConteudo := Nil Private lMsHelpAuto := .T. // se .t. direciona as mensagens do help Private lMsErroauto := .F. // necessario a criacao
wtam_array := 20 // VEM CONFORME A ESTRUTURA DO ARQUIVO ENVIADO - wtam_array := 22
cFileOpen := cGetFile(cExtens,cTitulo1,,,.T.)
If !File(cFileOpen) MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro) Return Endif
FT_FUSE(cFileOpen) //ABRIR FT_FGOTOP() //PONTO NO TOPO ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER FT_FGoTop()
While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO IncProc()
// Capturar dados // cBuffer := FT_FREADLN() //LENDO LINHA
nColuna := 0 nPosicao := 1 cLinha := FT_FReadLn()
AAdd(aArquivo,Array(wtam_array)) WLOG := "" For i := 1 To Len(cLinha)
If SubStr(cLinha,i,1) == ";" .Or. Len(cLinha) == i nColuna++
IF NCOLUNA == wtam_array aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i+1-nPosicao) else aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i-nPosicao) ENDIF
nPosicao := i + 1 EndIf
Next i
IF NCOLUNA < WTAM_ARRAY NCOLUNA += 1 FOR I := NCOLUNA TO WTAM_ARRAY aArquivo[Len(aArquivo),nColuna] := SPACE(1) NEXT ENDIF
IF .NOT. EMPTY(WLOG) FWrite(nLog, WLOG + " - " + CLINHA + CHR(13) + CHR(10) ) WERRO := .T. ENDIF
FT_FSkip()
EndDo
/IF WERRO // TEM ERRO DE FILIAL - NAO PROSSEGUE A IMPORTACAO FClose(nLog) MsgAlert("Processamento interrompido. Verificar o arquivo log: " + CFILELOG ) RETURN() ENDIF/
/// PROCESSANDO O ARQUIVO PARA GRAVAR NA TABELA DO PROTHEUS (SC8)
ProcRegua(Len(aArquivo))
//INCLUINDO O •
aSort(aArquivo,,,{|aX,aY| ax[1] < aY[1]})
For i := 1 To Len(aArquivo)
cFilialEnt:= aArquivo[02] cNCotacao := aArquivo[03] cProposta := aArquivo[04] cNItem := aArquivo[05] cEmissao := aArquivo[06] cCFornec := aArquivo[08] cLoja := aArquivo[09] cCond := aArquivo[16] cContato := aArquivo[11] cProduto := aArquivo[12] cQuant := aArquivo[15] cMoeda := aArquivo[17] cSeguro := aArquivo[18] cPreco := aArquivo[19]
//Tratamento ExecAuto
cCFornec1 := cValtoChar(StrZero(VAL(cCFornec),6)) cLoja1 := cValtoChar(StrZero(VAL(cLoja),2)) cFilialEnt1:= cValtoChar(StrZero(VAL(cFilialEnt),2)) cProposta1 := cValtoChar(StrZero(VAL(cProposta),2)) cProduto1 := cValtoChar(StrZero(VAL(cProduto),15)) cNItem1 := cValtoChar(StrZero(VAL(cNItem),4)) cNCotacao1 := cValtoChar(StrZero(VAL(cNCotacao),6)) cEmissao1 := SUBSTR(cEmissao,7,4)+SUBSTR(cEmissao,4,2)+SUBSTR(cEmissao,1,2)
// ---- EXEMPLO ALTERACAO DE UMA COTACAO JA EXISTENTE ----dbSelectArea("SC8") dbSetOrder( dbSeek(xFilial("SC8")+cNCotacao1+cCFornec1+cLoja1+cProduto1+cNItem1 ) aadd(aCabec,{"C8_FORNECE" , cCFornec1}) aadd(aCabec,{"C8_LOJA" , cLoja1}) aadd(aCabec,{"C8_COND" ,cCond })aadd(aCabec,{"C8_CONTATO" ,cContato }) aadd(aCabec,{"C8_FILENT" ,cFilialEnt1}) aadd(aCabec,{"C8_MOEDA" ,VAL(cMoeda)}) //{"C8_MOEDA" ,VAL(cMoeda)}) aadd(aCabec,{"C8_EMISSAO" ,cEmissao1}) aadd(aCabec,{"C8_SEGURO" ,VAL(cSeguro) }) aadd(aItens,{{"C8_NUMPRO", cProposta1,Nil},; //1 {"C8_PRODUTO",cProduto1,Nil},; {"C8_ITEM" , cNItem1 ,Nil},; {"C8_QUANT",VAL(cQuant),Nil},; {"C8_PRECO",VAL(StrTran(cPreco,",",".")),Nil}}) //Endif MSExecAuto({|v,x,y| MATA150(v,x,y)},aCabec,aItens,3) // opção 3 alteração
If lMsErroAutomostraerro() EndIf
Next
MsgInfo("Processo finalizado com Sucesso !")
Return
Preciso inserir dados na SC8 tentei via msexeauto, juro que estava funcionando kkkk mas, já estou a quatro dias tentando analisar o erro e nada. Perguntas.:
1 - Pensei em tentar inserir esses dados para atualizar a cotação via insert, tem algum exemplo ADVPL ? 2 - Se puderem dar uma olhada para identificar o erro o código esta abaixo. 3 - Lebrando que não da erro simplesmente não atualiza a cotação ja debuguei centenas de vezes e não identifiquei o erro e msexecauto é o do MATA150.
USER FUNCTION ImporSC8()
Local aLayout := {} Local aArquivo := {} Local nPosicao := 0 Local nColuna := 0 Local i,j := 0 Local nLog := 0 Local cLinha := "" Local cMenErro := ""
//Local cBuffer := "" //Local cFileOpen := "" Local cTitulo1 := "Selecione o arquivo" Local cExtens := "Arquivo CSV | *.csv" Local cFilial := "" Local cNCotacao := "" Local cLoja := "" Local cCadastro := " deu erro" Local cNItem := ""Local cCFornec := "" Local cPreco := ""Local nPreco := ""Local cQuant := "" Local cLoja := "" Local cCond := "" Local cContato := "" Local cFilialEnt:= "" Local cMoeda := "" Local cEmissao := "" Local cSeguro := "" Local cProposta := "" Local cProduto := "" Local aCabec:={} Local aItens:={}
Private wConteudo := Nil Private lMsHelpAuto := .T. // se .t. direciona as mensagens do help Private lMsErroauto := .F. // necessario a criacao
wtam_array := 20 // VEM CONFORME A ESTRUTURA DO ARQUIVO ENVIADO - wtam_array := 22
cFileOpen := cGetFile(cExtens,cTitulo1,,,.T.)
If !File(cFileOpen) MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro) Return Endif
FT_FUSE(cFileOpen) //ABRIR FT_FGOTOP() //PONTO NO TOPO ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER FT_FGoTop()
While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO IncProc()
// Capturar dados // cBuffer := FT_FREADLN() //LENDO LINHA
nColuna := 0 nPosicao := 1 cLinha := FT_FReadLn()
AAdd(aArquivo,Array(wtam_array)) WLOG := "" For i := 1 To Len(cLinha)
If SubStr(cLinha,i,1) == ";" .Or. Len(cLinha) == i nColuna++
IF NCOLUNA == wtam_array aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i+1-nPosicao) else aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i-nPosicao) ENDIF
nPosicao := i + 1 EndIf
Next i
IF NCOLUNA < WTAM_ARRAY NCOLUNA += 1 FOR I := NCOLUNA TO WTAM_ARRAY aArquivo[Len(aArquivo),nColuna] := SPACE(1) NEXT ENDIF
IF .NOT. EMPTY(WLOG) FWrite(nLog, WLOG + " - " + CLINHA + CHR(13) + CHR(10) ) WERRO := .T. ENDIF
FT_FSkip()
EndDo
/IF WERRO // TEM ERRO DE FILIAL - NAO PROSSEGUE A IMPORTACAO FClose(nLog) MsgAlert("Processamento interrompido. Verificar o arquivo log: " + CFILELOG ) RETURN() ENDIF/
/// PROCESSANDO O ARQUIVO PARA GRAVAR NA TABELA DO PROTHEUS (SC8)
ProcRegua(Len(aArquivo))
//INCLUINDO O •
aSort(aArquivo,,,{|aX,aY| ax[1] < aY[1]})
For i := 1 To Len(aArquivo)
cFilialEnt:= aArquivo[02] cNCotacao := aArquivo[03] cProposta := aArquivo[04] cNItem := aArquivo[05] cEmissao := aArquivo[06] cCFornec := aArquivo[08] cLoja := aArquivo[09] cCond := aArquivo[16] cContato := aArquivo[11] cProduto := aArquivo[12] cQuant := aArquivo[15] cMoeda := aArquivo[17] cSeguro := aArquivo[18] cPreco := aArquivo[19]
//Tratamento ExecAuto
cCFornec1 := cValtoChar(StrZero(VAL(cCFornec),6)) cLoja1 := cValtoChar(StrZero(VAL(cLoja),2)) cFilialEnt1:= cValtoChar(StrZero(VAL(cFilialEnt),2)) cProposta1 := cValtoChar(StrZero(VAL(cProposta),2)) cProduto1 := cValtoChar(StrZero(VAL(cProduto),15)) cNItem1 := cValtoChar(StrZero(VAL(cNItem),4)) cNCotacao1 := cValtoChar(StrZero(VAL(cNCotacao),6)) cEmissao1 := SUBSTR(cEmissao,7,4)+SUBSTR(cEmissao,4,2)+SUBSTR(cEmissao,1,2)
// ---- EXEMPLO ALTERACAO DE UMA COTACAO JA EXISTENTE ----dbSelectArea("SC8") dbSetOrder( dbSeek(xFilial("SC8")+cNCotacao1+cCFornec1+cLoja1+cProduto1+cNItem1 ) aadd(aCabec,{"C8_FORNECE" , cCFornec1}) aadd(aCabec,{"C8_LOJA" , cLoja1}) aadd(aCabec,{"C8_COND" ,cCond })aadd(aCabec,{"C8_CONTATO" ,cContato }) aadd(aCabec,{"C8_FILENT" ,cFilialEnt1}) aadd(aCabec,{"C8_MOEDA" ,VAL(cMoeda)}) //{"C8_MOEDA" ,VAL(cMoeda)}) aadd(aCabec,{"C8_EMISSAO" ,cEmissao1}) aadd(aCabec,{"C8_SEGURO" ,VAL(cSeguro) }) aadd(aItens,{{"C8_NUMPRO", cProposta1,Nil},; //1 {"C8_PRODUTO",cProduto1,Nil},; {"C8_ITEM" , cNItem1 ,Nil},; {"C8_QUANT",VAL(cQuant),Nil},; {"C8_PRECO",VAL(StrTran(cPreco,",",".")),Nil}}) //Endif MSExecAuto({|v,x,y| MATA150(v,x,y)},aCabec,aItens,3) // opção 3 alteração
If lMsErroAutomostraerro() EndIf
Next
MsgInfo("Processo finalizado com Sucesso !")
Return
Ultima edição: 7 anos 4 meses atrás por manoelcarlosjunior.
Por favor Acessar ou Registrar para participar da conversa.
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 4 meses atrás #32269
por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico INSERIR DADOS NA SC8
Essa questão foi encerrada galera, na verdade não havia "Problema", o MsExecauto do MATA150 ele só atualiza os itens da cotação que não foram atendidos. Eu fiz dois programas um para extrair a planilha e outro para importar o que extrai estava trazendo todos os outros itens inclusive os já atendidos pela cotação.
Att,
Manoel Carlos Júnior
Att,
Manoel Carlos Júnior
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- INSERIR DADOS NA SC8
Tempo para a criação da página:0.105 segundos