Tdolphin Ejemplo ABM.

José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Tdolphin Ejemplo ABM.

Post by José Ríos »

Buen dia.

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
 
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
Last edited by José Ríos on Thu Jan 05, 2012 5:25 am, edited 1 time in total.
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

Corregido, con las siguientes modificaciones ya funciona el reporte:

Code: Select all

function ReporteVendedores(oQry)
   local oReport
   local WcTitulo1:='Prueba',WcTitulo2:='Listado de vendedores al '+dToC(date())
   local WnLinea:=1,WnHasta:=0

    WnHasta:=oQry:lastRec()

    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 := {||WnLinea++,oQry:skip()}
   ENDIF

    ACTIVATE REPORT oReport WHILE WnLinea <= WnHasta

return NIL

 
Saludos
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

Jose

Muchas Gracias!!! :-D
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con _ (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Tdolphin Ejemplo ABM.

Post by Compuin »

Amigos,

En SQL no es buena practica el uso del SELECT *. Lo mejor es que hagan la consulta referenciando el o _ que van a consultar.

Saludos
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Tdolphin Ejemplo ABM.

Post by wmormar »

José Ríos,

Se puede perfectamente colocar mas de una columna (campo) como primary key
Y para el cambio de orden es necesario hacer una consulta nueva, salvo Daniel haga una funcion para que le enviemos el cambio de ORDER BY, pero internamente, se haria una consulta nueva.

saludos
José Ríos wrote:Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con _ (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos
William, Morales
Saludos

méxico.sureste
carloslmm
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Tdolphin Ejemplo ABM.

Post by carloslmm »

Gracias a todos Maestros

estoy cambiando la base de datos y esta me parece un muy buena opcion, creo que esto y la ayuda de un gran amigo
william voy a salir adelante mas rapido


gracias de nuevo

carlos de la rosa perez

carloslmm@hotmail.com
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Re: Tdolphin Ejemplo ABM.

Post by José Ríos »

William.

Gracias por responder.

¿Cual es la sintaxis para crear una primary key con mas de una columna?, lo intente de la siguiente forma:

oServer:CreateTable( "facturas", WaStructFacuras,"serie,numero" , , ,"ENGINE = InnoDB",.t. )

Pero al crearse la tabla me manda el siguiente error:

Application
===========
Path and name: C:\FWH1109\sistemas\AdmiPos\admipos.exe (32 bits)
Size: 2,232,832 bytes
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 06/01/2012, 09:42:39
Error description: Error TDOLPHIN/9003 Internal Error:Invalid Primary Key
Args:

Stack Calls
===========
Called from: .\source\prg\tdolpsrv.prg => DOLPHIN_DEFERROR(2668)
Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:CHECKERROR(776)
Called from: .\source\prg\tdolpsrv.prg => TDOLPHINSRV:CREATETABLE(947)
Called from: ProcGral.prg => CREAARCHIVOS(629)
Called from: AdmiPos.prg => MAIN(66)
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Tdolphin Ejemplo ABM.

Post by wmormar »

José Ríos,

Se tendria que modificar la clase para que hiciera lo que comentas, hasta ahora solo está diseñada para una columna.

saludos
William, Morales
Saludos

méxico.sureste
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Tdolphin Ejemplo ABM.

Post by joseluisysturiz »

José Ríos wrote:Daniel

Gracias a ti por por poner a disposicion del foro la magnifica clase tdolphin.

Tengo algunas preguntas

* sobre la primary key: ¿se puede definir una primary key con _ (o columnas) en tdolphin?.

* como puedo cambiar el order by de un query sin volver a hacer un select?

Saludos
Probastes..?

oQry:SetOrder( "adj_insc ASC", .t. )

lo uso al igual que setwhere()
Dios no está muerto...

Gracias a mi Dios ante todo!
evallejo
Posts: 11
Joined: Thu Feb 07, 2008 10:09 pm

Re: Tdolphin Ejemplo ABM.

Post by evallejo »

daniel

cuando uso
:lappend=.t.
:save()

el puntero se queda en el anterior, como si faltara un dbappend(). inserta el registro pero el puntero se queda en el anterior. o sea el ultimo registro es 10, adiciono, se inserta el registro 11 pero el puntero sigue en el 10, una manito plis

Eduardo
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

prueba

Code: Select all

:lappend=.t.
:save()
:skip()
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
evallejo
Posts: 11
Joined: Thu Feb 07, 2008 10:09 pm

Re: Tdolphin Ejemplo ABM.

Post by evallejo »

gracias Daniel, solo por curiosidad, en red esto dara problemas? ya que dos o mas usuarios estan usando esta tabla

att
Eduardo
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Tdolphin Ejemplo ABM.

Post by Daniel Garcia-Gil »

evallejo wrote:gracias Daniel, solo por curiosidad, en red esto dara problemas? ya que dos o mas usuarios estan usando esta tabla

att
Eduardo
no
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
José Ríos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

problemas al usar seek con datos numericos

Post by José Ríos »

Buen dia.

Siguiendo con muis pruebas en tdophin me encontre con un caso en que el metodo seek con datos numericos no encuentra numeros de mas de un digito.

Por ejemplo si tengo dados de alta los registros:

Numero Nombre
1 A
3 B
11 C

Y hago el siguiente query y despues 3 busquedas seek cobre el query

Code: Select all

                DEFINE QUERY oQry "SELECT * FROM vendedores order by numero" 

               // y despues despues hago la siguientes busquedas:

                
                If oQry:seek(2, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif

                If oQry:seek(1, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif

                 If oQry:seek(11, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif
 
En los dos _ (numero =1 y numero=2 ), el resultado de la busqueda es exitoso, pero cuando numero=11 el registro no es encontrado.

Haciendo pruebas con find el resultado de la busqueda para numero=11 es correcto.

¿Esto significa que seek no debe usarse con campos numericos?.

Saludos.

Jose Rios.
Post Reply