Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
Нужен совет. Как все это проще (точнее правильнее) сделать. Есть обработчик, который формирует отчет, но мне не нравится код.
Как это можно сделать правильно, а не через такие костыли?

var theme_array: array of integer;
tmp_array: array of string;
i:integer;
tmp:string;
SQLText:string;
sdate,sdate2,sdate3,sdate4:string;
k:integer;
begin
//Приведение дат к формату БД
  sdate:=''; DateTimeToString(sdate,'yyyy-mm-dd',sDateEdit1.date);
  sdate2:=''; DateTimeToString(sdate2,'yyyy-mm-dd',sDateEdit2.date);
  sdate3:=''; DateTimeToString(sdate3,'yyyy-mm-dd',sDateEdit3.date);
  sdate4:=''; DateTimeToString(sdate4,'yyyy-mm-dd',sDateEdit4.date);

begin
 // Получаем список источников поступления
  GetInfoRepSQL('SELECT ist1 FROM register GROUP BY ist1 ORDER BY ist1 '); // Выполнение запроса с Open
  //Определяем размер массивов
  SetLength(tmp_array, Form1.ZReport.RecordCount);
  Form1.ZReport.First;
    while not Form1.ZReport.Eof do
      begin     // записываем в массив 
        tmp_array[Form1.ZReport.RecNo-1]:=Form1.ZReport.FieldByName('ist1').AsString;
        Form1.ZReport.Next;
      end;

EXESQL('TRUNCATE TABLE reports_template') ;  // Очищаем таблицу отчета, запрос типа EXE

 for i:=Low(tmp_array) to High(tmp_array) do
begin
//подсчет сумм по источнику из массива в 2-ух периодах, формирование запроса
SQLText:='SELECT ist1,count(*) AS all0, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''УДОВЛЕТВОРЕНО'')) AS ud0, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''РАЗЪЯСНЕНО'')) AS raz0,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''ОТКАЗАHО'')) AS otk0,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''УДОВЛЕТВОРЕНО'')) AS ud1, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''РАЗЪЯСНЕНО'')) AS raz1,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''ОТКАЗАHО'')) AS otk1,';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (control=1) AND (resultview='''')) AS view0, ';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (control=1) AND (resultview='''')) AS view1, ';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''')) AS all1 ';

SQLText:=SQLText +' FROM register WHERE (ist1 = '''+tmp_array[i]+''')  AND (datecreate between '''+sdate+''' AND '''+sdate2+''')';

GetInfoRepSQL(SQLText);  // Выполнение запроса с Open

//Инсертим результат во временную таблицу отчета
with Form1.ZQWork do
  begin
  Active:=false;
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO reports_template');
  SQL.Add('(naim,all0,all1,view0,view1,ud0,ud1,raz0,raz1,otk0,otk1) ');
  SQL.Add('VALUES (');
  SQL.Add(':naim,:all0,:all1,:view0,:view1,:ud0,:ud1,:raz0,:raz1,:otk0,:otk1)');
  Prepare;
ParamByName('naim').Value:=Form1.ZReport.FieldByName('ist1').AsString;
ParamByName('all0').Value:=Form1.ZReport.FieldByName('all0').AsString;
ParamByName('all1').Value:=Form1.ZReport.FieldByName('all1').AsString;
ParamByName('view0').Value:=Form1.ZReport.FieldByName('view0').AsString;
ParamByName('view1').Value:=Form1.ZReport.FieldByName('view1').AsString;
ParamByName('ud0').Value:=Form1.ZReport.FieldByName('ud0').AsString;
ParamByName('ud1').Value:=Form1.ZReport.FieldByName('ud1').AsString;
ParamByName('raz0').Value:=Form1.ZReport.FieldByName('raz0').AsString;
ParamByName('raz1').Value:=Form1.ZReport.FieldByName('raz1').AsString;
ParamByName('otk0').Value:=Form1.ZReport.FieldByName('otk0').AsString ;
ParamByName('otk1').Value:=Form1.ZReport.FieldByName('otk1').AsString ;
  ExecSQL;
  end;
end;

end;

 GetInfoRepSQL('SELECT * FROM reports_template '); //Получаем результирующую таблицу для отчета

  Form1.frxReport1.LoadFromFile(Form1.sPath + '\reports\' + 'test.fr3', true);
// Заполняем данными отчет
  with Form1.frxReport1.Variables do
       begin
          Variables[' ' + 'MyDefaultCategory'] := Null;  //Создаем пустую категорию для дальнейшего создания переменных в отчете
          Variables['period'] := quotedstr('Журнал по исполнителям по вопросам за текущий период '+sDateEdit1.Text+' - '+sDateEdit2.Text);
        end;
    Form1.frxReport1.ShowReport(true);
end;


Результат:

К сообщению приложен файл. Размер - 123Kb
8 окт 18, 19:38    [21698587]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Котовасия
Member

Откуда:
Сообщений: 1031
Валерий666,

накати вотки или форматтер кода используй, и попустит.
8 окт 18, 19:49    [21698596]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
Котовасия
Валерий666,

накати вотки или форматтер кода используй, и попустит.

Да и так попустило) Вышел на результат, но что-то внутри подсказывает, что лупить запросы внутри цикла - это жесть.
8 окт 18, 19:52    [21698600]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Мне почему-то кажется что этими "SELECT count(*) FROM" вы имитируете операция GROUP BY
8 окт 18, 23:15    [21698752]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Судя по тому, что отчёты у вас лежат в папочке, программа - однопользовательская ?
8 окт 18, 23:39    [21698764]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
Мне почему-то кажется что этими "SELECT count(*) FROM" вы имитируете операция GROUP BY

Если есть предложения, с удовольствием выслушаю)
Программа сетевая. Отчеты у каждого свои.
9 окт 18, 08:26    [21698851]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Валерий666
Программа сетевая. Отчеты у каждого свои.

И если нужно исправить один отчёт у всех, то бежим к каждому на комп ?
9 окт 18, 08:33    [21698852]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Котовасия
Member

Откуда:
Сообщений: 1031
Валерий666,

зачем уже полученный курсор (набор данных) загонять в ("временную") табличку?
9 окт 18, 08:38    [21698855]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
Валерий666
Программа сетевая. Отчеты у каждого свои.

И если нужно исправить один отчёт у всех, то бежим к каждому на комп ?

Нет, зачем, есть апдейтер. Смотрятся хэши, если не совпадают то перед стартом все сливается с сервера.


автор
зачем уже полученный курсор (набор данных) загонять в ("временную") табличку?

Набор данных строиться в цикле. Если подскажите как полностью его получить без временной таблички буду благодарен.
9 окт 18, 09:06    [21698866]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
+ так ?
declare @Tmp table(DateCreate  smalldatetime, ResultView varchar(20), ist1 int)

insert into @Tmp select '20180901','РАССМОТР',1
insert into @Tmp select '20180901','РАССМОТР',2
insert into @Tmp select '20180901','РАССМОТР',3

insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2

insert into @Tmp select '20180901','РАЗЪЯСНЕНО',2

insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20170901','ОТКАЗАHО',1

-- запрос
select ist1,
       Name = case ist1 when 1 then ''
                        when 2 then 'Администрация президента РБ' 
                        when 3 then 'Другие органы госуправления'
              end,
All1 = sum(case when (DateCreate between '20180901' and '20180930') then 1 else 0 end),
All2 = sum(case when (DateCreate between '20170901' and '20170930') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Ud1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Ud2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Ot1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end),
Ot2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end)
from @Tmp
group by ist1

Картинка с другого сайта.
9 окт 18, 09:11    [21698871]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
+ так ?
declare @Tmp table(DateCreate  smalldatetime, ResultView varchar(20), ist1 int)

insert into @Tmp select '20180901','РАССМОТР',1
insert into @Tmp select '20180901','РАССМОТР',2
insert into @Tmp select '20180901','РАССМОТР',3

insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2

insert into @Tmp select '20180901','РАЗЪЯСНЕНО',2

insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20170901','ОТКАЗАHО',1

-- запрос
select ist1,
       Name = case ist1 when 1 then ''
                        when 2 then 'Администрация президента РБ' 
                        when 3 then 'Другие органы госуправления'
              end,
All1 = sum(case when (DateCreate between '20180901' and '20180930') then 1 else 0 end),
All2 = sum(case when (DateCreate between '20170901' and '20170930') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Ud1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Ud2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Ot1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end),
Ot2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end)
from @Tmp
group by ist1

Картинка с другого сайта.

Благодарю! Все получилось! Немного пришлось повозится с представлениями и синтаксисом.
9 окт 18, 10:20    [21698942]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
Может подскажите еще один момент?
Это уже немного другой отчет.
Есть номенклатурный справочник. На его основе хотелось бы видеть отчет с результирующими полями по группам. Рисунок ниже.

К сообщению приложен файл. Размер - 148Kb
9 окт 18, 11:42    [21699046]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
Рисую вот такой запрос, как получить сумму по группе?

К сообщению приложен файл. Размер - 145Kb
9 окт 18, 11:45    [21699055]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
В отчёте - GroopFooter, где группу нужно как то выделить по номеру
9 окт 18, 12:09    [21699110]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
В отчёте - GroopFooter, где группу нужно как то выделить по номеру

Немного не то, мне результат нужен ДО подвала и уже в таблице датасета.
9 окт 18, 15:30    [21699405]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Это не ПОДВАЛ, а ПОДВАЛ ГРУППЫ
9 окт 18, 15:43    [21699423]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Хотите данные в запросе - пристыкуйте второй запрос (на суммы) через UNION
9 окт 18, 15:57    [21699439]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
Хотите данные в запросе - пристыкуйте второй запрос (на суммы) через UNION

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


Была мысль сделать в репорте переприсваивание значения из подвала, а подвал невидимым, но почемуто такая манипуляция даже с двойным проходом работает правильно только на первых двух группах бэндов… Вобщем я сгруппировал полем в таблице эти пункты(группа 1,2,3,4,5,6,7 и тп), с запросами я далеко на вы, и про join и пр. прочитал только на прошлой неделе, уже не говоря про агрегатные ф-ии.
Можно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.

К сообщению приложен файл. Размер - 140Kb
10 окт 18, 08:46    [21700051]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3711
У вас репорта есть отдельный компонент для составления итоговых таблиц (такой мини-олап) -- на оде подается список данных, а он сам группирует их по различным разрезам и считает цифры. Если к дизайну претензий не будет, то вполне себе вариант.
10 окт 18, 08:54    [21700054]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
Можно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.

Повторяю ещё раз, для суммирования по группе существует GROUP FOOTER
10 окт 18, 09:00    [21700062]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Котовасия
Member

Откуда:
Сообщений: 1031
Валерий666
Можно ли сделать еще одно поле, суммирующее по группе?


https://www.fastreport.ru/public_download/docs/vcl/FR6/HTML_RU/index.html?report_with_groups.htm
10 окт 18, 09:39    [21700094]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
Можно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.

Повторяю ещё раз, для суммирования по группе существует GROUP FOOTER

Да при чем тут GROUP FOOTER? На картинке нарисовал как есть.

К сообщению приложен файл. Размер - 143Kb
10 окт 18, 10:32    [21700136]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
goldmi45
Member

Откуда:
Сообщений: 1035
Валерий666,

а на groupheader'е не получается разместить компоненты? Если не получается, то можно и дополнительной строкой в наборе.
10 окт 18, 10:51    [21700161]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
DimaBr
Member

Откуда:
Сообщений: 10716
"но при таком раскладе замена идёт только на 2-е первые группы, а дальше цифры не совпадают" - если честно, то ничего не понял
[IIF(<DS."TOREP">=0, Memo36.Value, <DS."All0">)] // сомневаюсь что так можно, и какой в этом смысл - не ясно
10 окт 18, 11:19    [21700194]     Ответить | Цитировать Сообщить модератору
 Re: Delphi+MySQL+FastReport.  [new]
Валерий666
Member

Откуда:
Сообщений: 182
DimaBr
"но при таком раскладе замена идёт только на 2-е первые группы, а дальше цифры не совпадают" - если честно, то ничего не понял
[IIF(<DS."TOREP">=0, Memo36.Value, <DS."All0">)] // сомневаюсь что так можно, и какой в этом смысл - не ясно


<DS."TOREP">=0, поле в таблице, 0 - замена значения на Memo36.Value
Memo36.Value - сумма по группе
DS."All0" - значение из таблицы.


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

Отсюда и вопрос как это реализовать.
Я вижу 2 выхода, подмена значений и расчет в самом репорте сумм(что пока не очень получается). Либо по тому же условию отображения, к запросу:
select kodvopr.groupid,kodvopr.torep,kodvopr.KODnom,kodvopr.NAIM,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') then 1 else 0 end) AS All0,
sum(case when (datecreate between '2017-01-01' AND '2017-10-09') then 1 else 0 end) AS All1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) AS ud0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) As ud1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) AS raz0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) As raz1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) As otk0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) AS otk1, 
sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (control=1) AND (resultview='')  then 1 else 0 end)AS view0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (control=1) AND (resultview='') then 1 else 0 end) AS view1
 from kodvopr 
LEFT JOIN register ON kodvopr.KODnom = register.themeid
# WHERE kodvopr.torep=1
 group by KODnom ORDER BY kodvopr.KOD11;

Добавить еще 10 полей и суммами, в которых будет сумма по группе, чтобы выглядело это так как на табличке в скриншоте

Т.е. в SUM_All0,SUM_All1.....SUM_view0,SUM_view1 - собирались бы соответствено суммы из All0, All1.... view0,view1 в разрезе группы. Т.е. берем итем смотрим группу, считаем количество итемов в этой группе в нужном разрезе по датам и условиям записываем в SumИМЯПОЛЯ (к примеру SUM_All0).
А в репорте уже вставить условие в поле для отображения:
[IIF(<DS."TOREP">=0, <DS."SumAll0">, <DS."All0">)]

К сообщению приложен файл. Размер - 157Kb
10 окт 18, 12:40    [21700331]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить