Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Índice
indent8.1.
exclude.*CONTEÚDO
stylenone

01. VISÃO GERAL

A nova rotina de Registro de Viagem Modelo 3Pendências, permite a inclusão de viagens (entrega / transporte), permitindo selecionar as rotas e os documentos em aberto vinculados a ela pela consulta padrão. 

...

o gerenciamento das pendências de forma automática, selecionando-se a operação desejada e também os campos que devem ser complementados no registro.

02. OBJETIVO DE UTILIZAÇÃO

Realizar processamento da rotina (inclusão de registro) de Viagem Mod. 3 de gerenciamento das pendências de forma automática.

03. PARÂMETROS

O conteúdo das variáveis deverão ser enviados no instante da execução da rotina. Vide exemplo abaixo:

    • cFilPnd - Filial de origem da pendência.
    • cNumPnd - Número da pendência.
    • aDados - Campos que devem ser alterados.
    • nOpcao - Opção de execução do fonte.
    • cTMSCOSB - Deverá ser informada Identificação Produto na Conciliação Sobras/Faltas 0=Não Utiliza,1=Obrigatório,2=Não Obrigatório

Variáveis estáticas que devem ser carregadas via função TMSAF89Set:

    • nRotExt - Carrega rotina que deverá ser executada (10 - Indenizar / 11 - Encerrar / 12 - Estornar)
    • nRadio - Carrega opção no encerramento da pendência, quando nRotExt for igual a 11 (1 - Somente Encerrar / 2 - Re-entregar / 3 - Devolver)
    • lConAut - Carrega o fechamento automático da conciliação (.F. - Não / .T. - Sim)
    • lPergUsu - Carrega a exibição das perguntas ao usuário (.F. - Não exibe / .T. - Exibe)

04. EXEMPLO DE EXECUÇÃO DE PROGRAMA

...

Bloco de código
languageactionscript3
themeMidnight
#INCLUDE "TOTVSPROTHEUS.CH"
#INCLUDE "protheus.ch"
#INCLUDE 'FWMVCDEF.ch'

User Function IncVgeMod3()

Local cCodVei := "TMS001" 	// Código do veículo
Local cCodRb1 := ""		 	// Código do primeiro Reboque
Local cCodRb2 := ""     	// Código do segundo Reboque
Local cCodMot := "TMS001" 	// Código do motorista
/*{Protheus.doc} AutoPend
    Exemplo de Rotina Automática da Pendência
    @type Static Function
    @author Totvs
    @since 31/01/2025
    @version P12 R12.1.29
    @param nOpcao
    @return return, return_type, return_description
    @example EncPende()
    (examples)
    @see (links_or_references)
*/
User Function AutoPend(cFilPnd,cNumPnd,aDados,nOpcao)
Local aDadosDUU  := {}
Local aAreas     := {DUU->(GetArea()),GetArea()}
Local aCamposDUU := {}
Local lRet       := .T. 
Local cRotanCntFor1   := "ENTSP3"   //Código da rota
    
    oModel := FwLoadModel("TMSAF60")
	oModel:SetOperation(MODEL_OPERATION_INSERT)
	oModel:Activate()		
	//---- DTQ
	oModel:SetValue( "MdFieldDTQ", "DTQ_SERTMS"		, StrZero( 3, Len( DTQ->DTQ_SERTMS )) )
	oModel:SetValue( "MdFieldDTQ", "DTQ_TIPTRA"		, StrZero( 1, Len( DTQ->DTQ_TIPTRA )) )
	oModel:SetValue( "MdFieldDTQ", "DTQ_TIPVIA"		, StrZero( 3, Len( DTQ->DTQ_TIPVIA )) ) //Planejada
	oModel:SetValue( "MdFieldDTQ", "DTQ_ROTA"		, AllTrim(cRota) )

	//---- DTR
	oModel:SetValue( "MdGridDTR", "DTR_ITEM"		,  StrZero( 1, Len( DTR->DTR_ITEM ) ))
	oModel:SetValue( "MdGridDTR", "DTR_CODVEI"		, cCodVei)		
	If !Empty( cCodRb1 )
		oModel:SetValue( "MdGridDTR", "DTR_CODRB1"	, cCodRb1)
	EndIf
	If !Empty( cCodRb2 )
		oModel:SetValue( "MdGridDTR", "DTR_CODRB2"	, cCodRb2)
	EndIf	

	//--- DUP
	oModel:SetValue( "MdGridDUP", "DUP_CODMOT"		, cCodMot)
	oModel:SetValue( "MdGridDUP", "DUP_CONDUT"		, '1')

	If !oModel:VldData() .Or. !oModel:CommitData()
		AAdd(aMsgErr,{"Falha ao Incluir Viagem"+oModel:GetErrorMessage()[6],'00','ExecAuto()'}) //"Falha ao Incluir Viagem - " 
		lRet:= .F.		
	Else
		cRet := oModel:GetValue( "MdFieldDTQ", "DTQ_VIAGEM")
	EndIf

	oModel:DeActivate()
	oModel:= Nil

Return lRet  0
Local oMdlPnd
Local oMdlFldDUU
Local oStruDUU

Default cFilPnd := "M SP 01 "
Default cNumPnd := "000044"
Default aDados  := {{"DUU_MOTIVO","TESTE"},{"DUU_OBSENC","TESTE"},{"DUU_CODMTC","0001"}}
Default nOpcao  := 4

If !Empty(cNumPnd) .And. nOpcao != 0
	DUU->(DbSetOrder(1))
	If DUU->(DbSeek(xFilial("DUU") + cFilPnd + cNumPnd))	
		Aadd(aDadosDUU,{"DUU_FILPND",cFilPnd})
		Aadd(aDadosDUU,{"DUU_NUMPND",cNumPnd})
		For nCntFor1 := 1 To Len(aDados)
			Aadd(aDadosDUU,{aDados[nCntFor1,1],aDados[nCntFor1,2]})
		Next nCntFor1

		//-- Carrega Rotina Extra
		TMSAF89Set("nRotExt",11)	//-- Encerrar

		//-- Carrega Opção no Encerramento da Pendência
		TMSAF89Set("nRadio",1)		//-- Somente Encerra

		//-- Carrega Fechamento Automático da Conciliação
		TMSAF89Set("lConAut",.T.)	//-- Fecha Automaticamente

		//-- Exibe Perguntas ao Usuário
		TMSAF89Set("lPergUsu",.F.)	//-- Não Exibe Perguntas

	 	// Permite mudar o informe da Identificação Produto na Conciliação Sobras/Faltas 0=Não Utiliza,1=Obrigatório,2=Não Obrigatório
		TMSAF89Set("cTMSCOSB","0")

		//-- Carrega o Model da Pendência
		oMdlPnd := FWLoadModel("TMSAF89")
		oMdlPnd:SetOperation(nOpcao)
	
		//-- Ativa o Model da Pendência
		oMdlPnd:Activate()
	
		//-- Carrega o Modelo da Pendência
		oMdlFldDUU := oMdlPnd:GetModel("MdFieldDUU")
		oStruDUU   := oMdlFldDUU:GetStruct()
		aCamposDUU := oStruDUU:GetFields()
	 	oMdlFldDUU:Activate()
		
	
		//-- Registro de Pendências
		For nCntFor1 := 1 To Len(aDadosDUU)
			If AScan(aCamposDUU,{|x| AllTrim(x[3]) == AllTrim(aDadosDUU[nCntFor1,1])}) > 0
				If !oMdlFldDUU:SetValue(aDadosDUU[nCntFor1,1],aDadosDUU[nCntFor1,2])
					lRet := .F.
					Exit
				EndIf
			EndIf
		Next nCntFor1

		//-- Grava os Dados
		If lRet
			If (lRet := oMdlPnd:VldData())
				oMdlPnd:CommitData()
			EndIf
		EndIf
	
		//-- Se Ocorreu Algum Erro Exibe Mensagem
		If !lRet
			MostraErro()
		EndIf
	
		//-- Desativa o Model do Planejamento
		oMdlPnd:DeActivate()
	EndIf
EndIf

AEval(aAreas,{|x,y| RestArea(x),FwFreeArray(x)})
FwFreeArray(aAreas)

Return lRet


05. ASSUNTOS RELACIONADOS

...

...

...

ID's dos Modelos MVC - Carregamento Modelo 3 (TMSAF90 - SIGATMS)

...

06. TABELAS UTILIZADAS

  • DTQ - Viagem

  • DTR - Veículos da Viagem
  • DUA - Ocorrências
  • DUP - Motoristas da Viagem

    DUU - Registro de Pendências


HTML
<!-- esconder o menu --> 


<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>