Имя: Пароль:
1C
1С v8
Заполнение данных справочника с помощью случайных чисел
0 Валидатор
 
21.10.12
12:28
Как заполнить данные справочника случайными числами программно?
1 ДенисЧ
 
21.10.12
12:31
ЛУчше всего для этого использовать генератор случайных чисел. Ваш КО
2 Капитан О
 
21.10.12
12:38
&НаКлиенте
Процедура ЗаполнитьСлучайно(Команда)
   Если Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да Тогда
       СлучайноЗаполнить();
   КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура СлучайноЗаполнить()
   док=РеквизитФормыВЗначение("Объект");
   СерверныйМодуль.ЗаполнитьСлучайно(док);
   ЗначениеВРеквизитФормы(док, "Объект");
КонецПроцедуры
3 Валидатор
 
21.10.12
12:39
http://pikucha.ru/i9mAe
вот че получается, и форма у меня обычная
4 Капитан О
 
21.10.12
12:39
а вот тут мы видим запрос в цикле. я знаю, переделывать лениво

Процедура ЗаполнитьСлучайно(док) Экспорт
   ГСЧ=Новый ГенераторСлучайныхЧисел;
   М=Новый Массив;
   док.Товары.Очистить();
   Для й=1 По ГСЧ.СлучайноеЧисло(1, 12) Цикл
       М=док.Товары.ВыгрузитьКолонку("Номенклатура");
       НоваяСтрока=док.Товары.Добавить();
       ном=ПолучитьСлучайнуюНоменклатуру(М);
       Если ном.Пустая() Тогда
           Прервать;
       КонецЕсли;
       НоваяСтрока.Номенклатура=ном;
       НоваяСтрока.Количество=ГСЧ.СлучайноеЧисло(1, 200);
       НоваяСтрока.Цена=ГСЧ.СлучайноеЧисло(1, 200);
       НоваяСтрока.Стоимость=НоваяСтрока.Количество*НоваяСтрока.Цена;
       Если ТипЗнч(док)=Тип("ДокументОбъект.ПриходнаяНакладная") Тогда
           НоваяСтрока.СрокГодности=НачалоМесяца(ДобавитьМесяц(док.Дата, ГСЧ.СлучайноеЧисло(1, 24)));
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Функция ПолучитьСлучайнуюНоменклатуру(Исключаемые=0) Экспорт
   ГСЧ=Новый ГенераторСлучайныхЧисел;
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |    (НЕ Номенклатура.Ссылка В (&Исключение) ИЛИ &Исключение=0)
   |    И НЕ Номенклатура.ПометкаУдаления";
   Запрос.УстановитьПараметр("Исключение", Исключаемые);
   Результат=Запрос.Выполнить().Выгрузить();
   
   Если Результат.Количество()=0 Тогда
       Возврат Справочники.Номенклатура.ПустаяСсылка();
   Иначе
       Возврат Результат[ГСЧ.СлучайноеЧисло(0, Результат.Количество()-1)].Ссылка;
   КонецЕсли;
КонецФункции
5 Wobland
 
21.10.12
12:40
(3) вот ты сейчас это зачем показал?
6 Валидатор
 
21.10.12
12:41
(5) затем, что заполняется одними данными, хоть я и ввожу цикл:
   Для Счет = 1 По ВводимоеПользователемЧисло Цикл    
       ГСЧ = Новый ГенераторСлучайныхЧисел(255);
       Рандом = ГСЧ.СлучайноеЧисло(0,1000);
       Справочник1 = Справочники.С1.СоздатьЭлемент();
       Справочник1.Наименование = Рандом;
       ТабличнаяЧастьСправочника1 = Справочник1.Детали;
       НоваяСтрокаТЧ = ТабличнаяЧастьСправочника1.Добавить();
       НоваяСтрокаТч.Количество = Рандом;
       НоваяСтрокаТЧ2 = ТабличнаяЧастьСправочника1.Добавить();
       НоваяСтрокаТч2.Количество = Рандом;
       Справочник1.Записать();
   КонецЦикла;
7 ДенисЧ
 
21.10.12
12:42
(6) конструктор ГСЧ вынеси за цикл
8 Валидатор
 
21.10.12
12:43
(7) тоже самое получается, пробовал
9 Wobland
 
21.10.12
12:43
(6) сказать почему? у тебя ГСЧ инициализируется одним и тем же каждый раз
10 Wobland
 
21.10.12
12:44
машина не может сделать случайное число, она умеет только _псевдо_случайные. почитай на досуге
11 Валидатор
 
21.10.12
12:45
(9)  и как мне сделать чтоб числа всегда были рахзные?
12 Живой Ископаемый
 
21.10.12
12:46
зачем?
13 Wobland
 
21.10.12
12:46
(11) >ГСЧ = Новый ГенераторСлучайныхЧисел(255)
а что ты имел в виду под 255?
14 Wobland
 
21.10.12
12:46
(12) он уже запрашивал готовую обработку по заполнению справочника мусором. не нашёл ;)
15 Валидатор
 
21.10.12
12:47
(13) начальное значение = 255 к примеру я имел ввиду
16 Живой Ископаемый
 
21.10.12
12:47
2(14) Она есть на ИТС, зачем ее искать и спрашивать?
Но зачем именно мусором?
17 Wobland
 
21.10.12
12:47
(15) на зачем оно?
18 Wobland
 
21.10.12
12:48
(16) как называется? тестовые данные человек генерит
19 Валидатор
 
21.10.12
12:48
(17) не понял вопроса
20 Валидатор
 
21.10.12
12:48
и у меня нет доступа к итсу
21 Wobland
 
21.10.12
12:48
(19) почему 255? для чего служит параметр в конструкторе?
22 Валидатор
 
21.10.12
12:50
(21) ну можно 1 поставить:
ачальноеЧисло = 1;
     ГСЧ = Новый ГенераторСлучайныхЧисел(НачальноеЧисло);
       Рандом = ГСЧ.СлучайноеЧисло(0,1000);

толку больше не будет от этого
23 Wobland
 
21.10.12
12:50
плин, заставил немолодого в СП лазить..
давай, запости сюда кусок из СП про этот самый параметр
24 Живой Ископаемый
 
21.10.12
12:51
2(18) Отлично... чем с точки зрения этой задачи
элементы справочника у которых код и наименование имеют такой вид:
464 порпорпорпор
809090 sdvbpkcsd
98723 ррорлол osrfg
более ценны чем те, которые имею вид
464 ЭлементСпраовчника464
465 ЭлементСпраовчника465
466 ЭлементСпраовчника466

?

А для последнего на ИТС обработка точно есть, называется что-то там КонфиденциальныхДанных
25 Валидатор
 
21.10.12
12:51
ГенераторСлучайныхЧисел.Конструктор по умолчанию (RandomNumberGenerator.Default constructor)
ГенераторСлучайныхЧисел (RandomNumberGenerator)
Конструктор по умолчанию
Синтаксис:

Новый ГенераторСлучайныхЧисел(<НачальноеЧисло>)
Параметры:

<НачальноеЧисло> (необязательный)

Тип: Число.
Начальное число, которым инициализируется генератор случайных чисел.
Описание:

Генератор случайных чисел инициализируется начальным числом из параметра.
Последовательность случайных чисел для одного и того же начального числа будет одинакова.
26 Wobland
 
21.10.12
12:52
(24) мне пофих, это у автора лабораторная
27 Валидатор
 
21.10.12
12:52
(24) с чего ты взял что они более ценны? мне нужно забивать различными данными, и не важно какими
28 Wobland
 
21.10.12
12:52
(25) так. последнюю строку разжевать?
29 Валидатор
 
21.10.12
12:52
(28) то есть не вводим начальное число при создании ГСЧ?
30 Валидатор
 
21.10.12
12:53
ГСЧ = Новый ГенераторСлучайныхЧисел();
   Рандом = ГСЧ.СлучайноеЧисло(0,1000);
все равно одними и теми же данными забивает
31 Wobland
 
21.10.12
12:53
(29) то есть готовый код, любезно предоставленный тебе в самом начале, ты даже не посмотрел?
32 maip1
 
21.10.12
12:53
33 Живой Ископаемый
 
21.10.12
12:53
2(27)
Тогда просто создай элементы справочника. Наименования у них будут пыстыми, код будет автоинкрементирован, и потом ты на этот справочник натравишь упомянутую обработку и получишь аккуратные данные.
34 Wobland
 
21.10.12
12:54
(30) не верю
35 Валидатор
 
21.10.12
12:54
(31) где управляемое приложение?
36 Wobland
 
21.10.12
12:54
+(34) весь код покажи
(35) да, где управляемое
37 Валидатор
 
21.10.12
12:54
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ВводимоеПользователемЧисло = ВводимоеЧисло;
   Если ВводимоеПользователемЧисло < 0 Тогда
       Сообщить("Введите число больше 0");
       Возврат;
   КонецЕсли;
   
   Если ВводимоеПользователемЧисло  > 200 Тогда
       Сообщить("Введите число меньше 200");
       Возврат;
   КонецЕсли;
   ГСЧ = Новый ГенераторСлучайныхЧисел();
   Рандом = ГСЧ.СлучайноеЧисло(0,1000);
   
   
   Для Счет = 1 По ВводимоеПользователемЧисло Цикл    
       Справочник1 = Справочники.С1.СоздатьЭлемент();
       Справочник1.Наименование = Рандом;
       ТабличнаяЧастьСправочника1 = Справочник1.Детали;
       НоваяСтрокаТЧ = ТабличнаяЧастьСправочника1.Добавить();
       НоваяСтрокаТч.Количество = Рандом;
       НоваяСтрокаТЧ2 = ТабличнаяЧастьСправочника1.Добавить();
       НоваяСтрокаТч2.Количество = Рандом;
       Справочник1.Записать();
   КонецЦикла;
   
   Сообщить("Данные были загружены");
   
КонецПроцедуры
38 Wobland
 
21.10.12
12:55
(37) взял одно случайное число и пихаешь его куда-то в цикле
39 Живой Ископаемый
 
21.10.12
12:56
Для случайных числе. Можно э... :) Поставить 17-й релиз. Получать разницу в миллисекундах между двумя какими-то моментами времени в миллисекундах до и после выполнения какой-нибудь фигни. :)
40 Wobland
 
21.10.12
12:56
(39) а что такого в 17м релизе? 8.2.17 имеется в виду? уже вышла?
41 Валидатор
 
21.10.12
12:57
(37) можно засунуть в цикл этот констурктор ГСЧ, по идеи разные должны быть значения, но нет, все опять одинаково
42 Wobland
 
21.10.12
12:57
+(40) я миллисекунды до этого как-то скриптово получал
43 Wobland
 
21.10.12
12:57
(41) засунь ГСЧ.СлучайноеЧисло() и не морочь нам голову
44 Wobland
 
21.10.12
12:57
(43) в цикл засунь
45 Wobland
 
21.10.12
12:58
опять полсотни постов ни о чём...
46 Валидатор
 
21.10.12
12:58
все, gj, работает
47 Wobland
 
21.10.12
12:59
(46) не за что
48 Валидатор
 
21.10.12
13:00
спс
49 Живой Ископаемый
 
21.10.12
13:01
2(40) Да. тестовая.. Там можно получить количество миллисекунд прошедших с начала эпохи.
50 Classic
 
21.10.12
14:21
Как всегда правильный ответ в первой десятке постов