Good afternoon,
I am very new to Crystal Reports, so am not sure where to look for this information and would appreciate if someone can point me in the right direction or tell me if what I am asking for is impossible.
One of our departments uses a field called RecordChanges to note changes made to a record. The field is text and the department stores information there about the date a change is made and the type of change, separated by commas (i know this is terribly inefficient, but it's what I have to work with). I have a Crystal Report that parses this text field and picks up the latest date and latest change made to the record. I would like to modify this report to include ALL the changes made to the record, so if the field RecordChanges of the data source has 3 dates, I would like this record to appear in my Crystal Report 3 times, once for each change that was made. How to parse the field I can figure out but where I'm stuck is how do I make the number of times a record appears equal to the number of dates found which is my {#DateFound} field?
There is a lack of details, but as far as I understood the problem and assuming that you did state in the comment that "there wouldn't ever be more than 5 changes to an order", here is a first try to tackle the situation.
I will assume that you already have a formula that "parses this text field and picks up the latest date and latest change made to the record". And that you know how to adjust this formula to pick up each of the record changes. I will name this formula as {#Parser1}.
Based on {#Parser1}, create other 4 formulas: {#Parser2}, {#Parser3}, {#Parser4}, {#Parser5}. As you probably presume, each formula must be changed to parser the Nth occurrence of the record change.
Create 5 details sections.
Put each formula in each detail section.
Suppress the detail section wich formula is null or empty.
That's it.
The limitation is that you can have at most 5 record changes.
This is an awkward solution, but it is necessary (as far as I know) since Crystal Reports works based on your data rows. It iterates over the rows, but cannot "generate" more rows by itself. If you can manipulate the data source, you can create other solutions.
You still need to do the magic trick to pickup the Nth change from the text.
Related
In forms collection, users provide me data. Most importantly in the data given is the date(s) they select (or sign up for, in my instance). I've created new tabs in the spreadsheet that are associated with the dates. I'm copying and pasting the exact information that they provide into the correct date(s) tab. Sometimes they select multiple dates. However, at this rate, I'm moving so slow and making many mistakes.
Is there a code that can duplicate what I'm doing to avoid the simple mistakes I'm making and save time?
Updated: here is the link to a mock sheet (I hope I did it right): Mock Sheet
(quick pic of what I'm working with)
https://imgur.com/a/NErREzU
Thank you for sharing your spreadsheet. Here is what I recommend:
1.) In your existing individual date sheets, select and delete whichever columns you will not be using; likewise, select and delete all rows beyond the maximum number of rows you might ever need per sheet. Keeping sheets trim is the professional standard, makes it easier to focus on the important information, and assures maximum processing speed.
2.) Delete everything from your existing individual date sheets, including the headers.
3.) Place the following formula into cell A1 of each sheet:
=FILTER({Sheet1!A:D,Sheet1!F:F},(ROW(Sheet1!A:A)=1)+(REGEXMATCH(Sheet1!E:E,"December 17, 2021")))
Adjust the date in quotation marks to match the sheet. It seems that all of your events may be happening from 5:00 - 9:00, so you don't need to include that if my assumption is correct. However, if there are different times on the same day (and will therefore be two different sheets for that day), you will need to include the start time in the formula's quotes as well, exactly as it will come in from the form (e.g., "December 17, 2021 Friday, 5:00pm"). The hyphen and end time seems it would be superfluous and can be left off.
4.) To create a new individual date sheet, simply duplicate an existing individual date sheet, rename the copy, color your header row as desired, and change the formula section between those quotes in the A1 formula (which will already be in place from the duplicate sheet.
5.) Since you will be adding further notes or other information in additional columns within each individual date sheet, be sure that you never delete information from Sheet1; otherwise, the formula-produces row information will collapse to eliminate deleted rows, and your manually entered data will not match up. For this reason, I recommend simply Hide-ing Sheet1 entirely, as this will cut down on the chance that someone may accidentally tamper with the data coming into that sheet. There is not reason to have Sheet1 showing, since all data will be included in some other sheet due to the formulas there.
The formula FILTERs in only the five target columns, which are included in the opening virtual array formed between the curly brackets { }; and it will include rows that match either one of two conditions (shown between sets of parentheses, where the plus symbol means 'OR'): either A.) the row is Row 1 (i.e., the header row information) or B.) the part in quotes can be found in Sheet1!E:E.
Looking for some advice related to data grouping and printing in Crystal Reports.
I'm working with an order confirmation form. Ideally I would create separate report pages based on a specific field value change for the 'warehouse' field. So, if any given line on an order comes from warehouse A, it prints together. Then we'd get a page break, and we'd see the form repeat for any lines coming from warehouse B.
I've inserted a new group for "warehouse" and configured the group as 'New Page Before.' But when I attempt to print I'm getting an error related to "There must be a group that matches this field". So there must be some pre-existing grouping that I'm not considering. I'm hopeful I can figure this out.
I am interested to get thoughts on overall design, and if the grouping approach I am trying to take is even the correct one.
Somewhere in your report you probably have a formula such as:
Sum({some_value}, {some_field})
where the {some_field} used to be -- but is no longer -- grouped upon.
Fix that expression to set the desired aggregation level (the 2nd argument) to a field you are actually grouping on.
I am trying to remove duplicated sections of a report. currently I am using the previous() function to do this however I am finding that this removes all references to the field passed into this function. I still want to retrieve the first section it comes across.
Thanks
In Section expert, choose the right section (Details I do suppose) click the Formula button close to the Suppress field;
Then type (you can drop field name from available fields)
{...yourfield}=previous{...yourfield}
(this mean that this section will be suppressed if some field, i.e. "id" is identical to previous one)
I would be careful doing the previous() I've used this in the past and noticed it sometimes doesn't display any of the repeated data including the original data until I found a way around it.
Instead try using a unique field for the group but also make sure your table relationships(joins) are set up correctly to reflect what data you want to return.
For example (I'm with education) so I deal with learners and qualifications.
If I want to display learner qualifications I would do it as follows:
Relationship - Learner ---> L_Quals
Create a group, grouped by Learner.learnerID
Create another group, grouped by L_Quals.QualRef
Suppress the details section
Now this will display like this:
LearnerID
-Qualref1
-Qualref2
If I was to show the qualifications in the details section and had other tables linked up this could get a little messy with repeating qualrefs and such
Hope this resolves
I’m trying to write a report using the history_table.
I want to know how would I only bring the records only to show a history if only two fields have changed ex (ss.dem1) and (ss.dem2) in the table
If anything else changes like phone or address that are in the table as well to not bring that up or suppress it in the report. I want to see the data only those 2 fields have changed and every time it has changed as a history.
This would be an example of what I'm trying to accomplish.
I also used tried to use a suppression formula but only gave me the last record and not show me the example like I would of like above
not onlastrecord and next(PATID)=PATID and next(ssdem1)=ssdem1
or
not onlastrecord and next(PATID)=PATID and next(ssdem2)=ssdem2
Any help is greatly appreciated.
On the DB side you could do a self-join and only keep the records where one of those items you're interested in has changed, ex:
select WHATEVER
from HISTORY H1, HISTORY H2
where H1.PAT_ID=H2.PAT_ID
and (H1.DEM1 <> H2.DEM1
or H1.DEM2 <> H2.DEM2
etc...)
Or, you could order the report by PAT_ID, then by the date/time of the edit and then suppress the rows where nothing changes, which sounds like what you were trying to do. If you post the exact suppression formula I might be able to see where you were going wrong. Should be something like:
not(onfirstrecord) or
({TABLE.PAT_ID}=previous({TABLE.PAT_ID})
and {TABLE.DEM1}=previous({TABLE.DEM1}) //check all fields you're concerned with for equality
and {TABLE.DEM2=previous({TABLE.DEM2})
and etc...)
I created a label report (2 columns). The fields used are, Suffix, Contact Name, Company Name, Job Title and Department – simple contact data.
The Department field is the last one and in the report of 78 records the Department field decided not to display the entire field text twice.
I have "Can Grow" set as default on all fields, I checked the margins and label width to ensure the text is not being truncated because of the labels being too wide for the margins. I modified the data in the database by abbreviating certain words and it shows the change but it still truncates after 50 characters. Other times the Department name is 80+ characters and it displays all of the data.
This problem is happening onscreen when I preview the report and also when various users print it. The default printers have not changed.
This one has me stumped. Is this an application bug (if so is there a Service Pack for CR 11.5?) or does it have anything to do with printer drivers in need of update?
Thanks in advance for your help on this puzzle.
Update
I did specify data source
The text in the database is without any special characters or anythig else that might be out of place
No I am not using Underlaying Following sections anywhere in the document
11.5.8.998 is my version of CR (lloks like I am behind - however, when I click on verify for updates it tells me there aren't any. Do you ahve a link to the SP2 download?)
No formula in the Custom string option
Mine worked by simply going to the Database Menu option: Database-->Verify Database, and the field sizes were updated
It could happen if the length of the field in the Data Source is less than your string. To check this:
In the Field Explorer right click on the data source name and choose "Show Field Type"
The length of the field is written between ( ). If it is less than your string length, you have to re-build your data source. For example, if your data source is a view, you have to drop and create it again and then verify your data base in crystal report.
Hope it helps.
Random troubleshooting thoughts. One of these could even work :)
You didn't specify your datasource, but can you preview your data before it goes into Crystal? If the actual data is randomly truncated, then the problem isn't Crystal, it's the data.
Does this data have any special characters, i.e. accents, foreign currencies, etc? That could be a problem (I don't know if this could even create problems, never used them in Crystal)
In the Section Expert, are you using the Underlaying Following Sections option for fancy formatting? If so, your 'grown' fields may be hidden by some other field in the following section.
My Crystal Reports XI Developer Edition is 11.5.12.1838 (that's service pack 2). Is your Crystal up to date?
In the Format Field pane, there is an option to make a custom Display String. Sometimes I forget I have a formula and then don't understand why it's not doing what i want.