Показать сообщение отдельно
Старый 25.11.2019, 19:28   #1  
AnGor is offline
AnGor
Участник
Аватар для AnGor
 
97 / 46 (2) +++
Регистрация: 30.08.2007
Адрес: Ulm
Записей в блоге: 6
! Временные таблицы в SSRS отчетах
Скорее всего известный факт, но вдруг кто не знал
Вот такой код заполнит временную таблицу, но отчет ничего не покажет:
X++:
class goaSsrsReport1 extends SrsReportDataProviderPreProcessTempDB
{
    GoaTmpTable  goaTmpTable;

    [SRSReportDataSetAttribute(tablestr(GoaTmpTable ))]
    public GoaTmpTable getGoaTmpTable()
    {
        select goaTmpTable;
        return goaTmpTable;
    }

    public void processReport()
    {
         goaTmpTable = this.populateTmp();
    }

    GoaTmpTable  populateTmp()
    {
         GoaTmpTable  locGoaTmpTable;
         .....
         return locGoaTmpTable;
    }

}
а вот так покажет:
X++:
class goaSsrsReport1 extends SrsReportDataProviderPreProcessTempDB
{
    GoaTmpTable  goaTmpTable;

    [SRSReportDataSetAttribute(tablestr(GoaTmpTable ))]
    public GoaTmpTable getGoaTmpTable()
    {
        select goaTmpTable;
        return goaTmpTable;
    }

    public void processReport()
    {
         this.populateTmp(goaTmpTable);
    }

    void populateTmp(GoaTmpTable  _GoaTmpTable )
    {
         ..... ////inserting into _GoaTmpTable
    }

}
оказывается методы с атрибутом SRSReportDataSetAttribute создают в SQL новую таблицу (временную), которая привязывается к SSRS.
А такая конструкция, типа goaTmpTable = this.populateTmp(), создаёт новый экземпляр временной таблицы и связь goaTmpTable с SSRS теряется.
За это сообщение автора поблагодарили: Logger (1), dech (2).