|
![]() |
#1 |
Участник
|
Если я правильно помню, то вам необходимо наложить фильтр в методе excuteQuery() на datasource. Тогда даже кнопка сброса фильтра изначально тоже станет недоступной.
|
|
![]() |
#2 |
MCITP
|
![]()
а может лучше диналинк таки прикрутить к складу? красивее будет, мне кажется.
ну либо, как отметил longson, пробивайте фильтр на executeQuery(), только проверьте, что нет других условий на склад, иначе будет "или". Должно быть только одно условие на склад - ваше. Так как executeQuery() выполняется собственно в момент выполнения запроса, то перебить этот фильтр уже никто не сможет.
__________________
Zhirenkov Vitaly |
|
![]() |
#3 |
Участник
|
Цитата:
Диналинк при просмотре остатков срабатывает на InventSum по буферу InventJournalTrans ... В обоих склада нету в принципе - он в при-joinen-ом InventDim. Вывести в форму отображения остатков галчонку "фильтр по складу", по ее значению/изменению в executeQuery() у InventDim либо добавлять залоченный range по складу из соотвествующего InventDim'у от InventJournalTrans либо не добавлять. И овцы сыты, и волки целы ![]() |
|
![]() |
#4 |
MCITP
|
![]()
Сорри, я условие невнимательно протитал похоже...
Да, в стандарте такое сложновато будет так сделать. Можно сделать это всё и в ините датасорса, но тогда нужно блокировать этот range().
__________________
Zhirenkov Vitaly |
|
![]() |
#5 |
MCITP
|
![]()
Если на инит датасорса, то выглядит так:
X++: public void init() { QueryBuildRange qbr; ; super(); qbr = this.query().dataSourceNo(1).findRange(fieldNum(InventLocation, InventLocationId)); if (! qbr ) qbr = this.query().dataSourceNo(1).addRange(fieldNum(InventLocation, InventLocationId)); qbr.value(queryValue("ля-ля-ля")); //qbr.status(RangeStatus::Locked); } В принципе то же самое можно сделать и на executeQuery(), но этот вариант не считается "бест практис": X++: public void executeQuery() { QueryBuildRange qbr; ; qbr = this.query().dataSourceNo(1).findRange(fieldNum(InventLocation, InventLocationId)); if (! qbr ) qbr = this.query().dataSourceNo(1).addRange(fieldNum(InventLocation, InventLocationId)); qbr.value(queryValue("ля-ля-ля")); //qbr.status(RangeStatus::Locked); super(); } Как ни странно (я тоже не ожидал), оба этих варианта оказались с точки зрения пользователя одинаковые. (Либо я что-то не заметил)
__________________
Zhirenkov Vitaly |
|
![]() |
#6 |
Участник
|
Точно.
|
|
![]() |
#7 |
Участник
|
Цитата:
X++: SysQuery::findOrCreateRange(this.query().dataSourceTable(tablenum(InventLocation)),fieldNum(InventLocation, InventLocationId)); |
|
|
За это сообщение автора поблагодарили: ZVV (1), aidsua (1). |
![]() |
#8 |
MCITP
|
![]() Цитата:
![]() Это просто был тестовый пример, совсем не на это. А SysQuery::findOrCreateRange - действительно интерестно, не знал (или забыл). надо запомнить ![]()
__________________
Zhirenkov Vitaly |
|
![]() |
#9 |
Участник
|
![]() Цитата:
X++: qbr = this.query().dataSourceNo(1).findRange(fieldNum(InventLocation, InventLocationId)); if (! qbr ) qbr = this.query().dataSourceNo(1).addRange(fieldNum(InventLocation, InventLocationId)); qbr.value(queryValue("ля-ля-ля")); //qbr.status(RangeStatus::Locked); будет выгдядеть как: X++: ... findOrCreateRange_W( this.query().dataSourceTable(tablenum(InventLocation)), fieldNum(InventLocation, InventLocationId), queryValue("ля-ля-ля") ).status(RangeStatus::Locked); ... |
|
|
|