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

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

Конструктор
  1. Объявляем все переменные.
  2. Создаем страницы
  3. Устанавливаем все свойства документа и страниц
  4. Рисуем простые графические объекты
  5. Объявляем все используемые шрифты
  6. Расставляем постоянный текст на странице
  7. Расставляем переменный текст на странице
  8. Вставляем или создаем сложные графические объекты
        Пример документа PDF:
set LDataSet = createDataSet("TRoundAbiturSt")
'Объявление переменных
LDataSet.AddQueryItem 1, "ID", ID
LDataSet.AddQueryItem 0, "RoundComp$N"
LDataSet.AddQueryItem 0, "BachRound$N"
LDataSet.AddQueryItem 0, "LastName"
LDataSet.AddQueryItem 0, "FirstName"
LDataSet.AddQueryItem 0, "MiddleName"
LDataSet.AddQueryItem 0, "BirthDate"
LDataSet.AddQueryItem 0, "RegNumber"
LDataSet.AddQueryItem 0, "SecondStageCity$D"
LDataSet.AddQueryItem 0, "PhoneList"

'Присваивание переменным значений
OlympName = LDataSet.Field("RoundComp$N")
OlympClass = LDataSet.Field("BachRound$N")
LastName = LDataSet.Field("LastName")
FirstName = LDataSet.Field("FirstName")
MiddleName = LDataSet.Field("MiddleName")
if not IsNull(LDataSet.Field("BirthDate")) then
  BirthDate = LDataSet.Field("BirthDate")
else
  BirthDate = "(не задана)"
end if
RegNo = LDataSet.Field("RegNumber")
if not IsNull(LDataSet.Field("SecondStageCity$D")) then
  OlympCity = LDataSet.Field("SecondStageCity$D")
else
  OlympCity = "(не выбран город участия)"
end if
if not IsNull(LDataSet.Field("PhoneList")) then
  Phone = LDataSet.Field("PhoneList")
else
  Phone = ""
end if

'CanCompress = False - признак сжатия файла
set page = CreatePage(Null) ' создаем страницу
'Объявляем используемые шрифты
set font = page.createFont("Arial", 20, False, False)
set labelFont = page.createFont("Arial", 16, False, False)
set dataFont = page.createFont("Arial", 18, True, False)
set bigFont = page.createFont("Arial", 24, False, False)

'page.DrawGrid  - рисуем сетку для удобства отладки

page.LineWidth = 0.5 ' Установка толщины линии

' Рисуем прямоугольники
page.Rectangle 8, 12, 4, 4, True
page.Rectangle 190, 12, 4, 4, True

page.Rectangle 8, 273, 4, 4, True
page.Rectangle 105, 273, 4, 4, True
page.Rectangle 190, 273, 4, 4, True

'Выводим постоянный и переменный текст
Q = font.WriteText ("Межрегиональная олимпиада школьников", 12, 20, 178, 2)
Q = bigFont.WriteText (OlympName, 12, 45, 178, 2)
Q = bigFont.WriteText (OlympClass, 12, 56, 178, 2)

Q = font.WriteText ("Титульный лист", 12, 72, 178, 2)

labelFont.WriteLine "Фамилия", 25, 115 - 23
labelFont.WriteLine "Имя", 25, 123 - 23
labelFont.WriteLine "Отчество", 25, 131 - 23
labelFont.WriteLine "Дата", 25, 139 - 23
labelFont.WriteLine "рождения", 25, 145 - 23

labelFont.WriteLine "Регистрационный номер", 25, 169 - 30
labelFont.WriteLine "Город проведения", 25, 177 - 30
labelFont.WriteLine "Аудитория", 25, 185 - 30


labelFont.WriteLine "Дата", 25, 211
labelFont.WriteLine "Подпись", 25, 219
labelFont.WriteLine "Телефон", 25, 227


dataFont.WriteLine LastName, 63, 114 - 23
dataFont.WriteLine FirstName, 63, 122 - 23
dataFont.WriteLine MiddleName, 63, 130 - 23
dataFont.WriteLine BirthDate, 63, 141 - 23

dataFont.WriteLine RegNo, 100, 168 - 30
dataFont.WriteLine OlympCity, 100, 176 - 30

' Рисуем линии
page.line 100, 192 - 30, 150, 192 - 30
page.line 58, 218, 108, 218
page.line 58, 226, 108, 226
Q = dataFont.WriteText(Phone, 58, 226, 65, 0)



' Устанавливаем новый цвет
page.setColor 192, 192, 192

S = "шифр"
font.MeasureLine S, W, H  ' измеряем текстовый блок
Q = font.WriteText(S, 139, 244 + ((23 - H) / 2), 40, 2) ' располагаем текстовый
блок на странице

' Устанавливаем новый цвет
page.setColor 255, 0, 0
' Устанавливаем толщину линий в 1 пиксель
page.LineWidth = 0
' Рисуем линии по координатам
X = 139
Y = 267

page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y

X = X + 40
page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y


Y = Y - 23
page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y

X = X - 40
page.line X, Y - 3, X, Y + 3
page.line X - 3, Y, X + 3, Y

Результат:

Титул