Obtener el Saldo en un formulario de Access

Revisando en TodoExpertos, encontre una solución para este tema que es:

Para una tabla llamada Kardex, con los campos idmov (numero), Ingreso, Salida y Saldo (monedas), poner en los eventos Despues de Actualizar el siguiente código:

Docmd. Runcommand accmdsaverecord

Saldo=nz(dsum("ingreso","cardex","idmov<=" & me.idmov &""))-nz(Dsum("salida","kardez","idmov<=" & me.idmov & ""))

Esto funciona perfectamente, pero en mi caso, en esa misma tabla hay un campo Factura (texto) que contiene el número de la Factura que se paga. Yo quiero que el Saldo se calcule teniendo en cuenta ese campo Factura, o sea, quiero saber cuando hago un pago parcial de una Factura el Saldo pero para las entradas que contengan el mismo numero de factura.

Ejemplo

IdMov Factura Monto de Factura Ingreso Salida Saldo

1            F-001           $500.00           $300.00   $0.00    $200.00   

2            F-002           $800.00           $800.00   $0.00    $800.00

3            F-001           $500.00           $200.00   $0.00    $   0.00

3 Respuestas

Respuesta

I. Hola Compañeros.

Miguel, aunque el experto Enrique Feijóo ya le ha respondido me gustaría poder adjuntarle la información que de nuevo vi ayer por la noche para intentar responderle si durante el día de hoy no recibía mensajes.

Dentro de mi ignorancia podría utilizar la función 'SUMIFS', aunque entiendo que la opción que le propuso Enrique Feijóo será un sistema más óptimo.

https://www.datacamp.com/es/tutorial/sumifs 

https://www.reddit.com/r/excel/comments/18s1v44/balance_after_bills_spreadsheet_formula/?tl=es-es

https://www.youtube.com/shorts/X5l3-1ql84U 


Disculpe como siempre por la cantidad de lectura y responderle sin ser conocedor. Ánimo.


https://www.reddit.com/r/excel/comments/1an0uez/how_do_i_get_my_table_to_calculate_outstanding/

https://www-fm--magazine-com.translate.goog/news/2023/sep/excel-how-to-calculate-cumulative-balances/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-exceltip-com.translate.goog/excel-pivot-tables/adding-a-running-balance-calculation-column.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-investopedia-com.translate.goog/ask/answers/040315/how-do-you-calculate-present-value-excel.asp?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-thebricks-com.translate.goog/resources/how-to-keep-track-of-customer-payments-in-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://chandoo-org.translate.goog/wp/invoice-numbers/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www.reddit.com/r/excel/comments/neam4m/i_want_a_cell_to_automatically_compute_my/?tl=es-es

https://www-excelfox-com.translate.goog/forum/showthread.php/1574-Find-The-Invoice-Shortfall-Balancing-Amount-Using-Excel-Formula?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://other--levels-com.translate.goog/blogs/excel-dashboard-tips-tricks/auto-calculating-invoice-templates-in-microsoft-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.reddit.com/r/excel/comments/153dblr/excel_sheet_for_running_total_of_balance_paid_and/

https://www-chandoo-org.translate.goog/forum/threads/invoice-balance-formula.18161/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc#post-109628

https://www-excelfox-com.translate.goog/forum/showthread.php/1574-Find-The-Invoice-Shortfall-Balancing-Amount-Using-Excel-Formula?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-experts--exchange-com.translate.goog/questions/27595791/How-to-record-payments-against-invoices-in-Excel-No-VBA-Yes-UDF.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc&_x_tr_hist=true

https://www-excelforum-com.translate.goog/excel-formulas-and-functions/1294344-excel-formula-to-sum-and-count-unpaid-invoices.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-lido-app.translate.goog/blog/how-to-extract-invoice-data-into-excel-and-google-sheets?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc&salesforce_uuid=%257B%2522path%2522%253A%2522https%253A%252F%252Fwww-lido-app.translate.goog%252Fblog%252Fhow-to-extract-invoice-data-into-excel-and-google-sheets%2522%252C%2522posthogDistinctId%2522%253A%2522019e94a0-98a0-79a8-a36c-82f12046872d%2522%257D

https://www.youtube.com/watch?v=i-9ugC2sjGc

https://www-financialaha-com.translate.goog/essentials-spreadsheet-templates/invoicing-billing/invoice-tracker/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-mrexcel-com.translate.goog/board/threads/vba-script-to-calculate-the-balance.1194222/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://www-vertex42-com.translate.goog/blog/excel-formulas/create-a-running-balance-in-excel.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

https://stackoverflow.com/questions/7102158/invoice-list-running-balance-based-on-date-and-account

https://www.youtube.com/watch?v=ApmDzuaXVas

https://www.youtube.com/watch?v=zLdVpkfPsFw 

Respuesta
2

Para lograr que el saldo acumulado se calcule de forma independiente para cada factura, lo único que debemos hacer es añadir un criterio adicional a las funciones DSum (SumaD).

Como el campo Factura es de tipo texto, debemos envolver el valor del formulario entre comillas simples (').

Aquí tienes la solución explicada y el código listo para copiar.

DoCmd. RunCommand acCmdSaveRecord
Me.Saldo = Nz(DSum("Ingreso", "Kardex", "Factura = '" & Me.Factura & "' And idmov <= " & Me.idmov), 0) - _
           Nz(DSum("Salida", "Kardex", "Factura = '" & Me.Factura & "' And idmov <= " & Me.idmov), 0)

Si lo que buscas es que el campo Saldo muestre lo que falta por pagar de la factura (como en tu ejemplo), la fórmula ideal debería restar los ingresos del Monto de la Factura:

' Opción alternativa si buscas el saldo pendiente de la factura:
Me.Saldo = Me.Monto_de_Factura - Nz(DSum("Ingreso", "Kardex", "Factura = '" & Me.Factura & "' And idmov <= " & Me.idmov), 0)

(Nota: Ajusta Me.Monto_de_Factura al nombre real de tu campo si decides usar esta lógica).

Respuesta
1

Lo publicado devuelve el saldo de todos los movimientos iguales o inferiores al seleccionado, simula una suma continua (realmente dos y presenta la diferencia).

Se le puede añadir (en ambas sumas) una condición más: el numero de factura, solo se necesita una nueva igualdad

Lo actual:

"idmov<=" & me.idmov

La nueva igualdad podría ser algo como:

"Factura = '" & me.factura & "'"

Las dos se unirán con un AND así para formar la nueva condición:

"Factura = '" & Me.Factura & "' And  idmov >= " & me.idmov

El resultado devuelto: el saldo de registros que cumplan ambas condiciones.

Si se desea utilizar en un formulario continuo, quizás sea más eficiente crear una consulta y utilizarla como origen de datos del formulario.

Buenos días Enrique. Disculpa que te vuelva a molestar pero realmente no me esta funcionando lo que apliqué de Obtener el Saldo en un Formulario. Funciona para el registro en que estamos posicionados pero no calcula el saldo para el siguiente registro. Me explico mejor:

Yo estoy trabajando en un Sistema de Cobros y Pagos. Tengo una tabla de Facturas con sus códigos como idFactura (campo de Texto) en mi caso FS-001 y el monto de la Factura al que le llamaremos Monto (campo moneda). Tengo otra tabla llamada Pagos con los siguientes campos, idPago (campo Texto),  idFactura (campo Texto), ImporteFactura (Moneda), A_Pagar (moneda) y Saldo (moneda). El idPago lo escribe el usuario, al igual que el idFactura para referirse a la Factura a Pagar, el programa toma el valor Monto de la Tabla Factura y lo muestra (no editable),  el campo a pagar es que el usuario da para el pago de la Factura. Cuando se paga completa el Saldo debe dar cero. Cuando el pago es parcial, o sea, que supongamos lo siguiente:

Factura  FS-001   Monto Factura  $500.00   A_Pagar  $300.00    Saldo: $200.00

El usuario sigue introduciendo pagos, y cuando vuelve a introducir el pago de la factura FS-001, debe salirle el Monto Factura = $500.00 y el saldo de la misma que debe ser $200.00 para que vea que le faltan por pagar $200.00 para pagar la Factura completa.

No se si me he explicado bien, si es así me lo dice para aclarar lo que se necesite. Si es tan amable y me pudiera ayudar con esto, se lo agradecería. Saludos cordiales

No veo claro el escenario.

Si se tiene una factura y contra ella una serie de aportaciones (pagos), el saldo debería obtenerse sumando las diferentes aportaciones y restando esta suma al monto de la factura.

En una introducción de datos de ese tipo, lo normal es que el ID de pago se calcule en base a sus anteriores o (sea un numero o un mes o ...), lo único que interesa es el ID de la factura que nos permitirá obtener en la tabla PAGOS la suma de sus aportaciones y de la tabla facturas el importe de la misma y con ello el saldo restante.

No suele guardarse el saldo registro a registro, se aconseja obtenerlo cada vez que se necesite consultar (para ello es útil la función de dominio DSUM), un ejemplo de ello podría quedar así:

SALDO: DLookup ("Monto", "Facturas","idFactura = '"  & aqui el Id de la factura & "'")) - DSum ("A_Pagar ", "Pagos","idFactura = '"  & aqui el Id de la factura & "'")) 

Este valor se `puede calcular al inicio de la entrada de datos y aplicar como valor predeterminado e incluso utilizar para evitar importes superiores al saldo restante (esto es optativo).
Para evitar repeticiones seria interesante aplicar un índice (por ejemplo que no existan dos registros con la misma factura y fecha).

Desde la distancia es lo que puedo aportar con los datos publicados.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas