EECAP100 - MsExecAuto Rotina Automática de Pedido de Exportação
Descrição: | Possibilita a realização das manutenções do Pedido de Exportação, tais como Inclusão, Alteração, Cancelamento 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: | EE7 - Capa do Pedidos de Exportação EE8 - Itens do Pedidos de Exportação EEN - Notifys EXB - Agenda de Atividades/Documentos EEB - Agentes de um Pedido | ||||||||||||||||||||
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 "EE7", "EE8","EEB", "EEN","EXB" |
Integração automática do Pedido de Exportação
Para realizar a inclusão automática de um pedido de exportação é necessário a utilização da função MsExecAuto utilizando o programa EECAP100 responsável pela manutenção dos pedidos.
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 do pedidos 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);
Exemplos:
- O array para o cabeçalho:
aadd( aCab , {'EE7_PEDIDO',"0000000001", 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, {'EE8_SEQUEN', str(1), 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 os arrays dos auxiliares que seguem praticamente a mesma lógica dos itens com um adendo de quando vai passar a informação para o array de auxiliares deve-se informar qual alias da tabela que receberá o cadastro:
aAdd(aDoc, {"EXB_TIPO" , "1" , Nil})
aAdd(aDoc, {"EXB_CODATV", "02" , Nil})
aAdd(aDocs, aDoc)
aAdd(aAux, {"EXB", aDocs})
Repare que o array Doc é inserido no array Docs e em seguida inserido num novo array auxiliar onde o mesmo recebe o aliás da tabela de documentos e o array contendo os documentos que deseja incluir através da rotina automática.
Exclusão de Itens:
Para a remoção de um item, na operação de Alteração ("nOpc" com o conteúdo igual a 4) o mesmo deve receber no array uma linha onde o nome do campo deve ser AUTDELETA e o dado a ser enviado "S", indicando a exclusão do item do pedido. Caso o conteúdo deste campo seja enviado com "N" o item não será excluído.
Exclusão e Cancelamento do Pedido:
Para excluir ou cancelar o pedido, deve-se enviar o parâmetro "nOpc" com o conteúdo igual a 5 (Exclusão/Cancelamento) e, adicionalmente, deve-se inserir um campo no array de campos da capa do pedido indicando a sub-operação, conforme os exemplos abaixo:
1. Para excluir o pedido:
Para que o pedido seja excluido, ou seja, apagado em definitivo da base de dados, deve-se incluir no array de campos da capa uma linha onde o nome do campo deve ser AUTDELETA e o dado a ser enviado "S":
aAdd(aCab, {"AUTDELETA" , "S" , Nil} )
2. Para cancelar o pedido:
Para que o pedido seja cancelado, ou seja, seu status seja alterado para "Cancelado", impedindo o seu embarque porém mantendo o registro na base de dados, deve-se incluir no array de campos da capa uma linha onde o nome do campo deve ser AUTCANCELA e o dado a ser enviado "S":
aAdd(aCab, {"AUTCANCELA" , "S" , Nil} )
*Caso não seja enviada a indicação de exclusão ou cancelamento do pedido a operação será abortada, retornando a mensagem de erro: "Não foi informada a sub-operação de exclusão (Cancelar/Eliminar)".
Integração de Embarque:
Também é possível, ao realizar a integração automática de um Pedido de Exportação, informar ao sistema para que seja realizada automaticamente a integração do Embarque de Exportação. Neste caso, é necessário que seja enviado no Array da capa do Pedido (aCab), a informação "ATUEMB" com o conteúdo "S".
- Exemplo de como enviar a informação ATUEMB para que seja efetuada a integração de um Embarque ao integrar o Pedido de Exportação. Neste cenário, o sistema irá utilizar as mesmas informações enviadas no pedido, para realizar a integração do Embarque.
aAdd(aCab, {"ATUEMB", "S", Nil}) - Caso queria integrar um Embarque, porém enviando algumas informações diferentes das utilizadas no Pedido (como o código do embarque, por exemplo), também é possível que seja enviado os dados da capa do Embarque (Tabela EEC) e dos Itens do Embarque (Tabela EE9) junto do array de dados auxiliares (aAux). Para detalhar melhor como montar a estrutura necessária para enviar os dados do Embarque junto com as tabelas auxiliares, consultar a documentação da Integração Automática do Embarque em: EECAE100 - MsExecAuto Rotina Automática de Embarque de Exportação
- Exemplo de como enviar a informação ATUEMB para que seja efetuada a integração de um Embarque ao integrar o Pedido de Exportação. Neste cenário, o sistema irá utilizar as mesmas informações enviadas no pedido, para realizar a integração do Embarque.
Para um melhor entendimento segue abaixo um RDMake com a inclusão, alteração e exclusão de um pedido e seus auxiliares.
RDMake de exemplo para integração automática da rotina de Pedido de Exportação. |
---|
#INCLUDE "TOTVS.CH" User Function MyEECAP100() Local lRot := .T. Local cPedido := "0000000001" Private aPDocs := {} Private aPPedidos := {} Private aPAgentes := {} Private aPNotifys := {} Private aPProdutos := {} Private aCondPag := {} Private aEmb := {} /************************ //Inicializa o ambiente *************************/ RpcSetEnv("99", "01") nModulo := 29 cModulo := "EEC" __CUSERID := "000000" while lRot //Executa a integração para Incluir o Pedido If MsgYesNo("Deseja Incluir o Pedido e Auxiliares?", "Aviso") IncAP100(cPedido, 3, 3) //Executa a Alteração Alterando o Pedido e Reenviando os Auxiliares elseIf MsgYesNo("Deseja Alterar o Pedido e Auxiliares?", "Aviso") IncAP100(cPedido, 4, 4) //Executa a Alteração Alterando o Pedido e Excluindo os Auxiliares elseIf MsgYesNo("Deseja Alterar o Pedido e Excluir Auxiliares?", "Aviso") IncAP100(cPedido, 4, 5) //Executa a Alteração Excluindo o Pedido elseIf MsgYesNo("Deseja Excluir o Pedido?", "Aviso") IncAP100(cPedido, 5, 5) elseIf MsgYesNo("Deseja parar a rotina?", "Aviso") lRot := .F. EndIf enddo Return Nil /***************************************************************** ******************************************************************/ Static Function IncAP100(cPedido, nOpc, nOpcDet) Local aCab := {}, aItens := {}, aAux := {} Local nP := 0, nI, nN, nD Local cFornece := "" Local cFoLoja := "" Private lMsErroAuto := .f. aPDocs := {} aPPedidos := {} aPAgentes := {} aPNotifys := {} aPProdutos := {} aCondPag := {} aEmb := {} aItens := {} aItem := {} if nOpc == 3 aCab := {} aadd( aCab , {'EE7_PEDIDO' , cPedido , NIL} ) aadd( aCab , {'EE7_IMPORT' , "000001" , NIL} ) aadd( aCab , {'EE7_IMLOJA' , "01" , NIL} ) aadd( aCab , {'EE7_IMPODE' , "NOME CLIENTE" , NIL} ) aadd( aCab , {'EE7_FORN' , "000001" , NIL} ) aadd( aCab , {'EE7_FOLOJA' , "01" , NIL} ) aadd( aCab , {'EE7_IDIOMA' , "INGLES-INGLES" , NIL} ) aadd( aCab , {'EE7_CONDPA' , "00001" , NIL} ) aadd( aCab , {'EE7_MPGEXP' , "003" , NIL} ) aadd( aCab , {'EE7_INCOTE' , 'FOB' , NIL} ) aadd( aCab , {'EE7_FRPPCC' , "CC" , NIL} ) aadd( aCab , {'EE7_MOEDA' , 'US$' , NIL} ) aadd( aCab , {'EE7_CALCEM' , '1' , NIL} ) aadd( aCab , {'EE7_VIA' , "001" , NIL} ) //Enviando o ATUEMB igual a S, o sistema realizará a integração automática do Embarque de Exportação. aAdd(aCab, {"ATUEMB", "S", Nil}) aAdd(aItem, {'EE8_SEQUEN' , str(1) , NIL} ) aAdd(aItem, {'EE8_COD_I' , "0000000001" , NIL} ) aAdd(aItem, {'EE8_FORN' , "000001" , NIL} ) aAdd(aItem, {'EE8_FOLOJA' , "01" , NIL} ) aAdd(aItem, {'EE8_SLDINI' , 100 , NIL} ) aAdd(aItem, {'EE8_EMBAL1' , "001" , NIL} ) aAdd(aItem, {'EE8_QE' , 1 , NIL} ) aAdd(aItem, {'EE8_PRECO ' , 100 , NIL} ) aAdd(aItem, {'EE8_PSLQUN' , 1 , NIL} ) aAdd(aItem, {'EE8_TES' , "501" , NIL} ) aAdd(aItem, {'EE8_POSIPI' , "00000000" , NIL} ) aAdd(aItem, {"AUTDELETA" , "N" , Nil} ) AADD( aItens, aClone(aItem)) aItem := {} Elseif nOpc == 4 aadd( aCab , {'EE7_PEDIDO' , cPedido , NIL} ) aadd( aCab , {'EE7_IMPORT' , "000001" , NIL} ) aadd( aCab , {'EE7_IMLOJA' , "01" , NIL} ) aadd( aCab , {'EE7_IMPODE' , "NOME CLIENTE" , NIL} ) aadd( aCab , {'EE7_FORN' , "000001" , NIL} ) aadd( aCab , {'EE7_FOLOJA' , "01" , NIL} ) aadd( aCab , {'EE7_IDIOMA' , "INGLES-INGLES" , NIL} ) aadd( aCab , {'EE7_CONDPA' , "00002" , NIL} ) aadd( aCab , {'EE7_MPGEXP' , "003" , NIL} ) aadd( aCab , {'EE7_INCOTE' , 'FOB' , NIL} ) aadd( aCab , {'EE7_FRPPCC' , "CC" , NIL} ) aadd( aCab , {'EE7_MOEDA' , 'US$' , NIL} ) aadd( aCab , {'EE7_CALCEM' , '1' , NIL} ) aadd( aCab , {'EE7_VIA' , "002" , NIL} ) aAdd(aItem, {'EE8_SEQUEN' , str(1) , NIL} ) aAdd(aItem, {'EE8_COD_I' , "0000000001" , NIL} ) aAdd(aItem, {'EE8_FORN' , "000001" , NIL} ) aAdd(aItem, {'EE8_FOLOJA' , "01" , NIL} ) aAdd(aItem, {'EE8_SLDINI' , 100 , NIL} ) aAdd(aItem, {'EE8_EMBAL1' , "001" , NIL} ) aAdd(aItem, {'EE8_QE' , 1 , NIL} ) aAdd(aItem, {'EE8_PRECO ' , 100 , NIL} ) aAdd(aItem, {'EE8_PSLQUN' , 1 , NIL} ) aAdd(aItem, {'EE8_TES' , "501" , NIL} ) aAdd(aItem, {'EE8_POSIPI' , "00000000" , NIL} ) aAdd(aItem, {"AUTDELETA" , "S" , Nil} ) AADD( aItens, aClone(aItem)) aItem := {} aAdd(aItem, {'EE8_SEQUEN' , str(1) , NIL} ) aAdd(aItem, {'EE8_COD_I' , "0000000002" , NIL} ) aAdd(aItem, {'EE8_FORN' , "000001" , NIL} ) aAdd(aItem, {'EE8_FOLOJA' , "01" , NIL} ) aAdd(aItem, {'EE8_SLDINI' , 200 , NIL} ) aAdd(aItem, {'EE8_EMBAL1' , "002" , NIL} ) aAdd(aItem, {'EE8_QE' , 2 , NIL} ) aAdd(aItem, {'EE8_PRECO ' , 200 , NIL} ) aAdd(aItem, {'EE8_PSLQUN' , 2 , NIL} ) aAdd(aItem, {'EE8_TES' , "501" , NIL} ) aAdd(aItem, {'EE8_POSIPI' , "00000000" , NIL} ) aAdd(aItem, {"AUTDELETA" , "N" , Nil} ) AADD( aItens, aClone(aItem)) aItem := {} elseIf nOpc == 5 aadd( aCab , {'EE7_PEDIDO' , cPedido , NIL} ) aadd( aCab , {'EE7_IMPORT' , "000001" , NIL} ) aadd( aCab , {'EE7_IMLOJA' , "01" , NIL} ) aadd( aCab , {'EE7_FORN' , "000001" , NIL} ) aadd( aCab , {'EE7_FOLOJA' , "01" , NIL} ) aAdd( aCab , {"AUTDELETA" ,"S" , Nil}) aAdd(aItem, {'EE8_SEQUEN' , str(1) , NIL} ) aAdd(aItem, {'EE8_COD_I' , "0000000002" , NIL} ) aAdd(aItem, {'EE8_FORN' , "000001" , NIL} ) aAdd(aItem, {'EE8_FOLOJA' , "01" , NIL} ) aAdd(aItem, {"AUTDELETA" ,"S" , Nil} ) AADD( aItens, aClone(aItem)) aItem := {} EndIf // Complementos dos pedido Notifys, Documentos e Agentes If alltrim(str(nOpcDet)) $ "3|4|5" .and. nOpc <> 5 aAux := {} // Notifys aNotifys := {} aNotify := {} if nOpcDet == 3 // inclusão dos notifys aAdd(aNotify, {"EEN_IMPORT", "000001" , Nil}) aAdd(aNotify, {"EEN_IMLOJA", "01" , Nil}) elseif nOpcDet == 4 // alteração dos notifys aAdd(aNotify, {"EEN_IMPORT", "000001" , Nil}) aAdd(aNotify, {"EEN_IMLOJA", "01" , Nil}) aAdd(aNotify, {"AUTDELETA" , "S" , Nil}) aAdd(aNotify, {"EEN_IMPORT", "000002" , Nil}) aAdd(aNotify, {"EEN_IMLOJA", "01" , Nil}) aAdd(aNotify, {"AUTDELETA" , "N" , Nil}) elseIf nOpcDet == 5 // exclusão do notify aAdd(aNotify, {"EEN_IMPORT", "000001" , Nil}) aAdd(aNotify, {"EEN_IMLOJA", "01" , Nil}) aAdd(aNotify, {"AUTDELETA" , "S" , Nil}) EndIf aAdd(aNotifys, aNotify) aAdd(aAux, {"EEN", aNotifys}) // Documentos aDocs := {} aDoc := {} if nOpcDet == 3 // inclusão dos Documentos aAdd(aDoc, {"EXB_TIPO" , "1" , Nil}) aAdd(aDoc, {"EXB_CODATV", "01" , Nil}) elseif nOpcDet == 4 // alteração dos Documentos aAdd(aDoc, {"EXB_TIPO" , "1" , Nil}) aAdd(aDoc, {"EXB_CODATV", "01" , Nil}) aAdd(aDoc, {"AUTDELETA" , "S" , Nil}) aAdd(aDoc, {"EXB_TIPO" , "1" , Nil}) aAdd(aDoc, {"EXB_CODATV", "02" , Nil}) aAdd(aDoc, {"AUTDELETA" ,"N" , Nil}) elseIf nOpcDet == 5 // exclusão do documento aAdd(aDoc, {"EXB_TIPO" , "1" , Nil}) aAdd(aDoc, {"EXB_CODATV", "02" , Nil}) aAdd(aDoc, {"AUTDELETA" , "S" , Nil}) EndIf aAdd(aDocs, aDoc) aAdd(aAux, {"EXB", aDocs}) // Agentes aAgentes := {} aAgente := {} if nOpcDet == 3 // inclusão dos Agentes aAdd(aAgente, {"EEB_CODAGE", "001" , Nil}) aAdd(aAgente, {"EEB_TIPCOM", "1" , Nil}) // 1-A Remeter | 2-Conta Grafcica | 3-Deduzir da Fatura aAdd(aAgente, {"EEB_TIPCVL", "2" , Nil}) // 1-Percentual | 2-Valor Fixo | 3-Percentual por item aAdd(aAgente, {"EEB_VALCOM", 10 , Nil}) aAdd(aAgente, {"EEB_REFAGE", "NOME AGENTE" , Nil}) elseif nOpcDet == 4 // alteração dos Agentes aAdd(aAgente, {"EEB_CODAGE", "001" , Nil}) aAdd(aAgente, {"EEB_TIPCOM", "1" , Nil}) // 1-A Remeter | 2-Conta Grafcica | 3-Deduzir da Fatura aAdd(aAgente, {"EEB_TIPCVL", "2" , Nil}) // 1-Percentual | 2-Valor Fixo | 3-Percentual por item aAdd(aAgente, {"EEB_VALCOM", 10 , Nil}) aAdd(aAgente, {"EEB_REFAGE", "NOME AGENTE" , Nil}) aAdd(aAgente, {"AUTDELETA" ,"S" , Nil}) aAdd(aAgente, {"EEB_CODAGE", "002" , Nil}) aAdd(aAgente, {"EEB_TIPCOM", "1" , Nil}) // 1-A Remeter | 2-Conta Grafcica | 3-Deduzir da Fatura aAdd(aAgente, {"EEB_TIPCVL", "2" , Nil}) // 1-Percentual | 2-Valor Fixo | 3-Percentual por item aAdd(aAgente, {"EEB_VALCOM", 10 , Nil}) aAdd(aAgente, {"EEB_REFAGE", "NOME AGENTE" , Nil}) aAdd(aAgente, {"AUTDELETA" ,"N" , Nil}) elseIf nOpcDet == 5 // exclusão do agente aAdd(aAgente, {"EEB_CODAGE", "002" , Nil}) aAdd(aAgente, {"EEB_TIPCOM", "1" , Nil}) // 1-A Remeter | 2-Conta Grafcica | 3-Deduzir da Fatura aAdd(aAgente, {"EEB_TIPCVL", "2" , Nil}) // 1-Percentual | 2-Valor Fixo | 3-Percentual por item aAdd(aAgente, {"AUTDELETA" ,"S" , Nil}) EndIf aAdd(aAgentes, aAgente) aAdd(aAux, {"EEB", aAgentes}) EndIf // execução DA rotina utomática MsAguarde({|| MSExecAuto( {|X,Y,Z,Aux| EECAP100(X,Y,Z,Aux)},aCab ,aItens, nOpc, aAux) }, "Integrando Pedido Automático") If lMsErroAuto MostraErro() lMsErroAuto := .F. Else cAcao := iif( nOpc == 3 , " incluido",iif(nOpc==4," alterado"," excluido")) MsgInfo("Pedido " + cAcao + " com sucesso!", "Aviso") EndIf Return |