C Results Print Management
There are requirements to print a pick list from SAP when system creates a transfer order. Once a transfer order is created for picking, SAP has a capability of printing a Pick list on a printer based on applicable conditions provided by SAP.
Prerequisites: Printer need to be configured in SAP by BASIS team.
Light Reading is for communications industry professionals who are developing and commercializing services and networks using technologies, standards and devices such as 4G, smartphones, SDN. Printmanagement.msc uses the MSC file extension, which is more specifically known as a Microsoft Management Console Snap-in file. It is classified as a XML (Microsoft Management Console Snap-in) file, created for Windows 10 by Microsoft. The release of printmanagement.msc introduced for Windows was on in Windows Vista.
Following are the step by step configurations for printing a pick list from a transfer order.
Transfer order gets printed from the print code assigned in Warehouse management movement type. There are following important configurations that have to be configured for printing pick list from SAP.
- Spool Code
- Sort Profile
- Print Code
- Printer assignment
- Printer assigned to your Picking area/storage type.
- Assigning Print code to you warehouse movement type.
- Printing Program.
Menu: SAP Reference IMG -> Logistic Execution -> Warehouse management -> Activities -> Define Print Control or Transaction Code: OMLV
Spool Code:
Spool code controls the behavior of Print outs.
For example: Number of copies/Print immediately/Delete after print out.
No of Copies:
You can enter ‘1’ if you just want to have original document to be printed, if you want system to printout original documents & also to keep a copy for future reference enter ‘2’
Print Immediately:
The system will print immediately as soon as transfer order is created.
Switch for printing immediately. Printing is immediate if this switch is set. Otherwise the output is held in the spool.
Delete after printing:
Switch for deleting a print job. If the switch is set, the spool job is deleted immediately after printing.
Otherwise it remains in the spool file for printing and can be printed again if required.
Sort Profile
The system can print TO using SORT profile you
can provide system different option of sorting TO accoding to the criteria
mention in Sort profile. SAP has provided upto 15 sorting options system will give priority according to
the Sorting Sequence you maintained in Table.
Eg: In the table, if you enter
data as follows into the first three sort fields as follows. The system will
sort transfer orders first by transfer order item (TAPOS), next by material
number (MATNR) and finally by source storage bin (VLPLA).
Table:
Profile for Sorting in the TO Print Process
SRTF1 SRTF2 SRTF3
TAPOS MATNR VLPLA
System by default will sort in ascending order but if you want to sort in descending order activate the check boxyou can also have system to start new page when particular group gets change
EG: If you select TANUM in the the sort field, the system prints a new page whenever the transfer order
number changes.
Print Code:
Print code plays very important role in Printing TO. The print code is assign in Warehouse movement type .The print code defines the Spool(mention above),Form(layout of p), also decides if Printing for multiple transfer order or/and transfer order item can print together. You have to configure print code at the warehouse level. You can have multiple print code created for the single warehouse.
Process:- when particular warehouse movement type is trigger system identifies print code & print accordingly. Following is the configuration for the print code.
Printer Assignment
You can assign a printer to warehouse with the criteria of source storage type & destination storage type. If the material is moving from 001to 002 & TO should be printed in Printer name ‘LP01’ you need to assign Srce stor.ty ‘001’ & DestStor.ty ‘002’ & mention the printer name in printer column. In vice versa if youdon’t want the system to print on that particular printer for respective source storage type & destination storage type you have to activate ‘NoPrint’ indicator. You can assign a printer to each storage type. If you want the system to print in Source storage type printer you have to activate indicator Print ‘Src ST Type’. In form column you have to mention the layout name(form) for your print layout.
Assigning Printer to picking storage types
You can assign a printer to each storage type for each warehouse or picking areas.
Storage type
Picking areas
Last steps are assigning Print code to the warehouse movement for which pick list is required
Assigning Print code to you warehouse movement type
Printing Program
You need to have to Printing program that will print TO periodically or immediately.SAP
system provides standard printing program ‘RLVSDR40’
Transfer order (Picklist ) can also be manually printed using transaction code LT31
The New Dynamics AX improved some code parts on the print management framework using the event handlers.My goal was to add my custom report design without overlaying the standard code.
Scenario:
You have created a new report design for a report managed through the print management and you want to choose the report design from the form setup.
What we have in the standard system?
First of all, the code in AX 7 has a little bit changed and it's more affordable to be extended using event handlers.
For those who are not aware, when you open the form setup UI (Accounts receivable > Setup > Forms > Form setup), and, in the General Tab after you clicked on 'Print Management' button, AX instantiate the PrintMgmtSetupUICtrl to populate the PrintMgmtReportFormat table with all the standard reports design.
In this way you can pick up those records in the print management form, awesome!
PrintMgmtSetupUICtrl calls the static method 'Populate' from the PrintMgmtReportFormat class that in turn calls the ... (it sounds like the first pages form 'Silmarillion'...i dont wanna bother you with all the round trip, this is will be a your personal fun!).
The important things is that we have a delegate we can subscribe in order to call our methods and create our personal report design records in the PrintMgmtReportFormat table.
The class
C Results Print Management Tool
PrintMgmtReportFormatPublisher exposes the delegate notifyPopulate().Here we are, we need to subscribe this and the standard system already use this pattern:
- {
- /// Event handler for populating the PrintMgmtReportFormat table.
- [SubscribesTo(classstr(PrintMgmtReportFormatPublisher), delegatestr(PrintMgmtReportFormatPublisher, notifyPopulate))]
- {
- }
Our class will sound like this:
- {
- [SubscribesTo(classstr(PrintMgmtReportFormatPublisher), delegatestr(PrintMgmtReportFormatPublisher, notifyPopulate))]
- {
- Tutorial_PrintMgmtReportFormatSubscriber::populate();
- {
- #ISOCountryRegionCodes
- LogisticsAddressCountryRegionISOCode isoCountryCode = SysCountryRegionCode::countryInfo();
- LogisticsAddressCountryRegionId countryRegionId = SysCountryRegionCode::getCountryRegionIdByIsoCode(isoCountryCode);
- int added =0;
- void addOther(
- PrintMgmtReportFormatName _name,
- PrintMgmtReportFormatCountryRegionId _countryRegionId)
- added += Tutorial_PrintMgmtReportFormatSubscriber::add(_type, _name, _description, _countryRegionId,false)?1:0;
- }
- // here add your report designs, i didnt bound the record to a specific country region, if you want you can do it, just use the variable 'CountryRegionId' instead the #NoCountryRegionId (ps don't use the macro, they are evil)
- addOther(PrintMgmtDocumentType::SalesFreeTextInvoice, ssrsReportStr(FreeTextInvoice, ReportCustom), ssrsReportStr(FreeTextInvoice, ReportCustom), #NoCountryRegionId);
- // just a check between the reports that the system tried to add and the added ones, if you need it.
- }
- privatestaticboolean add(
- PrintMgmtReportFormatName _name,
- PrintMgmtReportFormatCountryRegionId _countryRegionId,
- , PrintMgmtSSRS _ssrs = PrintMgmtSSRS::SSRS
- {
- boolean isDuplicateFound;
- boolean isSystemFormatWithDifferentDescriptionFound;
- #PrintMgmtSetup
- isSystemFormatWithDifferentDescriptionFound = _system &&(selectfirstOnly RecId from printMgmtReportFormat
- && printMgmtReportFormat.Description!= _description
- // If the format no longer matches up with the existing system formats, change them all to
- // non-system formats. This ensure existing links / setup will not be broken, but also provides
- if(isSystemFormatWithDifferentDescriptionFound)
- update_recordSet printMgmtReportFormat
- where printMgmtReportFormat.DocumentType _type
- && printMgmtReportFormat.Description!= _description
- }
- isDuplicateFound =(select RecId from printMgmtReportFormat
- && printMgmtReportFormat.Description _description
- && printMgmtReportFormat.CountryRegionId _countryRegionId).RecId!=0;
- if(isDuplicateFound)
- if(isSystemFormatWithDifferentDescriptionFound)
- // We must ensure that the system report always matches the country context
- // of the company. If the the country context has been chagned multiple times
- // such that the report format already exists, we must change it back to system.
- setting System =true
- && printMgmtReportFormat.Description _description
- && printMgmtReportFormat.CountryRegionId _countryRegionId;
- else
- returnfalse;
- }
- {
- printMgmtReportFormat.clear();
- printMgmtReportFormat.Name= _name;
- printMgmtReportFormat.CountryRegionId= _countryRegionId;
- printMgmtReportFormat.ssrs= _ssrs;
- }
- returntrue;
- }
Now, from the standard class i have copied the static method populate() and add() in the our new class Tutorial_PrintMgmtReportFormatSubscriber since in the standard class PrintMgmtReportFormatSubscriber they are declared as private and i didn't find useful create my own methods to accomplish the task(In future i hope to see them as 'public' because i wouldn't like to mantain my version of standard methods).
That's all, i hope you find this useful, next time we'll get a step on how to get back your custom report design as default report disegn using event handler and without overylaying the standard code.