• Este debate tiene 1 respuesta, 2 mensajes y ha sido actualizado por última vez el hace 2 años, 3 meses por AvatarLaura Nicolàs.
Viendo 2 entradas - de la 1 a la 2 (de un total de 2)

Respuestas del foro


  • Miguel Angel Carbonero Jimenez

    Buenos días,

    estoy migrando una 2009 R2 a la version NAV2018. Ya esta convertida la base a 2018 y estoy en el paso data upgrade process, es decir, ejecutando las codeunit de upgrade.

    El problema viene que lleva 19 horas ejecutandose, lo hice en modo paralelo ya que para cuando hay varias empresas es el mejor metodo. En este caso particular, 6 empresas ya han terminado porque en cuanto a movimientos no tiene mucha cantidad.

    Pero en la empresa que queda esta en la parte de UpdateItem y desde hace 19 horas que sigue ejecutandose, me parece muchisimo tiempo y visto el código que tiene la parte de Item aun mas, porque vale que actualiza historico de documentos y de movimientos en la parte de UpgradeProductGroup

    dentro de esa parte se recorre cada grupo de producto y crea categorias de productos.

    LOCAL UpgradeProductGroup()
    IF NOT ProductGroup.FINDSET THEN
    EXIT;

    REPEAT
    CreateItemCategory(ProductGroup);
    SaveWarehouseClassCode(ProductGroup);
    UNTIL ProductGroup.NEXT = 0;

    Dentro de esa funcion esta la de crear categorias de producto, por cada creacion se actualiza historico de documentos y movimientos.

    LOCAL CreateItemCategory(ProductGroup : Record «Product Group»)
    NewItemCategoryCode := GetUniqueItemCategoryCode(ProductGroup);

    ItemCategory.INIT;
    ItemCategory.Code := NewItemCategoryCode;
    ItemCategory.»Parent Category» := ProductGroup.»Item Category Code»;
    ItemCategory.Description := ProductGroup.Description;
    ItemCategory.INSERT;

    UPGItem.SETRANGE(«Item Category Code»,ProductGroup.»Item Category Code»);
    UPGItem.SETRANGE(«Product Group Code»,ProductGroup.Code);
    IF UPGItem.FINDSET THEN
    REPEAT
    Item.GET(UPGItem.»No.»);
    Item.»Item Category Code» := NewItemCategoryCode;
    Item.MODIFY(TRUE);
    UpdateItemCategoryCodeOnLinesRecords(UPGItem,ItemCategory);
    UNTIL UPGItem.NEXT = 0;

    LOCAL UpdateItemCategoryCodeOnLinesRecords(VAR UPGItem : Record «UPG Item»;VAR ItemCategory : Record «Item Category»)

    SalesShipmentLine.SETCURRENTKEY(Type,»No.»,»Unit of Measure Code»);
    SalesShipmentLine.SETRANGE(Type,SalesShipmentLine.Type::Item);
    SalesShipmentLine.SETRANGE(«No.»,UPGItem.»No.»);
    SalesShipmentLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    SalesInvoiceLine.SETCURRENTKEY(«Document No.»,Type,»No.»);
    SalesInvoiceLine.SETRANGE(Type,SalesInvoiceLine.Type::Item);
    SalesInvoiceLine.SETRANGE(«No.»,UPGItem.»No.»);
    SalesInvoiceLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    SalesCrMemoLine.SETCURRENTKEY(«Document No.»,Type,»No.»);
    SalesCrMemoLine.SETRANGE(Type,SalesCrMemoLine.Type::Item);
    SalesCrMemoLine.SETRANGE(«No.»,UPGItem.»No.»);
    SalesCrMemoLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    PurchRcptLine.SETRANGE(Type,PurchRcptLine.Type::Item);
    PurchRcptLine.SETRANGE(«No.»,UPGItem.»No.»);
    PurchRcptLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    PurchInvLine.SETCURRENTKEY(Type,»No.»,»Variant Code»);
    PurchInvLine.SETRANGE(Type,PurchInvLine.Type::Item);
    PurchInvLine.SETRANGE(«No.»,UPGItem.»No.»);
    PurchInvLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    RequisitionLine.SETCURRENTKEY(Type,»No.»,»Variant Code»,»Location Code»,»Sales Order No.»,»Planning Line Origin»,»Due Date»);
    RequisitionLine.SETRANGE(Type,RequisitionLine.Type::Item);
    RequisitionLine.SETRANGE(«No.»,UPGItem.»No.»);
    RequisitionLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ItemLedgerEntry.SETCURRENTKEY(«Item No.»,Positive,»Location Code»,»Variant Code»);
    ItemLedgerEntry.SETRANGE(«Item No.»,UPGItem.»No.»);
    ItemLedgerEntry.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    SalesLine.SETCURRENTKEY(«Document Type»,Type,»No.»,»Variant Code»,»Drop Shipment»,»Location Code»,»Shipment Date»);
    SalesLine.SETRANGE(Type,SalesLine.Type::Item);
    SalesLine.SETRANGE(«No.»,UPGItem.»No.»);
    SalesLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    PurchaseLine.SETCURRENTKEY(«Document Type»,Type,»No.»,»Variant Code»,»Drop Shipment»,»Location Code»,»Expected Receipt Date»);
    PurchaseLine.SETRANGE(Type,PurchaseLine.Type::Item);
    PurchaseLine.SETRANGE(«No.»,UPGItem.»No.»);
    PurchaseLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    SalesLineArchive.SETCURRENTKEY(Type,»No.»);
    SalesLineArchive.SETRANGE(Type,SalesLineArchive.Type::Item);
    SalesLineArchive.SETRANGE(«No.»,UPGItem.»No.»);
    SalesLineArchive.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    PurchaseLineArchive.SETRANGE(Type,PurchaseLineArchive.Type::Item);
    PurchaseLineArchive.SETRANGE(«No.»,UPGItem.»No.»);
    PurchaseLineArchive.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    TransferLine.SETCURRENTKEY(«Item No.»,»Variant Code»);
    TransferLine.SETRANGE(«Item No.»,UPGItem.»No.»);
    TransferLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    TransferShipmentLine.SETCURRENTKEY(«Transfer Order No.»,»Item No.»,»Shipment Date»);
    TransferShipmentLine.SETRANGE(«Item No.»,UPGItem.»No.»);
    TransferShipmentLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    TransferReceiptLine.SETCURRENTKEY(«Transfer Order No.»,»Item No.»,»Receipt Date»);
    TransferReceiptLine.SETRANGE(«Item No.»,UPGItem.»No.»);
    TransferReceiptLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ServiceLine.SETCURRENTKEY(Type,»No.»,»Order Date»);
    ServiceLine.SETRANGE(Type,ServiceLine.Type::Item);
    ServiceLine.SETRANGE(«No.»,UPGItem.»No.»);
    ServiceLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ServiceShipmentLine.SETRANGE(Type,ServiceShipmentLine.Type::Item);
    ServiceShipmentLine.SETRANGE(«No.»,UPGItem.»No.»);
    ServiceShipmentLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ServiceInvoiceLine.SETCURRENTKEY(Type,»No.»);
    ServiceInvoiceLine.SETRANGE(Type,ServiceInvoiceLine.Type::Item);
    ServiceInvoiceLine.SETRANGE(«No.»,UPGItem.»No.»);
    ServiceInvoiceLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ServiceCrMemoLine.SETCURRENTKEY(Type,»No.»);
    ServiceCrMemoLine.SETRANGE(Type,ServiceCrMemoLine.Type::Item);
    ServiceCrMemoLine.SETRANGE(«No.»,UPGItem.»No.»);
    ServiceCrMemoLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ReturnShipmentLine.SETRANGE(Type,ReturnShipmentLine.Type::Item);
    ReturnShipmentLine.SETRANGE(«No.»,UPGItem.»No.»);
    ReturnShipmentLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ReturnReceiptLine.SETRANGE(Type,ReturnReceiptLine.Type::Item);
    ReturnReceiptLine.SETRANGE(«No.»,UPGItem.»No.»);
    ReturnReceiptLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    StandardItemJournalLine.SETRANGE(«Item No.»,UPGItem.»No.»);
    StandardItemJournalLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    ItemJournalLine.SETCURRENTKEY(«Item No.»,»Posting Date»);
    ItemJournalLine.SETRANGE(«Item No.»,UPGItem.»No.»);
    ItemJournalLine.MODIFYALL(«Item Category Code»,ItemCategory.Code);

    Yo he cambiado que le he puesto una clave de ordenacion pensando que tardaria menos pero como le digo lleva 19 horas en este proceso.

    En esta empresa hay 7022 productos y donde mas registros hay es en los historicos de ventas y las tablas referentes a las ventas, ya que tambien archiva las ventas. Entiendo que la tabla movimiento de producto tambien tiene muchos registros, pero como digo me parece una exageracion 19 horas.

    Se por donde va porque como no pone progreso veo que sentencias se ejecutan en SQL, como le digo lleva 19 horas de ejecucion.

    Por saber de que manera mejorarlo o que hacer para que haga ese paso en el menor tiempo posible.

    Muchas gracias.

    Un saludo

    #5695
    Avatar
    Laura Nicolàs
    Superadministrador
    Laura Nicolàs

    [quote quote=5695]hace 19 horas que sigue ejecutandose, me parece muchisimo tiempo[/quote]

    Es demasiado tiempo…

    En los upgrades que me ha tocado hacer las empresas no usaban Categorías de productos. Creo que es este proceso el que me daba errores, y en ocasiones me lo he saltado.

    Si necesitas ejecutarlo yo miraría de ejecutar el código desde SQL, que suele ser más rápido.

    Salut!
    Laura Nicolàs

    #5696
Viendo 2 entradas - de la 1 a la 2 (de un total de 2)

Debe iniciar sesión para responder a este tema.