Имя: Пароль:
1C
1С v8
перебрать ТЗ в случайном порядке
0 адинэсниг1
 
05.08.13
10:36
Имеем ТЗ. Циклом нужно перебрать все строки этого ТЗ, но не подряд а в случайном порядке. Подскажите хотя бы куда копать. Или примеры кода. Заранее спасибо!
1 Godofsin
 
05.08.13
10:36
Через ГСЧ придумать можно наверное
2 Ёпрст
 
гуру
05.08.13
10:37
Цикл + ГСЧ.. усё
3 Starhan
 
05.08.13
10:37
но зачем?
4 Попытка1С
 
05.08.13
10:38
Так а надо в итоге все перебрать или как?
5 Godofsin
 
05.08.13
10:39
(3) Рандомный выбор сотрудников для премии )))))
6 Maxus43
 
05.08.13
10:39
зачем? просто интересно уже
7 адинэсниг1
 
05.08.13
10:40
(4) да, и чтобы строки не повторялись.

(3) например тест на этой платформе ну или как в (5):)
8 ДенисЧ
 
05.08.13
10:40
(5) Для увольнения :-)
9 Starhan
 
05.08.13
10:40
(5) так задача пройти все строки.
(0)
Добавляем колонку, заполняем гсч - сортируем по ней.
10 Ёпрст
 
гуру
05.08.13
10:41
+2

делаешь 2 цикла, в первом проверяешь, все ли строки выбраны,
далее через гсч в цикле выбираешь "не выбранный" номер строки в ТЗ. ставишь марке в колонку, что быбран. или в соответствие колонок, или еще куда
Наслаждаешься
11 Starhan
 
05.08.13
10:41
(9) ну и обходим уже стнадартно.
12 Maxus43
 
05.08.13
10:42
(9) +1. Самый нормальный путь
13 Попытка1С
 
05.08.13
10:42
(9) +2
14 адинэсниг1
 
05.08.13
10:42
попробую как в (9)
15 pessok
 
05.08.13
10:52
помница, когда много лет назад я увидел в ЗУПе функцию ГСЧ, я прифигел слегка :) только потом уже понял, что енто для формирования какого-то имени файла для пенсионного было нужно :)

(9) +3
16 1Сергей
 
05.08.13
10:54
так на ТКВ ответ будет?
17 m-serg74
 
05.08.13
10:56
(12) а еще лучше сортировка по Колонке с номером по ГСЧ :-)
18 адинэсниг1
 
05.08.13
11:06
Если кому нибудь понадобится:


        результат.Колонки.Добавить("ГСЧ");
        для каждого стр из результат цикл
            UID=Новый УникальныйИдентификатор();
            UID = СтрЗаменить(UID,"-","");
            Значение = "";
            Для Н=1 По СтрДлина(UID) Цикл
            Симв = Сред(UID,Н,1);
            Значение = Значение+Прав(КодСимвола(Симв),1);
            КонецЦикла;
            стр.ГСЧ=Значение;
        КонецЦикла;
        результат.Сортировать("ГСЧ возр");
19 Ёпрст
 
гуру
05.08.13
11:07
(18) извращенец..
20 Ёпрст
 
гуру
05.08.13
11:08
ГСЧ есть, нафига там гуид и еще и посимвольного его обходить ?
21 адинэсниг1
 
05.08.13
11:08
(19) Почему? :)
22 pessok
 
05.08.13
11:10
(18) вот это МОЩЬ! 0_0
23 адинэсниг1
 
05.08.13
11:10
:))
24 Ёпрст
 
гуру
05.08.13
11:10
ГенераторСлучайныхЧисел (RandomNumberGenerator)
ГенераторСлучайныхЧисел (RandomNumberGenerator)
Методы:

СлучайноеЧисло (RandomNumber)

Конструкторы:

Конструктор по умолчанию
Формирование неинициализированного объекта

Описание:

Генератор случайных чисел.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
25 pessok
 
05.08.13
11:14
МассивГСЧ = Новый Массив;
ТЗ.Колонки.Добавить("ГСЧ");

Ит = 0

Пока Ит <= ТЗ.Количество() Цикл
     Генератор = Новый ГенераторСлучайныхЧисел();
     СлЧисло = Генератор.СлучанойЧисло();
     Если МассивГСЧ.Найти(СлЧисло) = 0 Тогда
     МассивГСЧ.Добавить(СлЧило);
     Ит = Ит + 1;
     КонецЕсли;
КонецЦикла;

ТЗ.ЗагрузитьКолонку("ГСЧ", МассивГСЧ);

//как-то так, пофигуратор запускать лень, писла на коленке
26 pessok
 
05.08.13
11:15
Если МассивГСЧ.Найти(СлЧисло) = Неопределено Тогда //вроде так
27 m-serg74
 
05.08.13
11:15
чем сортировка по случайной колонке не случайный порядок?
28 pessok
 
05.08.13
11:17
(27) случайную колонку еще надо заиметь. для этого и пользуем ГСЧ.
если же сортировать по существующим колонкам, то "случайно" будет только один раз, при каждом следующем вызове уже не будет случайно
29 m-serg74
 
05.08.13
11:19
не понял меня есть к примеру есть три колонки, по ГСЧ выпадает 2, берем 2 колонку по ней делаем Сортировать, чем не случайный порядок?
30 m-serg74
 
05.08.13
11:21
а если конечно с одними и теми же данными в ТЗ надо несколько раз беспорядок делать(что то ничего в голову не приходит где это на практике можно применять) то конечно только добавление колонки
31 Мыш
 
05.08.13
11:23
Вот ведь напридумывают. Лишь бы не кодить )
32 palpetrovich
 
05.08.13
11:28
(25) прикольный способ обхода ТЗ  :)
имхо достаточно:

Генератор = Новый ГенераторСлучайныхЧисел();
ТЗ.Колонки.Добавить("ГСЧ");
Для Каждого СтрокаТЗ из ТЗ Цикл
    СтрокаТЗ.ГСЧ = Генератор.СлучайноеЧисло();
КонецЦикла
ТЗ.Сортировать("ГСЧ");
33 m-serg74
 
05.08.13
11:36
(32) он проверяет что б сл. числа не повторялись
34 palpetrovich
 
05.08.13
11:39
(33) зачем? автору это без надобности
35 m-serg74
 
05.08.13
11:49
(34) автору вообще все без надобности)
36 pessok
 
05.08.13
11:51
(32) ну дык будут ГСЧ с одинаковыми значениями. с другой стороны, nobody cares
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший