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 if

Autorrellenar 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 if

Derivar 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 = 100

Bloquear 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 if

El 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 if

Un 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 if

F.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 if

Ofrecer 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')

En esta página