Тема: Формирование отчёта

Как сформировать отчёт из скрипта?
Хочется сформировать определённый отчёт без участия пользователя.

Re: Формирование отчёта

У IGModule есть Reports. Далее работаем с IReports, там есть ExecuteReportEx (либо ExecuteReport).

Отчет можно выбрать программно и выполнить, либо стандартно дать пользователю выбрать и выполнить его.

Примеров в поставке немного к сожалению, есть в проверке готовности такой код

    Set Rpts = TpForm.Reports( False )
    'Dim Rpts As IReports
    if Rpts.ShowModal( "Выберите отчет" )>0 Then Rpts.ExecuteReport
Спасибо сказали: mtrc731

Re: Формирование отчёта

Добрый день!
Не подскажите как программно выбрать и выполнить определенный отчет? Возможно ли программно закрывать модуль построения отчетов после создания отчета?

Re: Формирование отчёта

IReports это тот же самый GModule. Надо просто через Locate найти нужный вам отчет и затем его выпролнить (в примре выше это делает пользователь).

На всякий случай, любой модуль в скриптах можно исследовать через LogObject.ShowPropExplorer.

Дополнительно управлять отчетом можно через этот метод https://help.technologics.ru/7.9/TCSAPI … rtEx_9.htm

Re: Формирование отчёта

Это все понятно.
Пытаюсь сделать макрос массового формирования отчетов для выделенных номенклатурных позиций. Проблема в том, что после завершения формирования отчета, модуль построения отчетов предлагает "закрыть или нет программу". Поэтому и вопрос, как программно после окончания формирования отчета для текущей номенклатурной позиции закрывать модуль построения отчетов и переходить к следующей позиции.

Re: Формирование отчёта

https://help.technologics.ru/7.9/TCSAPI … rtEx_9.htm
ну мы передаем FileName и Wait.  При этом отчет формируется в указанный файл, завершается (сам так понимаю), и по завершении возврашает управление.

Re: Формирование отчёта

Хорошо, в таком случае модуль построения отчетов самостоятельно закрывается?
В функциях набора данных установил свойство: TCSRpt.SilentMode = True
При таком параметре все равно выскакивает в конце формирования отчета окошко с вопросом закрыть программу или нет.

Re: Формирование отчёта

Sub FormMacro_T1(TCSActiveModule) 'T1
  Set Rpts = TCSActiveModule.Reports( False )
 'Dim Rpts As IReports
  if Rpts.ShowModal( "Выберите отчет" )>0 Then
    Call Rpts.ExecuteReportEx( Array( "FileName", "C:\Temp\1.xlsx", "Wait" ) )
    Call theApp.ShowMessageBox( "", "Done!" )
  end if
End Sub

У меня отработало, вопрос был - но это в самом отчете уже написано, его надо просто доработать тогда. Подозреваю что
SilentMode  как раз и указывает на то что его вызывали в режим авто и можно на это ореинтироваться в коде отчета.

(изменено: vitaly576, 8 апреля 2021 16:04:35)

Re: Формирование отчёта

Спасибо, разобрался.
Пробовал сделать поиск шаблона отчета, но выдает ошибку

 
Set NMKTP = TCSActiveModule.Properties("NmkTechnology").AsIDispatch
If NMKTP.Reports.Locate("XL_RPT_NAME", "Комплект-МТК", 0) Then

 Call NMKTP.Reports(true).ExecuteReport

end if

Re: Формирование отчёта

Олег Зырянов пишет:

IReports
На всякий случай, любой модуль в скриптах можно исследовать через LogObject.ShowPropExplorer.

Там свойство NAME скорей всего, этим способом можно изучить свойства.

Re: Формирование отчёта

ну и Reports требует параметры вообще то https://help.technologics.ru/7.9/TCSAPI … rts_13.htm

Re: Формирование отчёта

Спасибо, все заработало.

Re: Формирование отчёта

Там свойство NAME скорей всего, этим способом можно изучить свойства.

Да, там NAME и ID, но беда в том что NAME не уникально, и означает не наименование отчёта, а наименование бланка.

Re: Формирование отчёта

Ну так обычно необходимо же бланк или комплект выполнить. Ну и имя самому можно задать уникальное, либо по дополнительным признакам/ID поискать.

(изменено: Шишкина Наталия, 7 сентября 2021 10:56:00)

Re: Формирование отчёта

Здравствуйте. Продолжу тему.
Почему при выполнении
Call Rpts.ExecuteReportEx( Array( "FileName", "C:\TCSFiles\Temp\123.xls", "Wait", "Show" ) )

файл отчёта сохраняется с именем "Template... .xls", а не с "123.xls"?

Версия 6.3.0.0 SP5. Старый построитель отчётов.

Re: Формирование отчёта

Ну старый этого вообще не поддерживает. Это возможности только нового построителя. И то здесь скорее для 7.x (хотя в 6.3 это уже начинали делать)

Спасибо сказали: Шишкина Наталия1

Re: Формирование отчёта

Спасибо. Можно ли, в таком случае, сохранить файл отчёта с заданным именем каким-либо другим способом в версии 6.3?

Re: Формирование отчёта

Для старого вообще никак.

Хотя... там вы код вызова можете подменить и наверное переписать в нужное вам место. Тут не подскажу даже уже, так как мы его не поддерживаем.

Спасибо сказали: Шишкина Наталия1

Re: Формирование отчёта

Как получить список отчетов (находящихся в режиме Номенклатура->Номенклатурный справочник) из любого другого режима?
Если из режима Номенклатура запустить макрос set rep = TCSActiveModule.Reports(false), то отчеты закидывает в rep
а если из другого режима set rep = theApp.Nomenclatures(0).Reports(false), то отчеты не загружаются

Re: Формирование отчёта

Это просто разные модули системы. И отчеты там разные (у нас отчеты к модулям привязаны).
В АПИ нет доступа к этом модулю, только через запуск макроса можно получить.

Re: Формирование отчёта

TCS 7.98.0.0 (4996)

Call Reports.ExecuteReportEx( Array( "FileName", "C:\Report.xls", "Wait") )
Call Reports.ExecuteReportEx( Array( "FileName", "C:\Report.xls", "Wait", "Show") )

почему при наличии и при отсутствии "Show" процесс выполнения ничем не отличается?
Ожидал что при отсутствии "Show" и репортер и файл excel не будут показываться, ну хотя бы сам отчёт закрывался по завершении (окошко excel с отчётом). Что должно меняться при отсутствии Show?

Re: Формирование отчёта

"Show" - показать отчет после формирования. Модуль формирования отчетов отображается всегда.
До версии 7.98.0.0 (10131) была ошибка, отчет отображался без параметра "Show" если не задано "FileName" и/или "Print"

Re: Формирование отчёта

Виктор Бебякин пишет:

До версии 7.98.0.0 (10131) была ошибка, отчет отображался без параметра "Show" если не задано "FileName" и/или "Print"

"FileName" задано, как видите, не влияет.
А то что метод Reports.ExecuteReportEx не возвращает ничего после выполнения (в справке написано что должен вернуть путь к файлу), тоже исправили?

Re: Формирование отчёта

У вас промежуточная сборка. Мы не можем точно сказать как она себя ведет. Их много очень.

В новых билдах исправления есть в этом функционале. Есть рабочий пример формирующий кучу отчетов сразу через макрос (хотя в конечном итоге для универсальности часть функций сделали в самом отчете, чтобы работал как макросе так и без, ну  и сам макрос при этом упростился). Так что возможно пример не так полезен будет.

Re: Формирование отчёта

А то что метод Reports.ExecuteReportEx не возвращает ничего после выполнения (в справке написано что должен вернуть путь к файлу), тоже исправили?

Исправили описание в справке. Процедура ничего не возвращает, но может сгенерировать исключение.
Вы сами задаете имя файла через "FileName". Чтобы использовать файл, необходимо подождать "Wait".

  const fileName = "C:\Report.xls"
  on error resume next
  Call Reports.ExecuteReportEx( Array( "FileName", fileName, "Wait") )
  if err then
    theApp.ShowErrorMessage "Ошибка формирования отчета" & vbNewLine & err.Description
  else
    ' файл "fileName" создан и сним можно работать
  end if
  on error goto 0

Примерно таким должен быть код выполнения отчета, но сейчас процедура может завершиться без ошибки, а файл может отсутствовать или быть устаревшим. Поэтому перед формиование отчета лучше удать файл а после проверить существует ли он. В будуще исправим ошибку и прорцедура с параметром "Wait" будет зовершаться ошибкой если отчет не сформирован.