04.06.2014, 14:28 | #1 |
Участник
|
Как реализовать смену тарифа на ходу?
Добрый день! Ситуация такая: пользователь формирует заказ на продажу, и если замечает, что где-то видит неправильный тариф - открывает удобную форму, в котором перечислены строки заказа с возможностью редактирования цены из PriceDiscTable напротив каждой позиции.
Есть ли какие-то идеи у вас? Как-то это можно сделать? |
|
04.06.2014, 14:50 | #2 |
Участник
|
Что я понял из вашего вопроса.Нужно сделать так, чтобы пользователь мог редактировать цену
Что я не понял. Где редактировать цену? в строке заказа? в прайсе? что значит удобную? чем неудобно то что есть сейчас? Нужно отфильтровать прайс, оставив там только позиции из заказа? |
|
04.06.2014, 14:57 | #3 |
Участник
|
Да
Через отдельную форму в прайсе (т.е. человек увидел, что цена неправильная, открыл эту форму, подправил, закрыл. ВСЕ теперь действует та цена которую он поставил) Чтобы далеко никуда не лазить Нужно далеко лазить По сути да. Отобразить позиции в таблице и добавить напротив каждой позиции текущую цену с возможностью редактирования и обновления в PriceDiscTable |
|
04.06.2014, 15:16 | #4 |
Участник
|
В общем случае для определения по позиции в заказе используемой строки прайса нужно использовать стандартный класс PriceDisc. Вам скорее всего пригодится метод PriceDisc::newFromSalesPurchLine().
Формируйте временную таблицу и сохраняйте для каждой позиции RecId строки прайса. На основании этой ссылки потом выполняйте обновление. |
|
04.06.2014, 15:29 | #5 |
Участник
|
Немного выскажусь по постановке самой задачи. Часто "неправильная" цена в строке заказа вызвана не ошибкой в прайсе, а ошибкой в заказе (пользователь поставил не ту дату, не ту группу и т.д). Т.е. по введенным параметрам система находит не ту позицию в прайсе, которую имел в виду пользователь. И здесь уже нужно исправлять не прайс а заказ. Как вы собираетесь учить пользователей отделять мух от котлет?
Ещё прайс, как правило - это документ, который должен утверждаться ответственными лицами и так просто позволять его править под конкретный заказ... |
|
04.06.2014, 16:28 | #6 |
северный Будда
|
Цитата:
для определения "неправильности" прайса в системе нужно иметь перед глазами второй ("правильный"). а вот откуда он будет браться...
__________________
С уважением, Вячеслав |
|
05.06.2014, 05:58 | #7 |
Участник
|
Правильный прайс есть и он перед глазами. Другое дело - за ним в аксапте пока некому следить, т.к. только идет внедрение, а работа по заказам уже идет
|
|
05.06.2014, 06:03 | #8 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Немного выскажусь по постановке самой задачи. Часто "неправильная" цена в строке заказа вызвана не ошибкой в прайсе, а ошибкой в заказе (пользователь поставил не ту дату, не ту группу и т.д). Т.е. по введенным параметрам система находит не ту позицию в прайсе, которую имел в виду пользователь. И здесь уже нужно исправлять не прайс а заказ. Как вы собираетесь учить пользователей отделять мух от котлет?
По поводу правильности - пост выше. За ценами пока следить некому, поэтому на время можно придумать такую форму Спасибо, буду пробовать сегодня |
|
05.06.2014, 07:09 | #9 |
Участник
|
Цитата:
А для чего в PriceDisc нужен метод priceTable? Это, случайно, не как раз новая строка для новой цены? |
|
05.06.2014, 08:18 | #10 |
Участник
|
Цитата:
Цитата:
Если речь идет не о редактировании прайса, а о его создании. То тут ещё большие неопределённости чем с редактированием. Ведь цена может быть заведена как общая (для всех клиентов, для группы клиентов, для ценовой группы и .т.д) так и до определенной степени персональная. Какую именно цену необходимо заводить в каждом конкретном случае? В общем случае прайс может иметь очень сложную структуру. Вы оперируете термином тариф. возможно в вашем случае решать задачу в общем виде не целесообразно. Для однозначности нужно принять ограничения на структуру прайса. Если прайс будет однородным, то не сложно будет вручную запрограммировать вставку строк в PriceDiscTable. Как вариант можно заранее нагенерировать автоматически все необходимые позиции прайса, оставив цену нулевой. И тем самым свести задачу создания к задаче редактирования. Последний раз редактировалось S.Kuskov; 05.06.2014 в 08:28. |
|
05.06.2014, 08:35 | #11 |
Участник
|
Цитата:
В общем, для начала, я написал такой код, не сработало X++: public void init() { PriceDisc priceDisc; PriceDiscTable newPrice; SalesLine salesLine2 = SalesLine::find('SO-000444', 1); //берем для примера super(); //тут проблем нет priceDisc = PriceDisc::newFromSalesPurchLine(SalesLine2); //а тут я не понимаю, почему метод findPriceAgreement возвращает Boolean. Как итог разумеется newPrice ни содержит ничего. priceDisc.findPriceAgreement(SalesLine2.priceGroupId(), SalesLine2.inventDim().inventDimId); newPrice = priceDisc.priceTable(); } |
|
05.06.2014, 08:48 | #12 |
Участник
|
Вместо прямого вызова priceDisc.findPriceAgreement() используйте priceDisc.findPrice()
Пример использования \Data Dictionary\Maps\SalesPurchLine\Methods\setPriceAgreement Именно этот метод используется для поиска цены при создании строки заказа через стандартный функционал. Обратите внимание, что в стандартном функционале в случае отсутствия необходимой позиции в прайсе, будет возвращена цена, указанная на справочнике номенклатуры. За это отвечает второй параметр метода findPrice. |
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
05.06.2014, 08:57 | #13 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Вместо прямого вызова priceDisc.findPriceAgreement() используйте priceDisc.findPrice()
Пример использования \Data Dictionary\Maps\SalesPurchLine\Methods\setPriceAgreement Именно этот метод используется для поиска цены при создании строки заказа через стандартный функционал. Обратите внимание, что в стандартном функционале в случае отсутствия необходимой позиции в прайсе, будет возвращена цена, указанная на справочнике номенклатуры. За это отвечает второй параметр метода findPrice. Второй параметр я думаю смысла нет использовать, все-таки тарифы в прайсе есть для каждой номенклатуры (вернее. SalesLine может быть построен в любом случае), хоть они могут быть и неправильные. Но надо разобраться с этим отдельно... Тут еще такая вещь интересная: для номенклатур, цены продажи у которых общие и не зависят ни от клиента, ни от конфигурации вместо числового значения в PriceDiscTable.inventDimId стоит "Axapta", а не что-то вроде "000014_031"... соответственно, в таблице inventDim для "Axapta" строк нет... Почему ставится "Axapta"? К тому же, если для такой номенклатуры выполнить X++: priceDisc.findPriceAgreement(SalesLine2.priceGroupId(), 'Axapta'); |
|
05.06.2014, 09:03 | #14 |
Участник
|
Цитата:
Сообщение от Vasiliusis
Тут еще такая вещь интересная: для номенклатур, цены продажи у которых общие и не зависят ни от клиента, ни от конфигурации вместо числового значения в PriceDiscTable.inventDimId стоит "Axapta", а не что-то вроде "000014_031"... соответственно, в таблице inventDim для "Axapta" строк нет... Почему ставится "Axapta"?
|
|
05.06.2014, 09:11 | #15 |
Участник
|
Цитата:
Если строки в InventDim нету (такое наблюдается только у номенклатур с группой "услуга" кстати), это значит что ее как бы нет на складе? что может значит это отсутсвие в InventDim? Кстати, в SalesLine для "Axapta"-номенклатур в InventDimId ставится как раз "00014_031" и подобное... Никакой axapt'ы там не наблюдается... |
|
05.06.2014, 09:21 | #16 |
Участник
|
Может быть кастомизация где-то ещё. Нужно отлаживать событие вставки строки в прайс. Я бы, поставил точку останова в методе PriceDiscTable.insert() и вверх по стеку вызова посмотрел бы где эта "Axapta" появляется.
Может эта "Axapta" в каких-нибудь настройках номенклатуры прописалась. Может переехала в таблицах из прошлых версий... Последний раз редактировалось S.Kuskov; 05.06.2014 в 09:24. |
|
05.06.2014, 09:21 | #17 |
Участник
|
|
|
05.06.2014, 09:35 | #18 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Может быть кастомизация где-то ещё. Нужно отлаживать событие вставки строки в прайс. Я бы, поставил точку останова в методе PriceDiscTable.insert() и вверх по стеку вызова посмотрел бы где эта "Axapta" появляется.
Может эта "Axapta" в каких-нибудь настройках номенклатуры прописалась. Может переехала в таблицах из прошлых версий... |
|
16.09.2014, 10:55 | #19 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Если речь идет не о редактировании прайса, а о его создании. То тут ещё большие неопределённости чем с редактированием. Ведь цена может быть заведена как общая (для всех клиентов, для группы клиентов, для ценовой группы и .т.д) так и до определенной степени персональная. Какую именно цену необходимо заводить в каждом конкретном случае?
1. В лоб: создавать просто строку PriceDiscTable, наполнять ее данными и делать insert? 2. "Хитро": использовать классы PriceDisc, PriceDisc_Price? |
|
16.09.2014, 11:25 | #20 |
Участник
|
Названные вами классы не создают новых строк в прайсе, а только ищут среди имеющихся.
Вот что гуглится по запросу PriceDiscTable insert http://microsoft.public.axapta.progr...cedisc-using-x http://www.cnblogs.com/Fandyx/archiv...5/2027655.html |
|