Есть некий регистр сведений (изм. Параметр1, рес. Кратность, КратностьЗначение).
Имеет следующие данные:
Вид1, 30 минут., 0.5
Вид2, 20 минут., 0.33

Необходимо заполнить список выбора на форме в виде:
0 мин. (0)
30 мин. (0,5)
1 ч. (1)
1 ч. 30 мин. (1,5)
2 ч. (2)
2 ч. 30 мин. (2,5)
...
12 ч. 30 мин.

А если вид2 то:
0 мин. (0)
20 мин. (0,33)
40 мин. (0,66)
1 ч. (1)
1 ч. 20 мин. (1,33)
...
12 ч. 40 мин.

Помогите придумать алгоритм создания списка выбора. Что-то не клеится у меня :(
---
в (9) забыл отсортировать последнюю часть запроса )

Хотя конечно проще так:

```1c
    кратность = 25;
    Для ФФ = 0 По 1000 Цикл
    минут = ФФ * кратность;
    часы = Цел(минут/60);
    минуты = минут % 60;
    сп.Добавить(Формат(минут/60,"ЧЦ=10; ЧДЦ=2")+"("+часы+" ч. "+минуты+"мин)");
    КонецЦикла;
```

и получим
(0 ч. 0мин)
0,42(0 ч. 25мин)
0,83(0 ч. 50мин)
1,25(1 ч. 15мин)
1,67(1 ч. 40мин)
2,08(2 ч. 5мин)
2,50(2 ч. 30мин)
...
415,83(415 ч. 50мин)
416,25(416 ч. 15мин)
416,67(416 ч. 40мин)
---
ditp, вот отформатированный код:

```1c
    Кратность = СтруктураДанных.ВремяЗначение;
    МаксимумЧасов = СтруктураДанных.МаксимумЧасов;
    Если Не МаксимумЧасов Тогда
    МаксимумЧасов = 8;
    КонецЕсли;

    Инд = 0;
    Часов = 0;
    Пока Часов < МаксимумЧасов Цикл

    КоличествоЗначений = Инд * Кратность;
    Часов = Цел(КоличествоЗначений / 60);
    Минут = КоличествоЗначений % 60;
    Значение = КоличествоЗначений / 60;

    ТекущееПредставление = " + Часов + " ч. " + Минут + " мин. " + "(" + Формат(Значение, "ЧЦ=10; ЧДЦ=2") + ")";

    СписокВыбора.Добавить(Значение, ТекущееПредставление);

    Инд = Инд + 1;

    КонецЦикла;
```
---
dj_serega, а в чём проблема-то?
---
dj_serega, список выбора это
```1c
    ТвойСписок = Новый СписокЗначений;
    Если НужныйВид = Вид1 Тогда
    ТекущаяДата = НачалоДня(ТекущаяДата());
    Пока ТекущаяДата < (КонецДня(ТекущаяДата())+1 - МинутыВид1*60) Цикл
    ТвойСписок.Добавить(Время(ТекущаяДата));
    ТекущаяДата = ТекущаяДата + МинутыВид1*60;
    КонецЦикла;
    КонецЕсли;
```
---
а если с вознаграждением? :)
---
Тебе парсинг ресурса Кратность нужен или как циклом пройтись Пока ИтоговоеЗначение < 760*60 (12 часов 40 минут в секундах)?
---
mymyka, У меня есть только значение регистра.
Нужно набросать для пользователя список выбора. На текущий момент максимум 13 часов. Но может быть изменен (допустим max = 8 часов).

(4) akita, Не думается =)

вот что получилось сейчас. Думаю как победить 20 мин, 40 мин, 1 ч., 1ч. 20 мин ...

Дело в том, что (возможно) захотят добавить еще кратность 10 минут. Поэтому хочу универсально сделать.
---
КратностьЗначение всегда берется от часа? В Кратность строковое значение, всегда в минутах? Имхо, регистр построен неудачно. Чем просто число секунд в интервале не устроило?Или число и единица измерения, зачем вообще эта КратностьЗначение?
Если в Кратность могут быть как минуты, так и часы(секунды?) то надо парсить строку. Отдельно получать число и единицу измерения(сек, часы, минуты).
Затем переводить в количество секунд и в цикле умножать.
Если же КратностьЗначение всегда от часа, то Кратность можно вообще игноририровать.
Час перевести в минуты(60), вычислить кратность, округлить,умножить на 60 сек и опять же получить интервал в цикле.
Как перевести 5400 секунд в 1 час 30 минут, надеюсь, не надо объяснять?
---
Вместо
```1c
    Время(ТекущаяДата)
```
 запихни что тебе нужно.
---
Чот меня несет:

```1c
    сп = Новый СписокЗначений;
    Запрос =Новый Запрос("ВЫБРАТЬ
    | 1 КАК Вид,
    | 20 КАК Период
    |ПОМЕСТИТЬ тРегистр
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | 2,
    | 30
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | 3,
    | 15
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | 0 КАК Цифра
    |ПОМЕСТИТЬ тЦифры
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 1
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 2
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 3
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 4
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 5
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 6
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 7
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 8
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    | 9
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | 10 * т1.Цифра + т0.Цифра КАК Номер
    |ПОМЕСТИТЬ тЧисла
    |ИЗ
    | тЦифры КАК т0,
    | тЦифры КАК т1
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВЫРАЗИТЬ(тРегистр.Период * тЧисла.Номер / 60 КАК ЧИСЛО(10, 2)) КАК Знач,
    | тЧисла.Номер,
    | ВЫРАЗИТЬ(тРегистр.Период * тЧисла.Номер / 60 - 0.49 КАК ЧИСЛО(10, 0)) КАК Часы,
    | тРегистр.Период * тЧисла.Номер - 60 * (ВЫРАЗИТЬ(тРегистр.Период * тЧисла.Номер / 60 - 0.49 КАК ЧИСЛО(10, 0))) КАК Минуты
    |ИЗ
    | тРегистр КАК тРегистр,
    | тЧисла КАК тЧисла
    |ГДЕ
    | тРегистр.Вид = &Парам");
    Запрос.УстановитьПараметр("Парам", 2);
    выб = Запрос.Выполнить().Выбрать();
    Пока выб.Следующий() Цикл
    сп.Добавить(Формат(выб.Знач,"ЧЦ=5; ЧДЦ=2")+" ("+?(выб.Часы=0,", "+выб.Часы+" ч. ")+Формат(выб.Минуты,"ЧЦ=2; ЧДЦ=; ЧН=; ЧВН=")+" мин.)"
    КонецЦикла;
```
---
в (9) забыл отсортировать последнюю часть запроса )

Хотя конечно проще так:

```1c
    кратность = 25;
    Для ФФ = 0 По 1000 Цикл
    минут = ФФ * кратность;
    часы = Цел(минут/60);
    минуты = минут % 60;
    сп.Добавить(Формат(минут/60,"ЧЦ=10; ЧДЦ=2")+"("+часы+" ч. "+минуты+"мин)");
    КонецЦикла;
```

и получим
(0 ч. 0мин)
0,42(0 ч. 25мин)
0,83(0 ч. 50мин)
1,25(1 ч. 15мин)
1,67(1 ч. 40мин)
2,08(2 ч. 5мин)
2,50(2 ч. 30мин)
...
415,83(415 ч. 50мин)
416,25(416 ч. 15мин)
416,67(416 ч. 40мин)
---
ditp, Спасибо. То что нужно. Немного подправлю для себя и будет АГОНЬ! :)

У меня тоже получилось, но строк не 7 а ~30. Так что выкладывать не буду =)
---
ditp, вот отформатированный код:

```1c
    Кратность = СтруктураДанных.ВремяЗначение;
    МаксимумЧасов = СтруктураДанных.МаксимумЧасов;
    Если Не МаксимумЧасов Тогда
    МаксимумЧасов = 8;
    КонецЕсли;

    Инд = 0;
    Часов = 0;
    Пока Часов < МаксимумЧасов Цикл

    КоличествоЗначений = Инд * Кратность;
    Часов = Цел(КоличествоЗначений / 60);
    Минут = КоличествоЗначений % 60;
    Значение = КоличествоЗначений / 60;

    ТекущееПредставление = " + Часов + " ч. " + Минут + " мин. " + "(" + Формат(Значение, "ЧЦ=10; ЧДЦ=2") + ")";

    СписокВыбора.Добавить(Значение, ТекущееПредставление);

    Инд = Инд + 1;

    КонецЦикла;
```
---
Стоило писать код только...