Tiempo aproximado de lectura 00:05:00 min
Duda
¿Cuál es el funcionamiento del punto de entrada MT410VAR en los pedidos de venta?
Entorno
Cross Segmentos - TOTVS Backoffice (Linea Protheus) - MI - Facturación (SIGAFAT) - A partir de la versión 12.1.2410
Solución
El punto de entrada MT410VAR permite manipular los arrays del encabezado e items que se enviarán a la rutina automática de MATA410 durante la integración mediante el mensaje único SalesOrder, lo que permite añadir, modificar o eliminar campos.
No se permite eliminar solo uno o varios items del pedido de venta en el proceso de integración del mensaje SALESORDER; para llevar a cabo la eliminación, es necesario eliminar el pedido de venta y crear uno nuevo indicando únicamente los items deseados.
Existe la posibilidad de utilizar este punto de entrada (MT410VAR) que permite excluir solo uno o varios items en la modificación. Para ello, será necesario manipular el array aItens, incluyendo la información de LINPOS y AUTODELETA según el ejemplo documentado a continuación en el punto 0.
PARAMIXB Vector con los datos del pedido que se está procesando en el mensaje único SalesOrder, a saber:
[ 01 ] - aCab - Tipo: Matriz - Lista de campos correspondientes al encabezado del pedido.
[ 02 ] - aItens - Tipo: Matriz - Lista de campos correspondientes a los items del pedido.
[ 03 ] - cJson - Tipo: Carácter - Devuelve la cadena con el mensaje JSON.
Retorno aRet Matriz que contiene los datos de los campos que se procesarán en la rutina Pedido de ventas.
Exemplo:
#Include'Totvs.ch'
User Function MT410VAR
Local aCab := aClone(PARAMIXB[1]) //Cabeçalho
Local aItens := aClone(PARAMIXB[2]) //Itens
Local aRet := {} //Retorno das Customizações do usuário
Local nPosCli := Ascan(aCab,{ |X| X[1] == "C5_CLIENTE" })
Local nPosCPag := Ascan(aCab,{ |X| X[1] == "C5_CONDPAG" })
Local nPosNum := 0
Local nPosProd := 0
Local nPosCC := 0
Local nPosDes := 0
Local nX := 0
oJson := fwEAIobj():new()
oJson:Activate()
oJson:loadJson(PARAMIXB[3]) //JSON
If cEvent == "UPSERT" //Inclusão ou Alteração
If (nPosNum := Ascan(aCab,{ |X| X[1] == "C5_NUM" })) > 0 //Alteração
If aCab[nPosCli][2] == "FAT001"
aCab[nPosCPag][2] := "001"
EndIf
For nX:= 1 To Len(aItens)
If (nPosProd := Ascan(aItens[nX],{ |X| X[1] == "C6_PRODUTO" })) > 0
If aItens[nX][nPosProd][2] == "FATR00000000000000000000000001"
If (nPosCC := Ascan(aItens[nX],{ |X| X[1] == "C6_CC" })) > 0
aItens[nX][nPosCC][2] := "FAT000002"
Else
aAdd( aItens[nX], { "C6_CC", "FAT000002", Nil } )
EndIf
EndIf
EndIf
Next
Else //Inclusão
If aCab[nPosCli][2] == "FAT001"
aCab[nPosCPag][2] := "002"
EndIf
For nX:= 1 To Len(aItens)
If (nPosProd := Ascan(aItens[nX],{ |X| X[1] == "C6_PRODUTO" })) > 0
If aItens[nX][nPosProd][2] == "FATR00000000000000000000000001"
If (nPosCC := Ascan(aItens[nX],{ |X| X[1] == "C6_CC" })) > 0 //C6_VALDESC
aItens[nX][nPosCC][2] := "FAT000001"
Else
aAdd( aItens[nX], { "C6_CC", "FAT000001", Nil } )
EndIf
EndIf
EndIf
Next
EndIf
ElseIf cEvent == "DELETE" //Exclusão
For nX:= 1 To Len(aItens)
If (nPosProd := Ascan(aItens[nX],{ |X| X[1] == "C6_PRODUTO" })) > 0
If aItens[nX][nPosProd][2] == "FATR00000000000000000000000001"
If (nPosDes := Ascan(aItens[nX],{ |X| X[1] == "C6_VALDESC" })) > 0
aItens[nX][nPosDes][2] := 0
EndIf
EndIf
EndIf
Next
EndIf
aRet := {aCab,aItens}
Return aRet
0 Comentarios