powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с excel
14 сообщений из 14, страница 1 из 1
работа с excel
    #39708209
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день! 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
работа с excel
    #39708210
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
работа с excel
    #39708280
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что надо убрать/закомментировать строчку
Код: pascal
1.
sql.Add('and unr.tpr='+QuotedStr(TehProcessComboBox.Text));
...
Рейтинг: 0 / 0
работа с excel
    #39708285
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А-а, дошло в чём вопрос. Тебе надо что-то вроде LEFT OUTER JOIN "таблица материалов" вместо SELECT FROM .., "таблица материалов"
...
Рейтинг: 0 / 0
работа с excel
    #39708361
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimonkaЯ так понимаю, что надо убрать/закомментировать строчку
Код: pascal
1.
sql.Add('and unr.tpr='+QuotedStr(TehProcessComboBox.Text));


если так сделаешь, то будет вывод всех материалов, а надо именно для каждого тех. процесса свой набор материалов.
...
Рейтинг: 0 / 0
работа с excel
    #39708392
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все равно не получается. опять же все строки "Технологические процессы...." заменяются на таблицу с материалами.
Код: 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
работа с excel
    #39708433
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так поменяй местами поля в SELECT-е, чтобы название материала попало в нужную позицию по счёту.
...
Рейтинг: 0 / 0
работа с excel
    #39708443
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повысил на каплю читаемость твоей колбасы из кода:
Код: 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
работа с excel
    #39708452
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже скорее так:
Код: 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
работа с excel
    #39708465
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimonka,

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

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

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

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

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


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