💬 Ainda tá complicado resolver seu problema? Entre nos grupos de whatsapp que tá cheio de analistas top pra compatilhar ideias!
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:
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