- Este debate tiene 6 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 4 años, 8 meses por
Cristina Nicolàs.
Inventario distintas empresas
-
juanbo82Participantejuanbo82Buenos 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 THENEl 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.
12 julio 2018 a las 09:43 #6125
Cristina NicolàsSuperadministradorCristina NicolàsHola,
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às12 julio 2018 a las 18:33 #6126
juanbo82Participantejuanbo82Ok, 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.
13 julio 2018 a las 13:52 #6127
Cristina NicolàsSuperadministradorCristina NicolàsHola,
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às13 julio 2018 a las 21:25 #6128
juanbo82Participantejuanbo82Muchas 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!
16 julio 2018 a las 10:59 #6130
juanbo82Participantejuanbo82Creo 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…
16 julio 2018 a las 12:21 #6131
Cristina NicolàsSuperadministrador16 julio 2018 a las 20:54 #6133
Debe iniciar sesión para responder a este tema.