Мельница данных  (08.12.2022)
Порядок создания

Для создания шаблона PDF-документа необходимо в системной форме Платформы выбрать класс, к которому будет строиться документ. В подменю "Подпрограммы" вызвать контекстное меню и выбрать пункт "Создать шаблон отчета PDF". Заполнить необходимые поля и приступить к созданию скрипта в окне "Скрипт шаблона".

Конструктор
  1. Объявляем все переменные.
  2. Создаем страницы
  3. Устанавливаем все свойства документа и страниц
  4. Рисуем простые графические объекты
  5. Объявляем все используемые шрифты
  6. Расставляем постоянный текст на странице
  7. Расставляем переменный текст на странице
  8. Вставляем или создаем сложные графические объекты
Пример
Пример документа PDF:
001set LDataSet = createDataSet("TRoundAbiturSt")
002'Объявление переменных
003LDataSet.AddQueryItem 1, "ID", ID
004LDataSet.AddQueryItem 0, "RoundComp$N"
005LDataSet.AddQueryItem 0, "BachRound$N"
006LDataSet.AddQueryItem 0, "LastName"
007LDataSet.AddQueryItem 0, "FirstName"
008LDataSet.AddQueryItem 0, "MiddleName"
009LDataSet.AddQueryItem 0, "BirthDate"
010LDataSet.AddQueryItem 0, "RegNumber"
011LDataSet.AddQueryItem 0, "SecondStageCity$D"
012LDataSet.AddQueryItem 0, "PhoneList"
013
014'Присваивание переменным значений
015OlympName = LDataSet.Field("RoundComp$N")
016OlympClass = LDataSet.Field("BachRound$N")
017LastName = LDataSet.Field("LastName")
018FirstName = LDataSet.Field("FirstName")
019MiddleName = LDataSet.Field("MiddleName")
020if not IsNull(LDataSet.Field("BirthDate")) then
021  BirthDate = LDataSet.Field("BirthDate")
022else
023  BirthDate = "(не задана)"
024end if
025RegNo = LDataSet.Field("RegNumber")
026if not IsNull(LDataSet.Field("SecondStageCity$D")) then
027  OlympCity = LDataSet.Field("SecondStageCity$D")
028else
029  OlympCity = "(не выбран город участия)"
030end if
031if not IsNull(LDataSet.Field("PhoneList")) then
032  Phone = LDataSet.Field("PhoneList")
033else
034  Phone = ""
035end if
036
037'CanCompress = False - признак сжатия файла
038set page = CreatePage(Null) ' создаем страницу
039'Объявляем используемые шрифты
040set font = page.createFont("Arial", 20, False, False)
041set labelFont = page.createFont("Arial", 16, False, False)
042set dataFont = page.createFont("Arial", 18, True, False)
043set bigFont = page.createFont("Arial", 24, False, False)
044
045'page.DrawGrid  - рисуем сетку для удобства отладки
046
047page.LineWidth = 0.5 ' Установка толщины линии
048
049' Рисуем прямоугольники
050page.Rectangle 8, 12, 4, 4, True
051page.Rectangle 190, 12, 4, 4, True
052
053page.Rectangle 8, 273, 4, 4, True
054page.Rectangle 105, 273, 4, 4, True
055page.Rectangle 190, 273, 4, 4, True
056
057'Выводим постоянный и переменный текст
058Q = font.WriteText ("Межрегиональная олимпиада школьников", 12, 20, 178, 2)
059Q = bigFont.WriteText (OlympName, 12, 45, 178, 2)
060Q = bigFont.WriteText (OlympClass, 12, 56, 178, 2)
061
062Q = font.WriteText ("Титульный лист", 12, 72, 178, 2)
063
064labelFont.WriteLine "Фамилия", 25, 115 - 23
065labelFont.WriteLine "Имя", 25, 123 - 23
066labelFont.WriteLine "Отчество", 25, 131 - 23
067labelFont.WriteLine "Дата", 25, 139 - 23
068labelFont.WriteLine "рождения", 25, 145 - 23
069
070labelFont.WriteLine "Регистрационный номер", 25, 169 - 30
071labelFont.WriteLine "Город проведения", 25, 177 - 30
072labelFont.WriteLine "Аудитория", 25, 185 - 30
073
074
075labelFont.WriteLine "Дата", 25, 211
076labelFont.WriteLine "Подпись", 25, 219
077labelFont.WriteLine "Телефон", 25, 227
078
079
080dataFont.WriteLine LastName, 63, 114 - 23
081dataFont.WriteLine FirstName, 63, 122 - 23
082dataFont.WriteLine MiddleName, 63, 130 - 23
083dataFont.WriteLine BirthDate, 63, 141 - 23
084
085dataFont.WriteLine RegNo, 100, 168 - 30
086dataFont.WriteLine OlympCity, 100, 176 - 30
087
088' Рисуем линии
089page.line 100, 192 - 30, 150, 192 - 30
090page.line 58, 218, 108, 218
091page.line 58, 226, 108, 226
092Q = dataFont.WriteText(Phone, 58, 226, 65, 0)
093
094
095
096' Устанавливаем новый цвет
097page.setColor 192, 192, 192
098
099S = "шифр"
100font.MeasureLine S, W, H  ' измеряем текстовый блок
101Q = font.WriteText(S, 139, 244 + ((23 - H) / 2), 40, 2) ' располагаем текстовый
102блок на странице
103
104' Устанавливаем новый цвет
105page.setColor 255, 0, 0
106' Устанавливаем толщину линий в 1 пиксель
107page.LineWidth = 0
108' Рисуем линии по координатам
109X = 139
110Y = 267
111
112page.line X, Y - 3, X, Y + 3
113page.line X - 3, Y, X + 3, Y
114
115X = X + 40
116page.line X, Y - 3, X, Y + 3
117page.line X - 3, Y, X + 3, Y
118
119
120Y = Y - 23
121page.line X, Y - 3, X, Y + 3
122page.line X - 3, Y, X + 3, Y
123
124X = X - 40
125page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y

Результат:

Титул