Имя: Пароль:
1C
1С v8
Оптимальный алгоритм разбиения МегаТЗ на МелкиеТЗ по условию
0 aleks-id
 
25.10.11
13:45
Коллеги, подскажите оптимальный алгоритм разбиения ТЗ на несколько.
в ТЗ примерно следующие данные:
ДАТА            ТОЧКА   СУММА
01.11.2010    "001"    6 000
03.11.2010    "001"    1 000
04.11.2010    "001"    3 000
05.11.2010    "001"    2 000
06.11.2010    "001"    9 000
02.11.2010    "002"    4 000
03.11.2010    "002"    4 000
04.11.2010    "002"    1 000
06.11.2010    "002"    4 000
07.11.2010    "002"    6 000
01.11.2010    "003"    7 000
02.11.2010    "003"    1 000
03.11.2010    "003"    4 000
04.11.2010    "003"    -3 000
06.11.2010    "003"    7 000
надо разбить таблицу на более мелкие ТЗ (для каждой ТОЧКИ своя ТЗ) в которой для каждой ТОЧКИ условие СУММЫ по строкам не будет превышать например 10 тыс.руб
пока придумал тупо обходить в цикле, но может у кого есть другой вариант?
1 Злопчинский
 
25.10.11
13:49
NS выкладывал алгоритм рекурсивный, я его малость причесал, подправил использую для разбиеня по п аллетам.
а так можешь попробовать http://infostart.ru/public/14526/ я там давно тупо сделал, не факт что работает 100% верно
2 Ахиллес
 
25.10.11
13:50
Накой ляд тут рекурсия? Отбор строк + цикл.
3 aleks-id
 
25.10.11
13:52
рекурсия в данном случае упростит алгоритм но отожрет больше памяти :(
4 aleks-id
 
25.10.11
13:52
я вот думаю а запросом не получится ли ее причесать??
5 Ахиллес
 
25.10.11
13:54
Чего тут ещё упрощать то?
1. Свернуть по условию
2. Цикл по условию с "НайтиСтроки(УсловиеОтбора)"
3. Цикл с созданием ТЗ по точкам.
4. ВСЁ!
6 aleks-id
 
25.10.11
13:56
(5) тут даже 2. не нужно таблица упорядочена по точкам и датам.
7 Reset
 
25.10.11
13:56
Такого рода темы периодически создаются, со знатными холиварами, перебор vs отбор vs запросы vs прочие построители.
Имхо для каждого конкретного случая может быть оптимален разный вариант.
Имхо2: если количество строчек мало (до нескольких тысяч), не париться вообще.
Если количество велико, разбиение предусмотреть ДО создания мегамонстра (ну или параллельно с его созданием)
8 aleks-id
 
25.10.11
13:58
(7) строчек не более 10 тысяч. разбиение раньше врятли ускорят и оптимизируют - один запрос к внешней базе отработает быстрее чем 100 запросов по каждой точке
9 Ахиллес
 
25.10.11
14:00
(6) Тогда чего ты вообще создал тему? Один цикл, внутри создание ТЗ. О чем вообще тут говорить?
10 hhhh
 
25.10.11
14:00
(5) и как ты представляешь себе условие

"СУММЫ по строкам не будет превышать например 10 тыс.руб
"?
11 Reset
 
25.10.11
14:01
(8) Ну и не парться тогда, простой перебор подряд с контролем суммы
12 Ахиллес
 
25.10.11
14:01
(10) В новую ТЗ добавляются строки пока итог по "Сумма" меньше 10000.
13 azernot
 
25.10.11
14:21
Запросом из ВТ, с условием и с итогами по нужному реквизиту, далее обход по группировкам с созданием соответсвующий миниТЗ по каждой группировке.
14 Злопчинский
 
27.10.11
21:56
...хм... речь идет не о том, чтобы разбить - это просто, речь идет о том, чтобы разбить с минимальными "отклонениями".. можно кучу на 3 подкучки разбить если тупо, а можно и на 2.. речь идет об алгоритме который гарантированно дает минимальное количество кучек с минимальным отклонением...
15 Злопчинский
 
27.10.11
21:57
..в ином случае - задач неинтересна...
16 Злопчинский
 
27.10.11
21:57
.. хотя я в матеематике не силен, возможно что тупой цикл с перебором строк ТЗ даст наилучшее разбиение...?
17 Buster007
 
27.10.11
22:43
ИМХО, упорядочил по периоду и отборов не надо никаких делать... тупо цикл 1 делай... а оператор Продолжить вроде быстро работает...
18 Buster007
 
27.10.11
22:44
в смысле по Точкам )