| Índice | ||||
|---|---|---|---|---|
|
...
Un empleado (en este escenario, lo llamamos Participante) necesita realizar un viaje corporativo, por algún motivo, sea este cual fuera (ej: atención/visita al cliente, reunión de negocios, evento). Entonces esta rutina tendrá como principal objetivo registrar la solicitud de este viaje, considerando informaciones relevantes para controlar los gastos del viaje y sus
...
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. |
Nos itens da viagem será possível selecionar e justificar/detalhar os seguintes serviços:
| Aviso | ||
|---|---|---|
| ||
|
Quando parametrizadas para aprovação após a solicitação, será gerada uma pendência de aprovação para o superior dos participantes. Caso contrário esta pode ser enviada para o departamento de viagens (diretamente após a solicitação ou em um segundo momento através da opção de envio) e a viagem será gerada automaticamente.
Exemplo:
A empresa pode decidir por passar por todas as aprovações, neste caso o fluxo será:
Ou então pode ser que apenas uma das aprovações seja necessária, neste caso temos:
...
rutina considera solamente solicitudes del Protheus. Los viajes integrados con el Reserve no generan solicitud, porque se compran y emiten directamente en la agencia. |
| Aviso | ||
|---|---|---|
| ||
|
En los ítems del viaje se podrán seleccionar y justificar/detallar los siguientes servicios:
| Aviso | ||
|---|---|---|
| ||
|
Cuando se parametrizan para aprobación después de solicitarlas, se generará un asunto pendiente de aprobación para el superior de los participantes. En caso contrario, esta se puede enviar al departamento de viajes (directamente después de la solicitud o en un segundo momento a través de la opción de envío) y el viaje se generará automáticamente.
Ejemplo:
La empresa puede decidir por pasar por todas las aprobaciones, en este caso el flujo será:
O entonces puede ser que tan solo una de las aprobaciones sea necesaria, en este caso tenemos:
| Aviso | ||
|---|---|---|
| ||
Cuando no exista la etapa de aprobación de viajes, para que la solicitud de viajes (FW3), se vuelva un viaje (FL5) y logre dar continuidad al flujo, la solicitud pasará obligatoriamente por la verificación del departamento de viajes, en la rutina de solicitud de viajes (FINA666) vaya a OTRAS ACCIONES → Enc. p/ Depart Viajes (Generando el viaje en la rutina FINA665). |
Acceso a la rutina por el camino: Actualizaciones > Viajes > Solicitud de viaje
El viajero debe informar los datos básicos del viaje en el encabezado de su solicitud, como origen y destino, fechas de partida y llegada, cliente para atención (si hubiera), etc.
Para cada servicio se deben informar lo(s) Participante(s) y su(s) respectivo(s) Ente(s) de costo.
| Aviso | ||
|---|---|---|
| ||
No se permite incluir el mismo centro de costo en el prorrateo de centro de costos. Si la clave única fuera: Sucursal + Núm. Solicitud + Ítem + C.Costo ( FW6_FILIAL+FW6_SOLICI+FW6_ITEM+FW6_CC), no se permitirá utilizar el mismo centro de costo, aunque los otros entes contables sean diferentes. En la release 12.1.2410, con aplicación del paquete acumulado con fecha igual o superior al 08/11/2024, el sistema pasa a considerar la modificación de la clave única y del índice 1 de la tabla FW6 para: FW6_FILIAL+FW6_SOLICI+FW6_ITEM+FW6_CC+FW6_ITECTA+FW6_CLVL. De esta manera, si la clave única es: Sucursal + Núm. Solicitud + Ítem + C.Costo + Ítem contable + Clase de valor (FW6_FILIAL+FW6_SOLICI+FW6_ITEM+FW6_CC+FW6_ITECTA+FW6_CLVL), no se permitirá utilizar la misma combinación de entes contables ( C. Costo, Ítem contable y Clase de valor). Si se modifica la clave única de la tabla FW6, es necesario realizar también la adecuación de la clave única y del índice 1 de la tabla FLH a: FLH_FILIAL+FLH_VIAGEM+FLH_ITEM+FLH_CC+FLH_ITECTA+FLH_CLVL Las adecuaciones de las tablas FW6 y FLH están disponibles a partir del paquete acumulado con fecha igual o superior al 08/11/2024 exclusivamente para la release 12.1.2410. |
Además, en la solapa Anticipos se pueden marcar los participantes que recibirán el anticipo.
| Informações | ||||
|---|---|---|---|---|
| ||||
Si la opción "Bloquea anticipo" estuviera com "1=Sí", el sistema no permitirá generar el anticipo, si existiera alguna rendición de cuentas pendiente para el participante en la sucursal donde se está incluyendo la solicitud, de acuerdo con la parametrización de las configuraciones "Días (máx.)" y "Cantidad (máx.)". |
El valor calculado es una previsión y se muestra solamente si estuviera parametrizado:
Ejemplos de cálculo para anticipos
Para todos los escenarios se realizó una configuración del wizard vía rutina FINA691 para anticipos de acuerdo con la tabla ejemplo. Tenemos como fórmula para cálculo de los anticipos la siguiente base:
| Anticipo = Valor fijo + ( Valor diario * ( fecha final - fecha inicial)) |
|---|
Escenario 1
Campo | Contenido |
|---|---|
| Anticipo sin pernoctar (MV_RESADSP) | 80 |
| Valor diario (MV_RESADDI) | 80 |
| Valor fijo (MV_RESADFX) | 0 |
Con base en la configuración realizada y en un escenario ficticio con viaje iniciado el día 02/12, con fecha final el 06/12, el cálculo de anticipo quedaría de la siguiente manera:
Anticipo = 0 + (80 * (06/12 - 02/12))
Anticipo = 320$
Escenario 2
Campo | Contenido |
|---|---|
| Anticipo sin pernoctar (MV_RESADSP) | 0 |
| Valor diario (MV_RESADDI) | 0 |
| Valor fijo (MV_RESADFX) | 80 |
Con la fórmula tenemos el siguiente cálculo:
Anticipo = 80 + (0 * (06/12 - 02/12))
Anticipo = 80
Escenario 3
Campo | Contenido |
|---|---|
| Anticipo sin pernoctar (MV_RESADSP) | 80 |
| Valor diario (MV_RESADDI) | 80 |
| Valor fijo (MV_RESADFX) | 80 |
Con la fórmula tenemos el siguiente cálculo:
Anticipo = 80 + (80 * (06/12 - 02/12))
Anticipo = 400
| Informações | ||||
|---|---|---|---|---|
| ||||
Si la solicitud de viaje tenga fecha inicial y final en el mismo día, se utilizará como valor para anticipo el contenido del campo "Anticipo sin pernoctar". |
Para ejecutar la rutina automática, ilustramos algunas funcionalidades como Inclusión (MyFA666Inc), Modificación (MyFA666Alt) y Borrado (MyFA666Del), en los siguientes ejemplos
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" //---------- Inclusión Inclusaode dala solicitacaosolicitud de viagemviaje ----------// 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 ambienteentorno comcon usuario solicitante oModel := FWLoadModel("FINA666") oModelFW3 := oModel:GetModel("FW3MASTER") // CabecalhoEncabezado dadel viagemviaje oModelFW4 := oModel:GetModel("FW4DETAIL") // ServicosServicios oModelFW5 := oModel:GetModel("FW5DETAIL") // Participantes oModelFW6 := oModel:GetModel("FW6DETAIL") // Centro de custocosto cFilAtu := xFilial("FW3") oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() // Informa el Preencheencabezado cabecalhode dala solicitacaosolicitud de viagemviaje 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 AbertoPendiente, statusEstatus inicial // Informa Preenchela gridcuadrícula dodel servicoservicio incluso naen la solicitacaosolicitud dadel viagemviaje oModelFW4:SetValue("FW4_ITEM",StrZero(1,TamSX3("FW4_ITEM")[1])) oModelFW4:SetValue("FW4_TIPO","1") // AereoAéreo oModelFW4:SetValue("FW4_OBS", "Visita aoal cliente") // Informa la Preenchecuadrícula gridde doslos participantes viajantesviajeros oModelFW5:SetValue("FW5_ITEM",StrZero(1,TamSX3("FW4_ITEM")[1])) oModelFW5:SetValue("FW5_PARTIC","000001") oModelFW5:SetValue("FW5_ADIANT",.T.) // AdicionaAgrega adiantamentoanticipo aoal participante oModelFW5:AddLine() // AdicionaAgrega linhalínea para umun segundo viajanteviajero oModelFW5:SetValue("FW5_ITEM",StrZero(2,TamSX3("FW4_ITEM")[1])) oModelFW5:SetValue("FW5_PARTIC","000002") oModelFW5:SetValue("FW5_ADIANT",.T.) // AdicionaAgrega adiantamentoanticipo aoal participante // Informa Preenchela gridcuadrícula dodel centro de custocosto 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 seValidación y grabación de los datos si fueran consistentes If oModel:VldData() oModel:CommitData() Conout("InclusaoInclusión de dala solicitacaosolicitud dedel viagemviaje concluidafinalizada comcon sucessoéxito.") Else VarInfo("",oModel:GetErrorMessage()) Conout("ErroError en nala validacaovalidación, solicitacaosolicitud de viagemviaje naono foise incluidaincluyó.") EndIf oModel:DeActivate() oModel:Destroy() RpcClearEnv() Return //---------- Modificación Alteracaode dala solicitacaosolicitud de viagemviaje ----------// 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 ambienteentorno comcon usuario solicitante dbSelectArea("FW3") dbSetOrder(1) dbSeek(xFilial("FW3")+cSolic) // CarregaCarga modelo de dadosdatos comcon ala solicitacaosolicitud de viagemviaje posicionadamarcada oModel := FWLoadModel("FINA666") oModelFW5 := oModel:GetModel("FW5DETAIL") // Participantes oModelFW6 := oModel:GetModel("FW6DETAIL") // Centro de custocosto // ChaveClave de buscabúsqueda dodel participante dentro de dala solSol. dade viagemViaje aKeyFW4 := { {"FW5_FILIAL",xFilial("FW5")},{"FW5_SOLICI",cSolic},{"FW5_ITEM","01"},{"FW5_PARTIC","000002"} } oModel:SetOperation(MODEL_OPERATION_UPDATE) oModel:Activate() // Retira Removeuno umde doslos viajantesviajeros, noen este caso oel participante 000002 If oModelFW5:SeekLine(aKeyFLE) oModelFW5:DeleteLine() Else Conout("ViajanteViajero naono encontrado en nestaesta solicitacaosolicitud de viagemviaje.") EndIf // AlteraModifica oel centro de custocosto (posicionadomarcado automáticamente automaticamenteen nola primeiroprimera gridcuadrícula) oModelFW6:SetValue("FW6_CC","003 ") // Validación y Validacaograbación ede gravacaolos dosdatos dadossi sefueran consistentes If oModel:VldData() oModel:CommitData() Conout("AlteracaoModificación de dala solicitacaosolicitud de viagemviaje efetuadaefectuada comcon sucessoéxito.") Else VarInfo("",oModel:GetErrorMessage()) Conout("ErroError en nala validacaovalidación, solicitacaosolicitud de viagemviaje naono foise alteradamodificó.") EndIf oModel:DeActivate() oModel:Destroy() RpcClearEnv() Return //---------- ExclusaoBorrado de dala solicitacaosolicitud de viagemviaje ----------// User Function MyFA666Del() Local oModel := Nil Local cSolic := "0000000010" RpcSetEnv("T1","D MG 01 ","claudio.ribeiro","1") // Inicializa ambienteentorno comcon usuario solicitante dbSelectArea("FW3") dbSetOrder(1) dbSeek(xFilial("FW3")+cSolic) // CarregaCarga modelo de dadosdatos comcon ala solicitacaosolicitud de viagemviaje posicionadamarcada oModel:= FWLoadModel("FINA666") oModel:SetOperation(MODEL_OPERATION_DELETE) oModel:Activate() // ValidacaoValidación ey gravacaograbación dadel exclusaoborrado If oModel:VldData() oModel:CommitData() Conout("SolicitacaoSolicitud de viagemviaje excluidaborrada comcon sucessoéxito.") Else VarInfo("",oModel:GetErrorMessage()) Conout("ErroError en nala validacaovalidación, solicitacaosolicitud de viagemviaje naono foise excluidaborró.") EndIf oModel:DeActivate() oModel:Destroy() RpcClearEnv() Return |
...
...
| 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>
|