Склонение фио. Склонение фио Склонение фамилий 1с 8.3

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

Для склонения ФИО в программах 1С предусмотрена внешняя компонента – NameDecl.dll, в которой содержится функция склонения. Ее можно взять на диске ИТС и, скопировав в папку с установленной платформой 1С – bin, зарегистрировать ее в операционной системе. Выполняется данная процедура при помощи команды resvr32 NameDecl.dll (под учетной записью администратора). Для этого необходимо вызвать команду «Выполнить» через кнопку «Пуск», воспользовавшись поиском или сочетание клавиш Windows + R.

Рис.1 Окно поиска. Поиск команды «Выполнить»

В появившемся окне вводим команду resvr32.exe и указываем путь к подключаемой библиотеке, используя кнопку «Обзор».


Рис.2 Окно команды «Выполнить»

После нажатия «Ок» появится сообщение о том, что библиотека успешно зарегистрирована.


Рис.3 Окно сообщения

Описание метода склонения в 1С

Просклонять (ФИО, Падеж, Пол) по параметрам:

  • ФИО (обязательный), тип – строка
  • Падеж (обязательный), тип – число

Падеж, в который необходимо поставить ФИО, задается числом от 1 до 6.

Таблица падежей: вопросы, предлоги и их значения в программном коде

Случается, возникает неоднозначная ситуация, когда программе необходимо определить принадлежность фамилии к полу, например, Сигида, Чепко, Сушко, Оганезян и т.д.

В этом случае используют дополнительный параметр:

  • Пол (необязательный), тип – число

Он показывает, склонять или не склонять фамилию. В других случаях этот параметр опускают или используют значение 0 («авто»), т.к. неправильное указание пола может повлиять на правильность склонения. Здесь возможные значения: 0 – авто, 1 – мужской, 2 – женский.

Сервис «Склонение по падежам»

В программах 1С 8.3 уже включен сервис для склонения данных сотрудников или контрагентов в соответствии с применяемыми в документе падежами.



Фрагмент 1

#Область ПрограммныйИнтерфейс // Склоняет ФИО // Только яля работы на ОС Windows. // // Параметры: // ФИО - Строка - Строка, в которой содержится ФИО для склонения. // Падеж - Число - падеж, в который необходимо просклонять представление объекта. // 1 - Именительный. // 2 - Родительный. // 3 - Дательный. // 4 - Винительный. // 5 - Творительный. // 6 - Предложный. // Объект - СбъехтСклонения - Ссылка на объект, реквизит которого склоняется // Пол - Число - Число - пол физического лида, // 1 - мужской, // 2 - женский. // // Возвращаемое значение: // Строка - Результат склонения ФИО в падеже. // Функция ПросклонятьФИО(ФИО, Падеж, Объект = Неопределемо, Пол = Неопределено) Экспорт // Склоняет представление объекта. Функция ПросклонятьПредставлекие(Представление, Падеж, Объект = Неопределено) Экспорт // Выполняет с формой действия, необходимые для подключения подсистемы Склонения.

Рис.4 Окно конфигуратора



Фрагмент 2

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

Рис.5 Использование функции «Просклонять»

Используя в документе реквизиты, которые выбираются из справочника, в котором они представлены в именительном падеже, в печатную форму документа они будут выведены с нужным склонением.

Рассмотрим функцию склонения на примере договора в «1С:Бухгалтерия» 3.0. (1С:Предприятие 8.3). Здесь предусмотрено склонение ФИО и должности.



Рис.6 Окно формы договора. Настройка склонения фамилии и должности

В печатную форму программа автоматом поставит правильный вариант.



Рис.7 Окно программы – «Склонение по падежам»

Пример склонения по падежам можно видеть в «Приказе о приеме на работу». В карточке сотрудника его ФИО указано в Именительном падеже, а в печатной форме – в Родительном.



Рис.8 Пример склонения ФИО в печатной форме «Приказ о приеме на работу»

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

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

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

Склонение ФИО в 1С 8.3

В ходе эксплуатации комплекса программного обеспечения 1С у пользователей часто возникают вопросы относительно склонения ФИО 1С 8.3. 1С функция склонения ФИО осуществляется специальной компонентой, которая именуется как "NameDecl.dll". Для старта использования компоненту необходимо скопировать с диска информационно-технического сопровождения в папку, где расположена основная платформа bin, а также зарегистрировать ее в операционке. Осуществляется копирование через команду «resvr32 NameDecl.dll». С этой целью открываем «Пуск» вызываем директиву «Выполнить», как это показано на рисунке.

Открываем окно и прописываем «resvr32.exe», указывая путь к нужной библиотеке. Библиотека выбирается через кнопку «Обзор». Далее нужно выбрать «ОК» и подтвердить регистрацию библиотеки.

1с склонение ФИО выполняется по 2 параметрам:

  • Падеж, тип - число. Это обязательный параметр.
  • ФИО, тип - строка. Также является обязательным параметром.

Так как в русском языке имеется шесть падежей, падежу присваивается число от 1 до 6 в соответствии с таблицей, представленной ниже:

Также выделяют третий, необязательный параметр компоненты склонения ФИО 1С - пол (тип - число). Здесь есть 3 варианта: 0 - авто, 1 - муж, 2 - жен.

Сервис 1С 8 склонение ФИО

Программы версии 1С 8.3 имеют специальный сервис для склонения ФИО по падежам 1С 8.3, который работает через конфигуратор. Поэтому, чтобы просклонять ФИО, открываем окно конфигуратора и используем функцию «Просклонять», как это показано ниже:

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



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

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

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

Мы разобрали 2 способа склонения фамилии, имя отчества по падежам, числам и родам - с помощью специальной компоненты склонения ФИО 1С 8.3 и через сервис конфигуратора. Попробуйте оба и определите, какой больше подходит для вас.

В файле - процедуры для 7.7 и для 8.х. В процедуру передаётся строка в формате Фамилия Имя Отчество.

UPD 26.11.10: с благодарностью - новая версия функции. Я - не тестировала! Вопросы по работе этой версии - к нему, выкладывать сам почему-то не хочет:)

Функция ПадежФИО(Знач ФИО,Падеж=1,ТолькоИнициалы=Ложь, Знач пРазделитель=".")
Если ТипЗнч(ФИО)<>Тип("Строка") Тогда
Сообщить("Неверная строка передана ""падежу ФИО!"""); Возврат ФИО;
КонецЕсли;

// уберем множественные пробелы
Пока 1=1 Цикл
ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
Если Найти(ФИО," ")=0 Тогда Прервать КонецЕсли;
КонецЦикла;

Если ТипЗнч(Падеж)=Тип("Строка") Тогда
пад=СокрЛП(НРег(Лев(Падеж,1)));
Если Найти("ирдвтп",пад)=0 Тогда

КонецЕсли;
ИначеЕсли ТипЗнч(Падеж)=Тип("Число") Тогда
Если (Падеж<1) или (Падеж>6) Тогда
Сообщить("Неверный падеж передан ""падежу ФИО""!"); Возврат ФИО;
КонецЕсли;
пад=Падеж-1;
КонецЕсли;

ФИО=СокрЛП(НРег(ФИО)); // так удобнее

// свой анализатор состава
Фамилия="";
Для й=1 По СтрДлина(ФИО) Цикл
символс=Сред(ФИО,й,1);

Фамилия=Фамилия+символс;
КонецЦикла;
ы=й+1; // перешли пробел
Имя="";

символс=Сред(ФИО,й,1);
Если символс=" " Тогда Прервать КонецЕсли;
Имя=Имя+символс;
КонецЦикла;
ы=й+1; // перешли второй пробел
Отчество="";
Для й=ы По СтрДлина(ФИО) Цикл
символс=Сред(ФИО,й,1);
Если символс=" " Тогда Прервать КонецЕсли;
Отчество=Отчество+символс;
КонецЦикла;

// теперь имеем раздельно Фамилию, Имя и Отчество.
// начинается собственно блок анализа содержания и падежей

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

// проанализируем пол М/Ж
Если Прав(Отчество,1)="а" Тогда Пол="Ж" Иначе Пол="М" КонецЕсли;

// создадим структуру таблицы, хранящей окончания слов
ток=Новый ТаблицаЗначений;
ТипСтроки=Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(3));
ТипЧисла=Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(1,0));
ток.Колонки.Добавить("СтарОк",ТипСтроки); // старое окончание 2 символа
// колонки, хранящие новые окончания слов
ток.Колонки.Добавить("р"); // родительный
ток.Колонки.Добавить("д"); // дательный
ток.Колонки.Добавить("в"); // винительный
ток.Колонки.Добавить("т"); // творительный
ток.Колонки.Добавить("п"); // предложный
// для указания, сколько букв с конца слова отсечь,
ток.Колонки.Добавить("КолвоСрез",ТипЧисла); // кол-во срезаемых букв

Гласные="аеэоуиыяюьъ"; // список гласных букв в виде строки

// ======== обработаем фамилию ==========
// заполним таблицу данными для фамилии

Если пол="М" Тогда
строток=ток.Добавить(); // иванов
строток.СтарОк="*s";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // красинский
строток.СтарОк="*й";
строток.р="ого"; строток.д="ому"; строток.в="ого"; строток.т="им"; строток.п="ом";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // всемогущий
строток.СтарОк="щий";
строток.р="его"; строток.д="ему"; строток.в="его"; строток.т="им"; строток.п="ем";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // белый
строток.СтарОк="ый";
строток.р="ого"; строток.д="ому"; строток.в="ого"; строток.т="ым"; строток.п="ом";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // палей
строток.СтарОк="*й";

строток.КолвоСрез=1;

Строток=ток.Добавить(); // рабинович
строток.СтарОк="*ч";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // починок, зализняк
строток.СтарОк="*к";
строток.р="ка"; строток.д="ку"; строток.в="ка"; строток.т="ком"; строток.п="ке";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // шинкарь
строток.СтарОк="*ь";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.КолвоСрез=1;

Строток=ток.Добавить(); // перельман, оганесян
строток.СтарОк="*н";

строток.КолвоСрез=0;

Строток=ток.Добавить(); // баранкин
строток.СтарОк="ин";
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ым"; строток.п="е";
строток.КолвоСрез=0;

ИначеЕсли Пол="Ж" Тогда
строток=ток.Добавить(); // склодовская
строток.СтарОк="ая";
строток.р="ой"; строток.д="ой"; строток.в="ую"; строток.т="ой"; строток.п="ой";
строток.КолвоСрез=2;

Строток=ток.Добавить(); // иванова
строток.СтарОк="*а";
строток.р="ой"; строток.д="ой"; строток.в="у"; строток.т="ой"; строток.п="ой";
строток.КолвоСрез=1;
КонецЕсли;


Если не ПустаяСтрока(Фамилия) Тогда
пб=Прав(Фамилия,3); кол="СтарОк"; // ищем по ней
новФамилия=Фамилия; // если ничего не изменится, так и будет
стро=ток.Найти(пб,кол);
Если стро<>


Иначе
// строго не нашли по трем последним символам, ищем по двум символам только по последней
пб=Прав(Фамилия,2);
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);
Иначе // если по двум не нашли, ищем по одному
пб="*"+Прав(пб,1);
стро=ток.Найти(пб,кол);
Если стро<>
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);


стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли по виду
Основа=Лев(Фамилия,СтрДлина(Фамилия)-стро.КолвоСрез);
новФамилия=Основа+СокрЛП(стро[пад]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
новФамилия="";
КонецЕсли;

// ======== обработаем имя ==========
// заполним таблицу данными для имени
ток.Очистить();

Если Пол="М" Тогда
// обработаем исключения
Если Имя="лев" Тогда Имя="льв" КонецЕсли;
Если Имя="павел" Тогда Имя="павл" КонецЕсли;

Строток=ток.Добавить(); // сергей
строток.старок="*й";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // иван + лев + павел
строток.старок="*s";
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ом"; строток.п="е";
строток.колвосрез=0;

Строток=ток.Добавить(); // никита
строток.старок="*а";

строток.колвосрез=1;

Строток=ток.Добавить(); // лука
строток.старок="ка";

строток.колвосрез=1;

Строток=ток.Добавить(); // иеремия
строток.старок="ия";

строток.колвосрез=1;

Строток=ток.Добавить(); // илья
строток.старок="*я";

строток.колвосрез=1;

Строток=ток.Добавить(); // игорь
строток.старок="*ь";
строток.р="я"; строток.д="ю"; строток.в="я"; строток.т="ем"; строток.п="е";
строток.колвосрез=1;

ИначеЕсли Пол="Ж" Тогда
// обработаем исключения
//Если Имя="ольга" Тогда Имя="ольгь" КонецЕсли;

Строток=ток.Добавить(); // ирина
строток.старок="*а";
строток.р="ы"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // инга, ольга
строток.старок="га";
строток.р="и"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;

Строток=ток.Добавить(); // эсфирь
строток.старок="*ь";
строток.р="и"; строток.д="и"; строток.в="ь"; строток.т="ью"; строток.п="и";
строток.колвосрез=1;

Строток=ток.Добавить(); // мария
строток.старок="ия";
строток.р="и"; строток.д="и"; строток.в="ю"; строток.т="ей"; строток.п="и";
строток.колвосрез=1;

Строток=ток.Добавить(); // софья
строток.старок="*я";
строток.р="и"; строток.д="е"; строток.в="ю"; строток.т="ей"; строток.п="е";
строток.колвосрез=1;
КонецЕсли;

// таблица заполнена. считаем 2 последних буквы и поищем их
Если не ПустаяСтрока(Имя) Тогда
пб=Прав(Имя,2); кол="СтарОк"; // ищем по ней
новИмя=Имя; // если ничего не изменится, так и будет
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли строгое сразу


Иначе // строго не нашли, ищем только по последней
пб="*"+Прав(пб,1);
стро=ток.Найти(пб,кол);
Если стро<>Неопределено Тогда // нашли по последней
Основа=Лев(Имя,СтрДлина(Имя)-стро.КолвоСрез);
новИмя=Основа+СокрЛП(стро[пад]);
Иначе // по последней не нашли, ищем по виду буквы
пб="*"+?(Найти(Гласные,Прав(пб,1))=0,"s","g");
стро=ток.Найти(пб,кол);
Если стро<>Неопределено=1 Тогда // нашли по виду
Основа=Лев(Имя,СтрДлина(Имя)-стро.КолвоСрез);
новИмя=Основа+СокрЛП(стро[пад]);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
новИмя="";
КонецЕсли;

// ======== обработаем отчество, тут проще ==========
ток.Очистить();

Если Пол="М" Тогда
строток=ток.Добавить();
строток.р="а"; строток.д="у"; строток.в="а"; строток.т="ем"; строток.п="е";
строток.колвосрез=0;
ИначеЕсли Пол="Ж" Тогда
строток=ток.Добавить();
строток.р="ы"; строток.д="е"; строток.в="у"; строток.т="ой"; строток.п="е";
строток.колвосрез=1;
КонецЕсли;
Если не ПустаяСтрока(Отчество) Тогда
Основа=Лев(Отчество,СтрДлина(Отчество)-ток.КолвоСрез);
новОтчество=Основа+СокрЛП(ток[пад]);
Иначе
новОтчество="";
КонецЕсли;

Если ТолькоИнициалы Тогда
новИмя=Лев(новИмя,1); новОтчество=Лев(новОтчество,1);
КонецЕсли;

// установим первые буквы верхним регистром
новФамилия=ВРег(Лев(новФамилия,1))+Сред(новФамилия,2);
новИмя=ВРег(Лев(новИмя,1))+Сред(новИмя,2);
новОтчество=ВРег(Лев(новОтчество,1))+Сред(новОтчество,2);

// и теперь всё вместе
Если ТолькоИнициалы Тогда // если задан формат инициалов
новФИО=новФамилия+" "+новИмя+пРазделитель+новОтчество+пРазделитель;
Иначе
новФИО=новФамилия+" "+новИмя+" "+новОтчество;
КонецЕсли;

Если Найти(ФИО, ".") Тогда // На тот случай, если входной параметр Фамилию с инициалами. Инициалы не трогаем
новФИО = новФамилия + " " + ТРег(Имя) + Трег(Отчество);
КонецЕсли;

Возврат СокрЛП(новФИО);
КонецФункции