04.04.2009, 14:56 | #1 |
:o)
|
оборотная ведомость по складу необходимо добавить ещё один фильтр
Доброго!
у наших журналов есть дополнительный признак (наша доработка) да/нет в отчет должны попадать журналы с со значение признака Нет просмотрела код отчета (InventTurnover_RU) попыталась добавить join и наложить условие в calcAll - не получилось X++: while select RecId, CostAmountPosted, CostAmountAdjustment, Qty, DatePhysical, Direction, TransRefId, InvoiceId from searchInventTrans where searchInventTrans.DatePhysical <= endDate && searchInventTrans.ItemId == inventTable.ItemId && searchInventTrans.Direction != InventDirection::None && searchInventTrans.StatusIssue != StatusIssue::OnOrder && searchInventTrans.StatusIssue != StatusIssue::Picked && searchInventTrans.StatusIssue != StatusIssue::ReservOrdered && searchInventTrans.StatusIssue != StatusIssue::ReservPhysical && searchInventTrans.StatusIssue != StatusIssue::QuotationIssue && searchInventTrans.StatusReceipt != StatusReceipt::Registered && searchInventTrans.StatusReceipt != StatusReceipt::Arrived && searchInventTrans.StatusReceipt != StatusReceipt::QuotationReceipt && searchInventTrans.StatusReceipt != StatusReceipt::Ordered join inventDim where inventDim.inventDimId == searchInventTrans.inventDimId && inventDim.InventLocationId == InventLocationId //мои изменения --> join InventJournalTrans where InventJournalTrans.InventTransId == searchInventTrans.InventTransId join inventJournalTable where inventJournalTable.JournalId == InventJournalTrans.JournalId && inventJournalTable.UNS_IsPererabotka == NoYes::No //мои изменения <-- помогите, пожалуйста, в пн. с утра сдавать очет....
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. Последний раз редактировалось jeky; 04.04.2009 в 16:12. |
|
04.04.2009, 16:04 | #2 |
:o)
|
так же попыталась навесить цепочку из датасорсов в query отчета в AOD c ранджем на нужном поле - Нет
тоже ни к чему не привело...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 16:19 | #3 |
:o)
|
если все же кто-то мимоходом заглянет...
after - мои изменения - к сожалению превысил лимит в 300кб before - до моих изменений
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. Последний раз редактировалось jeky; 04.04.2009 в 17:00. |
|
04.04.2009, 16:54 | #4 |
Administrator
|
Против непосредственно наложения фильтра ничего не имею, но... почему Вы решили что все складские операции (searchInventTrans) порождены из складских журналов (InventJournalTrans)? Да и разнесенный складской журнал - в общем-то никто не мешает удалить (если это не запрещали в рамках доработки).
Тут более правильно будет не джойниться с InventTrans, а уже внутри цикла каждый раз делать find к InventJournalTrans. Это конечно будет медленнее. Ну либо - not exists join к InventJournalTrans, где поле UNS_IsPererabotka == NoYes::Yes. Но этот запрос тоже надо замерять по времени
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: aidsua (1). |
04.04.2009, 16:55 | #5 |
Moderator
|
У меня нет ваших данных, чтобы сказать однозначно, но я бы стал думать в направлении добавлении вашей галки в InventTrans и заполнении ее в момент разноски журнала.
Как правило, оборотка и так не самый быстрый отчет, а join 2-х дополнительных таблиц отрицательно скажется на ее быстродействии. Кроме того, я бы имел в виду, что разнесенные журналы могут быть удалены. Если не сразу, то через пару лет в момент "обрезания" базы данных. А в этом случае ваш отчет будет работать не корректно. |
|
04.04.2009, 17:09 | #6 |
:o)
|
Цитата:
Цитата:
Цитата:
Сообщение от sukhanchik
Тут более правильно будет не джойниться с InventTrans, а уже внутри цикла каждый раз делать find к InventJournalTrans. Это конечно будет медленнее. Ну либо - not exists join к InventJournalTrans, где поле UNS_IsPererabotka == NoYes::Yes. Но этот запрос тоже надо замерять по времени
за идею спасибо! буду думать как же это применить
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 17:12 | #7 |
:o)
|
больше всего пугает отсутствие на изменения какой бы то ни было реакции вообще !!!
кэш чистила, инкрементную компиляцию делала, хотя там это и ни к чему особо... в использовании данных удаляла и отчет и классы и версию в классах изменяла.... ну, и аксапту переоткрывала, конечно...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 17:41 | #8 |
Участник
|
Давайте попробуем начать сначала:
Цитата:
не получилось
Запрос абсолютно рабочий (ну если учесть все предыдущие замечания по поводу того, что сам журнал это всего лишь черновик - если не учитывать доработки, возникшие при локализации). То есть запрос должен выбирать только те операции, которые принадлежат нужным журналам. Значит "не получилось" это что-то другое. А вот что? |
|
04.04.2009, 17:48 | #9 |
:o)
|
на период тестирования совершенно точно известно, что существуют журналы с признаком переработка... наложение фильтра на запрос не привело к вычитанию количеств, принадлежащих этим журналам, из количества прихода отчета по тестируемой номенклатуре.....
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 17:53 | #10 |
Участник
|
Посмотрел сам отчет (мы его не используем по той причине, что определение остатков там выполняется "с начала времен", что при 5 летней базе не есть гуд).
Кажется догадался, что "не получается" это то, что в отчет попадают все номенклатуры. Но так и должно быть - calcAll всего лишь считает для конкретной номенклатуры данные, но номенклатура уже выбрана и в отчет попадает. Вам нужно модифицировать сам query (надеюсь, что на копии, а не на оригинальном отчете). Так же, если по каки-то причинам Query менять нельзя, то можно отсекать лишние записи либо переопределив fetch, либо программно модифицировать QueryRun перед выполнением на конкретный сеанс, ну и не очень красиво - в executeSection не вызывать super, если запись не подходит (тут возможны неприятные побочные эфекты) |
|
04.04.2009, 18:13 | #11 |
Участник
|
Пока писал, получил ответ и успел посмотреть проект. Но в проекте нет кода, приведенного в собщении. Лучше приложить тот проект, в котором уже есть изменения.
PS: кстати, когда вызываете отчет точно используете свой менюитем, а не стандартный? |
|
04.04.2009, 18:14 | #12 |
:o)
|
Цитата:
Сообщение от Raven Melancholic
Посмотрел сам отчет (мы его не используем по той причине, что определение остатков там выполняется "с начала времен", что при 5 летней базе не есть гуд).
Кажется догадался, что "не получается" это то, что в отчет попадают все номенклатуры. Но так и должно быть - calcAll всего лишь считает для конкретной номенклатуры данные, но номенклатура уже выбрана и в отчет попадает. Вам нужно модифицировать сам query (надеюсь, что на копии, а не на оригинальном отчете).
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 18:40 | #13 |
:o)
|
все... прошу прощения...
цифра сошлась... у нас на работе завал - до этого возилась с отчетом, учитывающим переработку... а в этом отчете нужно было исключить сторно... нужная сумма прихода - сошлась.. но разъехались остатки на начало и конец периода.. причем очень сильно разъехались... я пыталась его выложить - но он не поместился в положенные на сайте 300 кб, сейчас ещё раз попробую - удалила из query датасоры
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 18:45 | #14 |
Участник
|
Цитата:
разъехались остатки на начало и конец периода
http://axapta.mazzy.ru/lib/inventsumdate/ |
|
04.04.2009, 18:50 | #15 |
:o)
|
Цитата:
Сообщение от Raven Melancholic
Это вполне естественно. Установив фильтр только по журналам, подходящим под условия, вы и получили остатки, сформированные только с учетом таких движений - остальные игнорируются. Вообще, забудьте про получение остатков таким способом, который используется в отчете InventTurnover_RU. Для получения остатков используйте соответствующие классы семейства InventSumDate*. Как их использовать можно посмотреть по ссылке:
http://axapta.mazzy.ru/lib/inventsumdate/
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 18:51 | #16 |
Участник
|
В приложенном отчете InventTurnoverNoStorno_RU та же проблема по остаткам. Остатки считаются только по тем операциям, которые подходят под условие - "это не сторно". Для оборотов это нормально, а для остатков - нет, так как остатки должны формироваться по всем операциям.
Цитата:
у нас на работе завал
|
|
04.04.2009, 18:53 | #17 |
Участник
|
Ну и получайте оборот по операциям, а остатки с помощью указанных классов. Мы у себя по подобию классов InventSumDate* напрограммировали подобные по оборотам. Все складывается неплохо, за исключением производительности, но это решаемо.
|
|
|
За это сообщение автора поблагодарили: jeky (1). |
04.04.2009, 19:24 | #18 |
:o)
|
Цитата:
Сообщение от Raven Melancholic
В приложенном отчете InventTurnoverNoStorno_RU та же проблема по остаткам. Остатки считаются только по тем операциям, которые подходят под условие - "это не сторно". Для оборотов это нормально, а для остатков - нет, так как остатки должны формироваться по всем операциям.
Да.. счастье-то счастье... а вот как бы по окончании этой большой работы как бы не пнули под зад!
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
04.04.2009, 19:28 | #19 |
:o)
|
Цитата:
Сообщение от Андре
У меня нет ваших данных, чтобы сказать однозначно, но я бы стал думать в направлении добавлении вашей галки в InventTrans и заполнении ее в момент разноски журнала.
Как правило, оборотка и так не самый быстрый отчет, а join 2-х дополнительных таблиц отрицательно скажется на ее быстродействии. Кроме того, я бы имел в виду, что разнесенные журналы могут быть удалены. Если не сразу, то через пару лет в момент "обрезания" базы данных. А в этом случае ваш отчет будет работать не корректно. у нас на работе просто пожар..
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
06.04.2009, 12:06 | #20 |
:o)
|
вобщем поступила совершенно бесцеремонно и некрасиво ..
вытащила из searchInventTrans id проводки.. по ней делаю дополнительный селект из проводок с уже проверкой сторно это или нет, если да, то в пеменную isStorno запоминаю а дальше закрыла под неё вычисление оборотов, а остатки на конец и начало вычисляются по-прежнему... самое быстрое, что смогла на сегодня утро придумать... а дальше будем посмотреть ...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. Последний раз редактировалось jeky; 06.04.2009 в 12:20. |
|