|
Случайные цвета в 1с | ☑ | ||
---|---|---|---|---|
0
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
|
Т.е в реквизит ВыбранныйЦвет записываешь один и тот же элемент с наименованием "Цвет"?
|
|||
2
Asmody
06.12.21
✎
21:57
|
(0) "100 000 таких документов, в случайном порядке" - заполняй последовательно, потом выбирай случайный
|
|||
3
H A D G E H O G s
06.12.21
✎
22:03
|
Мне одному это кажется бредом шизоида?
|
|||
4
Смотрящий
06.12.21
✎
22:07
|
Не один ты нормальный
|
|||
5
mistеr
07.12.21
✎
00:17
|
(3) Обычная учебная задача недалекого препода.
|
|||
6
mistеr
07.12.21
✎
00:22
|
(0) Насколько я понял, основная проблема у тебя — как преобразовать случайное число в элемент справочника. Для этого нужно пронумеровать справочник цветов последовательно и брать элемент по коду.
Если препод упрется, что нельзя менять структуру метаданных, то придется использовать запрос с ВЫБРАТЬ ПЕРВЫЕ N, где N случайное число. |
|||
7
azernot
07.12.21
✎
00:24
|
Получить массив всех цветов мз справочника, и далее получать случайный элемент массива через случайное число от нуля, до размера массива-1
|
|||
8
ИУБиПовиц
07.12.21
✎
08:22
|
>>СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,1000);
Почему до 1000?, все цвета в эту последовательность не влезут. Нужно либо до больше либо три переменных, для RGB отдельно. >>Документ1.ВыбранныйЦвет = Справочники.СлучайныеЦвета.НайтиПоНаименованию("Цвет"); Ну правильно:) прервый цвет и находит. Нужно либо преобразовывать случайное число в ЦВЕт и искать по реквизиту цвет (хз в запросе можно отобрать, никогда не делал такого:)) либо преобразовывать ЦВЕТ в составляющие и по ним отбор делать . Ну как то так. |
|||
9
PLUT
07.12.21
✎
10:09
|
+ (2)
> Как реализовать заполнение 100 000 таких документов, в случайном порядке? заполнить последовательно документы и случайным образом установить НомерДок :) |
|||
10
PLUT
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
|
пронумеровать можно и запросом к справочнику с АвтономерЗаписи, но генератору нужно верхний предел передать, известен он будет в результате запроса
|
|||
13
arsik
гуру
07.12.21
✎
10:37
|
(10) Это долго. Нужно просто все цвета в массив запихнуть.
А потом максИндексВМассиве = мЦветов.Количество()-1;
|
|||
14
УдавВПопугаях
07.12.21
✎
10:40
|
пусть массив, непринципиально, ему код надо написать, сам врядли понимает что происходит
отчет - на скд, совсем ерунда |
|||
15
fisher
07.12.21
✎
12:26
|
Я бы генерил псевдослучайное число в пределах 16581375, раскладывал его на RGB, искал такой в справочнике, если нет - создавал новый элемент. Отчет тоже тривиальный, не понимаю в чем затык.
|
|||
16
fisher
07.12.21
✎
12:34
|
Получившийся номер оттенка можно тупо в качестве номера элемента справочника и использовать. Искать удобно будет.
|
|||
17
Kassern
07.12.21
✎
12:44
|
(0) Имеется справочник "случайные цвета" - какое-то странное название справочника. Я понимаю, если бы там были элементы - определенные диапазоны, а цвет из диапазона уже получался бы случайным образом. В вашем же случае - цвета случайные лишь в документах, в справочнике просто перечень цветов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |