helpf.pro
Регистрация
 +2 
Распечатать

Как разобрать наименование сотрудника Ф.И.О. на Фамилию и инициалы сотрудника?

Код 1C v 7.x
 
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
	СЗ = СоздатьОбъект("СписокЗначений");
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.ДобавитьЗначение(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.ДобавитьЗначение(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
			Стр = Сред(Стр,Поз+ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
КонецФункции 

Функция ФамилияИмяОтчество(Объект,Фамилия="",Имя="",Отчество="") Экспорт
    
	Если ТипЗначения(Объект)=2 Тогда
		ФИО = глРазделить(СокрЛП(Объект),",");
	Иначе
		ФИО = глРазделить(СокрЛП(Объект.Наименование),",");
	КонецЕсли;                             
	ФИО = глРазложить(ФИО," ");
	Фамилия = ""; Имя = ""; Отчество = "";
	Если ФИО.РазмерСписка() > 0 Тогда
		Фамилия = ФИО.ПолучитьЗначение(1);
		Если ФИО.РазмерСписка() > 1 Тогда
			Имя		= ФИО.ПолучитьЗначение(2);
			Если ФИО.РазмерСписка() > 2 Тогда 
				// а вот отчество бывает и не из одного слова				
				Для Сч = 3 По ФИО.РазмерСписка() Цикл
					Отчество = Отчество + ФИО.ПолучитьЗначение(Сч) + " ";
				КонецЦикла;
				Если ПустоеЗНачение(Отчество) = 0 Тогда
					Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Фамилия+?(ПустоеЗначение(Имя)=0," "+Лев(Имя,1)+"."+?(ПустоеЗначение(Отчество)=0,Лев(Отчество,1)+".",""),"")

КонецФункции



Код 1C v 8.х
 
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
	СЗ = Новый СписокЗначений;
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.Добавить(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.Добавить(Лев(Стр,Поз-1));
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1=1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				СЗ.Добавить(Стр);
				Возврат СЗ;
			КонецЕсли;
			СЗ.Добавить(Лев(Стр,Поз-1));
			Стр = Сред(Стр,Поз+ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
КонецФункции 

Функция РазборФИО(Сотрудник)
	ФИО = глРазложить(Сотрудник," ");
	Фамилия = ""; Имя = ""; Отчество = "";
	Если ФИО.Количество() > 0 Тогда
		Фамилия = Строка(ФИО.Получить(0));
		Если ФИО.Количество() > 1 Тогда
			Имя		= Строка(ФИО.Получить(1));
			Если ФИО.Количество() > 2 Тогда 
				// а вот отчество бывает и не из одного слова				
				Для Сч = 2 По ФИО.Количество()-1 Цикл
					Отчество = Отчество + Строка(ФИО.Получить(Сч)) + " ";
				КонецЦикла;
				Если ЗначениеЗаполнено(Отчество) Тогда  
					Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
Возврат Фамилия+?(ЗначениеЗаполнено(Имя)," "+Лев(Имя,1)+"."+?(ЗначениеЗаполнено(Отчество),Лев(Отчество,1)+".",""),"")
КонецФункции
   


Обязательно посмотрите более краткий вариант!
)
Разместил:   Версии: | 7.x | 8.x |  Дата:   Прочитано: 53164
 +2 
Распечатать
Возможно, вас также заинтересует
1C медленно работает по сети с базой на SQL Server 23
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С Предприятие что это? 13
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
PostgreSQL: установка, настройка, обслуживание 12
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
SMTP greeting failure: 421 SMTP connection broken (reply) 8
Опи­са­ние ошиб­ки: С сен­тяб­ря 2014 Ян­декс.Почта, Mail.ru пе­ре­шли на про­то­кол SSL, что сде­ла­ло их еще более без­опас­ны­ми. Чтобы и даль­ше ра­бо­тать с пись­ма­ми через 1С, Вам нужно из­ме­нить их на­строй­ки и вне­сти до­ра­бот­ки в код
Посмотреть все результаты поиска похожих
Комментарии
IKate
26.12.2012 14:47Комментарий: 3
IKate
Вот просто разделение на Фамилия, Имя, Отчество:
Код 1C v 8.х
 ФИО = ВыборкаРаботники.ФизЛицо;
		Если ПустаяСтрока(Фамилия) Тогда
			Фамилия   = ОбщегоНазначения.ВыделитьСлово(ФИО);
			Имя           = ОбщегоНазначения.ВыделитьСлово(ФИО);
			Отчество = ОбщегоНазначения.ВыделитьСлово(ФИО);
		КонецЕсли;
   
vitalick
20.06.2012 14:09Комментарий: 2
vitalick
ФИОПациента = СтрЗаменить(СтрокаТЧ.ПациентИзФайла," "," ");
мПерем = СокрЛП(СтрокаТЧ.ПациентИзФайла) + " ";

ПозицияПробела = найти(мПерем," ");
ВыбФамилия = лев(мПерем,ПозицияПробела);
мПерем = СтрЗаменить(мПерем,ВыбФамилия,"");
мПерем = СокрЛ(мПерем);

ПозицияПробела = найти(мПерем," ");
ВыбИмя = лев(мПерем,ПозицияПробела);
мПерем = СтрЗаменить(мПерем,ВыбИмя,"");
мПерем = СокрЛ(мПерем);

ПозицияПробела = найти(мПерем," ");
ВыбОтчество = лев(мПерем,ПозицияПробела);
Maximysis
03.04.2012 09:49Комментарий: 1
Maximysis
Функция глРазделить это глРазложить или что?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!