Учим внешнюю компоненту правильному склонению не только ФИО, но и должностей, и подразделений (ЗУП 2.5)

10.12.10

Задачи пользователя - Адаптация типовых решений

Многие из нас сталкивались с проблемой неверного склонения должностей и подразделений внешней компонентой склонения ФИО. Результат при этом может напоминать следующее:

1.Именительный  "Главный специалист"
2.Родительный "Главныя специалиста"
3.Дательный  "Главныю специалисту "
4.Винительный  "Главныя специалиста "
5.Творительный  "Главныем специалистом "
6.Предложный "Главные специалисте "

Метод борьбы с данным недугом предлагаю ниже.

Метод прост и достаточно эффективен.

Суть решения: разложить фразу, состоящую из нескольких слов на отдельные слова, и просклонять каждое из них отдельно.

Ниже привожу пример кода.

ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);

.......................................

................................

....................................

Функция ПросклонятьФразуПоСловам(Знач ИсходнаяСтрока, Падеж) Экспорт

   
Результат = "";

   
ИсходнаяСтрока = СокрЛП(ИсходнаяСтрока);
    Если
СтрДлина(ИсходнаяСтрока) = 0 Тогда
        Возврат
Результат;
    КонецЕсли;

   
Поз = Найти(ИсходнаяСтрока, " ");
    Пока
Поз > 0 Цикл

       
СловоВПадеже = "";

       
Слово = Лев(ИсходнаяСтрока, Поз-1);
       
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), Слово,       Падеж, , СловоВПадеже);

       
Результат = СокрЛП(Результат + " " + НРег(СловоВПадеже));
       
ИсходнаяСтрока = СокрЛП(Сред(ИсходнаяСтрока, Поз));

        Если
ПустаяСтрока(ИсходнаяСтрока) Тогда
            Прервать;
// Это перестраховка. Цикл и так должен прерваться
       
КонецЕсли;

       
Поз = Найти(ИсходнаяСтрока, " ");
    КонецЦикла;

    Если НЕ
ПустаяСтрока(ИсходнаяСтрока) Тогда // добавляем заключительное слово
       
СловоВПадеже = "";
       
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ИсходнаяСтрока, Падеж, , СловоВПадеже);
       
Результат = СокрЛП(Результат + " " + НРег(СловоВПадеже));

    КонецЕсли;
    Возврат
Результат;

КонецФункции
// ПросклонятьФразуПоСловам()

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    6113    15    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4250    15    1    

33

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6783    73    10    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5318    dimanich70    15    

22

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    7179    dimanich70    9    

19

Адаптация типовых решений Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    3652    30    TempTablesManager    14    

54
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sound 536 21.11.10 00:28 Сейчас в теме
Исправьте опечатку "павильному" в заголовке
2. Alraune 1505 21.11.10 00:30 Сейчас в теме
3. sound 536 21.11.10 00:33 Сейчас в теме
(2) странно, что я только одну ошибку заметил, наверно спать пора :)
4. Abadonna 3968 21.11.10 02:10 Сейчас в теме
Чем так париться с перемещением по пробелу, имхо, проще так:
// избавимся от лишних пробелов
	// запросто могут быть!
	Пока Найти(Стр,"  ")>0 Цикл
		Стр=СтрЗаменить(Стр,"  "," "); // двойной пробел на одинарный
	КонецЦикла;
	// делаем многострочной и потом с ней работаем
	Стр=СтрЗаменить(Стр," ",Символы.ПС);
	Сообщить(Стр);
Показать

В результате вместо:
главный_ _ _ _ _специалист (_ - пробелы)
получим:
главный
специалист
Для А=1 По СтрЧислоСтрок(Стр) Цикл
		БудемСклонять=СтрПолучитьСтроку(Стр,А);
КонецЦикла

Istur; borman; director04; +3 Ответить
5. director04 3660 21.11.10 08:04 Сейчас в теме
Спасибо всем лингвистам за поправки - всегда был не в ладах с "великим и могучим" :D
Отдельное и искренне спасибо (4) за конструктивное пожелание. Код не претендует на максимальную оригинальность, а всего лишь показывает путь объезда узких мест в работе внешней компоненты.
Если кому поможет - буду рад.
6. XoloD 14 25.11.10 07:42 Сейчас в теме
А если в родительном склонять должность заместитель генерального директора, то на выходе получается заместителя главного директорЫ
8. XoloD 14 26.11.10 08:49 Сейчас в теме
(6) на выходе получается заместитель генерального директорЫ :)
14. Лингвист 98 11.11.11 14:46 Сейчас в теме
Вся эта тема возникла из того, что встроенный в ЗУП механизм не справляется со склонением должностей, а предлагаемый метод разбивки на слова приводит к результатам:

(8) заместитель генерального директорЫ
(9) начальника службы управлении персоналома

Буду рад, если покажете, как получить правильное склонение бесплатно.
7. Kuzkin_otets 51 25.11.10 09:47 Сейчас в теме
Описание склоняемых фраз на старославянском - это однозначна плюс!!! :)
Да призовете Главные специалисте!!!
И да починита косяки юзерския!!! :)
9. CC 04.05.11 15:49 Сейчас в теме
начальника службы управлении персоналома :D
10. cool.vlad4 2 04.05.11 15:55 Сейчас в теме
(9) надо делить пополам
Кто? — начальник службы
Кого? — начальника службы (родительный падеж)
Кому? — начальнику службы
Кого? — начальника службы (винительный падеж)
Кем? — начальником службы
О ком? — о начальнике службы

и вторая часть управления персоналом, в общем я пользуюсь http://nano.yandex.ru/project/inflect/ без компонент
director04; +1 Ответить
11. 79044970523 934 31.08.11 17:35 Сейчас в теме
Используйте немного упрощённую функцию. Работает на конфигурациях "БП,ЗУП,КА,УПП"

Перем КомпонентаСклоненияФИО;

Функция
ПросклонятьФразуПоСловам(Знач Должность, Падеж) Экспорт
Результат = "";
Для каждого
Элемент из ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Должность, " ") Цикл
Результат = Результат + КомпонентаСклоненияФИО.Просклонять(Элемент, Падеж) + " ";
КонецЦикла;
Возврат
СокрЛП(Результат);
КонецФункции

КомпонентаСклоненияФИО = глЗначениеПеременной("глКомпонентаСклоненияФИО");
Slava.62.ru; Asenka; welder; JohnConnor; Alexey_Gru; Ivanov_EV; atol_zlat; XelOla; adhocprog; Ikarus; albatros12; www2000; biz-intel; Iaskeliainen; askorn; +15 Ответить
12. Лингвист 98 11.11.11 12:10 Сейчас в теме
Есть платная внешняя компонента Morpher.dll, вышеупомянутые должности склоняет на ура:

генеральный директор
главный специалист
начальник службы управления персоналом

http://morpher.ru/1c
13. director04 3660 11.11.11 12:21 Сейчас в теме
(12)
Лингвист пишет:
Есть платная внешняя компонента Morpher.dll, вышеупомянутые должности склоняет на ура:


А зачем платить деньги, если можно получить тот же результат - бесплатно?
PS: Если не ошибаюсь, разработчики ЗУП уже включили данный механизм в типовую конфигурацию.
15. nikk 54 29.11.11 08:21 Сейчас в теме
Спасибо.
Использовал на Комплексной автоматизации, склоняет как надо.
От меня Вам +
16. hobi 616 22.04.12 17:43 Сейчас в теме
С должностями и подразделениями не все так однозначно, как с ФИО (да и при склонении ФИО встречаются ошибки, например когда фамилия "по жизни" не склоняется, а компонента её склоняет). Особенность склонения представлений объектов, не являющихся ФИО, в том, что нужно склонять не все слова.

Поскольку фантазия пользователей не ограничена, они вводят такие должности, которые "без разбега" и не выговорить. Как, например, просклонять следующую должность :

Первый заместитель руководителя дивизиона - Управляющий директор ЗАО "Рога и копыта" ?
В дательному падеже нужно бы получить
Первому заместителю руководителя дивизиона - Управляющему директору ЗАО "Рога и копыта" .
Т.е. склонять нужно первое, второе, пятое и шестое слово !

Мне кажется, единственный подходящий способ следующий:

- добавить в конфигурацию регистр сведений "ИсключенияСклонений", который имеет единственное строковое измерение "ИменительныйПадеж" и строковые ресурсы по остальным падежам;
- в общий модуль ввести функцию "Просклонять" с двумя аргументами - склоняемая строка и номер падежа; Эта функция должна вначале искать нормализованное (в одном регистре, без лишних пробелов и знаков препинания) представление строки в регистре "ИсключенияСклонений". Если нашла, возвращать значение ресурса, соответствующее падежу. Если не нашла - возвращать результат склонения каждого слова с помощью компоненты склонения ФИО;
- вынести в интерфейс печатных форм кнопку "Исключение склонений", которая будет вызывать, например, поиск строки выделенного блока результата печати в регистре ИсключенияСклонений и открывать форму для модификации или добавления исключений.

Т.е. общий принцип - пользователь должен проверить результат печати (в табличном или текстовом документе) и, если считает, что фраза "Заместителя директора по кадрама" выведена неверно, выделить ошибочную фразу и нажать кнопку.

Более изящного решения в голову не приходит.
17. director04 3660 22.04.12 18:07 Сейчас в теме
(16) hobi, Мое решение я не ставлю как альфа и омега - это всего лишь удобный способ объехать большинство камней (не зря его взяли разработчики ЗУП в новые релизы конфигурации). Конечно неточностей склонений еще более чем предостаточно, но, в разы менее чем при стандартном методе.

По вашему варианту решения: мое мнение - слишком громоздко и сложно для пользователей.
Подозреваю, что и при этом методе вполне возможны подводные камни. Один изобретает щит, который не берет ни одно копье, другой - копье, которое пробивает любой щит ))))) Велик и многообразен руский язык. Без работы не останемся.

PS: Спасибо за предложенное решение.
18. Лингвист 98 22.04.12 18:36 Сейчас в теме
(16) hobi,

Да, возможность проверки и корректировки склонения пользователями могла бы многим упростить жизнь. Жаль, что ее нет в стандартных средствах 1С. А пока можно использовать стороннюю компоненту, которая правильно склоняет приведенный вами пример:

Первый заместитель руководителя дивизиона - Управляющий директор ЗАО "Рога и копыта"

И даже во множественном числе! :) Вот описание компоненты:

http://morpher.ru/1c
director04; +1 Ответить
19. director04 3660 22.04.12 19:18 Сейчас в теме
(18), Да я ЗА качественный коммерческий контент. Но, у человека должен быть и выбор: если человек не готов голосовать рублем, то данное решение эффективно, как правило в 85 случаях из 100.
Только опять же, не стоит нарушать правила форума, которые не разрешают ссылки на сторонние ресурсы. Надо искать альтернативные способы саморекламы. Вам ведь, как и руководству Инфостарта, было бы неприятно видеть на своем сайте рекламу других ресурсов? Я не прав?
20. Лингвист 98 22.04.12 19:45 Сейчас в теме
(19) поддерживаю Вас в том, что у каждого должен быть выбор. И сообщение написал с этой целью - дать интересующимся этой темой возможность информированного выбора. Спамом я считаю не относящующся к теме информацию, а моя информация как раз в тему. На сайте Морфер.ру много ссылок на сторонние ресурсы, в т.ч. на конкурирующие продукты: http://morpher.ru/Competition

Если нарушил правила форума, прошу прощения. Правила, запрещающего "ссылки на сторонние ресурсы", я не нашел. Было бы глупо запрещать релевантные, полезные ссылки. Пускай нас рассудит модератор.
21. director04 3660 22.04.12 21:02 Сейчас в теме
Спамом я считаю не относящующся к теме информацию, а моя информация как раз в тему. На сайте Морфер.ру много ссылок на сторонние ресурсы, в т.ч. на конкурирующие продукты: http://morpher.ru/Competition


Да, пожалуйста, собственно я не против, публикация то бесплатная ! :)
22. torgmontag_cto 11.07.12 08:54 Сейчас в теме
Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)
ДолжностьРуководителяРодительный=ПросклонятьФразуПоСловам(<<?>>ДолжностьРуководителя,2); (Проверка: Толстый клиент (обычное приложение))

Или где-то надо что-то дописать?
23. director04 3660 11.07.12 09:06 Сейчас в теме
(22) torgmontag_cto,
Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)



Андрей, для начал необходимо чтоб вы озвучили версию программы. (включая название и номер релиза).
Постараюсь помочь. Правда сейчас сильно отвлекает отчетность.
24. torgmontag_cto 11.07.12 11:42 Сейчас в теме
ЗУП_2.5.50.1 (8.2) Мне нужно просклонять ФИО и должность руководителя в трудовом договоре.
Поправьте,пожалуйста,если что-то делаю не так...
Добавляю строчку в коде(Общие Модули/Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, ЭтотОбъект) Экспорт):
ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);

Добавляю Функцию...пишет ошибку:Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)
25. director04 3660 11.07.12 12:37 Сейчас в теме
(24) torgmontag_cto,
Добавляю Функцию...пишет ошибку:Пишет ошибку: {ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(280,61)}: Переменная не определена (ДолжностьРуководителя)


Андрей, содержание ошибки говорит о том, что вы, перед тем как вызвать процедуру
"ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2);"

не определили переменную "ДолжностьРуководителя". То есть, программе нужно определить, откуда взять значение этой переменной.
БОлее подробно могу дать совет, тоько после того, как вы дадите кусок редактируемого кода.
26. torgmontag_cto 12.07.12 06:37 Сейчас в теме
Строку:ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2); поменял на:
Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
и в самом макете задал параметр [ДолжностьРуководителяРП],но теперь на печатную форму вообще не выводится должность.
код:
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, ЭтотОбъект) Экспорт

// Получить экземпляр документа на печать
Если ИмяМакета = "Печать" Тогда

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТрудовойДоговор_Печать";

// получаем данные для печати
Выборка = ЭтотОбъект.СформироватьЗапросДляПечатиТрудовогоДоговора().Выбрать();

// получаем макет
Макет = ЭтотОбъект.ПолучитьМакет("Макет");

// выводим данные
Если Выборка.Следующий() Тогда
Макет.Параметры.Заполнить(Выборка);
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок)," месяцев", "" + Выборка.ИспытательныйСрок + " месяца(ев)" );
Макет.Параметры.РежимРаботы = "" + Выборка.ВидГрафика + "; " + Выборка.ДлительностьРабочейНедели + " - часовая рабочая неделя";
Макет.Параметры.ФормаОплаты = "Форма оплаты: " + Выборка.ВидРасчета + "; Оклад (тариф) = " + Выборка.ТарифнаяСтавка + " ("+Выборка.ВалютаТарифнойСтавки+")";
Макет.Параметры.ПолноеНазваниеОрганизации = СокрЛП(Макет.Параметры.ПолноеНазваниеОрганизации);
Макет.Параметры.ДокументКемВыдан = СокрЛП(Макет.Параметры.ДокументКемВыдан);
//***************
Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
//*************

ВыборкаПерсональныхНадбавок = Выборка.ПерсональныеНадбавки.Выбрать();
Если ВыборкаПерсональныхНадбавок.Количество()>0 Тогда
СтрокаНадбавки = "Персональные надбавки: ";
Пока ВыборкаПерсональныхНадбавок.Следующий() Цикл
СтрокаНадбавки = СтрокаНадбавки + ВыборкаПерсональныхНадбавок.Надбавка + "- " + ВыборкаПерсональныхНадбавок.Показатель1 + "; ";
КонецЦикла;
Макет.Параметры.Надбавки = СтрокаНадбавки;
КонецЕсли;
КонецЕсли;

// выводим готовый документ
ТабДокумент.Вывести(Макет);

Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, "Трудовой договор");

ИначеЕсли ИмяМакета = "РегламентированныйОтпуск" Тогда
ФормированиеПечатныхФормЗК.ПечатьСправкиПоРегламентированнымОтпускамСотрудника(ЭтотОбъект.Ссылка);

ИначеЕсли ИмяМакета = "УправленческийОтпуск" Тогда
ФормированиеПечатныхФормДополнительный.ПечатьСправкиПоУправленческимОтпускамСотрудника(ЭтотОбъект.Физлицо, ЭтотОбъект.Ссылка);

Иначе
СотрудникиОрганизацийДополнительный.ПечатьДополнительныхПечатныхФорм(ИмяМакета, КоличествоЭкземпляров, НаПринтер, ЭтотОбъект);

КонецЕсли;

КонецФункции // Печать
27. director04 3660 12.07.12 07:36 Сейчас в теме
(26) torgmontag_cto,
Строку:ДолжностьРуководителяРодительный = ПросклонятьФразуПоСловам(ДолжностьРуководителя, 2); поменял на:
Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
и в самом макете задал параметр [ДолжностьРуководителяРП],но теперь на печатную форму вообще не выводится должность.


Андрей, а для чего в самом макете вы объявили параметр [ДолжностьРуководителяРП] ?
Посмотрите, выделенную вами красную фразу - там вы присваиваете значение параметру "ДолжностьРуководителя "

Измените либо название параметра в Макете, либо измените красную строку на следующую:

//***************
Макет.Параметры.ДолжностьРуководителяРП = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
//*************


Если не поможет, тогда рекомендую обратиться к более опытному программисту - подскажет.
28. torgmontag_cto 12.07.12 09:53 Сейчас в теме
Если так:
Макет.Параметры.ДолжностьРуководителяРП = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
то должность вообще не выводится.
Если так:
Макет.Параметры.ДолжностьРуководителя = ПросклонятьФразуПоСловам(Выборка.ДолжностьРуководителя,2);
то выводит в именительном падеже.
Но все равно спасибо...
29. torgmontag_cto 12.07.12 11:59 Сейчас в теме
Компонента работает,прошу прощения,не заметил,в типовой форме трудового договора должность склоняется.У меня внешняя обработка,скорее всего из-за этого.
30. torgmontag_cto 12.07.12 12:25 Сейчас в теме
Единственное,ФИО пишет с маленькой буквы
33. kanalex 25 18.10.12 13:48 Сейчас в теме
(30)надо убрать нРег() из кода, тогда все будет ОК
31. quares 21 05.09.12 15:57 Сейчас в теме
Не работает. Попробуйте: "Заведующий отделением"
32. director04 3660 06.09.12 11:52 Сейчас в теме

Не работает. Попробуйте: "Заведующий отделением"


Согласен. Корректная работа склонений достигается на 95% словосочетаний.
Считаю, что это невысокая плата за "бесплатное решение проблемы".

Оставшиеся 5% словосочетаний можно поправить врукопашную. Если это так критично, то можно использовать платные внешние компоненты.
Выбор остается за вами.
34. AlexO 135 18.10.12 14:32 Сейчас в теме
Меня всегда интересовал вопрос - а почему СклонениеФИО нужно выносить обязательно в отдельную компоненту? 1с-ники настолько тупы, что даже написать Склонение ФИО не могут на своем извращенческом языке? :)
50. spe1c 5 15.11.15 17:49 Сейчас в теме
(34) AlexO, Уже давно написан алгоритм склонения ФИО на языке 1С, я нашел в яндексе за 10 минут
35. inv7 8 31.05.13 15:07 Сейчас в теме
Потребовалось в фразе не изменять заглавные буквы. добавил параметр в вызове.


Функция ПросклонятьФразуПоСловам(Знач ИсходнаяСтрока, Падеж, НР=ложь) Экспорт
...
Результат = СокрЛП(Результат + " " + ?(НР,НРег(СловоВПадеже),СловоВПадеже));
...

Автору респект.
alexpa2005; +1 Ответить
36. alexpa2005 11.06.13 08:48 Сейчас в теме
Использовал код публикации с поправкой (35). Действительно, работает более корректно!!! Автору плюс.
37. maxim72e 18 17.07.13 10:55 Сейчас в теме
Спасибо, избавили от траты времени на создание велосипеда. Автору плюс.
38. Sasha255n 27.09.13 11:04 Сейчас в теме
У меня такой вопрос. Вот предположим стоит такая задача просклонять фамилию, но есть фамилии какие не склоняются типа Герасимчук как отделить те какие склоняются от тех какие не склоняются?
39. director04 3660 27.09.13 11:38 Сейчас в теме
У меня такой вопрос. Вот предположим стоит такая задача просклонять фамилию, но есть фамилии какие не склоняются типа Герасимчук как отделить те какие склоняются от тех какие не склоняются?


Внесу ясность. Предложенный мной метод не подмена внешней компоненты, а всего лишь более эффективное ее использование.
Компонента не в состоянии 100- процентно определить необходимость склонения.

Но решение все же есть.

Я поступил следующим образом:
= добавил новый регистр сведений. Всего одно измерение "Падеж именит" - тип строка. И 5 ресурсов (все падежи)
= При склонении фраз проверяю, есть ли в данном регистре точное соответствие фразы именительной, если есть, то выбираю склонение.
В случае, если фраза не определена, то использую для склонения внешнюю компоненту (как рассказывал выше)
Достоинство: склонять правильно можно абсолютно все . Правильный вариант определяет сам пользователь.
jobkostya1c_ERP; +1 Ответить
45. AlexO 135 09.06.15 17:50 Сейчас в теме
(39)
И 5 ресурсов (все падежи)
Маловато у вас падежей....
(40) KliMich,
Наверное идеального решения не сущестрвует...
Может существовать. Просто подходить надо академически.
вот тут уже писал на эту тему
40. KliMich 27.09.13 12:13 Сейчас в теме
Спасибо! Пригодилось.

P.S. Хотя не все должности и подразделения склоняет правильно (не взяло примерно 10%). Наверное идеального решения не сущестрвует...
41. елена777 27 10.03.14 14:41 Сейчас в теме
Спасибо, пригодилось! Но не все названия должностей и подразделений склоняет верно...
42. taasha25 13 05.09.14 11:46 Сейчас в теме
43. agentesecreto 66 20.05.15 15:40 Сейчас в теме
УниверсальныеМеханизмы.Просклонять() в ЗУП 8.2 нормально склоняет Генерального директора, а в БП 8.2 почему-то выдает Генеральныя...
спасибо автору
44. agentesecreto 66 09.06.15 16:41 Сейчас в теме
и все равно косячок, в родительном падеже... если должность вида прилагательное-существительное (например Генеральный директор) то склоняет правильно. а в случае если должность вида существительное-существительное (например если "Председатель правления", то результат будет "Председателя правлении"). для таких экзотических должностей пришлось сделать проверку на окончение второго слова, и если заканчивается на "-ия" то склонять только первое слово.
46. AlexO 135 09.06.15 17:53 Сейчас в теме
(44) agentesecreto,
пришлось сделать проверку на окончение второго слова, и если заканчивается на "-ия" то склонять только первое слово.
Лаврентий <Палыч> Берия что-нибудь отстрелил бы, наверное, за такие склонения ))
47. Tapochki-tmn 43 23.07.15 08:04 Сейчас в теме
Даже при разбиении на отдельные слова:

Начальник отдела продаж = Начальника отделы продажа

Так что, разделение на слова не панацея, конечно.
Где-то работает, где-то нет.
Проверял в УПП 1.3 и в ЗУП на 23.07.2015 - одинаково.

Наилучший вариант, который смог придумать - дополнительный реквизит в форме справочника должностей для указания должности в родительном падеже.
Избавляет программиста от необходимости ломать голову как впихнуть невпихуемое, от ответственности за неверное склонение, от лишних деньгозатрат на платные компоненты.
Кому надо больше падежей, тому реализовывать более сложные механизмы, а для вывода должности в печатных формах договоров вполне сойдет.
48. director04 3660 23.07.15 11:35 Сейчас в теме
(47) Tapochki-tmn, Я у себя использую другой способ: добавил в конфигурацию отдельный регистр сведений "СклоненияПроизвольныхФраз". Добавил в интерфейс пользователя вызов формы записи. Регистр имеет одно измерение "ИменительныйПадеж" и пять ресурсов - остальные падежи.
При попытке получить склонение универсальная функция менеджера данного регистра пытается найти требуемую вам фразу по им-му падежу. Если находит - по возвращает требуемый падеж, какой заказал пользователь, ну а если не находит - то пытается просклонять по словам.
sidorov8; +1 Ответить
49. m_o 54 30.09.15 11:28 Сейчас в теме
51. semina-2016 04.12.15 11:49 Сейчас в теме
Спасибо автору еще раз))
52. Alexey_Gru 35 19.04.16 19:25 Сейчас в теме
Спасибо автору! Очень пригодилось с минимальными доработками!
53. lemni 67 29.07.16 19:24 Сейчас в теме
С подразделениями хуже. Стандартная компонента не хочет работать со средним родом. Например, Основное производство, компонента вообще никак не склоняет (ни по отдельности по словам, ни фразу целиком).
54. lemni 67 29.07.16 19:25 Сейчас в теме
Подскажите, Вы сталкивались со средним родом, может уже есть пути решения?
55. director04 3660 30.07.16 08:27 Сейчас в теме
(54) lemni, Почитайте предыдущие посты - там есть решения с использованием доп. регистров сведений (лично я делаю так, да и в типовых редакциях 3.0 аналогичное решение).
Если же конфигурация под замочком, то тогда можно "правильное" склонение хранить в хранилище значения, ключем фразы можно назначить саму фразу + падеж.
56. MICK77 15 11.08.16 16:59 Сейчас в теме
беда стандартного склонения это должности типа управляющий - управляющего
еще на 77 были функции ПадежС и ПадежП. ПадежП как паз склоняет должности вполне корректно
57. cry 16 13.02.18 12:05 Сейчас в теме
столкнулся с данной проблемой, помогло public/330103/
58. Tavisdm 28.03.18 12:24 Сейчас в теме
ЗУП 3.1.
Сотрудник -> Должность -> Позиция штатного расписания -> Наименование -> Склонение по падежам.
Подскажите, пожалуйста, как можно получить во ВПФ эту информацию для выбранного сотрудника.
59. director04 3660 28.03.18 13:05 Сейчас в теме
В ЗУП3.1 имеется механизм "Склонения объектов". Он позволяет для любой должности указать "правильное" склонение. (Просто зайти в элемент справочника и указать варианты для всех падежей)
60. Tavisdm 29.03.18 19:02 Сейчас в теме
(59) Спасибо за желание помочь. Но я не понимаю с чем мне связывать в запросе справочник Сотрудники. Подскажите, пожалуйста!
61. director04 3660 30.03.18 07:14 Сейчас в теме
(60)
Спасибо за желание помочь. Но я не понимаю с чем мне связывать в запросе справочник Сотрудники. Подскажите, пожалуйста!


С регистром сведений "СклоненияПредставленийОбъектов". А лучше, воспользуйтесь функциями общих модулей библиотеки стандартных подсистем, такие как:

- СклонениеПредставленийОбъектов.ПросклонятьФИОСПомощьюКомпоненты()
- СклонениеПредставленийОбъектов.ПросклонятьПредставление
- СклонениеПредставленийОбъектов.ПросклонятьФИО
- СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежам
62. Tavisdm 01.04.18 19:37 Сейчас в теме
(61) Спасибо, Валерий, за подсказку. Сам не сообразил.
63. lev6975 19.11.19 18:14 Сейчас в теме
О, не, даже и не пытался... Ничем не заставишь программу склонять должность "оператор котлов", например, не как ФИО, он непременно просклоняет "оператора котлова")))
Поступил проще - в расширении к справочнику должности прибабахал поле "должность в родительном", пускай при создании новой должности заполняют сами один раз а потом юзают без вопросов
64. director04 3660 19.11.19 21:49 Сейчас в теме
Статья написана в махровые времена, когда Сергей Нуралиев даже не догадывался о том, что изобретет расширения конфигураций.
Сегодня гораздо удобней воспользоваться подсистемой склонение обьектов, входящей в БСП любой конфигурации
Оставьте свое сообщение