Olá pessoal, td certo?
Vai aí um ponto de entrada muito útil no TMS Protheus. Ele faz o que você precisa exatamente após a gravação dos documentos de transporte. Quem nunca precisou de um P.E. após a geração de um documento fiscal?
Veja também este P.E. em ação em um exemplo que fiz para gravar viagem e seus movimentos automaticamente
Segue então o exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include "rwmake.ch" #include "protheus.ch" /*/{Protheus.doc} TM200FIM //TODO Este Ponto de Entrada, localizado no TMSA200(Cálculo do Frete), é executado após o final de todo o processo de gravação dos documentos e da geração das notas de saída. @author Fernando Bueno @since 01/01/2017 @version undefined @type function /*/ User Function TM200FIM() Local aArea := GetArea() Local cFilDoc := PARAMIXB[1] Local cDocto := PARAMIXB[2] Local cSerie := PARAMIXB[3] //Gravar dados da viagem fViagem(cFilDoc, cDocto, cSerie) //Outras operações como: //Enviar e-mail //Gravar operações de viagem RestArea(aArea) Return Nil |
Exemplo 2, mais completo:
![](http://www.fbsolutions.com.br/wp-content/uploads/2023/12/CAPACITAÇÃO-PROTHEUS.jpg)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include "rwmake.ch" #include "topconn.ch" #INCLUDE "PROTHEUS.CH" #INCLUDE "FILEIO.CH" #DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos / gravados por vez User Function TM200FIM() Local aArea := GetArea() Local cFilDoc := PARAMIXB[1] Local cDocto := PARAMIXB[2] Local cSerie := PARAMIXB[3] Local cQuery := "" Local lGeraLog := .T. //Pode usar um parametro também Local nErro := 0 If lGeraLog cQuery := "UPDATE " + RetSQLName("DT6") + " SET DT6_IDRCTE = '100' " cQuery += "WHERE D_E_L_E_T_ = ' ' " cQuery += "AND DT6_FILDOC = '" + AllTrim(cFilDoc) + "' " cQuery += "AND DT6_DOC = '" + AllTrim(cDocto) + "' " cQuery += "AND DT6_SERIE = '" + AllTrim(cSerie) + "' " nErro := TCSQLEXEC(cQuery) Log(nErro, cQuery) EndIf RestArea(aArea) Return Nil Static Function Log(nErro, cQuery) //U_Log() Local cBuffer := "" Local nHOrigem , nHDestino Local nBytesLidos , nBytesFalta , nTamArquivo Local nBytesLer , nBytesSalvo Local cTime := TIME() Local cHora := SUBSTR(cTime, 1, 2) Local cMinutos := SUBSTR(cTime, 4, 2) Local cSegundos := SUBSTR(cTime, 7, 2) cBuffer := "Usuário:" + AllTrim(UsrFullName(__cUserID)) + "; Filial:" + cFilAnt + "; Ambiente:" + GetEnvServer() + "; Data/Hora:" + DTOC(DATE()) + " " + TIME() + "; Registros: " + cValToChar(nErro) + CRLF cBuffer += cQuery + CRLF // Cria o arquivo de destino nHDestino := FCREATE("ARQUIVO/CTE_" + __cUserID + "_" + DTOS(DATE()) + cHora+cMinutos+cSegundos + ".LOG", FC_NORMAL) // Testa a criação do arquivo de destino If nHDestino == -1 MsgStop('Erro ao criar destino. Ferror = '+str(ferror(),4),'Erro') Return .F. Endif // Salva os dados lidos no arquivo de destino nBytesSalvo := FWRITE(nHDestino, cBuffer) // Fecha os arquivos de origem e destino FCLOSE(nHDestino) Return |
Melhor ainda: veja como utilizar este PE para gravar viagem automaticamente, no fim da gravação do Ct-e
Espero que seja útil pra você.
Fernando Bueno
Consultor em FBSOLUTIONS
Sou consultor na área de implantação de sistemas ERP, com experiência na análise e implantação de projetos de sistemas, configurando a estrutura do software, capacitando usuários-chaves, ministrando treinamentos e workshops.
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In