Histórico da Página
ÍNDICE
...
Índice |
---|
01. VISÃO GERAL
Um funcionário (neste cenário, o chamamos de Participante) necessita fazer uma viagem corporativa, por algum motivo, seja ele qual for (ex: atendimento/visita ao cliente, reunião de negócios, evento). Então esta rotina terá como principal objetivo registrar a solicitação dessa viagem, contemplando informações relevantes para controlar as despesas da viagem e suas políticas.
Informações | ||
---|---|---|
| ||
Esta rotina contempla apenas solicitações do Protheus. As viagens integradas com o Reserve não geram solicitação, pois são compradas e emitidas diretamente pela agência. |
Aviso | ||
---|---|---|
| ||
|
Nos itens da viagem será possível selecionar e justificar/detalhar os seguintes serviços:
...
Aviso | ||
---|---|---|
| ||
|
...
Ou então pode ser que apenas uma das aprovações seja necessária, neste caso temos:
Aviso | ||
---|---|---|
| ||
Quando não existir a etapa de aprovação de viagens, para que a solicitação de viagens (FW3), se torne uma viagem (FL5) e possa dar continuidade ao fluxo, a solicitação passará obrigatoriamente pelo conferencia do departamento de viagens, na rotina de solicitação de viagens (FINA666) vá em OUTRAS AÇÕES → Enc. p/ Dpto Viagens (Gerando a viagem na rotina FINA665) |
02. EXEMPLO DE UTILIZAÇÃO
Acesso à rotina pelo caminho: Atualizações > Viagens > Solicitação de Viagem
O viajante deve informar os dados básicos da viagem no cabeçalho da sua solicitação, como origem e destino, datas de partida e chegada, cliente para atendimento (se houver), etc.
Para cada serviço deve ser informado o(s) Participante(s) e a(s) sua(s) respectiva(s) Entidade(s) de Custo.
Além disso, na aba Adiantamentos é possível marcar quais participantes receberão adiantamento.
Informações | ||||
---|---|---|---|---|
| ||||
Se a opção "Bloqueia Adiantamento" estiver com "1=Sim", o sistema passará a não permitir a geração do adiantamento, caso exista alguma prestação de contas em aberto para o participante na filial no qual está sendo incluída a solicitação, conforme parametrização das configurações "Dias (max.)" e "Quantidade (max.)". |
O valor calculado é uma previsão e é exibido somente quando estiver parametrizado:
...
03. ROTINA AUTOMÁTICA
Para execução da rotina automática, ilustramos algumas funcionalidades como Inclusão (MyFA666Inc), Alteração (MyFA666Alt) e Exclusão (MyFA666Del), nos seguintes exemplos:
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "PROTHEUS.CH" |
...
#INCLUDE "FWMVCDEF.CH" |
...
//---------- Inclusao da solicitacao de viagem ----------// |
...
User Function MyFA666Inc() |
...
Local oModel := Nil |
...
Local oModelFW3 := Nil |
...
Local oModelFW4 := Nil |
...
Local oModelFW5 := Nil |
...
Local oModelFW6 := Nil |
...
Local cFilAtu := "" |
...
RpcSetEnv("T1","D MG 01 "," |
...
claudio.ribeiro","1") // Inicializa ambiente com usuario solicitante |
...
oModel := FWLoadModel("FINA666") |
...
oModelFW3 := oModel:GetModel("FW3MASTER") // Cabecalho da viagem |
...
oModelFW4 := oModel:GetModel("FW4DETAIL") // Servicos |
...
oModelFW5 := oModel:GetModel("FW5DETAIL") // Participantes |
...
oModelFW6 := oModel:GetModel("FW6DETAIL") // Centro de custo |
...
cFilAtu := xFilial("FW3") |
...
oModel:SetOperation(MODEL_OPERATION_INSERT) |
...
oModel:Activate() |
...
// Preenche cabecalho da solicitacao de viagem |
...
oModelFW3:SetValue("FW3_FILIAL",cFilAtu) |
...
oModelFW3:SetValue("FW3_NACION","1") |
...
oModelFW3:SetValue("FW3_CODORI","SP") |
...
oModelFW3:SetValue("FW3_CODDES","RJ") |
...
oModelFW3:SetValue("FW3_DTINI",StoD("20190702")) |
...
oModelFW3:SetValue("FW3_DTFIM",StoD("20190705")) |
...
oModelFW3:SetValue("FW3_CLIENT","001 ") |
...
oModelFW3:SetValue("FW3_LOJA","01") |
...
oModelFW3:SetValue("FW3_STATUS","0") // Em Aberto, status inicial |
...
// Preenche grid do servico incluso na solicitacao da viagem |
...
oModelFW4:SetValue("FW4_ITEM",StrZero(1,TamSX3("FW4_ITEM")[1])) |
...
oModelFW4:SetValue("FW4_TIPO","1") // Aereo |
...
oModelFW4:SetValue("FW4_OBS", "Visita ao cliente") |
...
// Preenche grid dos participantes viajantes |
...
oModelFW5:SetValue("FW5_ITEM",StrZero(1,TamSX3("FW4_ITEM")[1])) |
...
oModelFW5:SetValue("FW5_PARTIC","000001") |
...
oModelFW5:SetValue("FW5_ADIANT",.T.) // Adiciona adiantamento ao participante |
...
oModelFW5:AddLine() // Adiciona linha para um segundo viajante |
...
oModelFW5:SetValue("FW5_ITEM",StrZero(2,TamSX3("FW4_ITEM")[1])) |
...
oModelFW5:SetValue("FW5_PARTIC","000002") |
...
oModelFW5:SetValue("FW5_ADIANT",.T.) // Adiciona adiantamento ao participante |
...
// Preenche grid do centro de custo |
...
oModelFW6:SetValue("FW6_ITEM",StrZero(1,TamSX3("FW4_ITEM")[1])) |
...
oModelFW6:SetValue("FW6_CC","002 ") |
...
oModelFW6:SetValue("FW6_PORCEN",100) |
...
oModelFW5:GoLine(1) |
...
// Validacao e gravacao dos dados se consistentes |
...
If oModel:VldData() |
...
oModel:CommitData() |
...
Conout("Inclusao da solicitacao de viagem concluida com sucesso.") |
...
Else VarInfo("",oModel:GetErrorMessage()) |
...
Conout("Erro na validacao, solicitacao de viagem nao foi incluida.") |
...
EndIf |
...
oModel:DeActivate() |
...
oModel:Destroy() |
...
RpcClearEnv() |
...
Return //---------- Alteracao da solicitacao de viagem ----------// |
...
User Function MyFA666Alt() |
...
Local aKeyFW4 := {} |
...
Local oModel := Nil |
...
Local oModelFW5 := Nil |
...
Local oModelFW6 := Nil |
...
Local cSolic := "0000000010" |
...
RpcSetEnv("T1","D MG 01 "," |
...
richard.santos","1") // Inicializa ambiente com usuario solicitante |
...
dbSelectArea("FW3") |
...
dbSetOrder(1) |
...
dbSeek(xFilial("FW3")+cSolic) |
...
// Carrega modelo de dados com a solicitacao de viagem posicionada |
...
oModel := FWLoadModel("FINA666") |
...
oModelFW5 := oModel:GetModel("FW5DETAIL") // Participantes |
...
oModelFW6 := oModel:GetModel("FW6DETAIL") // Centro de custo |
...
// Chave de busca do participante dentro da sol. da viagem |
...
aKeyFW4 := { {"FW5_FILIAL",xFilial("FW5")},{"FW5_SOLICI",cSolic},{"FW5_ITEM","01"},{"FW5_PARTIC","000002"} } |
...
oModel:SetOperation(MODEL_OPERATION_UPDATE) |
...
oModel:Activate() |
...
// Remove um dos viajantes, no caso o participante 000002 |
...
If oModelFW5:SeekLine(aKeyFLE) |
...
oModelFW5:DeleteLine() |
...
Else Conout("Viajante nao encontrado nesta solicitacao de viagem.") |
...
EndIf |
...
// Altera o centro de custo (posicionado automaticamente no primeiro grid) |
...
oModelFW6:SetValue("FW6_CC","003 ") |
...
// Validacao e gravacao dos dados se consistentes |
...
If oModel:VldData() |
...
oModel:CommitData() |
...
Conout("Alteracao da solicitacao de viagem efetuada com sucesso.") |
...
Else VarInfo("",oModel:GetErrorMessage()) |
...
Conout("Erro na validacao, solicitacao de viagem nao foi alterada.") |
...
EndIf |
...
oModel:DeActivate() |
...
oModel:Destroy() |
...
RpcClearEnv() |
...
Return //---------- Exclusao da solicitacao de viagem ----------// |
...
User Function MyFA666Del() |
...
Local oModel := Nil |
...
Local cSolic := "0000000010" |
...
RpcSetEnv("T1","D MG 01 "," |
...
claudio.ribeiro","1") // Inicializa ambiente com usuario solicitante |
...
dbSelectArea("FW3") |
...
dbSetOrder(1) |
...
dbSeek(xFilial("FW3")+cSolic) |
...
// Carrega modelo de dados com a solicitacao de viagem posicionada |
...
oModel:= FWLoadModel("FINA666") |
...
oModel:SetOperation(MODEL_OPERATION_DELETE) |
...
oModel:Activate() |
...
// Validacao e gravacao da exclusao |
...
If oModel:VldData() |
...
oModel:CommitData() |
...
Conout("Solicitacao de viagem excluida com sucesso.") |
...
Else VarInfo("",oModel:GetErrorMessage()) |
...
Conout("Erro na validacao, solicitacao de viagem nao foi excluida.") |
...
EndIf |
...
oModel:DeActivate() |
...
oModel:Destroy() |
...
RpcClearEnv() |
...
Return |
...
...
04. TABELAS UTILIZADAS
- FW3 - Cabeçalho da Solicitação
- FW4 - Serviços (itens)
- FW5 - Participantes
- FW6 - Entidades de Custos
...