Creo que seria de utilidad para todos los que estamos empezando con tdolphin si pusieramos ejemplos de programas echos con esta clase para retroalimentarnos y poder usar la clase en toda su funcionalidad. Aqui les dejo un primer ejemplo de altas bajas y modificaciones, no se si sea optimo espero sus comentarios para la mejora de dicho programa.
- Code: Select all Expand view
function Main()
local oWnd:=WndMain(),oBar, oPopup, oBtn
local WcDirectorioPrograma:=allTrim(CurDir())
local WcAux,WaStruct
local W_cDirTrabajo,WnSec1,WcClaveAcceso:=space(10)
local oServer,cQuery
private oFontArial9,oFontArial8
public WaStructFacuras:={}
DEFINE FONT oFontArial9 NAME "Arial" SIZE 0, -9
DEFINE FONT oFontArial8 NAME "Arial" SIZE 0, -8
set deleted ON
set talk OFF
set exact ON
set confirm ON
set century On
set date FRENCH
if date()<cToD('15/09/2010')
msgStop('La fecha del sistema es incorrecta')
release all
resAllFree()
memory(-1)
PostQuitMessage(0)
__Quit()
quit
endIf
CONNECT EMBEDDED oServer ;
DATABASE "AdmiPos" ;
OPTIONS "Dolphin_server_embedded",;
"--datadir=./datos/",;
"--language=./sysdir/spanish/",;
"--skip-innodb",;
"--key-buffer-size=64MB",;
"--console";
GROUPS "Dolphin_server_embedded",
//
//Table Structure (like dbf)
//Name, Type, Length, Decimal, Not Null (logical), Defaul value
WaStruct={{"ini_Empresa","C",100,0,.t.,},;
{"ini_pathconection","C",100,0,.t.,},;
{"DirCDFS","C",40,0,.t.,};
}
//CreateTable( cTable, aStruct, cPrimaryKey, cUniqueKey, cAuto, cExtra, lIfNotExist, lVer )
if .not. oServer:TableExist( 'Inicia' )
oServer:CreateTable( "inicia", WaStruct, , , ,"ENGINE = InnoDB",.t. )
DEFINE QUERY oQry "SELECT * FROM inicia"
oQry:GetBlankRow( .F. )
oQry:ini_empresa:='InterWin'
oQry:save()
endIf
WaStruct={{"ven_id","N",10,0,.t.,},;
{"ven_nombre","C",100,0,.t.,},;
{"ven_comi","N",5,2,.t.,},;
{"ven_usuario","C",100,0,.t.,},;
{"ven_fecha","D",10,0,.t.,},;
{"ven_hora","D",10,0,.t.,};
}
if .not. oServer:TableExist( 'vendedores' )
oServer:CreateTable( "vendedores", WaStruct,"ven_id" , ,"ven_id" ,"ENGINE = InnoDB",.t. )
endIf
SetBalloon( .T. ) // Balloon shape required for tooltips
DEFINE WINDOW oWnd TITLE "SISTEMA DE AMINISTRACION Y FACTURACION ELECTRONICA "+space(5);
MENU BuildMenu(WcDirectorioPrograma,oWnd,oServer)
ACTIVATE WINDOW oWnd MAXIMIZED;
VALID MsgYesNo( "¿Desea salir?" )
oFontArial9:end()
release all
resallfree()
memory(-1)
PostQuitMessage(0)
__Quit()
quit
return nil
function BuildMenu(cDirectorioPrograma,oWnd,oServer)
local WcDirTrabajo:=''
local oMenu
MENU oMenu 2007
MENUITEM "Catalogos"
MENU
MENUITEM "Vendedores" action BuscaVendedores(cDirectorioPrograma,'Vendedores',oServer)
ENDMENU
ENDMENU
return oMenu
function DefineColoresGet(oGet)
oGet:bGotFocus:={|| oGet:SetColor(nRgb(15,15,15),nRgb(208,218,242))}
oGet:bLostFocus:={|| oGet:SetColor(nRgb(15,15,15),nRgb(255,255,255))}
return NIL
Function BuscaVendedores(cDirectorioPrograma,cEnvia,oServer)
local oDlg, oBrw, oCol,oSayCadenaBusqueda,oQry
local i,WcCadenaBusqueda:='',WcCodigoElegido:=0
DEFINE DIALOG oDlg RESOURCE "General_busca" title 'Edicion de Contenido'
oServer:SetNameServer( "Central" )
DEFINE QUERY oQry "SELECT * FROM Vendedores order by ven_id" OF "Central"
oBrw := TXBrowse():New( oDlg)
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .t.
oBrw:bClrStd := { || If( ( oBrw:KeyNo() % 2 ) == 0, { CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } ) }
oCol := oBrw:AddCol()
oCol:bStrData := { ||str(oQry:ven_id,3)}
oCol:cHeader := "file"
oCol:nWidth := 82
oCol := oBrw:AddCol()
oCol:bStrData := { ||AllTrim( oQry:ven_nombre)}
oCol:cHeader := "file name"
oCol:nWidth := 82
for i=1 to len(oBrw:aCols)
oBrw:aCols[ i ]:blDClickData := {|r,c,f,o| dVendedores("EDITA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh()}
next
oBrw:CreateFromResource( 101 )
oBrw:setdolphin(oQry, .F.)
ACTIVATE DIALOG oDlg CENTERED ON INIT (BuildBarDlgVendedores( oDlg,cDirectorioPrograma,oBrw,cEnvia,oQry ),;
oBrw:SetFocus())
return WcCodigoElegido
//----------------------------------------------------------------------------//
function BuildbarDlgVendedores( oDlg,cDirectorioPrograma,oBrw,cEnvia,oQry )
local oBar,oBtnNuevo,oBtnEditar,oBtnImprimir,oBtnAExcel,oBtnInicio,oBtnFin,oBtnExit
DEFINE BUTTONBAR oBar OF oDlg SIZE 45, 45 2007
DEFINE BUTTON oBtnNuevo OF oBar file cDirectorioPrograma+"\Nuevo.BMP" ;
ACTION (EdVendedores("ALTA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh() ) PROMPT "Nuevo"
DEFINE BUTTON oBtnEditar OF oBar file cDirectorioPrograma+"\Editar.BMP" ;
ACTION (EdVendedores("EDITA",cDirectorioPrograma,oQry),oBrw:GoTop(),oBrw:refresh()) PROMPT "Editar";
DEFINE BUTTON oBtnImprimir OF oBar file cDirectorioPrograma+"\Imprimir.BMP" ;
ACTION (ReporteVendedores(oQry),oBrw:GoTop(),oBrw:refresh() ) PROMPT "Imprimir" GROUP;
DEFINE BUTTON oBtnInicio OF oBar file cDirectorioPrograma+"\Inicio.BMP" ;
ACTION oBrw:goTop() PROMPT "Inicio" GROUP
DEFINE BUTTON oBtnFin OF oBar file cDirectorioPrograma+"\fin.BMP" ;
ACTION oBrw:goBottom() PROMPT "Fin"
DEFINE BUTTON oBtnExit OF oBar file cDirectorioPrograma+"\exit.BMP" ;
ACTION oDlg:End() PROMPT "Salir" group
oBrw:refresh(.t.)
return nil
function EdVendedores(cStatus,cDirectorioPrograma,oQry)
local oDbf,oBtnOK,oBtnCancela,oBtnBorra
local oDlg,oFld,oBrW
local oGets[40],oEspecial,oTipoProd,oImptosEspe,oIVAExto
local WcAliasAnterior:=alias(),i
if cStatus='ALTA'
oQry:GetBlankRow( .F. )
endIf
DEFINE DIALOG oDlg RESOURCE "General_Catalogo"
REDEFINE FOLDER oFld ID 110 OF oDlg;
PROMPTS "Generales";
DIALOGS "Vendedores_Grales"
REDEFINE GET oGets[1] var oQry:ven_id ;
ID 100 OF oFld:aDialogs[1] ;
PICTURE '999';
UPDATE
REDEFINE GET oGets[2] var oQry:ven_nombre ;
ID 101 OF oFld:aDialogs[1];
UPDATE
REDEFINE GET oGets[3] var oQry:ven_comi ;
ID 102 OF oFld:aDialogs[1] ;
PICTURE '99.99';
UPDATE
for i=1 to 3
DefineColoresGet(oGets[i])
next
REDEFINE BUTTONBMP oBtnOK ID 51 OF oDlg;
BITMAP cDirectorioPrograma+"\ok.BMP" ;
PROMPT "Aceptar" TEXTRIGHT;
ACTION if(ValidaGrabaVendedores(cStatus,oQry),;
if(cStatus='EDITA',oDlg:End(),(oQry:GetBlankRow( .F. ),oFld:update())),NIL);
TOOLTIP "Acepta Seleccion"
REDEFINE BUTTONBMP oBtnCancela ID 52 OF oDlg;
BITMAP cDirectorioPrograma+"\Cancelar.BMP" TEXTRIGHT;
PROMPT "Cancelar" ;
ACTION (if(cStatus<>'EDITA',oQry:lAppend:=.f.,NIL),oQry:Refresh(),oDlg:End());
TOOLTIP "Cancela edicion Seleccion" ;
REDEFINE BUTTONBMP oBtnBorra ID 53 OF oDlg;
BITMAP cDirectorioPrograma+"\Borrar.BMP" TEXTRIGHT;
PROMPT "Borrar" ;
WHEN cStatus<>'ALTA';
ACTION (BorraVendedores(oQry),oDlg:End());
TOOLTIP "Cancela edicion Seleccion" ;
ACTIVATE DIALOG oDlg;
CENTERED
oGets:=NIL
return NIL
function ValidaGrabaVendedores(cStatus,oQry)
if cStatus='ALTA'
if oQry:ven_id=0
msgStop('Debe de capturar numero')
return .f.
endIf
endIf
oQry:save()
if cStatus='ALTA'
oQry := oQry
msgInfo('Alta Efectuada')
endIf
return .t.
function BorraVendedores(oQry)
if .not. MsgNoYes('¿Desea borrar el registro?')
return NIL
endIf
oQry:Delete()
oQry:refresh()
return NIL
function ReporteVendedores(oQry)
local oReport
local WcTitulo1:='Prueba',WcTitulo2:='Listado de vendedores al '+dToC(date())
oQry:goTop()
REPORT oReport ;
TITLE allTrim(WcTitulo2) CENTER;
HEADER allTrim(WcTitulo1) CENTER;
FOOTER OemtoAnsi("P gina: ")+str(oReport:nPage,3) right;
preview
COLUMN TITLE 'Numero' ;
DATA oQry:ven_id
COLUMN TITLE 'Nombre';
DATA oQry:ven_nombre;
COLUMN TITLE '% Comi' ;
DATA oQry:ven_comi;
PICTURE '99.99'
End Report
IF oReport:lCreated
oReport:bSkip := {|| oQry:skip()}
ENDIF
ACTIVATE REPORT oReport
return NIL
En este ejemplo lo que no funciona es la rutina para imprimir el reporte, me lo muestra en blanco, si alguien me puede dar algun tip de como generar el reporte se lo agradeceria.
Saludos