Как ни странно, даже в таком серьезном деле, как разработка на IS-Builder, есть место для игры. Я вот недавно играла в прятки с кнопками, мне понравилось, присоединяйтесь.
Итак, есть некоторое условие, в зависимости от которого, кнопка либо показывается, либо прячется. Сделать это можно будет в событии «Карточка.Открытие» разными способами в зависимости от расположения кнопки на форме:
if (Мега-условие)
Action = Form.Actions.FindAction('ИМЯ_ДЕЙСТВИЯ')
if not VarIsNull(Action)
Controls = From.Controls.FindControlsByAction(Action)
foreach Control in Controls
if not VarIsNull(Control)
Control.Visible = FALSE
endif
endforeach
endif
endif
if (Мега-условие)
Action = Form.Actions.FindAction('ИМЯ_ДЕЙСТВИЯ')
if not VarIsNull(Action)
Controls = From.Controls.FindControlsByAction(Action)
foreach Control in Controls
ParentControl = Control.Parent
if not VarIsNull(ParentControl)
ParentControl.Visible = FALSE
endif
endforeach
endif
endif
Так-то вот, господа-разработчики. «Ловкость рук и никакого мошенничества».
Не совсем понятно что за игра имелась введу.
А есть работающий пример?
Вот вам реальный пример, где бы это могло пригодиться. Тип карточки "Письма исходящие (официальные)" кнопка "РКК" и связанное с ней действие "Регистрировать". Предположим, у вас нет модуля Канцелярия, тогда нажатие на эту кнопку в карточке документа приведет к сообщению об ошибке. Самое разумное в этой ситуации сделать так, чтобы этой кнопки не было на форме, если у вас нет модуля. Для этого, в событии "Карточка.Открытие" типа карточек эл. документов "Письма исходящие (официальные)" пишем такой код:
RegistrationAvailable = …
Form = Object.Form
MARGIN_BETWEEN_BUTTONS = 4
if not RegistrationAvailable
RegisterAction = Form.Actions.FindAction('&Регистрировать')
if not VarIsNull(RegisterAction)
RegisterControl = Form.Controls.FindControlByAction(RegisterAction)
RegisterControl.Visible = FALSE
ParentControl = RegisterControl.Parent
if not VarIsNull(ParentControl)
ParentControl.Height = ParentControl.Height - RegisterControl.Height - MARGIN_BETWEEN_BUTTONS
endif
MovingControls = CreateList()
// Найти кнопку, расположенную ниже
SignaturesAction = Form.Actions.FindAction('По&дписи')
if not VarIsNull(SignaturesAction)
SignaturesControl = Form.Controls.FindControlByAction(SignaturesAction)
if not VarIsNull(SignaturesControl)
MovingControls.Add('1'; SignaturesControl)
endif
endif
// Найти группу, расположенную ниже
BarCodeAction = Form.Actions.FindAction('&Штрих-код')
if not VarIsNull(BarCodeAction)
BarCodeControl = Form.Controls.FindControlByAction(BarCodeAction)
if not VarIsNull(BarCodeControl)
BarCodeParentControl = BarCodeControl.Parent
MovingControls.Add('2'; BarCodeParentControl)
endif
endif
// Сдвинуть вверх нужные контроли
foreach Control in MovingControls
Control.Top = Control.Top - RegisterControl.Height - MARGIN_BETWEEN_BUTTONS
endforeach
endif
endif
Как вычислить значение переменной RegistrationIsAvalible можно узнать из статьи http://club.directum.ru/blog/post/Exception-vsemogushhijj.aspx. В результате у тех, у кого модуль есть увидят кнопку "РКК", у кого нет модуля - и искушения нажать кнопку не будет.
Аналогичное решение реализовано в DIRECTUM 4.6.1 в справочнике Совещания кнопка "Конференция» - прячущаяся. Кто нашел?
P.S. Найдет только тот, у кого установлена интеграция с системами мгновенных сообщений.
Авторизуйтесь, чтобы написать комментарий