Difference between revisions of "OnBeforePrint"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
(No difference)

Revision as of 08:52, 7 February 2021

  OnBeforePrint (События таблиц)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Расположение:Любой глобальный модуль, текущий локальный модуль
Визуальность:Да

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

Для дополнительной информации см. статьи Электронная таблица SFT и Редактор электронных таблиц.

Синтаксис

OnBeforePrint(<Вызывающая таблица (TABLE)>):<Разрешить печать (INT)>

Аргументы

  • <Вызывающая таблица (TABLE)> - Таблица, для которой произошло событие.

Возвращаемое значение

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

Примеры

Function OnBeforePrint(SourceTable)
  //Разрешить стандарный диалог печати
  Result:=1;
  //Если параметры печати таблицы были изменены, сохранить их во внешний файл
  //Сохраняемые параметры включают: ориентацию листа, режим масштабирования, размер полей и колонтитулов и др. установки
  If Таб.PrintSettingsChanged Then
    Файл:=ПолучитьИмяУстановокПечатнойФормы(Таб);
    If isEmpty(Файл) Then
      Exit;
    EndIf;
    aList:=List.Create();
    aList.SetByName("Orientation",Таб.Printing.Orientation);
    aList.SetByName("ScaleMode",Таб.Printing.ScaleMode);
    aList.SetByName("Scale",Таб.Printing.Scale);
    aList.SetByName("PageOptions",Таб.Printing.PageOptions);
    aList.SetByName("Left",Таб.Printing.Fields.Left);
    aList.SetByName("Right",Таб.Printing.Fields.Right);
    aList.SetByName("Up",Таб.Printing.Fields.Up);
    aList.SetByName("Down",Таб.Printing.Fields.Down);
    aList.SetByName("Titles.Up",Таб.Printing.Titles.Up.Size);
    aList.SetByName("Titles.Down",Таб.Printing.Titles.Down.Size);
    ObjectToFile(aList,Файл);
  EndIf;
  
  //Если необходимо "распечатать" таблицу на Интернет-принтере, он будет задан в установках пользователя
  Принтер:=Trim(Пользователь.ИнтернетПринтер);
  If Принтер<>"" Then
    //Запретить вывод стандартного окна печати, если используется Интернет-принтер
    Result:=0;
    aList:=List.Create();
    //Если модуль "печати" возвратит 2, тогда пользователь отказался от Интернет-печати и решил распечатать таблицу обычным способом
    aList.SetByName("Результат",0);
    aList.SetByName("Таблица",Таб);
    //Вызываем модальный модуль для соединения с удаленным сервером и отсылки данных на него
    LoadModule(10,"Modules\FreeForms\ВнутренниеОбработки\СпециальныеОбработки\ПечатьНаИнтернетПринтере",aList,0,"Module","Form");
    If aList.GetByName("Результат")=2 Then
      //Возврат к стандарной печати по требованию пользователя
      Таб.Print(1);
    EndIf;
  EndIf;
EndFunction