Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/162: Рейтинг темы: голосов - 162, средняя оценка - 4.50
 Аватар для King_of_Demons
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 8

Создание отчета в Word

12.04.2013, 19:14. Показов 32050. Ответов 28

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня такой вопрос, какой необходимо написать код для вывода отчета в Word и какую для этого необходимо подключить библиотеку? Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2013, 19:14
Ответы с готовыми решениями:

Создание отчета в Word
Здравствуйте. Заранее спасибо. У меня такой вопрос, имеется база данных в Delphi, при нажатии кнопки должен открыться Word в котором будет...

Создание отчета и его выгрузка в Excel, Word
Здравствуйте! Есть база данных в access и она соединена с делфи, мне нужно в делфи сделать отчеты, и чтоб они выгружались в excel, word и...

Вывод отчета в Word
Не получается реализовать вывод отчет По таблице "прием", нужен отчет, но, к сожалению, реализовать не выходит были попытки...

28
xq
1 / 1 / 0
Регистрация: 14.09.2014
Сообщений: 372
18.05.2015, 21:03
Студворк — интернет-сервис помощи студентам
Спасибо,все работает. Только вот где можно изменить названия колонок? У меня названия на англ
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
22.05.2015, 08:41
Цитата Сообщение от xq Посмотреть сообщение
Только вот где можно изменить названия колонок?
В кодах из поста №16 - это строки № 42..44 в первом коде или 42..43 - во втором. Там можно записать названия на русском языке. Или можно взять названия из DBGrid (если этот компонент задействован в проекте).
0
xq
1 / 1 / 0
Регистрация: 14.09.2014
Сообщений: 372
23.05.2015, 23:40
Цитата Сообщение от Mawrat Посмотреть сообщение
В кодах из поста №16 - это строки № 42..44 в первом коде или 42..43 - во втором. Там можно записать названия на русском языке. Или можно взять названия из DBGrid (если этот компонент задействован в проекте).
можете подробней описать как их заполнить?
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
25.05.2015, 11:54
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Например, можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
  for i := 0 to Query1.FieldCount - 1 do
    if AnsiUpperCase(Query1.Fields[i].FieldName) = 'Name' then
      VArr[j, i + 1] := 'Название'
    else if AnsiUpperCase(Query1.Fields[i].FieldName) = 'Size' then
      VArr[j, i + 1] := 'Размер'
    else if AnsiUpperCase(Query1.Fields[i].FieldName) = 'Weight' then
      VArr[j, i + 1] := 'Вес'
    else if AnsiUpperCase(Query1.Fields[i].FieldName) = 'Area' then
      VArr[j, i + 1] := 'Область обитания';
Или можно экспортировать в Excel те данные, которые представлены в DBGrid. Тогда, соответственно, и заголовки столбцов надо взять из DBGrid.
Примеры с таблицей animals из демонстрационной базы DBDEMOS (устанавливается при установке BDE).
1. Способ с записью всех данных в вариантный массив, его передачей в MS Excel и оформлением.
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
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Толщина линий.
  xlHairline = 1;   //Очень тонкая.
  xlThin = 2;       //Тонкая.
  xlMedium = -4138; //Средняя.
  xlThick = 4;      //Толстая.
  //Вид линии.
  xlContinuous = 1; //Непрерывная линия.
var
  exApp, exBook, exSh, exRng : OleVariant;
  VArr : Variant;
  Bm : TBookmark;
  i, j, k, ColCnt : Integer;
begin
  //1. Подготовка.
 
  //Запуск экземпляра Excel и получение ссылки на интерфейс корневого объекта (Excel.Application).
  exApp := CreateOleObject('Excel.Application');
  //Делаем видимым окно MS Excel.
  exApp.Visible := True;
  //Создаём рабочую книгу и получаем ссылку на её интерфейс.
  exBook := exApp.Workbooks.Add;
  //Ссылка на интерфейс первого рабочего листа в книге.
  exSh := exBook.Worksheets[1];
 
  //Открываем набор данных.
  Query1.Open;
  //Определяем количество видимых столбцов в DBGrid1.
  ColCnt := 0; //Количество видимых столбцов.
  for i := 0 to DBGrid1.Columns.Count - 1 do
    if DBGrid1.Columns[i].Visible then //Если столбец видимый.
      Inc(ColCnt);
  //Создаём двумерный вариантый массив. Он предназначен для записи всей таблицы.
  //Query1.RecordCount + 1 - здесь +1 для учёта шапки таблицы.
  VArr := VarArrayCreate([1, Query1.RecordCount + 1, 1, ColCnt], varVariant);
 
  //Определяем диапазон MS Excel, в который мы запишем таблицу.
  exRng := exSh.Range[exSh.Cells[3, 2],
    exSh.Cells[3, 2].Offset[Query1.RecordCount, ColCnt - 1]];
 
  //2. Запись шапки таблицы в вариантный массив.
 
  //Записываем в вариантный массив шапку таблицы с именами столбцов.
  //Названия столбцов берём из DBGrid1.
  j := 1; //Индекс очередной строки в вариантном массиве.
  k := 0; //Индекс столбца в вариантном массиве.
  for i := 0 to DBGrid1.Columns.Count - 1 do
    if DBGrid1.Columns[i].Visible then //Если столбец видимый.
    begin
      Inc(k);
      VArr[j, k] := DBGrid1.Columns[i].Title.Caption;
    end;
 
  //3. Записываем в вариантный массив данные таблицы.
 
  //Запоминаем текущее положение в наборе данных.
  Bm := Query1.GetBookmark;
  //Отключаем набор от элементов просмотра и навигации.
  Query1.DisableControls;
  try
    //Перебор записей в наборе данных и их запись в Ms Excel.
    Query1.First;
    while not Query1.Eof do
    begin
      Inc(j); //Номер очередной строки в вариантном массиве.
      //Записываем в вариантный массив очередную строку набора данных.
      k := 0;
      for i := 0 to DBGrid1.Columns.Count - 1 do
        if DBGrid1.Columns[i].Visible then //Если столбец видимый.
        begin
          Inc(k);
          VArr[j, k] := DBGrid1.Columns[i].Field.Value;
        end;
      //Переход к следующей записи набора данных.
      Query1.Next;
    end;
  finally
    //Переходим к прежнему положению в наборе данных.
    Query1.GotoBookmark(Bm);
    //Подключаем набор к элементам просмотра и навигации.
    Query1.EnableControls;
  end;
 
  //4. Записываем вариантный массив на лист MS Excel.
  exRng.Value := VArr;
 
  //5. Оформление таблицы на листе MS Excel.
 
  //Оформление всей таблицы.
  exRng.Borders.LineStyle := xlContinuous;  //Обрамляющие линии - непрерывная.
  exRng.Borders.Weight := xlThin;           //Толщина обрамляющих линий - тонкая.
  //Дполнительное оформление шапки таблицы.
  exRng.Rows[1].Font.Bold := True;          //Шрифт - жирный.
  exRng.Rows[1].Borders.Weight := xlMedium; //Толщина обрамляющих линий - средняя.
  //Подбор ширины столбцов по содержимому.
  exRng.Columns.AutoFit;
 
  //Заголовок и дополнительные сведения.
  exSh.Cells[1, 2].Value := 'Таблица 1';
  exSh.Cells[1, 2].Font.Size := 14;
  exSh.Cells[1, 2].Font.Bold := True;
 
  exSh.Cells[2, 2].Value := 'Дата создания: '
    + FormatDateTime('dd.mm.yyyy"-"hh:nn:ss:zzz', Now);
end;
2. Способ с построчной передачей данных в MS Excel (с помощью однострочного двумерного вариантного массива).
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
uses
  ComObj;
 
procedure TForm1.Button2Click(Sender: TObject);
const
  //Толщина линий.
  xlHairline = 1;   //Очень тонкая.
  xlThin = 2;       //Тонкая.
  xlMedium = -4138; //Средняя.
  xlThick = 4;      //Толстая.
  //Вид линии.
  xlContinuous = 1; //Непрерывная линия.
var
  exApp, exBook, exSh, exRng : OleVariant;
  VArr : Variant;
  Bm : TBookmark;
  i, k, ColCnt : Integer;
begin
  //1. Подготовка.
 
  //Запуск экземпляра Excel и получение ссылки на интерфейс корневого объекта (Excel.Application).
  exApp := CreateOleObject('Excel.Application');
  //Делаем видимым окно MS Excel.
  exApp.Visible := True;
  //Создаём рабочую книгу и получаем ссылку на её интерфейс.
  exBook := exApp.Workbooks.Add;
  //Ссылка на интерфейс первого рабочего листа в книге.
  exSh := exBook.Worksheets[1];
 
  //Открываем набор данных.
  Query1.Open;
  //Определяем количество видимых столбцов в DBGrid1.
  ColCnt := 0; //Счётчик видимых столбцов.
  for i := 0 to DBGrid1.Columns.Count - 1 do
    if DBGrid1.Columns[i].Visible then //Если столбец видимый.
      Inc(ColCnt);
  //Создаём двумерный вариантый массив. Он предназначен для записи отдельной строки таблицы.
  VArr := VarArrayCreate([1, 1, 1, ColCnt], varVariant);
 
  //Определяем диапазон MS Excel, который определяет верхнюю строку в таблице
  //на листе MS Excel.
  exRng := exSh.Range[exSh.Cells[3, 2], exSh.Cells[3, 2].Offset[0, ColCnt - 1]];
 
  //2. Запись шапки таблицы в вариантный массив.
 
  //Записываем в вариантный массив шапку таблицы с именами столбцов.
  //Названия столбцов берём из DBGrid1.
  k := 0; //Индекс столбца в вариантном массиве.
  for i := 0 to DBGrid1.Columns.Count - 1 do
    if DBGrid1.Columns[i].Visible then //Если столбец видимый.
    begin
      Inc(k);
      VArr[1, k] := DBGrid1.Columns[i].Title.Caption;
    end;
  //Записываем вариантный массив на лист MS Excel.
  exRng.Value := VArr;
 
  //3. Запись данных таблицы на лист MS Excel.
 
  //Запоминаем текущее положение в наборе данных.
  Bm := Query1.GetBookmark;
  //Отключаем набор от элементов просмотра и навигации.
  Query1.DisableControls;
  try
    //Перебор записей в наборе данных и их запись в Ms Excel.
    Query1.First;
    while not Query1.Eof do
    begin
      //Переходим к следующей строке на листе MS Excel.
      exRng := exRng.Offset[1, 0];
      //Записываем в вариантный массив очередную строку набора данных.
      k := 0; //Индекс столбца в вариантном массиве.
      for i := 0 to DBGrid1.Columns.Count - 1 do
        if DBGrid1.Columns[i].Visible then //Если столбец видимый.
        begin
          Inc(k);
          VArr[1, k] := DBGrid1.Columns[i].Field.Value;
        end;
      //Записываем вариантный массив на лист MS Excel.
      exRng.Value := VArr;
      //Переход к следующей записи набора данных.
      Query1.Next;
    end;
  finally
    //Переходим к прежнему положению в наборе данных.
    Query1.GotoBookmark(Bm);
    //Подключаем набор к элементам просмотра и навигации.
    Query1.EnableControls;
  end;
 
  //4. Оформление таблицы на листе MS Excel.
 
  //Определяем диапазон, в который мы записали данные.
  exRng := exSh.Range[exSh.Cells[3, 2], exRng.Cells[1, ColCnt]];
 
  //Оформление всей таблицы.
  exRng.Borders.LineStyle := xlContinuous;  //Обрамляющие линии - непрерывная.
  exRng.Borders.Weight := xlThin;           //Толщина обрамляющих линий - тонкая.
  //Дполнительное оформление шапки таблицы.
  exRng.Rows[1].Font.Bold := True;          //Шрифт - жирный.
  exRng.Rows[1].Borders.Weight := xlMedium; //Толщина обрамляющих линий - средняя.
  //Подбор ширины столбцов по содержимому.
  exRng.Columns.AutoFit;
 
  //Заголовок и дополнительные сведения.
 
  exSh.Cells[1, 2].Value := 'Таблица 1';
  exSh.Cells[1, 2].Font.Size := 14;
  exSh.Cells[1, 2].Font.Bold := True;
 
  exSh.Cells[2, 2].Value := 'Дата создания: '
    + FormatDateTime('dd.mm.yyyy"-"hh:nn:ss:zzz', Now);
end;
Вложения
Тип файла: 7z DBGridToExcel-02.7z (303.1 Кб, 26 просмотров)
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 93
23.03.2016, 10:01
Mawrat, а если у меня бд в access это как то влияет? У меня тут ошибку выдаёт wdApp := CreateOleObject('Word.Application');
0
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
23.03.2016, 10:08
какую ошибку?
покажите код.

ЗЫ создал бы свою тему и дал бы ссылку на этот код. зачем писать в старой теме?
0
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
07.12.2016, 13:50
Тема старая, но для меня актуальная. Скажите пожалуйста, как сделать, чтобы при запуске, MS Word выводил страницу в альбомном виде, а не в книжном?
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.12.2016, 19:39
Цитата Сообщение от Николай Спешил Посмотреть сообщение
Скажите пожалуйста, как сделать, чтобы при запуске, MS Word выводил страницу в альбомном виде, а не в книжном?
Пример:
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
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Группа констант Word.WdOrientation.
  wdOrientPortrait = 0;
  wdOrientLandscape = 1;
var
  wdApp, wdDoc : OleVariant;
begin
  //Попытка запуска MS Word.
  wdApp := CreateOleObject('Word.Application');
  //Делаем видимым окно MS Word.
  wdApp.Visible := True;
  //Создаём новый документ.
  wdDoc := wdApp.Documents.Add;
  //Для всего документа устанавливаем ориентацию страниц "Альбомная".
  wdDoc.PageSetup.Orientation := wdOrientLandscape;
  //Для всего документа устанавливаем ориентацию страниц "Книжная".
  //wdDoc.PageSetup.Orientation := wdOrientPortrait;
 
  {
  //Сохраняем документ.
  wdApp.DisplayAlerts := False; //Отключаем режим показа предупреждений.
  try
    wdDoc.SaveAs(FileName:='Путь файла'); //Запись документа в файл.
  finally
    wdApp.DisplayAlerts := True; //Включаем режим показа предупреждений.
  end;
 
  //Закрываем документ.
  wdDoc.Close;
  //Закрываем MS Word.
  wdApp.Quit;
  }
end;
Как разрабатывать программы для работы с приложениями MS Office. На примере MS Excel.
0
0 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 39
16.03.2017, 11:59
Доброго времени суток.
Прочел я тему. В общем-то все понятно. Но есть вопросы.
Если мне необходимо вывести в Ворд таблицу такого вида:
_____________________________
|________________|.................|
|________________|.................|
|________________|.................|
|________|_______|___________|
|......................|................ .....|
|______________|_____________|
|....................................... ......|
|____________________________|

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

ЗЫ И есть ли где материал, как вывести данные в pdf и html.
ЗЫЫ Хотя, с html, наверное, сам разберусь.


ЗЫЫЫ Что-то форум пробелы съедает(в примере таблицы)(заменил проделы точками)

Добавлено через 2 часа 36 минут
Разобрался, как создать таблицу.
Вот так получилось.
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
procedure TForm1.Button1Click(Sender: TObject);
const
  wdAlignParagraphCenter = 1;
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdRng, wdTable: Variant;
  I: Integer;
  N: String;
begin
  N := ExePath + '111.doc';
  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('Ñïèñîê ýëåìåíòîâ'#13#10);
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 14;
    for I := 0 to List.Count - 1 do
    begin
      wdRng := wdDoc.Content;
      wdRng.InsertAfter(#13#10);                    //Rows , Cols
      wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 6, 5);
      wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
      wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
      wdTable.Cell(1, 5).Merge(wdTable.Cell(4, 5));
      wdTable.Cell(1, 1).Merge(wdTable.Cell(1, 4));
      wdTable.Cell(2, 1).Merge(wdTable.Cell(2, 4));
      wdTable.Cell(3, 1).Merge(wdTable.Cell(3, 4));
      wdTable.Cell(4, 3).Merge(wdTable.Cell(4, 4));
      wdTable.Cell(4, 1).Merge(wdTable.Cell(4, 2)); 
      wdTable.Cell(5, 4).Merge(wdTable.Cell(5, 5));
      wdTable.Cell(5, 1).Merge(wdTable.Cell(5, 3));
      wdTable.Cell(6, 1).Merge(wdTable.Cell(6, 5));
      wdTable.Cell(1, 1).Range.Text := TMyClass(List[I]).Surname;
        wdRng := wdTable.Cell(2, 1).Range;
        wdRng.Font.Bold := False;
      wdTable.Cell(2, 1).Range.Text := TMyClass(List[I]).Name;
      wdTable.Cell(3, 1).Range.Text := TMyClass(List[I]).Date;
      wdTable.Cell(1, 2).Range.Text := IntToStr(TMyClass(List[I]).Index);  
    end;
  finally
    wdApp.ScreenUpdating := True;
  end;
  wdApp.DisplayAlerts := False;
  try
    wdDoc.SaveAs(FileName := N);
    wdApp.Activate;
  finally
    wdApp.DisplayAlerts := True;
  end;
end;
Только как теперь часть текста в ячейке сделать жирным(определенное количество символов в строке), вставить картинку, убрать интервал между строк и выравнивание ячеек по вертикали.

Подскажите пожалуйста.

ЗЫ И есть ли возможность в Delphi 7 как-то сохранять в docx?

Добавлено через 10 минут
И где можно посмотреть методы и свойства объектов wdApp, wdDoc, wdRng, wdTable? Автодополнение, или как эта штука называется, с ними не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2017, 11:59
Помогаю со студенческими работами здесь

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

Delphi 7 вывод отчёта в word
Ребята помогите,мне надо чтобы таблица в DBGrid1 выводилась в word

Создание отчета в MS WORD
Всем здравствуйте! У меня такой вопрос. Как сделать что бы определенная информация из моей программы занеслась в word -овский документ....

Создание отчёта в Word
Здравствуйте, пожалуйста, подскажите, как создать отчёт не в QuickRep, а в Word. Причем он должен содержать от каждой формы информацию...

Создание отчета в Word
может кто сталкивался. создаю документ Word, проблема в том, что после его закрытия ругается на сервер... т.е. выдает ошибку "сервер...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru