|
Как распределить сумму по нескольким строкам | ☑ | ||
---|---|---|---|---|
0
Melcor
30.10.17
✎
14:10
|
Доброго дня. Подскажите алгоритм распределения суммы оплат. Скажем есть 4 строки с суммами:
150 100 300 250 Нужно чтобы когда вбиваешь сумму 500 1с сама раскидала в таком порядке: 150 - 150 100 - 100 300 - 0 250 - 250 |
|||
1
Гипервизор
30.10.17
✎
14:12
|
(0) А в этом вашем порядке какой алгоритм распределения заложен?
|
|||
2
1dvd
30.10.17
✎
14:12
|
(0) непонятна логика. Почему 300-0?
|
|||
3
Mort
30.10.17
✎
14:12
|
Сформулируй как должно распределяться словами, а там дело за малым.
|
|||
4
1dvd
30.10.17
✎
14:13
|
Рюкзачок, похоже
|
|||
5
Melcor
30.10.17
✎
14:14
|
ну у меня есть строки с платежками, и мы знаем общую сумму выписки из банка, и хотелось бы, чтобы оператор забил общую сумму, а она автоматом раскидалась по строкам соответственно, т.е. строк много и сумма не по всем платежкам
|
|||
6
Джинн
30.10.17
✎
14:14
|
(2) Нормальна логика :)
Если Какая-то-Хрень = 300 Тогда 0 КонецЕсли; |
|||
7
Гипервизор
30.10.17
✎
14:14
|
(2) На 300 рифма нехорошая видимо.
|
|||
8
Джинн
30.10.17
✎
14:15
|
(5) Бред какой-то.
|
|||
9
1dvd
30.10.17
✎
14:15
|
(5) гугли задачу о рюкзаке
|
|||
10
Mort
30.10.17
✎
14:15
|
Если платежек > 100 можно сразу забить.
|
|||
11
Melcor
30.10.17
✎
14:16
|
по строчно не факт что распределит, просто есть вероятность, что изначально мы распределили сумму на одну платежку, а по остальным ровно не выходит распределить
|
|||
12
Numerus Mikhail
30.10.17
✎
14:17
|
(11) 2 платежки по 500р, а пришла только одна. куда вешать?
|
|||
13
Dotoshin
30.10.17
✎
14:19
|
(0) Тебе сумму платежек под общую сумму надо что-ли подобрать?
|
|||
14
Melcor
30.10.17
✎
14:20
|
(12) На первую, они все от одного контрагента
|
|||
15
Melcor
30.10.17
✎
14:20
|
(13) ага
|
|||
16
Numerus Mikhail
30.10.17
✎
14:20
|
(14) а вдруг договоры разные?
|
|||
17
Melcor
30.10.17
✎
14:21
|
(14) Один
|
|||
18
1Снеговик
гуру
30.10.17
✎
14:22
|
(3) я так понял, если не хватает на строку, то пропускать
|
|||
19
CepeLLlka
30.10.17
✎
14:22
|
(15)Ну так и иди от самого большого платежа или задай приоритеты контрагентам или самим платёжкам.
И потом уже бери общую сумму, и циклом пробегай по всем платежам, в зависимости от приоритета и суммы, ставь им признак оплаты и уменьшай общую сумму.. |
|||
20
CepeLLlka
30.10.17
✎
14:22
|
(18)Тогда можно просто отсортировать строки и всё
|
|||
21
Melcor
30.10.17
✎
14:23
|
(19) Тут есть вероятность, что мы добавили сумму в ту платежку из-за которой потом не будет биться общая сумма по остальным
|
|||
22
Numerus Mikhail
30.10.17
✎
14:24
|
Ну тогда вешай на все строки по порядку пока хватает.
В любом случае этот контрагент вам должен, так какая разница по какой платежке? |
|||
23
1Снеговик
гуру
30.10.17
✎
14:25
|
(20) скорее просто циклом по порядку строк.
Но может остаться маленький остаток. |
|||
24
Dotoshin
30.10.17
✎
14:25
|
(19) Не прокатит. Может оказаться так что остальные суммы будут либо слишком большие, либо слишком маленькие и будет либо остаток получаться либо излишек. Если я правильно понял ему точную сумму надо подобрать из нескольких сумм.
|
|||
25
Брудвар
30.10.17
✎
14:25
|
(0) Перебором всех возможных вариантов. Сделай такой цикл. Как только вариант сошелся, выбираешь его, и ОК
|
|||
26
Melcor
30.10.17
✎
14:26
|
(23) Так и думал, чтобы не заморачиваться, но шанс косяка присутствует, думал, может у кого есть подобный алгоритм
|
|||
27
Брудвар
30.10.17
✎
14:27
|
Но возможны сбои. Например есть платеж на 300 и суммы:
100 200 300 Распределяется так: 100 - 100 200 - 200 300 - 0 На следующий день приходит платеж на 200, и никак его не распределишь, потому что 200 уже занято. |
|||
28
Dotoshin
30.10.17
✎
14:29
|
(27) Можно перераспределить, за два дня.
|
|||
29
Брудвар
30.10.17
✎
14:30
|
(28) Тогда нет проблем, задача решена!
|
|||
30
Dotoshin
30.10.17
✎
14:32
|
(26) Вот тут посмотри, может подойдет
https://ru.stackoverflow.com/questions/317017/Перебор-сочетаний-из-n-по-k |
|||
31
Dotoshin
30.10.17
✎
14:34
|
||||
32
Михаил Козлов
30.10.17
✎
14:52
|
Это ранец на равенство:
Ai - сумма i-той строки; B - сумма платежа; Xi = 0 или 1 - искомые переменные. Нужно найти решение уравнения: СУММА(по i) Ai*Xi = B. Если не повезет - может получиться полный перебор, но здесь он не слишком большой (2^число строк). Попробуйте в лоб полным перебором или какие-то алгоритмы для ранца. Правда, не понятно. зачем это нужно: есть штатный подбор. Ну оформит он частичную оплату - не велика беда. |
|||
33
Брудвар
30.10.17
✎
16:35
|
(32) может число строк ^ 2?
|
|||
34
Михаил Козлов
30.10.17
✎
22:59
|
(33) Нет, 2^число строк: строка либо входит в решение, либо нет.
|
|||
35
breezee
30.10.17
✎
23:11
|
(0) Ваш алгоритм может отработать некорректно если нужно будет распределить 500 на строки:
300 300 300 300 :D |
|||
36
Брудвар
31.10.17
✎
00:21
|
(34) А, ты каждую строку считал отдельно. Тогда все верно, с некоторыми исключениями, что не нужно проверять дальше если в какой-то момент и так понятно что уже перебор.
|
|||
37
Брудвар
31.10.17
✎
00:30
|
(35) Судя по всему такая ситуация маловероятна
|
|||
38
Злопчинский
31.10.17
✎
01:27
|
(37) да пофиг что маловероятно.
А то прибегают потом Ой программа закрылась сама Ой тут какое-то сообщение про деление на ноль Ой он считает уже 3 часа... . А ули, маловероятно же |
|||
39
Klesk
31.10.17
✎
01:30
|
да обычная пропорция, просплюсь - накидаю алгоритмик
|
|||
40
Брудвар
31.10.17
✎
07:33
|
(38) Это вообще не в тему. От этого ничего не закроется и ничего не поделится на ноль. Все нормально
(39) Не, пропорция - это другая задача. |
|||
41
VladZ
31.10.17
✎
07:41
|
(0) Задача мутная какая-то.
"у меня есть строки с платежками". Платежка проходит по определенному контрагенту. При чем здесь "как распределить суммы"? Нужно распределить в пределах контрагента? Сортируй по дате и закрывай по порядку. Закрылось частично - фиг с ним, закроется полностью при следующей оплате. |
|||
42
catena
31.10.17
✎
08:37
|
(37)Такая ситуация вполне вероятно, потому что даже при целом распределении есть вероятность "не того" распределения и из оставшихся сумм на следующий день не сложится слово "ж...", ой, "счастье".
|
|||
43
Брудвар
31.10.17
✎
13:40
|
(42) Это уже обсуждалось. На второй день можно перераспределить за два дня.
|
|||
44
catena
31.10.17
✎
13:41
|
(43)Придется перераспределять с самого начала распределения. Не факт, что невозможность распределения вылезет именно на следующий день.
|
|||
45
d4rkmesa
31.10.17
✎
14:13
|
(5) Будь мужиком, закрывай оплаты по FIFO. По контрагенту целиком или договору, фильтр настроить не проблема. А то твой чудесный алгоритм нараспределяет, а потом комдир прибежит, какого х** отгрузки, к которым не подобралась оплата, в просрочке?
|
|||
46
h-sp
31.10.17
✎
14:17
|
(0) смысл в этом распределении? Покупатель в платежке всегда пишет назначение платежа по счету номер такой-то. Поэтому нужно привязывать к тем счетам, которые перечислены.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |