Имя: Пароль:
IT
Админ
Склонение и усечение имен в 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.Просклонять(СтрокаФИО,Падеж);
       КонецЕсли;
    Исключение
        Сообщить("Не удалось загрузить внешнюю компаненту по причине: "+ОписаниеОшибки());
    КонецПопытки;
    Возврат Результат;

КонецФункции
а он ее не находит, в отладчике выпадает на сообщение об ошибке все равно