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

Обновление Browse в другом дорабатываемом интерфейсе

Добавлено: 14 май 2010, 16:46
BlazeBio
У меня проблема. Дорабатываю интерфейс
L_SKLAD::ACTCOMPL.SPECIFINFO
В нём есть screen SCRSPECIFINFOKOMPL, который добавляется кнопка, производящая вычисления и заменяющая значение в колонке SOPRORDA.PRICE(цена компонента комплекта) браузера этого же интерфейса BRRASPREDMCRAZ.
При замене меняется также поле SPSOPR.RPRICE (сумма полей SOPRORDA.PRICE браузера) скрина SCRSPECIFINFOKOMPL . В последней колонке браузера проставляется SKLV* SOPRORDA.PRICE, где SKLV(количество компонентов) колонка браузера.
Так вот этот интерфейс, открывается через другой уже существующий интерфейс L_SKLAD::ACTCOMPL.EDITSOPR, в котором также есть браузер(BRBYNAMERAZ). В этом браузере отображены комплекты.
Здесь, нажимая, CTRL+ENTER открывается интерфейс L_SKLAD::ACTCOMPL.SPECIFINFO с компонетами комплектов.
Проблема в том, что поле цены комплекта в браузере
L_SKLAD::ACTCOMPL.EDITSOPR.BRBYNAMERAZ.SUMPRICE не совпадает с полем в L_SKLAD::ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL. cуммы полей в
ssum(SKLV*SOPRORDA.PRICE) (Неизвестно куда заносится сумма по ssum).
L_SKLAD::ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL.SPSOPR
Но при ручном измененении значений в браузере L_SKLAD::ACTCOMPL.EDITSOPR.BRBYNAMERAZ. или
L_SKLAD::ACTCOMPL.SPECIFINFO.BRRASPREDMCRAZ даже на тоже самое значение, то обновление поля SUMPRICE происходит и оно тогда совпадает с полем SPSOPR.PRICE в скрине SCRSPECIFINFOKOMPL.
Не могу понять почему в первом случае поле не обновляется, а во втором обновляется. А нужно, чтобы обновлялось. Может нужно прописать на какое-то событие (стандартное) в L_SKLAD::ACTCOMPL.EDITSOPR, чтобы в L_SKLAD::ACTCOMPL.EDITSOPR при rescanpanel(BRBYNAMERAZ) обновлялся браузер.

Добавлено: 14 май 2010, 23:01
edward_K
rescanpanel(#tabla)
если в другом фейсе меняете то rereadrecord(#tabla)
ну еще поля могут пересчитываться по cmCheckfield или cmPositionchange

Добавлено: 15 май 2010, 11:59
BlazeBio
rescanpanel и rereadrecord работают, но не обновляется поле sumprice.
Это поле является вычисляемым.
При Sumprice:=spsopr.kol*prv - компилятор выдаёт сообщение, что поле является вычисляемым и заменит его нельзя.
Поле Sumprice обновляется, но при ручном редактировании одного из полей браузера 1-го или 2-ого интерфейсов, даже при банальной замене допустим поля SOPRORDA.PRICE c 10000 на 10000, то обновление в SUMPRICE происходит.
Проблема в том, что почему-то именно для этого поля не происходит rescanpanel или readrecord ?

Добавлено: 16 май 2010, 23:39
edward_K
значит срабатывают события в которых вычисляется это поле.

Добавлено: 17 май 2010, 11:39
BlazeBio
Хорошо, если срабатывают какие-то события, то они скорее всего стандартные. Я добавил обновление браузера BRBYNAMERAZ в событие cmDone 2-го интерфейса, но оно обновляет все поля этого браузера в 1-м интерфейсе кроме этого вычисляемого. На события cmClose, cmCancel, cmCheckField, cmPosiionChanged, cmDefault во 2-м интерфейсе браузер, если и реагирует (поля обновляются в BRBYNAMERAZ кроме вычисляемого), то при закрытии 2-го интерфейса пропадают изменения в браузере и вообщее в полях 1-го интерфейса даже в скрине.

Добавлено: 18 май 2010, 00:03
edward_K
это лишний раз доказывает, что вычисление идет в событиях. inherited то вызывали? а перед ним мессагу? Вообще в ваших окнах отображаются данные из разных табл. Значится дело в cmUpdateRecord - смотрите по журналу какие таблы меняются.

Добавлено: 18 май 2010, 11:46
BlazeBio
inherited вызывал в Init обоих интерфейсов. А в cmUpdateRecord не срабатывает вовсе, даже c inherited, хотя в событии по кнопке во 2-м интерфейсе используется update current soprorda. И месагу вызывал. И ресканил все таблицы используемые в обоих интерфейсах и по событию cmUpdateRecord. Это какое-то заколдованное поле.