Vídeo Aula – AdvPL 011 – Gravação de Registros via MsExecAuto

Vídeo Aula – AdvPL 011 – Gravação de Registros via MsExecAuto

Olá pessoal…

Na vídeo aula de hoje, vou falar um pouco sobre gravação de registros rotinas automáticas (MsExecAuto) e Controle de transações.



Abaixo o código fonte utilizado para os testes:

//Bibliotecas
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TBIConn.ch"

/*/{Protheus.doc} zExecAuto
Exemplo de gravação via ExecAuto
@author Atilio
@since 29/11/2015
@version 1.0
	@example
	u_zExecAuto()
/*/

User Function zExecAuto()
	Local aArea	:= GetArea()
	Local aVetor	:= {}
	//Variáveis utilizadas pelo ExecAuto (caso queira gravar o log em arquivo texto, utilize as duas variáveis abaixo
	/*Private lMSHelpAuto		:= .T.
	Private lAutoErrNoFile	:= .T.*/
	Private lMsErroAuto		:= .F.
	
	//Adicionando dados no produto para testar inclusão
	aVetor :=	{;
					{"B1_COD",			"99999Z",									Nil},;
					{"B1_DESC",		"PRODUTO TESTE - ROTINA AUTOMATICA",	Nil},;
					{"B1_TIPO",		"P+",										Nil},;
					{"B1_UM",			"UN",										Nil},;
					{"B1_LOCPAD",		"01",										Nil},;
					{"B1_PICM",		0,											Nil},;
					{"B1_IPI",			0,											Nil},;
					{"B1_CONTRAT",	"N",										Nil},;
					{"B1_LOCALIZ",	"N",										Nil};
				}
	
	//Iniciando controle de transação
	Begin Transaction
		//Chamando o cadastro de produtos de forma automática
		MSExecAuto({|x,y| Mata010(x,y)},aVetor,3)
		
		//Se houve erro
		If lMsErroAuto
			//Caso queira gravar o log em arquivo texto, não se deve usar a rotina MostraErro, mas sim o trecho abaixo:
			/*
			aLogAuto	:= {}
			cLogTxt	:= ""
			
			//Pegando log do ExecAuto
			aLogAuto := GetAutoGRLog()
			
			//Percorrendo o Log
			For nAux:=1 To Len(aLogAuto)
				cLogTxt += aLogAuto[nAux] + Chr(13)+Chr(10)
			Next
			*/
		
			//Mostrando a janela de erro
			MostraErro()
			
			//Disarmando a transação
			DisarmTransaction()
		EndIf
	             
	End Transaction

	RestArea(aArea)
Return

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.
Caso queira uma customização específica para sua empresa, saiba mais em nossa Loja.

Se quiser fazer o download desse código ou do conteúdo mostrado na vídeo aula, acesse nosso GitHub pelo link github.com/dan-atilio/AdvPL (Exemplos > Vídeo Aulas > 011 – Gravação de Registros via MsExecAuto).

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

10 comentários em “Vídeo Aula – AdvPL 011 – Gravação de Registros via MsExecAuto

  1. Parabéns pelo vídeo, ficou bom. Geralmente não ensinam sobre os campos obrigatórios no Execauto e no início quebramos a cabeça.

  2. Bom dia Dan_Atilio. Seu post é antigo, mas pra mim foi muito útil. Estou com uma dúvida e se voce puder me responder agradeço. Segue: Há possibilidade de criar um msexecauto entre empresas? No meu caso seria a rotina FINA100 – Transferencia.

    Valeu!!!

    1. Boa noite Anizio, tudo bem?

      Não entendi muito bem, você quer rodar a FINA100 para todas as empresas? Filiais?

      Se sim, você pode criar uma variável com as empresas / filiais (ou usar rotinas padrão, como a FWAllFilial), e depois alterar as variáveis cEmpAnt e cFilAnt (respectivamente Empresa e Filial), lembrando de tomar cuidado de sempre fazer um backup dessas variáveis (pois são variáveis públicas do Protheus).

      Abaixo um pequeno exemplo:

      aEmpresas := {"01"}
      aFiliais  := {"01","02"}
      cEmpBkp   := cEmpAnt
      cFilBkp   := cFilAnt
      
      //Percorrendo as empresas
      For nEmpAtu := 1 To Len(aEmpresas)
          cEmpAnt := aEmpresas[nEmpAtu]
      
          //Percorrendo as filiais
          For nFilAtu := 1 To Len(aFiliais)
              cFilAnt := aFiliais[nFilAtu]
              //Seus tratamentos e ExecAuto
          Next
      Next
      
      //Voltando os backups
      cEmpAnt := cEmpBkp
      cFilAnt := cFilBkp
      

      Espero ter ajudado.
      Um grande abraço.

  3. Que tal Daniel tengo un problema con la msexecauto de la mata 265, me manda error en la fecha y no se porque si asi es como debe ser, el error es el siguiente
    (argument #0 error, expected D-C, function dtoc on MSLOGITENS(MATXFUNB.PRX))
    La linea la traigo asi:
    Aadd(_aItem2, {{“DB_ITEM” ,”0001″ ,NIL},{“DB_LOCALIZ” ,aWBrowse1[nDA][6] ,NIL},{“DB_DATA” ,ddatabase ,NIL},;
    {“DB_QUANT” ,Val(aWBrowse1[nDA][7]) ,NIL}})//,{“DB_DOC” ,cDocu ,NIL}})
    Agradeceria tu ayuda

    1. Boa noite Shava, tudo bem?
      Rapaz, que estranho, ele está dizendo que esperava um tipo Data e recebeu um Caracter.
      Tente primeiramente alterar no seu fonte o dDataBase para Date().
      Caso o erro continue, por favor, me envie o error log completo para eu dar uma olhada.
      Um grande abraço.

  4. Que tal Daniel, tengo la Imagen del Error, podrías proporcionarme tu correo para enviarte el Archivo (Imagen), Saludos

  5. Olá amigo!
    me ajuda numa dúvida?

    Dá pra usar o MSExecAuto em uma rotina customizada? Pra explicar, essa rotina usa um MBrowse para gerir uma determinada tabela, então conta com AxInclui, AxAltera, AxExclui, etc… Por exemplo ao incluir, abre a interface com os campos (e seus diversos gatilhos) que salva o registro após clicar em Confirmar.

    O que eu penso em fazer é alimentar um array com diversos registros e incluir por lote (automaticamente, de uma só vez). Então a ideia é colocar num laço e mandar cada linha desse array para ser incluído. O mais importante é aproveitar a estrutura de gatilhos já configurado por trás dessa rotina, então enviando os dados, deve-se incluí-lo considerando as interações dos gatilhos. Assim como funciona com o MSExecAuto, entrentanto no meu caso a rotina é customizada.

    Alguma ideia?

    Grato!

Deixe uma resposta

%d blogueiros gostam disto: