Resta de columnas en xBrwose

Resta de columnas en xBrwose

Postby JoseAlvarez » Mon Nov 28, 2022 11:10 pm

Saludos a todos, colegas y amigos.

En un xBrowse, necesito que la columna 8, en cada fila se muestre el resultado de la resta de la columna 6 menos la 7.

¿Como hacerlo?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby cmsoft » Tue Nov 29, 2022 1:04 pm

Hola Jose:
Puedes hacer directamente que la columna que muestre sea calculada
Code: Select all  Expand view  RUN

@  1, 0.50 XBROWSE oLbx ALIAS "DATA" COLUMNS "data1","data2","valor1","valor2","valor3","valor4","valor1 - valor2" SIZE 285, 95 OF oDlg
 
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Tue Nov 29, 2022 1:42 pm

Hola César. como estas?

Cuando lo hago asi, me resta el valor nominal de la columna y no el valor de su contenido. Me explico:
Code: Select all  Expand view  RUN
    cT_Clientes:= _cPrefijo+'_clientes'
    cT_Facturas:= _cPrefijo+'_facturas'
    cT_Pagos   := _cPrefijo+'_pagos'

    cQuery := "SELECT "
    cQuery += "Cli.rif_cliente, "
    cQuery += "Cli.razon_social_cliente, "
    cQuery += "Fac.numero_documento, "
    cQuery += "Fac.fecha_documento, "
    cQuery += "Fac.fecha_vencimiento, "
    dHoy:=subs(dToc(_dFechaDeHoy),7,4)+"/"+subs(dToc(_dFechaDeHoy),4,2)+"/"+subs(dToc(_dFechaDeHoy),1,2)
    cQuery += "DATEDIFF('"+dHoy+"', Fac.fecha_vencimiento),"
    cQuery += "Fac.monto, "
    cQuery += "(SELECT SUM(monto_pago) FROM "+cT_Pagos+" WHERE codigo_cliente=Cli.codigo_cliente AND numero_documento=Fac.numero_documento) AS nPagos , "
    cQuery += "Fac.concepto, "
    cQuery += "Cli.codigo_cliente, "
    cQuery += "Fac.codigo_cliente "
    cQuery += "FROM "
    cQuery += cT_Clientes + " AS Cli , "
    cQuery += cT_Facturas + " AS Fac   "
    cQuery += "WHERE Fac.codigo_cliente = Cli.codigo_cliente  ;"

  TRY
      oFacturas:=_oSqlConex:Query( cQuery )
  CATCH
      Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
      return .f.
  END TRY

    *****************************************************************************************************************************************

  Define cursor oCursorBar       resource 'manito'
  Define cursor oCursorIndicador resource 'Indicador'
  Define Font   oFHeadBrw Name "Segoe UI SemiBold" Size 0, -14

  Define Dialog oDlg_Facturas resource "oDlg_Facturas" title 'Gestión de Documentos Por Cobrar'
       oDlg_Facturas:lHelpIcon:=.f.

         Redefine Image oSeekImage Resource "Buscar" id 15 of oDlg_Facturas

         Redefine get oGetSeek Var cSeek Id 11  of oDlg_Facturas on change (cSeek:=oGetSeek:GetText() )
         oGetSeek:SetFont(_oFontGets)
         oGetSeek:SetColorFocus( CLR_YELLOW )
         
         Redefine xBrowse oBrwFacturas Id 4007  DATASOURCE oFacturas AUTOCOLS AUTOSORT ;
                                                                     COLUMNS 1, 2, 3, 4, 5, 6, 7, 8, (7-8), 9, 10, 1  ;
                                          HEADERS      _cIdEmpresa, "Cliente", "N# Doc. ","Emisión", "Vencto.", "Dias Vcdo.", ;
                                                       "Monto "+_cSignoMoneda , "Pagos", "Saldo Doc.", "Concepto"

 



Image


Como puedes ver, las columnas a restar son la 8 menos la 7 y lo que muestra es -1 (8 - 7 = -1)

¿Cual es la manera correcta para que funcione? ¿Tendra que ver que la columna 8 es el resultado de un subconsulta y no el campo de una tabla?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Tue Nov 29, 2022 3:19 pm

Cesar, hice lo que me indicaste. Sustitui el valor numerico de las columnas por su nombre, esta vez me da error al momento de aplicar la resta.

Code: Select all  Expand view  RUN
Redefine xBrowse oBrwFacturas Id 4007  DATASOURCE oFacturas AUTOCOLS AUTOSORT COLUMNS "rif_cliente", "razon_social_cliente", "numero_documento""fecha_documento", "fecha_vencimiento","nDiasVencido", "monto", "nPagos", "monto-nPagos"


y me da error 9012. Si quita la parte de la resta "monto-nPagos" no da error.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby nageswaragunupudi » Tue Nov 29, 2022 3:22 pm

Not 7-8
FIELD NAME OF 7 - FIELD NAME OF 8

Eg:
COLUMNS "NAME", "QTY", "RATE", "QTY*RATE" ;
HEADERS "ClientName", "Quantity", "Price", "Amount"

Also it is not a good practice to provide numbers in COLUMNS clause. Provide field names.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Resta de columnas en xBrwose

Postby nageswaragunupudi » Tue Nov 29, 2022 3:25 pm

when you provide COLUMNS names, please remove AUTOCOLS
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Tue Nov 29, 2022 5:46 pm

Thank you Mr. Rao

I did what you suggested, but the error persists

Eg:
COLUMNS "NAME", "QTY", "RATE", "QTY*RATE" ;

Taking your example, it does not perform the operation. the columns "NAME", "QTY", "RATE" show their value well, but placing "QTY*RATE" generates an error.

in my case RATE is the value of a subquery, not a field of a table. It must be because of that?


Gracias mr Rao

Hice lo que me suguirió, pero el error persiste

Eg:
COLUMNS "NAME", "QTY", "RATE", "QTY*RATE" ;

Tomando su ejemplo, no realiza la operacion. las columnas "NAME", "QTY", "RATE" muestran bien su valor, pero al colocar "QTY*RATE" genera error.

en mi caso, RATE es el valor de una subconsulta, no es un campo de una tabla. ¿Sera por eso?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Tue Nov 29, 2022 11:09 pm

Para mr. Rao y todos los expertos en xbrwose, creo que la clase tiene un bug.

No permite operaciones con columnas creadas desde subconsultas o "al vuelo".

Si tengo una columna creada desde un campo real de una tabla con un valor digamos X, y otra columna creada "al vuelo" con un valor Y, no permite hacer una operacion en el browse de tipo "X * Y" , dara error.

Y si la columna "al vuelo" tiene valor 0 y deseo poner una operacion directa de suma, resta o multiplicacion con otra columa que tenga valor positivo, siempre arroja 0 como resultado. Quiero decir, si la columna real es 800 y la creada al vuelo tiene valor de 0, la resta deberia ser 800 - 0 = 800, pero muestra 0.

Si consultamos los valores con msginfo(oQuery:columna) todo esta bien.

Los problemas se presentan al querer mostrarlos en el xBrowse

Quizas este equivocado. Por eso dejo la inquietud.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby jacgsoft » Tue Nov 29, 2022 11:46 pm

En tu select tienes la siguiente columna "DATEDIFF('"+dHoy+"', Fac.fecha_vencimiento)", agrégale lo siguiente:


"DATEDIFF('"+dHoy+"', Fac.fecha_vencimiento) AS DiasVcto,"

Luego en la columna correspondiente del Xbrowse pones el nombre de esta columna que contiene la diferencia de días "DiasVcto".

Los dias de vencimiento lo tienes que calcular en tu Query (Sentencia Select) y NO hacer cálculos con las columnas del Xbrowse.
User avatar
jacgsoft
 
Posts: 105
Joined: Fri Nov 24, 2006 9:03 pm
Location: Lima - Peru

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Tue Nov 29, 2022 11:58 pm

Hola amigo, gracias por responder.

No es esa la columna que me da error, es la que tiene la subconsulta, "Select sum(...." es alli donde esta el problema. Con AS y sin AS se presenta el problema.

Si lees el hilo completo, el mismo Mr rao me dice que puedo hacer el calculo al momento de definir el browse usando las columas que vienen de la consulta.

Pero no esta funcionando con las columnas creadas al vuelo.

Saludos.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby JESUS MARIN » Wed Nov 30, 2022 4:50 am

Buenas Jose Alvarez

A mi me funcionan las operaciones de suma, resta, etc.... , incluso si pongo formulas o funciones. Y al vuelo, como tu dices.
Bien es cierto que siempre utilizo arrays.
Te pongo un video de ejemplo

Image
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Wed Nov 30, 2022 11:02 am

Hola jesus, saludos,

Sí, con arrays funciona perfecto. No hay problemas.
Pero quiero eliminar el uso de arreglos por lo engorroso que resulta.

Por los momentos no tuve mas remedio que regresar a elllos, pero no es mi idea. Lo que quiero es ahorrar tiempo y codigo y tener un codigo mas legible y entendible.

Le dejó la inquietud a los expertos.

Gracias por tu comentario¡
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby Cgallegoa » Wed Nov 30, 2022 8:53 pm

Jose:

Image

Code: Select all  Expand view  RUN
#include "fivewin.ch"
#include "xBrowse.ch"


Function Inicio()
   LOCAL cServer   := "127.0.0.1"
   LOCAL cUser     := "tuuser", cDBName := "basedatosnnn"
   LOCAL cPassword := "tupassw"
   LOCAL oServer3, oRs, cQuery1
   LOCAL oDlg, oBrw
   
   SET DATE FORMAT TO "dd-mm-yyyy"
   
   MsgRun( "Conectando con tuservidor.com...", "Pruebas...",;
           {|oDlgx| oServer3 := Maria_Connect( cServer, cDBName, cUser, cPassword ) } )
   
   TEXT INTO cQuery1
       SELECT vta.codigopro,vta.numdoc,vta.fechadoc,vta.fechapag,vta.totaldoc
              FROM vta_cob AS vta
                    WHERE fechapag <> '' AND marca = 'FC'
                    ORDER BY numdoc
   ENDTEXT
   
   oRs := oServer3:RowSet( cQuery1 )
   
   DEFINE DIALOG oDlg FROM 10,10 TO 400,520 PIXEL
   
      @ 10,10 XBROWSE oBrw OF oDlg SIZE 235,170 PIXEL ;
              DATASOURCE oRs ;
                        COLUMNS "numdoc", "fechadoc", "fechapag", "Dias_Dif",  "totaldoc" ;
                        HEADERS "Documento", "Fecha Emisión", "Fecha Pago", "Días Dif.",  "Total Doc" ;
                      NOBORDER CELL LINES AUTOSORT
   
       // *** Aquí se asigna valor al campo calculado:
        oBrw:oCol("Días Dif."):bEditValue    := {|| oRs:fechapag - oRs:fechadoc }
   
      oBrw:CreateFromCode()
      oDlg:oClient := oBrw
   
   ACTIVATE DIALOG oDlg CENTERED
   oServer3:Close()

Return(NIL)
//-------------
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
Cgallegoa
 
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: Resta de columnas en xBrwose

Postby JoseAlvarez » Thu Dec 01, 2022 2:04 am

Cgallegoa wrote:Jose:

Image

Code: Select all  Expand view  RUN
#include "fivewin.ch"
#include "xBrowse.ch"


Function Inicio()
   LOCAL cServer   := "127.0.0.1"
   LOCAL cUser     := "tuuser", cDBName := "basedatosnnn"
   LOCAL cPassword := "tupassw"
   LOCAL oServer3, oRs, cQuery1
   LOCAL oDlg, oBrw
   
   SET DATE FORMAT TO "dd-mm-yyyy"
   
   MsgRun( "Conectando con tuservidor.com...", "Pruebas...",;
           {|oDlgx| oServer3 := Maria_Connect( cServer, cDBName, cUser, cPassword ) } )
   
   TEXT INTO cQuery1
       SELECT vta.codigopro,vta.numdoc,vta.fechadoc,vta.fechapag,vta.totaldoc
              FROM vta_cob AS vta
                    WHERE fechapag <> '' AND marca = 'FC'
                    ORDER BY numdoc
   ENDTEXT
   
   oRs := oServer3:RowSet( cQuery1 )
   
   DEFINE DIALOG oDlg FROM 10,10 TO 400,520 PIXEL
   
      @ 10,10 XBROWSE oBrw OF oDlg SIZE 235,170 PIXEL ;
              DATASOURCE oRs ;
                        COLUMNS "numdoc", "fechadoc", "fechapag", "Dias_Dif",  "totaldoc" ;
                        HEADERS "Documento", "Fecha Emisión", "Fecha Pago", "Días Dif.",  "Total Doc" ;
                      NOBORDER CELL LINES AUTOSORT
   
       // *** Aquí se asigna valor al campo calculado:
        oBrw:oCol("Días Dif."):bEditValue    := {|| oRs:fechapag - oRs:fechadoc }
   
      oBrw:CreateFromCode()
      oDlg:oClient := oBrw
   
   ACTIVATE DIALOG oDlg CENTERED
   oServer3:Close()

Return(NIL)
//-------------



Gracias amigo, ya estoy probando, aun no logro echarlo a andar, estare avisando

Agradecido por la ayuda
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Resta de columnas en xBrwose

Postby Willi Quintana » Thu Dec 01, 2022 3:25 pm

MI estimado, prueba asi:

cQuery := "SELECT "
cQuery += "Cli.rif_cliente, "
cQuery += "Cli.razon_social_cliente, "
cQuery += "Fac.numero_documento, "
cQuery += "Fac.fecha_documento, "
cQuery += "Fac.fecha_vencimiento, "
dHoy:=subs(dToc(_dFechaDeHoy),7,4)+"/"+subs(dToc(_dFechaDeHoy),4,2)+"/"+subs(dToc(_dFechaDeHoy),1,2)
cQuery += "DATEDIFF('"+dHoy+"', Fac.fecha_vencimiento),"
cQuery += "Fac.monto, "
cQuery += "(SELECT SUM(monto_pago) FROM "+cT_Pagos+" WHERE codigo_cliente=Cli.codigo_cliente AND numero_documento=Fac.numero_documento) AS nPagos , "
cQuery += Fac_monto - nPagos AS saldo, // aqui ya realizas la resta *****************************************************************************************************************
cQuery += "Fac.concepto, "
cQuery += "Cli.codigo_cliente, "
cQuery += "Fac.codigo_cliente "
cQuery += "FROM "
cQuery += cT_Clientes + " AS Cli , "
cQuery += cT_Facturas + " AS Fac "
cQuery += "WHERE Fac.codigo_cliente = Cli.codigo_cliente ;"

TRY
oFacturas:=_oSqlConex:Query( cQuery )
CATCH
Fnct_MsgErrorBD("NoMySql" , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
return .f.
END TRY

xbrowse(oFacturas) // aqui ves como sale el resultado del query
User avatar
Willi Quintana
 
Posts: 1020
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 37 guests