SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Задача по нахождению документов оплаты и сумм для фактур



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Thu Aug 20, 2009 12:26 pm    Post subject: Задача по нахождению документов оплаты и сумм для фактур Reply with quote

Вопроса как такогого нет. Есть задача, не выдуманая, а реальная, вчера поставили. Я ее разбиваю на несколько подзадач и буду их выкладывать по одной. Если будут какие коментарии по поводу более оптимального алгоритма или кода, я буду только рад. Ну а уж если найдете ошибку, то вообще замечательно, в смысле лучше поправить сразу.

ЗЫ: сначала попробуйте сами, потом уж в нете Smile я там сам искать умею.

Подзадача 1. Есть набор чисел A = {a_1, a_2, ..., a_n} (сумма позиций документа выравнивания) и есть число S_1 (сумма фактуры). Нужно подобрать поднабор позиций что бы их сумма была равна сумме фактуры, т.е. S_1 = a_i + a_j + ... + a_p.

После обеда займусь реализацией алгоритм уже кое какой готов. Smile

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Last edited by XXX_:) on Thu Aug 20, 2009 5:33 pm; edited 1 time in total
Back to top
View user's profile Send private message Blog
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Aug 20, 2009 3:00 pm    Post subject: Reply with quote

Вообще задачка интересная Smile
Back to top
View user's profile Send private message Blog Visit poster's website
Julia_ch
Участник
Участник


Age: 38
Joined: 11 Aug 2009
Posts: 6

PostPosted: Thu Aug 20, 2009 5:06 pm    Post subject: Reply with quote

таких поднаборов может быть несколько, каким образом будет находится тот единственный, к-й нужен? Как я понимаю, необходимо выделить только одно множество позиций, сумма по которым будет равняться сумме фактуры. Rolling Eyes
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Thu Aug 20, 2009 5:32 pm    Post subject: Reply with quote

Забегу немного вперед. много фактур(обозначим подмножество S = S_1, ..., S_m), они все ссылаются на один документ выравнивания(подмножество A). Берем одну фактуру(Т.е S_1(переправил верхний пост)) для нее ищем подмножество(а_s,...,a_j). После этого будем осуществлять поиск для следующей фактуры (S_2), но позиции, участвовавшие в первой сумме (а_s,...,a_j), во вторую входить не могут.

Интуиция говорит, что будет больше шансов такое сделать, если в первую подсумму выбирать как можно большие a_i, т.е. вести поиск сначала по большим по значению элементам a_i, где i от 1 до n.(Хотя я думаю есть варианты когда это будет не оптимально).

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Last edited by XXX_:) on Thu Aug 20, 2009 5:54 pm; edited 1 time in total
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Aug 20, 2009 5:37 pm    Post subject: Reply with quote

А чем не устраивает вариант FIFO, с частичным выравниванием позиции платежа, сумма по которой будет превышать остаток от разности суммы фактуры и предыдущих позиций? Rolling Eyes
_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Aug 20, 2009 5:40 pm    Post subject: Reply with quote

Ага. Новая вводная Very Happy
А кто мешает не в одном документе выравнивания все делать, а отдельным документом для каждой фактуры?

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Thu Aug 20, 2009 5:52 pm    Post subject: Reply with quote

Удав wrote:
Ага. Новая вводная Very Happy
А кто мешает не в одном документе выравнивания все делать, а отдельным документом для каждой фактуры?


В системе у нас вот так реализовано. А то что я делаю, нужно для отчета "Кредитная история" т.е. пляшем от фактур, ради одного отчета концепт пересматривать не будут.

Наши FI сказали, что то что мы хотим можно реализовать только подбором позиций на нужную сумму, с последующим переходом к документам оплаты. Но это будет потом. Сначала корректно разобраться с 1 подзадачей. Могу выложить полный алгоритм. Просто боюсь мозг забью людям.

PS: ИМХО такое не подойдет Sad. http://rain.ifmo.ru/cat/view.php/theory/unsorted/approx-2004

Если кому интересно, то это, наверное, частный случай задачи об упаковки рюкзака. Не бейте если не так Smile

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Mon Aug 24, 2009 4:49 pm    Post subject: Reply with quote

Мои изыскания привели к следующим результатам. Опросил всех кто был в досигаемости.
Абаперы: интересно, сочувствуем, если сделаешь расскажи Smile
Научный руководитель(математик): посмеялся, сказал алгоритм на оптимальное решение такой задачи тянет на кандидатскую. Сказал, если сделаю, чтобы обязательно рассказал.
Интернет: Есть задача, когда множество S состоит из одного числа, тогда алгоритм есть. Такая задача называтся "Задача о суммах подмножеств". Но алгоритм ее решения находится на последних страницах книги "Алгоритмы: построение и анализ" почти в 1300 страниц. Полистал ее в магазине, понял что сходу не понятно. Приобрести помешала природная жадность. Времени на ее освоение вне работы просто нет.
В электронном формате книга обрезана до 16 главы. Если у кого есть скиньте, может что интересного вычитаю.

ЗЫ: по возможности отложу на неопределенный срок...

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
vga
Мастер
Мастер


Age: 70
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Mon Aug 24, 2009 5:26 pm    Post subject: Reply with quote

Привет, посмотри по ссылкам:
http://forum.vingrad.ru/index.php?showtopic=53676
http://pogorskiy.narod.ru/algos.htm
http://www.knigka.info/2007/08/27/algoritmy_postroenie_i_analiz.html
Back to top
View user's profile Send private message Blog Visit poster's website
Julia_ch
Участник
Участник


Age: 38
Joined: 11 Aug 2009
Posts: 6

PostPosted: Fri Sep 04, 2009 12:00 pm    Post subject: Reply with quote

XXX_:), как успехи?
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Fri Sep 04, 2009 12:26 pm    Post subject: Reply with quote

Имел неосторожность Smile или еще как, в общем когда интересовался решением этой задачи у своих коллег мой начальник так же стоял в копии. Увидел это безобразие и написал постановщику гневное письмо Smile. Задачу сняли/отложили. Алгоритм по нахождению одного подмножества есть схематично, по ссылке http: /forum.vingrad.ru/index.php?showtopic=53676 (отдельное спасибо vga, кстати решил купить себе такую в печатном варианте) в "Задача о суммах подмножеств" последние страницы криги. Хотя алгоритм для нахождения одного подмножества не составляет труда.

Я как мне кажется придумал алгоритм для нахождения для любого конечного набора S_i, только вот реализовать его незнаю как Sad, т.е. можно, но сложно, если интересно могу выложить.

А самому реализовывать некогда Sad работы очень много как всегда, да еще дисер пишу, защита скоро время поджимает. Smile

Буду рад, если кого то эта задача заинтересовала Smile, если у кого есть желание поработать в комманде над этой задачей я только за.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Fri Sep 04, 2009 12:41 pm    Post subject: Reply with quote

прошу технические детали оставить на потом.

алгоритм примерно такой

1. берем S_1 и для него находим все возможные суммы из {x_i}.
Запомним индексы i из каждой суммы. Примерно так
S_1 индексы 2, 5, 34, 1
S_1 индексы 2, 16, 26
....
S_1 индексы 16, 17, 37

Так сделать для всех S_j

2. Дальше нужно выбрать такие строки из таблицы с индексами, чтобы
слева было S_1, S_2, ...
а справа цифры не повторялись. Такое решение по крайней мере одно есть точно.

Может есть у кого другая стратегия?

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
AlexxZ2
Участник
Участник



Joined: 20 Sep 2009
Posts: 1

PostPosted: Sun Sep 20, 2009 10:38 pm    Post subject: Reply with quote

На самом деле приведенная задача - это классическая задача "заполнения стакана". Частный случай диофантового уравнения. Решается либо полным перебором, а если позиций тысячи (их полностью не перебрать), то методом ветвей и границ - немного улучшенный полный перебор.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.