Обработчик элементов карточки редактирования сервиса без явного указания Dataset в свойствах

Где задаётся обработчик событий элементов карточки редактирования сервиса, в случае, если в свойствах невизуальных компонентов этого сервиса явно не задан Dataset?
Попробовал добавить обработчик dlDataOnDatasetDataChange(DataField) на событие OnDatasetDataChange невизуального компонента dlData - не работает (обработчик не вызывается).

Нравится

19 комментариев

дело в том, что

function dlDataOnDatasetDataChange(DataField)

вызывается по полю, а чтобы у вас было поле, вам нужен датасет :smile:

Ок. Получается, обязательно нужно привязывать датасет?

Алексей, если Вам нужно событие OnDatasetDataChange - то разумеется у Вас должен быть датасет, чтобы сработало это событие.
Если он явно не указан в дизайнере окна, скорее всего он инициализируется на OnPrepare событии окна:

dlData.Dataset = Services.GetNewItemByUSI('ds_Account');

Дмитрий,
а правильно ли я понял, что при привязке датасета к даталинку события датасета вызывают обработчики событий даталинка, из которых уже вызываются обработчики событий датасета?

Я добавил в обработчик события OnPrepare следующую строку:

dlData.Dataset = Services.GetNewItemByUSI('ds_Offering');

К сожалению, всё осталось по-прежнему, обработчик dlDataOnDatasetDataChange(DataField) на событие OnDatasetDataChange невизуального компонента dlData - не вызывается.

у вас это свойство ведь заполнено?

"Андросов Дмитрий" написал:

Дмитрий,

а правильно ли я понял, что при привязке датасета к даталинку события датасета вызывают обработчики событий даталинка, из которых уже вызываются обработчики событий датасета?


Дмитрий, нет, сначала срабатывают обработчики события DataLink'a, если конечно датасет ему присвоен, и обработчики событий определены.
Затем срабатывают события самого сервиса датасета.
Они - независимы.

Алексей, я так и не понял, у Вас получилось добиться отработки события?

Этой строчкой вы пробуете впихнуть весь датасет в карточку

dlData.Dataset = Services.GetNewItemByUSI('ds_Offering');

Указать датасет невизуально довольно тонкий процесс (это означает вы хотите сделать один грид и одну карточку редактирования для нескольких похожих сущностей, иначе легче указать датасет сразу), посмотрите в качестве примера окна wnd_OfferingDetailEdit и wnd_OfferingsDetailTreeArea и их скрипты.
Эти окна предназначены для продуктов в счетах, документах и договорах. Можно заметить, что там привязка датасета идет не в карточке, а перед открытием карточки, т.е. в гриде.

"Олейник Дмитрий" написал: Алексей, я так и не понял, у Вас получилось добиться отработки события?
Дмитрий, нет, не получилось.

Давайте, я опишу ситуацию поподробнее.

Я создал новую пользовательскую карточку редактирования.
Вот такую: http://www.community.terrasoft.ru/forum/topic/9879#comment-44071
Сейчас мне нужно блокировать/разблокировать соответствующие поля ввода (поля, определяющие размер скидки) в зависимости от выбранного "радиобуттона" (относительное или абсолютное значение скидки).

Формы раздела (гриды, воркспейсы, карточки редактирования), в котором находится новый воркспейс, не имеют явного задания в свойствах невизуальных компонентов Dataset-ов.
Моя новая пользовательская форма (карточка редактирования wnd_SetDiscountInInvoice) также не имеет явной привязки датасета.

Объясните, пожалуйста, как обрабатывать события?
Вариант "поздней" привязки датасета по событию OnPrepare предложенный Дмитрием Олейником (http://www.community.terrasoft.ru/forum/topic/10032#comment-44333) "не прокатил".

а у вас к "радиобуттону" поле датасета привязано? ну так, проверьте на всякий случай .... :lol:

у контролов есть свои события, которые я вам и предлагаю обрабатывать

Алексей, я так предполагаю, что датасет в Вашей форме вообще не нужен, а на кнопку ОК у вас отрабатывается какой-то скрипт, да?
Так почему бы не повесить блокировку/разблокировку полей на события OnClick на радиобатонах?

"Андросов Дмитрий" написал:а у вас к "радиобуттону" поле датасета привязано? ну так, проверьте на всякий случай ....


"Ткните", где в свойствах "радиобуттона" можно привязать датасет, или это ирония?

"Сазанов Александр Владимирович" написал:

Алексей, я так предполагаю, что датасет в Вашей форме вообще не нужен, а на кнопку ОК у вас отрабатывается какой-то скрипт, да?

Так почему бы не повесить блокировку/разблокировку полей на события OnClick на радиобатонах?


Ок, я так и поробую, просто судя по тому, что пишут другие коллеги-программисты можно как-то по-другому, хочется узнать как.

Алексей, согласен с Александром - если у Вас в картчоке не используется привязка в данным (нет датасета), зачем использовать событие OnDatasetDataChange?
Используйте событие контролов...

"Алейник Алексей Вадимович" написал:или это ирония?

это ирония

В общем, "радиобатон" (батон? радио? брр) radiobutton нельзя привязать к полю датасета\даталинка, поэтому, что бы вы с ним ни делали, событие dlDataOnDatasetDataChange, как и любые другие события для dlData, не произойдет.

Поэтому воспользуйтесь советом Александра Сазанова:

"Сазанов Александр Владимирович" написал:повесить блокировку/разблокировку полей на события OnClick на радиобатонах

Спасибо всем! Всё замечательно получилось!:twisted:

"Андросов Дмитрий" написал:

В общем, "радиобатон" (батон? радио? брр)


радиобатон

"Андросов Дмитрий" написал:В общем, "радиобатон" (батон? радио? брр)

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

Показать все комментарии