To change Sales Invoice control document's design based on condition use following code.
Here I have created COC of salesInvoiceController class to handle designs
[ExtensionOf(classstr(SalesInvoiceController))]
final class KA_SalesInvoiceController_Extension
{
//public static void main(Args _args)
//{
// //<GEEPL>
// #ISOCountryRegionCodes
// RecordSortedList journalList;
// CustInvoiceJour custInvoiceJour;
// CustInvoiceTrans custInvoiceTrans;
// InventTable inventTable;
// EcoResProduct ecoResProduct;
// //</GEEPL>
// // <GTE><GIN>
// Common common;
// // </GTE></GIN>
// GiroPrintMgmtFormLetterController formLetterController = SalesInvoiceController::construct();
// formLetterController.parmArgs(_args);
// journalList = _args.record() ? FormLetter::createJournalListCopy(_args.record()) : _args.object();
// journalList.first(custInvoiceJour);
// dialog dialog;
// MenuFunction menuFunction;
// CustInvoiceJour custInvoiceJourUpdate;
// dialogGroup dialogGroup;
// dialogField dialogField;
// dialog = new Dialog("Is sales tax invoice?");
// Args args = new Args();
// dialogField = dialog.addField(enumStr(NoYes));
// if (dialog.run())
// {
// formLetterController.parmArgs(_args);
// if(dialogField.value() == NoYes::Yes)
// formLetterController.parmReportName(ssrsReportStr(SalesInvoiceCopy, SalesTaxInvoice)); ///sales tax invoice
// else
// formLetterController.parmReportName(ssrsReportStr(SalesInvoiceCopy, Report));
// formLetterController.parmShowDialog(true);
// formLetterController.parmDialogCaption("@SYS22766");
// formLetterController.startOperation();
// }
// next main( _args);
//}
//protected void outputReport()
//{
// SRSCatalogItemName reportDesign;
// if(this.parmReportName() == ssrsReportStr(SalesInvoiceCopy, SalesTaxInvoice))
// {
// reportDesign = ssrsReportStr(SalesInvoiceCopy, SalesTaxInvoice);
// }
// else
// {
// reportDesign = ssrsReportStr(SalesInvoiceCopy, Report);
// }
// this.parmReportName(reportDesign);
// this.parmReportContract().parmReportName(reportDesign);
// formLetterReport.parmReportRun().settingDetail().parmReportFormatName(reportDesign);
// next outputReport();
//}
}