Вход | Регистрация
 

Случайные цвета в 1с

Случайные цвета в 1с
Я
   sergqwert
 
06.12.21 - 21:06
Имеется справочник "случайные цвета" с реквизитом ЦветXML. Каждый элемент справочника содержит в себе цвет в RGB формате (255, 255, 255). Повторяться цвета элементов справочника не должны.
Имеется документ "случайно выбранный цвет". В нем реквизит, ссылка на справочник "случайные цвета".
Как реализовать заполнение 100 000 таких документов, в случайном порядке?
Как реализовать отчёт, который покажет абсолютное и % соотношение цветов, встречающихся в документе?
Абсолютное - просто количество считается, %: если 1000 красных документов, то это 1% от 100000 документов (1 000 / 100 000 * 100 = 1%).

Заполнение документа:
ГСЧ = Новый ГенераторСлучайныхЧисел(255);

Для Сч = 1 По 100000 Цикл
СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,1000);
Документ1 = Документы.СлучайноВыбранныйЦвет.СоздатьДокумент();
Документ1.Дата = ТекущаяДата();
Документ1.ВыбранныйЦвет = Справочники.СлучайныеЦвета.НайтиПоНаименованию("Цвет");
Документ1.Записать();
КонецЦикла;

Выдает только один цвет1, а их в справочнике 5: цвет1, цвет2. цвет3, цвет4, цвет 5.

отчет на СКД:
ВЫБРАТЬ
СлучайноВыбранныйЦвет.Ссылка КАК Ссылка,
СлучайноВыбранныйЦвет.ВыбранныйЦвет.ЦветXML КАК ВыбранныйЦвет,
СУММА(1) КАК Количество
ИЗ
Документ.СлучайноВыбранныйЦвет КАК СлучайноВыбранныйЦвет

СГРУППИРОВАТЬ ПО
СлучайноВыбранныйЦвет.Ссылка
   МимохожийОднако
 
1 - 06.12.21 - 21:57
Т.е в реквизит ВыбранныйЦвет записываешь один и тот же элемент с наименованием "Цвет"?
   Asmody
 
2 - 06.12.21 - 21:57
(0) "100 000 таких документов, в случайном порядке" - заполняй последовательно, потом выбирай случайный
   H A D G E H O G s
 
3 - 06.12.21 - 22:03
Мне одному это кажется бредом шизоида?
   Смотрящий
 
4 - 06.12.21 - 22:07
Не один ты нормальный
   mistеr
 
5 - 07.12.21 - 00:17
(3) Обычная учебная задача недалекого препода.
   mistеr
 
6 - 07.12.21 - 00:22
(0) Насколько я понял, основная проблема у тебя — как преобразовать случайное число в элемент справочника. Для этого нужно пронумеровать справочник цветов последовательно и брать элемент по коду.

Если препод упрется, что нельзя менять структуру метаданных, то придется использовать запрос с ВЫБРАТЬ ПЕРВЫЕ N, где N случайное число.
   azernot
 
7 - 07.12.21 - 00:24
Получить массив всех цветов мз справочника, и далее получать случайный элемент массива через случайное число от нуля, до размера массива-1
   ИУБиПовиц
 
8 - 07.12.21 - 08:22
>>СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,1000);
Почему до 1000?, все цвета в эту последовательность не влезут. Нужно либо до больше либо три переменных, для RGB отдельно.
>>Документ1.ВыбранныйЦвет = Справочники.СлучайныеЦвета.НайтиПоНаименованию("Цвет");
Ну правильно:) прервый цвет и находит.
Нужно либо преобразовывать случайное число в ЦВЕт и искать по реквизиту цвет (хз в запросе можно отобрать, никогда не делал такого:))
либо преобразовывать ЦВЕТ в составляющие и по ним отбор делать . Ну как то так.
   PLUT
 
9 - 07.12.21 - 10:09
+ (2) 

> Как реализовать заполнение 100 000 таких документов, в случайном порядке?

заполнить последовательно документы и случайным образом установить НомерДок :)
   PLUT
 
10 - 07.12.21 - 10:17
(9) невнимательно условие из (0) прочитал...

последовательно справочник случайных цветов заполняется, чтобы цвета элементов не повторялись. Код справочника числовой

а дальше простой цЫкл для создания 100 тыс документов
и внутре цЫкла можно запросом или 

НовыйДокумент.ВыбранныйЦвет = Справочники.СлучайныеЦвета.НайтиПоКоду(ГСЧ.СлучайноеЧисло(0, ВсегоСлучайныхЦветов));
   УдавВПопугаях
 
11 - 07.12.21 - 10:30
надо сначала пронумеровать цвета из справочника, метеадныее трогать необязательно.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номер");
ТЗ.Колонки.Добавить("Ссылка");

Н = 1;

Выборка = Справочники.Цввета.Выбрать();
Пока Выборка.Следующий() Цикл
Новая = ТЗ.Добавить();
Новая.Номер = Н;
Новая.Ссылка = Выборка.Ссылка;
Н = Н + 1;
КонецЦикла;

Для Сч = 1 По 100000 Цикл
СлучайныйЦифра = ГСЧ.СлучайноеЧисло(0, Н);
Документ1 = Документы.СлучайноВыбранныйЦвет.СоздатьДокумент();
Документ1.Дата = ТекущаяДата();
Документ1.ВыбранныйЦвет = ТЗ.Найти(СлучайныйцЦифра, "Номер").Ссылка;
Документ1.Записать();
КонецЦикла;
   УдавВПопугаях
 
12 - 07.12.21 - 10:31
пронумеровать можно и запросом к справочнику с АвтономерЗаписи, но генератору нужно верхний предел передать, известен он будет в результате запроса
   arsik
 
13 - 07.12.21 - 10:37
(10) Это долго. Нужно просто все цвета в массив запихнуть.
А потом
максИндексВМассиве = мЦветов.Количество()-1;
СлучайныйЦвет = мЦветов[ГСЧ.СлучайноеЧисло(0, максИндексВМассиве)];

   УдавВПопугаях
 
14 - 07.12.21 - 10:40
пусть массив, непринципиально, ему код надо написать, сам врядли понимает что происходит
отчет - на скд, совсем ерунда
   fisher
 
15 - 07.12.21 - 12:26
Я бы генерил псевдослучайное число в пределах 16581375, раскладывал его на RGB, искал такой в справочнике, если нет - создавал новый элемент. Отчет тоже тривиальный, не понимаю в чем затык.
   fisher
 
16 - 07.12.21 - 12:34
Получившийся номер оттенка можно тупо в качестве номера элемента справочника и использовать. Искать удобно будет.
   Kassern
 
17 - 07.12.21 - 12:44
(0) Имеется справочник "случайные цвета" - какое-то странное название справочника. Я понимаю, если бы там были элементы - определенные диапазоны, а цвет из диапазона уже получался бы случайным образом. В вашем же случае - цвета случайные лишь в документах, в справочнике просто перечень цветов.

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