Тема: Завершить отчет из Implement

Перед формированием отчета идет предваритеьная обработка данных в проц. Implement
как завершить отчет из этой процедуры в случае невыполнения каких-либо начальных условий?
Спасибо

Re: Завершить отчет из Implement

Ну наверное проще всего исключение кинуть из макроса. Отчет скорей всего прервется, но надо посмотреть чтобы ошибка было обработано корректно ( в смысле понятна пользователю что произошло)

Re: Завершить отчет из Implement

Что имеется в виду "исключение кинуть из макроса" из какого макроса и что за исключение?

Re: Завершить отчет из Implement

в процедуре Implement кинуть ошибку, что то типа https://forum.technologics.ru/post7829.html#p7829

Re: Завершить отчет из Implement

Мне не помогло. При возникновении ошибки прекращается выполнение процедуры Implement, но построение отчета продолжается.

Как программно отменить или прекратить именно построение отчета, который начинается после выполнения Implement?
Бывает что пользователь не выделил строку и запустил отчет, тогда он формируется по всей текущей таблице. В Implement проверка работает и сообщение пользователю выкидываю, что нужно выделить только одну строку, дальше сам завершаю выполнение Implement делением на ноль.

Re: Завершить отчет из Implement

В новой версии (и новом репортере) есть Обработчик выгрузки данных https://help.technologics.ru/7.9/TCSHelp/_717.htm.

Не уверен что это сработает со старым репортером (а если сработает нет гарантии что будет работать дальше). Все таки старый репортер только поддерживается. Но попробуйте - это самый лучшие вариант конечно.

Re: Завершить отчет из Implement

Решил проблему на старом репортере:
в модуль Reports.bas добавил процедуру OneReport

Sub OneReport()
Attribute Report.VB_ProcData.VB_Invoke_Func = "s\n14"
'
' процедура для запуска из TechnologiCS без отрисовки
' Ctrl-S
Dim ACon, ARecSet, ACount
Dim Rpt As Object

   Set ACon = CreateObject("ADODB.Connection")
   Set ARecSet = CreateObject("ADODB.Recordset")
   ACon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ActiveWorkbook.Worksheets("ComplSheet").Range("RGN_Data").Value
   ARecSet.Open "SELECT count(*) FROM RptSheet", ACon
   ACount = ARecSet.Fields(0)
   ARecSet.Close
   ACon.Close
   Set ARecSet = Nothing
   Set ACon = Nothing
   If ACount > 1 Then
       MsgBox "Отчет отменен, так как выбрано больше одного документа!", vbExclamation + vbSystemModal, "Внимание"
   else
      Set Rpt = CreateObject("CSDNRPT.Report")
      Rpt.Run Application
   end if
End Sub

В настройках отчетов, которые должны выполняться по одной строке в поле "Макро после" указал OneReport
Вариант не очень красивый, но зато пользователю не нужно будет в диспетчере задач убивать Excell при случайном запуске отчета без выделения строки

Re: Завершить отчет из Implement

Почему не красивый? в старом как раз можно так конфигурировать.

Способ что я написал, работает до (и во время) выгрузки даннных.

(изменено: , 14 января 2021 14:25:24)

Re: Завершить отчет из Implement

Не красивый, потому что после сообщения "Отчет отменен" открывается шаблон Excell, который не нужен.

Не могли бы подробнее написать по новому репортеру, как объявить обработчик? И текст обработчика с примером, как прервать выполнение отчета

Re: Завершить отчет из Implement

В демо базе отчет Извещение ГОСТ 2.503-2013(Excel) (из Архива)

Функция

Sub CheckDocument( TCSActiveModule, TCSExecutionParams )
  'Dim TCSExecutionParams as IExecutionParams
  if TCSActiveModule.SelectedRowsCount<>1 then
    TCSExecutionParams.ReturnCode = -1
    TCSExecutionParams.ReturnMessage = "Выделите один документ извещение вида <" & ALLOWED_REPORT_DOC_TYPES & ">!"
    Exit Sub
  End If
  if Not Is_Value_InArray( TCSActiveModule.p_TYPE_NOTE.DisplayText, ALLOWED_REPORT_DOC_TYPES ) Then
    TCSExecutionParams.ReturnCode = -1
    TCSExecutionParams.ReturnMessage = "Выбранный вид документа не подходит для данного отчета!"
    Exit Sub
  End If
  TCSExecutionParams.ReturnCode = 0
  TCSExecutionParams.ReturnMessage = ""
End Sub

Обработчик выгрузки данных $CheckDocument.