30.07.2019, 17:41 | #1 |
Участник
|
LedgerJournalTable создание записи
Всем доброго дня.
Что имеем. Ax12 R3 Создали MI который ссылается на форму LedgerJournalTable. Прописали EnumTypeParameter LedgerJournalType, EnumParameter CustPayment. В справочнике "Наименование журнала" прикрутили новое поле "Подмодуль". Казалось бы все просто, при нажатии на MI хотим чтобы открылась форма с типами журналов "Клиентский платеж" и с определенным Подмодулем. Для этого есть класс наследник от LedgerJournalFormTable, в нем перекрыт queryAddRange и имеется следующий код X++: super(); qbds = SysFormDataSource::fds2Qbds(journalTable_ds); while select ledgerJournalName where ledgerJournalName.JournalType == LedgerJournalType::CustPayment && ledgerJournalName.SysSubModule_MRC == SysSubModule_MRC::Disribution { qbrJournalName = qbds.addRange(fieldnum(LedgerJournalTable, JournalName)); qbrJournalName.value(SysQuery::value(ledgerJournalName.JournalName)); qbrJournalName.status(RangeStatus::Locked);*/ } Последний раз редактировалось smailik; 30.07.2019 в 19:05. |
|
31.07.2019, 06:24 | #2 |
Мрачный тип
|
Цитата:
Смотрите состояние записи в initValue() у источника данных до и после вызовов super() и вышеназванного метода - там будет ясно, где собака порылась ...
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 31.07.2019 в 06:26. |
|
31.07.2019, 07:03 | #3 |
Участник
|
Скорее всего у вас сломалось построение запроса, поскольку вы вероятно несколько раз добавляете QBR по одному и тому же полю.
Создайте аккумулирующую переменную и через запятую добавляйте туда все ваши JournalName. За пределами цикла создайте рендж и присвойте ему значение и статус.
__________________
// no comments Последний раз редактировалось dech; 31.07.2019 в 07:06. |
|
31.07.2019, 07:26 | #4 |
Мрачный тип
|
И сломанный запрос корректные данные по типу журнала на гриде отображает ?
Цитата:
Цитата:
Тут проще за-join'ить LedgerJournalName ограничением по требуемому полю - даже при добавлении нового наименования журнала и создания записей журналов по нему, при обновлении запроса в форме отобразятся актуальные данные, чего не будет ни в рассматриваемом , ни в предлагаемом Вами примерах.
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: dech (1), smailik (2). |
31.07.2019, 08:16 | #5 |
Участник
|
Да, вы правы. Не было аксапты под рукой, чтобы проверить. Я обычно делаю через запятую, если надо несколько фильтров по одному полю. У меня обычно ренджи не такие большие.
__________________
// no comments |
|
31.07.2019, 10:38 | #6 |
Участник
|
Я так и понял что заспро как-то ломается. Вчера несколько часов дебажил. Если это Range не накладывать, то перед super DS.LedgerJournalTable.initValue() тип Daily, а сразу после CustPayment. Хотя в этом супере ничего нет. Это еще все до datasourceInitValuePost(), но стоит наложить Range как все после супера Daily. Ради интереса пробовал в цикле в одну переменную загнать все значения и накладывать Range после цикла, но тоже результата не дало. Хотя это конечно помогла кое в чем другом разобраться, но к задаче это не относится.
Вот тоже как раз думал просто джойнить LedgerJournalName и вообще проблем не будет. Скорее всего так и сделаю. Главное в Ах4 работает, но там я не успел вчера отдебажить как и что, может там код какой-есть, так что не факт что там все гладко. Спасибо за советы. |
|
31.07.2019, 11:20 | #7 |
Участник
|
А если получать QueryBuildDataSource классическим способом:
X++: journalTable_ds.query().dataSourceNo(1) а не при помощи X++: SysFormDataSource::fds2Qbds |
|
31.07.2019, 11:22 | #8 |
Участник
|
То что, подставляется CustPayment внутри super понятно - там фильтр по нему в стандартном приложении. Судя по всему, этот фильтр слетает и просто подставляется значение Daily которое равно нулю..
Можно посмотреть через персонализацию формы какой там запрос в случае дополнительных фильтров и без них. |
|
31.07.2019, 11:42 | #9 |
Участник
|
Пробовал через
X++: journalTable_ds.query().dataSourceTable(tableNum(LedgerJournalTable)) Да в super подставляется значение из фильтра. И да он слетает и ставится Daily = 0. |
|
31.07.2019, 15:17 | #10 |
Участник
|
Интересное поведение.
Даже если не наследовать, а просто в LedgerJournalFormTable в методе queryAddRange добавить range по полю JournalName, то получается:
Понятно, что после выбора наименования журнала все пропишется, но указанному поведению пока разумного объяснения не нахожу. |
|
31.07.2019, 15:31 | #11 |
Участник
|
Все еще интереснее.
Если в LedgerJournalFormTable.queryAddRange добавить фильтр по JournalName не после, а до super(), то тоже работает установка типа журнала из фильтра. |
|
Теги |
journaltype, ledgerjournaltable |
|
|