22.02.2005, 10:10 | #1 |
Участник
|
Алгоритм поиска ценового соглашения и скидки
Есть такой вопрос:
Как в Axapta происходит расчет цен из ценовых соглашений, если условию удовлетворяют несколько соглашений? Меня интересует такой случай: 1. Все параметры двух ценовых соглашений абсолютно одинаковы, кроме самой цены. Галка "найти далее" не стоит. (ИМХО, должен подставить первую найденную, только какую?) 2. Галка установлена в обоих соглашениях. Какая цена подставится в заказ/закупку в этих случаях? И чуть более общий случай: 3. Есть 2 ценовых соглашения, одно на конкретный товар, одно на группу товаров; товар в заказе попадает под оба этих соглашения. Какое будет активизировано? (опять же 2 случая - с галкой и без) Т.е. интересует на самом деле алгоритм сортировки этих ценовых соглашений. Наверняка алгоритм один и тот же для скидок и цен. Должен же он быть зафиксирован где-нибудь?? |
|
22.02.2005, 10:47 | #2 |
Злыдни
|
Зафиксирован в классе PriceDisc
|
|
22.02.2005, 10:57 | #3 |
Участник
|
1. Подставит первую найденную. Если все параметры одинаковы, то ту, которую раньше отдаст SQL Server. Скорее всего, которая была раньше создана, но не факт.
2. Подставится меньшая цена. 3. С галкой - меньшая. Без галки - соглашение на товар. Для скидок тоже самое, только вместо поиска наименьшего значения скидки суммируются. Алгоритм - что-то есть в справке, что-то в документации, а также в классе PriceDisc. |
|
22.02.2005, 11:11 | #4 |
Участник
|
В первом случае, если подходят две цены, то возьмет то соглашение, у которого меньше количество (см. индекс PriceDiscIdx).
Если стоит галочка «Найти далее», то система выберет наиболее выгодную из двух, т.е наименьшую цену с учетом накладных расходов. Если есть цена на группу и товар, то более приоритетной является цена на товар. Если на товар не найдено, то ищется для группы (если активизированы данные цены/скидки). Что касается галок, то аналогично как и в первых двух случаях. Относительно описания, то кое что есть в руководстве по торговле и логистике. А вообще лучше всего на каком-нибудь примере посмотреть как оно работает |
|
22.02.2005, 12:08 | #5 |
Участник
|
Спасибо за ответы, руководство, встроенный хелп и форум я уже облазил, однако ответов не нашел.
В руководстве по поводу цен/скидок конечно написано, но уж очень обще. И настолько подробно там, по-моему, ни одна операция не разбирается. Конечно и ежу понятно, что тут надо смотреть код, только это немного не в моих силах. Смотреть то конечно в силах, а вот где конкретно искать и понять, а что же это я нашел - нереально... Вот есть такая вещь в PriceDisc: static container findItemPriceAgreement(ModuleInventPurchSales _moduleType, ItemId _itemId, inventDim _inventDim, UnitID _unitID, TransDate _priceDate, Qty _qty, CustVendAC _accountId, CurrencyCode _currency, priceGroupId _priceGroupId) { PriceDisc priceDisc; ; priceDisc = new PriceDisc(_moduleType, _itemId, _inventDim, _unitId, _priceDate, _qty, _accountId, _currency); priceDisc.findPrice(_priceGroupId); return [priceDisc.price(), priceDisc.markup(), priceDisc.priceUnit(), priceDisc.deliveryDays(), priceDisc.calendarDays()]; } а толку то? запустил в поиске что такое ItemId; ищет уже 10 минут... Как раз и спрашиваю здесь, чтобы если повезет, нарваться на человека, уже знающего что к чему А теперь уточняющие вопросы: Цитата:
Изначально опубликовано olesh
1. Подставит первую найденную. Если все параметры одинаковы, то ту, которую раньше отдаст SQL Server. Скорее всего, которая была раньше создана, но не факт. Цитата:
2. Подставится меньшая цена.
3. С галкой - меньшая. Без галки - соглашение на товар. Цитата:
Алгоритм - что-то есть в справке, что-то в документации, а также в классе PriceDisc.
Цитата:
Изначально опубликовано leshy
А вообще лучше всего на каком-нибудь примере посмотреть как оно работает Но чтобы реально перебрать все возможные комбинации, нужно неделю наверное потратить, что выяснить: зависит ли алгоритм от даты соглашения, от кода связи контрагента и номенклатуры (это уже выяснили, но все же), от того где ценовое соглашение задействовано - в ценовых соглашениях или журнале ком. соглашений и т.д. И ведь ладно просто выяснить зависит ли. Надо ж узнать еще как приоритеты расставлены. Т.е. порядок сортировки списка (к вопросу о SQL Server) по этим параметрам. Если возможно, ткните хотя бы пальцем где конкретно это в коде. Я не прошу прислать 50-страничное описание алгоритма (а хотелось бы!), просто конкретную ссылку. (PriceDisc такой большой и непонятный...) |
|
22.02.2005, 12:24 | #6 |
Участник
|
//
Вот на примере мы сами смогли узнать, что в случае "найти далее" подставляется меньшая цена. // Не меньшая цена, а меньшая (Цена и Накладные расходы) //Если возможно, ткните хотя бы пальцем где конкретно это в коде. PriceDisc.FindPriceAgreement (для цен) Обратите внимание на индекс PriceDiscIdx, по нему производится поиск. |
|
22.02.2005, 12:41 | #7 |
Участник
|
Цитата:
Обратите внимание на индекс PriceDiscIdx, по нему производится поиск.
Я правильно понял, что сортировка происходит в том порядке, в каком приведены поля в индексе? Если да, тогда все предельно ясно |
|