Страница 1 из 1

Вывод отчета запуском из командной строки

Добавлено: 22 апр 2016, 03:10
Maks_Che09
Добрый день!
Программа: Version 2007.2 from 19 June 2007.
Прописал и подготовил отчет.
Имеется ли возможность выводить отчет запуском из командной строки, чтобы избежать процедуры открытия программы, открытия отчета, запуска... как говорится в один клик?

Re: Вывод отчета запуском из командной строки

Добавлено: 22 апр 2016, 10:23
Леонид
Здравствуйте!

Это никак не связано с отчётной системой. Вы, разумеется может сделать всё, что угодно.

Если у вас GUI приложение, то только так:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Stimulsoft.Report;
using Stimulsoft.Report.Components;
using Stimulsoft.Report.Viewer;

namespace StiTest
{
  static class Program
  {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
      string[] args = Environment.GetCommandLineArgs();

      string param0 = string.Empty;
      string param1 = string.Empty;

      // проверим количество нужных входных параметров
      if (args.Count() == 2)
      {
        param0 = args[0]; // 1-й параметр (имя исполняемого exe файла проекта)
        param1 = args[1].ToUpper(); // 2-й параметр (реально наш первый входной параметр из командной строки)
      }

      // 
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);

      // создаём форму
      Form frmMain = new Form();

      // проверяем нужное значение параметра командной строки
      if (param1 == "NOGUI")
      {
        StiReport report = new StiReport();
        report.Load("test.mrt");

        StiViewerControl stiPreview = new StiViewerControl()
        {
          Dock = DockStyle.Fill,
          Visible = true,

          PreviewSettings = StiPreviewSettings.All,
          ShowEditor = true,
          IsEditorActivated = true,
          ShowPageDesign = true
        };

        // assign report object to preview control
        stiPreview.Report = report;
        stiPreview.FirstPage();
        stiPreview.SetZoom(100);

        frmMain.Controls.Add(stiPreview); // add created preview control to the form
        frmMain.WindowState = FormWindowState.Maximized; // set form maximized

        // start report
        report.Render();
      }

      Application.Run(frmMain);
    }
  }
}
Это связано с тем, что, даже если у вас, допустим консольное приложение, то нужно либо создавать какой-то поток, чтобы он "висел" и не завершал основной процесс, либо, как в описанном выше примере, у вас графическое приложение, но вы создаёте форму, загружаете отчёт, рендерите его, создаёт preview, который на форме, и выводите форму, а потом закрываете.

Если вам нужно просто отрендерить отчёт, всё так же используя командную строку, но даже без графики совсем, то так:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Stimulsoft.Report;
using Stimulsoft.Report.Components;
using Stimulsoft.Report.Viewer;

namespace StiTest
{
  static class Program
  {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
      string[] args = Environment.GetCommandLineArgs();

      string param0 = string.Empty;
      string param1 = string.Empty;

      // проверим количество нужных входных параметров
      if (args.Count() == 2)
      {
        param0 = args[0]; // 1-й параметр (имя исполняемого exe файла проекта)
        param1 = args[1].ToUpper(); // 2-й параметр (реально наш первый входной параметр из командной строки)
      }

      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);

      // проверяем нужное значение параметра командной строки
      if (param1 == "NOGUI")
      {
        StiReport report = new StiReport();
        report.Load("test.mrt");
        report.Render(false);

        // делаем что-то с отчётом, например экспорт в Excel
      }

     // выход из приложения
    }
  }
}