× Linguagem de Programação ADVPL

Perguntas Importação de TXT no Pedido de Vendas

Mais
10 anos 9 meses atrás - 10 anos 9 meses atrás #20709 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

Arquivo Anexo:

Nome do Arquivo: importacao..._txt.rar
Tamanho do Arquivo:225 KB


desde ja agradeço
Anexos:
Ultima edição: 10 anos 9 meses atrás por rodrigolparaujo. Razão: complementando

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20833 por lalberto
Opa Brother, conseguiu resolver ? vou ver se acho alguma coisa referente a isso ok.

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.

Mais
10 anos 9 meses atrás #20834 por lalberto
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.)

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.

Mais
10 anos 9 meses atrás #20875 por rodrigolparaujo
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

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20891 por rodrigolparaujo
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

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20894 por THALESCOTR
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

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.117 segundos
Joomla templates by a4joomla