Имя: Пароль:
1C
 
Как упростить генерацию ГосНомераМашины
, ,
0 Antoha18rus
 
26.02.20
21:52
Можно ли как-то проще сделать генерацию гос.номера?

Процедура Сгенерироать(Команда)
Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
ГСЧ = Новый ГенераторСлучайныхЧисел();
Длина = ГСЧ.СлучайноеЧисло(1, 21);
Сч = 1;
Пока Сч<=Длина Цикл
     ТекСимвол = Сред(Строка, Сч, 1);
     Сч = Сч+1;
КонецЦикла;

Строка2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
ГСЧ2 = Новый ГенераторСлучайныхЧисел();
Длина2 = ГСЧ2.СлучайноеЧисло(1, 21);
Сч2 = 1;
Пока Сч2<=Длина2 Цикл
     ТекСимвол2 = Сред(Строка2, Сч, 2);
     Сч2 = Сч+1;
КонецЦикла;


     ГСС1 = Новый ГенераторСлучайныхЧисел();
    Длина1 = ГСЧ.СлучайноеЧисло(001, 999);

Предупреждение(ТекСимвол+Длина1+ТекСимвол2);
КонецПроцедуры
1 mikecool
 
26.02.20
22:03
а где же мой гений дарит вам?
2 Ненавижу 1С
 
гуру
26.02.20
22:09
Что это за бред?
3 Builder
 
26.02.20
22:09
Мне кажется или в госномерах очень сильно ограничен набор букв?
Используются только совпадающие по начертанию с русскими.
4 DES
 
26.02.20
22:09
Используй Символ(Код) например
5 palsergeich
 
26.02.20
22:10
Есть подозрения что результат ГСЧ 1 и ГСЧ2 будет постоянно одинаков.
По крайней мере раньше в платформе была такая багуля
6 palsergeich
 
26.02.20
22:12
Ибо ГСЧ завязан на время и в пределах секунды ГСч с одинаковой инициацией выдавал одинаковый результат)
7 Garykom
 
гуру
26.02.20
22:12
Это новое поколение Y "программистов" или кто из старичков троллит?
Ну пипец же код пишет глазам больно.
8 vde69
 
26.02.20
22:13
ниже самый короткий способ, только нужны специальные права

Функция НовыйНомер()
Возврат = Новый HTTML("gbdd.ru").GetNubberToCach("1000$");
КонецФункции
9 mishaPH
 
модератор
26.02.20
22:22
(2) для ВСД видимо
10 Builder
 
26.02.20
23:27
(9) ВСД - Вегетососудистая дистония?
11 palsergeich
 
27.02.20
00:19
1) все буквы в номере РФ - буквы русского алфавита, имеющие схожее написание в латинице. Но это русская раскладка!!!!.
2) с высокой долей вероятности 1 и 2 символ будут всегда совпадать ( не любят разрабы такие вещи фиксить )
3) формат номера x999xxyyy генератору до этого далеко.
Где yyy регион. Может быть 2, а может и 3 цифры, но не все из множества, причем первая цифра может быть 0.
Вместо цикла до нужной буквы используй функцию Сред
В общем поделию из (0) до генератора ещё как до луны.
12 Garykom
 
гуру
27.02.20
00:21
13 palsergeich
 
27.02.20
00:26
Ахахаха, я вбил код автора.
ГСЧ по прежднему генерирует одно и тоже. аффтар по коду сделал сдвиг)
14 Garykom
 
гуру
27.02.20
00:26
(11) >Вместо цикла до нужной буквы используй функцию Сред

МассивСимволов = Новый Массив;
МассивСимволов .Добавить("А");
МассивСимволов .Добавить("В");
МассивСимволов .Добавить("С");
и т.д.

Намного проще чем юзать МассивСимволов[N] чем со Сред извращаться и строками и главное шустрее должно работать.
15 Garykom
 
гуру
27.02.20
00:27
(14)+ И с кодами регионов абсолютно аналогично

МассивРегионов = Новый Массив;
МассивРегионов.Добавить("01");
МассивРегионов.Добавить("02");
МассивРегионов.Добавить("102");
...
16 palsergeich
 
27.02.20
00:27
(14) А что там со Сред извращатьсят ТО?
Сред(Строка, позиция, 1)
17 Garykom
 
гуру
27.02.20
00:28
(16) Нахер см 15
18 palsergeich
 
27.02.20
00:28
(15) Тебе там за строчки кода платят что ли?
номера регионов вшить в макет,и руками точно не вбивать. (15) это очень плохой пример)
19 Garykom
 
гуру
27.02.20
00:29
(18) Для студента это идеально, в макет это уже клюшечные извраты
20 Garykom
 
гуру
27.02.20
00:30
(19)+ Ладно в строку с разделителями, затем ее по разделителя в массив подстрок банально
21 palsergeich
 
27.02.20
00:31
Макет - табдок.
Табдок в ТЗ, можно сразу в массив.
У ТЗ посчитать количество
Потом ГСЧ(1, Количество)
И все.
то же самое с буквами. (19) Тыконечно парень хороший, но человека учить вбивать массивы прям в код - не лучшаяидея
22 Garykom
 
гуру
27.02.20
00:32
(21) Ну можно в макет и в ТЗ/Массив

Судя по знаниям ТС ему с массивов начинать самое то.
А уже потом переходить к строкам и ТабДок, перед этим освоив ТЗ и прочие Структуры
23 palsergeich
 
27.02.20
00:33
(20) Строку с разделителями потом поддерживать затратно.
Уж пусть сразу делает как надо.
Чувак с соображалкой, но прямолинейный.
ГСЧ 2 раза одно и то же выдавал, наш герой не сдался и изобрел сдвиг
24 palsergeich
 
27.02.20
00:35
(22) Хочешь проверить? Делай это не в отладке. В отладке все будет хорошо.
Сделай Сообщить(Длина) и Сообщить(Длина2) в коде прям - удивишся. я в первый раз тожеобомлел)
25 Garykom
 
гуру
27.02.20
00:38
(23) Чувак странный зачем то два ГСЧ создал...
26 Garykom
 
гуру
27.02.20
00:39
(25)+ Я его логику не понимаю. А соображалки там нет есть копипаста тупая
27 palsergeich
 
27.02.20
00:44
(26) Я много чего видел, но такого нет

&НаКлиенте
Процедура Команда1(Команда)
    //Процедура Сгенерироать(Команда)
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    ГСС1 = Новый ГенераторСлучайныхЧисел();
    Число = ГСЧ.СлучайноеЧисло(001, 999);
    Номер = Номер + Число;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры
28 palsergeich
 
27.02.20
00:45
(27) хотя бы так, здесь номервпределах секунды будетболее случайный чем в (0)
29 Garykom
 
гуру
27.02.20
00:45
(27)
ГСС1 = Новый ГенераторСлучайныхЧисел();
Длина1 = ГСЧ.СлучайноеЧисло(001, 999);

Ошибку выдышь?
30 Garykom
 
гуру
27.02.20
00:46
Нахрена нужны несколько ГСЧ????
31 palsergeich
 
27.02.20
00:46
(29) Да) я балда)
32 palsergeich
 
27.02.20
00:48
(29) Поправил

&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    ГСС1 = Новый ГенераторСлучайныхЧисел();
    Число = ГСЧ.СлучайноеЧисло(1, 999);
    Номер = Номер + Формат(Число,"ЧЦ=3; ЧС=; ЧВН=" );
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры

33 palsergeich
 
27.02.20
00:48
(30) разные диапазоны, норм
34 palsergeich
 
27.02.20
00:50
(30) А и тут я ошибся), да достаточно 1го)
Устал, прости)
35 palsergeich
 
27.02.20
00:51

&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    Номер = "";
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Число = ГСЧ.СлучайноеЧисло(1, 999);
    Номер = Номер + Формат(Число,"ЧЦ=3; ЧВН=" );
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Позиция = ГСЧ.СлучайноеЧисло(1,21);
    Буква = Сред(Строка, Позиция, 1);
    Номер = Номер+Буква;
    
    Сообщить(Номер);

КонецПроцедуры
36 Garykom
 
гуру
27.02.20
00:55
(35) Три буквы заверни в цикл и будет почти идеально
37 Garykom
 
гуру
27.02.20
00:55
(36)+ А потом вставь номер после первой буквы
38 palsergeich
 
27.02.20
01:05
(36) Бу
&НаКлиенте
Процедура Команда1(Команда)
    
    Строка = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    МассивНомера = Новый Массив;
    
    Для итератор = 0 по 3 Цикл
        Если Итератор <> 1 Тогда
            МассивНомера.Добавить(Сред(Строка, ГСЧ.СлучайноеЧисло(1,21),1));
        Иначе
            МассивНомера.Добавить(Формат(ГСЧ.СлучайноеЧисло(1, 999) ,"ЧЦ=3; ЧВН=" ));
        КонецЕсли;
    КонецЦикла;
        
    Сообщить(СтрСоединить(МассивНомера,""));
    
КонецПроцедуры