CftClub.ru
Клуб специалистов ЦФТ-Банк

Обработка изменения грида. Не всегда входит в валидатор

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 выхода
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru