Page 1 of 1
Comunicar 2 terminales en una LAN (SOLUCIONADO)
Posted: 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
Posted: 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
Posted: 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
Posted: 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
Alguien más con más ideas?
Saludos
Re: Comunicar 2 terminales en una LAN
Posted: 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
Posted: 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
Posted: Tue Sep 01, 2015 1:20 pm
by karinha
Re: Comunicar 2 terminales en una LAN
Posted: 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
Posted: 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)
Posted: 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)
Posted: 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)
Posted: 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)
Posted: 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
// 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
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)
Posted: Sat Sep 05, 2015 1:32 am
by wilsongamboa
Armando
Muchas gracias
Wilson