Джентльменский набор
Универсальный скрипт печати

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

шаг Script Step Комментарий
1    Go to Layout [LayoutName]

   переход в печатную форму

2    Print Setup[Restore; No dialog]

   задание ориентации печати (портрет/альбом)

3

   Enter Preview Mode [Pause]
   или
   Print[]
   или
   Save Records As PDF [Restore; Records being browsed]  

   просмотр

   печать

   сохранение в 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-↓
  возврат - Enter

 

 ,

видимую только в режиме 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), текущей строке портала или иному заданному объекту.


 Демо-файл (.fp7)




Автор: FMLogia

Тэги: печать, универсальные скрипты

← Вернуться к списку статей