|
|
|
8.2 поделитесь функцией... | ☑ | ||
|---|---|---|---|---|
|
0
Aswed
04.08.10
✎
11:37
|
...преобразующей ФИО в Инициалы.
|
|||
|
1
levlvov
04.08.10
✎
11:40
|
Функцыя ФИОВИнициалы(ФИО)
Возврат Сред(ФИО, 1, 1) + ". " + Сред(ФИО, 2, 1) + ". " + Сред(ФИО, 3, 1) + "."; КонецФункцыи |
|||
|
2
Лефмихалыч
04.08.10
✎
11:41
|
что должна возвращать функция, если ФИО = "Абасов Кулам-Али Гусейн-оглы" или "Тем-оглы Боурамали Эли Оглы"
PS А меж тем, это реально существующие люди |
|||
|
3
Лефмихалыч
04.08.10
✎
11:42
|
Нам-Чан-Гук Инна Александровна
Петров-Водкин Кузьма Сергеевич :) |
|||
|
4
rrunover
04.08.10
✎
11:42
|
(1) О_о оно реально работать будет?
|
|||
|
5
rrunover
04.08.10
✎
11:43
|
+(4) а хотя... функция возвращает именно то, что указано в техзадании :D
|
|||
|
6
AlecoZAV
04.08.10
✎
11:44
|
(1) а поиск первых символов?
|
|||
|
7
Aswed
04.08.10
✎
11:45
|
(1) Я такую сам бы написать мог легко))))))
|
|||
|
8
levlvov
04.08.10
✎
11:46
|
(7) ну так не написал же
|
|||
|
9
Aswed
04.08.10
✎
11:46
|
А никто не писал функцию с анализом Пола ФИО?
Задумка есть как всё это реализовать и сложного там ничего нет, но писать много и лень этой фигнёй страдать) |
|||
|
10
almar
04.08.10
✎
11:47
|
ПозПервогоПробела=Найти(Сотрудник.Наименование," ");
ИмяОтчество=СокрЛП(Сред(Сотрудник.Наименование,ПозПервогоПробела)); |
|||
|
11
levlvov
04.08.10
✎
11:48
|
(9) такая функция у г1с уже есть
|
|||
|
12
Aswed
04.08.10
✎
11:48
|
(8) )))))
Я что нить посерьёзней хотел, что бы был вариант обработки сложных фамилий, пример в (2) А то у нас лиц не совсем русской национальонсти полным полно, и у них такие извращённые фамилии. С ними проблем будет куча. ЗЫ А за код спасибо конечно) |
|||
|
13
almar
04.08.10
✎
11:48
|
(9) Если отчество заканчивается на "а" или "кызы", то это женщина. Чего там много писать?
|
|||
|
14
kosts
04.08.10
✎
11:49
|
А так же бывают люди у которых нет отчества.
|
|||
|
15
Лефмихалыч
04.08.10
✎
11:50
|
(10) одной Малла Хусейн Оглы Нария Мухидиновна хватит, чтобы трындец твой функции приключился :)
|
|||
|
16
almar
04.08.10
✎
11:51
|
(14) Обычно такие функции нужны в некритичных случаях, например, чтобы программа написала "Уважаемая" а не "Уважаемый(ая)". Для нерусских непринципиально. :)
|
|||
|
17
levlvov
04.08.10
✎
11:52
|
(15)+ или например ван Бастен
|
|||
|
18
Aswed
04.08.10
✎
11:53
|
(13) Там много писать с обработкой сложных фамилий
Мухамед-Оглы например. |
|||
|
19
Лефмихалыч
04.08.10
✎
11:53
|
(16) большая часть из упомянутых - русские люди, я практически уверен в этом :)
|
|||
|
20
aka AMIGO
04.08.10
✎
11:54
|
для 7-ки у меня есть
для 8-ко - нет :) |
|||
|
21
Aswed
04.08.10
✎
11:54
|
(16) ))))
|
|||
|
22
levlvov
04.08.10
✎
11:55
|
(0) кароче, вместо функции надо писать целую конфигурацию и дергать преобразование из нее через ком соединение...
|
|||
|
23
Aswed
04.08.10
✎
11:55
|
(16) Там как раз критично. Тело договора о купле продажи. В теле договора полностью ФИО со склонениями, а в подписях на каждой странице Фамилия и инициалы.
|
|||
|
24
aka AMIGO
04.08.10
✎
11:55
|
(16) "Уваж." спасет отцов.. и матерей русской демократии :)
|
|||
|
25
AlecoZAV
04.08.10
✎
11:55
|
(16) Уважаемое?
|
|||
|
26
almar
04.08.10
✎
11:56
|
(18) Оглы - мужчина, Кызы - женщина. Мухамед Оглы скорее всего это не фамилия, а отчество :)
|
|||
|
27
Лефмихалыч
04.08.10
✎
11:56
|
Некоторые вещи лучше не делать за пользователя...
|
|||
|
28
Лефмихалыч
04.08.10
✎
11:57
|
(26) там, кагбэ, как в паспорте написано, так оно и есть, даже не смотря на то, что Оглы - это мужчина, такие дела :)
|
|||
|
29
aka AMIGO
04.08.10
✎
11:57
|
вообще-то достаточно просто решается разложением в СЗ по пробелам, (кои надо преобразовать из двух-в-один),
а потом из СЗ брать первый символ, подставлять точку |
|||
|
30
stangen
04.08.10
✎
11:58
|
ФИО = "Абасов Кулам-Али Гусейн-оглы";
Сообщить(Лев(ФИО,1)+Сред(ФИО,Найти(ФИО," ")+1,1)+Сред(Сред(ФИО,Найти(ФИО," ")+1,СтрДлина(ФИО)-1),Найти(Сред(ФИО,Найти(ФИО," ")+1,СтрДлина(ФИО)-1)," ")+1,1)); АКГ =) |
|||
|
31
aka AMIGO
04.08.10
✎
11:59
|
Вот такое у меня работает:
Функция ПолучитьФИО(Автор) Автор = СтрЗаменить(Автор, " "," "); СЗАвт = СоздатьОбъект("СписокЗначений"); СЗАвт = глРазложить(Автор," "); Автор = СЗАвт.ПолучитьЗначение(1); Если СЗАвт.РазмерСписка()>1 Тогда Автор = Автор+" " + Врег(Лев(СЗАвт.ПолучитьЗначение(2),1)) +"."; КонецЕсли; Если СЗАвт.РазмерСписка()>2 Тогда Автор = Автор+" " + Врег(Лев(СЗАвт.ПолучитьЗначение(3),1)) +"."; КонецЕсли; Возврат Автор; КонецФункции |
|||
|
32
НП
04.08.10
✎
12:03
|
А вот из семерки (очень старой)
Функция ФИО(ПолнИмя) Экспорт // позиция первого пробела ПервПроб = Найти(ПолнИмя," "); Если ПервПроб=0 Тогда Возврат ПолнИмя; Иначе Фамилия = Лев(ПолнИмя,ПервПроб); ИО = Сред(ПолнИмя,ПервПроб+1); ИО = СокрЛ(ИО); Имя = Лев(ИО,1)+"."; // позиция второго пробела ВтПроб = Найти(ИО," "); Если ВтПроб=0 Тогда Возврат Фамилия+Имя; Иначе Возврат Фамилия+Имя+" "+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+"."; КонецЕсли; КонецЕсли; КонецФункции //ФИО |
|||
|
33
Лефмихалыч
04.08.10
✎
12:03
|
(30) "ЧЕН Ю-СЮ АЛЕКСАНДР БОРИСОВИЧ" и "Прожогина Киреева Анна Валентиновна"
ФИО, раз нужны по отдельности, должны вводиться по отдельности. Это как с адресом - хочешь порядок, выбирай из классификатора |
|||
|
34
stangen
04.08.10
✎
12:06
|
(33) а как тогда? ЧЮАБ И ПКАВ? тогда можно в цикле собирать пробелы)
|
|||
|
35
kosts
04.08.10
✎
12:07
|
(31) Это медленная функция. Из-за создания объекта.
|
|||
|
36
aka AMIGO
04.08.10
✎
12:09
|
(35) если объект в гм-экспорт - то будет быстро соображать.
|
|||
|
37
Aswed
04.08.10
✎
12:17
|
(31) Вот
адаптировал под 8.2 (но и в 8.1 работать будет) Функция ФИОВИнициалы(ФИО) Экспорт Инициалы = СтрЗаменить(ФИО, " "," "); СЗАвт = Новый СписокЗначений; СЗАвт = РазложитьСтрокуВМассивПодстрок(Инициалы," "); Инициалы = СЗАвт.Получить(0); Если СЗАвт.Количество()>1 Тогда Инициалы = Инициалы + " " + Врег(Лев(СЗАвт.Получить(1),1)) +"."; КонецЕсли; Если СЗАвт.Количество()>2 Тогда Инициалы = Инициалы + " " + Врег(Лев(СЗАвт.Получить(2),1)) +"."; КонецЕсли; Возврат Инициалы; КонецФункции Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // РазложитьСтрокуВМассивПодстрок Кому надо берите. ЗЫ А сложные фамилии буду обрабатывать методом накопления и сравнения, пирйдётся писать механизм в котором пользователи должны будут сами вводить ФИО и инициалы к ней а потом всё это анализировать. |
|||
|
38
sash-ml
04.08.10
✎
12:37
|
более простое разложение строк на подстроки чем в (37)
Функция СтрокуВСписок(Стр1,Раздел) Стр=СтрЗаменить(Стр1,Раздел,Символы.ПС); ЧислоСтрок=СтрЧислоСтрок(Стр); СписокСтрок=Новый СписокЗначений; Если ЧислоСтрок>0 Тогда Для н=1 ПО ЧислоСтрок Цикл СписокСтрок.Добавить(СтрПолучитьСтроку(Стр,н)); КонецЦикла; КонецЕсли; Возврат СписокСтрок; КонецФункции |
|||
|
39
Kreont
04.08.10
✎
12:43
|
Мне вот интересно, а сам он "Тем-оглы Боурамали Эли Оглы" знает как инициалы его записать? :)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |