|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от rkorchagin
![]() надо на форме Customer -> Customer transactions - добавить фильтр по display методу - а точнее - сделать existJoin с CustInvoiceJour для определённого значения одного (самодельного) поля в CustInvoiceJour.
То есть когда пользователь вводит (выбирает) что нить в поле фильтра - то сразу к CustTrans в коде добавляется existJoin с CustInvoiveJour - и когда очищает поле фильтра - то CustInvoiceJour удаляется из query. Когда я прямо в query на форме добавил CustInvoiceJour и пытался выставлять св-ва CustInvoiceJour_ds - то ничего не работало - а используя вышекпомянутый код удаления всё ОК. Далее будет следующая задача от пользователей - показать как образовалась сумма в dysplay-поле. В результате вы все равно будете делать кнопку, которая будет открывать форму с CustInvoiceJour. Дык, вместо того, чтобы по-программистски извращаться и издеваться над пользователями, стоило чуток подумать: людям не нужны "фильтры", людям не нужны датасорсы и людям не нужно удаление датасорсов (они даже слов то таких не знают). ЛЮДЯМ нужно найти какую-то информацию, чтобы работать с ней (искать, смотреть, печатать). Что вы сейчас сделали? Вы изнасиловали систему в особо жестокой форме, при этом вы еще НЕ решили задачу ваших пользователей. Вы всего лишь дали поиск по дисплей-полю. Опять же таки - пользователи даже слов то таких не знают. А как будут работать пользователи дальше? Обратите внимание на постановку задачи - постановка сделана сугубо в программистских терминах. Если перевести постановку на человеческий язык, то пользователям нужно дать возможность искать что-то в накладных. Так? Причем это что-то вы даете ему из проводок. Зачем так? Может быть дать возможность СРАЗУ открывать накладные (это уже есть в стандартном функционале), каким-то образом фильтровать накладные, а затем переходить к проводкам из накладных (это тоже есть в стандартном функционале). Может быть я опять чего не догоняю. Но снова вижу типичный пример совершенно тупого и бесполезного кодинга. Который является результатом соверенно тупой постановки задачи. (стопудово в оправдание мне будут говорить, что форма CustTrans сильно кастомизирована, на эту форму навешано куча кастомизированного функционала и куча фильтров, в результате эту можно открыть только из клиента, а из остальных мест она не вызывается, а также что пользователи обучены ходить только так... блин, грустно... Поздравляю всех с днем знаний.) |
|
|
За это сообщение автора поблагодарили: oip (4). |
![]() |
#2 |
Участник
|
там сделан самодельный модуль по логистике - он связан с CustInvoiceJour и надо фильтровать какие записи CustTrans уже связаны с этим модулем через CustInvoiceJour - чтобы потом привязать остальные
![]() Постановка задачи была: "нам нужен фильтр по этому полю" - так что в программистких терминах определил её я сам. |
|
![]() |
#3 |
Участник
|
ясно
![]() Это еще не на человеческом языке. Пользователям то что нужно? |
|
![]() |
#4 |
Участник
|
задание ставил консультант - что надо пользователям - не знаю - хотят фильтр!
![]() И раз название темы всё таки "Как удалить datasource из Query" Привожу полный работающий код ещё раз: X++: public static Query deleteDataSource(Query query, QueryBuildDataSource dataSource) { Query result; QueryBuildDataSource dSource; int idx; boolean isEqual(QueryBuildDataSource A, QueryBuildDataSource B) { return (A.name() == B.name()) && (A.table() == B.table()); } QueryBuildDataSource copyDataSource(QueryBuildDataSource dest, QueryBuildDataSource source) { QueryBuildRange range; int i; for (i = 1; i <= source.linkCount(); i++) { dest.addLink(source.link(i).field(), source.link(i).relatedField()); } //31.08.2008 DMV-ruk added dynalinks for (i = 1; i <= source.dynalinkCount(); i++) { dest.addDynalink(source.dynalink(i).field(), source.dynalink(i).cursor(),source.dynalink(i).dynamicField()); } for (i = 1; i <= source.rangeCount(); i++) { range = dest.addRange(source.range(i).field()); range.value(source.range(i).value()); range.name(source.range(i).name()); range.status(source.range(i).status()); range.label(source.range(i).label()); range.enabled(source.range(i).enabled()); } for (i = 1; i <= source.sortFieldCount(); i++) { dest.addSortField(source.sortField(i), source.sortDirection(i)); } for (i = 1; i <= source.sortIndexCount(); i++) { dest.addSortIndex(source.sortIndex(i)); } dest.fields().dynamic(source.fields().dynamic()); if (!dest.fields().dynamic()) { dest.fields().clearFieldList(); for (i = 1; i <= source.fields().fieldCount(); i++) { dest.fields().addField(source.fields().field(i), source.fields().fieldKind(i)); } } return dest; } void delete(QueryBuildDataSource topOrig, QueryBuildDataSource topRes) { int i; for (i = 1; i <= topOrig.childDataSourceCount(); i++) { if (!isEqual(topOrig.childDataSourceNo(i), dataSource)) { delete(topOrig.childDataSourceNo(i), copyDataSource(topRes.addDataSource(topOrig.childDataSourceNo(i).table(), topOrig.childDataSourceNo(i).name()), topOrig.childDataSourceNo(i))); } } } result = new Query(); for (idx = 1; idx <= query.dataSourceCount(); idx++) { dSource = query.dataSourceNo(idx); if (dSource.level() == 1) { if (!(isEqual(dSource, dataSource))) { delete(query.dataSourceNo(idx), copyDataSource(result.addDataSource(query.dataSourceNo(idx).table(), query.dataSourceNo(idx).name()), query.dataSourceNo(idx))); } } } return result; } |
|
|
За это сообщение автора поблагодарили: mazzy (1). |
Теги |
query |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|