示例#1
0
        // Proceso de preparación por Palet.
        public void SalidaPalet(params object[] parametrosS)
        {
            COMPRADIO.PRORAD Iptr = (COMPRADIO.PRORAD)parametrosS[0];

            CString cstUbiOri = new CString();
            CString cstDCOri  = new CString();
            CString cstPalet  = new CString();

            string cstLectura = null;

            int  ret = 0, opc;
            char RetVal;

            opc = _INICIALIZAR;

            try
            {
                do
                {
                    switch (opc)
                    {
                    case _INICIALIZAR:
                        cstUbiOri = "";
                        cstDCOri  = "";
                        cstPalet  = "";

                        // Inicializar estado Salida Palet.
                        RetVal = Iptr.SalInicializar();

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _CARGAR_DATOS;
                            break;

                        // No OK
                        case 'N':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Tomar como error.
                        default:
                            // NOK
                            opc = _FINALIZAR;
                            break;
                        }
                        break;

                    case _CARGAR_DATOS:
                        // Cargar datos palet a preparar.
                        RetVal = Iptr.SalPeticionUbicacion();

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _LECT_UBIORI;
                            break;

                        // No OK
                        case 'N':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Tomar como error.
                        default:
                            // NOK
                            UserError("SAP-????", "Opción no controlada");
                            opc = _FINALIZAR;
                            break;
                        }
                        break;

                    // Pedir ubicación origen.
                    case _LECT_UBIORI:
                        cstUbiOri  = "";
                        cstDCOri   = "";
                        cstLectura = "";

                        Pantalla_SalidaPalet(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_UBIORI_1, "Introduzca origen"));
                        clreol(0, _LINEA_INPUTS + 1); gotoxy(0, _LINEA_INPUTS + 1); printf(Iptr.GetMessage(_LECT_UBIORI_2, "<F1: Salta>"));
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret = leer_char(ref cstLectura, 16);

                        switch (ret)
                        {
                        // Abandonar programa
                        case _TECLA_ESC:
                            opc = _FINALIZAR;
                            break;

                        // Saltar ubicación.
                        case _TECLA_F1:
                            opc = _SALTAR_UBICACION;
                            break;

                        // Validar ubicación sin DC.
                        case _TECLA_0:
                            cstUbiOri = cstLectura;
                            opc       = _VALIDAR_UBIORI;
                            break;

                        // Resto de teclas: ignorar.
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _LECT_UBIORI;
                            break;
                        }
                        break;

                    // Pedir DC ubicación origen.
                    case _LECT_DCORI:
                        cstDCOri   = "";
                        cstLectura = "";

                        Pantalla_SalidaPalet(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_DCORI_1, "Introduzca DC"));
                        clreol(0, _LINEA_INPUTS + 1); gotoxy(0, _LINEA_INPUTS + 1);
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret = leer_char(ref cstLectura, 2);

                        switch (ret)
                        {
                        // Pedir origen.
                        case _TECLA_ESC:
                            opc = _LECT_UBIORI;
                            break;

                        // Validar ubicación origen con DC.
                        case _TECLA_0:
                            cstDCOri = cstLectura;
                            opc      = _VALIDAR_UBIORI;
                            break;

                        // Saltar ubicación.
                        case _TECLA_F1:
                            break;

                        // Resto de teclas: Ignorar.
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _LECT_DCORI;
                            break;
                        }
                        break;

                    // Validar la ubicación origen.
                    case _VALIDAR_UBIORI:
                        RetVal = System.Convert.ToChar(Iptr.SalValidarOrigen(cstUbiOri, cstDCOri));

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _LECT_UBIORI;
                            break;

                        // NOK
                        case 'N':
                            UserError(Iptr);
                            opc = _LECT_UBIORI;
                            break;

                        // OK: Leer el DC
                        case 'D':
                            opc = _LECT_DCORI;
                            break;

                        // Error en BBDD.
                        case 'C':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Ignorar.
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _LECT_UBIORI;
                            break;
                        }
                        break;

                    // Pedir nº de palet / SSCC.
                    case _LECT_BULTO:
                        cstPalet   = "";
                        cstLectura = "";

                        Pantalla_SalidaPalet(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_BULTO_1, "Introduzca bulto"));
                        clreol(0, _LINEA_INPUTS + 1); gotoxy(0, _LINEA_INPUTS + 1); printf(Iptr.GetMessage(_LECT_BULTO_2, "<F1:Salta F3:Vacia>"));
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret = leer_char(ref cstLectura, 20);

                        switch (ret)
                        {
                        // Ir a pedir ubicación origen
                        case _TECLA_ESC:
                            opc = _LECT_UBIORI;
                            break;

                        // Saltar la ubicación.
                        case _TECLA_F1:
                            opc = _SALTAR_UBICACION;
                            break;

                        // Validar el bulto
                        case _TECLA_0:
                            cstPalet = cstLectura;
                            opc      = _VALIDAR_BULTO;
                            break;

                        // La ocupación está vacía.
                        case _TECLA_F3:
                            opc = _VACIAR_OCUPACION;
                            break;

                        // Resto de teclas: ignorar
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _LECT_BULTO;
                            break;
                        }
                        break;

                    // Validar el nº de palet
                    case _VALIDAR_BULTO:
                        RetVal = Iptr.SalValidarPalet(cstPalet);

                        switch (RetVal)
                        {
                        // OK: Confirmar.
                        case 'S':
                            opc = _DATOS_OK;
                            break;

                        // NOK
                        case 'N':
                            UserError(Iptr);
                            opc = _LECT_BULTO;
                            break;

                        // Error en BBDD.
                        case 'C':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Ignorar.
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _LECT_BULTO;
                            break;
                        }
                        break;

                    // Confirmar preparación del palet.
                    case _DATOS_OK:
                        Pantalla_SalidaPalet(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 1);
                        clreol(0, _LINEA_INPUTS + 2);
                        clreol(0, _LINEA_INPUTS + 3);

                        ret = preguntar(Iptr.GetMessage(_DATOS_OK_1, "Datos OK (S/N)"), _LINEA_INPUTS + 1);

                        switch (ret)
                        {
                        // Grabar datos.
                        case _TECLA_SI:
                            opc = _ACTUALIZAR;
                            break;

                        // Resto teclas: Ignorar
                        default:
                            opc = _LECT_BULTO;
                            break;
                        }
                        break;

                    // Actualizar palet preparado.
                    case _ACTUALIZAR:
                        RetVal = System.Convert.ToChar(Iptr.SalActualizar());

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            // Palet preparado.
                            opc = _CARGAR_DATOS;
                            break;

                        // NOK
                        case 'N':
                            UserError(Iptr);
                            opc = _LECT_BULTO;
                            break;

                        // Error en BBDD
                        case 'C':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Tomar como OK.
                        default:
                            UserError("SAP-????", "Opción no controlada");
                            opc = _CARGAR_DATOS;
                            break;
                        }
                        break;

                    // Cerrar estado Salidas Palet.
                    case _FINALIZAR:
                        opc = _NO_OPERACION;
                        break;

                    default:
                        opc = _NO_OPERACION;
                        break;
                    }
                }while (opc != _NO_OPERACION);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.ReadKey();
            }

            finally
            {
                RetVal = System.Convert.ToChar(Iptr.SalFinalizar());
            }

            return;
        }
示例#2
0
        //-------------------------------------------------
        // Menú. Versión configurable.
        //-------------------------------------------------

        /// <summary>
        /// Menú general de opciones - Formato configurable.
        /// </summary>
        ///
        /// <param name="parametros"> Array de parámetros</param>
        ///
        /// <remarks>
        ///     parametros[0] - Objeto COMPRADIO.
        /// </remarks>
        ///
        /// <seealso cref="menu(object[])"/>
        /// <seealso cref="_tmain"/>
        ///
        /// <returns></returns>

        public int DisplayPantallaPro(params object[] parametros)
        {
            COMPRADIO.PRORAD Iptr = (COMPRADIO.PRORAD)parametros[0];

            int  opc;
            int  tecla;
            char cRetVal;

            CString cstSeccion = "";
            Char    cstMenu    = ' ';
            CString cstComando = "";
            CString cstEntry   = "";

            opc = _INICIALIZAR_MENU;

            do
            {
                switch (opc)
                {
                case _INICIALIZAR_MENU:
                    cstSeccion = _SECCION_0;
                    opc        = _LECTURA_MENU;
                    break;

                // Mostrar el menú activo.
                case _LECTURA_MENU:
                    clrscr();
                    DisplayUserScr(Iptr, _PROGRAMA, cstSeccion, "MENUS");

                    cstMenu = ' ';
                    gotoxy(0, _LINEA_INPUTS);
                    do
                    {
                        gotoxy(_COLUMNA_INPUTS, _LINEA_INPUTS);
                        tecla = getkey();
                    } while (tecla == -1);

                    switch (tecla)
                    {
                    // Ir al nivel anterior, ó exit.
                    case _TECLA_ESC:
                        opc = _PREVIOUS_MENU;
                        break;

                    // Validar la opción de menú.
                    default:
                        cstMenu = System.Convert.ToChar(tecla);
                        opc     = _VALIDAR_MENU;
                        break;
                    }
                    break;

                // Validar el menú
                case _VALIDAR_MENU:
                    cRetVal = System.Convert.ToChar(Iptr.ValidarMenu(_PROGRAMA, cstSeccion, cstMenu));

                    switch (cRetVal)
                    {
                    // OK: Ejecutar la función seleccionada.
                    case 'F':
                        cstComando = Iptr.MnuNamespace + "." + Iptr.MnuClase + ", " + Iptr.MnuEnsamblado;
                        cstEntry   = Iptr.MnuEntryPoint;

                        System.Object[] pmo = { Iptr, new System.Object[] { } };
                        Type            t   = System.Type.GetType(cstComando);
                        if (t == null)
                        {
                            UserError("_SYS-0010", Iptr.GetMessage("_SYS-0010", "Llamada es NULL", Iptr.MensajesRF));
                            opc = _LECTURA_MENU;
                            break;
                        }

                        object ot = System.Activator.CreateInstance(t);
                        ot.GetType().GetMethod(cstEntry).Invoke(ot, pmo);

                        opc = _LECTURA_MENU;
                        break;

                    // OK: Displayar el menú seleccionado.
                    case 'M':
                        cstSeccion = Iptr.MnuSeccion;

                        opc = _LECTURA_MENU;
                        break;

                    // Salir.
                    case 'Q':
                        opc = _FINALIZAR_MENU;
                        break;

                    // Opción incorrecta.
                    case 'N':
                        UserError(Iptr);
                        opc = _LECTURA_MENU;
                        break;

                    // Error.
                    case 'C':
                        UserError(Iptr);
                        opc = _FINALIZAR_MENU;
                        break;

                    // Resto de casos: ignorar.
                    default:
                        opc = _LECTURA_MENU;
                        break;
                    }
                    break;

                // Ir al nivel anterior de menú.
                case _PREVIOUS_MENU:
                    cstSeccion = System.Convert.ToString(Iptr.MnuSeccion);
                    cRetVal    = System.Convert.ToChar(Iptr.PreviousMenu(_PROGRAMA, cstSeccion, 'Q'));

                    switch (cRetVal)
                    {
                    // OK: Display menú.
                    case 'S':
                        cstSeccion = (string)Iptr.MnuSeccion;
                        opc        = _LECTURA_MENU;
                        break;

                    // Salir.
                    case 'Q':
                        opc = _FINALIZAR_MENU;
                        break;

                    // Opción incorrecta
                    case 'N':
                        UserError(Iptr);
                        opc = _LECTURA_MENU;
                        break;

                    // Error
                    case 'C':
                        UserError(Iptr);
                        opc = _FINALIZAR_MENU;
                        break;

                    // Resto de casos: ignorar
                    default:
                        opc = _LECTURA_MENU;
                        break;
                    }
                    break;

                // Finalizar tratamiento de menú
                case _FINALIZAR_MENU:
                    opc = _NOOPERACION_MENU;
                    break;
                }
            } while (opc != _NOOPERACION_MENU);

            return(0);
        }
示例#3
0
        //-------------------------------------------------
        // Función principal.
        //-------------------------------------------------

        /// <summary>
        /// Punto de entrada al programa de RF.
        /// </summary>
        /// <seealso cref="menu(object[])"/>
        /// <seealso cref="DisplayPantallaPro(object[])"/>
        /// <returns></returns>

        public int _tmain()
        {
            int  opc, ret, siguiente_operacion = 0;
            int  nRetCode = 0;
            char RetVal   = ' ';

            string lectura_operario = null;
            string lectura_terminal = null;

            // compradio.proradClass comInstance = new compradio.proradClass();
            COMPRADIO.PRORAD comInstanceCS = new COMPRADIO.PRORAD();

            try
            {
                opc = _INICIALIZAR;

                do
                {
                    switch (opc)
                    {
                    case _INICIALIZAR:
                        // Conectar la BBDD
                        clrscr();
                        gotoxy(0, 14);
                        Console.WriteLine("Conectando ...");

                        // RetVal = System.Convert.ToChar(comInstance.inicioconexion());
                        RetVal = comInstanceCS.InicioConexion();

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _LECTURA_OPERARIO;
                            break;

                        // Error inicializar.
                        case 'N':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 2;
                            opc      = _FINALIZAR;
                            break;

                        // Error general.
                        case 'C':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 2;
                            opc      = _FINALIZAR;
                            break;

                        // Resto de casos: OK
                        default:
                            opc = _LECTURA_OPERARIO;
                            break;
                        }
                        break;

                    // Entrar código de operario.
                    case _LECTURA_OPERARIO:
                        clrscr();
                        gotoxy(0, 1); printf(comInstanceCS.GetMessage("INI-0005", "PRORAD.2").TrimEnd());
                        gotoxy(0, 4); printf(comInstanceCS.GetMessage("INI-0006", "Operario: ").TrimEnd());

                        lectura_operario = "";
                        gotoxy(10, 4);
                        ret = leer_char(ref lectura_operario, 4);

                        switch (ret)
                        {
                        // Salir del programa
                        case _TECLA_ESC:
                            opc = _FINALIZAR;
                            break;

                        // Pedir terminal
                        case _TECLA_0:
                            opc = _VALIDAR_OPERARIO;
                            break;

                        // Resto de casos: ignorar
                        default:
                            opc = _LECTURA_OPERARIO;
                            break;
                        }
                        break;

                    // Entrar tipo terminal
                    case _LECTURA_TERMINAL:
                        clrscr();
                        gotoxy(0, 1); printf(comInstanceCS.GetMessage("INI-0005", "PRORAD.2").TrimEnd());
                        gotoxy(0, 4); printf(comInstanceCS.GetMessage("INI-9006", "Operario: {0}").TrimEnd(), lectura_operario);
                        gotoxy(0, 5); printf(comInstanceCS.GetMessage("INI-0007", "Terminal: ").TrimEnd());

                        lectura_terminal = "";
                        gotoxy(10, 5);
                        ret = leer_char(ref lectura_terminal, 2);

                        switch (ret)
                        {
                        // Ir a pedir operario.
                        case _TECLA_ESC:
                            siguiente_operacion = _LECTURA_OPERARIO;
                            opc = _DESCONECTAR_OPERARIO;
                            break;

                        // Realizar las validaciones
                        case _TECLA_0:
                            opc = _VALIDAR_TERMINAL;
                            break;

                        // Resto de casos: ignorar
                        default:
                            opc = _LECTURA_TERMINAL;
                            break;
                        }
                        break;

                    // Validar operario
                    case _VALIDAR_OPERARIO:
                        // RetVal = System.Convert.ToChar(comInstance.conectarusuario(lectura_operario));

                        RetVal = comInstanceCS.ConectarUsuario(lectura_operario);

                        switch (RetVal)
                        {
                        // OK: Mostar menú de opciones.
                        case 'S':
                            opc = _LECTURA_TERMINAL;
                            break;

                        // Valores incorrectos.
                        case 'N':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            opc = _LECTURA_OPERARIO;
                            break;

                        // Error
                        case 'C':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 3;
                            opc      = _FINALIZAR;
                            break;

                        // Resto de casos: ignorar
                        default:
                            opc = _LECTURA_OPERARIO;
                            break;
                        }
                        break;

                    // Validar terminal.
                    case _VALIDAR_TERMINAL:
                        // RetVal = System.Convert.ToChar(comInstance.scrvalidarterminal(lectura_terminal));
                        RetVal = comInstanceCS.ValidarTerminal(lectura_terminal);

                        switch (RetVal)
                        {
                        // OK: Mostar menú de opciones
                        case 'S':
                            opc = _DATOS_OK;
                            break;

                        // Valores incorrectos
                        case 'N':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            opc = _LECTURA_TERMINAL;
                            break;

                        // Error
                        case 'C':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 4;
                            opc      = _FINALIZAR;
                            break;

                        // Resto de casos: ignorar
                        default:
                            opc = _LECTURA_TERMINAL;
                            break;
                        }
                        break;

                    // Desconectar operario activo
                    case _DESCONECTAR_OPERARIO:
                        // RetVal = System.Convert.ToChar(comInstance.desconectarusuario());
                        RetVal = comInstanceCS.DesconectarUsuario();

                        switch (RetVal)
                        {
                        // Siguiente operación a realizar:
                        //	- Pedir operario
                        //	- Cerrar BBDD
                        case 'S':
                            opc = siguiente_operacion;
                            break;

                        // Error
                        case 'C':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 5;
                            opc      = _FINALIZAR;
                            break;

                        // Resto valores: Error
                        default:
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            nRetCode = 6;
                            opc      = _FINALIZAR;
                            break;
                        }
                        break;

                    // Display del menú general
                    case _DATOS_OK:
                        // Cargar la línea inicial de inputs.
                        _LINEA_INPUTS = comInstanceCS.LineaInputs;

                        // Cargar la columna de inputs.
                        // _COLUMNA_INPUTS = System.Convert.ToInt32(comInstanceCS.ColumnaInputs);
                        _COLUMNA_INPUTS = comInstanceCS.ColumnaInputs;

                        // Llamada al menú principal.
                        menu(comInstanceCS);
                        //DisplayPantallaPro(comInstanceCS);

                        nRetCode = 0;
                        opc      = _LECTURA_TERMINAL;
                        break;

                    // Finalizar programa
                    case _FINALIZAR:
                        opc = _DESCONECTAR_BBDD;
                        break;

                    // Cerrar BBDD
                    case _DESCONECTAR_BBDD:
                        // RetVal = System.Convert.ToChar(comInstance.finconexion());
                        RetVal = comInstanceCS.FinConexion();

                        switch (RetVal)
                        {
                        // Valores incorrectos
                        case 'N':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            break;

                        // Error
                        case 'C':
                            UserError(comInstanceCS.UsrErrorC, comInstanceCS.UsrError);
                            break;
                        }

                        opc = _FINALIZAR;
                        break;

                    default:
                        opc = _FINALIZAR;
                        break;
                    }
                } while (opc != _FINALIZAR);
            }

            catch (Exception ex)
            {
                string cadena = DateTime.Now.ToString() + "|" + ex.Message + "|" + ex.StackTrace + System.Environment.NewLine;

                System.IO.FileStream fs = new System.IO.FileStream("PRORAD.LOG", System.IO.FileMode.Append);
                fs.Write(ASCIIEncoding.ASCII.GetBytes(cadena), 0, cadena.Length);
                fs.Close();

                nRetCode = ex.HResult;
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.ReadKey();
            }

            finally
            {
                RetVal = comInstanceCS.DesconectarUsuario();
                RetVal = comInstanceCS.FinConexion();
            }

            return(nRetCode);
        }
示例#4
0
        // Proceso de recuento de material.
        public void RecuentoMaterial(params object[] parametrosE)
        {
            COMPRADIO.PRORAD Iptr = (COMPRADIO.PRORAD)parametrosE[0];

            CString cstCodEAN  = new CString();
            CString cstCantid  = new CString();
            CString cstAlbaran = new CString();

            string cstLectura = null;

            int  ret = 0, opc;
            char RetVal;

            CONSULTAALBARANES oCns = null;

            opc = _INICIALIZAR;

            try
            {
                do
                {
                    switch (opc)
                    {
                    case _INICIALIZAR:
                        cstCodEAN  = "";
                        cstCantid  = "";
                        cstAlbaran = "";

                        cstLectura = "";

                        // Inicializar estado recuento de material por albarán.
                        RetVal = System.Convert.ToChar(Iptr.RecInicializar());

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _LECT_ALBARAN;
                            break;

                        // Resto de casos: Tomar como error.
                        default:
                            // NOK
                            opc = _FINALIZAR;
                            break;
                        }
                        break;

                    // Pedir nº de albarán a recontar
                    case _LECT_ALBARAN:
                        cstAlbaran = "";

                        Pantalla_RecuentoMaterial(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_ALBARAN_1, "Introduzca albaran"));
                        clreol(0, _LINEA_INPUTS + 1); gotoxy(0, _LINEA_INPUTS + 1); printf(Iptr.GetMessage(_LECT_ALBARAN_2, "<F2:Consulta>"));
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret        = leer_char(ref cstLectura, 10);
                        cstAlbaran = cstLectura;

                        switch (ret)
                        {
                        // Abandonar programa
                        case _TECLA_ESC:
                            opc = _FINALIZAR;
                            break;

                        // Consulta de albaranes
                        case _TECLA_F2:
                            opc = _CONS_ALBARANES;
                            break;

                        case _TECLA_0:
                            opc = _VALIDAR_ALBARAN;
                            break;

                        // Resto de teclas: ignorar.
                        default:
                            opc = _LECT_ALBARAN;
                            break;
                        }
                        break;

                    // Validar el nº de albarán
                    // Se viene desde _LECT_ALBARAN (TECLA_0)  y _CONS_ALBARAN
                    case _VALIDAR_ALBARAN:
                        RetVal = Iptr.RecValidarAlbaran(cstAlbaran);

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            opc = _LECT_CODEAN;
                            break;

                        // NOK
                        case 'N':
                            UserError(Iptr);
                            opc = _LECT_ALBARAN;
                            break;

                        // Error en BBDD.
                        case 'C':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Tomar como OK
                        default:
                            // Albarán OK
                            opc = _LECT_CODEAN;
                            break;
                        }
                        break;

                    // Solicitamos código de barras del artículo.
                    case _LECT_CODEAN:
                        cstCodEAN = "";
                        cstCantid = "";

                        Pantalla_RecuentoMaterial(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_CODEAN_1, "Introduzca EAN"));
                        clreol(0, _LINEA_INPUTS + 1);
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret       = leer_char(ref cstLectura, 20);
                        cstCodEAN = cstLectura;

                        switch (ret)
                        {
                        // Ir a pedir albarán.
                        case _TECLA_ESC:
                            opc = _LECT_ALBARAN;
                            break;

                        case _TECLA_0:
                            RetVal = System.Convert.ToChar(Iptr.RecValidarEAN(cstCodEAN));

                            switch (RetVal)
                            {
                            // OK
                            case 'S':
                                opc = _LECT_CANTID;
                                break;

                            // NOK
                            case 'N':
                                UserError(Iptr);
                                opc = _LECT_CODEAN;
                                break;

                            // Error en BBDD.
                            case 'C':
                                UserError(Iptr);
                                opc = _FINALIZAR;
                                break;

                            // Resto de casos: Tomar como OK
                            default:
                                // Albarán OK
                                opc = _LECT_CANTID;
                                break;
                            }
                            break;

                        // Resto de teclas: ignorar.
                        default:
                            opc = _LECT_CODEAN;
                            break;
                        }
                        break;

                    // Entrar la cantidad recontada.
                    case _LECT_CANTID:
                        cstCantid = "";

                        Pantalla_RecuentoMaterial(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 0); gotoxy(0, _LINEA_INPUTS + 0); printf(Iptr.GetMessage(_LECT_CANTID_1, "Introduzca cantidad"));
                        clreol(0, _LINEA_INPUTS + 1); gotoxy(0, _LINEA_INPUTS + 1); printf(Iptr.GetMessage(_LECT_CANTID_2, "<F2:Poner a cero>"));
                        clreol(0, _LINEA_INPUTS + 2); gotoxy(0, _LINEA_INPUTS + 2);

                        ret       = leer_char(ref cstLectura, 10);
                        cstCantid = cstLectura;

                        // Tratamiento lectura
                        switch (ret)
                        {
                        // Ir a pedir EAN
                        case _TECLA_ESC:
                            opc = _LECT_CODEAN;
                            break;

                        // Poner a cero cantidad recontada de la línea
                        case _TECLA_F2:
                            opc = _PONER_CERO;
                            break;

                        case _TECLA_0:
                            RetVal = Iptr.RecValidarCnt((string)cstCantid);

                            switch (RetVal)
                            {
                            // OK
                            case 'S':
                                // Albarán OK
                                opc = _DATOS_OK;
                                break;

                            // NOK
                            case 'N':
                                UserError(Iptr);
                                opc = _LECT_CANTID;
                                break;

                            // Cantidad > cantidad pedida
                            case 'P':
                                UserError(Iptr);

                                clreol(0, _LINEA_INPUTS + 1);
                                ret = preguntar(Iptr.GetMessage(_LECT_CANTID_3, "Aceptar cantidad (S/N)"), _LINEA_INPUTS + 1);

                                switch (ret)
                                {
                                // Aceptar cantidad recontada > cantidad pedida
                                case _TECLA_SI:
                                    opc = _DATOS_OK;
                                    break;

                                // Por defecto NO acepta la cantidad
                                default:
                                    opc = _LECT_CANTID;
                                    break;
                                }
                                break;

                            // Error en BBDD
                            case 'C':
                                UserError(Iptr);
                                opc = _FINALIZAR;
                                break;

                            // Resto de casos: Tomar como OK
                            default:
                                // Albarán OK
                                opc = _DATOS_OK;
                                break;
                            }
                            break;

                        // Resto de teclas: Ignorar.
                        default:
                            opc = _LECT_CANTID;
                            break;
                        }
                        break;

                    // Actualizar cantidad recontada en la línea del albarán
                    case _DATOS_OK:
                        Pantalla_RecuentoMaterial(Iptr, _SECCION_1);

                        clreol(0, _LINEA_INPUTS + 1);
                        ret = preguntar(Iptr.GetMessage(_DATOS_OK_1, "Datos OK (S/N)"), _LINEA_INPUTS + 1);

                        switch (ret)
                        {
                        // Grabar datos
                        case _TECLA_SI:
                            opc = _ACTUALIZAR;
                            break;

                        // Resto teclas: Ignorar
                        default:
                            opc = _LECT_CANTID;
                            break;
                        }
                        break;

                    // Actualizar cantidad y estado albarán de entrada.
                    case _ACTUALIZAR:
                        RetVal = System.Convert.ToChar(Iptr.RecActualizar());

                        switch (RetVal)
                        {
                        // OK
                        case 'S':
                            // Recuento actualizado
                            opc = _LECT_CODEAN;
                            break;

                        // NOK
                        case 'N':
                            UserError(Iptr);
                            opc = _LECT_CANTID;
                            break;

                        // Error en BBDD
                        case 'C':
                            UserError(Iptr);
                            opc = _FINALIZAR;
                            break;

                        // Resto de casos: Tomar como OK
                        default:
                            // Recuento actualizado
                            opc = _LECT_CODEAN;
                            break;
                        }
                        break;

                    // Consulta de albaranes.
                    case _CONS_ALBARANES:
                        oCns = new CONSULTAALBARANES();
                        oCns.ConsultaAlbaranes(Iptr);
                        oCns = null;

                        // Recuperar albarán actual, si hay.
                        cstAlbaran = (string)Iptr.CnsNumAlb;
                        opc        = _VALIDAR_ALBARAN;
                        break;

                    // Cerrar estado recuento de material.
                    case _FINALIZAR:
                        opc = _NO_OPERACION;
                        break;

                    default:
                        opc = _NO_OPERACION;
                        break;
                    }
                }while (opc != _NO_OPERACION);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.ReadKey();
            }

            finally
            {
                RetVal = System.Convert.ToChar(Iptr.RecFinalizar());
            }

            return;
        }