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: |
| ||||||||||||||||
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: |
| ||||||||||||||||
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 "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:
- 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, {"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 |