Как учитывать в Navision закупку ресурсов

Статья — вольный перевод заметки Карен Хиггинс, оригинал статьи находится по адресу: http://mibuso.com/howtoinfo.asp?FileID=20

Запрос на возможность проводить закупки ресурсов — один из частых запросов на доработки Navision. В этой заметке полностью пошагово описана данная доработка. В результате работы, записи с типом Ресурс будут записаны в таблицах G/L Entry, Resource Ledger Entry и, если потребуется, в Job Ledger Entry.

1. Добавьте «Ресурс» в список option’ов для поля Тип.

2. Измените ссылки в этом поле на таблицу ресурсов, если тип = ресурс. Сделайте это для следующих таблиц:

  • a. 39 — Purchase Line;
  • b. 121 — Purch. Rcpt. Line;
  • c. 123 — Purch. Inv. Line;
  • d. 125 — Purch. Cr. Memo Line;
  • e. 6651 — Return Shipment Line.

3. Измените триггер OnValidate для поля Но. в таблице 39 Purchase Line: добавьте локальную переменную Res, тип — Record Resource, и добавьте следующий код:

//  ERROR(Text003);
BEGIN
  RES.GET("No.");
  RES.TESTFIELD(Blocked,FALSE);
  RES.TESTFIELD("Gen. Prod. Posting Group");
  Description := RES.Name;
  VALIDATE("Unit Cost",RES."Unit Cost");
  VALIDATE("Direct Unit Cost",RES."Direct Unit Cost");
  "Gen. Prod. Posting Group" := RES."Gen. Prod. Posting Group";
  "VAT Prod. Posting Group" := RES."VAT Prod. Posting Group";
  "Tax Group Code" := RES."Tax Group Code";
  "Allow Item Charge Assignment" := FALSE;
  "Unit Price (LCY)" := RES."Unit Price";
  "Unit of Measure Code" := RES."Base Unit of Measure";
 END;

4. Если вы пользуетесь функционалом Работы, измените триггер OnValidate по полю Job No. в таблице 39 Purchase Line:

//IF NOT (Type IN [Type::Item,Type::"G/L Account"]) THEN
IF NOT (Type IN [Type::Item,Type::"G/L Account",Type::Resource]) THEN

5. Таблицы 203 и 207.

  • a. Добавьте Поставщика (Vendor) в список Option’ов после Customer для поля Source Type.
  • b. Добавьте option Purchase в поле Entry Type.
  • c. Измените свойства этих полей, так чтобы при выборе Source Type = Vendor ссылка вела на таблицу Vendor.

6. Кодеюнит 90.

  • a. Добавьте локальную переменную ResJnlLine, тип — Record, Res. Journal Line.
  • b. Добавьте локальную переменную ResJnlPostLine, тип — Codeunit, Res. Jnl.-Post Line. Затем измените код (см.ниже):
//3: ERROR(Text015);
PurchLine.Type::Resource:

  IF PurchLine."Qty. to Invoice" <> 0 THEN BEGIN
    ResJnlLine.INIT;
    ResJnlLine."Posting Date" := "Posting Date";
    ResJnlLine."Document Date" := "Document Date";
    ResJnlLine."Reason Code" := "Reason Code";
    ResJnlLine."RESource No." := PurchLine."No.";
    ResJnlLine.Description := PurchLine.Description;
    ResJnlLine."Source Type" := ResJnlLine."Source Type"::Vendor;
    ResJnlLine."Source No." := PurchLine."Buy-from Vendor No.";
    ResJnlLine."Job No." := PurchLine."Job No.";
    ResJnlLine."Unit of Measure Code" := PurchLine."Unit of Measure Code";
    ResJnlLine."Shortcut Dimension 1 Code" := PurchLine."Shortcut Dimension 1 Code";
    ResJnlLine."Shortcut Dimension 2 Code" := PurchLine."Shortcut Dimension 2 Code";
    ResJnlLine."Gen. Bus. Posting Group" := PurchLine."Gen. Bus. Posting Group";
    ResJnlLine."Gen. Prod. Posting Group" := PurchLine."Gen. Prod. Posting Group";
    ResJnlLine."Entry Type" := ResJnlLine."Entry Type"::Purchase;
    ResJnlLine."Document No." := GenJnlLineDocNo;
    ResJnlLine."External Document No." := GenJnlLineExtDocNo;
    ResJnlLine.Quantity := PurchLine."Qty. to Invoice";
    ResJnlLine."Unit Cost" := PurchLine."Unit Cost (LCY)";
    ResJnlLine."Total Cost" := PurchLine."Unit Cost (LCY)" * ResJnlLine.Quantity;
    ResJnlLine."Unit Price" := PurchLine.Amount/PurchLine.Quantity;
    ResJnlLine."Total Price" := PurchLine.Amount;
    ResJnlLine."Source Code" := SrcCode;
    ResJnlLine.Chargeable := TRUE;
    ResJnlLine."Posting No. Series" := "Posting No. Series";
    ResJnlLine."Qty. per Unit of Measure" := PurchLine."Qty. per Unit of Measure";
    TempJnlLineDim.DELETEALL;
    TempDocDim.RESET;
    TempDocDim.SETRANGE("Table ID",DATABASE::"Purchase Line");
    TempDocDim.SETRANGE("Line No.",PurchLine."Line No.");
    DimMgt.CopyDocDimToJnlLineDim(TempDocDim,TempJnlLineDim);
    ResJnlPostLine.RunWithCheck(RESJnlLine,TempJnlLineDim);
  END;

Проверьте, как работает ваша доработка :)

Автор:

В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.

Количество статей, опубликованных автором: 86.

Добавить комментарий