Несколько по-другому решил такую же проблему. Идея в следующем:
1) Копируем шаблон отчета (*.xlt) во временную папку (WinApi::getTempPath()), одновременно присвоив ему нужное имя
2) Печатаем отчет на основе скопированного и переименованного шаблона из временной папки
3) Удаляем скопированный шабон.
Способ чуть более тяжелее, но и "чуть" более надежнее, при этом позволяет делать SaveAs с управляемым именем.
Недостатоки
1. Копирование файла
2. Excel, собако, таки приписывает в конце единичку
X++:
FileNameOpen copyAndRenameTemplate(FileNameOpen _templateFilePath, FileName _newFileName)
{
FilePath filePath;
FileName fileName;
FileExtension fileExt;
Counter fileIdx;
;
[filePath, fileName, fileExt] = fileNameSplit(_templateFilePath);
tmpTempaleFilePath = WinApi::getTempPath() + _newFilename + fileExt;
if ( WinApi::fileExists(_templateFilePath) && WinApi::fileExists2(WinApi::getTempPath()) )
{
tmpTempaleFilePath = WinApi::getTempPath() + _newFilename + fileExt;
WinApi::copyFile(_templateFilePath, tmpTempaleFilePath, true);
}
return tmpTempaleFilePath;
}
X++:
void deleteTmpTempaleFile()
{
;
if (WinApi::fileExists(tmpTempaleFilePath))
WinApi::deleteFile(tmpTempaleFilePath);
}
X++:
try
{
reportTemplateFile = this.copyAndRenameTemplate(reportTemplateFile, newFileName);
excel = new ComExcelDocument_RU();
excel.open(reportTemplateFile, false);
this.deleteTmpTempaleFile();
this.printReport();
excel.visible(true);
}