Ordini di trasferimento

Avrei bisogno di creare un ordine di trasferimento partendo da un ordine di vendita in modo diciamo così automatico.

Esiste da qualche parte in Nav una funzione dalla quale prendere spunto per generare questo documento in automatico (così da prendere spunto…)

Considerate che il mio db utilizza la tracciabilità (lotto e articolo).

Ciao, non credo che a standard esista qualcosa che faccia ciò, ti do alcuni suggerimenti.

Ipotesi:

  1. se serve creare il documento (ODT)

farei un custom che prenda spunto da:
.funzione “Copia documento” esiste per creare ordine di trasferimento (aggiungere un opzione per per copiare l’ordine di vendita;
.funzione “Crea ordini trasferimento” del granulo manufacturing\conto lavorazione (contiene chiamate alle codeunit di creazione testata\righe ordini di trasferimento) sostituendo la gestione componenti con gli articoli presenti nelle righe ordini; Integrando le due funzioni si potrebbe creare un report batch per trasferimenti massivi.

  1. se non serve creare il documento (NO ODT) ma solo le movimentazioni di trasferimento > farei una funzione di posting che scriva i movimenti come “trasferimento” al posto di vendita” identificando magazzini di trasferimento e il transito e gestendolo con causale apposita in modo da identificarlo (es: per ordine interno o di vendita ad un negozio di proprietà e non fatturabile e usabile solo come statistica) → in questo caso prendere spunto da “riclassificazione articoli” che muove le giacenze come trasferimento diretto.

Tracciabilità: La tracciabilità andrebbe riportata in spedizione e carico riportandola dall’ordine di vendita.

ti allego uno script per creare un trasferimento semplice partendo da un report costruito con testata\righe ordini di vendita (bozza) potrebbe servirti.

report dataitems

SALES HEADER
SALES LINE
OnAfterGetRecord=
BEGIN
IF “Outstanding Quantity” = 0 THEN //solo qta inevasa
CurrReport.SKIP;

IF “No.” <> ‘’ THEN
fnGetItem(“No.”);

QtytoTransfer := 0;
QtytoTransfer := Quantity;

IF QtytoTransfer <= 0 THEN
CurrReport.SKIP;

CASE Direction OF
Direction::Outbound :
IF “Sales Line”.“Location Code” <> recTransferHeader.“Transfer-to Code” THEN
fnCreateTransferHeader;

Direction::Inbound :
IF “Sales Line”.“Location Code” <> recTransferHeader.“Transfer-from Code” THEN
fnCreateTransferHeader;
END;

fnCreateTransferLine;
END;


PROCEDURE fnCreateTransferHeader();
BEGIN
CLEAR(recTransferHeader);
//Scrive Testata Trasferimento
recTransferHeader.INSERT(TRUE);

CASE Direction OF
Direction::Outbound :
BEGIN
recTransferHeader.VALIDATE(“Transfer-from Code”,NewLocation.Code);
recTransferHeader.VALIDATE(“Transfer-to Code”,“Sales Line”.“Location Code”);
END;

Direction::Inbound :
BEGIN
recTransferHeader.VALIDATE(“Transfer-from Code”,“Sales Line”.“Location Code”);
recTransferHeader.VALIDATE(“Transfer-to Code”,NewLocation.Code);
END;
END;

recTransferHeader.VALIDATE(“Shipment Date”,TransferShipDate);
recTransferHeader.VALIDATE(“Receipt Date”,TransferRcptDate);
recTransferHeader.MODIFY;

intCountTransferOrders := intCountTransferOrders + 1;

CLEAR(recTransferLine);
NextTransferLineno := 0;

LastHeader := recTransferHeader.“No.”;
IF FirstHeader = ‘’ THEN
FirstHeader := recTransferHeader.“No.”;
END;

PROCEDURE fnCreateTransferLine();
VAR
Subline: Boolean;

BEGIN
IF “Sales Line”.“Variant Code” = ‘’ THEN
NextTransferLineno += 10000
ELSE
IF recTransferLine.“Item No.” <> “Sales Line”.“No.” THEN BEGIN
NextTransferLineno := ROUND(NextTransferLineno + 10000,10000);
END ELSE BEGIN
NextTransferLineno += 1;
Subline := TRUE;
END;

//Scrive Righe Trasferimento
recTransferLine.INIT;
recTransferLine.“Document No.” := recTransferHeader.“No.”;
recTransferLine.“Line No.” := NextTransferLineno;
recTransferLine.“Transfer-from Code” := recTransferHeader.“Transfer-from Code”;
recTransferLine.“Transfer-to Code” := recTransferHeader.“Transfer-to Code”;
recTransferLine.VALIDATE(“Item No.”,“Sales Line”.“No.”);
recTransferLine.VALIDATE(“Variant Code”,“Sales Line”.“Variant Code”);
recTransferLine.VALIDATE(“Unit of Measure Code”,“Sales Line”.“Unit of Measure Code”);
recTransferLine.VALIDATE(“Shipment Date”,TransferShipDate);
recTransferLine.VALIDATE(“Receipt Date”,TransferRcptDate);
recTransferLine.VALIDATE(Quantity,QtytoTransfer);
recTransferLine.INSERT;

NextEntryNo += 1;
intCountTransferLines := intCountTransferLines + 1;
END;