none
COSTO PROMEDIO PONDERADO - KARDEX VALORIZADO RRS feed

  • Pregunta

  • buenas noches , por 5 meses busque un simple ejemplo de como sacar el costo promedio en SQL no encontre nada si no informacion a medias e inclusive quise pagar a personas con experiencia para que me hagan la consulta del costo promedio y me pedian 100 dolares acepte pero no lo pudieron hacer hace 4 dias llegue a la solucion y quiero compartirlo con ustedes al menos la logica .

    disculpen lo resumido de la explicacion :

    tienen que tener una tabla KARDEX con los datos mas importante donde se registrara todos los movimientos (si en un registro de venta hay 5 productos en el kardex tienen que haber 5 registros ) y lo mas importante el codigo primary key de la tabla kardex tiene que ser numerico y debe tener este formato la fecha emision y un correlativo de 4 digitos ejemplo: una venta hecha el 17/09/2015 tendria que ser el codigo de esta manera :la fecha convertilo en numero (como en excel) se convierte asi: con el control datapicker fechaemision

    Dim DD As Date = fechaemision.Value.Date
    Dim F As Double = DD.ToOADate()
    convirtienlo seria asi:

    42264 + el correlativo 0001 quedaria finalmente asi :

    422640001

    422640002

    ...... asi sucesivamente . con esto me ayudara al calcular el kardex

    en la tabla detalle de ventas deben agregar el campo costo promedio

    en la tabla devoluciones deben agregar el campo costo promedio

    en la tabla salidas deben agregar el campo costo promedio

    agregamos este campo para saber el costo promedio al momento de la operacion asi cuando queramos anular o elimar sepamos cuanto fue el costo promedio en ese entonces y actualizar el campo total costo

    en la tabla donde esta el campo stock o existencias deben agregar 2 campos:

    costo promedio : con 4  decimales este campo solamente se modificara cuando se haga un ingreso de mercaderia dividiendo el costo total entre las existencias o stock y listo.

    total costo : con 4  decimales este campo es un acumulado donde se actualizara cada vez que:

    ingreso de mercaderia : costo campra * cantidad (este campo se suma al campo total costo)

    ventas : cantidad * costo promedio (este campo se restara total costo)

    devoluciones : cantidad devuelta * costo promedio (este campo se sumara total costo)

    salida de mercaderia : cantida salida * costo promedio (este campo se restara total costo)

    recomendaciones :

    * programar con transaciones : como van a actualizar varias tablas a la vez necesitamos confirmar la actualizacion de todas y si hay algun error no actualizar nada. muy importante para el manejo de saldos.

    espero que les sirva cabe mencionar que personas de este foro me ayudaron mucho en algunas dudas que tenia y las resolvi gracias a ellos .

    como se dan cuenta el total costo y costo promedio cuadran con el reporte que son campos calculados (subconsultas)

    viernes, 18 de septiembre de 2015 4:41

Respuestas

  • bueno me anime enviarles el archivo con la consulta del costo promedio . espero que les sirva de guia.

    https://www.dropbox.com/s/o3sf7wnfvxravu5/costo%20promedio.accdb?dl=0

    • Propuesto como respuesta Nathán XS martes, 22 de septiembre de 2015 3:40
    • Marcado como respuesta markho35 martes, 22 de septiembre de 2015 4:18
    viernes, 18 de septiembre de 2015 5:13

Todas las respuestas

  • bueno me anime enviarles el archivo con la consulta del costo promedio . espero que les sirva de guia.

    https://www.dropbox.com/s/o3sf7wnfvxravu5/costo%20promedio.accdb?dl=0

    • Propuesto como respuesta Nathán XS martes, 22 de septiembre de 2015 3:40
    • Marcado como respuesta markho35 martes, 22 de septiembre de 2015 4:18
    viernes, 18 de septiembre de 2015 5:13
  • Hola Verifique el enlace pero no existe porfavor podrías enviármelo a mi correo danteluis7@gmail.com, para tener un ejemplo de como has realizado el calculo del costo promedio. Te lo agradesco.
    jueves, 22 de octubre de 2015 17:19
  • ya te lo mande
    jueves, 22 de octubre de 2015 18:08
  • Muchas Gracias MarKho35
    Una consulta de casualidad no tienes tu BD en SQLSERVER??
    viernes, 23 de octubre de 2015 15:22
  • El costo promedio tal como se lee en libros de texto es fácil o difícil llevarlo a código según cómo tengas tu base, tablas, campos. Hay que considerar si tu sistema es continuo o si es por cierres, en el primer caso se definen cálculos desde el principio para conocer saldos iniciales cuando quieres un reporte limitado a fechas recientes. Con cierres mensuales es más facil porque los saldos iniciales los tomas de una tabla y solo operas lo del mes o período, pero hacer cierres o cortes mensuales es anticuado desde hace muchos años. Mejor nos pones aqui en el foro el código, así aprendemos.
    domingo, 25 de octubre de 2015 23:50
  • disculpen por error elimine el archivo de la nube lo estoy subiendo de nuevo.

    como les comente me tomo muchos meses hacerlo lo minimo que pueden hacer es agradecer .....

    COSTOPROMEDIPO EN ACCESS 2007

    https://www.dropbox.com/s/sf69r92etswwnbm/costopromedio.accdb?dl=0


    • Editado markho35 lunes, 26 de octubre de 2015 1:45 MODIFICAR
    lunes, 26 de octubre de 2015 0:08
  • Ya está bajando, muchas gracias, todos aprendemos algo nuevo cada dia, sin duda tu enfoque del caso nos dará luz a más de uno.
    lunes, 26 de octubre de 2015 0:15
  • COSTO PROMEDIO EN SQL

    https://www.dropbox.com/s/0t05vuylbh6ftrp/costo%20promedio%202003%202.rar?dl=0


    • Editado markho35 lunes, 26 de octubre de 2015 1:45 MODIFICAR
    lunes, 26 de octubre de 2015 1:44
  • Hola...soy Sebastian, te quería hacer algunas preguntas respecto a lo que subiste, descargue cada uno de los archivos (costopromedioSQL.sql  y costopromedio.accdb , son los principales), el archivo de Access, lo abrí y extraje la información de las 4 Tablas (KARDEX, SUCURSALES, PRODUCTOS, MARCAS) del archivo SQL, extraje el Scrip, ingrese la información solo de 3 tablas, y en la tabla KARDEX cargue 11 registros al azar (de 2 PRODUCTOS distintos 'NN01' y 'AA01'), obviamente adaptados a tu esquema, lamentablemente cuando ejecute el Scrip en SQL SERVER me arrojo un resultado potencial, pero con inconsistencias de información, es posible que nos comuniquemos de manera mas directa y me puedas aclarar algunas dudas que tengo con el valor del Costo Promedio Ponderado que debería calcular en forma automática el Scrip, ya que en el cuadro de resultados en el Campo ALIAS [COSTO_S], hace referencia al Costo de la Salida de Existencia, el cual debería ser el Costo Promedio Calculado por el Scrip y NO el Costo Ingresado de manera manual ya sea por un INSERT o un BULK INSERT.

    te dejo lo que hice en el SQL SERVER:

    CREATE TABLE KARDEX
    (idkardex varchar(20),idsucursal varchar(20),
    idproducto varchar(50),fecha datetime,
    numerodoc varchar(40),movimiento varchar(60),
    entrada numeric(9,0),salida numeric(9,0),
    idcodigo varchar(20),costoi numeric(9,0),
    totalcostoi numeric(9,0),idmarca varchar (40),
    costos numeric(9,0),totalcostos numeric(9,0))
    
    BULK INSERT [dbo].[KARDEX]
    FROM 'C:\Users\SebastianAndres\Desktop\SEBASTIAN\ingresoinicial.prn' /*ACA VA UBICACION DEL ARCHIVO*/
    WITH
    (
    FIELDTERMINATOR = ',', /*SEPARA LOS CAMPOS*/ 
    ROWTERMINATOR = '\n'   /*SEPARA LAS FILAS */
    )
    
    insert into KARDEX values (420520001,'SAM02','NN01','15-02-2015','ING001-000','ING',	  20,	  0,	'I150215000',50,1000,'MFT01',0,0);
    insert into KARDEX values (420520002,'SAM02','NN01','16-02-2015','ING002-000','ING',	 180,	  0,	'I160215000',30,5400,'MFT01',0,0);
    insert into KARDEX values (420520003,'SAM02','NN01','17-02-2015','VTA001-000','VTA',	   0,	  5,	'V170215000',0,0,'MFT01',0,160);
    insert into KARDEX values (420520004,'SAM02','NN01','17-02-2015','ING003-000','ING',	 250,	  0,	'I170215000',25,6250,'MFT01',0,0);
    insert into KARDEX values (420520005,'SAM02','NN01','18-02-2015','VTA002-000','VTA',	   0,    80,	'V180215000',0,0,'MFT01',0,2245);
    insert into KARDEX values (420520006,'SAM01','AA01','15-02-2015','ING001-000','ING',	 120,	  0,	'I150215000',85,10200,'MFT01',0,0);
    insert into KARDEX values (420520007,'SAM01','AA01','16-02-2015','ING001-000','ING',	 770,	  0,	'I160215000',55,42350,'MFT01',0,0);
    insert into KARDEX values (420520008,'SAM01','AA01','15-02-2015','VTA002-000','VTA',	   0,    75,	'V150215000',0,0,'MFT01',59.04494382,4428.370787);
    insert into KARDEX values (420520009,'SAM01','AA01','17-02-2015','ING001-000','ING',	 330,	  0,	'I170215000',67,22110,'MFT01',0,0);
    insert into KARDEX values (420520010,'SAM01','AA01','18-02-2015','VTA003-000','VTA',	   0,   290,	'S180215000',0,0,'MFT01',61.33766744,17787.9236);
    insert into KARDEX values (420520011,'SAM01','AA01','18-02-2015','ING002-000','ING',	1520,     0,	'I180215000',42,63840,'MFT01',0,0);
    
    
    CREATE TABLE SUCURSALES
    (Idsucursal varchar(20),nomsucursal varchar(40),
    direccion varchar(40),telefono numeric(9,0),
    serie varchar(20));
    
    insert into SUCURSALES values ('SAM01','ADMIN',				'CHIMU',								2809882,			'999-');
    insert into SUCURSALES values ('SAM02','FITOZARATE',		'ZARATE',								2702092,			'001-');
    insert into SUCURSALES values ('SAM03','BIOZARATE',			NULL,									NULL,				'005-');
    insert into SUCURSALES values ('SAM04','LIVEZARATE',		NULL,									NULL,				'002-');
    insert into SUCURSALES values ('SAM05','FITOOLIVOS',		NULL,									NULL,				'003-');
    insert into SUCURSALES values ('SAM06','BIOOLIVOS',			NULL,									NULL,				'004-');
    insert into SUCURSALES values ('SAM07','LIVEOLIVOS',		NULL,									NULL,				'006-');
    insert into SUCURSALES values ('SAM08','DLIVEZARATE',		NULL,									NULL,				'007-');
    insert into SUCURSALES values ('SAM09','DLIVEOLIVOS',		NULL,									NULL,				'008-');
    insert into SUCURSALES values ('SAM10','CENTRAL FITO',		'AV ALFREDO MENDIOLA 4749 LOS OLIVOS',	NULL,				'009-');
    insert into SUCURSALES values ('SAM12','CENTRAL LIVELINE',	'AV GRAN CHIMU 778 3ER PISO SJL',		NULL,				'011-');
    insert into SUCURSALES values ('SPU01','PRUEBA1x',			'LIMAS',								2153454,			'010-');
    
    CREATE TABLE PRODUCTOS
    (Idproducto varchar(50),nomproducto varchar(50),
    idmarca varchar(40))
    
    insert into PRODUCTOS values ('AA01',	'AC AJONJOLI X 250',			'MFT01');
    insert into PRODUCTOS values ('AC01',	'ALCACHOFA X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('AC02',	'ALCACHOFA X 500ML',			'MDI01');
    insert into PRODUCTOS values ('AC03',	'ALCACHOFA X 500 ML',			'MDD01');
    insert into PRODUCTOS values ('AE01',	'ACEITE LINAZA',				'MFT01');
    insert into PRODUCTOS values ('AE02',	'ACEITE OLIVOS 1/4 LT',			'MFT01');
    insert into PRODUCTOS values ('AE03',	'ACEITE OLIVOS 1/2 LT',			'MFT01');
    insert into PRODUCTOS values ('AE04',	'ACEITE OLIVOS 1 LT',			'MFT01');
    insert into PRODUCTOS values ('AF01',	'ALFALFA X 120',				'MFT01');
    insert into PRODUCTOS values ('AG01',	'ALGAS MARINAS X 500 ML',		'MFT01');
    insert into PRODUCTOS values ('AG02',	'ALGAS MARINAS X 120 UNID',		'MFT01');
    insert into PRODUCTOS values ('AG03',	'ALGAS X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('AG04',	'ALGAS X 500 ML',				'MDD01');
    insert into PRODUCTOS values ('AO01',	'AJO MIEL X 500 ML',			'LVN01');
    insert into PRODUCTOS values ('AS01',	'AC SASHA INCHI',				'MFT01');
    insert into PRODUCTOS values ('BR01',	'BERENJENA X 500 ML',			'LVN01');
    insert into PRODUCTOS values ('BR02',	'BERENJENA X 120 UNID',			'LVN01');
    insert into PRODUCTOS values ('BR03',	'BERENJENA X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('BR04',	'BERENGENA X 120',				'MFT01');
    insert into PRODUCTOS values ('CL01',	'CALCIO X 500 ML',				'LVN01');
    insert into PRODUCTOS values ('CR01',	'CARTILAGO X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('CR02',	'CIRUELA X 500 ML',				'MFT01');
    insert into PRODUCTOS values ('CR03',	'CARTILAGO X 120 UNID',			'MFT01');
    insert into PRODUCTOS values ('CR04',	'CARTILAGO X 500 ML',			'LVN01');
    insert into PRODUCTOS values ('CR05',	'CARTILAGO X 120 UNID',			'LVN01');
    insert into PRODUCTOS values ('CR07',	'CEREVITAL X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('CR08',	'CARTILAGO X 120 UNID',			'MDI01');
    insert into PRODUCTOS values ('CR09',	'CIRUELA X 500ML',				'MDI01');
    insert into PRODUCTOS values ('CR10',	'CARTILAGO X 500 ML',			'MDD01');
    insert into PRODUCTOS values ('CR11',	'CARTILAGO X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('CR12',	'CIRUELA  X 500ML',				'LVN01');
    insert into PRODUCTOS values ('CR13',	'CEREVITALN X 500 ML',			'MDD01');
    insert into PRODUCTOS values ('DS01',	'DESPARASITANTE DE ZAPALLO',	'MFT01');
    insert into PRODUCTOS values ('GA01',	'GRAVIOLA X 120 UNID',			'MDI01');
    insert into PRODUCTOS values ('GA02',	'GRAVIOLA X 120 UNID',			'MFT01');
    insert into PRODUCTOS values ('KÑ01',	'KAÑIHUA X 500 ML',				'LVN01');
    insert into PRODUCTOS values ('LN01',	'LINAZA X 120CAP',				'MDI01');
    insert into PRODUCTOS values ('LN02',	'LINAZA X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('LN03',	'LINAZA X 120 UNID',			'MDD01');
    insert into PRODUCTOS values ('LN04',	'LINAZA X 500 ML',				'MDD01');
    insert into PRODUCTOS values ('LT01',	'LATEX DE PLATANOS X 500 ML',	'MFT01');
    insert into PRODUCTOS values ('LT02',	'LATEX DE PLATANOS X 120 UNID',	'MFT01');
    insert into PRODUCTOS values ('LT03',	'LATEX DE PLATANO X 500 ML',	'MDI01');
    insert into PRODUCTOS values ('LV01',	'LIVE TONIC X 500 ML',			'LVN01');
    insert into PRODUCTOS values ('MC01',	'MACA POWER X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('MC02',	'MACA X 120',					'MFT01');
    insert into PRODUCTOS values ('MC03',	'MACA  PAWER X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('MX01',	'MAXVITAL X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('MX02',	'MAX VITAL X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('MX03',	'MAX VITAL X 500 ML',			'MDD01');
    insert into PRODUCTOS values ('NN01',	'NONI UVA X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('NN02',	'NONIGAS X 500 ML',				'MFT01');
    insert into PRODUCTOS values ('NN03',	'NONI GRAVIOLA X 500 ML',		'LVN01');
    insert into PRODUCTOS values ('NN04',	'NONI GRAVIOLA X 120 UNID',		'LVN01');
    insert into PRODUCTOS values ('NN05',	'NONI X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('NN06',	'NONI GAS X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('NN07',	'NONI GRAVIOLA X 500 ML',		'MDI01');
    insert into PRODUCTOS values ('NN08',	'NONI X 120 UNID',				'MDI01');
    insert into PRODUCTOS values ('NN09',	'NONI X 120 UND',				'MFT01');
    insert into PRODUCTOS values ('NN10',	'NONI X 500ML',					'MDD01');
    insert into PRODUCTOS values ('NN11',	'NONI X 120 UNID',				'MDD01');
    insert into PRODUCTOS values ('NN12',	'NONIGAST X 500ML',				'LVN01');
    insert into PRODUCTOS values ('PO01',	'PROTEMAX X 500 ML',			'MFT01');
    insert into PRODUCTOS values ('PO02',	'PROTEMAX X 120 UNID', 			'MFT01');
    insert into PRODUCTOS values ('PO03',	'PROPOLIO X 500 ML',			'MDI01');
    insert into PRODUCTOS values ('PO04',	'PROPOLEO X 500 ML',			'MDD01');
    insert into PRODUCTOS values ('SB01',	'SABILA X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('SB02',	'SABILA X 500 ML',				'MFT01');
    insert into PRODUCTOS values ('SC01',	'SACHA INCHI X 120 UNID',		'MFT01');
    insert into PRODUCTOS values ('TC01',	'TOCOSCH',						'MFT01');
    insert into PRODUCTOS values ('TN01',	'TONIC X 500 ML',				'MFT01');
    insert into PRODUCTOS values ('TN02',	'TUNA X 500 ML',				'MFT01');
    insert into PRODUCTOS values ('TN03',	'TONIC X 120 UNID',				'MFT01');
    insert into PRODUCTOS values ('TN04',	'TUNA X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('TN05',	'TUNA X 500ML',					'LVN01');
    insert into PRODUCTOS values ('VT01',	'VITAL X 500 ML',				'MDI01');
    insert into PRODUCTOS values ('VT02',	'VITAL X 500ML',				'MDD01');
    insert into PRODUCTOS values ('YC01',	'YACON X 120 UNID',				'MFT01');
    insert into PRODUCTOS values ('ZN01',	'ZANAHORIA X 500',				'MFT01');
    
    
    CREATE TABLE MARCAS
    (idmarca varchar(40),nommarca varchar(40));
    
    insert into MARCAS values ('LVN01',	'LIVELINE');
    insert into MARCAS values ('MDD01',	'BIOLIVE');
    insert into MARCAS values ('MDI01',	'DLIVE');
    insert into MARCAS values ('MFT01',	'FITOLIFE');
    

                   ( STOCK i-1 * CUP i-1 ) + (ENTRADA i * CUi )

       CUP i    =  ---------------------------------------------

                                  STOCK i-1 + ENTRADA i

     

     

       STOCK i  =  STOCK i-1 + ENTRADA i - SALIDA i 

     

    donde:

                   STOCK i   =   stock acumulado del producto a la fecha

                   CUP i       =   costo unitario promedio del producto a la fecha

                  ENTRADA i  =   cantidad total de las entradas para esa fecha

                  SALIDA i    =   cantidad total de las salidas para esa fecha

                  CU i          =   precio unitario promedio ponderado de las Entradas

    Espero que puedas comunicarte, te dejo mi correo electrónico:

    sebavega_valdivia@hotmail.com


    El costo de Salida, es el mismo que el costo promedio, no asi el costo de ingreso, ya que este ultimo debe ser ingresado en forma manual al sistema, cuando compras a un PROVEEDORAca solo se muestra el costo promedio en la Columna COSTO_P, pero este se debería ver reflejado en el COSTO_S también,
    jueves, 25 de agosto de 2016 3:52