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 Múltiples (MATA381)

time.png Tempo aproximado para lectura: 00:05:00 min

Duda

Ejemplo de ExecAuto para la alteración de Reservas Múltiples (MATA381)

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

Solución

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

Para agregar un nuevo compromiso, simplemente agregue la información sobre este nuevo compromiso a la matriz de elementos.

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

Ejemplo de compromisos cambiantes
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
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 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
            //Altera também o lote do empenho
            nX := aScan(aLine,{|x| x[1] == "D4_LOTECTL"})
            If nX > 0
                //Encontrou o valor da quantidade. Faz a alteração do valor.
                aLine[nX,2] := "LOTE1"
            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})
    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 _