Обработка изменения грида. Не всегда входит в валидатор
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Ср Май 25, 2011 13:34  Обработка изменения грида. Не всегда входит в валидатор |
|
Полезность: Нет оценки
|
Есть структура, один из реквизитов которой - ссылка на ден. единицы.
Этот реквизит (цифровой код) среди прочих выводится в грид.
Изменение этой колонки обрабатывается в клиент-валидаторе, все работает отлично, НО...!!!
Когда в нескольких записях грида вводятся одинаковые коды, клиент-валидатор отрабатывает только для первой записи, а для остальных даже не заходит в код валидатора. Повторюсь, когда вводятся разные коды, все работает на ура. создается впечатление что если в разные записи записывать одну и ту же валюту, то грид не считает это изменением!!!
Кто сталкивался и\или кто знает решение, прошу отзовитесь!!
Заранее спасибо |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Ср Май 25, 2011 13:37   |
|
Полезность: Нет оценки
|
это код в блоке проверок
Код: |
--Обработка изменений в гридах
GRID_VALIDATE(p_message, P_INFO, v_this, 'V_SUMM_GRID', V_SUMM_GRID, V_TMP_STR, V_COM_GRID, P_COM_NONCASH);
debug_pipe('Проверка: ' || p_message || ' -\- ' || P_INFO, 0);
GRID_VALIDATE(p_message, P_INFO, v_this, 'V_COM_GRID', V_COM_GRID, V_TMP_STR, V_SUMM_GRID, P_COM_NONCASH);
|
при этом когда вводятся одинаковые коды валют debug_pipe ничего не выводит (поэтому и решил, что даже в блок проверок не входит) |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Май 26, 2011 10:22   |
|
Полезность: Нет оценки
|
в проверке пишу обычно
Код: | if P_INFO like '%VAR%.<Имя грида>.[Имя контрола в гриде]%' then
...
end if; |
все работает как часы _________________ всегда есть как минимум 2 выхода |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Чт Май 26, 2011 11:03   |
|
Полезность: Нет оценки
|
(не понял как добавлять рисунки, поэтому вложил файл картинки)
да работает, но при изменении кода валюты (см. рис.), когда для двух записей подряд ввожу один код в блок проверок даже не заходит.
Клиент-скрипт "видит" все, а в блок проверок не идет, как будто ИБСО не считает это изменением, правда когда "проваливаешься" в ссылку и там устанавливаешь валюту - отрабатывает нормально |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Чт Май 26, 2011 11:13   |
|
Полезность: Нет оценки
|
получается так
Изменение простым набором цифрового кода
Последний раз редактировалось: san_light (Чт Май 26, 2011 11:17), всего редактировалось 1 раз |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Чт Май 26, 2011 11:15   |
|
Полезность: Нет оценки
|
а должно быть так
изменение валюты при "проваливании" в ссылку "(***)"
после смены валюты меняется курс и суммы |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Май 26, 2011 11:19   |
|
Полезность: Нет оценки
|
из доки по работе с гридами
Цитата: | 6.2.6. RowColChange
Синтаксис
Grid_RowColChange()
Описание
Выполняется при изменении значений свойств Row или Col.
Событие вызывается при изменении значений свойств Row или Col пользователем (с помощью мыши или клавиатуры) или в ходе выполнения программного кода. Подробнее о свойствах Row и Col см. пункты Row и Col соответственно.
Пример
Код: | Private Sub Grid_RowColChange
V_VIEW.Text = Grid.Text(Grid.Row, 1)
End Sub |
6.2.7. ValidateEdit
Синтаксис
Grid_ValidateEdit(Row As Long, Col As Long, Cancel As Boolean)
Описание
Выполняется перед выходом ячейки из режима редактирования значения.
Это событие вызывается перед сохранением любых совершенных пользователем изменений в указанной ячейке. Позволяет перехватить происходящие изменения, прочитав содержимое свойства EditText (см. пункт EditText), и убедиться, что отредактированное значение является допустимым для данной ячейки (определяемой параметрами Col, Row). Если введенное пользователем значение не является допустимым, следует установить параметр Cancel равным True, в этом случае изменения не будут приняты и ячейка останется в режиме редактирования.
Пример
Код: | Public Sub Grid1_ValidateEdit (Row, Col, Cancel)
MsgBox Grid1.EditText
End Sub |
|
ну и на мой взгляд код валюты тут не при чем.. просто в одном случае выполняется условие вызова, в другом нет. _________________ всегда есть как минимум 2 выхода |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Май 26, 2011 11:31   |
|
Полезность: Нет оценки
|
san_light пишет: | а должно быть так
изменение валюты при "проваливании" в ссылку "(***)"
после смены валюты меняется курс и суммы |
когда проваливаешься в {***} отрабатывает один контрол, когда меняешь руками, работает другой контрол.. вывод - нужна валидация и там где меняешь руками... без контрола, который является ссылкой _________________ всегда есть как минимум 2 выхода |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Пт Май 27, 2011 06:49   |
|
Полезность: Нет оценки
|
Alexsey пишет: | san_light пишет: | а должно быть так
изменение валюты при "проваливании" в ссылку "(***)"
после смены валюты меняется курс и суммы |
когда проваливаешься в {***} отрабатывает один контрол, когда меняешь руками, работает другой контрол.. вывод - нужна валидация и там где меняешь руками... без контрола, который является ссылкой | как реализовать? на экранной форме и там и там стоит "Проверка введенного значения". P_INFO в обоих случаях одинаковое.
насчет цитат из документации - читал, этими обработчиками и проверял, отрабатывают как надо, но в блок проверок все равно не заходит (повторюсь, если вводить разные коды - валидация отрабатывает нормально) |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Май 27, 2011 09:56   |
|
Полезность: Нет оценки
|
Понятно что стоит проверка валидируемого значения, НО, в одном случае юзается ссылка(т.е. контрол ссылки на значение), во втором ты меняешь значение с клавиатуры, т.е. дочерний контрол ссылки.. P_INFO в таком случае одинаковым быть не может по определению.
Повесь проверку валидации по Like на родительский контрол, в таком случае должно точно работать и там и там.
Да и под валидацией понимается "не птичка" в параметре "ChekValidate", а реальное описание в блоке проверки или клиент скрипте... и если стоит признак валидации, а в коде квалификатор не описан, ничего работать не будет
Пример реально работающего скрипта
Код: | if P_MESSAGE = 'VALIDATE' then
-- обработаем выбор или редактирование контрагента в гриде
if P_INFO like '%VAR%.V_KONTR.CONTR%' then
V_DEST_STR := V_DEST_STR || NL$ ||
'
V_CTR_IDX.TEXT = Grid9.Row
'|| NL$;
if V_CTR_IDX = 0 then
V_CTR_IDX := 1;
end if;
debug_pipe(V_KONTR(V_CTR_IDX).[CONTR].[NAME], 0);
V_KONTR(V_CTR_IDX).[COUNTRY] := [LIB].get_country_ref(V_KONTR(V_CTR_IDX).[CONTR]);
end if;
end if; |
_________________ всегда есть как минимум 2 выхода |
|
 |
san_light Участник со стажем
Вступление в Клуб: 18.03.2011
|
Пт Май 27, 2011 13:07   |
|
Полезность: Нет оценки
|
debug_pipe('Grid_Rec_Init:' || P_MESSAGE || "-\-" || P_INFO, 0)
в обоих случаях показывает
15:48:04 Grid_Rec_Init: VALIDATE -\- V_SUMM_GRID.VALUTA_DT[1]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[2]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
поэтому я и говорю, что P_INFO - одинаковое.
проверяю я именно по Like.
насчет вашего примера
Все работает замечательно, если ввожу подряд разные коды.
а вод когда ввожу одинаковые - отрабатывает только первое изменение. Потом у меня до "if P_MESSAGE = 'VALIDATE' then... " даже не доходит (я так понимаю что не входит в блок проверок вообще - самому с трудом верится).
Будет у меня маленькая просьба, может сами попробуете и посмотрите (как на рисунках у меня во вложении)? именно с кодом валюты и именно то, о чем я говорю.
Буду очень признателен. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Пт Май 27, 2011 14:05   |
|
Полезность: Нет оценки
|
san_light пишет: | debug_pipe('Grid_Rec_Init:' || P_MESSAGE || "-\-" || P_INFO, 0)
в обоих случаях показывает
15:48:04 Grid_Rec_Init: VALIDATE -\- V_SUMM_GRID.VALUTA_DT[1]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[2]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
Grid_Rec_Init: VALIDATE -\- V_COM_GRID.VALUTA_DT[1]
поэтому я и говорю, что P_INFO - одинаковое.
проверяю я именно по Like.
насчет вашего примера
Все работает замечательно, если ввожу подряд разные коды.
а вод когда ввожу одинаковые - отрабатывает только первое изменение. Потом у меня до "if P_MESSAGE = 'VALIDATE' then... " даже не доходит (я так понимаю что не входит в блок проверок вообще - самому с трудом верится).
Будет у меня маленькая просьба, может сами попробуете и посмотрите (как на рисунках у меня во вложении)? именно с кодом валюты и именно то, о чем я говорю.
Буду очень признателен. |
В блок проверки не входит потому как машина считает, что запись не была изменена. Вы говорили, что клиент-скрипт видит, что производились действия с контролом, тогда из клиент скрипта необходимо дернуть серверную валидацию.
Например:
Код: | Private Sub Grid_RowColChange
Form1.ScriptServerValidate <Validate_name грида>, "V_SUMM_GRID"
End Sub |
_________________ всегда есть как минимум 2 выхода |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|