Pedir formulario -> guardar en alta o modificacion


([N1] leonardo daniel velazquez fuentes) #1

Hola a todos, tengo mi pantalla principal para los despachadores de viajes, donde dan de alta los viajes de ida (northbond) y los viajes de vuelta (Southbond), se registran con datos generales y al despacharlos abro otro formulario y lo relleno con mas datos… no tengo probema con los viajes de ida (northbond) ya que es un viaje nuevo, y la pantalla va en blanco con algunos campos con valor predeterminado y al guardar uso el “guardar en alta o modificacion” para que no me cierre el formulario, ya que tengo por ahi una rejilla para agregar ciudades, pero se activa al grabarse el viaje y obtener el ID del viaje…

El problema es con los viajes de Vuelta, ya que para generar un viaje de vuelta debe de seleccionar cual fue el viaje de ida, si si selecciono un viaje de ida entonces creo una ficha en memoria obtengo los datos del viaje de ida y pongo algunos en el de vuelta, y uso Pedir Formulario para abrir la ficha, total se graba y al regresar dispara un evento buscar para actualizar la rejilla de los viajes, peroooooooo, pues ahora en ese mismo formulario puse la rejilla de las ciudades, en la cual solo se pueden agregasr siempre y cuando ya tenga el ID del viaje de vuelta, por lo que el codigo que tengo ya no me funciona, el “guardar ficha en alta o modificacion” no funciona con el codigo que mando llamar al formulario…

Manejador de Evento ( Nuevo_Viaje_ida ) “SouthBond”

Set ( T_VIAJE, "" )
Set ( NO_VIAJE, 0 )
Set ( CD_INI, 0 )
Set ( CD_FIN, 0 )
Set ( T_TRAILER, 0 )
Set ( CHOFER1, 0 )
Set ( CHOFER2, 0 )
Interfaz: Procesar ( LISTA_VIAJES, Todas )
      Leer ficha seleccionada
            Set ( T_VIAJE, #IDA_VUELTA )
            Set ( NO_VIAJE, #ID )
            Set ( CD_INI, #CIUDAD_ORIGEN )
            Set ( CD_FIN, #CIUDAD_DESTINO )
            Set ( CHOFER1, #CHOFER1 )
            Set ( CHOFER2, #CHOFER2 )
            Set ( T_TRAILER, #TIPOS_TRAILERS )
            Libre
If ( (NO_VIAJE > 0) & (T_VIAJE = "I") )
      Cargar lista ( VIAJES@vAztecaDat, VIAJE_IDA, NO_VIAJE, , , )
            If ( sysListSize > 0 )
                  Mensaje ( "Northbond load # " + #ID + " has assigned Southbond load # " + #ID_IDA.ID,
Información, "Information", )
                  Libre
            Else
                  Crear nueva ficha en memoria ( ficha_viaje, VIAJES@vAztecaDat )
                        Procesar ficha en memoria ( ficha_viaje )
                              Modificar campo ( ID_IDA, NO_VIAJE )
                              Modificar campo ( IDA_VUELTA, "V" )
                              Modificar campo ( CIUDAD_DESTINO, CD_INI )
                              Modificar campo ( CIUDAD_ORIGEN, CD_FIN )
                              Modificar campo ( TIPOS_TRAILERS, T_TRAILER )
                              Modificar campo ( CHOFER1, CHOFER1 )
                              Modificar campo ( CHOFER2, CHOFER2 )
                              Pedir formulario ( VIAJE@vAztecaApp, B_OK )
                              If ( B_OK )
                                    Alta de ficha ( ficha_viaje )
                                          Libre
                                    Interfaz: Ejecutar manejador de evento ( BUSCAR, )
                                    Libre
Else
      Mensaje ( "Please, select one Northbond Load first", Información, , "Alert" )
Libre
Set ( NO_VIAJE, 0 )

Evento Validar del boton guardar

Set ( VALIDAR, 0 )
If ( !dateIsValid(#FECHA_REGISTRO) )
      Set ( VALIDAR, 1 )
Else if ( !dateIsValid(#FECHA_SALIDA) )
      Set ( VALIDAR, 1 )
Else if ( !dateIsValid(#FECHA_REGRESO) )
      Set ( VALIDAR, 1 )
Else if ( #CARGADO="V" & isEmpty(#MOTIVO_VACIO) )
      Set ( VALIDAR, 1 )
Else if ( #CIUDAD_ORIGEN = 0 )
      Set ( VALIDAR, 1 )
Else if ( #CIUDAD_DESTINO = 0 )
      Set ( VALIDAR, 1 )
Else if ( #SOLICITADO_POR = 0 )
      Set ( VALIDAR, 1 )
Else if ( #FACTURAR_A = 0 )
      Set ( VALIDAR, 1 )
Libre
If ( VALIDAR = 1 )
      Mensaje ( "Some fields are empty", Exclamación, , "Alert" )
      Interfaz: Establecer foco ( ED_FECHA_REGISTRO )
      Set retorno proceso = NO
Else
      Interfaz: Guardar la ficha en alta o modificación
      Mensaje ( "Load Saved.!", Exclamación, 2, "Notification" )
Libre




([N3] pacosatu) #2

Hola leonardo daniel velazquez fuentes.

Con tanto código y tanta pantalla no es fácil ver los problemas.

Así de entrada, dos cosas:

  • Inmediatamente después del comando “Crear nueva ficha en memoria” no es necesario “Procesar ficha en memoria”, puedes empezar a modificar campos inmediatamente.
  • El comando “Pedir formulario” abre un formulario para editar los campos de la ficha en memoria, pero no podrás usar el comando “Interfaz: Guardar la ficha en alta o modificación” porque este comando no gestiona transacción.

Crear nueva ficha en memoria ( ficha_viaje, VIAJES@vAztecaDat )
    Modificar campo ( ID_IDA, NO_VIAJE )
    ....
    Pedir formulario ( VIAJE@vAztecaApp, B_OK )
    If ( B_OK )
       ******** AQUÍ ES DONDE EL VIAJE SE GUARDA EN DISCO *******
       Alta de ficha ( ficha_viaje )
         *******  OBTENEMOS EL ID DEL VIAJE DADO DE ALTA  *******
         Set (NID_FICHA_VIAJE, #ID)

       ******** EL MANEJADOR BUSCAR YA PUEDE DISPONER DEL VIAJE CREADO MEDIANTA LA VARIABLE LOCAL NID_FICHA_VIAJE
       Interfaz: Ejecutar manejador de evento ( BUSCAR, )
       Libre
......

En la validadción del Formulario VIAJE@vAztecaApp


If ( VALIDAR = 1 )
      Mensaje ( "Some fields are empty", Exclamación, , "Alert" )
      Interfaz: Establecer foco ( ED_FECHA_REGISTRO )
      Set retorno proceso = NO
Else
      ************  ESTE COMANDO NO FUNCIONA EN UN PEDIR FORMULARIO, ¡¡QUÍTALO!! **************
      Interfaz: Guardar la ficha en alta o modificación
      ************  LA FICHA SE GUARDARÁ CON EL COMANDO Alta de ficha ************
      Mensaje ( "Load Saved.!", Exclamación, 2, "Notification" )
      ************ CIERRA EL FORMUALRIO DEVOLVIENDO B_OK = 1
      Interfaz: Aceptar

Saludos
Paco Satué


([N1] leonardo daniel velazquez fuentes) #3

Muchas gracias PACO…!! ya esta solucionado, solo pues que tuve que hacer una chapuza, guardarlo y volver a mostrar el formulario para que puedan agregar las ciudades (truck stops) ya que al ser un mini detalle, pues necesito el numero de viaje primero…

gracias