A couple years ago I had performed updates to revenue elements (indirectly) via script. The changes had to be initiated as sublist updates to the Revenue Arrangement record.
For my particular use case I was updating Start/End dates from the Sales Order to the invoice and revenue arrangement lines. If I needed I could have run csv imports on my Sales Orders (scripts/workflows enabled) and updated all of the records. You don't necessarily need to go this exact route (starting at SO) if you aren't updating anything on the Sales Order. Perhaps a more direct update the the Revenue Arrangement is appropriate, but you and your team would know best.
At the moment I don't really have access to a valid account to test this on, but you or a developer can validate this concept in your
sandbox using the browser console. Don't be messing around in production until you validate that you are getting the expected results in sandbox. If it's important enough I would even consider refreshing the sandbox environment to have an accurate representation for the business to review and approve whatever fix is attempted.
• If you can do it in the UI then you can typically do it with a script, though I suppose there are plenty of exceptions...
• If you cannot do it in the UI, then you probably want to consider another solution anyway
Below is a SS 1.0 snippet for setting and getting the first line of an arrangement in the console. Just put replace the bolded internal ID placeholders with the actual internal IDs from your environment.
var rec = nlapiLoadRecord('revenuearrangement',_*REVENUE_ARRANGEMENT_INTERNAL_ID*_);
var count = rec.getLineItemCount('revenueelement');
for(var i=1; i<=count; i++){
rec.selectLineItem('revenueelement', 1);
rec.setCurrentLineItemValue('revenueelement', 'recognitionaccount', _*ACCOUNT_INTERNAL_ID*_);
rec.commitLineItem('revenueelement');
var accountGet = rec.getLineItemValue('revenueelement', 'recognitionaccount', 1);
}
nlapiSubmitRecord(rec)
accountGet