|
Как подобрать комбинации сумм на нужную сумму | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
18.08.21
✎
19:26
|
Из банка пришло 100 руб. за операции по экварингу
К данной сумме надо подобрать документы оплата картой. Например, есть документы на 20,30,50,75,25 руб, Торговую уступку пока опускаем. Надо подобрать документы оплата картой так чтобы максимально закрыть эти 100 рублей. С высокой долей вероятности комбинация из нескольких документов оплата картой даст нужные 100 руб. Но сколько таких документов надо использовать в подборе я не знаю. Может только 1, а моджет их будет 3. Сейчас задачу решил составлением все возможных комбинаций через запрос. Но это ресурсоемкая операция. Есть ли более быстрые алгоритмы (а еще лучше сразу в запросе или в СКД) для подбора документов, чтобы закрыть сумму? |
|||
1
Ненавижу 1С
гуру
18.08.21
✎
19:28
|
>>Сейчас задачу решил составлением все возможных комбинаций через запрос
не верю! |
|||
2
hhhh
18.08.21
✎
19:34
|
(0) а зачем это нужно? То что присылает банк, нужно только для расчетов с банком, поэтому сложить все эти суммы, это будет долг банка, и этот долг закрывать общей суммой.
|
|||
3
lubitelxml
18.08.21
✎
19:38
|
(1) я тоже
|
|||
4
lubitelxml
18.08.21
✎
19:39
|
Чем то задачу про рюкзак напоминает
|
|||
5
МихаилМ
18.08.21
✎
19:50
|
||||
6
МихаилМ
18.08.21
✎
19:52
|
||||
7
МихаилМ
18.08.21
✎
19:53
|
||||
8
BeerHelpsMeWin
18.08.21
✎
19:59
|
Почему нельзя закрывать просто всё подряд? У вас частичной оплаты в принципе не может быть?
|
|||
9
BeerHelpsMeWin
18.08.21
✎
23:41
|
(8) Туплю, тебе ж не это надо. Тогда да, смотри в сторону (2)
|
|||
10
Злопчинский
18.08.21
✎
23:47
|
для небольшого количества сумм прямой перебор считает быстро.
|
|||
11
Franchiser
гуру
19.08.21
✎
01:23
|
Делал такую задачу лет 20 назад на 7.7. Узнал что такое рекурсия.
|
|||
12
SleepyHead
гуру
19.08.21
✎
05:15
|
(11) Рекурсия (сущ.) - см. Рекурсия.
|
|||
13
ИС-2
naïve
19.08.21
✎
08:50
|
(1) через запрос ничего сложного - делаешь полное содение (закладка соедения пустая) между таблицами документов. Кол-во таблиц равно кол-ву комбиниаций. Правда оптимизировать надо - чтобы дублей не было
|
|||
14
ИС-2
naïve
19.08.21
✎
08:54
|
ВЫБРАТЬ
ТЗ_ОплатаКартой.Ссылка КАК ОплатаКартой, ТЗ_ОплатаКартой.СуммаДокумента КАК СуммаОплатыКартой ПОМЕСТИТЬ ВТ_ОплатаКартой ИЗ Документ.ОплатаОтПокупателяПлатежнойКартой КАК ТЗ_ОплатаКартой ГДЕ ТЗ_ОплатаКартой.Ссылка В(&МассивОплатаКартой) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ОплатаКартой.ОплатаКартой, ВТ_ОплатаКартой.СуммаОплатыКартой ПОМЕСТИТЬ ВТ_Множества ИЗ ВТ_ОплатаКартой КАК ВТ_ОплатаКартой ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Множества_1.ОплатаКартой КАК ОплатаКартой_1, ВТ_Множества_1.СуммаОплатыКартой КАК СуммаОплатыКартой_1, ВТ_Множества_2.ОплатаКартой КАК ОплатаКартой_2, ВТ_Множества_2.СуммаОплатыКартой КАК СуммаОплатыКартой_2, 0 + ВТ_Множества_1.СуммаОплатыКартой + ВТ_Множества_2.СуммаОплатыКартой КАК СуммаВсехОплат, ВЫБОР КОГДА &СуммаИзБанкаСКомиссией - (0 + ВТ_Множества_1.СуммаОплатыКартой + ВТ_Множества_2.СуммаОплатыКартой) < 0 ТОГДА NULL ИНАЧЕ &СуммаИзБанкаСКомиссией - (0 + ВТ_Множества_1.СуммаОплатыКартой + ВТ_Множества_2.СуммаОплатыКартой) КОНЕЦ КАК Расхождение ИЗ ВТ_Множества КАК ВТ_Множества_1, ВТ_Множества КАК ВТ_Множества_2 ГДЕ ИСТИНА И НЕ ВТ_Множества_1.ОплатаКартой = ВТ_Множества_2.ОплатаКартой УПОРЯДОЧИТЬ ПО Расхождение ИТОГИ ПО Расхождение |
|||
15
Доминошник
19.08.21
✎
09:42
|
Присоединюсь к (2)
(0) Что будем делать, подобрав из этого списка "20,30,50,75,25" такие суммы - 20, 30, 50. А на следующий день банк присылает 50 (в списке осталось только 75 и 25). |
|||
16
2S
19.08.21
✎
09:44
|
(0) а почему не по фифо закрывать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |