|
Склонение и усечение имен в 1с | ☑ | ||
---|---|---|---|---|
0
Карась
31.07.12
✎
09:51
|
Добрый день! Передо мной стоит задача, просклонять ФИО и в необходимом месте, оставить только фамилию и инициалы. Функцию по склонению ФИО я нашла
http://manual1c.ru/sklonenie-familii-imeni-i-otchestva-po-padezham/ , но она пока работать не хочет,а вот как имена усекать я пока не разобралась. Подскажите мне пожалуйста, в правильном ли направлении я иду, может там все намного сложнее или проще? |
|||
1
CepeLLlka
31.07.12
✎
09:53
|
(0) В ЗУПе есть наглядный пример.
|
|||
2
Fish
31.07.12
✎
09:54
|
(0) ИМХО, лучшее решение здесь: http://www.superjur.narod.ru/padeg.htm
|
|||
3
Карась
31.07.12
✎
09:56
|
В ЗУПе есть усечение инициалов?
|
|||
4
Карась
31.07.12
✎
09:56
|
Я слышала, что там на ПКО есть такая функция
|
|||
5
KUBIK
31.07.12
✎
09:58
|
глФамилияИнициалыФизлица(...) ищи в ОМ
|
|||
6
Serg_1960
31.07.12
✎
10:01
|
В ЗУПе? Функция ОбщегоНазначения.ФамилияИнициалыФизЛица()
|
|||
7
Карась
31.07.12
✎
10:02
|
Понятно, значит буду ждать пока доступ в ЗУП дадут, мне к сожалению только УТ дали
|
|||
8
CepeLLlka
31.07.12
✎
10:02
|
(7)Наркоман? :) Скачать же можно.. ты ведь не юзать его будешь.. скачал.. поставил... нашёл что нужно, удалил..
|
|||
9
Андрюха
31.07.12
✎
10:04
|
(0) Склонение понятно, а усечение это типа Людк, Васьк, Петьк?
|
|||
10
Карась
31.07.12
✎
10:04
|
Может и наркоман, мне самой интересно попробовать руками, я только начина программировать в 1с, поэтому все пытаюсь писать сама
|
|||
11
Карась
31.07.12
✎
10:04
|
Андрюха, да-да, именно
|
|||
12
Андрюха
31.07.12
✎
10:05
|
(11) Последнюю гласную "усекай" тогда
|
|||
13
Карась
31.07.12
✎
10:06
|
Да мне же надо одни инициалы оставить
|
|||
14
eduspec82
31.07.12
✎
10:06
|
ЗуП есть склонение ФИО там в печатных формах это используется ...
|
|||
15
Карась
31.07.12
✎
10:07
|
Вот, я и жду доступа туда
|
|||
16
Андрюха
31.07.12
✎
10:07
|
(13) Тогда первые символы у имени и фамилии
|
|||
17
Serg_1960
31.07.12
✎
10:08
|
(8) Чисто формально - это нарушение авторских прав.
(0) В ЗУПе (да и не только) есть функция ПросклонятьФамилиюИмяОтчество... ТС, проверь свою конфигурацию глобальным поиском на слово "Просклонять" - может и у тебя оно есть. |
|||
18
Карась
31.07.12
✎
10:09
|
Попробую
|
|||
19
Андрюха
31.07.12
✎
10:12
|
... а "Людк" всё-таки было бы прикольней
|
|||
20
Карась
31.07.12
✎
10:12
|
Было бы)
Глобальный поиск ничего не нашел |
|||
21
Карась
31.07.12
✎
10:13
|
Хотя когда в коде пишу просклонять,подсказку выдает
|
|||
22
eduspec82
31.07.12
✎
10:17
|
кстати как склонять должности
например - "в лице (генеральный директор) (пупкин василилй васильевич) ..." ФИО склоняется функцией а вот должность корректно как просклонять? |
|||
23
Митор
31.07.12
✎
10:17
|
В УТ, УправлениеКонтактнойИнформацией.ФамилияИнициалыФизЛица
|
|||
24
CaptanG
31.07.12
✎
10:18
|
(22)Просклонять вроде работает для любых фраз до 3х слов
|
|||
25
Serg_1960
31.07.12
✎
10:18
|
(20) Печалька :) Ну тогда установи компоненту NameDecl.dll и использую на здоровье :)
PS: v8: Тонкий клиент, подключение ВК NameDecl.dll(Склонение) |
|||
26
Fish
31.07.12
✎
10:19
|
(22) Функция в (2) склоняет и должности :)
|
|||
27
eduspec82
31.07.12
✎
10:19
|
(24) неа склоняет неправильно :)
|
|||
28
Карась
31.07.12
✎
10:20
|
Вот код который написала
&НаКлиенте Процедура Просклонять1(Команда) Просклонять(); КонецПроцедуры Функция Просклонять() Попытка // Загружаем внешнюю компоненту ЗагрузитьВнешнююКомпоненту("NameDecl.dll"); Объект = Новый("AddIn.NameDeclension"); Исключение Сообщить("Ошибка загрузки внешней компоненты для склонения ФИО! Функции склонения будут недоступны!" + ОписаниеОшибки()); КонецПопытки; // Определяем ФИО, которые надо просклонять ФИО1 = ФИОПолное; // Задаем требуемый падеж Падеж = 2; // Получаем результат склонения Результат = Объект.Просклонять(ФИО1, Падеж); КонецФункции |
|||
29
Карась
31.07.12
✎
10:20
|
Я там пока еще не правильно похоже обратилась к реквизиту формы ФИОПолное
|
|||
30
eduspec82
31.07.12
✎
10:26
|
+(27) предположу что функция незаточена под склонение прилагательных например просклоняйте должность "супер крутой главначпупс"
|
|||
31
Карась
31.07.12
✎
10:26
|
Да мне должности не надо пока, она у меня простое ФИО склонять не хочет
|
|||
32
Карась
31.07.12
✎
10:32
|
&НаКлиенте
Процедура Просклонять1(Команда) СтрокаФИО=ФИОПолное; Падеж=2; Просклонять(СтрокаФИО,Падеж); КонецПроцедуры &НаСервере Функция Просклонять(СтрокаФИО,Падеж) Результат = ""; ПутьККомпоненте = КаталогПрограммы()+ "NameDecl.dll"; NameDecl = "AddIn.NameDeclension"; Попытка Если ПодключитьВнешнююКомпоненту(ПутьККомпоненте,NameDecl)ТОгда Результат = NameDecl.Просклонять(СтрокаФИО,Падеж); КонецЕсли; Исключение Сообщить("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки()); КонецПопытки; Возврат Результат; КонецФункции Вот так тоже не работает, выскакивает на сообщение("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки()); |
|||
33
ThreeTONE
31.07.12
✎
10:35
|
(30) +1 ФИО сотрудников из бывших братских республик склоняются неверно.
|
|||
34
Карась
31.07.12
✎
10:40
|
А как мне организовать хотя бы склонение фамилии Иванов?
|
|||
35
Fish
31.07.12
✎
10:42
|
(34) Блин, я тебе ещё в (2) дал правильный ответ. Склоняет всё правильно, усекает как надо, склоняет профессии и должности.
|
|||
36
Fish
31.07.12
✎
10:42
|
+(35) И никаких внешних компонент не нужно.
|
|||
37
Карась
31.07.12
✎
10:44
|
Ладно попробую скачаю попробую
|
|||
38
Карась
31.07.12
✎
10:44
|
ой, ну все зациклилась
|
|||
39
Карась
31.07.12
✎
10:52
|
А будет ли формально честно, если я кусок кода оттуда возьму?
|
|||
40
Fish
31.07.12
✎
10:58
|
(39) Ну раз автор выложил свой код в свободный доступ, думаю, что да. И, кстати, он тут иногда проскакивает, покличь, может, отзовётся :))
|
|||
41
Карась
31.07.12
✎
11:22
|
Попробую, я просто туда заглянула и не поняла ничего((((
|
|||
42
milan
31.07.12
✎
11:35
|
в (2) ВРИО в должности не склоняет ;(
|
|||
43
Карась
31.07.12
✎
11:46
|
milan,а можете для совсем начинающего программиста объяснить как адаптировать этот код под мой случай, я как поняла Вы уже с ним работали
|
|||
44
milan
31.07.12
✎
11:59
|
(43) Карась вставляем текст в модуль и вызываем функцию Падеж(), параметры все описаны
|
|||
45
Карась
31.07.12
✎
12:09
|
а в z1 мы обрабатываемую строку вставляем?
|
|||
46
Карась
31.07.12
✎
12:12
|
и если мне нужен только родительный падеж, то получается там много лишнего кода
|
|||
47
Карась
31.07.12
✎
12:18
|
Просто у меня как происходит, я ввожу в реквизит например "Иванов Иван Иванович"
и он пока выводит тоже самое |
|||
48
Карась
31.07.12
✎
12:19
|
а все поняла
|
|||
49
Карась
31.07.12
✎
12:27
|
Я боюсь этот код для меня не подойдет,у меня ФИО забито в одно поле(
|
|||
50
mzelensky
31.07.12
✎
12:35
|
(49) так разбей его на несколько полей!
|
|||
51
Карась
31.07.12
✎
12:36
|
Не могу, требования заранее установленые(
|
|||
52
mzelensky
31.07.12
✎
12:37
|
(31) какие требования?
|
|||
53
mzelensky
31.07.12
✎
12:38
|
(52) - (51)
+ Ты не можешь догадаться как разложить строку на подстроку? |
|||
54
Карась
31.07.12
✎
12:40
|
Не могу, опыта в этом деле 4 недели(
|
|||
55
mzelensky
31.07.12
✎
12:43
|
(54)
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если НЕ ЗначениеЗаполнено(Стр) тогда Возврат МассивСтрок; КонецЕсли; Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить( СОКРЛП(Стр) ); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(СОКРЛП(Лев(Стр,Поз-1))); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(СОКРЛП(Стр)); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(СОКРЛП(Лев(Стр,Поз-1))); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // глРазложить |
|||
56
mzelensky
31.07.12
✎
12:45
|
(55) передаещь в функция строку "ФИО" и раздельтель " ", на выходе получаешь массив слов "Ф","И","О", а дальше уже склоняй.
+ Правда та функция склонения, что ты пользуешься и так должна воспринимать ФИО (там даже соответствующие параметры есть). |
|||
57
Карась
31.07.12
✎
12:45
|
Спасибо буду пробовать, но думаю в моем случает, следует повозиться еще с получением компоненты, она оказалась у меня просто не установлена.
|
|||
58
Карась
31.07.12
✎
12:47
|
но эта функция мне очень поможет в работе с усечением инициалов
|
|||
59
mzelensky
31.07.12
✎
12:47
|
(57) на ту компоненту много ругались - говорят глючит периодически. Хотя сам сильно ее не тестил
|
|||
60
mzelensky
31.07.12
✎
12:47
|
(58) это стандартная функция в 1С. В том же ЗУПе могла ее взять.
|
|||
61
Карась
31.07.12
✎
12:48
|
Ну я попробую, может поможет
я то вот здесь работающий код нашла v8: Тонкий клиент, подключение ВК NameDecl.dll(Склонение) |
|||
62
Карась
31.07.12
✎
13:00
|
А где мне ее в ЗУПе найти не подскажете?
|
|||
63
Карась
31.07.12
✎
13:07
|
Вот так эту функцию используем?
Процедура Инициалы(Команда) Стр=ФИОПолное; РазложитьСтрокуВМассивПодстрок(Стр); ФИОРодительный=Лев(Стр,1); КонецПроцедуры Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если НЕ ЗначениеЗаполнено(Стр) тогда Возврат МассивСтрок; КонецЕсли; Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить( СОКРЛП(Стр) ); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(СОКРЛП(Лев(Стр,Поз-1))); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(СОКРЛП(Стр)); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(СОКРЛП(Лев(Стр,Поз-1))); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции |
|||
64
mzelensky
31.07.12
✎
13:22
|
(63) и что по твоему делает вот это:
Стр=ФИОПолное; РазложитьСтрокуВМассивПодстрок(Стр); ФИОРодительный=Лев(Стр,1); ??? |
|||
65
Карась
31.07.12
✎
13:24
|
Ну я пока ее еще не дописала, там надо будет обработать результат функции и потом пропускать через Лев
|
|||
66
Карась
31.07.12
✎
13:25
|
Мне главное разбит строку на три слова
|
|||
67
Карась
31.07.12
✎
13:25
|
Но эта функция этого не делает
|
|||
68
mzelensky
31.07.12
✎
13:27
|
(67) видимо ты "очень начинающий 1С-нег"... а посмотреть на параметры функции и то, что она возвращает??? не, никак???
|
|||
69
Карась
31.07.12
✎
13:31
|
ой,это я упустила, спасибо
|
|||
70
Карась
31.07.12
✎
13:32
|
А про очень начинающего программиста Вы правы, я этого не отрицаю, но я готова учиться
|
|||
71
Карась
31.07.12
✎
14:49
|
Вот кстати такой вопрос, компоненту я у нас все таки нашла код записала
Функция Просклонять2(СтрокаФИО,Падеж) // Определяем имя внешней компоненты Результат = ""; ПутьККомпоненте = " C:/Program Files (x86)/1cv82/8.2.15.289/bin/NameDecl.dll"; Перем1 = "AddIn.NameDeclension"; Попытка Если ПодключитьВнешнююКомпоненту(ПутьККомпоненте, Перем1)ТОгда Результат = Перем1.Просклонять(СтрокаФИО,Падеж); КонецЕсли; Исключение Сообщить("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки()); КонецПопытки; Возврат Результат; КонецФункции а он ее не находит, в отладчике выпадает на сообщение об ошибке все равно |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |