Skip to Content
avatar image
Former Member

Artículos Repetidos en una Orden de Venta

Hola, alguien me puede ayudar con un query para no repetir un artículo en una orden de venta???

Lo que pasa es que a veces cuando las ordenes de ventas son muy largas repiten los Ítem y no se pueden por eso deseo ponerles un control que cuando el artículo ya está ingresado en la orden de venta no me lo deje procesar y que me identifique la línea en la que ya está puesto.  Pienso que puede ser en el Transaction pero tendrías que esperar hasta que le dé crear para poder darme cuenta, puede existir algún otro control.

Saludos y Gracias de ante mano.

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

3 Answers

  • avatar image
    Former Member
    Apr 24, 2013 at 03:30 PM

    Yamileth, intenta con este query:

    IF @object_type = '17' and @transaction_type in ('A', 'U')

    BEGIN

              declare @CadenaRepetidos varchar(1000)

              select @CadenaRepetidos  = isnull(replace((SELECT ItemLinenum = REPLACE((SELECT Documento AS [data()] FROM

                                            (

                                            SELECT

                                                      I.ItemCode + '@-@' + -- Si quieres mostrar solo los números de línea, entonces cometna esta línea por completo

                                                      convert(varchar(10),I.LineNum) Documento

                                            FROM ORDR O

                                                      INNER JOIN RDR1 I ON O.DocEntry = I.DocEntry

                                                                 WHERE O.DocEntry = @list_of_cols_val_tab_del and I.ItemCode in(select TA.ItemCode from rdr1 TA where TA.DocEntry = @list_of_cols_val_tab_del group by TA.ItemCode having COUNT(TA.ItemCode)>1)) T

                                                      FOR XML PATH ('')), ' ', ', ')),'@',' '),'0')

              --select @@CadenaRepetidos

              if @CadenaRepetidos <> '0'

              begin

                        set @error = 1981

                        set @error_message = 'Repetidos: ' + @CadenaRepetidos

              end

              else

              begin

                        select @error = 0

                        select @error_message = N'Ok'

              end

    END

    A mi me ha funcionado en mi ambiente de pruebas.

    Saludos y suerte...

    Juan Carlos.

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member Former Member

      Hola Juan Carlos, pues no se ordena nada, pero si borras una línea del medio el line num no se actualiza, lo pude corroborar poniendo el documento en preliminar y luego verificando la DRF1, en el linenum las líneas que yo borraba del medio simplemente el número desaparece de la secuencia en el documento que aún no es un documento creado, pero el visorder ese si mantiene una secuencia visual de numero sin importar que yo haya borrado líneas intermedias.  Con esto y utilizando el VisOrder si me actualiza a medida que yo vaya borrando lineas el número en donde van quedando los demás duplicados.  Muchisimas gracias por su ayuda.

      Saludos

  • avatar image
    Former Member
    Apr 24, 2013 at 06:36 PM

    Yamileth, en resumen, el query que te proponía quedaría de la siguiente forma, mostrando

    IF @object_type = '17' and @transaction_type in ('A', 'U')

    BEGIN

              declare @CadenaRepetidos varchar(1000)

              select @CadenaRepetidos  = isnull(replace((SELECT ItemLinenum = REPLACE((SELECT Documento AS [data()] FROM

                                            (

                                            SELECT

                                                      I.ItemCode + '@-@' + -- Si quieres mostrar solo los números de línea, entonces cometna esta línea por completo

                                                      convert(varchar(10),I.VisOrder+1) Documento

                                            FROM ORDR O

                                                      INNER JOIN RDR1 I ON O.DocEntry = I.DocEntry

                                                                 WHERE O.DocEntry = @list_of_cols_val_tab_del and I.ItemCode in(select TA.ItemCode from rdr1 TA where TA.DocEntry = @list_of_cols_val_tab_del group by TA.ItemCode having COUNT(TA.ItemCode)>1)) T

                                                      ORDER BY 1 FOR XML PATH ('')), ' ', ', ')),'@',' '),'0')

              --select @@CadenaRepetidos

              if @CadenaRepetidos <> '0'

              begin

                        set @error = 6805

                        set @error_message = 'Repetidos: ' + @CadenaRepetidos

              end

              else

              begin

                        select @error = 0

                        select @error_message = N'Ok'

              end

    END

    Esto te mostrará los artículos de acuerdo al orden de visualización y no al orden de captura, además que agregué un ordenamiento para que te muestre la información de los artículos de manera ordenada por código, ya que anteriormente te los mostraba desordenados y no iba ser muy comprensible para los usuarios.

    Saludos y nos avisas si te funciona.

    Gracias.

    Juan Carlos.

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      Muchas gracias Juan, si con el Visorder es sufiviente,, ya que al capturarlo se pierden los número de los que se van borrando, y en cuanto al orden de los artículos no me es relevante, ya que el código de la mercancía es de 20 dígitos de ropa y no es necesario mostrarlo ordenado.  Por ahora me funciona siempre y cuando no hayan muchos duplicados, porque si hay 10 duplicados solo la línea me da como para mostrarme 10 y los repetidos con su líneas no me saldrían, en ese caso tendría que asignarle un contador en vez del ItemCode para que me de chance de mostrarme mas datos en el caso de que sean muchos los duplicados.

      Saludos y Muchísimas gracias por su ayuda.

  • Apr 22, 2013 at 11:22 PM

    Si es por Transaction revisa este tema:

    duplicados-en-ordenes-de-venta

    Saludos.

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member Alessandro Lopez Santinelli

      Pues si funciona y ya con el número de línea, solo que el par de la línea 1 que está duplicada en un documento de 300 línea es ir línea por línea a identificar donde esta el par duplicado, no puedo borrarla de una porque la cantidad de la línea 1 se la tengo que agregar a la cantidad del otro par antes de borrarlo para que se acumule, porque el Query de Juan Carlos es bueno porque allí dice donde está lo duplicado, ahora bien una vez hagas tu orden de venta inicial todo marca bien, el problema en el de Juan Carlos está cuando borra algún duplicado del centro en donde las líneas se van reduciendo, y le vuelve a dar crear, las líneas duplicadas debajo de lo que borró no se refrescan o no se actualizan ya que esas se siguen mostrando con el mismo número de siempre.