Имя: Пароль:
1C
1С v8
Как распределить сумму по нескольким строкам
,
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) смысл в этом распределении? Покупатель в платежке всегда пишет назначение платежа по счету номер такой-то. Поэтому нужно привязывать к тем счетам, которые перечислены.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.