Показать сообщение отдельно
Старый 11.03.2010, 15:18   #33  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Несколько по-другому решил такую же проблему. Идея в следующем:
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);
    }

Последний раз редактировалось DSPIC; 11.03.2010 в 15:23.