/*-----------------------------------------------------------------------------------------------*/
METHOD LeerBascula() CLASS TTpvPasadores
/*-----------------------------------------------------------------------------------------------*/
LOCAL oKilos, cKilos, oFontBtns, oBrush
LOCAL oDlg, oFontKilos, lTermina, oBtnOk, oBtnCancel, lGrabar, nElemento, nComm
lTermina:= .F.
lGrabar:= .F.
cKILOS:= "0.00"
DEFINE BRUSH oBrush FILENAME "bitmaps\BRUSH4.BMP"
DEFINE FONT oFontKilos NAME "Arial" SIZE 0, 96
DEFINE FONT oFontBtns NAME "Arial" SIZE 0, -18
DEFINE DIALOG oDlg FROM 140, 360 TO 500, 800 TITLE "LECTURA DE BASCULA" PIXEL BRUSH oBrush
@ 40,20 GET oKILOS VAR cKILOS Right OF oDlg SIZE 180, 60 PIXEL FONT oFontKilos;
COLOR CLR_WHITE, CLR_BLACK
@ 120, 30 BUTTONBMP oBtnOk PROMPT "&Registrar" SIZE 70, 30 ;
DEFAULT OF oDlg PIXEL
@ 120, 110 BUTTON oBtnCancel PROMPT "&Cancelar" SIZE 70, 30 ;
ACTION (lTermina:= .T., lGrabar:= .F., oDlg:End() ) ;
CANCEL OF oDlg PIXEL
oBtnOk:bAction:= { || ::GrabarPeso( cKILOS ), lTermina:= .T., lGrabar:= .T., oDlg:End() }
oBtnOk:oFont:= oFontBtns
oBtnCancel:oFont:= oFontBtns
oKilos:bKeyDown = { | nKey | SendStr( nComm, "P" ) }
oDlg:bCommNotify = { | nComm, nStatus | ReceiveStr( nComm, nStatus ) }
ACTIVATE DIALOG oDlg ;
ON INIT ( nComm := CheckPortSerial( oDlg, oKilos ),IF( nComm < 0, oDlg:End(), ) );
VALID ( oFontKilos:End(), oFontBtns:END(), oBrush:END(), lTermina )
IF lGrabar
CloseComm( nComm )
RETURN .T.
ENDIF
RETURN .F.
/*-----------------------------------------------------------------------------------------------*/
STATIC FUNCTION CheckPortSerial( oDlg, oGet)
/*-----------------------------------------------------------------------------------------------*/
LOCAL nCom, cDcb
BEGIN SEQUENCE
nCom = OPENCOMM( "COM1", 16384, 16384 )
IF nCom < 0
MSGSTOP( "ERROR! DE APERTURA DEL PUERTO SERIAL COM1" )
BREAK
ENDIF
BUILDCOMMDCB( "COM1:9600,N,8,1", @cDcb )
IF !SETCOMMSTATE( nCom, cDcb )
MSGSTOP( "ERROR! DE CONFIGURACION DEL PUERTO SERIAL COM1" )
BREAK
ENDIF
oDlg:bCommNotify = { | nCom | Connect( nCom, oGet ) }
IF !ENABLECOMMNOTIFICATION( nCom, oDlg:hWnd, 1, -1 )
MSGSTOP( "ERROR! DE NOTIFICACIONES DEL PUERTO SERIAL COM1" )
BREAK
ENDIF
RECOVER
nCom = -1
END SEQUENCE
RETURN nCom
/*-----------------------------------------------------------------------------------------------*/
STATIC FUNCTION CONNECT( nCom, oGet )
/*-----------------------------------------------------------------------------------------------*/
LOCAL cStr, nLen, n, nAsc
STATIC cNumeros
ENABLECOMMNOTIFICATION( nCom, 0, 1, -1 )
cStr = RECEIVESTR( nCom )
cStr = STRTRAN( cStr, CHR( 13 ), "" )
cStr = STRTRAN( cStr, CHR( 10 ), CRLF )
oGet:cText( Transform( cStr, "999.999" ) )
oGet:Refresh()
RETURN NIL
/*-----------------------------------------------------------------------------------------------*/
STATIC FUNCTION SENDSTR( nCom, cString )
/*-----------------------------------------------------------------------------------------------*/
LOCAL nBytes:= 0, nError, ix
nBytes := WriteComm( nCom, cString )
for ix = 1 to 1000000 // El valor de LaEspera seria de acuerdo al dispositivo
next ix // Puse 1,000,000 Asi pudo Funcionar
if nBytes < 0
MsgStop( "Error de Envio!!: " + Str( GetCommError( nCom ) ) )
endif
if FlushComm( nCom, 0 ) != 0
nError = GetCommError( nCom )
MsgInfo( "FlushComm Error: " + Str( nError ) )
endif
RETURN NIL //nBytes = LEN( cString )
/*-----------------------------------------------------------------------------------------------*/
STATIC FUNCTION RECEIVESTR( nCom )
/*-----------------------------------------------------------------------------------------------*/
LOCAL cBuf := SPACE( 1000 )
RETURN LEFT( cBuf, READCOMM( nCom, @cBuf ) )
/* --------------------------------------------------------------------------------------------- */
METHOD GrabarPeso( cKilos ) CLASS TTpvPasadores
/*-----------------------------------------------------------------------------------------------*/
LOCAL nKilos:= Val( cKilos ), lAppend
DBSelectArea( "BUFFET" ); OrdSetFocus("CLAVE")
IF DBSeek( DToS( ::dFechaVenta ) + ::cPASADOR + ::cPRODU )
IF buffet->PESO_ENTRA > 0 .AND. buffet->PESO_SALE = 0
IF RecordLock( "BUFFET" )
buffet->PESO_SALE := nKilos
buffet->PESO_FINAL:= buffet->PESO_ENTRA - nKilos
buffet->( DBUnlock() )
ENDIF
ELSE
lAppend:= .F.
DO WHILE DToS(buffet->FECHA) + buffet->PASADOR + buffet->INSUMO == DToS( ::dFechaVenta ) + ::cPASADOR + ::cPRODU
IF buffet->PESO_ENTRA > 0 .AND. buffet->PESO_SALE > 0
lAppend:= .T.
ELSE
IF buffet->PESO_ENTRA > 0 .AND. buffet->PESO_SALE = 0
IF RecordLock( "BUFFET" )
buffet->PESO_SALE := nKilos
buffet->PESO_FINAL:= buffet->PESO_ENTRA - nKilos
buffet->( DBUnlock() )
lAppend:= .F.
ENDIF
ENDIF
ENDIF
DBSkip()
ENDDO
IF lAppend
IF AddRecord( "BUFFET" )
buffet->FECHA := ::dFechaVenta
buffet->HORA := Time()
buffet->PASADOR := ::cPASADOR
buffet->NOMBRE := ::oSayNOM:cCaption
buffet->INSUMO := ::cPRODU
buffet->PESO_ENTRA:= nKilos
buffet->PESO_SALE := 0
buffet->PESO_FINAL:= 0
buffet->( DBUnlock() )
ENDIF
ENDIF
ENDIF
ELSE
IF AddRecord( "BUFFET" )
buffet->FECHA := ::dFechaVenta
buffet->HORA := Time()
buffet->PASADOR := ::cPASADOR
buffet->NOMBRE := ::oSayNOM:cCaption
buffet->INSUMO := ::cPRODU
buffet->PESO_ENTRA:= nKilos
buffet->PESO_SALE := 0
buffet->PESO_FINAL:= 0
buffet->( DBUnlock() )
ENDIF
ENDIF
RETURN NIL