Recetas de scripts
Diez scripts reales de las secciones del núcleo de Dinaup, con el evento que los dispara, para copiar y cambiar los campos por los tuyos.
Scripts reales de las secciones del núcleo de DemoUp, con el evento que los dispara. Copia el código y cambia los campos por los tuyos. Los eventos están en Scripts y la sintaxis de C., en Registro del formulario (C.).
Rellenar valores por defecto al iniciar un alta
Evento: Formulario_Iniciado_AgregarNuevo. La tarea nueva abre con el foco en el campo Resumen y los datos heredados del proyecto.
@ La clave definitiva la asigna el servidor al guardar
C.Clave = 'DRAFT'
F.Field_SetFocus(S.Fields.TareasDeProyectos.Resumen.ID, 0)
@ La tarea hereda el tipo inicial definido en el flujo del proyecto
C.ReferenciaTipo = F.GetRowById(S.Sections.TiposDeTareaDeProyectos.ID, C.ReferenciaProyecto.ReferenciaFlujo.ReferenciaTipo)
@ Y el bono de horas del proyecto, si no trae uno
if C.ReferenciaBono = ''
C.ReferenciaBono = F.GetRowById(S.Sections.BonosHoras.ID, C.ReferenciaProyecto.ReferenciaBono)
C.ImporteBonoPrecioHorasinImpuestos = C.ReferenciaProyecto.ImporteBonoPrecioHorasinImpuestos
end ifAutorrellenar campos al elegir una relación
Evento: Campo_Cambiado, sobre el campo de relación. Al elegir el cliente, la venta copia sus condiciones de pago, si las tiene, y calcula el vencimiento.
txt condicionesDePago = C.ReferenciaCliente.CondicionesPagoVenta
num condicionesDePagoDias = C.ReferenciaCliente.PlazoDiasCobroVentas
if v.condicionesDePago <> ''
C.CondicionesDePago = v.condicionesDePago
end if
if v.condicionesDePagoDias <> 0 or v.condicionesDePago <> ''
C.FechaDeVencimiento = F.Date_AddDays(D.DatosEspeciales.FechaActual, v.condicionesDePagoDias)
end ifDerivar campos cuando cambia el estado
Evento: Campo_Cambiado, sobre el campo de estado. Compara con el enum de la ficha de estado, no con su nombre, así renombrar un estado no rompe el script.
if C.ReferenciaEstado.EstadoTarea = S.Enums.tareaestado.enproceso
C.EnProceso = 1
¿C.FechaInicioConfirmado = '' ? C.FechaInicioConfirmado = D.DatosEspeciales.FechaActual
else
C.EnProceso = 0
end if
@ Volver al backlog borra la fecha de inicio real
if C.ReferenciaEstado.EstadoTarea = S.Enums.tareaestado.backlog or C.ReferenciaEstado.EstadoTarea = S.Enums.tareaestado.pendiente
C.FechaInicioConfirmado = ''
end if
¿C.ReferenciaEstado.EstadoTarea = S.Enums.tareaestado.completado ? C.ProgresoPorciento = 100Bloquear el guardado si un dato no es válido
Evento: Formulario_PreACeptar. Si la validación falla, F.MsgBox dice qué está mal y F.CancelEvent() impide el guardado.
if C.ReferenciaDepartamento <> '' and C.ReferenciaSubdepartamento <> ''
if C.ReferenciaSubdepartamento.ReferenciaDepartamentoQuePertenece <> C.ReferenciaDepartamento
F.MsgBox('El subdepartamento seleccionado no pertenece al departamento.', 1)
F.CancelEvent()
end if
end ifEl segundo parámetro de F.MsgBox es la acción cuando el script lo dispara una escritura por API. Ver Interacción y formulario.
Pedir confirmación en vez de bloquear
Evento: Formulario_PreACeptar. F.PromptYesNo pide confirmación; si la respuesta es no, F.CancelEvent() cancela el guardado. Es el aviso de precio mínimo de las líneas de venta.
if C.ImportePrecioMinimoUnidad > 0 and C.ImportePrecioMinimoUnidad > C.ImportePrecioUnidad
if F.PromptYesNo('Precio demasiado bajo', 'El precio de venta por unidad es inferior al precio de venta mínimo. ¿Desea continuar?', 1) = 0
F.CancelEvent()
end if
end ifUn botón que crea un registro relacionado
Evento: Campo_Click, sobre un campo Botón. Abre el alta del registro relacionado con los campos clave ya puestos.
if F.IsNew = 1
F.MsgBox('Guarda la tarea antes de imputarle tiempo.', 0)
else
if C.ReferenciaTipo.SeLePuedeImputarTiempo = 0
F.MsgBox('No se le puede imputar tiempo al tipo ' + C.ReferenciaTipo.TextoPrincipal, 1)
else
F.AddElement_Begin(S.Sections.ActividadEnTareasDeProyectos.ID)
F.AddElement_SetValue(S.Fields.ActividadEnTareasDeProyectos.ReferenciaTarea.ID, C.ID)
F.AddElement_SetValue(S.Fields.ActividadEnTareasDeProyectos.ReferenciaProyecto.ID, C.ReferenciaProyecto)
F.AddElement_Commit()
end if
end ifF.IsNew va primero: un registro sin guardar no tiene C.ID. F.Save() también da el C.ID, pero guarda sin preguntar. F.AddElement_Commit() abre el alta rellena para que el usuario la revise y la acepte.
Filtrar las opciones de un desplegable
Evento: Campo_ComboAplicarFiltro, sobre el campo de relación. Acota qué registros ofrece el desplegable; los filtros se encadenan y pueden usar otros campos de la ficha.
F.Field_ListDropdownWarning('Mostrando direcciones activas del cliente seleccionado.', 1)
F.Field_DropdownApplyFilter(S.Fields.DireccionesDeEnviosBase.ReferenciaEntidad.ID, '=', C.ReferenciaCliente)
F.Field_DropdownApplyFilter(S.Fields.DireccionesDeEnviosBase.Activa.ID, '=', 1)Bloquear campos con el motivo a la vista
Evento: Formulario_TickRecalculo o Formuario_RecalcularListado. F.Field_SetLockedWithReason bloquea o desbloquea el campo y muestra el motivo al pasar por él.
txt motivo = 'Únicamente puede seleccionar 1: Recurso o Producto'
num bloquearRecurso = 0
num bloquearProducto = 0
¿C.ReferenciaProducto <> '' ? v.bloquearRecurso = 1
¿C.ReferenciaRecurso <> '' ? v.bloquearProducto = 1
F.Field_SetLockedWithReason(S.Fields.VentasIngresosLista.ReferenciaProducto.ID, v.motivo, v.bloquearProducto)
F.Field_SetLockedWithReason(S.Fields.VentasIngresosLista.ReferenciaRecurso.ID, v.motivo, v.bloquearRecurso)El tercer parámetro activa (1) o quita (0) el bloqueo. F.Field_SetRequiredWithReason hace lo mismo con la obligatoriedad.
Recalcular un importe mientras se edita
Evento: Formulario_TickRecalculo. Mantiene un importe derivado al día sin esperar al guardado, redondeado con F.Round(valor, 2) para que se vea lo mismo que se guarda.
if C.TiempoDeActividad_AutoCalculo = 0 or C.ImporteBonoPrecioHorasinImpuestos = 0
C.ImporteBonoCosteDeTareaACliente = 0
else
@ Minutos de actividad a precio/hora del bono
C.ImporteBonoCosteDeTareaACliente = F.Round(C.TiempoDeActividad_AutoCalculo * (C.ImporteBonoPrecioHorasinImpuestos / 60), 2)
end ifOfrecer autocompletado en un campo de texto
Evento: Formulario_Cargado. Sugiere valores en un campo de texto sin convertirlo en desplegable cerrado: el usuario elige una opción o escribe otra.
F.Field_TextAddAutoComplete(S.Fields.ActividadesDeEmpresas.Clave.ID, '1 - Actividades sujetas al Impuesto sobre Actividades Económicas')
F.Field_TextAddAutoComplete(S.Fields.ActividadesDeEmpresas.Clave.ID, '2 - Actividades sujetas al IAE (Profesionales y Artísticas)')
F.Field_TextAddAutoComplete(S.Fields.ActividadesDeEmpresas.Clave.ID, '3 - Arrendadores de Locales de Negocios y garajes')