Полезные мелочи при работе с карточками ч.2 (Изменение надписей)

5 2

О чем вообще речь? Да о Карточках все, а конкретно о блоках текста, который мы хотели бы менять в зависимости от внешних условий. Например - для разных групп сотрудников, разные подсказки. Или для определения форматов и соответствующих руководств. В общем, кто не понял - по ходу все станет понятно!

При создании/редактировании карточки, нам надо обратить внимание на Ленту в верхней части Формы представления, и конкретно на элемент "Метка":

При ее создании и помещении на форму карточки вы увидите ее свойства:

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

Главными строками в нашем коде будут следующие:

  • Controls = Object.ActiveForm.Controls                   // Коллекция элементов формы
  • Control = Controls.FindControl('STLabel1')            // Конкретный элемент с именем "STLabel1"
  • if Assigned(Control)                                                 // Проверка на Пустоту или NULL, может быть полезной
  • Control.Text = ""                                                       // Та самая замена, которой мне так не хватало

Вот по сути и все, осталось это внести в код и получать заветные Изменения! Так сделаем же что-нибудь простое и понятное:

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

Controls = Object.ActiveForm.Controls
Control = Controls.FindControl('STLabel1')
   if Sender.AsString == 'Паспорт РФ'
      Control.Text = "Формат документа: 00 00 №000000"
   else
      if Sender.AsString == 'Водительские права'
         Control.Text = "Формат документа: АА №0000000000"
      else
         Control.Text = "Формат этого документа - произвольный."
      endif
   endif  

После этого можно начинать тестирование в полевых условиях:

 

У метки заголовок "11", так как иначе ее легко потерять. Теперь вводим в поле "Паспорт РФ" и жмем Enter:

Отлично, это работает. Проверяем дальше и набираем "Водительские права" и просто кликаем мышью в любом другом поле:

Замечательно. Теперь впишем что-нибудь еще:

Собственно чего мы и пытались добиться - текст меняется в зависимости от поданных параметров в режиме Онлайн. 

P.S.: Касательно создания новых реквизитов, учитывайте тот факт, что возможно с системой будет работать другой человек, поэтому заводите реквизиты максимально подробно и корректно. В моем примере - плохой вариант (Имя: Doc4, Заголовок: "Doc4", тип Строка). Лучше если бы это было описано так: (Имя: DocPeople,  Заголовок: "Документ удостоверяющий  личность", тип Строка). так и я не забуду, что это и тот кто будет после меня. 

5
Авторизуйтесь, чтобы оценить материал.
3
Юлия Литвинюк

Тарас, а почему всплывающие подсказки контролов не используете?

  1. Использование меток "утяжеляет" карточку
  2. В большинстве случаев подсказку надо менять у другого контрола ( в вашем примере это поле "Номер документа" и пользователю еще надо сообразить где метка изменилась
  3. Постоянно меняющиеся метки, предполагаю, будут мешать пользователю
Тарас Асачёв

Это же обычный пример, который можно использовать для чего угодно. У меня последний пример такой:

CurrentUser = ServiceFactory.GetUserByName(Application.Connection.UserName)
Controls = Object.ActiveForm.Controls
Control = Controls.FindControl('STLabel1')
Object.Requisites("Дополнение5").AsString = 'Последним резолюцию правил: ' & CurrentUser.FullName & ' (' & Today() & ')'
Control.Text = Object.Requisites("Дополнение5").AsString

Просто чтобы было ясно, кто последним меня поле. Тут же не подсказка нужна, а точная информация о последнем наследившем. 

Авторизуйтесь, чтобы написать комментарий