Стандартная процедура вывода готовой печатной формы (бланка документа, сводки, отчета, журнала, картинок и т.п.), в общем-то, проста сама по себе и состоит всего из трех шагов.
шаг | Script Step | Комментарий | ||
1 | Go to Layout [LayoutName] |
переход в печатную форму |
||
2 | Print Setup[Restore; No dialog] |
задание ориентации печати (портрет/альбом) |
||
3 |
Enter Preview Mode [Pause] |
просмотр печать сохранение в PDF / отправка по e-mail |
Когда количество различных печатных форм с различными ориентациями и различными типами вывода становится больше трех-четырех, (см., например, проект Elasto на этом сайте), возникает естественное желание использовать общий скрипт с параметрами, описывающими все возможные комбинации вариантов вывода.
Например, вот такие:
Если посмотреть на эту табличку, то не трудно увидеть, что задача сводится к трем вопросам:
ЧТО печатаем (лэйаут), КАК (ориентация) и КУДА (просмотр/принтер/PDF/e-mail).
Следовательно, в основе любой процедуры вывода печатной формы должен лежать универсальный скрипт с тремя параметрами вида
SUPER Print [ Parameter: "LayoutName Portrait_Album Print_Preview_Pdf" ],
который вызывается либо сам по себе, либо в составе внешнего скрипта после предварительной подготовки - отбор записей, сортировка и т.п. При этом в вызывающем скрипте можно динамически сформировать параметры "Что Как Куда" и передать их универсальному скрипту в виде калькулируемого выражения.
Например:
1. Прямой вызов скрипта:
SUPER Print [ Parameter: "Накладная Album Preview" ]
- просмотр накладной в ориентации "Альбом"
2. Вызов из внешнего скрипта "ПечатьДокумента" с предварительным отбором, сортировкой и с параметрами "Что Как Куда":
ПечатьДокумента [ Parameter: "Накладная Album Preview"]
# Предварительная работа (проверка готовности документа, прав на печать и т.п.)
........................
# отбор строчек документа к печати
Go to Related Record [From table:“DocLines”] [Show only related records]
.......................
# сортировка
Sort Records [Restore; No dialog]
.......................
Perform Script [“SUPER Print”; Parameter: Get (ScriptParameter))
# где ScriptParameter = "Накладная Album Preview" (берется из параметра вызывающего скрипта)
# завершающая работа и возврат в исходную позицию
...............................
А теперь рассмотрим сам универсальный скрипт.
При его написании и применении используется несколько простых правил:
А. Параметр скрипта представляет из себя текстовую строку, состоящую из трех слов-параметров, разделенных как минимум одним пробелом:
- Название лэйаута (например, "Накладная") - обязательный параметр и всегда первый.
- Название ориентации: "Portrait" или "Album" - не обязательный параметр (при отсутствии - "Portrait")
- Тип вывода: "Print", "Preview" или "PDF" - не обязательный параметр (при отсутствии - "Print")
B. Предполагается, что кнопки, запускающие скрипт печати, находятся не в самой печатной форме, а в какой-то другой - управляющей, форме ввода документа, и т.п. В режиме "Browse" пользователя в печатную форму, как правило, и пускать-то не надо - только в режиме "Preview". После выполнения вывода печатной формы должен происходить возврат в исходную позицию, т.е. в лэйаут, из которого запущен скрипт.
С. В режиме "Print" возврат происходит автоматически по окончании печати, в режиме "PDF" - простым закрытием окна Adobe Reader'a (крестиком) после сохранения в файл/отправки e-mail.
В режиме "Preview" есть особенности. В целях экономии места и ограничения излишней свободы действий пользователя (ради его же блага) лучше спрятать Status Area (панель инструментов) и запретить любые действия, кроме листания страниц (Ctrl-↑ Ctrl-↓) и возврата (Enter). При этом пользователю, конечно, нужно в каком-нибудь месте в печатной форме показать подсказку вида
листание страниц - Ctrl-↑ Ctrl-↓ |
,
видимую только в режиме Preview. Это легко делается с помощью условного форматирования (см. демо-файл).
D. Поскольку в режимах Runtime Solutions, Web Publishing, WebDirect команда "Save Records As PDF" не выполняется, то, чтобы не пугать пользователя непонятными сообщениями, следует перед сохранением в PDF проверить текущую версию вашего приложения с помощью функции Get ( ApplicationVersion ). Если версия не FileMaker Pro и не FileMaker Go - выдаем собственное сообщение и возвращаемся в исходную позицию. В приведенном примере для краткости проверка проводится только для режима Runtime.
Эти основные правила и реализованы в файле-примере.
При желании в данный скрипт легко добавить дополнительные проверки и действия, например:
E. Предварительная проверка отсортированности записей (если сортировка необходима).
F. Запрет печати документа/отчета или сохранения его в PDF по условию. Примеры таких условий:
- у пользователя нет права вывода на печать;
- приложение используется в демо-режиме и разрешен только просмотр.
G. Процедура точного возврата после печати в исходную позицию, включая не только переход к нужной экранной форме (лэйауту), но и к нужной закладке (Tab Control), текущей строке портала или иному заданному объекту.
Автор: FMLogia
Тэги: печать, универсальные скрипты