× Linguagem de Programação ADVPL

Perguntas TES inteligênte adicionar campo na validação

Mais
11 anos 8 meses atrás #11956 por gustavo13
Olá!

Quero adicionar uma validação personalizada na regra do TES inteligente, quero que ele considere apenas os 4 primeiros dígitos da NCM quando da mesma forma cadastrada no TES inteligente, por padrão ele não faz isto porque ele compara o campo NCM do TES inteligente com o do cadastro do produto que no caso estara diferente. Tentei da forma abaixo mas não estou entendendo este ponto de entrada, peguei ele no tdn, mas ele não preenche o campo TES do pedido de venda.

User Function MT089CD()

//As variaveis foram carregada com paramixb somente para verificar o condeudo original.
Local bCond:=PARAMIXB[1] //Condicao que avalia os campos do SFM
Local bSort:=PARAMIXB[2] //Forma de ordenacao do array onde o 1o elemento sera utilizado. Esse array inicialmente possui 9 posicoes
Local bIRWhile:=PARAMIXB[3] //Regra de selecao dos registros do SFM
Local bAddTes:=PARAMIXB[4] //Conteudo a ser acrescentado no array
Local cTabela:=PARAMIXB[5] //Tabela que esta sendo tratada
public _nPosProd
public _nPosIPI
public _cProduto
If cTabela == "SC6"
_nPosProd := aScan(aHeader, {|x| AllTrim(x[2])=="C6_PRODUTO"})
_nPosIPI := aScan(aHeader, {|x| AllTrim(x[2])=="C6_POSIPI"})
_cProduto := acols[n][_nPosProd]

bCond:={||(substr(acols[n][_nPosIPI],1,4) == (cAliasSFM)->FM_ININCM)} //Acrescenta compo novo a regra, esse campo devera ser acrescentdo no X2_UNICO do SFM.
bSort:={|x,y| x[11] > y[11]}//+x[2]+x[3]+x[4]+x[5]+x[6]+x[10]+x[7]+y[2]+y[3]+y[4]+y[5]+y[6]+y[10]+y[7]}//Altero a ordem do array, posicao 10, para considerar o campo especifico acrescentado na linha abaixo
bIRWhile:= {||.T.}
bAddTes := {||aAdd(aTes[Len(aTes)],(cAliasSFM)->FM_XTPCLI) }//Acrescento campo a ser considerado na TES Inteligente.
Else
bCond:= {||.T.}
bSort:= bSort
bIRWhile:= {||.T.}
bAddTes := {||.T.}
EndIf
Return({bCond,bSort,bIRWhile,bAddTes})

Agradeço desde já.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #11960 por lalberto
Tenta assim :

User Function MT089CD()

//As variaveis foram carregada com paramixb somente para verificar o condeudo original.
Local bCond:=PARAMIXB[1] //Condicao que avalia os campos do SFM
Local bSort:=PARAMIXB[2] //Forma de ordenacao do array onde o 1o elemento sera utilizado. Esse array inicialmente possui 9 posicoes
Local bIRWhile:=PARAMIXB[3] //Regra de selecao dos registros do SFM
Local bAddTes:=PARAMIXB[4] //Conteudo a ser acrescentado no array
Local cTabela:=PARAMIXB[5] //Tabela que esta sendo tratada
public _nPosProd
public _nPosIPI
public _cProduto
If cTabela == "SC6"
_nPosProd := aScan(aHeader, {|x| AllTrim(x[2])=="C6_PRODUTO"})
_nPosIPI := aScan(aHeader, {|x| AllTrim(x[2])=="C6_POSIPI"})
_cProduto := acols[n][_nPosProd]

bCond:={||(substr(acols[n][_nPosIPI],1,4) == Left((cAliasSFM)->FM_ININCM,4))} //Acrescenta compo novo a regra, esse campo devera ser acrescentdo no X2_UNICO do SFM.
bSort:={|x,y| x[11] > y[11]}//+x[2]+x[3]+x[4]+x[5]+x[6]+x[10]+x[7]+y[2]+y[3]+y[4]+y[5]+y[6]+y[10]+y[7]}//Altero a ordem do array, posicao 10, para considerar o campo especifico acrescentado na linha abaixo
bIRWhile:= {||.T.}
bAddTes := {||aAdd(aTes[Len(aTes)],(cAliasSFM)->FM_XTPCLI) }//Acrescento campo a ser considerado na TES Inteligente.
Else
bCond:= {||.T.}
bSort:= bSort
bIRWhile:= {||.T.}
bAddTes := {||.T.}
EndIf
Return({bCond,bSort,bIRWhile,bAddTes})

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
11 anos 8 meses atrás #11973 por gustavo13
Consegui, fiz mais alterações além desta. Fica o fonte pra quem quiser adicionar campos na validação.
#INCLUDE "rwmake.ch"

User Function MT089CD()

//As variaveis foram carregada com paramixb somente para verificar o condeudo original.
Local bCond:=PARAMIXB[1] //Condicao que avalia os campos do SFM
Local bSort:=PARAMIXB[2] //Forma de ordenacao do array onde o 1o elemento sera utilizado. Esse array inicialmente possui 9 posicoes
Local bIRWhile:=PARAMIXB[3] //Regra de selecao dos registros do SFM
Local bAddTes:=PARAMIXB[4] //Conteudo a ser acrescentado no array
Local cTabela:=PARAMIXB[5] //Tabela que esta sendo tratada
public _nPosProd
public _nPosIPI
public _cProduto
If cTabela == "SC6"
_nPosProd := aScan(aHeader, {|x| AllTrim(x[2])=="C6_PRODUTO"})
_nPosIPI := aScan(aHeader, {|x| AllTrim(x[2])=="C6_POSIPI"})
_cProduto := acols[n][_nPosProd]
If substr(acols[n][_nPosIPI],1,4) $ "8471"
bCond:={||(substr(acols[n][_nPosIPI],1,4) == Left((cAliasSFM)->FM_ININCM,4))} //Acrescenta compo novo a regra, esse campo devera ser acrescentdo no X2_UNICO do SFM.
bSort:={|x,y| x[10]<y[10]}//+x[2]+x[3]+x[4]+x[5]+x[6]+x[10]+x[7]+y[2]+y[3]+y[4]+y[5]+y[6]+y[10]+y[7]}//Altero a ordem do array, posicao 10, para considerar o campo especifico acrescentado na linha abaixo
bIRWhile:= {||((CALIASSFM)->(!EMPTY(FM_GRTRIB) .AND. !EMPTY(FM_GRPROD)) .AND. ALLTRIM(CGRUPO)+ALLTRIM(CGRUPROD)==(CALIASSFM)->(ALLTRIM(FM_GRTRIB)+ALLTRIM(FM_GRPROD))).OR.(CALIASSFM)->(EMPTY(FM_GRTRIB).OR.EMPTY(FM_GRPROD))}
bAddTes := {||aAdd(aTes[Len(aTes)],(cAliasSFM)->FM_ININCM) }//Acrescento campo a ser considerado na TES Inteligente.
Else
bCond:= {||.T.}
bSort:= bSort
bIRWhile:= {||.T.}
bAddTes := {||.T.}
EndIf
Else
bCond:= {||.T.}
bSort:= bSort
bIRWhile:= {||.T.}
bAddTes := {||.T.}
EndIf
Return({bCond,bSort,bIRWhile,bAddTes})

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás #11978 por lalberto
Valeu Gustavo, obrigado por compartilhar.

Depois coloca uma foto sua ai no perfil pra gente te conhecer melhor.

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
11 anos 8 meses atrás #12009 por gustavo13
Pensei que meu problema estava solucionado, o ponto de entrada esta funcionando mas quando fui cadastrar os registros do TES começou a dar erro de chave duplicada. Como adiciono o novo campo que criei como campo chave?

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 8 meses atrás - 11 anos 8 meses atrás #12010 por kanaamlrr
coloca ele no seu SX2 no campo X2_CHAVE, depois disso faz backup da sua tabela, dropa ela e cria de novo, porém não é aconselhável fazer esse tipo de alteração pois os posicionamentos padrão do sistema não estão preparados para isso, e podem acabar posicionando na tes errada.
Ultima edição: 11 anos 8 meses atrás por kanaamlrr.

Por favor Acessar ou Registrar para participar da conversa.

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