Построение собственного справочника в Афине. Этап 5.

Речь пойдет о самом трудном для любого разработчика приложений этапе - составлении так называемых отчетов, а в терминах SQL базы - запросах к базе данных и выводе результатов на печать (под печатью здесь подразумевается в т.ч. и вывод на экран).

Вам опять нужно запустить настроечное приложение. Нажмите F4 на имени нашего справочника.
После запуска приложения для настройки справочника найдите вверху кнопку "Новый отчет" и нажмите ее. Появиться небольшой диалог с предложением ввести наименование отчета. Так как сейчас наименование для нас не очень существенно, то оставим какое предлагается по умолчанию "Отчет1". Ушлый читатель сразу заметит, если в названии есть цифра 1, то может быть и 2 и т.д., то есть, действительно, отчетов может быть больше одного. Нажмите "ОК".

Большое окно справа имело только две закладки "Форма ввода" и "Программы" Теперь же там появилась еще одна закладка с наименованием нашего отчета, а система переключилась на чистое белое поле созданного отчета.

То что вы видите перед собой можно назвать конструктором отчета. Посмотрите вниз: там есть две закладки "Функции" и "Лист 1". Мы сейчас находимся на первом и единственном листе отчета. Его установки по умолчанию можно увидеть через пункт контекстного меню "Установки листа..."

Вы уже догадались, что листов отчета тоже может быть несколько, поэтому дам некоторое пояснение:
Другие листы могут понадобиться (по опыту - не часто) когда ваш отчет может состоять из страниц с разными характеристиками, но которые не отделимы от друг друга, т.е. должны печататься всегда вместе. Это может быть отчет со страницами с разной ориентацией (вертикальной и горизонтальной), в состав отчета могут входить страницы с разными формами и т.п. (фантазия у чиновников, составляющих различные формы - избыточна).

Но в нашем примере нас будет интересовать только один лист (А4 с вертикальной ориентацией, который при вставке нового отчета имеет эти установки по умолчанию).

Итак мы находимся в конструкторе отчета первого листа.
Справа и внизу конструктора можно увидеть бледные пунктирные линии, показывающие границы листа, которые учитывают ширину и высоту листа без полей по краям, поэтому справа линия находится на отметке 18 см (тогда когда ширина физического листа 21 см), учитывая отступы слева 2 см и справа 1 см.

Примечание. Если вы при конструировании листа "залезете" на соседнюю страницу, перейдя, допустим, поле справа, то при выводе на печать такой лист автоматически "разрежется" на две страницы.

Поставим задачу.
Так как это расчет электроэнергии, то нам надо сконструировать квитанцию для оплаты, допустим через Сбербанк.

Самые аккуратные отчеты в Афине получаются, если использовать объект Таблица, что сейчас и будем делать.

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

У вас должно получиться так:

Ткните мышкой в любую ячейку таблицы - она выделится синим цветом. Нажмите 7 раз Ctrl+Q и потом 11 раз Ctrl+W.
Должна получиться таблица из 9 колонок и 14-ти строк.
Добавление строк и столбцов в таблицу можно делать и через контекстное меню таблицы
.

Установите курсор мышки на вторую слева вертикальную линию таблицы. Изображение курсора должен измениться, показывая что вертикальный разделитель таблицы можно перемещать. Нажмите левую кнопку мыши и сдвиньте вторую вертикальную линию вправо настолько чтобы крайняя правая колонка таблицы вплотную подошла к границе листа.

Затем объедините некоторые ячейки как показано на рисунке внизу. Объединять ячейки очень просто - отметьте нужные для объединения ячейки и нажмите Ctrl+U (в контекстном меню для этого тоже есть пункт). Отмечать можно мышкой, проведя с нажатой левой кнопкой по нужным ячейкам или ткнуть в крайнюю для объединения ячейку и нажать несколько раз (сколько надо) Shift+стрелки.

Теперь можно ввести в ячейки неизменяемый от квитанции к квитанции текст.
Чтобы ввести в ячейку просто текст отметьте ее и нажмите
F7 или кликните два раза на нужной для ввода текста ячейке.
После ввода текста или опять нажмите
F7, или ткните мышкой в любую другую ячейку.

Следующий номер программы - это вставка полей, через которые будет печататься текст, зависящий от конкретной записи в справочнике. У нас это: показания счетчика, сумма льгот и субсидии, расход энергии за месяц, сумма к оплате, оплачиваемый месяц.

Для того чтобы вставить поле в ячейку прежде всего ее надо отметить. Затем обратиться к верхней палитре кнопок и выбрать из меню нужный пункт.

В ячейку вставиться поле с текстом примерно такого содержания: "Поле46Табл1". Вполне возможно что не весь текст будет виден, на это не обращайте внимания.
Таким образом надо вставить поля во все ячейки, где нужен переменный текст.

Есть прием, позволяющий сделать это быстрее и эффективнее. Таблица позволяет отмечать ячейки в любом количестве и в разных местах таблицы. Надо отметить первую нужную ячейку, затем нажать клавишу Shift и придерживая её, тыкать в другие нужные ячейки. Если потом выбрать из меню "вид ячейки" пункт "Поле", то во все отмеченные ячейки вставятся поля.

В нашем случае вставленные поля могут выглядеть так (на рисунке часть таблицы):

Дальше "сюрприз".
Внизу формы переключитесь на закладку "Функции"

В редакторе вы увидите заготовки функций всех полей, которые мы вставили в таблицу. Имена этих функций менять нельзя.

Переключитесь обратно на форму с таблицей через закладку "Лист 1". Выполните двойной клик на каком-либо поле в таблице и вы опять попадёте в редактор, но при этом текстовый курсор установится на ту функцию, которая связана с этим полем.

Что нужно сделать в каждой из функций.
В нашем случае ввести очень простой текст (здесь пример одной из функций).

Замените двойные кавычки после слова "выход" на текст, который показан на рисунке.
В скобках встроенной функции "ЧислоВСтроку" первым параметром указывается поле, значение которого будет выводится в таблице при печати. Второй параметр указывает сколько знаков после запятой будет отображаться в числе.

Почему применяется везде встроенная функция "ЧислоВСтроку"? Дело в том, что все функции, которые выводят текст в отчетах имеют возвращаемое значение типа Строка и, если значение поля справочника не строкового типа (число, дата, логика), то эти значения надо преобразовывать в строчное представления.
Это может показаться неудобным, но на самом деле это дает большую гибкость при выводе разнообразных значений, путем форматирования строкового представления.

У нас в таблице, правда, есть одно поле, с которым связан элемент структуры строкового типа - "ЗаМес". Посмотрите на структуру и убедитесь, что там записано: "ЗаМес (строка)+". В функции, которая связана с этим полем достаточно написать выход ЗаМес;, не применяя функции "ЧислоВСтроку", которая, конечно же, здесь не к месту.

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

Обратите внимание на то, что текущее и предыдущее показания счетчика и расход энергии должен выводится целым числом, поэтому во втором  параметре передавать нужно 0. А при выводе рублей и копеек (льгота, субсидия, сумма к оплате) с двумя знаками после запятой.
Для этого в рублевых полях функция "ЧислоВСтроку" должна выглядеть так:
выход ЧислоВСтроку(СумССубс);
выход ЧислоВстроку(Льгота);
выход ЧислоВстроку(Субсидия);

Если второй параметр не передавать (как здесь), то по умолчанию этот параметр будет иметь значение 2 и, таким образом, в выходной форме эти значения будут печататься с двумя знаками после запятой.

Если вы заполнили функции всех полей и после этого компилятор не дал ошибки - в статусной строке появиться значок "ОК" (а компиляция текста, который вы вводите происходит постоянно в фоновом режиме, поэтому при любой описке-ошибке в нижней строке статуса будет отображаться красная строка, сигнализирующая об ошибке), можно вернуться в конструктор и довершить дело облагораживанием таблицы.

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

Тут надо заметить следующее:
Если вы установите обрамление какой-либо срединной ячейки в ноль, то ничего не изменится, так как все четыре смежные с ней ячейки тоже имеют обрамление, а эти линии и будут показываться. Иногда это здорово помогает, иногда раздражает, но все зависит от решаемой задачи.

В нашей таблице надо убрать кое-какие линии. Как это делается.

Установите в ноль указатель толщины линий

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

Отмечайте новую порцию ячеек и опять вызывайте пункт "Все линии".

Таким образом можно освободить от обрамления все ячейки, которые в этом нуждаются.

А в тех ячейках, которые надо выделить установить толщину линий в 0,4 мм. Вначале установите указатель толщины в 0,4, а только потом отмечая нужные ячейки замените в них толщину линий. В конечном итоге у вас должно получиться что-то в этом роде:

Обрамление ячеек, которые имеют нулевую толщину линий все равно показываются пунктирной линией, но на печати этих линий не будет.

Не забывайте постоянно сохранять свою работу и все будет хорошо.

И последний штрих к завершению.
На втором этапе, когда мы с вами конструировали форму ввода, то вставили в форму кнопку "Печать". Эта кнопка особенная. Если пользователь ее нажимает, то она выступает в двойной роли. Как и кнопка "Верно", заканчивает редактирование формы и, если были изменения в полях, то эти изменения записываются в базу, но другое (главное) назначение этой кнопки запускать формирование отчетов (если они, конечно есть в справочнике).
Мы вставили и сконструировали отчет, поэтому нажатие на эту кнопку во время работы с формой пользователем будет инициировать формирование отчета и запуск приложения, которое отображает сформированный отчет. В этом приложении можно посмотреть его, а также отправить на печать.

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

<<<предыдущий этап
На главную