EECAE104 - MsExecAuto Rotina Automática de Container e Lotes
Descrição: | Possibilita a realização das manutenções de Container e Lotes, tais como Inclusão, Alteração e Exclusão através do mecanismo de rotina automática. | ||||||||||||
Produto: | Microsiga Protheus | ||||||||||||
Segmento: | Comércio Exterior | ||||||||||||
Módulo: | SIGAEEC - Easy Export Control | ||||||||||||
Rotina: |
| ||||||||||||
País(es): | Todos | ||||||||||||
Banco(s) de Dados: | Todos Homologados pela TOTVS | ||||||||||||
Tabelas Utilizadas: | EX9 - Capa do Container/Lotes EXA - Itens do Container/Lotes | ||||||||||||
Parâmetros: |
| ||||||||||||
Observações: | Alguns campos das tabelas de pedidos podem receber o tratamento via dicionario de dados (SX3), o qual permite ser utilizado somente por alguns módulos (X3_USADO). Exemplo: PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" Modulo "EEC" TABLES "EX9", "EXA" |
Integração automática do Pedido de Exportação
Para realizar a inclusão automática de um Container é necessário a utilização da função MsExecAuto utilizando o programa EECAE104 responsável pela manutenção dos Container/Lotes
Para a utilização da rotina automática deve-se utilizar arrays multi dimensionais no envio dos dados para o processamento que segue o mesmo critério dos Containers que são colocados via tela. Esses arrays são definidos da seguinte forma:
Modelo do array:
- nome do campo;
- dados a serem inseridos;
- validação caso queira substituir a validação do dicionário de dados (SX3);
Para o caso de uma alteração e necessidade de deletar um item o mesmo deve receber no array uma linha onde o nome do campo deve ser AUTDELETA e o dado a ser enviado "S" para o caso de excluir o item do pedido ou "N" para manter, ou até mesmo não mandar nada quando não se deseja a exclusão. Abaixo alguns exemplos:
- O array para o cabeçalho:
aAdd(aCab, {"EX9_PREEMB", EEC->EEC_PREEMB , Nil})
- O array para os itens que recebe três parâmetros e a cada item deve ser adicionado num array principal para envio dos itens:
aAdd(aItem, {"EXA_PREEMB", EXA->EXA_PREEMB, NIL} )
quando for uma alteração e houver a necessidade de deletar um item deve-se passar a seguinte linha no array do item:
aAdd(aItem, {"AUTDELETA" , "S" , Nil} )
Após passar as informações de um item no array o mesmo deve ser incluído num outro array de itens e dessa forma manter a estrutura definida para cada item:
aadd( aItens, aClone( aItem ))
- Para o caso de alteração do número do container é necessário passar o conteúdo original no campo de container e uma linha contendo o nome do campo "ATUCONTAIN" e no segundo o valor que será atribuído ao container:
aAdd(aCab, {"ATUCONTAIN", "00003" , Nil})
Para um melhor entendimento segue abaixo um RDMake com a inclusão, alteração e exclusão de um Container/Lotes.
RDMake de exemplo para integração automática da rotina de Pedido de Exportação. |
---|
#INCLUDE "TOTVS.CH" User Function IncContainer() Local cEmbarq := "" Local lRot := .T. Private lMsErroAuto := .F. /************************ //Inicializa o ambiente *************************/ RpcSetType(3) RpcSetEnv("99", "01") nModulo := 29 cModulo := "EEC" __CUSERID := "000000" cEmbarq := xFilial("EEC") + "EDTRADE-716" while lRot //Executa a integração para Incluir o container/lote If MsgYesNo("Deseja Incluir o Container para o embarque?", "Aviso") MyEECAE104(cEmbarq, 3) //Executa a Alteração do container/lote elseIf MsgYesNo("Deseja Alterar o Container para o embarque?", "Aviso") MyEECAE104(cEmbarq, 4) //Executa a exclusão do container/lote elseIf MsgYesNo("Deseja excluir o Container do embarque?", "Aviso") MyEECAE104(cEmbarq, 5) //pergunta para sair da rotina de manutenção do container/lotes elseIf MsgYesNo("Deseja SAIR da rotina?", "Aviso") lRot := .F. EndIf enddo Return static function MyEECAE104(cEmbarq, nOpc) Local aCab := {} Local aItem := {} Local aItens := {} if nOpc == 3 // inclusão do container if EEC->( dbsetorder(1),msseek( cEmbarq ) ) if EE9->( dbsetorder(2),msseek( EEC->EEC_FILIAL+EEC->EEC_PREEMB ) ) cContainer := "001" cLote := "1" aCab := {} aAdd(aCab, {"EX9_PREEMB", EEC->EEC_PREEMB , Nil}) aAdd(aCab, {"EX9_CONTNR", cContainer , Nil}) aAdd(aCab, {"EX9_DTRETI", dDatabase , Nil}) aAdd(aCab, {"EX9_DTPREV", dDatabase + 5 , Nil}) While EE9->(!EOF()) .AND. EE9->( EE9_FILIAL+EE9_PREEMB ) == cEmbarq aItem := {} aAdd(aItem, {"EXA_PREEMB", EE9->EE9_PREEMB , Nil}) aAdd(aItem, {"EXA_CONTNR", cContainer , Nil}) aAdd(aItem, {"EXA_COD_I" , EE9->EE9_COD_I , Nil}) aAdd(aItem, {"EXA_SEQEMB", EE9->EE9_SEQEMB , Nil}) aAdd(aItem, {"EXA_LOTE" , cLote , Nil}) aAdd(aItem, {"EXA_QTDE" , EE9->EE9_SLDINI , Nil}) aAdd(aItem, {"EXA_PESOLQ", EE9->EE9_PSLQUN , Nil}) aAdd(aItem, {"EXA_PESOBR", EE9->EE9_PSBRUN , Nil}) aAdd(aItens, aItem) EE9->( dbskip() ) EndDo EndIf EndIf elseIf nOpc == 4 // alteração do container if EX9->( dbsetorder(1),msseek(cEmbarq) ) cContainer := "002" cLote := "1" aCab := {} aAdd(aCab, {"EX9_PREEMB", EX9->EX9_PREEMB , Nil}) aAdd(aCab, {"EX9_CONTNR", EX9->EX9_CONTNR , Nil}) aAdd(aCab, {"EX9_DTRETI", dDatabase , Nil}) aAdd(aCab, {"EX9_DTPREV", dDatabase + 30 , Nil}) aAdd(aCab, {"ATUCONTAIN", cContainer , Nil}) if EXA->( dbsetorder(1),msseek( EX9->(EX9_FILIAL+EX9_PREEMB+EX9_CONTNR) ) ) while EXA->(!EOF()) .AND. EXA->(EXA_FILIAL+EXA_PREEMB+EXA_CONTNR) == EX9->(EX9_FILIAL+EX9_PREEMB+EX9_CONTNR) aItem := {} aAdd(aItem, {"EXA_PREEMB", EXA->EXA_PREEMB , Nil}) aAdd(aItem, {"EXA_CONTNR", EXA->EXA_CONTNR , Nil}) aAdd(aItem, {"EXA_COD_I" , EXA->EXA_COD_I , Nil}) aAdd(aItem, {"EXA_SEQEMB", EXA->EXA_SEQEMB , Nil}) aAdd(aItem, {"EXA_LOTE" , cLote , Nil}) aAdd(aItem, {"EXA_QTDE" , EXA->EXA_QTDE/2 , Nil}) aAdd(aItem, {"EXA_PESOLQ", EXA->EXA_PESOLQ , Nil}) aAdd(aItem, {"EXA_PESOBR", EXA->EXA_PESOBR , Nil}) aAdd(aItens, aItem) aItem := {} aAdd(aItem, {"EXA_PREEMB", EXA->EXA_PREEMB , Nil}) aAdd(aItem, {"EXA_CONTNR", EXA->EXA_CONTNR , Nil}) aAdd(aItem, {"EXA_COD_I" , EXA->EXA_COD_I , Nil}) aAdd(aItem, {"EXA_SEQEMB", EXA->EXA_SEQEMB , Nil}) aAdd(aItem, {"EXA_LOTE" , soma1(cLote) , Nil}) aAdd(aItem, {"EXA_QTDE" , EXA->EXA_QTDE/2 , Nil}) aAdd(aItem, {"EXA_PESOLQ", EXA->EXA_PESOLQ , Nil}) aAdd(aItem, {"EXA_PESOBR", EXA->EXA_PESOBR , Nil}) aAdd(aItens, aItem) EXA->( dbskip() ) enddo endif endif elseIf nOpc == 5 // exclusão do container if EX9->( dbsetorder(1),msseek(cEmbarq) ) aCab := {} aAdd(aCab, {"EX9_PREEMB", EX9->EX9_PREEMB , Nil}) aAdd(aCab, {"EX9_CONTNR", EX9->EX9_CONTNR , Nil}) endif EndIf MsAguarde({|| MSExecAuto( {|X,Y,Z| EECAE104(X,Y,Z)},aCab ,aItens, nOpc) }, "Integrando Container Automático") If lMsErroAuto MostraErro() lMsErroAuto := .F. Else cAcao := iif( nOpc == 3 , " incluido",iif(nOpc==4," alterado"," excluido")) MsgInfo("Container para o embarque "+ alltrim(cEmbarq) + cAcao+" com sucesso!", "Aviso") EndIf Return |