С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 18
1
Delphi 6-7

Delphi + FastReport: предварительный просмотр

01.08.2018, 07:28. Показов 2764. Ответов 7
Метки нет (Все метки)

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

При этом в одном случае выводит на предварительный просмотр сразу все документы, во втором вывдоит только один документ. Подскажите в чем может быть причина? Думаю на то, что у них разные формы отчетов и в дизайнере FastReport просто нужно поменять где-то какой-то параметр, но пока найти его не смог.

Выборка из БД:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
procedure TPretenziiFrm.N20Click(Sender: TObject);
var
  i: integer;
  qq: TADOQuery;
  s, _str, s_curr: string;
begin
 
try
  // 1.формир-е списка
  qq := TADOQuery.Create(self);
  qq.Connection := DM_GlobalConn.adocMSSQL;
  qq.CommandTimeout:=1200;
 
  try
    // очистка врем.табл.
    qq.SQL.Clear;
    qq.SQL.Add('delete from rep.Sprmirsud_list where z_userinfo='''+OptionsUser.login_name+'''');
    qq.ExecSQL;
 
    _str:='insert into rep.Sprmirsud_list(id_customer,z_userinfo) values(';
    qq.SQL.Clear;
 
    IF (Sender as TMenuItem).Tag = 120 then   // для списка
    begin
    DM.dst_Pretenzii.First;
    for i := 0 to cxCustomer.DataController.FilteredRecordCount - 1 do
      begin
        s:=VarToStr(cxCustomer.DataController.Values[cxCustomer.DataController.FilteredRecordIndex[i], 0]);
        s_curr:=_str + s + ',''' + OptionsUser.login_name + ''')';
        qq.SQL.Add(s_curr);
      end;
    end;
 
    IF (Sender as TMenuItem).Tag = 121 then   //для единичного ЛС
    begin
      s:=VarToStr(cxCustomer.DataController.Values[cxCustomer.DataController.FocusedRecordIndex, 0]);
      s_curr:=_str + s + ',''' + OptionsUser.login_name + ''')';
      qq.SQL.Add(s_curr);
    end;
    qq.ExecSQL;
 
    except on E: Exception do
    begin
      ShowMessage(E.Message);
      Exit;
    end;
    end;
 
    case OptionsUser.id_work_group of
    9000: MyPrintStr.fr_name := 'Spravmidrsud';
    9100,9200: MyPrintStr.fr_name := 'Spravmidrsud_ny';
    end;
    MyPrintStr.print_NameFile := 'Sud_'+DateToStr(Now());
    PrintSpravmirsudPret;
 
  finally
    FreeAndNil(qq);
  end;
 
end;
Процедура PrintSpravmirsudPret:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure PrintSpravmirsudPret;
begin
  if DMPrint.dst_Print1.Active then DMPrint.dst_Print1.Close;
  DMPrint.dst_Print1.CommandText := 'exec rep.p_sprmirsudPret @login_name=:login_name';
  DMPrint.dst_Print1.Parameters.ParamByName('login_name').Value := OptionsUser.login_name;
  DMPrint.dst_Print1.Open;
 
  DMPrint.frxPDFExport1.FileName := MyPrintStr.print_NameFile;
  DMPrint.frxDOCXExport1.FileName := MyPrintStr.print_NameFile;
 
  DMPrint.frxReport1.LoadFromFile(OptionsUser.print_path + MyPrintStr.fr_name + '.fr3');
  DMPrint.frxReport1.ShowReport;
  DMPrint.dst_Print1.Close;
end;
К слову, в форме отчета, которую использует этот код, 2 старницы (выводит только один очтет).

В форме, которая выводит отчеты разом (как мне и нужно) - страница одна.

Заранее благодарю за ответы.

Добавлено через 5 минут
Сразу скажу пареметр ClearLastReport не дает эффекта
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2018, 07:28
Ответы с готовыми решениями:

Реализовать предварительный просмотр отчета
Вообщем хочу сделать быстрый отчет, точнее предварительный просмотр отчета как мне сделать? не...

Предварительный просмотр отчета через Excel
Здравствуйте, проблема:подскажите как в Delphi перед выгрузкой в Excel выводить предварительный...

Предварительный просмотр печати
Здравствуйте. Подскажите пожалуйста, как правильно организовать предварительный просмотр и какие...

OLE объект MS Word 2000: нет строки состояния, не доступны предварительный просмотр и печать с диалогом выбора принтера.
Создаю OLE - объект для MS Word, Отоброжаю его. Проблема: В контейнере нет строки состояния, а...

7
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
01.08.2018, 07:57 2
ну причина очевидно в том, что если мы выбрали один пункт меню, помеченный тегом 120, то во временную таблицу в цикле заносятся все выделенные строки cxCustomer
а в другом случае (121) только текущая строка

думаю, что отчет все-таки один, просто повторяет нужный бэнд столько раз, сколько записей в rep.Sprmirsud_list
0
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 18
01.08.2018, 08:09  [ТС] 3
В таблицу rep.Sprmirsud_list, как и должгы, попадают все строки из cxCustomer, проверял.

Вот идентичная процедура, при которой в окно предварительного просмотра попадают все отчеты по всем строкам из cxCustomer:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure TPretenziiFrm.N19Click(Sender: TObject);
var
  qq: TADOQuery;
  s, _str, s_curr: string;
  i: integer;
 
begin
   try
  // 1.формир-е списка
  qq := TADOQuery.Create(self);
  qq.Connection := DM_GlobalConn.adocMSSQL;
  qq.CommandTimeout:=1200;
 
  try
    // очистка врем.табл.
    qq.SQL.Clear;
    qq.SQL.Add('delete from rep.Claim_list where z_userinfo='''+OptionsUser.login_name+'''');
    qq.ExecSQL;
 
    _str:='insert into rep.Claim_list(id_customer,z_userinfo) values(';
 
    qq.SQL.Clear;
    IF (Sender as TMenuItem).Tag = 122 then  //для списка
    begin
      DM.dst_Pretenzii.First;
      for i := 0 to cxCustomer.DataController.FilteredRecordCount - 1 do
      begin
        s:=VarToStr(cxCustomer.DataController.Values[cxCustomer.DataController.FilteredRecordIndex[i], 0]);
        s_curr:=_str + s + ',''' + OptionsUser.login_name + ''')';
        qq.SQL.Add(s_curr);
      end;
    end;
    IF (Sender as TMenuItem).Tag = 123 then // для единичного ЛС
    begin
      s:=VarToStr(cxCustomer.DataController.Values[cxCustomer.DataController.FocusedRecordIndex, 0]);
      s_curr:=_str + s + ',''' + OptionsUser.login_name + ''')';
      qq.SQL.Add(s_curr);
    end;
    qq.ExecSQL;
 
  except on E: Exception do
  begin
    ShowMessage(E.Message);
    Exit;
  end;
  end;
 
 
  // 2.формир-е претензий
  MyPrintStr.fr_name:='Claim';
  MyPrintStr.print_NameFile := 'Cl_'+DateToStr(Now());
  PrintDebtClaim;
 
 finally
  FreeAndNil(qq);
 end;
 
end;
Процедура PrintDebtClaim:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure PrintDebtClaim;
begin
  if DMPrint.dst_Print1.Active then DMPrint.dst_Print1.Close;
  DMPrint.dst_Print1.CommandText := 'exec rep.p_Debt_claim @login_name=:login_name';
  DMPrint.dst_Print1.Parameters.ParamByName('login_name').Value := OptionsUser.login_name;
//  DMPrint.dst_Print1.Parameters.ParamByName('id_customer').Value := CustInfo.id_customer;
  DMPrint.dst_Print1.Open;
 
  DMPrint.frxPDFExport1.FileName := MyPrintStr.print_NameFile;
  DMPrint.frxDOCXExport1.FileName := MyPrintStr.print_NameFile;
 
  DMPrint.frxReport1.LoadFromFile(OptionsUser.print_path + MyPrintStr.fr_name + '.fr3');
  DMPrint.frxReport1.ShowReport;
  DMPrint.dst_Print1.Close;
end;
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
01.08.2018, 08:46 4
давайте с терминологией разбираться
Цитата Сообщение от SergeyBudilin Посмотреть сообщение
выводит на предварительный просмотр сразу все документы,
что это значит?

у вас есть ОДИН отчет. как он устроен мы не знаем. обычно считается, что это ОДИН документ.

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

в чем проблема? в использовании отладчика??
0
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 18
01.08.2018, 13:12  [ТС] 5
С этим разобрался, в форме отчета данный были не в MasterData, а в ReportTitle. Теперь встал другой вопрос, у меня отчет на двух страницах и фаст репорт выводит сначала все первые страницы, после все вторые. Как бы теперь еще сделать чтобы он выводил по две страницы на строку датасета
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
01.08.2018, 19:37 6
Лучший ответ Сообщение было отмечено SergeyBudilin как решение

Решение

переделать отчет нормально и все
чтобы данные были в бэндах а не в страницах
0
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 18
02.08.2018, 07:15  [ТС] 7
Цитата Сообщение от krapotkin Посмотреть сообщение
переделать отчет нормально
это и пытаюсь сделать, только теперь не могу нигде найти ответ, как мне один бенд сделать на 2 страницы? у меня документ - заявление на 2 страницы. Это статичный текст с вставками некоторых данных из БД... И таких документов (по две страницы) должно выводиться стлько, сколько строк в датасете..

Добавлено через 29 минут
Задача решена!
В File/PageSettings/OtherOptions поставил галочку Large Height in Design Mode и вставил весь свой текст в один большой бэнд, который уже потом сам разбился на страницы. Теперь все работает как надо.
Спасибо большое за ответы!
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
02.08.2018, 10:24 8
так вот давайте это обсуждать, а не разные неведомые штуки )))

берем Master бэнд. пишем туда одно заявление
к нему делаем Child band!
пишем туда второе заявление
оба бенда помечаем начинать со следующей страницы (не помню точно где там это, найдете. не найдете, напишете)

все

Добавлено через 39 секунд
вариант с одним бендом не обязательно напечатает заявления на разных страницах
0
02.08.2018, 10:24
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2018, 10:24
Помогаю со студенческими работами здесь

Delphi и FastReport
Нужно сгенерировать отчёт. В отчёте должны содержаться следующие строки: Первые 4 столбца - эти...

Delphi+Fastreport
Всем привет. Пишу отчёт в Delphi используя FastReport. Есть затык, выходят не все данные, должно...

Delphi + FastReport
Вопрос такой. Как можно отправить в отчет данные из формы? Например отобразить в отчете текст...

Delphi + FastReport, компиляция
Здравствуйте, очень нужна Ваша помощь. Вопрос в следующем: нужно выполнить работу по построению...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru