Страница 1 из 1

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 05 Сентябрь 2014, 11:09
morkovin
C9.0 ABC
В броусе в режиме EIP надо запретить или разрешить редактирование нескольких полей в зависимости от значения другого поля. В стандартном шаблоне нет фичи "разрешать EIP по условию". В какой эмбед можно(нужно) вставить это условие ?

Re: EIP - запрет/разрешение редактирования полей по условию

Добавлено: 05 Сентябрь 2014, 12:19
kreator
В EditClass есть свойство ReadOnly. По-моему то, что надо. А присваивать надо, наверное там, где вычисляется это условие.
Есть ещё вариант, железно работающий, но идеологически неправильный. На событие EVENT:Selected в методе TakeEvent до ParentCall делать проверку на условие и в случае невыполнение делать return EditAction:Forward. Но в этом случае нужно ещё отслеживать возможную комбинацию клавиш SHIFT-TAB.

Re: EIP - запрет/разрешение редактирования полей по условию

Добавлено: 05 Сентябрь 2014, 13:39
morkovin
В EditClass есть свойство ReadOnly. По-моему то, что надо. А присваивать надо, наверное там, где вычисляется это условие
Спасибо! Действительно, в классе EIP Field Manager for Browse .... MyField
в методе Init, после ParentCall вставляем нужный код :

IF MAI:Vid=xx THEN
SELF.SetReadOnly(True)
END
и всё работает.
P.S. Эх, шаблончик бы подправить, чтобы ручками не вставлять(у меня две группы полей по 31(ну типа дни месяца)).

Re: EIP - запрет/разрешение редактирования полей по условию

Добавлено: 05 Сентябрь 2014, 14:12
kreator
В EditManagerClass есть свойство EQ, это очередь с сыылками на классы редактируемых объектов (поле Control). Можно в цикле по этой очереди (думаю, после инициализации Manager'а где-то) присвоить это свойство, типа так:

Код: Выделить всё

loop i#=1 to records(self.EQ)
  get(self.EQ,i#)
  if 
    self.EQ.Control.SetReadOnly(True)
  else
    self.EQ.Control.SetReadOnly(False)
  end  
end  
Попробуй. Я не проверял.

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 23 Март 2016, 21:02
Игорь Столяров
morkovin писал(а): Действительно, в классе EIP Field Manager for Browse .... MyField в методе Init, после ParentCall вставляем нужный код
К сожалению не работает для полей SPIN в EIP ....
Но успех можно развить: просто прерываем по условию (If FlagNoEdit then Return.)
метод EditInPlace::BAS:MyField.Init ДО PARENT.Init(FieldNumber,ListBox,UseVar)

Спасибо за идею ! :)

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 23 Март 2016, 23:24
kreator
Игорь Столяров писал(а):К сожалению не работает для полей SPIN в EIP ....
SPIN вообще прикольный контрол относительно ReadOnly. И без EIP такая же хрень. Кажется (могу, если надо, уточнить) проблема решается принудительной установкой нижней и верхней границы (prop:Range, оба свойства должны быть равны значению).

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 23 Март 2016, 23:29
Игорь Столяров
kreator писал(а): принудительной установкой нижней и верхней границы (prop:Range, оба свойства должны быть равны значению).
В контексте использования в EIP - это жесть. :)
Вроде поле для изменения открывается и изменить нельзя. Юзеры задолбят.
Уж лучше совсем его не открывать на изменение (можно добавить сообщение почему низя изменять).

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 23 Март 2016, 23:56
kreator
Игорь Столяров писал(а):В контексте использования в EIP - это жесть.
Вообще жесть и без EIP с точки зрения программирования. Но, по-моему, есть ещё красивый вариант и, кажется, здесь обсуждался. EIP-менеджер формирует очередь полей, которые нужно редактировать. Можно после этого формирования принудительно удалить ненужные.

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 24 Март 2016, 0:01
Игорь Столяров
kreator писал(а): Можно после этого формирования принудительно удалить ненужные.
Это без проблем - выключить редактирование полей несложно.
Здесь задача именно запрета редактирования по условию.
Есть общий список сотрудников. Возраст мальчиков - можно менять, возраст девочек - не можно. И т.д. :)

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 24 Март 2016, 11:04
kreator
Игорь Столяров писал(а):Есть общий список сотрудников. Возраст мальчиков - можно менять, возраст девочек - не можно. И т.д. :)
Типа, если при редактировании в EIP одного столбца выбран мальчик, то редактирование другого столбца не возможно?

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 24 Март 2016, 11:09
Игорь Столяров
kreator писал(а): если при редактировании в EIP одного столбца выбран мальчик, то редактирование другого столбца не возможно
Можно и так, будет работать. Т.е. зависимость возможности редактирования поля от типа записи в списке.
В моем примере пол сотрудника определяет возможность изменения его возраста.

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 24 Март 2016, 11:49
kreator
Я в таком случае вешал в методе TakeEvent() на событие Selected нередактируемого поля выход из процедуры со значением EditAction:Forward или EditAction:Backward или EditAction:Complete. Не очень красиво, согласен.

EIP - запрет/разрешение редактирования полей по условию

Добавлено: 19 Сентябрь 2016, 18:56
Игорь Столяров
kreator писал(а): В EditManagerClass есть свойство EQ, это очередь с сыылками на классы редактируемых объектов (поле Control).
Спасибо ! Оказывается все просто: включаем / выключаем поля редактирования EIP вообще как душе угодно.
Хошь при инициализации, хошь по условию, любые типы полей EIP. Полное управление полями ввода EIP ...
Пипец, куда я раньше смотрел ? Столько крови это класс EIP уже выпил ... :(