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
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
Saludos