Inventario distintas empresas

Este debate contiene 6 respuestas, tiene 2 mensajes y lo actualizó  Cristina Nicolàs hace 1 año, 4 meses.

Viendo 7 publicaciones - del 1 al 7 (de un total de 7)
  • Autor
    Publicaciones
  • #6125

    juanbo82
    Participante

    Buenos días,

    Me gustaría ver el inventario de todas las empresas que tengo, pero me encuentro el problema que el campo inventario de la tabla Item es un campo de tipo flowfield:

    Sum(«Item Ledger Entry».Quantity WHERE (Item No.=FIELD(No.),Global Dimension 1 Code=FIELD(Global Dimension 1 Filter),Global Dimension 2 Code=FIELD(Global Dimension 2 Filter),Location Code=FIELD(Location Filter),Drop Shipment=FIELD(Drop Shipment Filter),Variant Code=FIELD(Variant Filter),Lot No.=FIELD(Lot No. Filter),Serial No.=FIELD(Serial No. Filter),Posting Date=FIELD(Inventory Date Filter),Positive=FIELD(Positive Entry Filter)))

    Si utilizo:

    Item.CHANGECOMPANY(Company.Name);
    Item.CALCFIELDS(Item.Inventory);

    El valor que me devuelve Inventory es el valor de la empresa en la que me encuentro, y no el valor de la empresa a la que he cambiado.

    Así que he intentado implementar el campo flowfield con código:

    ItemLedgerEntry.SETRANGE(«Item No.», Item.»No.»);
    ItemLedgerEntry.SETRANGE(«Global Dimension 1 Code», Item.»Global Dimension 1 Code»);
    ItemLedgerEntry.SETRANGE(«Global Dimension 2 Code», Item.»Global Dimension 2 Code»);
    ItemLedgerEntry.SETRANGE(«Location Code», Item.»Location Filter»);
    ItemLedgerEntry.SETRANGE(«Drop Shipment», Item.»Drop Shipment Filter»);
    ItemLedgerEntry.SETRANGE(«Variant Code», Item.»Variant Filter»);
    ItemLedgerEntry.SETRANGE(«Lot No.», Item.»Lot No. Filter»);
    ItemLedgerEntry.SETRANGE(«Serial No.», Item.»Serial No. Filter»);
    ItemLedgerEntry.SETRANGE(«Posting Date», Item.»Inventory Date Filter»);
    ItemLedgerEntry.SETRANGE(Positive, Item.»Positive Entry Filter»);
    IF ItemLedgerEntry.FINDFIRST THEN

    El problema en este caso es que no encuentra nada en ItemLedgerEntry, imagino porque algo estoy haciendo mal.

    ¿Se puede hacer algo para ver un campo flowfield de una tabla de otras empresas?

    Muchas gracias.

    #6126

    Cristina Nicolàs
    Jefe de claves

    Hola,

    No se puede hacer un campo Flowfield apuntando a tablas de otra empresa.

    Diria que la implementación que estás haciendo no encuentra nada porque en los campos FlowFilter no hay ningún valor, sino que tienen filtros aplicados.
    Para eso, en lugar de hacer un SETRANGE con el valor de estos campos, inténtalo utilizando la función COPYFILTER.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #6127

    juanbo82
    Participante

    Ok, muchas gracias!!

    Y otra pregunta relacionada con el cambio de empresas.

    Quiero generar un albarán de compra desde la empresa A en la empresa B, me explico, tengo un pedido de venta en la empresa A (La empresa A vende a la empresa B), cuando cargue los palets y pulse el botón registrar quiero que se cree el albarán de venta de A (hasta aquí bien) y que también se genere el albarán de compra en la empresa B.

    Esto último es un problema, ya que con CHANGECOMPANY solo puedo cambiar a nivel de objeto, tendría que cambiar de empresa uno a uno todos los objetos que utilizo en tablas y codeunit para realizar este proceso.

    ¿No existe nada que me cambie en global todos los objetos de empresa?

    Cuando se cambia de empresa en navision se abre una página para seleccionar la empresa a la que queremos cambiar, necesitaría una funcionalidad parecida a esa, el problema que no me da la opción de ver que hace cuando cambiamos de empresa en NAV.

    #6128

    Cristina Nicolàs
    Jefe de claves

    Hola,

    Desde versiones recientes hay un comando STARTSESSION (o algo parecido, ahora no lo recuerdo de memoria), que permite iniciar una sesión en otra empresa y ejecutar algo).
    Es una buena opción para esto que pides de registrar en otra empresa. Yo lo he utilizado en alguna ocasión.
    Lo único es que este comando inicia una sesión sin interfaz de usuario. Es una sesión en background.

    Otra opción que también he utilizado recientemente cuando he tenido que registrar en una empresa distinta a la que se encuentra el usuario es utilizar la funcionalidad de registro de fondo que existe tanto en las compras como en las ventas. Si la activas y la pruebas, verás que el registro de fondo lo que hace es crear un registro en la cola de proyectos y dejar que sea la cola de proyectos la que haga el registro.
    Basándome en esto, desde la empresa A creo un registro en la cola de proyectos de la empresa B, con las mismas opciones y todo igual como lo crea el registro de fondo.

    Espero que te sirva la información.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #6130

    juanbo82
    Participante

    Muchas gracias Cristina,

    Estoy probando con STARTSESSION, pero creo que hay algo que no hago correctamente.

    En la codeunit 50000 hago lo siguiente:

    OK := STARTSESSION(SessionEvent.»Session ID», CODEUNIT::ChangeCompany, CompanyDest, Prueba);
    IF OK THEN
    STOPSESSION(SessionEvent.»Session ID», ‘Logoff cache stress test session’)
    ELSE
    ERROR(‘The session was not started successfully.’);

    y en la codeunit 50001

    OnRun(VAR Rec : Record Prueba)
    SalesOrderDes.SETRANGE(«No.»,Rec.No);
    IF SalesOrderDes.FINDFIRST THEN BEGIN
    SalesOrderDes.VALIDATE(«Sell-to Customer No.»,Rec.CompanyNo);
    SalesOrderDes.MODIFY;
    END;

    ¿Alguna idea de que parte puede estar mal? Es como que no entra en la codeunit 50001, o si entra, no hace nada…

    Siento las molestias, pero es que encuentro muy poca información acerca de este tema por internet.

    Muchas gracias de nuevo!

    #6131

    juanbo82
    Participante

    Creo que lo he solucionado, yo mismo estaba parando la sesión haciendo STOPSESSION, lo que he hecho ha sido:

    OK := STARTSESSION(SessionEvent.»Session ID», CODEUNIT::ChangeCompany, CompanyDest, Prueba);
    IF NOT OK THEN
    ERROR(‘The session was not started successfully.’);

    De esta forma parece que ya trabaja bien…

    #6133

    Cristina Nicolàs
    Jefe de claves

    Perfecto, veo que te está funcionando!

    Cualquier otra cosa por aquí estamos.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

Viendo 7 publicaciones - del 1 al 7 (de un total de 7)

Debes estar registrado para responder a este debate.

Members Currently Active: 0
No users are currently active
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 1.028, Posts: 3.244, Members: 993
Welcome to our newest member, ACUSTICA
Most users ever online was 15 on 5 April, 2019 9:31 am