Page 1 of 1

Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Mon Aug 31, 2015 9:31 pm
by Armando
Amigos foreros:

Tengo el reto de comunicar 2 terminales (PC) en una LAN, me explico, necesito
que cuando en una terminal terminen de registrar un nuevo pedido se envíe un
mensaje (ALERT) a una terminal X avisando que ya hay un nuevo pedido.

Alguien que me tire una hebra para saber por donde jalar??

Saludos

Re: Comunicar 2 terminales en una LAN

PostPosted: Mon Aug 31, 2015 9:46 pm
by wilsongamboa
Armando buenas tardes
SOLO una idea
Crear una tabla en modo comartico con campos como
id_term
nom_term
mensaje
usuario
Leido

indexada por medio de id_terminal
donde se graba la factura o pedido
abres esa tabla y grabas
un registro con la informacion del terminal donde debe ser leído el nombre de tu terminal escribes el mensaje y en el otro terminal lo abres en base al id_term y lo muestras y eliminas ese registro o lo marcas como leído

Bueno solo es una idea
saludos
Wilson

Re: Comunicar 2 terminales en una LAN

PostPosted: Mon Aug 31, 2015 10:15 pm
by cnavarro
Armando wrote:Amigos foreros:

Tengo el reto de comunicar 2 terminales (PC) en una LAN, me explico, necesito
que cuando en una terminal terminen de registrar un nuevo pedido se envíe un
mensaje (ALERT) a una terminal X avisando que ya hay un nuevo pedido.

Alguien que me tire una hebra para saber por donde jalar??

Saludos


Antiguamente se utilizaba los comandos de Sistema Operativo net send y/o el comando msg
Tambien hay utilidades para esta funcionalidad, por ejemplo: http://www.zhornsoftware.co.uk/stickies/

Re: Comunicar 2 terminales en una LAN

PostPosted: Mon Aug 31, 2015 10:41 pm
by Armando
Amigos:

Wilson, gracias por la idea, aunque el problema que tengo es ¿Cómo enviar
el mensaje a la otra terminal?

Cristóbal:

También gracias por el tip, voy a leer más a detalle la idea que me aportas, puede ser!

Recuerdo que alguna vez alguien del foro publico el código para conectar/chatear de PC
a PC, pero ahora que lo necesito no lo encuentro :roll:

Alguien más con más ideas?
Saludos

Re: Comunicar 2 terminales en una LAN

PostPosted: Tue Sep 01, 2015 12:57 am
by Armando
Wilson:

Dándole vuelta a tu idea, con un pequeño cambio, puede ser la solución.

El cambio sería:

Crear un timer para que la opción del usuario receptor, cada x tiempo, "vea"
si hay algo nuevo en la tabla abra un dialogo con la información necesaria
permitiendo al usuario borrar el mensaje.

Creo que por ahí pueden ir los tiros. :)

Alguna otra idea?

Saludos al foro

Re: Comunicar 2 terminales en una LAN

PostPosted: Tue Sep 01, 2015 11:53 am
by armando.lagunas
mi estimado:

una vez descargue esos ejemplos, los voy a buscar y si los encuentro los publico, eran del foro de clipper hace muchos años.

saludos.

Re: Comunicar 2 terminales en una LAN

PostPosted: Tue Sep 01, 2015 1:20 pm
by karinha

Re: Comunicar 2 terminales en una LAN

PostPosted: Tue Sep 01, 2015 1:35 pm
by Armando
Tocayo Lagunas:

Muchas gracias por la intención. Karinha ya puso el link.

Karinha:

Muchas gracias por el link, ahora tengo mas opciones.

Grandioso foro.

Saludos

Re: Comunicar 2 terminales en una LAN

PostPosted: Fri Sep 04, 2015 9:44 pm
by Armando
Amigos:

Pues ya quedó resuelto el problema, la solución fue tomar
la idea de Wilson y con el Timer y algunos otros detalles ha
quedado resuelto mi problema.

Gracias a todos

Saludos foreros

Re: Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Fri Sep 04, 2015 9:52 pm
by wilsongamboa
Armando muy bien !!!
Si compartes algo de codigo se agradece
saludos
Wilson

Re: Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Fri Sep 04, 2015 11:03 pm
by Armando
Wilson:

Que parte del código te interesa?, uso ADO!

Saludos

Re: Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Fri Sep 04, 2015 11:13 pm
by wilsongamboa
La parte visual
y algo del proceso
gracias
Wilson
pd: Muy interesante seria crear una clase en base a tu codigo para separar componentes e ir generando una usable por todos, ya que por ejemplo yo trabajo con adsntx

Re: Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Fri Sep 04, 2015 11:29 pm
by Armando
Wilson y amigos del foro:

La idea es que cuando una PC términal registra una nueva orden de fabricación,
el área de fabricación reciba un aviso inmediatamente.

Siguiendo tu idea, cree una tabla donde se registra número de orden, fecha y
hora de la nueva orden de fabricación.

Code: Select all  Expand view

            // Agregamos la orden a los avisos
            cCmdSql := "INSERT INTO " +;
                                "Avisos " +;
                            "SET " +;
                                "Avi_Ord = " + STR(oOrd:ORD,7,0) + "," +;
                                "Avi_Rev = " + STR(oOrd:REV,2,0) + "," +;
                                "Avi_Usu = 'Jesus A'," +;
                                "Avi_Fde = '" + DTOS(DATE()) + "'," +;
                                "Avi_Hde = '" + TIME() + "'," +;
                                "Avi_Lei = " + STR(0,1,0)
 


En el PRG main() puse un Timer para que cada x tiempo, en mi caso 5 minutos "vea" si hay
nuevos registros en la tabla AVISOS

Code: Select all  Expand view

STATIC FUNCTION Tiempo()
    // 60,000 es igual a 1 minuto, se crea y se activa solo una vez
    DEFINE TIMER oTimer OF oWindow INTERVAL 10000 ACTION Revisar()

    oTimer:Activate()
RETURN(NIL)


FUNCTION Revisar()
    LOCAL oRsAvi
    LOCAL oDlg
    LOCAL aGets := ARRAY(03)
    LOCAL oSays
    LOCAL cSays
    LOCAL oFont1
    LOCAL oFont2

    LOCAL nDiaDif   := 0

    LOCAL oAceptar

    IF lVentana
    lVentana    := (.F.)
        oSays       := ARRAY(08)
        cSays       := ARRAY(08)

        TRY
            oRsAvi:=    TOleAuto():New("adodb.recordset")
        CATCH oError
            MsgStop( "No se ha podido crear el RECORDSET de MENSAJES !", oApp:cAplicacion)
            ShowError(oError)
            oRsAvi  :=  NIL
            RETURN(.F.)
        END

        oRsAvi:CursorLocation   := adUseClient
        oRsAvi:LockType         := adLockOptimistic
        oRsAvi:CursorType           := adOpenDynamic
        oRsAvi:Source               := "SELECT " +;
                                                "* " +;
                                            "FROM " +;
                                                "Avisos " +;
                                            "WHERE " +;
                                                "! AVI_LEI"

        oRsAvi:ActiveConnection(oApp:oCon)

        TRY
            oRsAvi:Open()
        CATCH oError
            MsgStop( "No se ha podido abrir el RECORDSET Mensajes !", oApp:cAplicacion)
            ShowError(oError)
            RETURN(.F.)
        END

        IF oRsAvi:BOF() .AND. oRsAvi:EOF()
            RETURN(.T.)
        ELSE
            oRsAvi:MoveFirst()
            DO WHILE ! oRsAvi:EOF()
                nDiaDif := ROUND(DATE() - oRsAvi:Fields("AVI_FDE"):Value,0)

                DO CASE
                    CASE nDiaDif == 0
                        cSays[01]   := "Hoy:"
                    CASE nDiaDif == 1
                        cSays[01]   := "Ayer:"
                    CASE nDiaDif == 2
                        cSays[01]   := "Antier:"
                    OTHER
                        cSays[01]   := "El día:"
                ENDCASE
                cSays[02]   := DATE2TXT(oRsAvi:Fields("AVI_FDE"):Value)
                cSays[03]   := "A las"
                cSays[04]   := TIME()
                cSays[05]   := "Se registró la nueva orden"
                cSays[06]   := TRANSFORM(oRsAvi:Fields("AVI_ORD"):Value,"@Z 9999999")
                cSays[07]   := "Rev:"
                cSays[08]   := TRANSFORM(oRsAvi:Fields("AVI_REV"):Value,"@ 99")

                DEFINE FONT oFont1 NAME "Arial" SIZE 0,-12
                DEFINE FONT oFont2 NAME "Arial" SIZE 0,-20 BOLD
                DEFINE DIALOG oDlg RESOURCE "SndMsg" OF oWindow COLORS CLR_WHITE,RGB(060,097,145)

                REDEFINE SAY oSays[01] VAR cSays[01] ID 101 OF oDlg FONT oFont1;
                        COLORS CLR_WHITE,RGB(060,097,145)
                REDEFINE SAY oSays[02] VAR cSays[02] ID 102 OF oDlg FONT oFont2;
                        COLORS CLR_WHITE,RGB(060,097,145)
                REDEFINE SAY oSays[03] VAR cSays[03] ID 103 OF oDlg FONT oFont1;
                        COLORS CLR_WHITE,RGB(060,097,145)
                REDEFINE SAY oSays[04] VAR cSays[04] ID 104 OF oDlg FONT oFont2;
                        COLORS CLR_WHITE,RGB(060,097,145)
                REDEFINE SAY oSays[05] VAR cSays[05] ID 105 OF oDlg FONT oFont1;
                        COLORS CLR_WHITE,RGB(060,097,145)

                    REDEFINE GET aGets[01] VAR oRsAvi:Fields("AVI_ORD"):Value ID 106 OF oDlg UPDATE;
                        WHEN (.T.) .AND. (.F.) FONT oFont2;
                        PICTURE "@K 999999"
                REDEFINE SAY oSays[07] VAR cSays[07] ID 107 OF oDlg FONT oFont1;
                        COLORS CLR_WHITE,RGB(060,097,145)

                    REDEFINE GET aGets[02] VAR oRsAvi:Fields("AVI_REV"):Value ID 108 OF oDlg UPDATE;
                        WHEN (.T.) .AND. (.F.) FONT oFont2;
                        PICTURE "@K 99"

                    REDEFINE BUTTON oAceptar ID 901 OF oDlg UPDATE;
                        ACTION (UpdAvi(oRsAvi),oDlg:END())

                ACTIVATE DIALOG oDlg ON INIT SetWindowPos( oDlg:hWnd, -1, 0, 0, 0, 0, 3 )
                oRsAvi:MoveNext()
            ENDDO
            lVentana    := (.T.)
        ENDIF
    ENDIF
RETURN(NIL)


/*
* --------------------------------------------------------------------------*
* --------------------------------------------------------------------------*
*/

FUNCTION UpdAvi(oRsAvi)
    LOCAL cCmdSql   := ""

    cCmdSql := "UPDATE " +;
                        "Avisos " +;
                    "SET " +;
                        "AVI_LEI = ! AVI_LEI,"+;
                        "AVI_FDL = '" + DTOS(DATE()) + "'," +;
                        "AVI_HDL = '" + TIME() + "' " +;
                    "WHERE " +;
                        "AVI_ORD = " + STR(oRsAvi:Fields("AVI_ORD"):Value,7,0) + " " +;
                    "AND " +;
                        "AVI_REV = " + STR(oRsAvi:Fields("AVI_REV"):Value,2,0)
    TRY
        oApp:oCon:Execute(cCmdSql)
    CATCH oError
        MsgInfo("No pude ejecutar el comando " + cCmdSql,oApp:cAplicacion)
        RETURN(.F.)
    END
RETURN(.T.)
 


Si hay registros nuevos son mostrados en un diálogo ON TOP y espera respuesta del usuario
del área de producción, cuando el usuario da clic sobre el botón ENTERADO se actualiza la
tabla con fecha y hora en que se dio clic. Es muy simple.

Esta es la imagen
[img]
http://postimg.org/image/6cegtrckp/[/img]

Re: Comunicar 2 terminales en una LAN (SOLUCIONADO)

PostPosted: Sat Sep 05, 2015 1:32 am
by wilsongamboa
Armando
Muchas gracias
Wilson