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
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() quitreturn nilfunction BuildMenu(cDirectorioPrograma,oWnd,oServer) local WcDirTrabajo:='' local oMenu MENU oMenu 2007 MENUITEM "Catalogos" MENU MENUITEM "Vendedores" action BuscaVendedores(cDirectorioPrograma,'Vendedores',oServer) ENDMENU ENDMENUreturn oMenufunction 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 NILFunction 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 nilfunction 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:=NILreturn NILfunction 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') endIfreturn .t.function BorraVendedores(oQry) if .not. MsgNoYes('¿Desea borrar el registro?') return NIL endIf oQry:Delete() oQry:refresh()return NILfunction 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 oReportreturn 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