Как исправить ошибку склонения в 1 с

Возвращает варианты склонения указанной строки

Синтаксис

Функция ПолучитьСклоненияСтроки() имеет следующий синтаксис:

Массив ПолучитьСклоненияСтроки(СклоняемаяСтрока, [ОписаниеСтроки], [ФорматнаяСтрока])

А также альтернативный англоязычный синтаксис:

Array GetStringDeclensions(СклоняемаяСтрока, [ОписаниеСтроки], [ФорматнаяСтрока])

Параметры

Описание параметров функции ПолучитьСклоненияСтроки():

Имя параметра* Тип Описание
СклоняемаяСтрока Строка Содержит строку, которую нужно просклонять.
ОписаниеСтроки Строка Содержит перечисление параметров, уточняющих информацию о строке, которую нужно просклонять. Каждый параметр состоит из имени параметра и значения, разделенных знаком = (равно). Параметры перечисляются через символ «;» (точка с запятой). Возможные параметры:

Параметр
(Eng)
Описание
Л
(L)
Код локализации. Если не указан, берется из настроек операционной системы. В настоящий момент поддерживается только код локализации ru_RU русский язык
ПЛ
(GN)
Пол. Если не указан, платформа пытается определить его автоматически. Возможные значения: Мужской, Женский
ФорматнаяСтрока Строка Содержит перечисление параметров форматирования. Каждый параметр состоит из имени параметра и значения, разделенных знаком = (равно). Параметры перечисляются через символ «;» (точка с запятой). Возможные параметры:

Параметр
(Eng)
Описание
ПД
(CS)
Падеж. Если не указан, то склонение не выполняется (выдается исходная строка). Возможные значения: Именительный, Родительный, Дательный, Винительный, Творительный и Предложный
*Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Массив, содержащий возможные варианты склонения строки.

Описание

Функция ПолучитьСклоненияСтроки() склоняет указанную строку, содержащую имена существительные или числительные. Не рекомендуется использовать другие части речи, т.к. платформа не сможет привести их к согласованной форме.

Внимание! Метод доступен начиная с версии 1С:Предприятие 8.3.13

Внимание!! Начиная с версии 1С:Предприятие 8.3.18 исправлена ошибка, которая приводила к самопроизвольной замене буквы ё на е

Доступность

Сервер, толстый клиент, внешнее соединение.

Пример использования

Пример кода с использованием функции ПолучитьСклоненияСтроки():

Пример использования

Пример кода с использованием функции ПолучитьСклоненияСтроки():

мРезультат = ПолучитьСклоненияСтроки("дать Иванов Иван Иванович", , "ПД=Дательный");
Сообщить(мРезультат[0]);
//дать Иванову Ивану Ивановичу
мРезультат = ПолучитьСклоненияСтроки("одна тысяча сто один", , "ПД=Предложный");
Сообщить(мРезультат[0]);
//одной тысяче ста одном
мРезультат = ПолучитьСклоненияСтроки("говорить о одна тысяча сто один", , "ПД=Предложный");
Сообщить(мРезультат[0]);
//говорить о одна тысяча сто один (Правильно будет: говорить об одной тысяче ста одном)
мРезультат = ПолучитьСклоненияСтроки("101 далматинец", , "ПД=Творительный");
Сообщить(мРезультат[0]);
//101 далматинцем
мРезультат = ПолучитьСклоненияСтроки("159 ящиков помидоров", , "ПД=Предложный");
Сообщить(мРезультат[0]);
//159 ящиках помидоров

Обратите внимание, что не все сочетания получились согласованными, поэтому следует проверять получаемый результат.

Поделиться страницей в соц.сетях

Метки: Метки 1С:Предприятие 8.3.13

Помогите со склонением

Автор Алексей_1985_06, 15 мар 2021, 19:47

0 Пользователей и 1 гость просматривают эту тему.

Всем добрый вечер! Подскажите, что не так делаю? Необходимо при выборе реквизита (лицо издавшее приказ) просклонять его в родительном падеже. Т.е в справочнике “ДолжностныеЛица” запись например: Начальник отдела, а в РС(реквизит “Приказ”) нужно при выборе сделать чтоб была запись: НачальникА отдела.

Из общего модуля вызываю функцию:

&НаСервере
Функция ПолучитьСклонение(Реквизит,Падеж)Экспорт
Если 
Падеж = "Именительный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Именительный");
Результат = Склонение [0];
ИначеЕсли
Падеж = "Родительный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Родительный");
Результат = Склонение [0];
ИначеЕсли
Падеж = "Дательный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Дательный");
Результат = Склонение [0];
ИначеЕсли
Падеж = "Винительный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Винительный");
Результат = Склонение [0];
ИначеЕсли
Падеж = "Творительный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Творительный");
Результат = Склонение [0];
ИначеЕсли
Падеж = "Предложный" Тогда
Склонение = ПолучитьСклоненияСтроки(Реквизит, "Л=ru_RU", "ПД=Предложный");
Результат = Склонение [0];
КонецЕсли;

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

Процедура в модуле формы РС (ЗДЕСЬ И НЕ ПОЛУЧАЕТСЯ :dfbsdfbsdf:):
&

НаКлиенте
Процедура ПриказОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Запись.Приказ = ВызовСервера.ПолучитьСклонение(ВыбранноеЗначение,"Родительный");

КонецПроцедуры

Подскажите пжл, что надо допилить?



все отлично работает, (но не забываем про версии и совместимость платформы, так как доступно с 8.3.13)
вот результат работы, пример

рез = ПолучитьСклоненияСтроки(“Директор”, “Л=ru_RU”, “ПД=Дательный”);
сообщить(рез[0]); //возвращает массив, берем первый элемент
//Директору

рез = ПолучитьСклоненияСтроки(“Директор”, “Л=ru_RU”, “ПД=Родительный”);
сообщить(рез[0]); //возвращает массив, берем первый элемент
//Директора

если помогло нажмите: Спасибо!


Цитата: LexaK от 16 мар 2021, 10:31
все отлично работает, (но не забываем про версии и совместимость платформы, так как доступно с 8.3.13)
вот результат работы, пример

рез = ПолучитьСклоненияСтроки(“Директор”, “Л=ru_RU”, “ПД=Дательный”);
сообщить(рез[0]); //возвращает массив, берем первый элемент
//Директору

рез = ПолучитьСклоненияСтроки(“Директор”, “Л=ru_RU”, “ПД=Родительный”);
сообщить(рез[0]); //возвращает массив, берем первый элемент
//Директора

LexaK приветствую Вас! Да, все работает хорошо для “строки”, у меня “загвоздка” в следующем, тип реквизита регистра сведений: СправочникСсылка.ДолжностныеЛица, (начальниК ….) при выборе значения в этом реквизите необходимо чтоб было: начальникА… Подскажите пожалуйста, как лучше сделать такую штуку?


вот, блин, где вы такие задачи берете? или откуда такой подход к их решению?
запишите пару постулатов в свою базу навыков
1.все объекты в базе данных хранятся в нейтральном виде, настоящее время, именительный падеж и т.д.
ваш регистр сведений – это хранение данных!!!! не надо в нем ни чего склонять!!!!!

и только тогда когда вы что-то печатаете или выгружаете в документы или отправляете по почте (формируете текст, вложение,…)
вот только тогда склоняйте и спрягайте сколько вам влезет, но уже не сам объект/элемент/ссылку
а его наименование!!!

(из вашего описания даже не понятно, почему при выборе должности, должно измениться ее представление/склонение)

если помогло нажмите: Спасибо!


Цитата: LexaK от 16 мар 2021, 17:42
вот, блин, где вы такие задачи берете? или откуда такой подход к их решению?
запишите пару постулатов в свою базу навыков
1.все объекты в базе данных хранятся в нейтральном виде, настоящее время, именительный падеж и т.д.
ваш регистр сведений – это хранение данных!!!! не надо в нем ни чего склонять!!!!!

и только тогда когда вы что-то печатаете или выгружаете в документы или отправляете по почте (формируете текст, вложение,…)
вот только тогда склоняйте и спрягайте сколько вам влезет, но уже не сам объект/элемент/ссылку
а его наименование!!!

(из вашего описания даже не понятно, почему при выборе должности, должно измениться ее представление/склонение)

LexaK Спасибо Вам большое за помощь, пока учусь и набираюсь знаниями…. Очень благодарен за Ваши советы!


  • 1 Как включить склонения в 1С?
  • 2 Настройка падежей ФИО в договоре
  • 3 Как получить склонения программно с помощью компоненты из БСП?

Склонения в программах 1С это очень полезная функция. Для того, что бы она работала, нужно пройти на закладку «Администрирование» — «Интернет-поддержка и сервисы» — «Склонение представлений объектов» — ставим галочку — склонять с помощью сервиса Морфер. Чтобы это работало нужно включить Анонимный вход. Для этого нажимаем тут же «Настройки доступа» и ставим переключатель в нужное место.

Как настроить склонения 1с

Настройка падежей ФИО в договоре

Теперь давайте закончим настройку функции склонений и проверим ее работу. Для этого, идем в договора и откроем любой договор с контрагентом. В карточке, раскрываем вкладку Подписи. На ней должны быть заполнены имя и фамилия, а также должность и основание действия лица, подписавшего договор. Открываем окно «Склонения по падежам». Нажмем на кнопку со стрелочкой, вверху и программа получит склонения из сервиса и заполнит их автоматически. Компьютер, при этом, должен иметь подключение к интернет. Если, по каким-то причинам, доступа в сеть нет, можно заполнить значения строки вручную. После этого можно распечатать договор и убедится в правильности падежей.

Настройка падежей в договоре

Как получить склонения программно с помощью компоненты из БСП?

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

Как получить склонения программно с помощью компоненты из БСП

Непосредственно в коде я обращаюсь к модулю «СклонениеПредставленийОбъектов», к функции «ПроскланироватьПредставление» и передаю туда параметры. Цифра «2» означает родительный падеж.

Остались вопросы? — Закажите консультацию в один клик!


Александр Трубицын

Мой телеграм https://t.me/praktikaITS

Потребность в склонении фамилий, имен, отчеств, улиц, городов, должностей, званий и всего прочего возникает регулярно. И для решения этой задачи существуют проверенные и зарекомендовавшие себя способы. С выходом платформы 8.3.13 к этим способам добавился еще один — склонение средствами платформы, и именно этот способ видится наиболее правильным и удобным. Этот и прочие, достойные упоминания (по моему субъективному мнению), способы будут рассмотрены ниже.

Содержание

  1. Внешняя компонента
  2. Веб-сервис
  3. Средства платформы

Внешняя компонента

Начнем с самого, вероятно, популярно на сегодняшний день способа — внешняя компонента «Склонение ФИО». Эта компонента существует в двух вариантах: по технологии COM и по технологии Native API. Вариант выполненный по технологии Native API современнее и предпочтительнее.

При скачивании с сайта ИТС мы получаем архив который содержит файл «NAMEDECL.DLL» и файл «NameDecl.zip». Первый файл — это компонента по технологии COM, а второй файл — это архив содержащий компоненту по технологии Native API (он так и используется в архиве).

Компоненту выполненную по технологии COM сначала нужно зарегистрировать, командой «regsvr32» от имени администратора:

Регистрация внешней компоненты

Регистрация внешней компоненты

Пример использования:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

&НаКлиенте

Процедура КомпонентаCOM(Команда)

Компонента = “C:NameDecl.dll”;

Попытка

ЗагрузитьВнешнююКомпоненту(Компонента);

Объект = Новый(“AddIn.NameDeclension”);

Исключение

Сообщить(“Не удалось загрузить внешнюю компоненту по причине: ” + ОписаниеОшибки());

КонецПопытки;

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 2, 1)); //родительный, пол мужской

Сообщить(Объект.Просклонять(“Иванова Анна Ивановна”, 3, 2)); //дательный, пол женский

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 4)); //винительный, пол авто

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 5)); //творительный, пол авто

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 6)); //предложный, пол авто

КонецПроцедуры

Компоненту выполненную по технологии Native API регистрировать не нужно, ее необходимо поместить в общий макет (тип макета — «Внешняя компонента») и использовать примерно таким кодом:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

&НаКлиенте

Процедура КомпонентаNative(Команда)

УстановитьВнешнююКомпоненту(“ОбщийМакет.КомпонентаСклонений”);

Попытка

ПодключитьВнешнююКомпоненту(“ОбщийМакет.КомпонентаСклонений”, “NameDecl” , ТипВнешнейКомпоненты.Native);

Объект = Новый(“AddIn.NameDecl.CNameDecl”);

Исключение

Сообщить(“Не удалось подключить внешнюю компоненту по причине: ” + ОписаниеОшибки());

КонецПопытки;

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 2, 1)); //родительный, пол мужской

Сообщить(Объект.Просклонять(“Иванова Анна Ивановна”, 3, 2)); //дательный, пол женский

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 4)); //винительный, пол авто

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 5)); //творительный, пол авто

Сообщить(Объект.Просклонять(“Иванов Иван Иванович”, 6)); //предложный, пол авто

КонецПроцедуры

Как уже говорилось выше, компонента выполненная по технологии Native API предпочтительнее, так как работает и в ОС Linux, в тоже время ее можно использовать и на клиенте и на сервере.

Веб-сервис

Еще одним способом просклонять что-либо является использование веб-сервиса «Морфер». Сервис бесплатный, хотя имеет и платный вариант, кроме этого функционал «Морфера» доступен в виде платной внешней компоненты.

Основным недостатком данного метода является его негарантированная работоспособность — нет интернета или сервис не доступен.

Использование веб-сервиса выглядит так:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

&НаКлиенте

Процедура СервисСклонения(Команда)

СклоняемыйТекст = “Пушкин Александр Сергеевич”;

АдресСервера = “ws3.morpher.ru”;

Соединение = Новый HTTPСоединение(АдресСервера,,,,,, Новый ЗащищенноеСоединениеOpenSSL());

ТекстЗапроса = “/russian/declension?s=” + СклоняемыйТекст;

Заголовки = Новый Соответствие;

Заголовки.Вставить(“User-Agent”, “1C Enterprise 8.3”);

Заголовки.Вставить(“Accept”, “application/json”);

Заголовки.Вставить(“charset”, “UTF-8”);

Запрос = Новый HTTPЗапрос(ТекстЗапроса, Заголовки);

Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда

ЧтениеJSON = Новый ЧтениеJSON;

ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);

ЧтениеJSON.Закрыть();

Сообщить(СтруктураОтвета.Р);

Сообщить(СтруктураОтвета.Д);

Сообщить(СтруктураОтвета.В);

Сообщить(СтруктураОтвета.Т);

Сообщить(СтруктураОтвета.П);

КонецЕсли;

КонецПроцедуры

Отмечу, что приведен минимально необходимый код, для реального применения будет разумно добавить какие-то проверки и обработки возможных ошибок.

Средства платформы

И, наконец, рассмотрим недавно добавленную функцию «ПолучитьСклоненияСтроки». Данная функция не блещет функциональностью (вероятно, со временем это изменится), но свою основную задачу выполняет исправно и очень проста в использовании. Третий параметр функции указан как необязательный, но если его не указать, то склонение не будет выполнено. В следующей версии платформы — 8.3.14, была добавлена еще одна функция: ПолучитьСклоненияСтрокиПоЧислу()» . Она позволяет формировать фразы которые содержать какое-либо значение. Пример использования обеих функций:

&НаСервере

Функция СклонениеПлатформаНаСервере()

Результат = ПолучитьСклоненияСтроки(“Пушкин Александр Сергеевич”, “Л=ru_RU;ПЛ=Мужской”, “ПД=Родительный”);

//Результат[0] //Пушкина Александра Сергеевича

//эта функция доступна в версии платформы 8.3.14 и выше

Результат = ПолучитьСклоненияСтрокиПоЧислу(“стул”, 12, “”, “ЧС=Порядковое”, “ПД=Родительный; ПЧ=ЧислоСОкончанием”);

//Результат[0] //12-го стула

Результат = ПолучитьСклоненияСтрокиПоЧислу(“автомобиль”, 5, “”, “ЧС=Количественное”, “ПД=Дательный; ПЧ=ЧислоПрописью”);

//Результат[0] //пяти автомобилям

Результат = ПолучитьСклоненияСтрокиПоЧислу(“медный купорос”, 3.5, “килограмм, грамм, 2”, “ЧС=Количественное”, “ПД=Винительный; ПЧ=ЧислоПрописью”);

//Результат[0] //три килограмма пятьдесят граммов медного купороса

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

На этом все, надеюсь, что данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

 +1 

   

Распечатать

1С 8.3 : Сообщение «Ошибка загрузки внешней компоненты для склонения ФИО! Функции склонения будут недоступны!

Сообщение «Ошибка загрузки внешней компоненты для склонения ФИО! Функции склонения будут недоступны!» при запуске конфигурации «1С:Предприятие Зарплата и Управление Персоналом 2.5 появляется в случае отсутствия компоненты NameDecl.dll или если данная компонента не зарегистрирована в системе (обычно это бывает после установки платформы 1cv8 не под правами администратора операционной системы).

В случае отсутствия компоненты, ее можно найти на диске ИТС и переписать в каталог /bin/ установленной платформы «1С:Предприятие 8.
Если после этого ошибка все равно остается (такое возможно, например, при работе под управлением ОС «Windows Vista» или «Windows 7) – необходимо зарегистрировать компоненту «вручную».

Для этого в командной строке ОС можно набрать команду regsvr32 «[Путь к DLL]NameDecl.dll» и выполнить ее под правами администратора.
Здесь [Путь к DLL], скорее всего, для платформы 1cv81 – «С:Program Files1Cv81bin», а для платформы 1cv82 – «С:Program Files1cv828.2.9.356bin». При наборе пути к файлу необходимо заключить его в двойные кавычки.

Если при регистрации таким способом возникла ошибка – «Модуль «[Путь к DLL]NameDecl.dll» загружен, но не удалось выполнить вызов DllRegisterServer, код ошибки 0х80070005, то можно попробовать выйти из положения следующим образом:

1. На компьютере находим файл NameDecl.dll (скорее всего, для платформы 1cv81 он находится в «С:Program Files1Cv81bin», а для платформы 1cv82 в «С:Program Files1cv828.2.9.356bin»). Для найденного файла создаем ярлык и выносим его на рабочий стол.
2. На рабочем столе правой кнопкой мыши вызываем свойства этого ярлыка.
3. В свойствах на закладке «Ярлык» в окне «Объект» перед путем к файлу вставляем команду regsvr32 (помним, что путь должен быть в двойных кавычках).
4. На этой же закладке свойств ярлыка жмем на кнопку «Дополнительно». В открывшемся диалоге устанавливаем флажок «Запуск от имени администратора» и сохраняем внесенные изменения.
5. Запускаем ярлык для регистрации компоненты NameDecl.dll (обычно запуск регистрации через ярлык достаточно произвести один раз).
6. После регистрации компоненты ярлык можно удалить.

Добавить комментарий