Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmentos - TOTVS Backoffice (Línea Protheus) - MI - Stock y Costos (SIGAEST) - ExecAuto Alteración Reservas con PIMS (MATA381)

time.png Tiempo aproximado de lectura: 00:05:00 min

Duda

Ejemplo de ExecAuto para Alteración de Reservas con integración PIMS (MATA381)

Ambiente
Cross Segmentos - TOTVS Backoffice (Línea Protheus) - MI - Stock y Costos (SIGAEST) - Todas las versiones 12

Solución

En el array de cabecera es necesario enviar el número de orden de producción y la clave INDEX con el valor 2, como último ítem del array, para que el sistema cambie la orden de producción correcta.

En el array de items sólo se puede enviar información sobre las reservas que se están modificando. No es necesario cargar en la matriz de reservas que ya están registrados en la tabla SD4 y que no sufrirán ningún cambio. La información de la dirección se puede enviar utilizando la opción AUT_D4_END según el ejemplo.

Cuando la reserva tiene control de lote y el lote se envía para generar la reserva, no es necesario enviar la fecha de vencimiento del lote. El programa MATA381 completa automáticamente la fecha de vencimiento del lote.

Para cambiar una reserva que está registrado en SD4 es necesario utilizar el identificador LINPOS. La clave utilizada en LINPOS debe ser la siguiente concatenación:

D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ. Verifique el uso correcto en el ejemplo.
Para eliminar una reserva que está registrado en SD4 es necesario utilizar el identificador LINPOS en conjunto con la clave AUTDELETA. La clave utilizada en LINPOS debe ser la siguiente concatenación:

D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ. Verifique el uso correcto en el ejemplo.

Para cambiar la información de la tabla SDC que está vinculada a la reserva, se deben utilizar los identificadores LINPOS y AUTDELETA de la misma forma que se utiliza para los registros de la tabla SD4.

Para cambiar la información de la tabla NLI que está vinculada a la reserva, se deben utilizar los identificadores LINPOS y AUTDELETA de la misma forma que se utiliza para los registros de la tabla SD4.

Para agregar una nueva reserva, simplemente agregue la información sobre está a la matriz de elementos.

Para cambiar reservas, envíe el tercer parámetro de MATA381 con el valor 4.

Ejemplo de alteración con integración con PIMS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
User Function Alt381Auto()
    Local nX         := 0
    Local aCab       := {}
    Local aLine      := {}
    Local aItens     := {}
    Local aLineEnder := {}
    Local aEnder     := {}
 
    PRIVATE lMsErroAuto := .F.
 
    //Monta o cabeçalho com o número da OP que será alterada.
    //Necessário utilizar o índice 2 para efetuar a alteração.
    aCab := {{"D4_OP","00130301001",NIL},;
            {"INDEX",2,Nil}}
 
    //Seta o índice da SDC
    SDC->(dbSetOrder(2))
 
    //Busca os empenhos da SD4 para alterar/excluir.
    SD4->(dbSetOrder(2))
    SD4->(dbSeek(xFilial("SD4")+PadR("00130301001",Len(SD4->D4_OP))))
 
    While SD4->(!Eof()) .And. SD4->(D4_FILIAL+D4_OP) == xFilial("SD4")+PadR("00130301001",Len(SD4->D4_OP))
        //Adiciona as informações do empenho, conforme estão na tabela SD4.
        aLine := {}
        For nX := 1 To SD4->(FCount())
            aAdd(aLine,{SD4->(Field(nX)),SD4->(FieldGet(nX)),Nil})
        Next nX
 
 
        //Adiciona as informações da lista de compras (NLI)do empenho, conforme estão na tabela SD4.
        aLineNLI := {}
        For nX := 1 To SD4->(FCount())
            aAdd(aLineNLI,{SD4->(Field(nX)),SD4->(FieldGet(nX)),Nil})
        Next nX
         
        If len(aLineNLI) > 0
            aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
        Endif
         
         
 
        //Adiciona o identificador LINPOS para identificar que o registro já existe na SD4
        aAdd(aLine,{"LINPOS","D4_COD+D4_TRT+D4_LOTECTL+D4_NUMLOTE+D4_LOCAL+D4_OPORIG+D4_SEQ",;
                            SD4->D4_COD,;
                            SD4->D4_TRT,;
                            SD4->D4_LOTECTL,;
                            SD4->D4_NUMLOTE,;
                            SD4->D4_LOCAL,;
                            SD4->D4_OPORIG,;
                            SD4->D4_SEQ})
         
        //Marca o empenho do produto "MP" como Excluído.
        If AllTrim(SD4->D4_COD) == "MP01"
            aAdd(aLine,{"AUTDELETA","S",Nil})
        ElseIf AllTrim(SD4->D4_COD) == "MP02"
            //Altera a quantidade do empenho do produto "9617-MP1"
            //Busca a informação da quantidade (D4_QTDEORI) no array aLine.
            nX := aScan(aLine,{|x| x[1] == "D4_QTDEORI"})
            If nX > 0
                //Encontrou o valor da quantidade. Faz a alteração do valor.
                aLine[nX,2] := 10
            EndIf
             
            //Altera também o saldo do empenho
            nX := aScan(aLine,{|x| x[1] == "D4_QUANT"})
            If nX > 0
                //Encontrou o valor da quantidade. Faz a alteração do valor.
                aLine[nX,2] := 10
            EndIf
        ElseIf AllTrim(SD4->D4_COD) == "MP03"
            //Altera os endereços utilizado no empenho do produto "9617-MP2"
            //Primeiro carrega os endereços utilizados.
            If SDC->(dbSeek(xFilial("SDC")+SD4->(D4_COD+D4_LOCAL+D4_OP+D4_TRT+D4_LOTECTL+D4_NUMLOTE)))
                //Inicializa o array aEnder
                aEnder     := {}
                 
                //Busca os registros da tabela SDC
                While SDC->(!Eof()) .And. ;
                    xFilial("SDC")+SD4->(D4_COD+D4_LOCAL+D4_OP+D4_TRT+D4_LOTECTL+D4_NUMLOTE) == ;
                    SDC->(DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP+DC_TRT+DC_LOTECTL+DC_NUMLOTE)
                     
                    //Inicializa o array aLineEnder
                    aLineEnder := {}
 
                    //Carrega as informações da tabela SDC no array aLineEnder
                    For nX := 1 To SDC->(FCount())
                        aAdd(aLineEnder,{SDC->(Field(nX)),SDC->(FieldGet(nX)),Nil})
                    Next nX
 
                    //Adiciona o identificador LINPOS para identificar que o registro já existe na tabela SDC
                    aAdd(aLineEnder,{"LINPOS","DC_LOCALIZ+DC_NUMSERI",;
                            SDC->DC_LOCALIZ,;
                            SDC->DC_NUMSERI})
 
                    //Verifica se é o endereço "END". Se for, marca a linha para exclusão.
                    If AllTrim(SDC->DC_LOCALIZ) == "END01"
                        aAdd(aLineEnder,{"AUTDELETA","S",NIL})
                    ElseIf AllTrim(SDC->DC_LOCALIZ) == "END02"
                        //Verifica se é o endereço "END02". Se for, altera a quantidade.
                        //Busca a posição em que a quantidade está no array aLineEnder.
                        nX := aScan(aLineEnder,{|x| x[1] == "DC_QUANT"})
                        If nX > 0
                            //Encontrou a quantidade no array aLineEnder. Faz a alteração da quantidade.
                            aLineEnder[nX,2] := 8
                        EndIf
                    EndIf
                     
                    //Adiciona o endereço no array de endereços.
                    aAdd(aEnder,aLineEnder)
 
                    //Próximo registro da SDC
                    SDC->(dbSkip())
                End
                //Adiciona um novo endereço para ser incluído na tabela SDC.
                //Inicializa o array aLineEnder
                aLineEnder := {}
                 
                //Adiciona as informações do novo endereço.
                aAdd(aLineEnder,{"DC_LOCALIZ","END03",Nil})
                aAdd(aLineEnder,{"DC_QUANT"  ,2      ,Nil})
                 
                //Adiciona o novo endereço no array de endereços.
                aAdd(aEnder,aLineEnder)
 
                //Adiciona as informações de alteração de endereço no array do Empenho.
                aAdd(aLine,{"AUT_D4_END",aEnder,Nil})
            EndIf
        EndIf
 
        //Adiciona as informações do empenho no array de itens.
        aAdd(aItens,aLine)
 
        //Próximo registro da SD4.
        SD4->(dbSkip())
    End
     
    //Adiciona um novo empenho 
    aLine := {}
    aAdd(aLine,{"D4_OP"     ,"00130301001"     ,NIL})
    aAdd(aLine,{"D4_COD"    ,"MP04"            ,NIL})
    aAdd(aLine,{"D4_LOCAL"  ,"01"              ,NIL})
    aAdd(aLine,{"D4_DATA"   ,CtoD("17/09/2018"),NIL})
    aAdd(aLine,{"D4_QTDEORI",5                 ,NIL})
    aAdd(aLine,{"D4_QUANT"  ,5                 ,NIL})
    aAdd(aLine,{"D4_LOTECTL","L1"              ,NIL})
    aAdd(aLine,{"D4_TRT"    ,"004"             ,NIL})
    aAdd(aLine,{"D4_ROTEIRO","01"              ,NIL})
     
    //Adiciona informações referente a integração com o PIMS
    aLineNLI := {}
    aAdd( aLineNLI, { "NLI_CLVAL", "02", Nil } )
    aAdd( aLineNLI, { "NLI_FAZ", "001", NIL } )
    aAdd( aLineNLI, { "NLI_QTCOMP", 20, NIL } )
    aAdd( aLineNLI, { "NLI_PMSQTD", 15, NIL } )
    aAdd( aLineNLI, { "NLI_PGQTD", 25, NIL } )
    aAdd( aLineNLI, { "NLI_POPQTD", 35, NIL } )
    aAdd( aLineNLI, { "NLI_NUMPEN", 01, NIL } )
    aAdd( aLineNLI, { "NLI_QTDPAR", 5000, NIL } )
    aAdd( aLineNLI, { "NLI_CULTRA", "01", NIL } )
    aAdd( aLineNLI, { "NLI_CC", "0010" , NIL } )
    aAdd( aLineNLI, { "NLI_FITSSA", "10", NIL } )
    aAdd( aLineNLI, { "NLI_REQCOD", "admin", NIL } )
    aAdd( aLineNLI, { "NLI_REQNOM", "admin", NIL } )
 
    aAdd(aLine,{"AUT_D4_AGR",aLineNLI,NIL})
 
    aAdd(aItens,aLine)
    //Executa o MATA381, com a operação de Alteração.
    MSExecAuto({|x,y,z| mata381(x,y,z)},aCab,aItens,4)
    If lMsErroAuto
        //Se ocorrer erro.
        MostraErro()
    Else
        Alert("Alterado com sucesso.")
    EndIf
Return
¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0

0 Comentarios

Inicie sesión para dejar un comentario.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Rellene los campos siguientes para iniciar el chat:

Chat _