Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Разделить период на порции

Разделить период на порции
Я
   Franchiser
 
03.04.19 - 23:49
Как разделить период примерно на равные порции.
Например , период 01.02.19 по 28.02.19.
Вариант 1
Средний размер порции ОКР(28/10 ,0) =3
Получаем периоды:
01.02-03.02 (3 дня)
04.02-06.02 (3 дня)
...
28.02-28.02 (1 день)

Вариант 2
Цел(28/10) = 2
Получаем периоды:
01.02-02.02 (2 дня)
03.02-04.02 (2 дня)
...
19.02-28.02 (11 дней)

Далее берём 55 дней
Вариант 1.
Получим деление  на периоды:
По 6 дней,
Последний период 1 день
 
 
   МихаилМ
 
1 - 04.04.19 - 01:57
нод
   Chameleon1980
 
2 - 04.04.19 - 05:03
32
   Web00001
 
3 - 04.04.19 - 06:00
(0)Продолжайте наблюдение
   Жан Пердежон
 
4 - 04.04.19 - 06:37
(0) да
   Bigbro
 
5 - 04.04.19 - 07:14
ну если 6 и 1, а также 11 и 2 можно считать "примерно равными", то норм.
но вообще задача для 8 класса средней школы, или в каком там сейчас начинают информатику преподавать?
   Franchiser
 
6 - 04.04.19 - 09:24
Ладно вы ничего не поняли.
Вариант 1 я не могу всегда применять, хотя он даёт лучшие результаты на месяце.
Например, если дней 25, то
Получается размер порции с округлением 3.
Но получается перебор.
Мне нужно получить ровно 10 порций а тут получается только 9.
   Жан Пердежон
 
7 - 04.04.19 - 09:27
(6) намекаю, в (0) ты ничего не спрашивал
   Bigbro
 
8 - 04.04.19 - 09:28
(6) так как тебя понять если ты вместо внятного формулирования задачи пишешь какую то пургу с вариантами решения непонятно чего, а потом спрашиваешь как лучше? невозможно на это ответить если не знать в чем вопрос.
и судя по приведенным примерам ты тоже исходную задачу не понимаешь
   Franchiser
 
9 - 04.04.19 - 09:31
Мне нужно разбить укащанный период (месяц, квартал и ТД) на форме на 10 равных порций для многопоточной загрузки.
Иногда хороший результат выдает вариант 1, иногда вариант 2. При количестве дней 15, 25, 35 и тд вариант 1 не вернёт 10 порций
   Bigbro
 
10 - 04.04.19 - 09:33
(9) даю подсказку - округление суммы не равно сумме округлений. иногда сильно не равно.
   Жан Пердежон
 
11 - 04.04.19 - 09:34
Вот тебе недоответ на твой недовопрос:

Размер = 28;
Порций = 10;
Р1  = Цел(Размер/Порций) = 2;
КР2 = Ост(Размер;Порций) = 8;

Итого:
КР2 отрезков размера Р1+1
(Порций-КР2) отрезков размера Р1
   Franchiser
 
12 - 04.04.19 - 09:36
Первое значение массива всегда начало периода, последнее значение - конец периода, мне нужно рассчитать  8 промежуточных значений.
   Zmich
 
13 - 04.04.19 - 09:38
Можно высчитывать среднее (округленное или целая часть) на каждом этапе. Тогда длина периодов будет примерно одинакова. Например, для случая 55 дней:
1). Окр(55/10) = 6
2). Окр((55-6)/9) = Окр(49/9) = 5
3). Окр((49-5)/8) = Окр(44/8) = 6
и т.д.
   Franchiser
 
14 - 04.04.19 - 09:39
Вот такой результат нужен:
Расчет: февраль/март
1
4
7
10
13
16
19
22
25
28
28/31
   Franchiser
 
15 - 04.04.19 - 09:42
(13) отлично, нужно попробовать)
   Bigbro
 
16 - 04.04.19 - 10:19
(13) ну вот, лишил человека возможности подумать. подсказка уже была ..
   Bigbro
 
17 - 04.04.19 - 10:21
(14) у тебя 9 периодов, а ты говорил надо 10.
или в феврале в твоей вселенной 31 день?
   Franchiser
 
18 - 04.04.19 - 10:37
(17)
1. 1-4
2. 4-7
3. 7-10
4. 10-13
5. 13-16
6. 16-19
7. 19-22
8. 22-25
9  25-28
10. 28-28
   Franchiser
 
19 - 04.04.19 - 10:37
Если март
То 
10. 28-31
   Bigbro
 
20 - 04.04.19 - 10:42
любопытный период длиной сколько? ноль дней?
во сколько раз ноль отличается от остальных периодов длиной 3 дня?
   Bigbro
 
21 - 04.04.19 - 10:44
и какое количество событий может произойти за период длиной в ноль? )
и зачем нужен такой период, если он фактически - пустой?
почему бы не добавить еще 10 или тысячу или любое другое число таких же нулевых периодов к разбиению - что это изменит?
   Franchiser
 
22 - 04.04.19 - 11:19
(21) правая граница не включается.
10. 28.02.19 00:00:00 - 28.02.19 23:59:59
   Franchiser
 
23 - 04.04.19 - 11:49
Получилось:
    // Вставить содержимое обработчика.

КоличествоПотоков = 10;    
    
ОбщееКоличество = (НачалоДня(Период.ДатаОкончания)-НачалоДня(Период.ДатаНачала))/86400+1;
Сообщить("Всего дней "+ОбщееКоличество);

ОстатокДней = ОбщееКоличество;
ОстатокПорций = КоличествоПотоков; 
ГраницаПредыдущейПорции = Период.ДатаНачала;
ОбработаноДней = 0;

Для Сч=1 по КоличествоПотоков Цикл
    
    РазмерПорции = Окр(ОстатокДней/ОстатокПорций,0);    
    
    НижняяГраница = ГраницаПредыдущейПорции;
    ВерхняяГраница =  НижняяГраница + РазмерПорции*86400;

    Если Сч=1 Тогда
        Сообщить("_ По " +ВерхняяГраница +" " +РазмерПорции);
    ИначеЕсли Сч=КоличествоПотоков Тогда    
        Сообщить("_С " + НижняяГраница  +" " +РазмерПорции);
    Иначе
        Сообщить("С " + НижняяГраница + " По " +ВерхняяГраница +" " +РазмерПорции);
    КонецЕсли;
    
    ОстатокДней = ОстатокДней - РазмерПорции; 
    ОстатокПорций = ОстатокПорций - 1;
    ГраницаПредыдущейПорции = ВерхняяГраница;
    ОбработаноДней = ОбработаноДней + РазмерПорции;    
КонецЦикла;    

Сообщить("Обработано дней "+ОбработаноДней);
   Mikeware
 
24 - 04.04.19 - 11:51
чот сразу вспомнился товарищ Брезенхем...
   Bigbro
 
25 - 04.04.19 - 12:16
а теперь попробуй для КоличествоПотоков = 11
   Franchiser
 
26 - 04.04.19 - 12:29
(25) Нормально работает для 11
   Franchiser
 
27 - 04.04.19 - 12:29
Период в обработке кратный месяцу


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.