Árvore de páginas

EECCV100 - MsExecAuto Rotina Automática de Vias de Transportes

Descrição:

Possibilita realizar a manutenção das Vias de Transportes, 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:
RotinaNome Técnico
EECAP100.PRW

Pedido de Exportação

EECCV100.PRWVias de Transportes
País(es):Todos
Banco(s) de Dados:Todos Homologados pela TOTVS
Tabelas Utilizadas:

SYQ - Capa do Vias de Transportes

SYR - Itens do Vias de Transportes

Parâmetros:
NomeTipoDescriçãoObrigatório
nOpcNuméricoOpção: 3=Incluir; 4=Alterar; 5=Excluir;
X
aCabArray of RecordArray com os dados do cabeçalho para integração automáticaX
aItensArray of RecordArray com os dados dos itens para integração automáticaX

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 "SYQ", "SYR"

Integração automática do Pedido de Exportação

Para realizar a inclusão automática de uma via de Transportes é necessário a utilização da função MsExecAuto utilizando o programa EECCV100 responsável pela manutenção das Vias de Transportes

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 dados 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);

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, {"YQ_VIA", SYQ->YQ_VIA , 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, {"YR_ORIGEM", SYR->YR_ORIGEM , 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 ))

  • Quando houver a necessidade da integração automática do pedido de exportação deve-se enviar o parâmetro "ATUVIA" para que dessa forma a rotina execute e integração caso não exista a origem e destino na via que foi informada, dessa forma será incluída via rotina automática de forma a facilitar a integração dos dados.

aadd( aCab , {'ATUVIA'   , .T. , NIL} )


Para um melhor entendimento segue abaixo um RDMake com a inclusão, alteração e exclusão de uma Via de Transportes.

RDMake de exemplo para integração automática da rotina de uma Via de Transportes.
User Function IncVtransp()
Local cViaTran := ""
Local lRot     := .T.

Private lMsErroAuto := .F.

   /************************
   //Inicializa o ambiente
   *************************/
   RpcSetType(3)
   RpcSetEnv("99", "01")
   nModulo := 29
   cModulo := "EEC"
   __CUSERID := "000000"

   cViaTran := AVKEY("V4","YQ_VIA")

   while lRot
      //Executa o primeiro critério de aceite, inclusão, alteração e exclusão simples
      If MsgYesNo("Deseja executar o primeiro critério de aceite, inclusão, alteração e exclusão simples?", "Aviso")

         //Executa a integração para Incluir a via de transporte
         If MsgYesNo("Deseja Incluir a via de transporte?", "Aviso")
            MyEECCV100(cViaTran, 3, 1)
         //Executa a Alteração da via de transporte onde inclui mais um registro
         elseIf MsgYesNo("Deseja Alterar a via de transporte incluindo uma origem destino?", "Aviso")
            MyEECCV100(cViaTran, 4, 1)
         //Executa a Alteração da via de transporte onde exclui um registro
         elseIf MsgYesNo("Deseja Alterar a via de transporte excluindo uma origem destino?", "Aviso")
            MyEECCV100(cViaTran, 6, 1)
         //Executa a exclusão da via de transporte
         elseIf MsgYesNo("Deseja Excluir a via de transporte?", "Aviso")
            MyEECCV100(cViaTran, 5, 1)
         endif

      //Executa o segundo critério de aceite, inclusão, alteração e exclusão
      elseif MsgYesNo("Deseja executar o segundo critério de aceite, inclusão de pedidos com e sem o detalhe do atuvia para atualizar o cadastro da via de transporte?", "Aviso")

         //Executa a integração de um pedido de exportação sem o atuvia, onde deve retornar o erro de que não existe a origem ou destino para o pedido
         If MsgYesNo("Deseja Incluir o pedido SEM o atuvia? Nesse cenário deve retornar a mensagem de error do execauto.", "Aviso")
            MyEECCV100(cViaTran, 3, 2)
         //Executa a Alteração da via de transporte onde inclui mais um registro
         elseIf MsgYesNo("Deseja o pedido COM o atuvia? Nesse cenário deve incluir o registro de origem e destino no cadastro da via de transporte.", "Aviso")
            MyEECCV100(cViaTran, 4, 2)
         endif

      //pergunta para sair da rotina de via de transporte
      elseIf MsgYesNo("Deseja SAIR da rotina?", "Aviso")
         lRot := .F.
      EndIf
   enddo

Return

static function MyEECCV100(cViaTran,nOpc,cCriterio)
Local nI
Local aCab     := {}
Local aItem    := {}
Local aItens   := {}

if cCriterio == 1 // teste do execauto de rotinas padrões, inclusão, alteração e exclusão da via de transporte
      if nOpc == 3 // inclusão da via de transporte

         cTpTransp := "1-"+alltrim(tabela("Y3","1",.F.))
         
         aCab := {}
         aAdd(aCab, {"YQ_VIA"     , cViaTran               , Nil})
         aAdd(aCab, {"YQ_DESCR"   , "ITEG AUTOMATICA"      , Nil})
         aAdd(aCab, {"YQ_COD_DI"  , cTpTransp              , Nil})

         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"SFA"))
         cDescDest := SY9->Y9_DESCR
         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"RIO"))
         cDescOrig := SY9->Y9_DESCR

         aItem := {}
         aAdd(aItem, {"YR_VIA"     , cViaTran     , Nil})
         aAdd(aItem, {"YR_ORIGEM"  , "RIO"        , Nil})
         aAdd(aItem, {"YR_DESTINO" , "SFA"        , Nil})
         aAdd(aItem, {"YR_MOEDA"   , "US$"        , Nil})
         aAdd(aItem, {"YR_TRANS_T" , 10           , Nil})
         aAdd(aItem, {"YR_PAIS_DE" , "249"        , Nil})
         aAdd(aItem, {"YR_CID_DES" , cDescDest    , Nil})
         aAdd(aItem, {"YR_PAIS_OR" , "105"        , Nil})
         aAdd(aItem, {"YR_CID_ORI" , cDescOrig    , Nil})
         aAdd(aItem, {"YR_TIPTRAN" , "1"          , Nil})
         aAdd(aItens, aItem)

      elseIf nOpc == 4 // alteração da via de transporte incluindo segundo registro

         cTpTransp := "1-"+alltrim(tabela("Y3","1",.F.))
         
         aCab := {}
         aAdd(aCab, {"YQ_VIA"     , cViaTran               , Nil})
         aAdd(aCab, {"YQ_DESCR"   , "ITEG AUTOMATICA"      , Nil})
         aAdd(aCab, {"YQ_COD_DI"  , cTpTransp              , Nil})

         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"SFA"))
         cDescDest := SY9->Y9_DESCR
         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"SSZ"))
         cDescOrig := SY9->Y9_DESCR

         aItem := {}
         aAdd(aItem, {"YR_VIA"     , cViaTran     , Nil})
         aAdd(aItem, {"YR_ORIGEM"  , "SSZ"        , Nil})
         aAdd(aItem, {"YR_DESTINO" , "SFA"        , Nil})
         aAdd(aItem, {"YR_MOEDA"   , "US$"        , Nil})
         aAdd(aItem, {"YR_TRANS_T" , 10           , Nil})
         aAdd(aItem, {"YR_PAIS_DE" , "249"        , Nil})
         aAdd(aItem, {"YR_CID_DES" , cDescDest    , Nil})
         aAdd(aItem, {"YR_PAIS_OR" , "105"        , Nil})
         aAdd(aItem, {"YR_CID_ORI" , cDescOrig    , Nil})
         aAdd(aItem, {"YR_TIPTRAN" , "1"          , Nil})
         aAdd(aItens, aItem)

      elseIf nOpc == 6 // alteração da via de transporte excluindo primeiro registro

         nOpc := 4
         cTpTransp := "1-"+alltrim(tabela("Y3","1",.F.))
         aCab := {}
         aAdd(aCab, {"YQ_VIA"     , cViaTran               , Nil})
         aAdd(aCab, {"YQ_DESCR"   , "ITEG AUTOMATICA"      , Nil})
         aAdd(aCab, {"YQ_COD_DI"  , cTpTransp              , Nil})

         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"SFA"))
         cDescDest := SY9->Y9_DESCR
         SY9->(dbsetorder(2),msseek(xFilial("SY9")+"RIO"))
         cDescOrig := SY9->Y9_DESCR

         aItem := {}
         aAdd(aItem, {"YR_VIA"     , cViaTran     , Nil})
         aAdd(aItem, {"YR_ORIGEM"  , "RIO"        , Nil})
         aAdd(aItem, {"YR_DESTINO" , "SFA"        , Nil})
         aAdd(aItem, {"YR_MOEDA"   , "US$"        , Nil})
         aAdd(aItem, {"YR_TRANS_T" , 10           , Nil})
         aAdd(aItem, {"YR_PAIS_DE" , "249"        , Nil})
         aAdd(aItem, {"YR_CID_DES" , cDescDest    , Nil})
         aAdd(aItem, {"YR_PAIS_OR" , "105"        , Nil})
         aAdd(aItem, {"YR_CID_ORI" , cDescOrig    , Nil})
         aAdd(aItem, {"YR_TIPTRAN" , "1"          , Nil})
         aAdd(aItem, {"AUTDELETA"  , "S"          , Nil})
         aAdd(aItens, aItem)


      elseIf nOpc == 5 // exclusão da via de transporte
         
            aCab := {}
            aAdd(aCab, {"YQ_VIA" , cViaTran , Nil})
      
      EndIf

   MsAguarde({|| MSExecAuto( {|X,Y,Z| EECCV100(X,Y,Z)},aCab ,aItens, nOpc) }, "Integrando Vias de transportes!")

   If lMsErroAuto
      MostraErro()
      lMsErroAuto := .F.
   Else
      cAcao := iif( nOpc == 3 , " incluido",iif(nOpc==4," alterado"," excluido"))
      MsgInfo("Via de Transporte "+ alltrim(cViaTran) + cAcao+" com sucesso!", "Aviso")
   EndIf

elseif cCriterio == 2 // teste do execauto do vias de transporte através da inclusão de pedidos para validar com e sem atuvia no cabeçalho

      aPPedidos := {}
      dbselectarea("SA1")
      SA1->(dbgotop())
      while SA1->(!EOF())
         if SA1->A1_MSBLQL <> "1" .AND. SA1->A1_TIPO == "X" .AND. SA1->A1_TIPCLI <> "3" // pega um cliente do exterior para gerar pedido
            aadd(aPPedidos, {SA1->(recno())})
            exit
         endif
         SA1->(dbskip())
      enddo

      cOrigem := ""
      cVia := ""
      lVia := .T.
      dbselectarea("SYQ") // pega a primeira via da tabela e verifica uma sigla que não exista no cadastro de via de transporte como origem
      SYQ->(dbgotop())
      while SYQ->(!EOF())
         cVia := SYQ->YQ_VIA
         SY9->(dbsetorder(1),dbgotop())
         while SY9->(!EOF())
            if !SYR->(dbsetorder(1),msseek(xFilial("SYR")+cVia+SY9->Y9_SIGLA+avkey("SFA","YR_ORIGEM")+avkey("1","YR_TIPTRAN")))
               cOrigem := SY9->Y9_SIGLA
               exit
            endif
            SY9->(dbskip())
         enddo
         exit
      enddo

      cConPag := ""
      dbselectarea("SY6")
      SY6->(dbgotop())
      while SY6->(!EOF())
         if SY6->Y6_DIAS_PA == -1 // pega uma condição de pagamento a vista para o teste
            cConPag := SY6->Y6_COD
            exit
         endif
         SY6->(dbskip())
      enddo

      aPProdutos := {}
      dbselectarea("SA5")
      SA5->(dbsetorder(1))
      SA5->(dbgotop())
      cFornece := SA5->A5_FORNECE
      cFoLoja := SA5->A5_LOJA
      while SA5->(!EOF()) .AND. SA5->(A5_FORNECE+A5_LOJA) == cFornece+cFoLoja
         SB1->(dbsetorder(1),dbseek(xFilial("SB1")+SA5->A5_PRODUTO))
         if SB1->B1_MSBLQL <> "1" // pega o primeiro produto do primeiro fornedor posicionado e que não esteja bloqueado
            aadd( aPProdutos, {SB1->(recno())} )
            exit
         endif
         SA5->(dbskip())
      enddo

      aEmb := {}
      dbselectarea("EE5")
      EE5->(dbgotop())
      while EE5->(!EOF())
         if EE5->EE5_PESO > 0 // pega a embalagens para os produtos
            aadd( aEmb, {EE5->(recno())} )
            exit
         endif
         EE5->(dbskip())
      enddo

      // verifica a próxima numeração disponível para o pedido
      cPedido := "DTRADE-749-1"
      nI := 1
      EE7->(dbsetorder(1),dbgotop())
      while EE7->(!eof()) .and. EE7->(msseek(xFilial("EE7")+avkey(cPedido,'EE7_PEDIDO')))
         nI++
         cPedido := "DTRADE-749-"+alltrim(str(nI))
      enddo

      SA1->(dbgoto(aPPedidos[1][1]))

      if !empty(SA1->A1_CONDPAG)
         cConPag := SA1->A1_CONDPAG
      endif

      aadd( aCab , {'EE7_PEDIDO'   , cPedido                    , NIL} )
      aadd( aCab , {'EE7_IMPORT'   , SA1->A1_COD                , NIL} )
      aadd( aCab , {'EE7_IMLOJA'   , SA1->A1_LOJA               , NIL} )
      aadd( aCab , {'EE7_IMPODE'   , SA1->A1_NOME               , NIL} )
      aadd( aCab , {'EE7_FORN'     , cFornece                   , NIL} )
      aadd( aCab , {'EE7_FOLOJA'   , cFoLoja                    , NIL} )
      aadd( aCab , {'EE7_IDIOMA'   , "INGLES-INGLES"            , NIL} )
      aadd( aCab , {'EE7_CONDPA'   , cConPag                    , NIL} ) // aba financeiro 
      aadd( aCab , {'EE7_INCOTE'   , 'FOB'                      , NIL} )
      aadd( aCab , {'EE7_MOEDA'    , 'US$'                      , NIL} )
      aadd( aCab , {'EE7_CALCEM'   , '1'                        , NIL} ) //aba embalagens
      aadd( aCab , {'EE7_VIA'      , cVia                       , NIL} ) //aba transportes
      aadd( aCab , {'EE7_ORIGEM'   , cOrigem                    , NIL} )
      aadd( aCab , {'EE7_DEST'     , 'SFA'                      , NIL} )
      aadd( aCab , {'EE7_TIPTRA'   , '1'                        , NIL} )
      if nOpc == 4
         aadd( aCab , {'ATUVIA'   , .T.                         , NIL} )
      endif

      cEmb := ""
      if len(aEmb) > 0
         EE5->(dbgoto(aEmb[1][1]))
         cEmb := EE5->EE5_CODEMB
      endif
      aItens := {}
      for nI := 1 to len(aPProdutos)
            SB1->(dbgoto(aPProdutos[nI][1]))
            aItem := {}
            aAdd(aItem, {'EE8_SEQUEN'    , str(nI)        , NIL} )
            aAdd(aItem, {'EE8_COD_I'     , SB1->B1_COD    , NIL} )
            aAdd(aItem, {'EE8_FORN'      , cFornece       , NIL} )
            aAdd(aItem, {'EE8_FOLOJA'    , cFoLoja        , NIL} )
            aAdd(aItem, {'EE8_SLDINI'    , nI*100         , NIL} )
            aAdd(aItem, {'EE8_EMBAL1'    , cEmb           , NIL} )
            aAdd(aItem, {'EE8_QE'        , 1              , NIL} )
            aAdd(aItem, {'EE8_PRECO '    , nI*100         , NIL} )
            aAdd(aItem, {'EE8_PLSQUN'    , 1              , NIL} )
            if getmv("MV_EECFAT") == .T.
               aAdd(aItem, {'EE8_TES'       ,"501"           , NIL} )
            endif
            aAdd(aItem, {'EE8_POSIPI'    ,SB1->B1_POSIPI  , NIL} )
            aadd(aItens,aclone(aItem))
      next
   
   aAux := {}
   nOpc := 3
   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 "+cPedido + cAcao+" com sucesso!", "Aviso")
   EndIf

endif

Return