В обработке присутствует:
- мужских фамилий: 40420
- мужских имен: 7061
- мужских отчеств: 10956
- женских фамилий: 45830
- женских имен: 7170
- женских отчеств: 11170
Для чего может пригодиться данная обработка:
- для тестовой базы при генерации новых записей физических лиц;
- для превращения рабочей базы в демонстрационную;
- для молодых родителей, которые не могут придумать имя будущему ребенку.
Код обработки очень простой:
&НаКлиенте
Процедура Сгенерировать(Команда)
СгенерироватьНаСервере()
КонецПроцедуры
&НаСервере
Процедура СгенерироватьНаСервере()
СлучайныеФИО.Очистить();
МужскиеФамилии=ЗаполнитьИзМакета("МужскиеФамилии");
МужскиеИмена=ЗаполнитьИзМакета("МужскиеИмена");
МужскиеОтчества=ЗаполнитьИзМакета("МужскиеОтчества");
ЖенскиеФамилии=ЗаполнитьИзМакета("ЖенскиеФамилии");
ЖенскиеИмена=ЗаполнитьИзМакета("ЖенскиеИмена");
ЖенскиеОтчества=ЗаполнитьИзМакета("ЖенскиеОтчества");
КоличествоМужскихФамилий=МужскиеФамилии.Количество();
КоличествоМужскихИмен=МужскиеИмена.Количество();
КоличествоМужскихОтчеств=МужскиеОтчества.Количество();
КоличествоЖенскийФамилий=ЖенскиеФамилии.Количество();
КоличествоЖенскийИмен=ЖенскиеИмена.Количество();
КоличествоЖенскийОтчеств=ЖенскиеОтчества.Количество();
Множители11=СтрРазделить("0,7,2,4,10,3,5,9,4,6,8,0",",");
Множители12=СтрРазделить("0,3,7,2,4,10,3,5,9,4,6,8",",");
ГенераторСЧ=Новый ГенераторСлучайныхЧисел();
Для Х=1 По Количество Цикл
Если СгенерироватьПол="Мужской" Тогда
Фамилия=МужскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихФамилий-1)];
Имя=МужскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихИмен-1)];
Отчество=МужскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихОтчеств-1)];
Пол="мужской"
ИначеЕсли СгенерироватьПол="Женский" Тогда
Фамилия=ЖенскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийФамилий-1)];
Имя=ЖенскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийИмен-1)];
Отчество=ЖенскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийОтчеств-1)];
Пол="женский"
ИначеЕсли ГенераторСЧ.СлучайноеЧисло(0,1) Тогда
Фамилия=МужскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихФамилий-1)];
Имя=МужскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихИмен-1)];
Отчество=МужскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоМужскихОтчеств-1)];
Пол="мужской"
Иначе
Фамилия=ЖенскиеФамилии[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийФамилий-1)];
Имя=ЖенскиеИмена[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийИмен-1)];
Отчество=ЖенскиеОтчества[ГенераторСЧ.СлучайноеЧисло(0,КоличествоЖенскийОтчеств-1)];
Пол="женский"
КонецЕсли;
Наименование=Фамилия+" "+Имя+" "+Отчество+" ("+Пол+")";
Если СгенерироватьДатуРождения Тогда
ДатаРождения=ТекущаяДата()-ГенераторСЧ.СлучайноеЧисло(1,365*90)*86400; //Не более 90 лет
Наименование=Наименование+"; дата рождения "+Формат(ДатаРождения,"ДФ=dd.MM.yyyy")
КонецЕсли;
Если СгенерироватьИНН Тогда
ИНН="";
КонтрольнаяСумма11=0;
КонтрольнаяСумма12=0;
Для М=1 По 10 Цикл
Цифра=Число(Сред("0123456789",ГенераторСЧ.СлучайноеЧисло(1,10),1));
ИНН=ИНН+Цифра;
КонтрольнаяСумма11=КонтрольнаяСумма11+Цифра*Множители11[М];
КонтрольнаяСумма12=КонтрольнаяСумма12+Цифра*Множители12[М]
КонецЦикла;
Цифра=(КонтрольнаяСумма11%11)%10;
ИНН=ИНН+Цифра;
ИНН=ИНН+((КонтрольнаяСумма12+Цифра*Множители12[М])%11)%10;
Наименование=Наименование+"; ИНН "+ИНН
КонецЕсли;
Если СгенерироватьСНИЛС Тогда
СНИЛС="";
Для М=1 По 9 Цикл
Цифра=Число(Сред("0123456789",ГенераторСЧ.СлучайноеЧисло(1,10),1));
СНИЛС=СНИЛС+Цифра;
КонецЦикла;
Если Число(СНИЛС)>1001998 Тогда
Всего=0;
Для М=1 По 9 Цикл
Всего=Всего+Число(Сред(СНИЛС,10-М,1))*М
КонецЦикла;
Остаток=Всего%101;
СНИЛС=СНИЛС+"."+?(Остаток=100,0,Остаток)
Иначе
СНИЛС=СНИЛС+".00"
КонецЕсли;
Наименование=Наименование+"; СНИЛС "+Формат(Число(СНИЛС),"ЧЦ=11; ЧДЦ=2; ЧРД=' '; ЧРГ=-; ЧВН=")
КонецЕсли;
СлучайныеФИО.ДобавитьСтроку(Наименование)
КонецЦикла
КонецПроцедуры
&НаСервере
Функция ЗаполнитьИзМакета(ИмяМакета)
Массив=Новый Массив;
Текст=РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
КоличествоСтрок=Текст.КоличествоСтрок();
Для Х=1 По КоличествоСтрок Цикл
Массив.Добавить(Текст.ПолучитьСтроку(Х))
КонецЦикла;
Возврат Массив
КонецФункции
//Для тех, кто сидит на 8.2 - необходимо раскомментировать эту функцию
//Функция СтрРазделить(Стр,Разделитель)
// Массив=Новый Массив;
// Строки=СтрЗаменить(Стр,Разделитель,Символы.ПС);
// Для Х=1 По СтрЧислоСтрок(Строки) Цикл
// Массив.Добавить(Число(СтрПолучитьСтроку(Строки,Х)))
// КонецЦикла;
// Возврат Массив
//КонецФункции
Обработка писалась на платформе 8.3.11.3034, но должна работать на 8.2.