Árvore de páginas

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:
RotinaNome Técnico
EECAP100.PRW

Manutenção Pedidos de exportação

EECAP101.PRWManutenção de Pedidos de Exportação
EECAP102.PRWManutenção de Pedidos de Exportação
AVGERAL.PRWFunção genérica para os módulos de Comércio Exterior
UPDEEC.PRWFunções de atualização de dicionários do módulo de Exportação - SIGAEEC
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:
NomeTipoDescriçãoObrigatório
nOpcNuméricoAção: 3=Incluir; 4=Alterar; 5=Excluir/Cancelar
X
aCabArray of RecordArray com os dados da Capa do PedidoX
aItensArray of RecordArray com os dados dos Itens do PedidoX
aAuxArray of RecordArray com os dados das tabelas Auxiliares

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).
Para esses casos é necessário executar a preparação do ambiente passando a opção do módulo ativo.

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:

    1. nome do campo;
    2. dados a serem inseridos;
    3. 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


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