Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/172: Рейтинг темы: голосов - 172, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 19
1

Как записать данные в файл MS Word

15.02.2012, 22:53. Показов 35819. Ответов 73

Author24 — интернет-сервис помощи студентам
Есть файл word. как его можно заполнить через делфи? если такое конечно вообще возможно. я в делфи разбираюсь плохо.
проект делфи связан с бд access. нужно чтобы было так: занёс через делфи данные в документ определенные и распечатал, чтобы получится как отчет.
Вложения
Тип файла: doc otchet.doc (30.5 Кб, 440 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 22:53
Ответы с готовыми решениями:

Файл: Как с помощью Python записать (а не перезаписать) данные из базы SQLite в файл lex.txt.
Помогите с разработкой части проекта, пожалуйста! Есть файл db.sqlite в котором таджикские слова:...

Как сохранить в word-файл данные с 4-х форм?
Подскажите, как в одной процедуре, предназначенной для кнопки 'Сохранить', прописать все...

Как записать в файл данные?
Вот готовый код: #include <iostream> #include <stdlib.h> #include <locale> #include...

Файл. Как записать данные?
Доброго времени суток... просьба помочь с программой. Програма вычисляет корень квадратный в...

73
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
18.06.2015, 12:29 41
Author24 — интернет-сервис помощи студентам
А макрос без ошибок отрабатывает?
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
18.06.2015, 13:16 42
помогите разобраться с этой путанницей в голове и программе

Добавлено через 12 минут
Да, и когда часть кода комменчу, тогда возникает ошибка на wdDoc.SaveAs(FileName:=Sd.FileName);
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
21.06.2015, 18:56 43
Помогите с этой темой, у меня вот эта ошибка вохникает, по большей части в коде, где описана вставка таблицы и ее заполнение в ворде, может что то подскажет что
это за ошибка(
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
21.06.2015, 19:45 44
Цитата Сообщение от Mawrat Посмотреть сообщение
А макрос без ошибок отрабатывает?
Макрос из поста #17 без ошибок отрабатывает? Если возникают ошибки, то какие и на какой строке? Код и сообщение об ошибке надо знать.

Добавлено через 28 минут
Кстати, такой вопрос. Может, перед возникновением ошибки "Вызов был отклонён", в Word было открыто модальное окно (диалоговое)? Если Word показал модальное окно, то пока пользователь это окно не закроет, вызовы к объектной модели будут отклоняться.
Например, при вызове wdDoc.SaveAs('Путь файла'), если уже существует файл с заданным путём, то MS Word выведет диалоговое окно с сообщением, что такой файл уже существует. Чтобы запретить показ диалоговых окон, надо отключить режим показа предупреждений:
Delphi
1
wdApp.DisplayAlerts := False; //Где wdApp - это ссылка на Word.Application.
Но такое действие должно быть осознанным - надо чётко понимать, что такое поведение нас устраивает. К примеру, так можно поступить, если существующий файл можно перезаписать без решения пользователя.
Если после обработки программой, в том же сеансе работы с MS Word, с документом должен продолжить работать пользователь, то следует включить режим показа предупреждений:
Delphi
1
wdApp.DisplayAlerts := True; //Где wdApp - это ссылка на Word.Application.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
21.06.2015, 20:33 45
Delphi
1
2
3
4
5
6
7
8
  finally
      wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName:=Sd.FileName);
  finally
    wdApp.DisplayAlerts := True;
Да,я может не учел, но эти проверки у меня есть

Добавлено через 22 секунды
перед финалли у меня вот код, с построение отчета
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
22.06.2015, 08:02 46
Владислав-2012, можешь показать полностью код формирования отчёта в MS Word? И укажи в нём, на какой строке возникает ошибка и какая. И предыдущий вопрос тоже в силе - отрабатывает ли макрос из поста #17? Если в нём возникает ошибка, то какая и на какой строке?
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
22.06.2015, 13:46 47
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
procedure TForm2.Action1Execute(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdRng, wdTable : Variant;
  i, j, Res : Integer;
  D : TDateTime;
  Bm : TBookMark;
  Sd : TSaveDialog;
  per:integer;
  kod: string;
begin 
    IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id_fkko, id_name_otchet from otchets where id_name_otchet=:w';
    ibquery1.ParamByName('w').Value:=Form1.DBLookupComboBox1.KeyValue;
    ibquery1.open;
    per:=ibquery1['id_fkko'];
 
    IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id,kod_fkko from fkko where id=:x';
    ibquery1.ParamByName('x').Value:=per;
    ibquery1.open;
    kod:=ibquery1['kod_fkko'];
 
 
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0));
  if not Sd.Execute then Exit;
   if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, 'Ôàéë ñ çàäàííûì èìåíåì óæå ñóùåñòâóåò. Ïåðåçàïèñàòü?'
      ,'Âíèìàíèå!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(0, 'Íå óäàëîñü çàïóñòèòü MS Word. Äåéñòâèå îòìåíåíî.'
      ,'Âíèìàíèå!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
   wdApp.Visible := True;
   wdDoc := wdApp.Documents.Add;
   wdApp.ScreenUpdating := False;
  try
  // øàïêà äîêóìåíòà
    wdRng := wdDoc.Content;
    wdRng.InsertAfter('Íà÷àëüíèêó Äåïàðòàìåíòà       '+#9+ #13#10);
    wdRng.InsertAfter('Ðîñïðèðîäíàäçîðà ïî           '+#9+ #13#10);
    wdRng.InsertAfter('Ïðèâîëæñêîìó ôåäåðàëüíîìó     '+#9+ #13#10);
    wdRng.InsertAfter('îêðóãó                        '+#9+ #9+ #13#10);
    wdRng.InsertAfter('Èâàíó Èâàíîâè÷ó Èâàíîâó       '+#9+ #13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphright;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
 
      // Çàÿâëåíèå
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ÇÀßÂËÅÍÈÅ');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := TRUE;
    wdRng.Font.Size := 14;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphcenter;
    wdRng.InsertAfter(#13#10);
 
      // Ïîäçàãîëîâîê çàÿâëåíèÿ
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('î ïîäòâåðæäåíèè îòíåñåíèÿ âèäà îòõîäà ê êîíêðåòíîìó');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('êëàññó îïàñíîñòè äëÿ îêðóæàþùåé ñðåäû');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
    //Ðåãèñòðà íîìåð
     wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Ðåãèñòðàöèîííûé íîìåð ¹ _____________ îò «____» ____________ 2015 ãîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdRng.InsertAfter(#13#10);
 
     //Íàçâàíèå òàáëèöû
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Îðãàíèçàöèÿ:');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
 
 
    // Òàáëèöà.
    if not IBQuery1.Active then IBQuery1.Open;
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 8, 3);
    wdTable.Columns.item(1).Width:=20;
    wdTable.Columns.item(1).Width:=100;
    wdTable.Columns.item(1).Width:=70;
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
 
    wdTable.Cell(1, 2).Range.Text := 'Ïîëíîå íàèìåíîâàíèå þðèäè÷åñêîãî ëèöà ';
    wdTable.Cell(2, 2).Range.Text := 'Ñîêðàùåííîå íàèìåíîâàíèå' ;
    wdTable.Cell(3, 2).Range.Text := 'Îðãàíèçàöèîííî-ïðàâîâàÿ ôîðìà' ;
    wdTable.Cell(4, 2).Range.Text := 'Ìåñòî íàõîæäåíèÿ (èç Óñòàâà)' ;
    wdTable.Cell(5, 2).Range.Text := 'ÎÃÐÍ (îñíîâíîé ãîñóäàðñòâåííûé íîìåð çàïèñè î ñîçäàíèè þðèäè÷åñêîãî ëèöà)' ;
    wdTable.Cell(6, 2).Range.Text := 'ÈÍÍ (èäåíòèôèêàöèîííûé íîìåð ïëàòåëüùèêà)' ;
    wdTable.Cell(7, 2).Range.Text := 'ÊÏÏ (êîä ïðè÷èíû ïîñòàíîâêè íà ó÷åò)' ;
    wdTable.Cell(8, 2).Range.Text := 'Êîäû ÎÊÂÝÄ' ;
     for i := 0 to 8 do
     wdTable.Cell(i, 1 ).Range.Text := i;
      ibquery1.sql.clear;
      ibquery1.sql.text:='select * from organiz';
      ibquery1.open;
      IBQuery1.DisableControls;
      Bm := ibquery1.GetBookMark;
      ibquery1.First;
    for i := 0 to 8 do
     begin
      wdTable.Cell(i, 3).Range.Text := ibquery1.Fields[i].AsString;
      end;
    ibquery1.GotoBookMark(Bm);
    ibquery1.EnableControls;  
 
    //wdRng := wdDoc.Range.Characters.Last;
   wdRng.Start := wdRng.End;
 
     // òåêñò ïîñëå òàáëèöû
 
    wdRng.InsertAfter('ïðîñèò ïîäòâåðäèòü îòíåñåíèå âèäà îòõîäîâ ê êîíêðåòíîìó êëàññó îïàñíîñòè  ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('äëÿ îêðóæàþùåé ñðåäû â ñîîòâåòñòâèè ñ ïðèëàãàåìûì ïåðå÷íåì îòõîäîâ. ');
    wdRng.Font.Reset;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    wdRng.InsertAfter(#13#10);
     D := Now;
 
 
    //ïîäâàë äîêóìåíòà
    wdRng.Start := wdRng.End;
  //  wdRng := wdDoc.Range.Characters.Last;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ãåíåðàëüíûé äèðåêòîð');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ÇÀÎ "Ìèõàéëîâñêèé ñàõàðíèê"      _________________ /Øàòàëèí Ñåðãåé Âèêòîðîâè÷/');
    wdRng.InsertAfter(#9+#9+#9+#9+#9+#9+#9+#9+'(ïîäïèñü)'+#9+#9+#9+'(ÔÈÎ)');
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter('Òåëåôîí: (83140) 54-6-26 ' +#9+#9+ #9+ #9+ #9 + FormatDateTime('dd.mm.yyyy', D) + #9 +'ãîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
 
 
//   -----------------------------------------------------------------
    // íîâàÿ ñòðàíèöà ðàçðûâ
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïðîòîêîë ðàñ÷åòà êëàññà îïàñíîñòè îòõîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := true;
    wdRng.Font.Size := 14;
    wdRng.InsertAfter(#13#10);
 
    wdRng.Start := wdRng.End;
 //  wdRng := wdDoc.Range.Characters.Last;
    wdRng.InsertAfter('Íàèìåíîâàíèå îòõîäà: ' + Form1.DBLookupComboBox1.text );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Êîä âèäà îòõîäà ïî ÔÊÊÎ:' + kod );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Íàèìåíîâàíèå âèäà îòõîäà ïî ÔÊÊÎ:' +  Form1.DBLookupComboBox1.text);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ðàñ÷åò êëàññà îïàñíîñòè îòõîäà âûïîëíåí â ñîîòâåòñòâèè ñ «Êðèòåðèÿìè îòíåñåíèÿ ');
    wdRng.InsertAfter('îïàñíûõ îòõîäîâ ê êëàññó îïàñíîñòè äëÿ îêðóæàþùåé ïðèðîäíîé ñðåäû», óòâåðæäåííûìè ');
    wdRng.InsertAfter('ïðèêàçîì ÌÏÐ Ðîññèè îò 15 èþíÿ 2001 ã. ¹ 511.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïåðå÷åíü âåùåñòâ, ñîñòàâëÿþùèõ îòõîä (äàëåå — êîìïîíåíòîâ îòõîäà) è èõ');
    wdRng.InsertAfter('êîëè÷åñòâåííîå ñîäåðæàíèå óñòàíîâëåíû ïî ñîñòàâó èñõîäíîãî ñûðüÿ è òåõíîëîãè÷åñêèì');
    wdRng.InsertAfter('ïðîöåññàì åãî ïåðåðàáîòêè (èëè ïî ðåçóëüòàòàì êîëè÷åñòâåííîãî õèìè÷åñêîãî àíàëèçà â ');
    wdRng.InsertAfter('àêêðåäèòîâàííîé ëàáîðàòîðèè), ïðèëàãàåìûõ ê íàñòîÿùåìó ïðîòîêîëó. ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ðåçóëüòàòû ðàñ÷åòà ïî êîìïîíåíòàì îòõîäà:');    
 
 
 
   { wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 2, QWiev.Fields.Count);
    //Ïàðàìåòðû ëèíèé
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    //Îôîðìëåíèå øàïêè.
    wdRng := wdTable.Rows.Item(1).Range; //Äèàïàçîí ïåðâîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    wdRng := wdTable.Rows.Item(2).Range; //Äèàïàçîí âòîðîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;
    //Çàïèñûâàåì øàïêó òàáëèöû.
    for i := 0 to DBGrideh1.FieldCount-1 do
      wdTable.Cell(1, i + 1).Range.Text :=  DBGrideh1.Columns[i].Title.Caption;
    //Çàïèñûâàåì äàííûå òàáëèöû.
    QWiev.DisableControls;
    Bm := QWiev.GetBookMark;
    QWiev.First;
    i := 1;
    while not QWiev.Eof do
     begin
      Inc(i);
       if i > 2 then wdTable.Rows.Add;
         for j := 0 to QWiev.Fields.Count-1 do
           wdTable.Cell(i, j + 1).Range.Text := QWiev.Fields[j].AsString;
      QWiev.Next;
     end;
     QWiev.GotoBookMark(Bm);
    QWiev.EnableControls;     
// íà÷àëî ïîñëåòàáëè÷íûõ ñòðîê 3øò     }
 
 
    //wdRng.Start := wdRng.End;
    //wdRng := wdDoc.range.Characters.Last;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Ñóììàðíûé %' + DBGridEh1.Columns[1].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïîêàçàòåëü Ê ñòåïåíè îïàñíîñòè îòõîäà:'+DBGridEh1.Columns[4].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Êëàññ îïàñíîñòè îòõîäà:  ');
    wdRng.InsertAfter(#13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
  finally
      wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName:=Sd.FileName);
  finally
    wdApp.DisplayAlerts := True;
  end; 
end;
Вот весь код построения отчета. Где то косяк при построении 2 х таблиц и последний абзац, его тупо не видит программа совсем.

Добавлено через 1 час 3 минуты
Ошибки у меня с момента построения первой таблицы и длальше просто на каждом месте, где создается новый диапазон
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
22.06.2015, 15:09 48
Не много покопался,
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
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
    wdRng := wdDoc.Content;
    wdRng.InsertAfter('Íà÷àëüíèêó Äåïàðòàìåíòà       '+#9+ #13#10);
    wdRng.InsertAfter('Ðîñïðèðîäíàäçîðà ïî           '+#9+ #13#10);
    wdRng.InsertAfter('Ïðèâîëæñêîìó ôåäåðàëüíîìó     '+#9+ #13#10);
    wdRng.InsertAfter('îêðóãó                        '+#9+ #9+ #13#10);
    wdRng.InsertAfter('Èâàíó Èâàíîâè÷ó Èâàíîâó       '+#9+ #13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphright;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
 
      // Çàÿâëåíèå
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ÇÀßÂËÅÍÈÅ');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := TRUE;
    wdRng.Font.Size := 14;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphcenter;
    wdRng.InsertAfter(#13#10);
 
      // Ïîäçàãîëîâîê çàÿâëåíèÿ
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('î ïîäòâåðæäåíèè îòíåñåíèÿ âèäà îòõîäà ê êîíêðåòíîìó');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('êëàññó îïàñíîñòè äëÿ îêðóæàþùåé ñðåäû');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
    //Ðåãèñòðà íîìåð
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Ðåãèñòðàöèîííûé íîìåð ¹ _____________ îò «____» ____________ 2015 ãîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdRng.InsertAfter(#13#10);
 
     //Íàçâàíèå òàáëèöû
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Îðãàíèçàöèÿ:');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
{
    // Òàáëèöà.
    if not IBQuery1.Active then IBQuery1.Open;
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 8, 3);
    wdTable.Columns.item(1).Width:=20;
    wdTable.Columns.item(1).Width:=100;
    wdTable.Columns.item(1).Width:=70;
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdTable.Cell(1, 2).Range.Text := 'Ïîëíîå íàèìåíîâàíèå þðèäè÷åñêîãî ëèöà ';
    wdTable.Cell(2, 2).Range.Text := 'Ñîêðàùåííîå íàèìåíîâàíèå' ;
    wdTable.Cell(3, 2).Range.Text := 'Îðãàíèçàöèîííî-ïðàâîâàÿ ôîðìà' ;
    wdTable.Cell(4, 2).Range.Text := 'Ìåñòî íàõîæäåíèÿ (èç Óñòàâà)' ;
    wdTable.Cell(5, 2).Range.Text := 'ÎÃÐÍ (îñíîâíîé ãîñóäàðñòâåííûé íîìåð çàïèñè î ñîçäàíèè þðèäè÷åñêîãî ëèöà)' ;
    wdTable.Cell(6, 2).Range.Text := 'ÈÍÍ (èäåíòèôèêàöèîííûé íîìåð ïëàòåëüùèêà)' ;
    wdTable.Cell(7, 2).Range.Text := 'ÊÏÏ (êîä ïðè÷èíû ïîñòàíîâêè íà ó÷åò)' ;
    wdTable.Cell(8, 2).Range.Text := 'Êîäû ÎÊÂÝÄ' ;
     for i := 0 to 8 do
     wdTable.Cell(i, 1 ).Range.Text := i;
      ibquery1.sql.clear;
      ibquery1.sql.text:='select * from organiz';
      ibquery1.open;
      IBQuery1.DisableControls;
      ibquery1.First;
    for i := 0 to 8 do
     begin
      wdTable.Cell(i, 3).Range.Text := ibquery1.Fields[i].AsString;
      end;
     ibquery1.EnableControls;  }
 
    wdRng.Font.Reset;
    wdRng.ParagraphFormat.Reset;
    wdRng := wdRng.Characters.Last;
    wdRng.InsertAfter('ïðîñèò ïîäòâåðäèòü îòíåñåíèå âèäà îòõîäîâ ê êîíêðåòíîìó êëàññó îïàñíîñòè  ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('äëÿ îêðóæàþùåé ñðåäû â ñîîòâåòñòâèè ñ ïðèëàãàåìûì ïåðå÷íåì îòõîäîâ. ');
    wdRng.Font.Reset;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    wdRng.InsertAfter(#13#10);
     D := Now;
 
    //ïîäâàë äîêóìåíòà
    wdRng.Start := wdRng.End;
    wdRng := wdRng.Characters.Last;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ãåíåðàëüíûé äèðåêòîð');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ÇÀÎ "Ìèõàéëîâñêèé ñàõàðíèê"      _________________ /Øàòàëèí Ñåðãåé Âèêòîðîâè÷/');
    wdRng.InsertAfter(#9+#9+#9+#9+#9+#9+#9+#9+'(ïîäïèñü)'+#9+#9+#9+'(ÔÈÎ)');
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter('Òåëåôîí: (83140) 54-6-26 '+#9+#9+#9+#9+#9+#9+ FormatDateTime('dd.mm.yyyy', D) + #9 +'ãîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
//   -----------------------------------------------------------------
    // íîâàÿ ñòðàíèöà ðàçðûâ
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïðîòîêîë ðàñ÷åòà êëàññà îïàñíîñòè îòõîäà');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := true;
    wdRng.Font.Size := 14;
    wdRng.InsertAfter(#13#10);
 
    //wdRng.Start := wdRng.End;
    wdRng := wdRng.Characters.Last;
    wdRng.InsertAfter('Íàèìåíîâàíèå îòõîäà: ' + Form1.DBLookupComboBox1.text );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Êîä âèäà îòõîäà ïî ÔÊÊÎ:' + kod );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Íàèìåíîâàíèå âèäà îòõîäà ïî ÔÊÊÎ:' +  Form1.DBLookupComboBox1.text);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ðàñ÷åò êëàññà îïàñíîñòè îòõîäà âûïîëíåí â ñîîòâåòñòâèè ñ «Êðèòåðèÿìè îòíåñåíèÿ ');
    wdRng.InsertAfter('îïàñíûõ îòõîäîâ ê êëàññó îïàñíîñòè äëÿ îêðóæàþùåé ïðèðîäíîé ñðåäû», óòâåðæäåííûìè ');
    wdRng.InsertAfter('ïðèêàçîì ÌÏÐ Ðîññèè îò 15 èþíÿ 2001 ã. ¹ 511.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïåðå÷åíü âåùåñòâ, ñîñòàâëÿþùèõ îòõîä (äàëåå — êîìïîíåíòîâ îòõîäà) è èõ');
    wdRng.InsertAfter('êîëè÷åñòâåííîå ñîäåðæàíèå óñòàíîâëåíû ïî ñîñòàâó èñõîäíîãî ñûðüÿ è òåõíîëîãè÷åñêèì');
    wdRng.InsertAfter('ïðîöåññàì åãî ïåðåðàáîòêè (èëè ïî ðåçóëüòàòàì êîëè÷åñòâåííîãî õèìè÷åñêîãî àíàëèçà â ');
    wdRng.InsertAfter('àêêðåäèòîâàííîé ëàáîðàòîðèè), ïðèëàãàåìûõ ê íàñòîÿùåìó ïðîòîêîëó. ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ðåçóëüòàòû ðàñ÷åòà ïî êîìïîíåíòàì îòõîäà:');    
 
 
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 2, QWiev.Fields.Count);
    //Ïàðàìåòðû ëèíèé
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    //Îôîðìëåíèå øàïêè.
    wdRng := wdTable.Rows.Item(1).Range; //Äèàïàçîí ïåðâîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    wdRng := wdTable.Rows.Item(2).Range; //Äèàïàçîí âòîðîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;
    //Çàïèñûâàåì øàïêó òàáëèöû.
    for i := 0 to DBGrideh1.FieldCount-1 do
      wdTable.Cell(1, i + 1).Range.Text :=  DBGrideh1.Columns[i].Title.Caption;
    //Çàïèñûâàåì äàííûå òàáëèöû.
    QWiev.DisableControls;
    QWiev.First;
    i := 1;
    while not QWiev.Eof do
     begin
      Inc(i);
       if i > 2 then wdTable.Rows.Add;
         for j := 0 to QWiev.Fields.Count-1 do
           wdTable.Cell(i, j + 1).Range.Text := QWiev.Fields[j].AsString;
      QWiev.Next;
     end;
    QWiev.EnableControls;  
// íà÷àëî ïîñëåòàáëè÷íûõ ñòðîê 3øò    
 
   { wdRng.Start := wdRng.End;
    wdRng := wdRng.Characters.Last;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Ñóììàðíûé %' + DBGridEh1.Columns[1].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïîêàçàòåëü Ê ñòåïåíè îïàñíîñòè îòõîäà:'+DBGridEh1.Columns[4].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Êëàññ îïàñíîñòè îòõîäà:  ');
    wdRng.InsertAfter(#13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);    }
я не могу разобраться с диапазонами, сейчас если комменчу таблицы, ошибок не возникает. Если первую разкомменчиваю, то далее все абзацы идут в первую строчку таблицы, и так через ошибку exception class eoleexception with message "Вызов был отклонен" в чем разница
Delphi
1
2
wdRng.Start := wdRng.End;
    wdRng := wdRng.Characters.Last;
ну я понимаю, что первый формирует новый диапазон, а второй встает на последний символ. И почему у меня выдает ошибку, если я вставляю строчку
Delphi
1
   wdRng := wdDoc.Content;
Добавлено через 10 минут
OSPPSVC, когда закрываешь процесс, все компилируется, но проблема остается, все что идет после первой таблицы, помещается в 1 ячейку 1 таблицы..
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
22.06.2015, 17:58 49
Подправил код.
Каракули вида "ГЌГ*Г·Г*ëüГ*ГЁГЄГі ÄåïГ*ðòГ*ìåГ*ГІГ*" исправлять не стал. Чтобы кодировка русского текста передавалась правильно, надо перед копированием текста переключиться на русскую раскладку клавиатуры, потом скопировать текст и затем - вставить его в целевой редактор.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
procedure TForm2.Action1Execute(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdRng, wdTable : Variant;
  i, j, Res : Integer;
  D : TDateTime;
  Bm : TBookMark;
  Sd : TSaveDialog;
  per:integer;
  kod: string;
begin 
  IbQuery1.sql.clear;
  Ibquery1.sql.text:='select id_fkko, id_name_otchet from otchets where id_name_otchet=:w';
  ibquery1.ParamByName('w').Value:=Form1.DBLookupComboBox1.KeyValue;
  ibquery1.open;
  per:=ibquery1['id_fkko'];
 
  IbQuery1.sql.clear;
  Ibquery1.sql.text:='select id,kod_fkko from fkko where id=:x';
  ibquery1.ParamByName('x').Value:=per;
  ibquery1.open;
  kod:=ibquery1['kod_fkko'];
 
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0));
  if not Sd.Execute then Exit;
   if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, 'Г”Г*éë Г± Г§Г*Г¤Г*Г*Г*ûì èìåГ*ГҐГ¬ óæå Г±ГіГ№ГҐГ±ГІГўГіГҐГІ. ÏåðåçГ*ГЇГЁГ±Г*ГІГј?'
      ,'Г‚Г*ГЁГ¬Г*Г*ГЁГҐ!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(0, 'ГЌГҐ ГіГ¤Г*ëîñü Г§Г*ГЇГіГ±ГІГЁГІГј MS Word. Äåéñòâèå îòìåГ*ГҐГ*Г®.'
      ,'Г‚Г*ГЁГ¬Г*Г*ГЁГҐ!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
  wdApp.Visible := True;
  wdDoc := wdApp.Documents.Add;
  wdApp.ScreenUpdating := False;
  try
    // ГёГ*ГЇГЄГ* äîêóìåГ*ГІГ*
    wdRng := wdDoc.Content;
    wdRng.InsertAfter('ГЌГ*Г·Г*ëüГ*ГЁГЄГі ÄåïГ*ðòГ*ìåГ*ГІГ*       '+#9+ #13#10);
    wdRng.InsertAfter('ÐîñïðèðîäГ*Г*äçîðГ* ГЇГ®           '+#9+ #13#10);
    wdRng.InsertAfter('Ïðèâîëæñêîìó ôåäåðГ*ëüГ*îìó     '+#9+ #13#10);
    wdRng.InsertAfter('îêðóãó                        '+#9+ #9+ #13#10);
    wdRng.InsertAfter('ÈâГ*Г*Гі ÈâГ*Г*îâè÷ó ÈâГ*Г*îâó       '+#9+ #13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphright;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
 
    // Г‡Г*ÿâëåГ*ГЁГҐ
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ÇÀßÂËÅÍÈÅ');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := TRUE;
    wdRng.Font.Size := 14;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphcenter;
    wdRng.InsertAfter(#13#10);
 
    // ÏîäçГ*ãîëîâîê Г§Г*ÿâëåГ*ГЁГї
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Г® ïîäòâåðæäåГ*ГЁГЁ îòГ*ГҐГ±ГҐГ*ГЁГї ГўГЁГ¤Г* îòõîäГ* ГЄ ГЄГ®Г*êðåòГ*îìó');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ГЄГ«Г*Г±Г±Гі îïГ*Г±Г*îñòè äëÿ îêðóæГ*ГѕГ№ГҐГ© ñðåäû');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
    //ГђГҐГЈГЁГ±ГІГ°Г* Г*îìåð
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ГђГҐГЈГЁГ±ГІГ°Г*öèîГ*Г*ûé Г*îìåð В№ _____________ îò «____» ____________ 2015 ãîäГ*');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdRng.InsertAfter(#13#10);
 
     //ГЌГ*çâГ*Г*ГЁГҐ ГІГ*áëèöû
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ÎðãГ*Г*ГЁГ§Г*öèÿ:');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
 
    // Г’Г*áëèöГ*.
    if not IBQuery1.Active then IBQuery1.Open;
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 8, 3);
    wdTable.Columns.item(1).Width:=20;
    wdTable.Columns.item(1).Width:=100;
    wdTable.Columns.item(1).Width:=70;
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
 
    wdTable.Cell(1, 2).Range.Text := 'ÏîëГ*îå Г*Г*èìåГ*îâГ*Г*ГЁГҐ þðèäè÷åñêîãî ëèöГ* ';
    wdTable.Cell(2, 2).Range.Text := 'ÑîêðГ*Г№ГҐГ*Г*îå Г*Г*èìåГ*îâГ*Г*ГЁГҐ' ;
    wdTable.Cell(3, 2).Range.Text := 'ÎðãГ*Г*ГЁГ§Г*öèîГ*Г*Г®-ГЇГ°Г*âîâГ*Гї ôîðìГ*' ;
    wdTable.Cell(4, 2).Range.Text := 'ГЊГҐГ±ГІГ® Г*Г*õîæäåГ*ГЁГї (ГЁГ§ ÓñòГ*ГўГ*)' ;
    wdTable.Cell(5, 2).Range.Text := 'ГЋГѓГђГЌ (îñГ*îâГ*îé ãîñóäГ*ðñòâåГ*Г*ûé Г*îìåð Г§Г*ГЇГЁГ±ГЁ Г® ñîçäГ*Г*ГЁГЁ þðèäè÷åñêîãî ëèöГ*)' ;
    wdTable.Cell(6, 2).Range.Text := 'ÈÍÍ (èäåГ*ГІГЁГґГЁГЄГ*öèîГ*Г*ûé Г*îìåð ГЇГ«Г*òåëüùèêГ*)' ;
    wdTable.Cell(7, 2).Range.Text := 'ГЉГЏГЏ (êîä ïðè÷èГ*Г» ïîñòГ*Г*îâêè Г*Г* ГіГ·ГҐГІ)' ;
    wdTable.Cell(8, 2).Range.Text := 'Êîäû ÎÊÂÝÄ' ;
    for i := 0 to 8 do
      wdTable.Cell(i, 1 ).Range.Text := i;
    ibquery1.sql.clear;
    ibquery1.sql.text:='select * from organiz';
    ibquery1.open;
    IBQuery1.DisableControls;
    Bm := ibquery1.GetBookMark;
    ibquery1.First;
    for i := 0 to 8 do
      wdTable.Cell(i, 3).Range.Text := ibquery1.Fields[i].AsString;
    ibquery1.GotoBookMark(Bm);
    ibquery1.EnableControls;  
 
    wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
 
    // ГІГҐГЄГ±ГІ ïîñëå ГІГ*áëèöû
 
    wdRng.InsertAfter('ïðîñèò ïîäòâåðäèòü îòГ*ГҐГ±ГҐГ*ГЁГҐ ГўГЁГ¤Г* îòõîäîâ ГЄ ГЄГ®Г*êðåòГ*îìó ГЄГ«Г*Г±Г±Гі îïГ*Г±Г*îñòè  ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('äëÿ îêðóæГ*ГѕГ№ГҐГ© ñðåäû Гў ñîîòâåòñòâèè Г± ïðèëГ*ГЈГ*åìûì ïåðå÷Г*ГҐГ¬ îòõîäîâ. ');
    wdRng.Font.Reset;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    wdRng.InsertAfter(#13#10);
    D := Now;
 
    //ïîäâГ*Г« äîêóìåГ*ГІГ*
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ГѓГҐГ*ГҐГ°Г*ëüГ*ûé äèðåêòîð');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ÇÀÎ "ГЊГЁГµГ*éëîâñêèé Г±Г*ГµГ*Г°Г*ГЁГЄ"      _________________ /Г&#152;Г*ГІГ*ëèГ* Ñåðãåé Âèêòîðîâè÷/');
    wdRng.InsertAfter(#9+#9+#9+#9+#9+#9+#9+#9+'(ïîäïèñü)'+#9+#9+#9+'(ÔÈÎ)');
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter('ÒåëåôîГ*: (83140) 54-6-26 ' +#9+#9+ #9+ #9+ #9 + FormatDateTime('dd.mm.yyyy', D) + #9 +'ãîäГ*');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
//   -----------------------------------------------------------------
    // Г*îâГ*Гї Г±ГІГ°Г*Г*ГЁГ¶Г* Г°Г*çðûâ
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïðîòîêîë Г°Г*Г±Г·ГҐГІГ* ГЄГ«Г*Г±Г±Г* îïГ*Г±Г*îñòè îòõîäГ*');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := true;
    wdRng.Font.Size := 14;
    wdRng.InsertAfter(#13#10);
 
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter('ГЌГ*èìåГ*îâГ*Г*ГЁГҐ îòõîäГ*: ' + Form1.DBLookupComboBox1.text );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Êîä ГўГЁГ¤Г* îòõîäГ* ГЇГ® ÔÊÊÎ:' + kod );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ГЌГ*èìåГ*îâГ*Г*ГЁГҐ ГўГЁГ¤Г* îòõîäГ* ГЇГ® ÔÊÊÎ:' +  Form1.DBLookupComboBox1.text);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ГђГ*Г±Г·ГҐГІ ГЄГ«Г*Г±Г±Г* îïГ*Г±Г*îñòè îòõîäГ* âûïîëГ*ГҐГ* Гў ñîîòâåòñòâèè Г± «ГЉГ°ГЁГІГҐГ°ГЁГїГ¬ГЁ îòГ*ГҐГ±ГҐГ*ГЁГї ');
    wdRng.InsertAfter('îïГ*Г±Г*ûõ îòõîäîâ ГЄ ГЄГ«Г*Г±Г±Гі îïГ*Г±Г*îñòè äëÿ îêðóæГ*ГѕГ№ГҐГ© ïðèðîäГ*îé ñðåäû», óòâåðæäåГ*Г*ûìè ');
    wdRng.InsertAfter('ïðèêГ*çîì ГЊГЏГђ Ðîññèè îò 15 ГЁГѕГ*Гї 2001 ГЈ. В№ 511.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Ïåðå÷åГ*Гј ГўГҐГ№ГҐГ±ГІГў, ñîñòГ*âëÿþùèõ îòõîä (Г¤Г*ëåå — êîìïîГ*ГҐГ*òîâ îòõîäГ*) ГЁ ГЁГµ');
    wdRng.InsertAfter('êîëè÷åñòâåГ*Г*îå ñîäåðæГ*Г*ГЁГҐ ГіГ±ГІГ*Г*îâëåГ*Г» ГЇГ® ñîñòГ*ГўГі èñõîäГ*îãî ñûðüÿ ГЁ ГІГҐГµГ*îëîãè÷åñêèì');
    wdRng.InsertAfter('ïðîöåññГ*Г¬ ГҐГЈГ® ïåðåðГ*áîòêè (èëè ГЇГ® ðåçóëüòГ*ГІГ*Г¬ êîëè÷åñòâåГ*Г*îãî õèìè÷åñêîãî Г*Г*Г*ëèçГ* Гў ');
    wdRng.InsertAfter('Г*êêðåäèòîâГ*Г*Г*îé Г«Г*áîðГ*òîðèè), ïðèëГ*ГЈГ*åìûõ ГЄ Г*Г*ñòîÿùåìó ïðîòîêîëó. ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ÐåçóëüòГ*ГІГ» Г°Г*Г±Г·ГҐГІГ* ГЇГ® êîìïîГ*ГҐГ*ГІГ*Г¬ îòõîäГ*:');    
 
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 2, QWiev.Fields.Count);
    //ГЏГ*Г°Г*ìåòðû ëèГ*ГЁГ©
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng := wdTable.Range;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    //ÎôîðìëåГ*ГЁГҐ ГёГ*ГЇГЄГЁ.
    wdRng := wdTable.Rows.Item(1).Range; //ÄèГ*ГЇГ*çîГ* ïåðâîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    wdRng := wdTable.Rows.Item(2).Range; //ÄèГ*ГЇГ*çîГ* âòîðîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;
    //Г‡Г*ïèñûâГ*ГҐГ¬ ГёГ*ГЇГЄГі ГІГ*áëèöû.
    for i := 0 to DBGrideh1.FieldCount-1 do
      wdTable.Cell(1, i + 1).Range.Text :=  DBGrideh1.Columns[i].Title.Caption;
    //Г‡Г*ïèñûâГ*ГҐГ¬ Г¤Г*Г*Г*ûå ГІГ*áëèöû.
    QWiev.DisableControls;
    Bm := QWiev.GetBookMark;
    QWiev.First;
    i := 1;
    while not QWiev.Eof do
    begin
      Inc(i);
      if i > 2 then wdTable.Rows.Add;
        for j := 0 to QWiev.Fields.Count-1 do
          wdTable.Cell(i, j + 1).Range.Text := QWiev.Fields[j].AsString;
      QWiev.Next;
    end;
    QWiev.GotoBookMark(Bm);
    QWiev.EnableControls;     
// Г*Г*Г·Г*ëî ïîñëåòГ*áëè÷Г*ûõ ñòðîê 3ГёГІ   }
 
    wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ÑóììГ*Г°Г*ûé %' + DBGridEh1.Columns[1].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ÏîêГ*Г§Г*òåëü ГЉ Г±ГІГҐГЇГҐГ*ГЁ îïГ*Г±Г*îñòè îòõîäГ*:'+DBGridEh1.Columns[4].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ГЉГ«Г*Г±Г± îïГ*Г±Г*îñòè îòõîäГ*:  ');
    wdRng.InsertAfter(#13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
 
  finally
    wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName:=Sd.FileName);
  finally
    wdApp.DisplayAlerts := True;
  end; 
end;
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
22.06.2015, 23:48 50
ооо, огромное спасибо за каракули, да простите что с ними, но не стал заморачиваться, а можно узнать какова была проблема, мне для личного опыта хотелось бы

Добавлено через 40 минут
А как щас можно исправить кодировку?

Добавлено через 3 часа 58 минут
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
procedure TForm2.Action1Execute(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdRng, wdTable : Variant;
  i, j, Res : Integer;
  D : TDateTime;
  Bm : TBookMark;
  Sd : TSaveDialog;
  per:integer;
  kod: string;
begin 
    IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id_fkko, id_name_otchet from otchets where id_name_otchet=:w';
    ibquery1.ParamByName('w').Value:=Form1.DBLookupComboBox1.KeyValue;
    ibquery1.open;
    per:=ibquery1['id_fkko'];
     IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id,kod_fkko from fkko where id=:x';
    ibquery1.ParamByName('x').Value:=per;
    ibquery1.open;
    kod:=ibquery1['kod_fkko'];
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0));
  if not Sd.Execute then Exit;
   if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?'
      ,'Внимание!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
   wdApp.Visible := True;
   wdDoc := wdApp.Documents.Add;
   wdApp.ScreenUpdating := False;
  try
 
    wdRng := wdDoc.Content;
    wdRng.InsertAfter('Начальнику Департамента       '+#9+ #13#10);
    wdRng.InsertAfter('Росприроднадзора по           '+#9+ #13#10);
    wdRng.InsertAfter('Приволжскому федеральному     '+#9+ #13#10);
    wdRng.InsertAfter('округу                        '+#9+ #9+ #13#10);
    wdRng.InsertAfter('Ивану Ивановичу Иванову       '+#9+ #13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphright;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ЗАЯВЛЕНИЕ');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := TRUE;
    wdRng.Font.Size := 14;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphcenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('о подтверждении отнесения вида отхода к конкретному');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('классу опасности для окружающей среды');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Регистрационный номер № _____________ от «____» ____________ 2015 года');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Организация:');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    if not IBQuery1.Active then IBQuery1.Open;
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 8, 3);
    wdTable.Columns.item(1).Width:=20;
    wdTable.Columns.item(1).Width:=100;
    wdTable.Columns.item(1).Width:=70;
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdTable.Cell(1, 2).Range.Text := 'Полное наименование юридического лица ';
    wdTable.Cell(2, 2).Range.Text := 'Сокращенное наименование' ;
    wdTable.Cell(3, 2).Range.Text := 'Организационно-правовая форма' ;
    wdTable.Cell(4, 2).Range.Text := 'Место нахождения (из Устава)' ;
    wdTable.Cell(5, 2).Range.Text := 'ОГРН (основной государственный номер записи о создании юридического лица)' ;
    wdTable.Cell(6, 2).Range.Text := 'ИНН (идентификационный номер плательщика)' ;
    wdTable.Cell(7, 2).Range.Text := 'КПП (код причины постановки на учет)' ;
    wdTable.Cell(8, 2).Range.Text := 'Коды ОКВЭД' ;
   for i := 0 to 8 do
      wdTable.Cell(i, 1 ).Range.Text := i;
    ibquery1.sql.clear;
    ibquery1.sql.text:='select * from organiz';
    ibquery1.open;
    IBQuery1.DisableControls;
    Bm := ibquery1.GetBookMark;
    ibquery1.First;
    for i := 0 to 8 do
      wdTable.Cell(i, 3).Range.Text := ibquery1.Fields[i].AsString;
    ibquery1.GotoBookMark(Bm);
    ibquery1.EnableControls;
    wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter('просит подтвердить отнесение вида отходов к конкретному классу опасности  ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('для окружающей среды в соответствии с прилагаемым перечнем отходов. ');
    wdRng.Font.Reset;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Генеральный директор');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ЗАО "Михайловский сахарник"      _________________ /Шаталин Сергей Викторович/');
    wdRng.InsertAfter(#9+#9+#9+#9+#9+#9+#9+#9+'(подпись)'+#9+#9+#9+'(ФИО)');
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Телефон: (83140) 54-6-26 '+#9+#9+#9+#9+#9+#9+ FormatDateTime('dd.mm.yyyy', D) + #9 +'года');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Протокол расчета класса опасности отхода');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := true;
    wdRng.Font.Size := 14;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter('Наименование отхода: ' + Form1.DBLookupComboBox1.text );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Код вида отхода по ФККО:' + kod );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Наименование вида отхода по ФККО:' +  Form1.DBLookupComboBox1.text);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Расчет класса опасности отхода выполнен в соответствии с «Критериями отнесения ');
    wdRng.InsertAfter('опасных отходов к классу опасности для окружающей природной среды», утвержденными ');
    wdRng.InsertAfter('приказом МПР России от 15 июня 2001 г. № 511.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Перечень веществ, составляющих отход (далее — компонентов отхода) и их');
    wdRng.InsertAfter('количественное содержание установлены по составу исходного сырья и технологическим');
    wdRng.InsertAfter('процессам его переработки (или по результатам количественного химического анализа в ');
    wdRng.InsertAfter('аккредитованной лаборатории), прилагаемых к настоящему протоколу. ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Результаты расчета по компонентам отхода:');
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 2, QWiev.Fields.Count);
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng := wdTable.Range;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng := wdTable.Rows.Item(1).Range;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    wdRng := wdTable.Rows.Item(2).Range;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;
 
    for i := 0 to DBGrideh1.FieldCount-1 do
      wdTable.Cell(1, i + 1).Range.Text :=  DBGrideh1.Columns[i].Title.Caption;
    QWiev.DisableControls;
    Bm := QWiev.GetBookMark;
    QWiev.First;
    i := 1;
    while not QWiev.Eof do
    begin
      Inc(i);
      if i > 2 then wdTable.Rows.Add;
        for j := 0 to QWiev.Fields.Count-1 do
          wdTable.Cell(i, j + 1).Range.Text := QWiev.Fields[j].AsString;
      QWiev.Next;
    end;
    QWiev.GotoBookMark(Bm);
    QWiev.EnableControls;
    wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Суммарный %' + DBGridEh1.Columns[1].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Показатель К степени опасности отхода:'+DBGridEh1.Columns[4].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Класс опасности отхода:  ');
    wdRng.InsertAfter(#13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
  finally
      wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName:=Sd.FileName);
  finally
    wdApp.DisplayAlerts := True;
  end; 
end;
Вроде как исправил, но почему то последний абзац нивкакую не хочет записываться
0
northener
23.06.2015, 01:36
  #51

Не по теме:

Цитата Сообщение от Владислав-2012 Посмотреть сообщение
нивкакую
Ни в какую - пишется раздельно. (с) Буквоед.

0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
23.06.2015, 08:23 52
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
а можно узнать какова была проблема, мне для личного опыта хотелось бы
Из кода были убраны обращения к wdRng.Characters.Last. Места, где создаётся новый диапазон в конце текущего, для записи нового параграфа, были приведены к одному виду:
Delphi
1
  wdRng.Start := wdRng.End;
Везде, где вызывается метод для создания таблицы MS Word, в качестве диапазона передаётся пустой диапазон. При этом надо иметь в виду, что после вставки таблицы на диапазон, этот диапазон не расширяется. И поэтому, чтобы потом определить новый диапазон за таблицей, нельзя будет использовать приём с присвоением конечной координаты:
Delphi
1
  wdRng.Start := wdRng.End;
Вместо этого надо сначала взять диапазон таблицы и определить новый диапазон в конце этого табличного диапазона:
Delphi
1
2
  wdRng := wdTable.Range;
  wdRng.Start := wdRng.End;
Ещё в некоторых местах кода переменная wdRng была задействована для доступа к диапазону ячейки внутри таблицы. Поэтому, когда делалась попытка определить новый диапазон в конце текущего, то новый диапазон определялся в конце диапазона ячейки. И поэтому запись продолжалась в таблицу. Вот об этом случае шла речь:
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
но проблема остается, все что идет после первой таблицы, помещается в 1 ячейку 1 таблицы.
Эта проблема решается таким же образом - берём диапазон таблицы и новый диапазон определяем в его конце:
Delphi
1
2
  wdRng := wdTable.Range;
  wdRng.Start := wdRng.End;
Добавлено через 43 секунды
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Вроде как исправил, но почему то последний абзац нивкакую не хочет записываться
Последний абзац вообще не записывается? Или записывается как-то "неправильно"?
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
23.06.2015, 13:07 53
Совершенно не печатает, и в таблице щас ошибка в последней, но скорее я когда перепечатывал русские символы что то напутал

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
procedure TForm2.Action1Execute(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdRng, wdTable : Variant;
  i, j, Res : Integer;
  D : TDateTime;
  Bm : TBookMark;
  Sd : TSaveDialog;
  per:integer;
  kod: string;
begin 
    IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id_fkko, id_name_otchet from otchets where id_name_otchet=:w';
    ibquery1.ParamByName('w').Value:=Form1.DBLookupComboBox1.KeyValue;
    ibquery1.open;
    per:=ibquery1['id_fkko'];
     IbQuery1.sql.clear;
    Ibquery1.sql.text:='select id,kod_fkko from fkko where id=:x';
    ibquery1.ParamByName('x').Value:=per;
    ibquery1.open;
    kod:=ibquery1['kod_fkko'];
  Sd := SaveDialog1;
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0));
  if not Sd.Execute then Exit;
   if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?'
      ,'Внимание!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.'
      ,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;
   wdApp.Visible := True;
   wdDoc := wdApp.Documents.Add;
   wdApp.ScreenUpdating := False;
  try
 
    wdRng := wdDoc.Content;
    wdRng.InsertAfter('Начальнику Департамента       '+#9+ #13#10);
    wdRng.InsertAfter('Росприроднадзора по           '+#9+ #13#10);
    wdRng.InsertAfter('Приволжскому федеральному     '+#9+ #13#10);
    wdRng.InsertAfter('округу                        '+#9+ #9+ #13#10);
    wdRng.InsertAfter('Ивану Ивановичу Иванову       '+#9+ #13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphright;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('ЗАЯВЛЕНИЕ');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := TRUE;
    wdRng.Font.Size := 14;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphcenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter('о подтверждении отнесения вида отхода к конкретному');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('классу опасности для окружающей среды');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Регистрационный номер № _____________ от «____» ____________ 2015 года');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.InsertAfter('Организация:');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    if not IBQuery1.Active then IBQuery1.Open;
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng, 8, 3);
    wdTable.Columns.item(1).Width:=20;
    wdTable.Columns.item(1).Width:=100;
    wdTable.Columns.item(1).Width:=70;
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphleft;
    wdTable.Cell(1, 2).Range.Text := 'Полное наименование юридического лица ';
    wdTable.Cell(2, 2).Range.Text := 'Сокращенное наименование' ;
    wdTable.Cell(3, 2).Range.Text := 'Организационно-правовая форма' ;
    wdTable.Cell(4, 2).Range.Text := 'Место нахождения (из Устава)' ;
    wdTable.Cell(5, 2).Range.Text := 'ОГРН (основной государственный номер записи о создании юридического лица)' ;
    wdTable.Cell(6, 2).Range.Text := 'ИНН (идентификационный номер плательщика)' ;
    wdTable.Cell(7, 2).Range.Text := 'КПП (код причины постановки на учет)' ;
    wdTable.Cell(8, 2).Range.Text := 'Коды ОКВЭД' ;
   for i := 0 to 8 do
      wdTable.Cell(i, 1 ).Range.Text := i;
    ibquery1.sql.clear;
    ibquery1.sql.text:='select * from organiz';
    ibquery1.open;
    IBQuery1.DisableControls;
    Bm := ibquery1.GetBookMark;
    ibquery1.First;
    for i := 0 to 8 do
      wdTable.Cell(i, 3).Range.Text := ibquery1.Fields[i].AsString;
    ibquery1.GotoBookMark(Bm);
    ibquery1.EnableControls;
    wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter('просит подтвердить отнесение вида отходов к конкретному классу опасности  ');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('для окружающей среды в соответствии с прилагаемым перечнем отходов. ');
    wdRng.Font.Reset;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Генеральный директор');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('ЗАО "Михайловский сахарник"  ' +#9+ '  _________________ /Шаталин Сергей Викторович/');
    wdRng.InsertAfter(#9+#9+#9+#9+#9+#9+#9+#9+'(подпись)'+#9+#9+#9+'(ФИО)');
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Телефон: (83140) 54-6-26 '+#9+#9+#9+#9+#9+#9+ FormatDateTime('dd.mm.yyyy', D) + #9 +'года');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Протокол расчета класса опасности отхода');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := true;
    wdRng.Font.Size := 14;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter('Наименование отхода: ' + Form1.DBLookupComboBox1.text );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Код вида отхода по ФККО:' + kod );
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Наименование вида отхода по ФККО:' +  Form1.DBLookupComboBox1.text);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Расчет класса опасности отхода выполнен в соответствии с «Критериями отнесения ');
    wdRng.InsertAfter('опасных отходов к классу опасности для окружающей природной среды», утвержденными ');
    wdRng.InsertAfter('приказом МПР России от 15 июня 2001 г. № 511.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Перечень веществ, составляющих отход (далее — компонентов отхода) и их ');
    wdRng.InsertAfter('количественное содержание установлены по составу исходного сырья и технологическим ');
    wdRng.InsertAfter('процессам его переработки (или по результатам количественного химического анализа в ');
    wdRng.InsertAfter('аккредитованной лаборатории), прилагаемых к настоящему протоколу.');
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Результаты расчета по компонентам отхода:');
 
    wdRng.Start := wdRng.End;
    wdTable := wdDoc.Tables.Add(wdRng.characters.last, 2, QWiev.Fields.Count);
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    wdRng := wdTable.Range;
    wdRng.ParagraphFormat.Reset;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng := wdTable.Rows.Item(1).Range;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    wdRng := wdTable.Rows.Item(2).Range;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;
   for i := 0 to DBGrideh1.FieldCount-1 do
      wdTable.Cell(1, i + 1).Range.Text :=  DBGrideh1.Columns[i].Title.Caption;
    QWiev.DisableControls;
    Bm := QWiev.GetBookMark;
    QWiev.First;
    i := 1;
   while not QWiev.Eof do
    begin
      Inc(i);
      if i > 2 then wdTable.Rows.Add;
        for j := 0 to QWiev.Fields.Count-1 do
          wdTable.Cell(i, j + 1).Range.Text := QWiev.Fields[j].AsString;
      QWiev.Next;
    end;
   QWiev.GotoBookMark(Bm);
    QWiev.EnableControls;
 
//[U][B] вот этот участок абзаца не выводит почему то, даже без переменных, перемещал текст выше, перед таблицей, ничего не изменилось, то есть просто инсерты с интерами паеремещал выше
[/B][/U]   wdRng := wdTable.Range;
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Суммарный %' + DBGridEh1.Columns[1].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Показатель К степени опасности отхода:'+DBGridEh1.Columns[4].Footer.sumvalue);
    wdRng.InsertAfter(#13#10);
    wdRng.InsertAfter('Класс опасности отхода:  ');
    wdRng.InsertAfter(#13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 10;
    wdRng.InsertAfter(#13#10);
  finally
      wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName:=Sd.FileName);
  finally
    wdApp.DisplayAlerts := True;
  end; 
end;
Добавлено через 5 минут
Таблица впечатывается, если закрыть процесс OSPPSVC, тогда возникает ошибка - Could not convert variant of type(string) into type (currency)
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
24.06.2015, 08:12 54
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Delphi
75
  wdTable := wdDoc.Tables.Add(wdRng.characters.last, 2, QWiev.Fields.Count);
В этой строке (№75) надо wdRng.characters.last заменить на wdRng:
Delphi
75
  wdTable := wdDoc.Tables.Add(wdRng, 2, QWiev.Fields.Count);
Надо проверить - заработает ли после этого исправления.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
24.06.2015, 10:31 55
Нет, это я експериментировал, потому что wdgng ту же ошибку давало
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
25.06.2015, 09:35 56
У меня при проверках текст после таблицы добавляется, как положено. Почему при использовании оригинального кода в конце текст пропадает - не понятно пока...
0
1 / 1 / 0
Регистрация: 14.05.2015
Сообщений: 26
06.10.2015, 16:29 57
Добрый день ! Не могу разобраться в чем ошибка. Показывает на строки
uses
comobj;
помогите пожалуйста!
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
unit UnitAFU;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, Vcl.ComCtrls, Printers, ComObj, ShellApi;
 
type
  TFrmAfu = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    CmBoxBTS: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    Btnexit: TButton;
    CmboxAbts: TComboBox;
    CmboxArrl: TComboBox;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    DateTimePicker1: TDateTimePicker;
    procedure FormCreate(Sender: TObject);
    procedure BtnexitClick(Sender: TObject);
    procedure btnexportClick(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  FrmAfu: TFrmAfu;
 
implementation
 
{$R *.dfm}
 
uses
comobj;
 
//Функция записывает новый текст для закладки с именем aBmName.
//Функция возвращает значение True, если закладка найдена и её текст изменён
//и False - если закладка не найдена.
//Переустановка текста закладки выплоняется так:
//- Получаем ссылку на объект-диапазон, который содержит текст закладки.
//- Удаляем закладку.
//- Устанавливаем новый текст для объекта-диапазона.
//- Создаём новую закладку с диапазоном, который содержит новый текст.
function SetBmText(var aBms : Variant; const aBmName, aText : String) : Boolean;
var
  Bm, Rng : Variant;
begin
  //Проверяем - существует ли закладка с заданным именем.
  Result := aBms.Exists(aBmName);
  //Если закладка не найдена - выходим.
  if not Result then Exit;
 
  //Ссылка на закладку.
  Bm := aBms.Item(aBmName);
  //Ссылка на диапазон, связанный с закладкой.
  Rng := Bm.Range;
  //Удаление закладки.
  Bm.Delete;
  //Заменяем текст в диапазоне.
  Rng.Text := aText;
  //Добавляем новую закладку с таким же именем.
  aBms.Add(aBmName, Rng);
end;
 
procedure TFrmAfu.BtnExportClick(Sender: TObject);
var
  wdApp, wdDocs, wdDoc, wdBms : Variant;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
 
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( Application.ExeName )
  ;
  Od.Title := 'Выберите шаблон, на основе которого будет создан новый документ';
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageDlg(
      'Файл с заданным именем не найден. Действие отменено.'
      ,mtWarning, [mbOK], 0
    );
    Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
 
  //Делаем видимым окно MS Word.
  wdApp.Visible := True;
  //Ссылка на коллекцию документов.
  wdDocs := wdApp.Documents;
  //Попытка открыть выбранный файл.
  wdDoc := wdDocs.Open(FileName:=Od.FileName);
  //Подключаемся к коллекции закладок.
  wdBms := wdDoc.Bookmarks;
  //Ищем закладки с нужными именами и изменяем их текст, в соответствие
  //с данными, введёнными на форме.
  SetBmText(wdBms, 'BTS', CmboxBts.Text);
  SetBmText(wdBms, 'DATE', datetimepicker1.Text);
  SetBmText(wdBms, 'AntBts', CmboxAbts.Text);
  SetBmText(wdBms, 'AntRrl', CmboxArrl.Text);
 
  //Сохранять документ следует под другим именем, чтобы не перезаписать шаблон.
  //wdApp.DisplayAlerts := False; //Отключаем режим показа предупреждений.
  //wdDoc.SaveAs(FileName:=...);
  //wdApp.DisplayAlerts := True; //Включаем режим показа предупреждений.
  //Закрываем документ.
  //wdDoc.Close;
  //Закрываем MS Word.
  //wdApp.Quit;
end;
 
procedure TFrmAfu.BtnexitClick(Sender: TObject);
begin
close;
end;
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.10.2015, 16:56 58
Убери 38 и 39 строки, этот модуль уже подключен в 7-ой строке
1
1 / 1 / 0
Регистрация: 14.05.2015
Сообщений: 26
06.10.2015, 19:17 59
Спасибо за помощь ! Но тут обнаружилось что есть еще ошибки : )
Почему-то вместо даты пустое поле.
И подскажите еще как сделать чтобы на форме работало много комбо-боксов с данными из файлов. Почему-то работает только один : (

Заранее спасибо !

C++
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
//Ищем закладки с нужными именами и изменяем их текст, в соответствие
  //с данными, введёнными на форме.
  SetBmText(wdBms, 'BTS', CmboxBts.Text);
  SetBmText(wdBms, 'DATE', DateTimePicker1.Format);
  //SetBmText(wdBms, 'DATE', ComboBox1.Text);
  SetBmText(wdBms, 'Abts', CmboxAbts.Text);
  SetBmText(wdBms, 'Arrl', CmboxArrl.Text);
 
  //Сохранять документ следует под другим именем, чтобы не перезаписать шаблон.
  //wdApp.DisplayAlerts := False; //Отключаем режим показа предупреждений.
  //wdDoc.SaveAs(FileName:=...);
  //wdApp.DisplayAlerts := True; //Включаем режим показа предупреждений.
  //Закрываем документ.
  //wdDoc.Close;
  //Закрываем MS Word.
  //wdApp.Quit;
end;
 
 
procedure TFrmAfu.BtnexitClick(Sender: TObject);
begin
close;
end;
 
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  CmboxBts.Items.LoadFromFile ('bts.txt');                                  // загрузка вариантов из текстового файла в комбобокс
end;
 
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  Cmboxabts.Items.LoadFromFile ('abts.txt');                                  // загрузка вариантов из текстового файла в комбобокс
end;
 
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  Cmboxarrl.Items.LoadFromFile ('arrl.txt');                                  // загрузка вариантов из текстового файла в комбобокс
end;
 
 
end.
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
07.10.2015, 13:54 60
Цитата Сообщение от Alienvlg Посмотреть сообщение
И подскажите еще как сделать чтобы на форме работало много комбо-боксов с данными из файлов. Почему-то работает только один : (
Следующий код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  CmboxBts.Items.LoadFromFile ('bts.txt');
end;
 
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  Cmboxabts.Items.LoadFromFile ('abts.txt');
end;
 
procedure TFrmafu.FormCreate(Sender: TObject);
begin
  Cmboxarrl.Items.LoadFromFile ('arrl.txt');
end;
надо заменить на:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TFrmafu.FormCreate(Sender: TObject);
var
  Path : String;
begin
  //Полный путь директория, в котором лежит исполняемый файл программы. Справа строка завершается знаком: '\'.
  Path := ExtractFilePath(ParamStr(0));
  CmboxBts.Items.LoadFromFile(Path + 'bts.txt');
  Cmboxabts.Items.LoadFromFile(Path + 'abts.txt');
  Cmboxarrl.Items.LoadFromFile(Path + 'arrl.txt');
end;
Цитата Сообщение от Alienvlg Посмотреть сообщение
Почему-то вместо даты пустое поле.
Delphi
1
SetBmText(wdBms, 'DATE', DateTimePicker1.Format);
DateTimePicker1.Format - это свойство предназначено для формата представления даты/времени. Само значение даты надо читать из свойства DateTimePicker1.Date. Т. е., вот так надо написать:
Delphi
1
SetBmText(wdBms, 'DATE', FormatDateTime('dd.mm.yyyy', DateTimePicker1.Date));
2
07.10.2015, 13:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2015, 13:54
Помогаю со студенческими работами здесь

Как записать данные в файл
Как записать данные в файл в определенную строку в PHP

Как записать данные в файл CSV?
Всем привет. Есть некоторые данные для записи в файл CSV (не StringGrid). Перерыл интернет, но...

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

как записать данные в файл txt
У меня есть текстовый файл, в нем 5 полей к примеру |1|август|2013|22 сентября 2012|3 октября...

Как записать данные с куки в файл?
Всем привет! Есть код, который записывает ссылку в куки. Мне надо, чтобы когда выполнялся условие,...

Sqlite - Как записать данные в файл?
Как правильно записать данные в файл в формате .html ? А так же если кто шарит, объясните как...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru