FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Resta de columnas en xBrwose
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Resta de columnas en xBrwose
Posted: 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.
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 01:04 PM
Hola Jose:
Puedes hacer directamente que la columna que muestre sea calculada
Code (fw): Select all Collapse
@ 聽1, 0.50 XBROWSE oLbx ALIAS "DATA" COLUMNS "data1","data2","valor1","valor2","valor3","valor4","valor1 - valor2" SIZE 285, 95 OF oDlg
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 01: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 (fw): Select all Collapse
 聽 聽 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"




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.
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 03: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 (fw): Select all Collapse
 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.
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 03: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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 03:25 PM

when you provide COLUMNS names, please remove AUTOCOLS

Regards



G. N. Rao.

Hyderabad, India
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: Tue Nov 29, 2022 05: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.
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: 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.
Posts: 114
Joined: Fri Nov 24, 2006 09:03 PM
Re: Resta de columnas en xBrwose
Posted: 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.

Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: 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.
Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Resta de columnas en xBrwose
Posted: Wed Nov 30, 2022 04: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

Jes煤s Mar铆n
deumare@gmail.com
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: 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.
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: Resta de columnas en xBrwose
Posted: Wed Nov 30, 2022 08:53 PM
Jose:


Code (fw): Select all Collapse
#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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Resta de columnas en xBrwose
Posted: Thu Dec 01, 2022 02:04 AM
Cgallegoa wrote:Jose:


Code (fw): Select all Collapse
#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.
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Resta de columnas en xBrwose
Posted: Thu Dec 01, 2022 03: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

Continue the discussion