- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Importação de TXT no Pedido de Vendas
×
Linguagem de Programação ADVPL
Perguntas Importação de TXT no Pedido de Vendas
- rodrigolparaujo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 9 meses atrás - 10 anos 9 meses atrás #20709
por rodrigolparaujo
Importação de TXT no Pedido de Vendas foi criado por rodrigolparaujo
Olá amigos!
Estou com a seguinte situação:
Preciso importar um arquivo txt contendo apenas o codigo do produto e a quantidade, e fazer com que os gatilhos rodem no Pedido de Venda. Incluir e validar o codigo do produto e quantidade foi tranquilo, mas agora fazer com que os gatilhos funcionem tá sendo um problema, pois os gatilhos não executam.
Ja tentei usar
1.
RegToMemory("SC6",.T.,.T.)
2.
If ExistTrigger("C6_PRODUTO")
RunTrigger(2,N,Nil,,"C6_PRODUTO")
Endif
3.
For nA := 1 to Len(aStrutSC6)
cCampo := aStrutSC6[nA][1]
If ExistTrigger(cCampo)
RunTrigger(2,n,Nil,,cCampo)
Endif
Next
Tentei forçar um refresh
oGetDad:ForceRefresh()
oGetDad:oBrowse:Refresh(.T.)
e nada, só consigo fazer funcionar se pegar os gatilhos e jogar no fonte para popular os campos, mas isso não é viavel, pois qualquer alteração de gatilho, precisarei ir no fonte, entao, existe algo que faça os gatilhos executarem?
segue em anexo um video exemplificando
desde ja agradeço
Estou com a seguinte situação:
Preciso importar um arquivo txt contendo apenas o codigo do produto e a quantidade, e fazer com que os gatilhos rodem no Pedido de Venda. Incluir e validar o codigo do produto e quantidade foi tranquilo, mas agora fazer com que os gatilhos funcionem tá sendo um problema, pois os gatilhos não executam.
Ja tentei usar
1.
RegToMemory("SC6",.T.,.T.)
2.
If ExistTrigger("C6_PRODUTO")
RunTrigger(2,N,Nil,,"C6_PRODUTO")
Endif
3.
For nA := 1 to Len(aStrutSC6)
cCampo := aStrutSC6[nA][1]
If ExistTrigger(cCampo)
RunTrigger(2,n,Nil,,cCampo)
Endif
Next
Tentei forçar um refresh
oGetDad:ForceRefresh()
oGetDad:oBrowse:Refresh(.T.)
e nada, só consigo fazer funcionar se pegar os gatilhos e jogar no fonte para popular os campos, mas isso não é viavel, pois qualquer alteração de gatilho, precisarei ir no fonte, entao, existe algo que faça os gatilhos executarem?
segue em anexo um video exemplificando
desde ja agradeço
Ultima edição: 10 anos 9 meses atrás por rodrigolparaujo. Razão: complementando
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
10 anos 9 meses atrás #20833
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Importação de TXT no Pedido de Vendas
Opa Brother, conseguiu resolver ? vou ver se acho alguma coisa referente a isso ok.
Abraços.
Abraços.
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
10 anos 9 meses atrás #20834
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Importação de TXT no Pedido de Vendas
Veja se esta função te ajuda:
Static Function Ma410Bom(aHeader,aCols,nX)
Local aArea := GetArea()
Local aBOM := {}
Local aHeadBom := {"",RetTitle("C6_PRODUTO"),RetTitle("C6_QTDVEN"),RetTitle("C6_DESCRI")}
Local nPProduto := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_PRODUTO"})
Local nPTES := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_TES"})
Local nPQtdVen := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_QTDVEN"})
Local nPPrcVen := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_PRCVEN"})
Local nPItem := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_ITEM"})
Local nPTotal := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_VALOR"})
Local nY := 0
Local nZ := 0
Local cItem := ""
Local lMA410BOM := ExistBlock("MA410BOM")
PRIVATE N := nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Posiciona registros ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
MsSeek(xFilial("SB1")+aCols[nX][nPProduto])
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Verifica os produtos do primeiro nível da estrutura ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SG1")
dbSetOrder(1)
MsSeek(xFilial("SG1")+aCols[nX][nPProduto])
While !Eof() .And. xFilial("SG1") == SG1->G1_FILIAL .And.;
aCols[nX][nPProduto] == SG1->G1_COD
dbSelectArea("SB1")
dbSetOrder(1)
MsSeek(xFilial("SB1")+aCols[nX][nPProduto])
If RetFldProd(SB1->B1_COD,"B1_FANTASM") <> "S" // Projeto Implementeacao de campos MRP e FANTASM no SBZ
aadd(aBOM,{SG1->G1_COMP,ExplEstr(aCols[nX][nPQtdVen],dDataBase,"",SB1->B1_REVATU),SB1->B1_DESC})
EndIf
dbSelectArea("SG1")
dbSkip()
EndDo
If lMA410BOM
ExecBlock("MA410BOM",.F.,.F.,{aBOM})
Else
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Adiciona os produtos no aCols ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nX := 1 To Len(aBOM)
cItem := aCols[Len(aCols)][nPItem]
aadd(aCOLS,Array(Len(aHeader)+1))
For nY := 1 To Len(aHeader)
If ( AllTrim(aHeader[nY][2]) == "C6_ITEM" )
aCols[Len(aCols)][nY] := Soma1(cItem)
Else
If (aHeader[nY,2] <> "C6_REC_WT") .And. (aHeader[nY,2] <> "C6_ALI_WT")
aCols[Len(aCols)][nY] := CriaVar(aHeader[nY][2])
EndIf
EndIf
Next nY
N := Len(aCols)
aCOLS[N][Len(aHeader)+1] := .F.
A410Produto(aBom[nX][1],.F.)
aCols[N][nPProduto] := aBom[nX][1]
A410MultT("M->C6_PRODUTO",aBom[nX][1])
If ExistTrigger("C6_PRODUTO")
RunTrigger(2,N,Nil,,"C6_PRODUTO")
Endif
A410SegUm(.T.)
A410MultT("M->C6_QTDVEN",aBom[nX][2])
If ExistTrigger("C6_QTDVEN ")
RunTrigger(2,N,Nil,,"C6_QTDVEN ")
Endif
If Empty(aCols[N][nPTotal]) .Or. Empty(aCols[N][nPTES])
aCOLS[N][Len(aHeader)+1] := .T.
EndIf
Next nX
Endif
RestArea(aArea)
Return(.T.)
Static Function Ma410Bom(aHeader,aCols,nX)
Local aArea := GetArea()
Local aBOM := {}
Local aHeadBom := {"",RetTitle("C6_PRODUTO"),RetTitle("C6_QTDVEN"),RetTitle("C6_DESCRI")}
Local nPProduto := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_PRODUTO"})
Local nPTES := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_TES"})
Local nPQtdVen := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_QTDVEN"})
Local nPPrcVen := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_PRCVEN"})
Local nPItem := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_ITEM"})
Local nPTotal := aScan(aHeader,{|x| AllTrim(x[2]) == "C6_VALOR"})
Local nY := 0
Local nZ := 0
Local cItem := ""
Local lMA410BOM := ExistBlock("MA410BOM")
PRIVATE N := nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Posiciona registros ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
MsSeek(xFilial("SB1")+aCols[nX][nPProduto])
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Verifica os produtos do primeiro nível da estrutura ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SG1")
dbSetOrder(1)
MsSeek(xFilial("SG1")+aCols[nX][nPProduto])
While !Eof() .And. xFilial("SG1") == SG1->G1_FILIAL .And.;
aCols[nX][nPProduto] == SG1->G1_COD
dbSelectArea("SB1")
dbSetOrder(1)
MsSeek(xFilial("SB1")+aCols[nX][nPProduto])
If RetFldProd(SB1->B1_COD,"B1_FANTASM") <> "S" // Projeto Implementeacao de campos MRP e FANTASM no SBZ
aadd(aBOM,{SG1->G1_COMP,ExplEstr(aCols[nX][nPQtdVen],dDataBase,"",SB1->B1_REVATU),SB1->B1_DESC})
EndIf
dbSelectArea("SG1")
dbSkip()
EndDo
If lMA410BOM
ExecBlock("MA410BOM",.F.,.F.,{aBOM})
Else
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Adiciona os produtos no aCols ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nX := 1 To Len(aBOM)
cItem := aCols[Len(aCols)][nPItem]
aadd(aCOLS,Array(Len(aHeader)+1))
For nY := 1 To Len(aHeader)
If ( AllTrim(aHeader[nY][2]) == "C6_ITEM" )
aCols[Len(aCols)][nY] := Soma1(cItem)
Else
If (aHeader[nY,2] <> "C6_REC_WT") .And. (aHeader[nY,2] <> "C6_ALI_WT")
aCols[Len(aCols)][nY] := CriaVar(aHeader[nY][2])
EndIf
EndIf
Next nY
N := Len(aCols)
aCOLS[N][Len(aHeader)+1] := .F.
A410Produto(aBom[nX][1],.F.)
aCols[N][nPProduto] := aBom[nX][1]
A410MultT("M->C6_PRODUTO",aBom[nX][1])
If ExistTrigger("C6_PRODUTO")
RunTrigger(2,N,Nil,,"C6_PRODUTO")
Endif
A410SegUm(.T.)
A410MultT("M->C6_QTDVEN",aBom[nX][2])
If ExistTrigger("C6_QTDVEN ")
RunTrigger(2,N,Nil,,"C6_QTDVEN ")
Endif
If Empty(aCols[N][nPTotal]) .Or. Empty(aCols[N][nPTES])
aCOLS[N][Len(aHeader)+1] := .T.
EndIf
Next nX
Endif
RestArea(aArea)
Return(.T.)
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- rodrigolparaujo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20875
por rodrigolparaujo
Respondido por rodrigolparaujo no tópico Importação de TXT no Pedido de Vendas
olá! vou tentar mesclar com o meu e ver se vai dá certo e posto o resultado aqui, para os usuarios não ficarem sem esta nova rotina, joguei as funções dentro do fonte, mas vou fazer mais uns testes.
hoje fazemos diversas importações por dia, com uma media de 300 itens, esta rotina poupa muito trabalho
obrigado por enquanto
hoje fazemos diversas importações por dia, com uma media de 300 itens, esta rotina poupa muito trabalho
obrigado por enquanto
Por favor Acessar ou Registrar para participar da conversa.
- rodrigolparaujo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20891
por rodrigolparaujo
Respondido por rodrigolparaujo no tópico Importação de TXT no Pedido de Vendas
Oi, não deu certo, os gatilhos não rodam, se souber de algo ficarei grato, se mandar seu e-mail posso encaminhar meu fonte.
abraços
abraços
Por favor Acessar ou Registrar para participar da conversa.
- THALESCOTR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 124
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20894
por THALESCOTR
Respondido por THALESCOTR no tópico Importação de TXT no Pedido de Vendas
Boa tarde,
tente assim, fiz aqui um gatilho e com essa atualização por linha e refresh e deu certo.
GETDREFRESH()
SetFocus(oGetDad:oBrowse:hWnd) // Atualizacao por linha
oGetDad:Refresh()
A410LinOk(oGetDad)
Att
Thales
tente assim, fiz aqui um gatilho e com essa atualização por linha e refresh e deu certo.
GETDREFRESH()
SetFocus(oGetDad:oBrowse:hWnd) // Atualizacao por linha
oGetDad:Refresh()
A410LinOk(oGetDad)
Att
Thales
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Importação de TXT no Pedido de Vendas
Tempo para a criação da página:0.109 segundos