Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с excel / 14 сообщений из 14, страница 1 из 1
26.09.2018, 10:14
    #39708209
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
добрый день! combobox заполняется записями из бд. выбираю запись в combobox, в excel
выводятся записи, связанные с выбранной записью в комбо, например: в combobox - тех.
процесс, в excel вывожу материалы по нему (получается таблица материалов по тех.
процессу).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// Устанавливаем размер массива с данными для экспорта
  FData:=VarArrayCreate([1,PechatUdNormForm.ADOQuery1.RecordCount+2,1,PechatUdNormForm.ADOQuery1.Fields.Count],varVariant);
  // Заполняем массив
   PechatUdNormForm.ADOQuery1.First;
   i:=1;
   while not PechatUdNormForm.ADOQuery1.Eof do
   begin
    for j:=1 to PechatUdNormForm.ADOQuery1.Fields.Count do begin
    FData[i,j]:=PechatUdNormForm.ADOQuery1.Fields[j-1].Value;
    end;
    i:=i+1;
    PechatUdNormForm.ADOQuery1.Next;
   end;
   //Копируем данные в Excel
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[PechatUdNormForm.ADOQuery1.RecordCount+3, PechatUdNormForm.ADOQuery1.Fields.Count]].Value:=FData;
  //границы вокруг данных
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[PechatUdNormForm.ADOQuery1.RecordCount+3, PechatUdNormForm.ADOQuery1.Fields.Count]].Select;
   Excl.Selection.Borders.LineStyle := 1;
   Excl.Selection.Borders.Weight := 2;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[4, 1]].Select;
   Excl.Range[Excl.Cells[PechatUdNormForm.ADOQuery1.RecordCount+4, 1], Excl.Cells[PechatUdNormForm.ADOQuery1.RecordCount+4, 1]].Value:='Итого:'+' '+PechatUdNormForm.Edit2.Text;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[PechatUdNormForm.ADOQuery1.RecordCount+4, 1]].WrapText:=false;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with PechatUdNormForm.ADOQuery1 do begin
     Close;
     SQL.Clear;
     SQL.Add('select unr.obm, n051s.nam, n051s.mar, n051s.ram, n051s.gsm, ');
     sql.Add('n051s.gss, unr.unr1, unr.kets, unr.ets, n051s.cenp, unr.unr1*n051s.cenp as cen ');
     sql.Add('from unr, n051s where n051s.obm=unr.obm');
     sql.Add('and unr.tpr='+QuotedStr(TehProcessComboBox.Text));
     Open;
     end;


это работа с одной записью.
на форме чекбокс - печать всех тех. процессов.
как сделать, чтобы в excel выводились все тех. процессы со своими материалами (вместо
пустых строк таблица с материалами)?
...
Рейтинг: 0 / 0
26.09.2018, 10:15
    #39708210
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
...
Рейтинг: 0 / 0
26.09.2018, 11:11
    #39708280
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Я так понимаю, что надо убрать/закомментировать строчку
Код: pascal
1.
sql.Add('and unr.tpr='+QuotedStr(TehProcessComboBox.Text));
...
Рейтинг: 0 / 0
26.09.2018, 11:14
    #39708285
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
А-а, дошло в чём вопрос. Тебе надо что-то вроде LEFT OUTER JOIN "таблица материалов" вместо SELECT FROM .., "таблица материалов"
...
Рейтинг: 0 / 0
26.09.2018, 12:26
    #39708361
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
DimonkaЯ так понимаю, что надо убрать/закомментировать строчку
Код: pascal
1.
sql.Add('and unr.tpr='+QuotedStr(TehProcessComboBox.Text));


если так сделаешь, то будет вывод всех материалов, а надо именно для каждого тех. процесса свой набор материалов.
...
Рейтинг: 0 / 0
26.09.2018, 13:10
    #39708392
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
все равно не получается. опять же все строки "Технологические процессы...." заменяются на таблицу с материалами.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with PechatUdNormForm.ADOQuery1 do begin
     Close;
     SQL.Clear;
     SQL.Add('select unr.obm, n051s.nam, n051s.mar, n051s.ram, n051s.gsm, ');
     sql.Add('n051s.gss, unr.unr1, unr.kets, unr.ets, n051s.cenp, unr.unr1*n051s.cenp as cen ');
     sql.Add('from unr ');
     sql.Add('left outer join n051s on n051s.obm=unr.obm');
     Open;
     end;
...
Рейтинг: 0 / 0
26.09.2018, 13:49
    #39708433
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Ну так поменяй местами поля в SELECT-е, чтобы название материала попало в нужную позицию по счёту.
...
Рейтинг: 0 / 0
26.09.2018, 13:56
    #39708443
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Повысил на каплю читаемость твоей колбасы из кода:
Код: pascal
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.
procedure Report;
var
  Query: TADOQuery;
  FData: Variant;
  i: Integer;
begin
  Query := PechatUdNormForm.ADOQuery1;
  // Устанавливаем размер массива с данными для экспорта
  FData := VarArrayCreate([1,Query.RecordCount+2,1,Query.Fields.Count],varVariant);
  // Заполняем массив
  Query.First;
  i := 1;
  while not Query.Eof do
  begin
    for j:=1 to Query.Fields.Count do
      FData[i,j] := Query.Fields[j-1].Value;
    inc(i);
    Query.Next;
   end;
   //Копируем данные в Excel
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[Query.RecordCount+3, Query.Fields.Count]].Value:=FData;
  //границы вокруг данных
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[Query.RecordCount+3, Query.Fields.Count]].Select;
   Excl.Selection.Borders.LineStyle := 1;
   Excl.Selection.Borders.Weight := 2;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[4, 1]].Select;
   Excl.Range[Excl.Cells[Query.RecordCount+4, 1], Excl.Cells[Query.RecordCount+4, 1]].Value:='Итого:'+' '+PechatUdNormForm.Edit2.Text;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[Query.RecordCount+4, 1]].WrapText:=false;
end;
...
Рейтинг: 0 / 0
26.09.2018, 14:02
    #39708452
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Даже скорее так:
Код: pascal
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.
procedure Report;
var
  Query: TADOQuery;
  FData: Variant;
  i: Integer;
  RecordCount, FieldCount: integer;
begin
  Query := PechatUdNormForm.ADOQuery1;
  RecordCount := Query.RecordCount;
  FieldCount := Query.Fields.Count;
  // Устанавливаем размер массива с данными для экспорта
  FData := VarArrayCreate([1,RecordCount+2,1,FieldCount],varVariant);
  // Заполняем массив
  Query.First;
  i := 1;
  while not Query.Eof do
  begin
    for j:=1 to FieldCount do
      FData[i,j] := Query.Fields[j-1].Value;
    inc(i);
    Query.Next;
   end;
   //Копируем данные в Excel
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[RecordCount+3, FieldCount]].Value := FData;
  //границы вокруг данных
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[RecordCount+3, FieldCount]].Select;
   Excl.Selection.Borders.LineStyle := 1;
   Excl.Selection.Borders.Weight := 2;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[4, 1]].Select;
   Excl.Range[Excl.Cells[RecordCount+4, 1], Excl.Cells[RecordCount+4, 1]].Value :=
    'Итого:'+' '+PechatUdNormForm.Edit2.Text;
   Excl.Range[Excl.Cells[4, 1], Excl.Cells[RecordCount+4, 1]].WrapText:=false;
end;



Но всё равно код довольно какашестый
...
Рейтинг: 0 / 0
26.09.2018, 14:11
    #39708465
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Dimonka,

ну спасибо! что есть....
...
Рейтинг: 0 / 0
26.09.2018, 15:29
    #39708547
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Dimonka,

получилось только для первого. для остальных никак :'-(.
...
Рейтинг: 0 / 0
26.09.2018, 16:13
    #39708594
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Ещё раз по-человечески напиши, что надо сделать без комбо/бд. Какая бизнес-задача? А то реально приходится гадать.
...
Рейтинг: 0 / 0
26.09.2018, 16:19
    #39708603
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
Dimonka,

в-общем, надо в excel сформировать отчет такого плана:
наименование тех. процесса
Материал| Наим. мат.| Марка| .........
Здесь материалы по тех. процессу
Итого:
(пропуск 2 строки)
наименование тех. процесса
Материал| Наим. мат.| Марка| .........
Здесь материалы по тех. процессу
Итого:
(пропуск 2 строки)
и так далее для каждого тех. процесса свой набор материалов.
для одного тех. процесса сделала отчет, а для всего набора - не получается...
...
Рейтинг: 0 / 0
26.09.2018, 16:59
    #39708652
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с excel
TsYekaterina,

У тебя два варианта. Либо ты разбираешься как работает твоя процедура отчёта и делаешь на её основе вторую процедуру, которая делает отчёт по всем тех. процессам. Для этого достаточно убрать/закомментировать ту самую строку и изменить немного логику отчёта.

Либо ты тупо программно меняешь значение комбобокса в котором выбирается тех-процесс и колбасишь кучу отчётов в эксель. Поличится много-много отчётов, которые кто-нибудь соединит в ручную :-)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с excel / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]