// \samples\JVT2.PRG
// STATIC FUNCTION ListApuArti() // PORQUE STATIC, HAY OTRA CON MISMO NOMBRE?
FUNCTION ListApuArti()
LOCAL oDlg, oObra, oArt, oInicio, oFinal, oRdest, oRfil, oSayObra, oSayArt, oBtnCancel, oRepAa
LOCAL cObra, cArt, dInicio, dFinal, nRdest, nRfil, cImpresora
LOCAL oFont, oDevice
LOCAL oWndMain := GetWndMain()
LOCAL lAcepta := .F.
LOCAL cHeader1, cHeader2, cCaption, cNomObra := "" , cCodArt:="", cNomArt :=""
LOCAL cAlias := "ArtApua" //??
// NO ME GUSTA ESTE MODO DE APERTURA.
dbUseArea( .T., , "Apuart", "ArtApua", .T. )
dbUseArea( .T., , "Articulo", "ListA", .T. )
Set INDEX TO ARTICULO
dbUseArea( .T., , "Obras", "ListO", .T. )
Set INDEX TO OBRAS // NTX??
Select ( cAlias )
Set RELATION TO ArtApua->Obra INTO ListO, ArtApua->Art INTO ListA
ordSetFocus( 1 )
ArtApua->( dbGoTop() )
dInicio := ArtApua->Fecha
ArtApua->( dbGoBottom() )
dFinal := ArtApua->Fecha
cArt := Space( 4 )
cObra := Space(4)
DEFINE DIALOG oDlg RESOURCE "LISTAPUCOD" TITLE "LISTADO APUNTES ARTICULOS"
oDlg:lHelpIcon := .F.
nRfil := Space( 1 )
nRfil := 2
nRdest := Space( 1 )
nRdest := 1
REDEFINE SAY oSayObra PROMPT "" ID 20 OF oDlg UPDATE
REDEFINE SAY oSayArt PROMPT "" ID 10 OF oDlg UPDATE
// UPDATE EN LOS GETS??
REDEFINE GET oObra VAR cObra ID 101 BITMAP "OBRAS1" OF oDlg UPDATE PICTURE "9999" ;
ACTION cObra := Busqueda( "ListO" ) ;
VALID Rellena(oObra) .AND. IF(ListO->(dbSeek( cObra )),(oSayObra:Varput(ListO->Nombre),oSayObra:Refresh(), .T.),.F. ) UPDATE
oObra:bGotfocus := { || oWndMain:SetMsg( "Codigo de obra.Tecla <+> permite buscar" ) }
oObra:bKeyDown := { | nKey | IIf( nKey = VK_ADD, (cObra := Busqueda( "ListO" ),oObra:Refresh() ),.F. ) }
REDEFINE RADIO oRfil VAR nRfil ID 21, 22 OF oDlg UPDATE WHEN ! Empty( cObra ) UPDATE ;
ON CHANGE ( IF( nRfil == 1, oArt:SetFocus(), ( oArt:Disable(), oInicio:SetFocus(), oDlg:UPDATE() ) ), oRdest:Refresh() )
REDEFINE GET oArt VAR cArt ID 17 BITMAP "ARTICUL2" OF oDlg UPDATE ;
PICTURE "9999" WHEN nRfil == 1 ;
ACTION ( cArt := Busqueda( "ListA" ) );
VALID Rellena( oArt ) .AND. IF( ListA->( dbSeek( cArt ) ),(oSayArt:Varput(ListA->Nombre),oSayArt:Refresh(),oInicio:SetFocus(),.T.),.F.) UPDATE
oArt:bGotfocus := { || oWndMain:SetMsg( "Codigo de articulo.Tecla <+> permite buscar" ) }
oArt:bKeyDown := { | nKey | IIf( nKey = VK_ADD, (cArt := Busqueda( "ListA" ),oDlg:Update() ),.F. ) }
REDEFINE DTPICKER oInicio VAR dInicio ID 13 OF oDlg PICTURE "@d"
oInicio:bChange = { || If( OInicio:lClosed .and. oInicio:lFocused, oInicio:PostMsg( WM_KEYDOWN, VK_RIGHT ),) }
oInicio:bGotFocus := {|| oSayObra:Refresh(),oSayArt:Refresh() }
REDEFINE DTPICKER oFinal VAR dFinal ID 16 OF oDlg PICTURE "@d";
VALID dFinal >= dInicio
oFinal:bChange = { || If( oFinal:lClosed .AND. oFinal:lFocused, oFinal:PostMsg( WM_KEYDOWN, VK_RIGHT ),) }
REDEFINE RADIO oRdest VAR nRdest ID 11, 12 OF oDlg UPDATE ;
ON CHANGE ( oDlg:UPDATE() )
REDEFINE BTNBMP ID 110 RESOURCE "SCREEN" OF oDlg ;
ACTION IF( nRdest == 2, ( nRdest := 1, oRdest:Refresh() ), NIL )
REDEFINE BTNBMP ID 120 RESOURCE "PRINT1" OF oDlg ;
ACTION IF( nRdest == 1, ( nRdest := 2, oRdest:Refresh() ), NIL )
REDEFINE BTNBMP ID 750 RESOURCE "ACCEPT" OF oDlg ;
ACTION ( Imprimir_JVT_Correcto( ArtApua, ListA, ListO ), oDlg:End() )
REDEFINE BTNBMP oBtnCancel ID 751 RESOURCE "CANCEL" OF oDlg ;
ACTION( oDlg:End() )
oBtnCancel:lCancel := .T.
ACTIVATE DIALOG oDlg CENTERED
ArtApua->( dbClosearea() )
ListA->( dbClosearea() )
ListO->( dbClosearea() )
RETURN NIL
// Nuevo teste
FUNCTION Imprimir_JVT_Correcto( ArtApua, ListA, ListO )
cNomObra := ListO->Nombre
cNomArt := ListA->Nombre
cCodArt := ListA->Codigo
IF nRfil == 1 // Filtro por un Articulo
ArtApua->(dbSetFilter( { || ArtApua->Obra == cObra .AND. ArtApua->Art == cArt } ) )
ELSEIF nRfil == 2
ArtApua->(dbSetFilter( { || ArtApua->Obra == cObra } ) )
ENDIF
ArtApua->( dbGoTop() ) // Activa el filtro
ArtApua->( dbSeek( dInicio ) )
DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12
oDevice := TPrinter():NEW( cCaption, .F., IF( nRdest == 1, .T., .F. ) ) // Si True=Preview
IF nRdest == 2
cImpresora := PrnGetName()
IF PrnStatus( cImpresora ) != 0
STOP( "¡Impresora no preparada!" )
ArtApua->( dbClosearea() )
ListA->( dbClosearea() )
ListO->( dbClosearea() )
RETURN NIL
ENDIF
ENDIF
IF nRfil == 1
cHeader1 := "LISTADO APUNTES DE OBRA POR ARTICULO"
cHeader2 := "ARTICULO : " + cCodArt + " - " + cNomArt
cCaption := "Listado Apuntes de Obra por Articulo"
ELSEIF nRfil == 2
cHeader1 := "LISTADO APUNTES DE OBRA ARTICULOS"
cHeader2 := ""
cCaption := "Listado Apuntes de Obra Articulos"
ENDIF
REPORT oRepAa TITLE "OBRA : " + cObra + " - " + cNomObra, ;
Replicate ( "_", 77 ), ;
"", ;
Space( 26 ) + cHeader1 , ;
Replicate ( "_", 77 ), chr(13), ;
cHeader2 , ;
"FECHAS : " + DToC( dInicio ) + " Hasta " + DToC( dFinal ), Chr( 13 ) Left ;
Header "Pag. " + Str( oRepAa:nPage, 3 ) Right ;
FOOTER aEmpresa[ 1 ] + " - " + aEmpresa[ 2 ] + " (" + aEmpresa[ 11 ] + ")" ;
TO DEVICE oDevice FONT oFont
COLUMN TITLE "Fecha" DATA DToC( ArtApua->Fecha )
IF nRfil == 2
COLUMN TITLE "Articulo" DATA ListA->Nombre
ENDIF
COLUMN TITLE "Cantidad" DATA ArtApua->Cantidad TOTAL PICTURE "@E 999,999.99"
COLUMN TITLE "Precio" DATA ArtApua->Precio PICTURE "@E 999,999,999.99"
COLUMN TITLE "Total" DATA ArtApua->TOTAL TOTAL PICTURE "@E 999,999,999.99"
END REPORT
oRepAa:nTotalline := 1
oRepAa:nTitleUpline := 0 // Quita la linea de arriba de los titulos 0
oRepAa:MARGIN( 4, 5, 2 )
// oRepAa:bInit := {|| ArtApua->(dbgotop()) } // Activa boton Excel en Preview Da error
ACTIVATE REPORT oRepAa FOR ArtApua->Fecha <= dFinal WHILE ! ArtApua->( Eof() )
oFont:End()
RETURN NIL