Відмінювання фіо. Відмінювання фіо Відмінювання 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 і через сервіс конфігуратора. Спробуйте обидва та визначте, який більше підходить для вас.

При роботі в 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С, враховуючи вимоги законодавства та стандартів, дозволяє відповідати затвердженому порядку оформлення документації та формування друкованих форм.

Відмінювання відмінками зумовлено і стандартами ділового обороту, які передбачають, що будь-який документ має бути оформлений не тільки грамотно, а й естетично грамотно, що відображає статус організації.

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

У файлі – процедури для 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);

// і тепер все разом
Якщо тільки ініціали тоді // якщо заданий формат ініціалів
новПІБ=новПрізвище+" "+новеІм'я+підрозділювач+новопо батькові+підрозділювач;
Інакше
новПІБ=новПрізвище+" "+новеІм'я+" "+по батькові;
КінецьЯкщо;

Якщо Знайти (ПІБ, ".") тоді // На той випадок, якщо вхідний параметр Прізвище з ініціалами. Ініціали не чіпаємо
новПІБ = новПрізвище + " " + трег (ім'я) + трег (по батькові);
КінецьЯкщо;

Повернення СокрЛП(новПІБ);
КінецьФункції

Поділитися: