Resta de columnas en xBrwose
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Resta de columnas en xBrwose
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?
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Resta de columnas en xBrwose
Hola Jose:
Puedes hacer directamente que la columna que muestre sea calculada
Puedes hacer directamente que la columna que muestre sea calculada
Code: Select all | Expand
@ 1, 0.50 XBROWSE oLbx ALIAS "DATA" COLUMNS "data1","data2","valor1","valor2","valor3","valor4","valor1 - valor2" SIZE 285, 95 OF oDlg
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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:
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?
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
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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.
y me da error 9012. Si quita la parte de la resta "monto-nPagos" no da error.
Code: Select all | Expand
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"
"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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Resta de columnas en xBrwose
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.
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
G. N. Rao.
Hyderabad, India
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Resta de columnas en xBrwose
when you provide COLUMNS names, please remove AUTOCOLS
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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?
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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.
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Resta de columnas en xBrwose
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.
"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.
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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.
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
-
- Posts: 176
- Joined: Wed Jan 02, 2019 8:36 am
Re: Resta de columnas en xBrwose
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
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
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
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¡
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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Resta de columnas en xBrwose
Jose:
Code: Select all | Expand
#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 ***
Carlos Gallego
*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Resta de columnas en xBrwose
Cgallegoa wrote:Jose:
Code: Select all | Expand
#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.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- Willi Quintana
- Posts: 1023
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Resta de columnas en xBrwose
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
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