11.07.2006, 08:01 | #1 |
Гость
|
Как не использовать relations на таблицах
Пишу всего второй месяц, поэтому вопрос может показаться глупым.
Как я поняла, в Акцапте фильтры по любому документу (например, показать строки текущего журнала) делаются, используя relations на таблицах, в коде нигде эти фильтры не пишутся. Как в таком случае обрабатывается такая ситуация: У меня есть договора и их приложения. Для просмотра оборотов по приложению надо показать обороты только этого приложения, тут все нормально, а при просмотре оборотов основного договора надо показать обороты самого договора и его приложений в одном списке, здесь уже такой строгий relations с текущим договором не нужен. Как делают правильно в таких случаях, убирают как-то эти relations или еще чего? |
|
11.07.2006, 08:07 | #2 |
Участник
|
Цитата:
Сообщение от demetra
в коде нигде эти фильтры не пишутся
Вы похоже спрашиваете про кнопки, которые открывают новые формы. Вы хотите, чтобы новые формы открывались с учетом relation или без него. Так? У menuItem есть свойство DataSource. Установите туда значение - будет связь по указанному датасорсу, не установите - не будет связи. Если вас таки интересует код, то у QueryBuildDataSource есть методы clearLinks и clearDynalinks. |
|
11.07.2006, 08:48 | #3 |
Гость
|
На menuItem нет свойства DataSource, только на menuItemButton, я убрала оттуда DataSource, но не помогает, все равно фильтрует, а если в коде на qbds очищать линки и устанавливать новый ранг( я понимаю так надо делать), то где это делается ? на методе формы? на каком?
|
|
11.07.2006, 08:53 | #4 |
NavAx
|
линки можно чистить в методе Init() датасорса после super(),
а также в linkActive() датасорса до super() |
|
11.07.2006, 10:19 | #5 |
Гость
|
Линки почистились, теперь проблема добавить новый ранг, чтобы был фильтр по текущему договору и всем его приложениям. Что-то не соображу, как это в addrange впихнуть несколько значений.
|
|
11.07.2006, 10:48 | #6 |
NavAx
|
через запятую!
...опишите подробнее, какие фильтры и по каким полям нужно повесить на датасорс |
|
11.07.2006, 11:38 | #7 |
Гость
|
Я стою на строке контракта в RContractTable и вызываю форму оборотов этого контракта RContractVendTrans, там в датасурсах таблица VendTrans. Эти таблицы связаны по трем полям:
VendTrans.AccountNum == RContractTable.RContractPartnerCode VendTrans.RContractAccount == RContractTable.RContractAccount VendTrans.RContractCode == RContractTable.RContractCode Мне надо, чтобы если я стою на основном контракте, показывались не только его обороты, но и обороты его приложений общим списком. У приложений в поле RContractGeneral находится ссылка на RContractAccount основного контракта. this.query().dataSourceNo(1).addRange(fieldnum(VendTrans,AccountNum)).value(????); this.query().dataSourceNo(1).addRange(fieldnum(VendTrans,RContractAccount)).value(???); this.query().dataSourceNo(1).addRange(fieldnum(VendTrans,RContractCode)).value(???); где ??? должны быть все номера текущего договора и его приложений. |
|
11.07.2006, 12:01 | #8 |
NavAx
|
Я так понимаю в этом случае фильтр на поля AccountNum, RContractCode будет одним для главного контракта и его приложений.
А фильтр на поле RContractAccount можно установить либо несколько раз добавив Range (например, в цикле), либо предварительно составить строку "фильтр1, фильтр2,... фильтрN" и передать ее в value(). |
|
11.07.2006, 13:23 | #9 |
Гость
|
Спасибо, все работает.
|
|
14.07.2006, 05:38 | #10 |
Гость
|
Еще один вопрос по этой теме.
Формирую строку нужных номеров для фильтра: strRContractAccount = "АА1, АА2, АА3 "; this.query().dataSourceNo(1).addRange(fieldnum(VendTrans,RContractAccount)).value(strRContractAccount); Все работает прекрасно. Но если strRContractAccount = "АА1, АА/2, АА/3 "; то в фильтре берутся только записи с номерами, в которых нет /, а АА/1 и АА/2 игнорируются. В чем дело, почему не понимается / ? |
|
14.07.2006, 08:46 | #11 |
Участник
|
strRContractAccount = QueryValue(“АА/1”) + “,” + QueryValue(“АА/2”);
|
|
14.07.2006, 10:09 | #12 |
Гость
|
Не помогает. Я правда ошиблась, строка strRContractAccount = "АА1, АА\2, АА\3 ";
|
|
14.07.2006, 10:17 | #13 |
Участник
|
Нужно вставлять по 2 "\" - backslash
Так как один будет экранировать другой |
|
14.07.2006, 11:00 | #14 |
Гость
|
Спасибо, но я выкрутилась только так
strRContractAccount = QueryValue(@"НСЭ1") + "," + QueryValue(@"НСЭ1\\1") + "," + QueryValue(@"НСЭ1\\2"); без \\ и @ в запросе все равно показывает НСЭ11 и НСЭ12 без \ |
|