19.03.2008, 11:50 | #1 |
Участник
|
Два InventDim на форме
Такой вопрос.
Создаю на форме два датасорса (VendInvioceTrans), привязываю к нему датасорсы согласно рекомендациям уважаемого Mazzy. В ините одного прописываю запрос: X++: Query q=new query(); QueryBuildDataSource ds; ds=q.addDataSource(tablenum(VendInvoiceTrans)); ds.orderMode(ordermode::GroupBy); ds.addRange(fieldnum(VendInvoiceTrans,InvoiceDate)).value(strfmt('%1..%2',d1,d2)); ds.addSelectionField(fieldnum(VendInvoiceTrans,ItemId)); ds.addSelectionField(fieldnum(VendInvoiceTrans,PurchPrice)); ds.addSelectionField(fieldnum(VendInvoiceTrans,PurchUnit)); ds.addSelectionField(fieldnum(VendInvoiceTrans,PriceUnit)); ds.addSelectionField(fieldnum(VendInvoiceTrans,currencyCode)); ds.addSelectionField(fieldnum(VendInvoiceTrans,InventDimId)); ds.addSelectionField(fieldnum(VendInvoiceTrans,Qty),selectionfield::Sum); ds.addSelectionField(fieldnum(VendInvoiceTrans,LineAmount),selectionfield::Sum); ds.addSelectionField(fieldnum(VendInvoiceTrans,LineAmountTax),selectionfield::Sum); ds.addSelectionField(fieldnum(VendInvoiceTrans,RecId),selectionfield::Count); ds.addSortField(fieldnum(VendInvoiceTrans,ItemId)); ds.addSortField(fieldnum(VendInvoiceTrans,currencyCode)); ds.addSortField(fieldnum(VendInvoiceTrans,PurchPrice)); ds.addSortField(fieldnum(VendInvoiceTrans,PurchUnit)); ds.addSortField(fieldnum(VendInvoiceTrans,PriceUnit)); ds.addSortField(fieldnum(VendInvoiceTrans,InventDimId)); this.query(q); Также (для проверки) вывожу значения InventDim не в гриде, а рядом. В результате на проверочных полях инфа есть, на обычном (втором) датасорсе в гриде тоже есть, а на в гриде по первому датасорсу инфа появляется только после позицонирования на конкретное поле/конкретую запись. Никто не подскажет, что не так? Последний раз редактировалось gefr; 19.03.2008 в 12:30. |
|
19.03.2008, 12:16 | #2 |
Участник
|
А для Grid-oв правильные датасорсы указаны.
И можно ещё посотреть что в запросе info(this.query().datasourceName("..").toString()). Причём здесь PurchLine не понял в коде то его нет, а query вы новый кодом создаёте убивая старый. Вообщем не понятно причём здесь PurchLine |
|
19.03.2008, 12:17 | #3 |
Участник
|
сделал-проверил - все правильно настроено, но не работает
Последний раз редактировалось gefr; 19.03.2008 в 12:29. |
|
19.03.2008, 12:21 | #4 |
Участник
|
Вот проект. Только у нас есть свои аналитики, при перекомпиляции формы должны исчезнуть
Последний раз редактировалось gefr; 19.03.2008 в 12:35. |
|
19.03.2008, 12:59 | #5 |
Участник
|
А что вы хотите сделать?
В каком гриде какая информация вам нужна? На в скидку смутило, что InventDim приджойнены active-ом. И то что в executeQuery после того как вы подменили запрос используете super(). Знать бы поподробнее что вы хотите увидеть в итоге. |
|
19.03.2008, 13:05 | #6 |
Участник
|
запрос Active - этоя уже экспериментировал - искал, может, в этом проблема.
Суть запроса простая - вывести сгруппированные строки из накладных, чтобы их можно было бы сравнить, на допзакладке посмотреть развертку сгруппированной строки. Решаемая задача - контроль закупочных цен. Если цены разные на одну позицию с одинаковой номенклатурой - выяснять почему. не всегда у номенклатуры есть аналитии, не всегда эти аналитики имеют значение (напр. партия) поэтому включена возможность их отключения для уменьшения списка. |
|
19.03.2008, 13:08 | #7 |
Участник
|
По-моему, тупое дублирование всего, что связано с аналитиками с TransferJournal никому не вредило
|
|
19.03.2008, 13:08 | #8 |
Участник
|
а без супера в executequery он возвращает пустой набор данных
|
|
19.03.2008, 13:11 | #9 |
Участник
|
так вроде продублировал все. а выбирать надо сразу для обоих inventdim - иначе нет смысла в детализации группировки. В принципе, подобная проблема иногда возникает и при соединении на форме любых других таблиц, даже если нет суммирования
|
|
19.03.2008, 13:17 | #10 |
Участник
|
Таак.
А если разбить задачу на 2. Сперва сделать сгруппированное отображение, а уж потом только допиливать туда детализацию. Это должно нормально работать, поэтому ошибка явно где-то есть. Попробуйте еще fetchMode установить в значение QueryFetchMode::OneToOne |
|
19.03.2008, 13:41 | #11 |
Участник
|
1) всё таки Innerjoin.
2) super() в запросе на верх. А потом из него берём наш датасорс q=this.query(); ds=q.DataSourceTable(tablenum(VendInvoiceTrans)); 3) Что то я не понял логику работы с InventDim. Определитесь с тем учавствуют у вас в группировке аналитики или нет. Если нет, то у вас InventDimId будет всегда пустой соответственно и джойнить InventDim нет смысла. Если да, то по каким именно аналитикам. Т.е. если по партии то у вас партия будет заполнена остальные пустые. Вам нужно посмотреть как работает форма SalesQuickQuote (в заказе ->функции ->создать строки). Там специальным механизмом отображения аналитики добиваются группиривки по нужным аналитикам. А если вы будете группировать без учёта аналитик то у вас аналитики и не будет. Группировать надо не InventDimId, а конкретную складскую аналитику. |
|