Sistema de Gestión de Negocios "Hexa"

Base de datos de conocimiento.

Doc. Ref. 32009
Título: Los métodos Stk en Hexa V9
Autor: Soltec
Última actualización: 17/08/2018
#stock #existencias #control #logistica #producción


Los métodos Stk en Hexa V.9

El objeto Stk, de la clase cStk, gestiona existencias de artículos, almacenes, lotes y unidades. Incluye asignación de movimientos, recálculos, ajustes, comprobaciones y cálculo de costes. Los campos CantidadT permiten comparar el saldo calculado con las existencias actuales antes de generar un ajuste.

En los métodos con Condicion, Orden y Opciones, el criterio SQL se indica sin WHERE y el orden sin ORDER BY, salvo las particularidades descritas en cada caso. Opciones contiene valores con el formato Nombre=Valor; los textos con espacios se delimitan con comillas simples. Una condición vacía puede abarcar todos los registros. Los ejemplos utilizan datos ilustrativos.

Los métodos disponibles son los siguientes:

  • Stk.AsigMov(Condicion, Orden, Opciones)

    Asigna o desasigna al stock los movimientos seleccionados. Opciones: Previsto=Si utiliza MovimientoPrevisto; Desasignar=Si revierte la asignación y, si no se indica, asigna. Respeta NoAsignarArticulo y AsignadoArticulo, y actualiza cantidades de artículos, almacenes y lotes según el tipo de movimiento. Devuelve las líneas procesadas y recorridas.

    La consulta actual no incluye PedidoProveedorNumero ni OFNumero, aunque se consultan después para distinguir el documento previsto. El efecto depende del tratamiento de campos ausentes por Rs.

    Ejemplo:

    Main = Stk.AsigMov("Codigo=1234", "Codigo", "Previsto=No Desasignar=No")
  • Stk.BorMov(Condicion, Orden, Opciones)

    Desasigna del stock los movimientos seleccionados y elimina sus registros de lotes y unidades antes de borrar los movimientos. Previsto=Si trabaja con movimientos previstos. Devuelve "Borrados=" y la cantidad procesada.

    Ejemplo:

    Main = Stk.BorMov("Codigo=1234", "Codigo", "Previsto=No")
  • Stk.AsigDocXXX(Documento, Asignar, Prefijo, Numero)

    Variante anterior que asigna o desasigna todos los movimientos del documento identificado por Documento, Prefijo y Numero. Asignar indica el sentido. Admite Factura, FacturaProveedor, Albaran, AlbaranProveedor, AlbaranInterno, Pedido, PedidoProveedor y OF; rechaza otros nombres. Actualiza existencias y previsiones. La clase conserva este método con el sufijo XXX; el procedimiento actual es AsigMov.

  • Stk.AsigMovXXX(Condicion, Asignar, Previsto)

    Variante anterior de asignación por criterio. Asignar indica si aplica o revierte y Previsto selecciona la tabla de movimientos previstos. Actualiza artículos, almacenes y lotes. La consulta ya contiene WHERE y concatena SQLWO, por lo que un criterio no vacío puede introducir un segundo WHERE. Se conserva en la clase como método anterior.

  • Stk.CStk(Condicion, Orden, Opciones)

    Recalcula las existencias de los artículos seleccionados y de sus almacenes en CantidadT, partiendo de CantidadInicial y de las entradas y salidas. Fecha en Opciones permite limitar los movimientos hasta una fecha; Orden no se utiliza. Comprueba movimientos sin tipo, fecha o artículo, normaliza cantidades y actualiza las marcas de asignación.

    No sustituye directamente Cantidad por CantidadT. Llama a ArtNul, cuya sentencia actual tiene asignaciones incompletas; además, con Fecha puede trasladar una referencia a Movimiento.Fecha a la actualización de ArticuloAlmacen. Estas particularidades pueden impedir completar el proceso.

    Ejemplo:

    Main = Stk.CStk("Codigo='ART001'", "", "")
  • Stk.CStkP(Condicion, Orden, Opciones)

    Recalcula en Articulo las cantidades pedidas, reservadas, pedidas a proveedor y de fabricación a partir de los valores iniciales y MovimientoPrevisto. Condicion selecciona artículos. Comprueba datos obligatorios y omite movimientos que no deben asignarse. Orden y Opciones no se utilizan. Llama a ArtNul y comparte la limitación de su sentencia de actualización.

    Ejemplo:

    Main = Stk.CStkP("Codigo='ART001'", "", "")
  • Stk.CStkL(Condicion, Orden, Opciones)

    Recalcula CantidadT de ArticuloLote a partir de cantidades iniciales y movimientos de lotes, sin separar almacenes. Condicion corresponde a ArticuloLote; Fecha en Opciones limita los movimientos. Devuelve "Existencias de lotes Calculadas en los campos T" o una incidencia. No reemplaza directamente las cantidades actuales.

    Ejemplo:

    Main = Stk.CStkL("Articulo='ART001'", "", "")
  • Stk.AlbIntStk(Condicion, Orden, Opciones)

    Crea un albarán interno con las diferencias entre Cantidad y CantidadT de los artículos que cumplen Condicion. Utiliza BD.FechaTrabajo y permite Concepto y ContadorEspecial en Opciones. Recorre por Codigo, sin utilizar Orden. Devuelve el prefijo y número del albarán creado.

    Ejemplo:

    Main = Stk.AlbIntStk("Codigo='ART001'", "", "Concepto='Ajuste de existencias'")
  • Stk.AlbIntStkL(Condicion, Orden, Opciones)

    Crea un albarán interno de ajuste a partir de las diferencias Cantidad/CantidadT de ArticuloLote. Opciones admite Concepto y ContadorEspecial. Utiliza la fecha de trabajo y ordena por artículo y lote. Devuelve el identificador del albarán.

    Ejemplo:

    Main = Stk.AlbIntStkL("Articulo='ART001'", "", "Concepto='Ajuste de lotes'")
  • Stk.AjuStkLotes(Condicion, Orden, Opciones)

    Genera un albarán interno para ajustar los lotes a la cantidad actual de cada artículo seleccionado. Da prioridad al consumo de los lotes anteriores, suponiendo que el orden alfabético del lote coincide con su antigüedad. Trata también lotes con cantidades negativas. Requiere que la cantidad del artículo sea correcta. Opciones no se utiliza; devuelve el documento generado.

    Ejemplo:

    Main = Stk.AjuStkLotes("Codigo='ART001'", "Codigo", "")
  • Stk.CStkPL(Condicion, Orden, Opciones)

    Recalcula las cantidades previstas de ArticuloLote a partir de MovimientoPrevistoLote, considerando las líneas con CantidadTramitar distinta de cero. Parte de los saldos iniciales y distingue salidas, compras y fabricación. No separa almacenes. Condicion está planteada para ArticuloLote; la construcción actual del filtro usa nombres Movimiento y MovimientoLote en consultas de movimientos previstos, lo que puede fallar con un criterio no vacío. Orden y Opciones no se utilizan.

  • Stk.CSitU(Condicion, Orden, Opciones)

    Reconstruye la situación de las unidades de artículos a partir de MovimientoUnidad y Movimiento, recorridos por artículo, número de serie, fecha y código. Actualiza sus referencias de ubicación y personas. Condicion se utiliza para seleccionar unidades; Orden se sustituye por el orden interno y Opciones no se utiliza. Devuelve la cantidad de unidades tratadas.

  • Stk.ComPed(Condicion, Orden, Opciones)

    Comprueba la coherencia entre el estado de los pedidos y sus cantidades tramitadas, anuladas y pendientes. Documento en Opciones debe ser Pedido o PedidoProveedor. SoloInformar=Si devuelve incidencias sin corregir; en caso contrario CambiaEstado=Si modifica el estado de la cabecera y CambiaEstado=No corrige las cantidades de las líneas. Devuelve un informe de las comprobaciones.

    Ejemplo:

    Main = Stk.ComPed("Prefijo='A' AND Numero=1234", "Numero", "Documento=Pedido SoloInformar=Si")
  • Stk.CompComp(Condicion, Orden, Opciones)

    Revisa Composicion para localizar artículos o componentes inexistentes, cantidades cero y niveles incoherentes. Eliminar=Si borra las relaciones con referencias inexistentes. Devuelve las incidencias o "Comrobaciones correctas", tal como figura en el código. La comprobación de niveles contiene una consulta mal formada y abre un objeto distinto del preparado, por lo que esa parte no garantiza el resultado descrito por su comentario.

    Ejemplo:

    Main = Stk.CompComp("Articulo='ART001'", "Articulo", "Eliminar=No")
  • Stk.ArtNul(Condicion, Orden, Opciones)

    Intenta reemplazar por cero los nulos de los campos de existencias de Articulo, aplicando Condicion, y devuelve el resultado de BD.Modifica. Orden y Opciones no se utilizan. La sentencia actual omite signos igual en varias asignaciones, entre ellas CantidadPedida, CantidadPresupuestada y CantidadPedidaProveedor; puede fallar en lugar de normalizar los datos.

  • Stk.ArtRedon(Condicion, Orden, Opciones)

    Redondea Cantidad, CantidadInicial y CantidadT de los artículos seleccionados a los decimales de cantidad obtenidos de ObD.DecLinDoc. No cambia los movimientos históricos. Devuelve la cantidad de artículos recorridos. Opciones no se utiliza.

    Ejemplo:

    Main = Stk.ArtRedon("Codigo='ART001'", "Codigo", "")
  • Stk.ArtLoteNul(Condicion, Orden, Opciones)

    Reemplaza por cero los valores nulos de los campos de existencias de ArticuloLote mediante SQLNullN. Aplica Condicion y devuelve el resultado de BD.Modifica. Orden y Opciones no se utilizan.

    Ejemplo:

    Main = Stk.ArtLoteNul("Articulo='ART001'", "", "")
  • Stk.ArtLoteRedon(Condicion, Orden, Opciones)

    Redondea Cantidad, CantidadInicial y CantidadT de los lotes según los decimales de cantidad de Hexa. En el código actual consulta todos los registros de ArticuloLote: no aplica Condicion, Orden ni Opciones. Devuelve el contador de lotes recorridos.

    Ejemplo:

    Main = Stk.ArtLoteRedon("", "", "")
  • Stk.BorArt(Condicion, Orden, Opciones)

    Borra los artículos seleccionados siempre que no tengan movimientos ni movimientos previstos. Con BorrarFormulas=No conserva los que participan en composiciones; con Si elimina las relaciones de composición correspondientes. Borra también los registros de tarifas e idiomas tratados por la función. Devuelve un resumen de borrados y motivos de exclusión.

    Ejemplo:

    Main = Stk.BorArt("Codigo='ART001'", "Codigo", "BorrarFormulas=No")
  • Stk.SelMovPHfno(Condicion, Orden, Opciones)

    Busca movimientos previstos cuyas referencias de pedido, pedido de proveedor u orden de fabricación no encuentran documento. Crea una selección mediante Sel.CSel si hay huérfanos; no los elimina. Devuelve el resultado de crear la selección o indica que no había movimientos previstos huérfanos. Opciones no se utiliza.

    Ejemplo:

    Main = Stk.SelMovPHfno("", "Codigo", "")
  • Stk.SelMovHfno(Condicion, Orden, Opciones)

    Busca movimientos sin documento comercial de origen existente y crea una selección de sus códigos. Revisa las referencias de albaranes y facturas de clientes, proveedores e internos. No borra movimientos. Devuelve el resultado de la selección o indica que no había huérfanos.

    Ejemplo:

    Main = Stk.SelMovHfno("", "Codigo", "")
  • Stk.SelMovLUH(Condicion, Orden, Opciones)

    Busca detalles de lotes o unidades sin movimiento padre. Opciones: Tipo debe ser Lote o Unidad y Previsto distingue los movimientos previstos. Condicion y Orden no se aplican. La implementación construye nombres de tablas y campos de forma inconsistente para algunas combinaciones y fija MovimientoLote como tabla de selección, por lo que no garantiza una selección correcta en todas las variantes.

  • Stk.CalCost(Condicion, Orden, Opciones)

    Recorre los artículos seleccionados, calcula su coste con CosteArticulo y pretende guardar los valores distintos de cero en Articulo.Coste. Metodo en Opciones admite Medio, Ultimo o vacío, equivalente al último. Para compuestos el orden debe permitir calcular primero los componentes.

    El código actual duplica las comillas del artículo en el UPDATE y termina con Return CalCost en lugar de Return Resultado. Por ello puede fallar la actualización y no devuelve el resumen que prepara internamente.

  • Stk.CosteArticulo(Articulo, Fecha, Metodo)

    Calcula el coste sin actualizar Articulo. Para origen Compra o vacío, Metodo=Medio calcula un coste ponderado de las entradas recientes hasta cubrir el stock, que debe ser positivo. Metodo=Ultimo o vacío consulta la Base de la última entrada de proveedor: el código no la divide por Cantidad y duplica las comillas del artículo en ese criterio.

    Para Fabricación o Montaje suma la cantidad de cada componente multiplicada por su coste almacenado. Fecha permite limitar las entradas y reconstruir el stock a esa fecha; vacía utiliza la situación actual. Devuelve un Double.

    Ejemplo:

    Main = Stk.CosteArticulo("ART001", "", "Medio")

Indice: Las clases y sus métodos en Hexa V.9

Volver a la búsqueda anterior