I have a client who require one of the standard system reports to be modified slightly to fit their existing stationary. Instead of presenting a list of items i.e. one record per line, it must show two columns i.e. two records per line. Any suggestions how this can best be achieved? I have considered building an array or temporary table of entries and building the report from this. Is this the best approach? TIA
Take a look at “Label-Type Report Wizard” (Object Designer, Report, New). This wizard creates a report which uses an array. Probably this is the best approach. And maybe when you can use the wizard, it will be an easy report. [;)]
To be honest, I hadn’t thought about that option. I’d only considered card and tabular reports. The only problem is, which I forgot to mention before, is that the list needs to fill column A before filling column B e.g records 1-6 appear in the first column, 7-12 in the second. Don’t know yet if the array in the tabular report produced by the wizard can be fiddled with to work in this way. Thanks for the suggestion anyway. I’ll have a play with it.
quote:
Originally posted by SkippyKGS Don’t know yet if the array in the tabular report produced by the wizard can be fiddled with to work in this way.
I saw it can work that way. Just change “Number Across” to 6 and “Width” to approximately 30 in the wizard.
I want to print 6 (or however many we need) down the page, in two columns e.g. 1 7 2 8 " 5 11 6 12 rather than 1 2 3 4 5 6 7 8 9 10 11 12
You would have to read the entire table into an array an then use an Integer dataitem to print the values.
This is untested code so you will have to play about and test it Use 2 record variables Say Item1 and Item2 then Set Item1 and Item2 with the same recordset (setrange or Filter) Maybe On PreReport // Say we started with 99 Item Records Item1.RESET; Item2.RESET; IF Item1.COUNTAPPROX < 1 THEN ERROR(‘No Records To Print); x := ROUND((Item1.COUNTAPPROX / 2),1,’>’); then the data Item type Integer PreDataItem() SETRANGE(Number,1,x); // 50 Iterations OnDataItem(); IF Number = 1 THEN BEGIN IF Item1.COUNTAPPROX = 1 THEN Item2.INIT ELSE BEGIN Item2.FIND(’-’); Item2.NEXT(x); // We should have moved to the 51st Record END; // Find Record number one Item1.FIND(’-’); END ELSE BEGIN // Number Greater Than 1 // Move the first record pointer if not end of recordset IF NOT Item1.NEXT THEN // 1 to 50 Item1.INIT; // Move the second record pointer if not end of recordset // If odd record count (Init) Clear the Record as there is no record // IE: Record 100 on iteration 50 does not exist in example so empty record IF NOT Item2.NEXT THEN // 51 - 99 Item2.INIT; END; In the integer section you can just add the fields you want and set the datasource and all data types can be displayed easy. Item1.“No.” in Column One Item2.“No.” in Column Two Hope this helps!
That will save me some work. Its the kind of approach I expected to have to take. Thanks for all the input