Restar dos registros o valores del mismo campo

Soy novato en access y se que aquí me podrían ayudar mucho. Quisiera saber como puedo restar 2 registros (valores) de un mismo campo. Por ejemplo, tengo una tabla de detalles de factura, y quisiera restar el SUBTOTAL de la factura No 6 al SUBTOTAL de la factura no. 13, por decir. Muchas gracias de antemano y siento decirlo pero me urge saberlo ya que no puedo avanzar por más que le busco.

3 respuestas

Respuesta
1
Te paso un código de VB para que lo insertes en un botón del formulario, seguramente habrá formas más curiosas de hacerlo, pero esta funciona.
Debes crear un botón en el formulario, cuando empiece el asistente, le das a finalizar, luego en propiedades del botón, Eventos, Al HacerClick, ... borras las los lineas que hay
Screen... y la de abajo Docm...
Donde estaba esto, lo sustituyes por
'Dimensiono las variables que necesito
Dim Db As Database
Dim Sql As String
Dim RsTabla As Recordset
Dim ValCampo As Currency
Dim CampoA As Currency
Dim CampoB As Currency
Dim NumFactura As Integer
Dim Resultado As Currency
Dim PrimeraFac As String
Dim SegundaFac As String
Set Db = CurrentDb 'Indico que la base de datos es la actual
'Pido las facturas que se quieren restar
PrimeraFac = InputBox("Introduce el primer campo a restar")
SegundaFac = InputBox("Introduce el segundo registro a restar")
'Escribo la sentencia SQL de selección pero que solo me muestre los registros que quiero
'Esto lo puedes hacer mediante el asistente de consultas, haces una consulta normal de la tabla
'Luego pones dos criterios de filtrado (por ejemplo 1 or 2) en el campo criterios de busqueda
'de la consulta, bajo el campo de IdFactura o NumFactura, etc... Y finalmente, arriba a la izquierda
'seleccionas vista SQL, haces un copiar y lo pegas al editor de vb, te saldrá algo así
'SELECT TFac.idFac, TFac.subtotal _
FROM TFac _
WHERE (((TFac.idFac)=1)) OR (((TFac.idFac)=2));
'Le pones el guion bajo al final de cada frases (separado por un espacio) y el apostrofe delante
'del SELECT
'Luego solo tienes que cargarte los parentesis y sustituir el 1 y el 2 por las variables, te
'tiene que quedar algo así
Sql = "SELECT TFac.idFac, TFac.subtotal" _
+ " FROM TFac" _
+ " WHERE TFac.idFac=" + PrimeraFac + " OR TFac.IdFac=" + SegundaFac + ";"
Set RsTabla = Db.OpenRecordset(Sql) 'Coloco el resultado de la consulta dentro del RecordSet
While Not RsTabla.EOF 'Si hay valores en la consulta, hago lo que sigue
'Coloco en contenido del campo de la tabla dentro de una variable
ValCampo = RsTabla.Fields("subtotal").Value 'Valor del Subtotal
NumFactura = RsTabla.Fields("idFactura").Value 'Valor del Numero de Factura
If NumFactura = PrimeraFac Then 'Si el numero de factura, corresponde con el primero que
'Le he pedido, le doy valor al campoA
CampoA = ValCampo
Else 'Si no coincide con la primera factura que le he pedido, supongo que es la
'segunda, ya que solo he pedido 2 y le doy valor al CampoB
CampoB = ValCampo
End If 'Cierro el IF OBLIGATORIO SI NO DA ERROR
RsTabla. MoveNext 'Voy al siguiente registro de la tabla, si es la segunda vez que pasa por
'Aqui, detectará que esta al final e ira directamente al WEND
Wend
'Ya ha llegado al final de la tabla
Resultado = (CampoA - CampoB) 'Hago la operación
MsgBox Resultado 'Da el resultado en un mensaje al usuario
'Si quieres que el resultado, lo muestre en el formulario, debes insertar un CuadroDeTexo
'Y aquí, escribir
'Me.Texto1.Value = Resultado 'Donde Texto1 es el nombre del campo
A ver si te funciona, si no, intento solucionarlo
Se me está ocurriendo otra forma de hacerlo, bastante más fácil.
Creas una consulta de selección (normal) desde la tabla Facturas con los campos de NumFactura y SubTotal, en criterios de NumFactura, pones [PrimeraFactura], luego creas otra igual pero pones [SegundaFactura], luego creas una tercera, como origen, pones las dos consultas que has creado anteriormente, Insertas los dos subtotales (delante de cada subtotal, pones Exp1: y Exp2: de forma que quede algo así Exp1:Subtotal.
Luego en un campo nuevo pones Resultado:[Exp1]-[Exp2]. Cuándo ejecutes la consulta, te pedirá el la PrimeraFactura y luego la SegundaFactura en un Imputbox, colocas los números de factura de los que quieres restar los subtotales y te da el resultado.
Creo que este sistema es más fácil y té dará menos dolores de cabeza, luego ya tienes el resultado en una consulta, por lo que puedes hacer con el lo que quieras.
No te puedes imaginar como te agradezco la ayuda que me acabas de brindar, la sugerencia que me diste (la segunda) funciona perfectamente. Muchas gracias por tu tiempo. Un gran y afectuoso saludo
Respuesta
1
Pregunto...
¿Las dos facturas corresponden al mismo cliente?
En caso de ser así, podrías filtrar por código de cliente, esto te permitiría más opciones en las consultas.
Habría otra posibilidad, si es habitual el hecho de sumar o restar importes de otras facturas, en la tabla "detalles de factura" podrías incluir un campo nuevo "Modificaciones" y otro para suma o resta para poder introducir el valor que desees sumar o restar al importe de la factura correspondiente. En la consulta de facturas solo tendrías que aplicar la fórmula correspondiente...
Si el valor es "0" aplica el total, si es suma o resta, entonces calcula.
Hola. Muchas gracias por tu ayuda. Efectivamente, las 2 facturas son del mismo cliente. Mira, te contare un poco más. Al cliente se le emite una factura mensual, si se acaba el trabajo realizado en ese mes, solo se emite una factura, pero si el trabajo sigue durante varios meses cada mes se le emite una factura, podrían durante 1 0 2 años emitiendole facturas cada mes. Todo esto es por una determinada obra. Si al cliente se le trabajan 2 o más obras se le hace exactamente igual, se le emiten facturas mensuales por obra, y así. Yo a pesar de ser un verdadero novato en access, he hecho varias tablas, relaciones, consultas que he podido y un poco más. El problema radica en que cuando se emite la factura de este mes del cliente para una obra, a esta ultima hay que restarle la cantidad de la factura del mes anterior del mismo cliente y la misma obra, lo que pasa es que según entiendo la cantidad de las facturas se van acumulando cada vez, y cuando se emite la ultima se le resta la cantidad de la anterior, y así. Al no saber programar ni código lo he estado intentando por una consulta con criterios, pero no puedo, y por eso recurro a ustedes. La sugerencia que me das no la capto bien, podrías ser un poco más especifico, ¿por favor?. De nuevo muchas gracias por tu tiempo.
A lo que me refiero es a que puedes crear en la tabla base de facturas emitidas tres nuevos campos:
1-. Para poder introducir un valor determinado (imagino que lo querrás con tipo moneda) a mano con el nombre importe_diferencia
2-. Para poder activar/desactivar (campo Si/No) y que sume
3-. Para poder activar/desactivar (campo Si/No) y que reste
En la consulta correspondiente, puedes incluir el valor que desees en el campo 1, si activas la casilla 2 el importe que has puesto se sumará al importe de la factura, si activas la casilla 3 el importe que has puesto se restará al importe de la factura, si no activas ninguna casilla dejará el valor de la factura como estaba.
El sistema es una tanto rudimentario, pero funciona, yo no domino la programación en VBA, imagino que habrá personas que con código lo harán más fácilmente.
Hola. Gracias por tu sugerencia. Probé lo que me indicaste, cree los campos, al principio me lie un poco pero al probar y probar le encontré el sabor y me quedo bien. Como tu dices, se ve un poco rudimentario, pero lo principal es que funciona. Muchas gracias por tu tiempo y paciencia, pero sobre todo tu ayuda invaluable. Un cordial y afectuoso saludo.
Respuesta
1
Existen estándares bajos la cuales nos regimos en cualquier área, con la finalidad de facilitar el trabajo y el entendimiento de otras personas conocedoras de la materia.
Para este tipo de operaciones, (entre facturas) lo más fácil es que tuvieran algún campo en común, como código de cliente, entonces pudieras recopilar (o filtrar) los subtotales de Todas las facturas de dicho cliente, Luego hacer las operaciones necesarias. Ejemplo:
Cliente Doc Nro Subtotal
0001 FACT 00124 1350,00
0001 PAGO 1250 -350,00
En este caso puedes hacer una suma (+ y -) del campo subtotal y te daría el saldo real de la cuenta.
Sin embargo,
Para ese tipo de operaciones a la que te refieres, la cual no tiene un diseño de sistema bien definido, tendrías que hacer el calculo a nivel de programación, es decir
Buscar el registro de la factura Nro 6, obtener el monto Subtotal, luego buscar el registro de la factura 13, para luego restarla y obtener el valor que deseas.
Como una critica constructiva, te recomendaría documentarte acerca de los principios de análisis y diseño de sistemas, para facilitarte las cosas, antes de empezar a escribir código de programación.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas