GeneXus - Anular Factura

   
Vista:

Anular Factura

Publicado por Gerdson (46 intervenciones) el 16/11/2010 22:20:49
Buenas foro, tengo una consulta referente a un proceso que quiero hacer para anular una factura.

Tengo un campo de VentaEstado que es el que me dice si la factura esta Procesada o Anulada.

Al momento de realizar una factura obviamente el inventario de ese producto que se vende disminuye, lo hago con Subtract. Ahora si por alguna razon es necesario anular la factura ya sea porque no era el producto correcto que se vendio o por alguna devolucion quiero que al cambiar el Estado de la Factura a Anulada, se aumente el inventario de los prodyuctos que contiene ese factura.

Les dejo el codigo de la realizacion de la Venta (cuando disminuye inventario):
Subtract(VentaCantidad,ArticuloCantidad) If After(Confirm);

Aqui de las maneras que he probado hacer lo antes mencionado al cambiar el estado a Anulado, son varias:
1.- Add(VentaCantidad,ArticuloCantidad) If ((Update) .And. (VentaEstado<>'P'));
2.- Add(VentaCantidad,ArticuloCantidad) If ((Update) .And. (VentaEstado='A'));
3.- Add(VentaCantidad,ArticuloCantidad) If (&Mode='UPD' .And. (VentaEstado='A'));
4.- Add(VentaCantidad,ArticuloCantidad) If ((Update) .And. (VentaEstado='A') .And. After(Confirm));
5.- Add(VentaCantidad,ArticuloCantidad) If ((Update) .And. (VentaEstado='A') .And. After(TRN));

De ninguna de las 5 formas he logrado hacer que al cambiar el estado a Anulada se regrese la cantidad vendida a inventario.

Gracias de antemano por su ayuda.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Anular Factura

Publicado por Julio (301 intervenciones) el 20/11/2010 01:14:08
Hola amigo, priemero, debo suponer que para la administración de facturas tendrás una grilla que muestre los datos de cabecera, también habrán algunos botones entre los que seguramente habrá uno ritulado "Crear", si tu App. la tienes diseñada de esta forma solo tendrías que crear un botón rotulado "Anular" y lo que este botón haría es llamar a un Prc al que se le envía el Id. de la factura y este se encargue de hacer la reposición de los artículos indicados en la factura hacia el inventario.
No olvides indicarnos la versión GX, lenguaje y DBMS que utilizas, además si la App. es Win o Web.
Esperamos tus comentarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Anular Factura

Publicado por Gerdson (46 intervenciones) el 22/11/2010 08:09:05
Gracias amigo Julio por contestar, se me paso poner la version. Mira trabajo con lo siguiente:

GX 9.0
.NET
SQL Server 2005
Ambiente Win

Efectivamente mi aplicación esta diseñada de esa manera, pero me podrías dar mas o menos un ejemplo de como hacer el PRC ya que no tengo mucha experiencia manejando procedimientos.

Desde ya gracias, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Anular Factura

Publicado por luis (47 intervenciones) el 23/11/2010 20:25:46
Creas un nuevo procedimiento. Le pasas la clave de tu tabla. Utiliza un For Each para recorrer el subfile de articulos vendidos y cambiar el estado.

Ej:

Trn Venta
VentaCodigo
VentaImporta
VentaEstado
(ArticuloCodigo*
VentaCantidad
)

Trn Articulo
ArticuloCodigo*
ArticuloStock

Si esas fueran tus trn, el procedure seria algo asi como

For Each
Where VentaCodigo=&ParametroVentaCodigo
For Each
&ArticuloCodigo = ArticuloCodigo
&VentaCantidad = VentaCantidad
Do 'Stock'
EndFor
VentaEstado='A'
EndFor

Sub 'Stock'
For Each
Where ArticuloCodigo = &ArticuloCodigo
ArticuloStock = ArticuloStock - &VentaCantidad
EndFor
EndSub

Espero te sirva. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Anular Factura

Publicado por Julio (301 intervenciones) el 28/11/2010 03:11:57
ok, ahí te va.

// Procedimiento para ELIMINAR (PFact01)

Sección: Rules
param(in:FactId);

Seccion: Source
for each FactId // FACCAB, Cabecera de Factura
for each FactId DetId // FACDET, Detalle de Factura
for each ArtId // TABART, Tabla de Artículos
where ArtId = FactArtId // FactArtId es subtipo de ArtId
ArtStock += FacDetArtCant // el att. FacDetArtCant pertenece a la tabla FACDET
endfor // TABART
DELETE
endfor // FACDET
DELETE
endfor // FACCAB

Notar que luego de reponer el Stock se elimina la línea de detalle de la factura así mismo, luego de leer todas los registros de FACDET se elimina la cabecera de Factura.
NOTA: Estes es solo un ejemplo simple (bueno todo es sencillo con GX)
Hay otras maneras de hacer lo mismo pero no nos compliquemos más de la cuenta.

En el sitio GxOpen hay algunas Kb's para descargar gratis que te pueden enseñar muchísimo más.

Es un placer compartir mis experiencias, si necesitas más ayuda posteame tu mail (si es que hay como) y con guste te enviaré un pequeño ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Solucionado!!

Publicado por Gerdson (46 intervenciones) el 14/12/2010 07:32:00
Amigo Luis gracias por la sugerencia, me sirvio de mucho.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar