Pick List in SAP Business One SDK
Pick List in SAP Business One SDK: Pick List is used to pick items from the warehouse and to pack them for shipping.
To access the window from the SAP Business One Main Menu, choose Inventory → Pick and Pack → Pick List
For more information on Pick List, you can refer to following link:
https://help.sap.com/doc/saphelp_sbo92/9.2/en-US/44/c4c1cd7ca22e17e10000000a114a6b/frameset.htm
Pick List in SAP Business One SDK:
The PickLists object supports the picking process of items from the warehouse.
Pick List is exposed as a BoObjectTypes (PickLists) in SAP Business One SDK. Here is how to use it:
Scenario1: Items are NOT managed by Batches / Serial Numbers in the Base Document (Sales Order) and Warehouses are NOT allocated by Bin Locations
- Add Pick List in Released Status for all Items on Sales Order
SAPbobsCOM.Documents oDocuments = null; SAPbobsCOM.Document_Lines oDocument_Lines = null; SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oDocuments = (SAPbobsCOM.Documents)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders); oDocuments.GetByKey(376); oDocument_Lines = oDocuments.Lines; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists_Lines = oPickLists.Lines; for (int i = 0; i < oDocument_Lines.Count; i++) { if (i > 0) oPickLists_Lines.Add(); oDocument_Lines.SetCurrentLine(i); oPickLists_Lines.BaseObjectType = "17"; oPickLists_Lines.OrderEntry = oDocuments.DocEntry; oPickLists_Lines.OrderRowID = i; oPickLists_Lines.ReleasedQuantity = oDocument_Lines.Quantity; } int RetVal = oPickLists.Add();
- Update Pick List by picking all Items in Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); if (oPickLists.GetByKey(1)) { oPickLists_Lines = oPickLists.Lines; for (int i = 0; i < oPickLists_Lines.Count; i++) { oPickLists_Lines.SetCurrentLine(i); oPickLists_Lines.PickedQuantity = oPickLists_Lines.ReleasedQuantity; } int RetVal = oPickLists.Update(); }
- Delete Rows from Pick List When Pick List is in Picked Status
There is no Delete method in Pick List Object.
1. First set Picked Quantity as 0 in Pick List and Update Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); if (oPickLists.GetByKey(14)) { oPickLists_Lines = oPickLists.Lines; for (int i = 0; i < oPickLists_Lines.Count; i++) { oPickLists_Lines.SetCurrentLine(i); oPickLists_Lines.PickedQuantity = 0; } int RetVal = oPickLists.Update(); }
2. Set Released Quantity as 0 in Pick List and Update Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); if (oPickLists.GetByKey(14)) { oPickLists_Lines = oPickLists.Lines; for (int i = 0; i < oPickLists_Lines.Count; i++) { oPickLists_Lines.SetCurrentLine(i); oPickLists_Lines.ReleasedQuantity = 0; } int RetVal = oPickLists.Update(); }
Scenario2: When Items are managed by Batches / Serial Numbers and Warehouses are NOT allocated by Bin Locations
- Update Pick List and assign Batches / Serial Numbers to all Items in Pick List
You cannot assign Batches / Serial Numbers to Pick List when Batches / Serial Numbers are not assigned to base document (Sales Order). First you have to assign Batches / Serial Numbers to base document (Sales Order) then Update Pick List with Batches / Serial Numbers.
1. Assign Batches / Serial Numbers to the Items in Sales Order
SAPbobsCOM.Documents oDocuments = null; SAPbobsCOM.Document_Lines oDocument_Lines = null; oDocuments = (SAPbobsCOM.Documents)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders); oDocuments.GetByKey(371); oDocument_Lines = oDocuments.Lines; oDocument_Lines.SetCurrentLine(0); oDocument_Lines.BatchNumbers.BatchNumber = "B1_001"; oDocument_Lines.BatchNumbers.Quantity = 2; oDocument_Lines.BatchNumbers.Add(); oDocument_Lines.BatchNumbers.BatchNumber = "B1_002"; oDocument_Lines.BatchNumbers.Quantity = 8; oDocument_Lines.SetCurrentLine(1); oDocument_Lines.BatchNumbers.BatchNumber = "B2_001"; oDocument_Lines.BatchNumbers.Quantity = 4; oDocument_Lines.BatchNumbers.Add(); oDocument_Lines.BatchNumbers.BatchNumber = "B2_002"; oDocument_Lines.BatchNumbers.Quantity = 16; int RetVal = oDocuments.Update();
2. Update Pick List with Batches / Serial Numbers same as Base Document (Sales Order)
SAPbobsCOM.Documents oDocuments = null; SAPbobsCOM.Document_Lines oDocument_Lines = null; SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oDocuments = (SAPbobsCOM.Documents)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders); oDocuments.GetByKey(371); oDocument_Lines = oDocuments.Lines; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists.GetByKey(7); oPickLists_Lines = oPickLists.Lines; for (int i = 0; i < oPickLists_Lines.Count; i++) { oDocument_Lines.SetCurrentLine(i); oPickLists_Lines.SetCurrentLine(i); oPickLists_Lines.PickedQuantity = oPickLists_Lines.ReleasedQuantity; for (int j = 0; j < oDocument_Lines.BatchNumbers.Count; j++) { if (j > 0) { oPickLists_Lines.BatchNumbers.Add(); } oDocument_Lines.BatchNumbers.SetCurrentLine(j); oPickLists_Lines.BatchNumbers.BaseLineNumber = i; oPickLists_Lines.BatchNumbers.BatchNumber = oDocument_Lines.BatchNumbers.BatchNumber; oPickLists_Lines.BatchNumbers.Quantity = oDocument_Lines.BatchNumbers.Quantity; } } int RetVal = oPickLists.Update();
- Update Pick List and Partially Pick Items in Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists.GetByKey(12); oPickLists_Lines = oPickLists.Lines; // When Item on Row 1 has 10 Quantity and You want to Pick Only 3 Quantity oPickLists_Lines.SetCurrentLine(0); oPickLists_Lines.PickedQuantity = 3; //Pick 1 Quantity of Batch "B1_001" for Item on Row 1 oPickLists_Lines.BatchNumbers.BatchNumber = "B1_001"; oPickLists_Lines.BatchNumbers.Quantity = 1; oPickLists_Lines.BatchNumbers.BaseLineNumber = 0; //BaseLineNumber is Row Number on PKL1 //Pick 2 Quantity of Batch "B1_002" for Item on Row 1 oPickLists_Lines.BatchNumbers.Add(); oPickLists_Lines.BatchNumbers.BatchNumber = "B1_002"; oPickLists_Lines.BatchNumbers.Quantity = 2; oPickLists_Lines.BatchNumbers.BaseLineNumber = 0; // When Item on Row 2 has 20 Quantity and You want to Pick Only 4 Quantity oPickLists_Lines.SetCurrentLine(1); oPickLists_Lines.PickedQuantity = 4; //Pick 3 Quantity of Batch "B2_001" for Item on Row 2 oPickLists_Lines.BatchNumbers.BatchNumber = "B2_001"; oPickLists_Lines.BatchNumbers.Quantity = 3; oPickLists_Lines.BatchNumbers.BaseLineNumber = 1; //Pick 1 Quantity of Batch "B2_002" for Item on Row 2 oPickLists_Lines.BatchNumbers.Add(); oPickLists_Lines.BatchNumbers.BatchNumber = "B2_002"; oPickLists_Lines.BatchNumbers.Quantity = 1; oPickLists_Lines.BatchNumbers.BaseLineNumber = 1; //BaseLineNumber is Row Number on PKL1 int RetVal = oPickLists.Update();
Scenario3: When Items are managed by Batches / Serial Numbers and Warehouses are allocated by Bin Locations
- Update Pick List and allocate Batches / Serial Numbers and Bin Location When a Pick List is in Released Status
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists.GetReleasedAllocation(14); oPickLists_Lines = oPickLists.Lines; // Item in Row 1 has two Batches and two Bin Locations oPickLists_Lines.SetCurrentLine(0); oPickLists_Lines.BatchNumbers.BatchNumber = "B1_001"; ; oPickLists_Lines.BatchNumbers.Quantity = 2; oPickLists_Lines.BatchNumbers.BaseLineNumber = 0; oPickLists_Lines.BinAllocations.BinAbsEntry = 6; oPickLists_Lines.BinAllocations.Quantity = 2; oPickLists_Lines.BinAllocations.BaseLineNumber = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0; oPickLists_Lines.BatchNumbers.Add(); oPickLists_Lines.BatchNumbers.BatchNumber = "B1_002"; ; oPickLists_Lines.BatchNumbers.Quantity = 8; oPickLists_Lines.BatchNumbers.BaseLineNumber = 0; oPickLists_Lines.BinAllocations.Add(); oPickLists_Lines.BinAllocations.BinAbsEntry = 14; oPickLists_Lines.BinAllocations.Quantity = 8; oPickLists_Lines.BinAllocations.BaseLineNumber = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 1; // Item in Row 2 has two Batches and two Bin Locations oPickLists_Lines.SetCurrentLine(1); oPickLists_Lines.BatchNumbers.BatchNumber = "B2_001"; ; oPickLists_Lines.BatchNumbers.Quantity = 4; oPickLists_Lines.BatchNumbers.BaseLineNumber = 1; oPickLists_Lines.BinAllocations.BinAbsEntry = 3; oPickLists_Lines.BinAllocations.Quantity = 4; oPickLists_Lines.BinAllocations.BaseLineNumber = 1; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0; oPickLists_Lines.BatchNumbers.Add(); oPickLists_Lines.BatchNumbers.BatchNumber = "B2_002"; ; oPickLists_Lines.BatchNumbers.Quantity = 16; oPickLists_Lines.BatchNumbers.BaseLineNumber = 1; oPickLists_Lines.BinAllocations.Add(); oPickLists_Lines.BinAllocations.BinAbsEntry = 43; oPickLists_Lines.BinAllocations.Quantity = 16; oPickLists_Lines.BinAllocations.BaseLineNumber = 1; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 1; int RetVal = oPickLists.UpdateReleasedAllocation();
- Update Pick List and Pick quantity in Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists.GetByKey(14); oPickLists_Lines = oPickLists.Lines; oPickLists_Lines.SetCurrentLine(0); oPickLists_Lines.PickedQuantity = 1; oPickLists_Lines.BatchNumbers.SetCurrentLine(0); oPickLists_Lines.BatchNumbers.BaseLineNumber = 0; oPickLists_Lines.BatchNumbers.BatchNumber = "B1_001"; ; oPickLists_Lines.BatchNumbers.Quantity = 1; oPickLists_Lines.BinAllocations.SetCurrentLine(0); oPickLists_Lines.BinAllocations.BaseLineNumber = 0; oPickLists_Lines.BinAllocations.BinAbsEntry = 6; oPickLists_Lines.BinAllocations.Quantity = 1; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0; int RetVal = oPickLists.Update();
- Update Pick List and Fully Deallocate Batches / Serial Numbers in Pick List
SAPbobsCOM.PickLists oPickLists = null; SAPbobsCOM.PickLists_Lines oPickLists_Lines = null; oPickLists = (SAPbobsCOM.PickLists)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oPickLists); oPickLists.GetReleasedAllocation(14); oPickLists_Lines = oPickLists.Lines; oPickLists_Lines.SetCurrentLine(0); oPickLists_Lines.BatchNumbers.SetCurrentLine(0); oPickLists_Lines.BatchNumbers.Quantity = 0; oPickLists_Lines.BinAllocations.SetCurrentLine(0); oPickLists_Lines.BinAllocations.Quantity = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0; oPickLists_Lines.BatchNumbers.SetCurrentLine(1); oPickLists_Lines.BatchNumbers.Quantity = 0; oPickLists_Lines.BinAllocations.SetCurrentLine(1); oPickLists_Lines.BinAllocations.Quantity = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 1; oPickLists_Lines.SetCurrentLine(1); oPickLists_Lines.BatchNumbers.SetCurrentLine(0); oPickLists_Lines.BatchNumbers.Quantity = 0; oPickLists_Lines.BinAllocations.SetCurrentLine(0); oPickLists_Lines.BinAllocations.Quantity = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 0; oPickLists_Lines.BatchNumbers.SetCurrentLine(1); oPickLists_Lines.BatchNumbers.Quantity = 0; oPickLists_Lines.BinAllocations.SetCurrentLine(1); oPickLists_Lines.BinAllocations.Quantity = 0; oPickLists_Lines.BinAllocations.SerialAndBatchNumbersBaseLine = 1; int RetVal = oPickLists.UpdateReleasedAllocation();
The above code is useful when you want to fully deallocate Batches / Serial Numbers in Pick List. If you want to partially deallocate Batches / Serial Numbers in Pick List then you have to mention Batches / Serial Numbers and Bin Locations in the code from which you want to deallocate.
New NetWeaver Information at SAP.com
Very Helpfull