Тема: Формирование отчёта
Как сформировать отчёт из скрипта?
Хочется сформировать определённый отчёт без участия пользователя.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Формирование отчёта
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сформировать отчёт из скрипта?
Хочется сформировать определённый отчёт без участия пользователя.
У IGModule есть Reports. Далее работаем с IReports, там есть ExecuteReportEx (либо ExecuteReport).
Отчет можно выбрать программно и выполнить, либо стандартно дать пользователю выбрать и выполнить его.
Примеров в поставке немного к сожалению, есть в проверке готовности такой код
Set Rpts = TpForm.Reports( False ) 'Dim Rpts As IReports if Rpts.ShowModal( "Выберите отчет" )>0 Then Rpts.ExecuteReport
Добрый день!
Не подскажите как программно выбрать и выполнить определенный отчет? Возможно ли программно закрывать модуль построения отчетов после создания отчета?
IReports это тот же самый GModule. Надо просто через Locate найти нужный вам отчет и затем его выпролнить (в примре выше это делает пользователь).
На всякий случай, любой модуль в скриптах можно исследовать через LogObject.ShowPropExplorer.
Дополнительно управлять отчетом можно через этот метод https://help.technologics.ru/7.9/TCSAPI … rtEx_9.htm
Это все понятно.
Пытаюсь сделать макрос массового формирования отчетов для выделенных номенклатурных позиций. Проблема в том, что после завершения формирования отчета, модуль построения отчетов предлагает "закрыть или нет программу". Поэтому и вопрос, как программно после окончания формирования отчета для текущей номенклатурной позиции закрывать модуль построения отчетов и переходить к следующей позиции.
https://help.technologics.ru/7.9/TCSAPI … rtEx_9.htm
ну мы передаем FileName и Wait. При этом отчет формируется в указанный файл, завершается (сам так понимаю), и по завершении возврашает управление.
Хорошо, в таком случае модуль построения отчетов самостоятельно закрывается?
В функциях набора данных установил свойство: TCSRpt.SilentMode = True
При таком параметре все равно выскакивает в конце формирования отчета окошко с вопросом закрыть программу или нет.
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 как раз и указывает на то что его вызывали в режим авто и можно на это ореинтироваться в коде отчета.
Спасибо, разобрался.
Пробовал сделать поиск шаблона отчета, но выдает ошибку
Set NMKTP = TCSActiveModule.Properties("NmkTechnology").AsIDispatch If NMKTP.Reports.Locate("XL_RPT_NAME", "Комплект-МТК", 0) Then Call NMKTP.Reports(true).ExecuteReport end if
IReports
На всякий случай, любой модуль в скриптах можно исследовать через LogObject.ShowPropExplorer.
Там свойство NAME скорей всего, этим способом можно изучить свойства.
ну и Reports требует параметры вообще то https://help.technologics.ru/7.9/TCSAPI … rts_13.htm
Там свойство NAME скорей всего, этим способом можно изучить свойства.
Да, там NAME и ID, но беда в том что NAME не уникально, и означает не наименование отчёта, а наименование бланка.
Ну так обычно необходимо же бланк или комплект выполнить. Ну и имя самому можно задать уникальное, либо по дополнительным признакам/ID поискать.
Здравствуйте. Продолжу тему.
Почему при выполнении
Call Rpts.ExecuteReportEx( Array( "FileName", "C:\TCSFiles\Temp\123.xls", "Wait", "Show" ) )
файл отчёта сохраняется с именем "Template... .xls", а не с "123.xls"?
Версия 6.3.0.0 SP5. Старый построитель отчётов.
Ну старый этого вообще не поддерживает. Это возможности только нового построителя. И то здесь скорее для 7.x (хотя в 6.3 это уже начинали делать)
Спасибо. Можно ли, в таком случае, сохранить файл отчёта с заданным именем каким-либо другим способом в версии 6.3?
Для старого вообще никак.
Хотя... там вы код вызова можете подменить и наверное переписать в нужное вам место. Тут не подскажу даже уже, так как мы его не поддерживаем.
Как получить список отчетов (находящихся в режиме Номенклатура->Номенклатурный справочник) из любого другого режима?
Если из режима Номенклатура запустить макрос set rep = TCSActiveModule.Reports(false), то отчеты закидывает в rep
а если из другого режима set rep = theApp.Nomenclatures(0).Reports(false), то отчеты не загружаются
Это просто разные модули системы. И отчеты там разные (у нас отчеты к модулям привязаны).
В АПИ нет доступа к этом модулю, только через запуск макроса можно получить.
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?
"Show" - показать отчет после формирования. Модуль формирования отчетов отображается всегда.
До версии 7.98.0.0 (10131) была ошибка, отчет отображался без параметра "Show" если не задано "FileName" и/или "Print"
До версии 7.98.0.0 (10131) была ошибка, отчет отображался без параметра "Show" если не задано "FileName" и/или "Print"
"FileName" задано, как видите, не влияет.
А то что метод Reports.ExecuteReportEx не возвращает ничего после выполнения (в справке написано что должен вернуть путь к файлу), тоже исправили?
У вас промежуточная сборка. Мы не можем точно сказать как она себя ведет. Их много очень.
В новых билдах исправления есть в этом функционале. Есть рабочий пример формирующий кучу отчетов сразу через макрос (хотя в конечном итоге для универсальности часть функций сделали в самом отчете, чтобы работал как макросе так и без, ну и сам макрос при этом упростился). Так что возможно пример не так полезен будет.
А то что метод 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" будет зовершаться ошибкой если отчет не сформирован.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Формирование отчёта