Как сделать склонение по падежам в 1с
В системе 1С есть возможность подключать внешние компоненты. Компонент "Склонение ФИО" предназначен для склонения фамилии, имени и отчества на русском языке. Данный компонент может склонять только строки из трёх слов. Многие типовые конфигурации содержат данный компонент в общих макетах и функции в общих модулях для работы с ним. Если в конфигурации присутствует данный механизм, то при создании внешних отчетов или обработок можно воспользоваться готовыми функциями склонения ФИО.
Например в типовой конфигурации "Зарплата и кадры бюджетного учреждения 1.0", компонента склонения хранится в общем макете "КомпонентаСклоненияФИО". Функция Просклонять() расположена в общем модуле "УниверсальныеМеханизмы".
Компонента поставляется на дисках ИТС в папке 1CITSEXEAPPEXTCOMP. Если ИТС-диска нет, то свежую версию компоненты склонения ФИО можно скачать с сайта ИТС скачать appextcomp.zip .
Компонента Склонение ФИО
Объект компоненты содержит метод Просклонять (Decline). Данная функция на вход принимает три параметра: ФИО, Падеж, Пол. Возвращает строку содержащую результат склонения ФИО.
Параметр ФИО
Обязательный параметр, тип Строка. Содержит фамилию имя отчество в именительном падеже единственного числа. Фамилия имя отчество должны быть разделены пробелами.
Параметр Падеж
Обязательный параметр, тип Число. Номер падежа в котором необходимо просклонять ФИО.
- 1 - Именительный
- 2 - Родительный
- 3 - Дательный
- 4 - Винительный
- 5 - Творительный
- 6 - Предложный
- 0 - авто
- 1 - мужской
- 2 - женский
Примечание:
Чтобы использовать данную компоненту в "Обычном приложении" нужно чтобы в свойстве конфигурации
"Режим использования синхронных вызовов расширений и внешних компонент" стояло "Использовать".
Иначе будет появляется ошибка: Использование синхронных методов на клиенте запрещено!
Комментарии (2)
1. kassbar 05.02.2017 17:38 |
не работает : Поле объекта недоступно для записи (ФИО) Возврат Объект.Просклонять(ФИО, Падеж); |
2. Admin 08.02.2017 12:25 |
Написал в примечании почему может возникать такая ошибка. В типовых конфигурациях свойство "Режим использования синхронных вызовов расширений и внешних компонент" по умолчанию включено. |
Функция предназначена для склонения выражений, которые часто требуется при формировании печатных форм договоров и прочих печатных форм. Функция склоняет по падежам ФИО, должности, числительные, валюты, единицы измерения, предметы. Также функция склоняет глаголы и прилагательные по числам и родам и существительные по числам. Имеется режим определения рода переданного выражения. Поддержка форматной строки для вывода результата. Функция не использует внешние библиотеки и веб-сервисы, написана на чистом языке 1С, и поэтому легко встраивается в любую конфигурацию или внешнюю обработку. Правила склонения оформлены в виде таблицы и могут быть легко изменены при необходимости.
На данный момент существует минимум 10 подобных функций для склонения ФИО, не считая стандартной, которые можно вызывать из кода 1С. Зачем написана еще одна, и чем она лучше остальных? Была протестирована каждая из найденных функций, но ни одна из них не подошла - либо большое количество ошибок при склонении, либо неудобство использования, либо и то и другое.
Многие функции для своей работы используют внешние библиотеки - перед началом использования требуется зарегистрировать библиотеку под администраторскими правами на каждом компьютере, откуда будет выполняться запуск функции, а это не всегда возможно из-за политики безопасности предприятия. Похожие проблемы возникают при использовании внешних веб-сервисов, к тому же не везде в наличии стабильный и надежный интернет. Данный алгоритм написан на чистом языке 1С и весь код для всех режимов работы содержится в пределах одной функции, поэтому ее легко можно добавить в общий модуль конфигурации или, например, в модуль внешней печатной формы или отчета.
Для вывода результата можно использовать форматную строку в максимально понятном формате, вида "Фамилия Имя Отчество" или "И.О. Фамилия". При отутствии форматной строки, функция старается максимально сохранить формат исходной строки. При нестандартном порядке следования частей ФИО, порядок можно указать в параметре вызова функции, например "ФИО", "ИОФ", "ИФ". Род выражения не всегда известен заранее, поэтому есть возможность автоматического определения рода. Определение происходит сначала по Отчеству, при неудаче - по Фамилии, затем по Имени.
Функция также склоняет должности, причем из-за меньшей вариативности склонений, чем для ФИО, склонение должностей происходит практически без ошибок, что было подтверждено множеством различных тестов.
Имеется возможность склонения по падежам и по родам числительных, причем в виде прописи ("два") либо числового значения (2). Вместе с числительным в функцию может быть передано исчислимое в начальной форме (именительный падеж, единственное число), например "8 доска" -> "Т - восемью досками", "15 рубль" -> "Р - пятнадцати рублей". Добавлена особая форма винительного падежа для склонения одушевленных существительных: "В - про сорок один мешок", "О - про сорок одного маляра".
Также склоняются по падежам, родам и числам прилагательные, существительные и их сочетания из начальной формы: "Генеральная доверенность" -> "Р - Генеральных доверенностей". Глаголы можно склонять по родам и числам: "Утвердило ответственное лицо" -> "Н - Утвердили ответственные лица". Более подробные примеры использования - в комментариях в листинге функции.
Предлагаемая разработка предоставляет программистам 1С функцию склонения по падежам слов и словосочетаний на русском и украинском языках, а также функцию формирования прописи чисел в заданном падеже. Программа умеет склонять фамилии, имена и отчества, а также должности, названия отделов и юридических лиц (на украинском пока только ФИО). Указание пола не требуется. Наоборот, программа автоматически определяет и выдает грамматический род словосочетания, по которому определяется пол лица. Алгоритм демонстрирует высокое качество склонения, а для случаев, когда программа все же ошибается, предусмотрен сервис оперативного исправления ошибок. Программа реализована в виде веб-сервиса, доступного бесплатно всем желающим (до 1000 запросов в сутки). Для вызова функции склонения из 1С 8.2 достаточно 3 строчек кода, при этом не нужно включать в конфигурацию никаких дополнительных DLL. Пример обработки на языке 1С прилагается.
Реализуемые функции
Например, на входе:
ведущий инженер-программист III категории |
И. | ведущий инженер-программист III категории | ведущие инженеры-программисты III категории |
Р. | ведущего инженера-программиста III категории | ведущих инженеров-программистов III категории |
Д. | ведущему инженеру-программисту III категории | ведущим инженерам-программистам III категории |
В. | ведущего инженера-программиста III категории | ведущих инженеров-программистов III категории |
Т. | ведущим инженером-программистом III категории | ведущими инженерами-программистами III категории |
П. | о ведущем инженере-программисте III категории | о ведущих инженерах-программистах III категории |
Род: мужской |
Быстрый старт: склонение должности
Программа для склонения должности будет выглядеть так:
Для украинского языка функция склонения называется СклонятьУкраинский:
Украинская версия пока лучше всего справляется с фамилиями, именами и отчествами. Работа над другими типами словосочетаний ведется.
Для улучшения качества склонения можно передавать признаки.
На данный момент доступны след. признаки: name, feminine, masculine, neuter, animate, inanimate, common, plural.
Функция построения прописи числа в любом падеже
Функция ПрописьРусский (ПрописьУкраинский) решает две родственные задачи: получение прописи числа (тысяча сто двадцать пять) и согласование единицы измерения с предшествующим числом (1 попугай, 2 попугая, 5 попугаев). Пример:
Функция принимает два аргумента:
n – целое положительное число.
Комбинировать имеет смысл только соответствующие падежные формы n и unit – именительный с именительным, родительный с родительным и т.д. Например, для получения фразы "в размере N рублей (долларов, евро. )", берем родительный падеж (Р): в размере + двухсот тридцати пяти + рублей.
Склонение прилагательных по родам
Функция СклонятьПрилагательноеПоРодам склоняет данное ей прилагательное, преобразуя его из мужского рода в женский, средний и во множественное число:
Авторизация
Для получения доступа к тегам род, откуда, куда, где, а так же снять ограничение на кол-во запросов в сутки, нужно купить подписку на сайте Морфер.Авторизация("ваш токен");
Обработка ошибок
Совместимость и устранение неполадок
Модуль выпускается в двух вариантах для 8.3.16 и 8.2. Версии отличаются только тем, что версия 8.3.16 использует встроенный десериализатор JSON.
Оперативное исправление ошибок склонения
Не секрет, что алгоритм автоматического склонения тоже может ошибаться – не знать какого-либо слова или запутаться в сложной синтаксической структуре. Что делать, если машина склоняет не так, как надо, а документ должен быть на столе у начальника через 10 минут? Хорошо, если система позволяет вручную исправлять документ после его выдачи. Но исправлять фамилию начальника в каждом приказе тоже не дело. Традиционное решение этой проблемы (если руки дойдут до его реализации) – хранение падежных форм в таблице-справочнике, которая заполняется вручную.
Установка веб-сервиса в вашей локальной сети
Здесь comp001 – это сетевое имя компьютера, где установлен веб-сервис. Во второй строчке изменять ничего не нужно.
* Количество плюсов и минусов дано на момент публикации.
Жду новых ваших пожеланий и замечаний. Именно они мотивируют меня развивать продукт дальше.
Основы русского языка закладывали наши далекие предки: поэты и крестьяне, купцы и воины, ремесленники, дворяне и прочая интеллигенция. Одна беда – программистов среди них было маловато, представителей, так сказать, информационного фронта.
Поэтому в русском языке активно используются склонения, спряжения, изменения по временам и родам. Это прекрасно с точки зрения однозначности толкования каждой фразы, когда сразу видно: кто, что и с кем сделал, и к чему это привело. Но это же и вызывает определенные трудности при автоматизации и создании универсальных форм документооборота и отчетности.
Сравните два фрагмента печатных форм расходных кассовых ордеров на картинках ниже.
На первой деньги выдаются юридическому лицу.
А на второй – физическому лицу:
Но как-то не по-русски достались эти деньги нашему физическому лицу. Вот если бы в документе было написано «Выдать Ковалькову Николаю Федоровичу&ra quo;, то и Пушкин с Горьким ничего против такого документа не имели бы.
Вот и стонут тысячи не очерствевших душою бухгалтеров, оформляя документы кассовые, да и прочие договора с доверенностями. Звонят в особо сложных случаях (Ойра-Ойра Роман Петрович) по коллегам, да знакомым филологам. Спорят, ссорятся, поминая Ожегова.
Да даже и в простых случаях – склонение требует секунд на внесение изменений в реквизит, автоматически заполняемый именительным падежом из наименования справочника физлиц.
Попробуем ее использовать.
А что для этого надо?
Во-вторых, заставить программу ее использовать в нужный нам момент.
Нажмем ее – открывается форма автоматического склонения нашего ФИО по падежам.
Мы приходили сюда – просто, чтобы в этом убедиться.
Вчитавшись в описание функций в самом общем модуле – легко понять, как именно к ним обращаться.
Ну и в качестве примера использования подсистемы – давайте все же решим задачу, с которой начиналась наша статья.
Сам процесс решения подробно демонстрируется в следующем ролике:
Ложная ученость хуже невежества. Невежество - голое поле, которое можно возделать и засеять; ложная ученость -это поле, поросшее пыреем, который выполоть почти невозможно.
Читайте также: