Склонение ФИО

Публикация № 16470 01.10.08

Приемы и методы разработки - Универсальные функции

Склонение ФИО в виде небольшой процедуры. Писалось студентом-программистом и студентом-лингвистом.

В файле - процедуры для 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;
    КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Скачать файлы

Наименование Файл Версия Размер
-

.1222867795 113,50Kb
1611
.1222867795 113,50Kb 1611 Скачать
Только для 8.1 (обновлено 17.08.09)

.1250495317 16,52Kb
364
.1250495317 16,52Kb 364 Скачать бесплатно

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. e.kogan 1868 01.10.08 17:32 Сейчас в теме
Склонение ФИО в виде небольшой процедуры. Писалось студентом-программистом и студентом-лингвистом.

Перейти к публикации

1. Ёпрст 1056 01.10.08 17:32 Сейчас в теме
2. Ёпрст 1056 01.10.08 17:33 Сейчас в теме
Гораздо лаконичнее код..и написан задолго до 2003 года...
3. e.kogan 1868 01.10.08 17:56 Сейчас в теме
Лаконичнее. И сумбурнее.

Кому что нравится.
4. Ёпрст 1056 01.10.08 18:00 Сейчас в теме
Не вижу там никакого сумбура. Код гораздо приятнее. Даже у Рупора проще.
+ должности отрабатывает
+ специфические фамилии
+ каменты
+ примеры использования
5. Abadonna 3922 01.10.08 18:04 Сейчас в теме
(1,2) Слабенький ответик-то получился ;)
Сообщить(ПадежС("Кучер",3,1,1) ); // дательный, мужик, склонять фамилию
Возвращет: Кучер
А вот фигушки! КучерУ, ЛебедЮ, Кушниру, КоганУ если речь идет о мужике. А вот для женщины подобные не склоняются.
А вот у автора вернула в дательном:
Кучеру Аркадию Арнольдовичу - я
Кучер Антонине Алексеевне - моя мама
т.е. абсолютно правильно
6. e.kogan 1868 01.10.08 18:11 Сейчас в теме
(5) Спасибо, хотела сама потестировать предложенное, теперь тратить время не буду.
7. Abadonna 3922 01.10.08 18:22 Сейчас в теме
(6) Да просто уже забодали любители "простых" решений ;)
А уж если меряться, у кого раньше, то вот: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=111&lid=254
Написана КучерОМ Аркадием Арнольдовием в 2000 году. Чуток коряво, ибо это было первое, что я написал на 1С ваще. Однако КацА МойшУ АбрамовичА склоняла вполне корректно ;)))
vladir; НеБиллГейтс; tikhon; Шёпот теней; +4 Ответить
8. e.kogan 1868 01.10.08 19:23 Сейчас в теме
(7) Ну, если уж говорить про Мойш, то правильно - МойшЕ. Или уж Моисей. Уменьшительно-ласкательные склонять задачи не ставилось, всё-таки официальные документы, ага )
9. Abadonna 3922 02.10.08 02:55 Сейчас в теме
(7) Здрасте! Склоняла КОГО? Мойше??? Я не про дательный, а про винительный в данном случае говорил. Что касается какие еврейские уменьшительные, а какие полные - то тут, сорри, я не спец :)))
17. e.kogan 1868 02.10.08 10:26 Сейчас в теме
(9) МойшА - это некорректно. Это уменьшительное, да к тому же и, скажем так, русифицированное.
(13) Доступ открыт. Промахнулась с переключателем.
18. Ёпрст 1056 02.10.08 10:30 Сейчас в теме
(17) И всё же потести предложенное, оно рабочее.
23. e.kogan 1868 03.10.08 11:26 Сейчас в теме
(18) Потестила. Хорошооо... Спасибо.
14. Ёпрст 1056 02.10.08 09:04 Сейчас в теме
(5) Не вопрос. Там есть второй вариант, от Рупора.. там правильнее. :)
15. Ёпрст 1056 02.10.08 09:13 Сейчас в теме
(5) И Самое Главное, ВАША неправда:

Сообщить(Падеж("Кучер" ,3,1,"1" )) = "Кучеру"
20. Abadonna 3922 02.10.08 10:34 Сейчас в теме
(15) И самое главное, что я тестил Сообщить(ПадежС("Кучер",3,1,1) );
Падеж и еще буковка "С", а не просто Падеж. Когда мне их там сортировать было ;)
21. Ёпрст 1056 02.10.08 10:37 Сейчас в теме
(20) Там же примеры есть в каментах! :)
10. halushka 02.10.08 04:39 Сейчас в теме
Хотел посмотреть, ан рейтингом не вышел. :( Жаль.
1108; sashocq; gutentag; coder1cv8; Vitek; O-Planet; Abadonna; +7 Ответить
11. Abadonna 3922 02.10.08 05:05 Сейчас в теме
(10) Ну держи один плюсик ;) Щас гляну еще где твои комменты
12. O-Planet 6434 02.10.08 05:10 Сейчас в теме
(10) "Рейтингом не вышел" - это зачОООт! ))))))
13. Vitek 02.10.08 08:49 Сейчас в теме
Доступ C рейтингом не меньше 3 - FAIL.
16. Ёпрст 1056 02.10.08 09:14 Сейчас в теме
Так что, решение правильное, хотя и простое, и не писано "на основании серьёзного лингвистического исследования"
:)
19. Abadonna 3922 02.10.08 10:33 Сейчас в теме
Честно признаюсь, что всегда думал что "Мойша" нормальное еврейское имя :))) Без уменьшительного, русифицированного и т.д.
22. Abadonna 3922 02.10.08 10:49 Сейчас в теме
2Ёпрст. Ты завязывай фладить, а давай начинай писать про Dialog Stream и Moxel :))))
24. e.kogan 1868 03.10.08 15:27 Сейчас в теме
О!

Меч в творительном - мечЕм, ага ) Нашли-таки мы не ловящееся )
25. Ёпрст 1056 03.10.08 16:23 Сейчас в теме
(24) А вот и фигушки :)

Падеж("Меч",5,1,"1") = "Мечем"

26. e.kogan 1868 03.10.08 16:26 Сейчас в теме
27. Ёпрст 1056 03.10.08 16:28 Сейчас в теме
(26) Угу, тепереча тестим ваше творение - МечЕм ...
28. Ёпрст 1056 03.10.08 16:29 Сейчас в теме
29. e.kogan 1868 03.10.08 16:31 Сейчас в теме
(28) Дык я и не спорю ;) Но предлагали потестить - я и потестила )
30. Ёпрст 1056 03.10.08 16:35 Сейчас в теме
Хотя...

Мечем Иваным Ивановичем альтернатива
Мечем Иваном Ивановичем ваш метод

тоже глюкаво... В общем, есть куда расти.
Даешь правильные алгоритмы!
31. e.kogan 1868 03.10.08 16:38 Сейчас в теме
(30) Слуушайте... Так это он Ивана неправильно склоняет? Тц-тц-тц... А я-то уж губы раскатала, что хоть кто-то эту титаническую задачу решил на 99%...

Будем дорабатывать.
32. Ёпрст 1056 03.10.08 16:43 Сейчас в теме
(31) Ну да...:)
Хотя, кому нужен творительный падеж в 1с-ине ? :)
33. e.kogan 1868 03.10.08 16:48 Сейчас в теме
(32) "Договор заключён с Мечом Иваном Ивановичем", например )
34. e.kogan 1868 03.10.08 16:55 Сейчас в теме
(32) Пофиксено: имена, оканчивающиеся на "ан", склоняет неправильно для творительного. Буду разбираться в этой перловке )))
35. Ёпрст 1056 03.10.08 17:44 Сейчас в теме
(34) ...Эээ.. в какой обработке пофиксено ? В вашей ? Так там и так было правильно ...
36. e.kogan 1868 03.10.08 17:48 Сейчас в теме
(35) Да нет, в предложенной как раз. Но так как собираюсь и её использовать, собираюсь и доводить её до полного блеска.
37. Ёпрст 1056 03.10.08 17:54 Сейчас в теме
(36) Не забудьте выложить потом для тестинга.
38. e.kogan 1868 05.10.08 14:59 Сейчас в теме
Слово "паяц" альтернатива склоняет совсем неправильно. В общем, есть куды ростить.
39. Abadonna 3922 05.10.08 15:51 Сейчас в теме
Как почему-то и думал, так и оказалось ;)
Сообщить(ПадежФИО("Черных Петр Петрович",2));
Сообщить(ПадежФИО("Берия Лаврентий Павлович",2));
Черныха Петра Петровича
// как раз случай, когда склонять не надо! А таких фамилий море - сибирские фамилии
Берия Лаврентия Павловича // а туточки надо БериЮ
Не надейся на универсальный алгоритм для фамилий, его нет!
41. Abadonna 3922 05.10.08 16:14 Сейчас в теме
+(39) Так что лингвист - действительно студент :)))))
40. Abadonna 3922 05.10.08 15:58 Сейчас в теме
А вот как сделано у меня:
Код
   Если ДвеПоследних="УА" Тогда
      Винительный=Фамилия;//фамилии типа Стуруа
      Дательный=Фамилия;
   КонецЕсли;
   
   Если ДвеПоследних="ИА" Тогда
      Винительный=Фамилия;//фамилии типа Туташхиа
      Дательный=Фамилия;
   КонецЕсли;
   
   Если (ДвеПоследних="ЖА") И (Пол="Ж") Тогда
      Винительный=Фамилия;// женские фамилии типа Ганжа
      Дательный=Фамилия;
   КонецЕсли;
   
   Если ТриПоследних="ДЗЕ" Тогда
      Винительный=Фамилия;//грузинские фамилии типа Гогадзе
      Дательный=Фамилия;
      Перейти ~выход;
   КонецЕсли;
   
   Если ТриПоследних="ИЛИ" Тогда
      Винительный=Фамилия;//грузинские фамилии типа Габошвили
      Дательный=Фамилия;
   КонецЕсли;
          Если (ДвеПоследних="ИХ") ИЛИ  (ДвеПоследних="ЫХ") Тогда
      Винительный=Фамилия;//сибирские фамилии
      Дательный=Фамилия;
   КонецЕсли;
Показать полностью
46. O-Planet 6434 08.10.08 12:05 Сейчас в теме
(40) Мде... Про иначеесли в 2000-м ты похоже не знал ;) Оно ж даже если нашло ДвеПоследних="УА", то все остальные тоже станет проверять...
47. Abadonna 3922 08.10.08 12:26 Сейчас в теме
(46) Планет слышал звон, да не знает, где он.
Не обратил внимание на строку, которую я в одном месте не удалил, а она стоит во ВСЕХ блоках:
Перейти ~выход;
И как раз спецом было сделано, чтобы эти блоки тупо копировать, вставлять и изменять, не добавляя ИначеЕсли.
Лично мне так больше нравится
42. andrew87 08.10.08 07:52 Сейчас в теме
зря потратили время, в документах достаточно именительного падежа
43. Abadonna 3922 08.10.08 08:05 Сейчас в теме
(42)>зря потратили время, в документах достаточно именительного падежа
Ну ежели тебе нравится "Доверенность выдана: Иванов Иван Иванович" - тогда достаточно
А мне нравится, когда "Доверенность выдана: ИвановУ ИванУ ИвановичУ" ;)
RailMen; hame1e00n; +2 Ответить
44. Crush 08.10.08 11:52 Сейчас в теме
ЗагрузитьВнешнююКомпоненту("NameDecl.dll");
КомпонентаСклоненияФамилий = СоздатьОбъект("AddIn.NameDeclension");
Слово = "Гадя Петрович Хренова"
НомерПадежа = 2; //Родительный
Сообщить(КомпонентаСклоненияФамилий.Просклонять(Слово,НомерПадежа));
//получаем ГадИ Петрович Хреновой


Компонента есть на диске ИТС, расчитана под восьмёрку, но и в 7.7 нормально работает
45. Crush 08.10.08 12:00 Сейчас в теме
(44) Пропустил точку с запятой, простите :)
У метода "просклонять" есть еще и 30-ий параметр - пол
48. пользователь 24.04.09 09:37
Сообщение было скрыто модератором.
...
49. hame1e00n 522 13.07.09 22:53 Сейчас в теме
Процедура очень интересная, только скачать не могу - рейтинга маловато... плюсик поставил)
50. Diktis 12.08.09 02:09 Сейчас в теме
Для имени "Ольга" в родительном падеже получаем "Ольгы"
52. e.kogan 1868 12.08.09 10:19 Сейчас в теме
(50) Приведите ФИО полностью. На "Иванова Ольга Юрьевна" склоняет нормально.
(51) Дело не в том, что нравится или не нравится. Эта процедура была написана совершенно отдельно.
53. Diktis 13.08.09 01:08 Сейчас в теме
(52) ПадежФИО("Иванова Ольга Юрьевна", 2) = "Ивановой Ольгы Юрьевны"
Может я чего-то не понимаю, но откуда взяться другому результату?
"...
ИначеЕсли Пол="Ж" Тогда
строток=ток.Добавить(); // ирина
строток.старок="*а";
строток.р="ы";
..."
55. e.kogan 1868 17.08.09 11:48 Сейчас в теме
(53) Проверяла специально - получается "Ивановой Ольги Юрьевны". Чесслово. Если вводить без отчества - возможно.

Поправила, теперь Ольга, Инга и т.д. склоняются нормально.
51. CheBurator 3071 12.08.09 02:15 Сейчас в теме
а чем Падеж "Крохотулька" с проклаба не нравится?
54. Yashazz 4305 17.08.09 02:03 Сейчас в теме
(51) Этой процедуре уж лет 8, не меньше...
Насчёт ОльгЫ посмотрим.
56. nelli_dream 17.08.09 12:28 Сейчас в теме
спасибо автору. мне очень помогла обработочка!
осталось решить вопрос со склонением профессий и цехов! ::)
57. e.kogan 1868 17.08.09 12:29 Сейчас в теме
(56) Пользуйтесь процедурами Jurer'а. Они это вроде бы умеют.
58. ARL 309 13.08.10 11:08 Сейчас в теме
Авторам спасибо! Все реальные случаи функция отработала прекрасно. Добавил только точки к инициалам.
59. Andrew_flyer 84 27.08.10 12:34 Сейчас в теме
60. Поручик 4585 01.09.11 11:50 Сейчас в теме
61. ELInfinito 23.09.11 07:12 Сейчас в теме
62. e.kogan 1868 23.09.11 16:32 Сейчас в теме
63. kiros 52 28.09.11 12:04 Сейчас в теме
Спасибо, небольшой тюнинг, если фамилия и.о. определение Ж рода по "а" и "я" в фамилии. Доработал и в работу.
Еще раз спасибо!
p.s. А косячки они у всех есть, как можно жить без косячков ;)
64. eli1984 04.10.11 06:56 Сейчас в теме
Сейчас вроде нормально все работает. Спасибо за обработку. пользуюсь.
65. avavadim 17.10.11 02:41 Сейчас в теме
Спасибо за текст обработки, все нормально работает...
66. Joker 03.01.12 10:55 Сейчас в теме
Спасибо, вставил в конфу, все работает
67. fixin 4122 04.04.12 18:07 Сейчас в теме
(0) А теперь проверьте ее моей тестилкой: http://infostart.ru/public/115909/, поищите ошибки.
А вообще нужно конечно писать склонение на технологии регистров правил, пусть и виртуальных, а не хранящихся в базе. Это будет прорыв. Но за попытку плюсую.
ИНТЕГРА; +1 Ответить
69. IRLes 206 21.12.12 10:28 Сейчас в теме
Прокопчук Сергей Сергеевич - в родительном падеже получается Прокопчка Сергея Сергеевича
по идее должно быть Прокопчука Сергея Сергеевича!
70. IRLes 206 21.12.12 11:06 Сейчас в теме
71. fr.myha 10.07.13 14:05 Сейчас в теме
Делюсь функцией, возвращающая инициалы в дательном падеже:

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

ФИО_Падеж="";
Фамилия="";
Имя="";
Отчество="";
ФамилияПадеж="";
ИмяПадеж="";
ОтчествоПадеж="";
ФИО=СокрЛП(ФИО);
Длина=0;

Если СтрЧислоВхождений(ФИО," ") = 0 Тогда
Фамилия = ФИО;
Длина = 1;
ИначеЕсли СтрЧислоВхождений(ФИО," ") = 1 Тогда
Фамилия = Лев(ФИО,Найти(ФИО," ")-1);
Имя = СтрЗаменить(ФИО,Фамилия+" ","");
Длина = 2;
ИначеЕсли СтрЧислоВхождений(ФИО," ") = 2 Тогда
Фамилия = Лев(ФИО,Найти(ФИО," ")-1);
Имя = Лев(СтрЗаменить(ФИО,Фамилия+" ",""),Найти(СтрЗаменить(ФИО,Фамилия+" ","")," ")-1);
Отчество = СтрЗаменить(СтрЗаменить(ФИО,Фамилия+" ",""),Имя+" ","");
Длина = 3;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Неправильно записано ФИО. Проверьте пробелы!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;

Если (Нрег(Прав(Отчество,1))="ч") Тогда
ТекПол = Перечисления.Пол.Муж;
ИначеЕсли (Нрег(Прав(Отчество,1))="а") Тогда
ТекПол = Перечисления.Пол.Жен;
КонецЕсли;

Если ТекПол = Перечисления.Пол.Муж Тогда
КонецФамилии = Прав(Фамилия,1);
Если Нрег(КонецФамилии)="е"
ИЛИ Нрег(КонецФамилии) = "и"
ИЛИ Нрег(КонецФамилии) = "о"
ИЛИ Нрег(КонецФамилии) = "у"
ИЛИ Нрег(КонецФамилии) = "э"
ИЛИ Нрег(КонецФамилии) = "ю"
Тогда
ФамилияПадеж = Фамилия;
ИначеЕсли Нрег(КонецФамилии) = "я" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
ИначеЕсли Нрег(КонецФамилии) = "а" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
ИначеЕсли Нрег(КонецФамилии) = "й"
ИЛИ Нрег(КонецФамилии) = "ь"
Тогда
Если Нрег(Прав(Фамилия,2)) = "ий"
ИЛИ Нрег(Прав(Фамилия,2)) = "ый"
Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "ому";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "ю";
КонецЕсли
Иначе
Если Нрег(Прав(Фамилия,2)) = "ец" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "цу";
Иначе
ФамилияПадеж = Фамилия + "у";
КонецЕсли
КонецЕсли;

Если Имя = "Лев" Тогда
ИмяПадеж = "Льву";
ИначеЕсли Имя="Павел" Тогда
ИмяПадеж = "Павлу";
ИначеЕсли Имя = "Пётр" Тогда
ИмяПадеж = "Петру";
ИначеЕсли Нрег(Прав(Имя,1)) = "й"
ИЛИ Нрег(Прав(Имя,1)) = "ь"
Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "ю";
ИначеЕсли Нрег(Прав(Имя,1)) = "и" Тогда
ИмяПадеж = Имя;
ИначеЕсли Нрег(Прав(Имя,1)) = "а" Тогда
ИмяПадеж = Лев(Имя,СтрДлина(Имя)-1) + "е";
Иначе
ИмяПадеж = Имя + "у";
КонецЕсли;
ОтчествоПадеж = Отчество + "у";
ИначеЕсли ТекПол = Перечисления.Пол.Жен Тогда
КонецФамилии = Прав(Фамилия,1);

Если Нрег(КонецФамилии) = "а" Тогда
Если Нрег(Прав(Фамилия,3)) = "ова"
ИЛИ Нрег(Прав(Фамилия,3))="ева"
Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "ой";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
КонецЕсли
ИначеЕсли Нрег(КонецФамилии) = "я" Тогда
Если Нрег(Прав(Фамилия,2)) = "ая" Тогда
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-2) + "ой";
Иначе
ФамилияПадеж = Лев(Фамилия,СтрДлина(Фамилия)-1) + "е";
КонецЕсли
Иначе
ФамилияПадеж = Фамилия;
КонецЕсли;

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

Если Длина = 1 Тогда
ФИО_Падеж = "" + ФамилияПадеж;
ИначеЕсли Длина = 2 Тогда
Если ТипВывода = 1 Тогда
ФИО_Падеж = "" + ИмяПадеж + " " + ФамилияПадеж;
ИначеЕсли ТипВывода = 2 Тогда
ФИО_Падеж = "" + ФамилияПадеж + " " + Лев(ИмяПадеж,1) + ".";
ИначеЕсли ТипВывода = 3 Тогда
ФИО_Падеж = "" + Лев(ИмяПадеж,1) + "." + " " + ФамилияПадеж;
Иначе
ФИО_Падеж = "" + ФамилияПадеж + " " + ИмяПадеж;
КонецЕсли
ИначеЕсли Длина = 3 Тогда
Если ТипВывода = 1 Тогда
ФИО_Падеж = "" + ИмяПадеж + " " + ОтчествоПадеж + " " + ФамилияПадеж;
ИначеЕсли ТипВывода = 2 Тогда
ФИО_Падеж = "" + ФамилияПадеж + " " + Лев(ИмяПадеж,1) + "." + " " + Лев(ОтчествоПадеж,1) + ".";
ИначеЕсли ТипВывода=3 Тогда
ФИО_Падеж = "" + Лев(ИмяПадеж,1) + "." + " " + Лев(ОтчествоПадеж,1) + "." + " " + ФамилияПадеж;
Иначе
ФИО_Падеж = "" + ФамилияПадеж + " " + ИмяПадеж + " " + ОтчествоПадеж;
КонецЕсли
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Предупреждение! Это не ФИО. Проверьте!" + Символы.ПС + "(обДательныйПадежНаСервере)";
Сообщение.Сообщить();
КонецЕсли;
Возврат ФИО_Падеж;
КонецФункции
72. Stradivari 154 05.09.13 16:04 Сейчас в теме
73. DoctorRoza 17.10.13 15:29 Сейчас в теме
Спасибо, классная штука! :)
74. fish249 26.11.14 14:06 Сейчас в теме
Больно уж громоздкий алгоритм. Склоняет всё без ошибок?
75. Horsy 16.12.14 15:20 Сейчас в теме
Огромное спасибо за обработку - это было просто спасением для меня!
76. pvlunegov 152 28.10.15 10:43 Сейчас в теме
не работает функция в данной статье - происходит зацикливание при попытке удалить множественные пробелы.
Автор тестировал собственное творение то?
77. pvlunegov 152 28.10.15 10:46 Сейчас в теме
Исправил в начале функции так:

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

После этого все стало работать. Спасибо!
78. pvlunegov 152 28.10.15 10:48 Сейчас в теме
При напечатке сообщения в инфостарт два пробела заменяются на один.
В итоге функция, скопированная из текста статьи, не работает!

Так что в предыдущем моем комментарии СтрЗаменить(ФИО," "," "). В первом " " следует видеть ДВА пробела!
kulkrise; +1 Ответить
79. e.kogan 1868 28.10.15 18:16 Сейчас в теме
(78) pvlunegov, сами всё поняли :) потому отдельно и прикреплены были файлы.
87. r.moschenskiy 18 01.04.19 14:58 Сейчас в теме
(78) уже написал - при публикации сообщения на форуме infostart два пробела заменяются на один, в этом вся причина.
80. ИНТЕГРА 25 28.10.15 19:40 Сейчас в теме
В начале сразу не понравилось:

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


Заменить на:

Пока Найти(ФИО," ") Цикл
             ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
КонецЦикла;


А чем типовой вызов склонения из общего модуля не устраивает? :)
81. e.kogan 1868 29.10.15 02:04 Сейчас в теме
(80) ИНТЕГРА, да, такой вариант даже был где-то реализован... Писалась эта штука тогда, когда никакого "типового" варианта ещё в помине не было, ну и почитайте комменты выше.
82. Артано 725 13.07.17 10:29 Сейчас в теме
Функция не умеет склонять существительные с суффиксом ец. Совсем не умеет, ни после закрытого слога, ни после открытого, впрочем как и типовая компонента (похоже что типовая компонента использует тот же алгоритм). Студентам надо было лучше учиться, а то недоучились, а всё туда же - в 1С кодить =)
83. e.kogan 1868 20.07.17 10:39 Сейчас в теме
(82) Плюс по сравнению с компонентой - довольно просто допилить :)
84. Артано 725 20.07.17 10:47 Сейчас в теме
Если когда-нибудь дойдут руки до такого, то не стал бы допиливать, а переписал на иных принципах. А сейчас проще компоненту доработать. Уже реализован механизм переопределения результатов компоненты склонения. Всех физлиц до которых смог дотянуться уже проверил - склоняет верно.
85. r.moschenskiy 18 13.03.19 12:15 Сейчас в теме
// уберем множественные пробелы
         Пока 1=1 Цикл
             ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
             Если Найти(ФИО," ")=0 Тогда Прервать КонецЕсли;
         КонецЦикла;


В этом месте бесконечный цикл, программа зависает намертво.
86. bimy22 01.04.19 14:32 Сейчас в теме
(85) Приведите, пожалуйста, пример, когда у вас сработал бесконечный цикл? Не совсем понимаю, почему у вас зависло.
88. foxey 4 29.05.19 11:32 Сейчас в теме
На самом деле в коде ошибка... В первом цикле избавляемся от множественных пробелов, заменяем их на одинарные, а по факту уходим в бесконечный цикл. Цикл надо подправить...
// уберем множественные пробелы
Пока 1=1 Цикл
ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
Если Найти(ФИО," ")=0 Тогда Прервать КонецЕсли;
КонецЦикла;

в строке ФИО=СокрЛП(СтрЗаменить(ФИО," "," "));
в первой паре кавычек надо прописать два пробела (редактор съедает двойной пробел при помещении текста на сайт)
и в строке Если Найти(ФИО," ")=0 Тогда Прервать КонецЕсли;
тоже надо два пробела написать в кавычках.
89. e.kogan 1868 30.05.19 09:39 Сейчас в теме
(88) так это именно редактор сайта и съел. Было нормально )
90. zavsom 101 19.03.20 10:48 Сейчас в теме
1с БП 83

РезультатСклоненияФИО = "";


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

Все уже придумано за нас
91. e.kogan 1868 19.03.20 13:30 Сейчас в теме
(90) дату публикации видите? Написано было значительно раньше.
И попробуйте влезть в компоненту... или в сервис... который без интернета недоступен.
В нетиповой конфе, ага.
Оставьте свое сообщение

См. также

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом Промо

Печатные формы Универсальные функции Email v8 КА1 БП2.0 УТ10 УПП1 Абонемент ($m)

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    35567    24    stvorl    1    

Подсистема регулярных заданий

Универсальные функции БСП (Библиотека стандартных подсистем) v8 Абонемент ($m)

Подсистема регулярных заданий предназначена для выполнения произвольных алгоритмов (задач) по заранее сформированным графикам с учетом производственного календаря.

1 стартмани

23.05.2022    1604    7    Sirruf    13    

Функции для обработки произвольной таблицы значений

Универсальные функции v8 v8::СКД 1cv8.cf Абонемент ($m)

Просто несколько функций для работы с произвольной таблицей значений: Левое соединение, Внутреннее соединение, Свертка таблицы. Платформа 8.3.20.1674.

1 стартмани

04.04.2022    1694    8    sanek_tgu    0    

Объединяем и вырезаем периоды

Универсальные функции v8 1cv8.cf Абонемент ($m)

Была задача вырезать из нужных периодов периоды-исключения. Искал решение в интернете, но не нашёл. Так родилась эта статья.

1 стартмани

06.02.2022    1897    0    Sungang    1    

Лучшие методы сравнения таблиц значений Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

02.02.2015    145848    70    ildarovich    67    

Добавление электронной подписи в документ PDF

Универсальные функции v8 БП3.0 Абонемент ($m)

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

1 стартмани

26.08.2021    8165    21    fotov    17    

Поиск корректной кодировки текста

Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка для поиска корректной кодировки текста.

1 стартмани

12.10.2020    4679    11    Jokemas    7    

Парсинг Excel-файла

Загрузка и выгрузка в Excel Универсальные функции v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Шаблон внешней обработки для парсинга Excel без использования COM-объектов, с учетом клиент-серверного взаимодействия, на толстом, тонком и веб-клиенте. С учетом требований безопасности и отображением длительных операций.

1 стартмани

15.09.2020    12614    33    LamerSoft    0    

Генерация QR-кода программная и интерактивная (код открыт, управляемая форма, обычное и управляемое приложение, API) Промо

Универсальные функции Универсальные обработки v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработку можно быстро и легко интегрировать в любую конфигурацию с и без БСП (Библиотека Стандартных Подсистем).

3 стартмани

04.02.2016    61113    190    TuneSoft    30    

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

Работа с интерфейсом Адаптация типовых решений Универсальные функции v8 Абонемент ($m)

Небольшой набор функций и процедур, дающий возможность организовать итоги в подвале табличных частей с учетом быстрого отбора. Работает только для: табл.частей справочников; табл.частей документов; табл.частей обработок; таблиц значений на форме. (Обрабатываются колонки, содержащие числовой тип)

1 стартмани

14.09.2020    6240    5    DrZombi    9    

Таблица значений в табличный документ (СКД)

Универсальные функции v8 Абонемент ($m)

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

1 стартмани

12.08.2020    27629    10    markivkin    4    

Нормализация адреса с помощью API Почты России

WEB Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

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

2 стартмани

11.08.2020    8512    17    Cerberdm    7    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    35339    4    Serginio    1    

Обработка чтения табличного документа (УФ)

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

07.08.2020    15189    11    chum1roma    10    

Универсальная функция получения дополнительных реквизитов и пример на форме

Универсальные функции v8 1cv8.cf Абонемент ($m)

Решаем следующую задачу. Например, в справочнике «Номенклатура» — 10 дополнительных реквизитов: "Материал", "Наименование на английском", "Наименование на французском" и т.д., и 20 дополнительных реквизитов в справочнике «Характеристики номенклатуры». Необходимо вывести все характеристики по ТЧ "Товары", так называемую «Спецификацию» по «Заказу клиента» или «Заказу поставщика».

2 стартмани

05.05.2020    7924    9    papche    8    

Универсальное хранилище настроек

Универсальные функции v8 Абонемент ($m)

Универсальная константа для хранения любых настроек, например интеграции с API. Легко вносить новые настройки без "ломания" выполнения кода в модулях.

1 стартмани

10.03.2020    10935    1    v.krivenko    17    

Автоматическая подстановка уничтожений временных таблиц в текст запроса Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция, которая сама подставляет в текст запроса "УНИЧТОЖИТЬ" в местах последнего использования ВТ.

1 стартмани

14.11.2015    25127    0    SeiOkami    3    

Дополнительные функции для 1С:Документооборот

Универсальные функции v8 ДО УУ Абонемент ($m)

В данной публикации я хочу поделиться расширением, которое содержит дополнительные функции (доработки) для 1С:Документооборот.

1 стартмани

24.01.2020    23322    180    pavelpribytkin96    43    

Подпись PDF в новой версии 8.3.16

Универсальные функции v8 1cv8.cf Абонемент ($m)

Проверяем новую возможность платформы 1С:Предприятие 8 по формированию подписей в PDF.

1 стартмани

23.12.2019    13436    44    kolya_tlt    15    

Простой способ загрузить файл Excel на тонком клиенте.

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Абонемент ($m)

Самый простой способ загрузить файл Excel на тонком клиенте - это скопировать лист Excel в "табличный документ" на форме обработки и обрабатывать уже поля "табличного документа".

1 стартмани

30.10.2019    14472    5    John_d    16    

Библиотека математических функций 1.1 Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

18.12.2014    31802    43    alex271    68    

Версионирование объеков УТ 10 с возможностью перехода к сохраненной версии

Журнал регистрации Универсальные функции v8 УТ10 Абонемент ($m)

Версионирование объектов УТ 10.3 с возможностью перехода к сохраненной версии. Взята стандартная система версионирования УПП, добавлена возможность восстановления ранее сохраненной версии.

1 стартмани

28.10.2019    13618    63    art.prm    8    

Картинка вместо кнопки без html

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Вариант замены стандартных кнопок на форме для тех, кого не устраивают кнопки 1С и нет особых возможностей делать все с использованием html. Тестировал работу на платформах 8.3.10, 8.3.13, 8.3.14

1 стартмани

23.10.2019    12373    12    papa_harlo    6    

Выгрузка данных из дерева значений 1С в формат JSON иерархический список (Сериализация ДереваЗначений в JSON)

Универсальные функции Файловые протоколы обмена (TXT, XML, DBF), FTP v8 1cv8.cf Россия Абонемент ($m)

Тема: Иерархические списки при обмене данными. В интернете не удалось найти подобного решения. Обнаружена реализация только обратной операции JSON в дерево значений 1С или рассматриваются линейные списки (таблицы).

1 стартмани

22.10.2019    14624    26    mwoleg    8    

Полезные функции БСП Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.

1 стартмани

01.02.2015    89364    52    spec8s    31    

Универсальная подсистема ДМ

Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

ДМ — дополнительные модули Это не альтернатива или дополнение БСП. Данная подсистема призвана быстро получить множество нужных функций в любой конфигурации. Для использования подсистемы изменения в конфигурацию вносить не надо. Обычные формы поддерживаются частично, т.к. с каждым годом таких конфигураций попадается всё реже. Разработка ведётся с 2009 года, но именно этот релиз был подготовлен на платформе 8.3.16.1063 и применяется на 8.3.15 с включенной совместимостью 8.2

1 стартмани

22.10.2019    8167    5    strange2007    10    

Вывод QR-кода типовыми средствами.

Сканер штрих-кода Универсальные функции v8 КА1 УТ10 УПП1 Абонемент ($m)

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    53135    110    Емельянов Алексей    56    

Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы)

Универсальные обработки Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет "КомпонентаПечатиQRКода". Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

1 стартмани

11.10.2019    37485    198    dm1try    0    

Регулярные выражения без COM объектов и внешних компонент Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

09.02.2015    30735    25    boogie    42    

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

Универсальные функции Чистка данных v8 1cv8.cf Абонемент ($m)

Попалась база КА 2.4 с движениями по регистрам, у которых регистратор был непроведен или помечен на удаление. Написал небольшую обработку по удалению таких записей из регистров.

1 стартмани

27.09.2019    22377    33    John_d    20    

1С REST API клиент. Обмен из 1С с сайтом/магазином WordPress/WooCommerce с помощью REST API

Универсальные обработки WEB Универсальные функции Оптовая торговля Розничная торговля v8 1cv8.cf УУ Абонемент ($m)

Обмен 1С с сайтом на WordPress и магазином Woocommerce. Внешняя обработка сделана как REST API клиент сайта WordPress, позволяет разработчику публиковать/изменять/удалять/просматривать посты/страницы/товары/фотографии (в связке с товаром/страницей) на сайте/магазине WordPress/Woocommerce. Обработки сделаны с использованием обычных форм, демо-формы использования в комплекте.

10 стартмани

29.07.2019    18119    17    osivv    15    

Экспортные процедуры и функции общих модулей БП 3.0, ЗУП 3.1, УТ 11

Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Таблицы экспортных процедур и функций общих модулей конфигураций БП КОРП 3.0, ЗУП КОРП 3.1, УТ 11 + обработка по формированию такой таблицы из любой конфигурации.

14.06.2019    16488    31    SanchoD    33    

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

14.02.2015    119971    119    daMaster    91    

Создание и запуск скрипта для ввода текста на базе AutoHotkey

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

28.01.2019    11539    2    Wezoowy    1    

Даты пересечения двух периодов

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

01.03.2018    14533    1    yojeeg    0    

Подписка на события, преобразование объекта в JSONAPI, отправка в RabbitMQ

Внешние источники данных Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка содержит функции: - сериализация объекта 1с в JSONAPI - отправка в RabbitMQ по HTTP

1 стартмани

26.02.2018    18225    24    yaxinr    7    

Универсальная функция получения таблицы дат за период. С любым интервалом (день, неделя, месяц, квартал и т.д.) Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Небольшая функция, возвращающая таблицу значений со всеми датами за период. Интервал дат можно задать любой: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год.

1 стартмани

14.06.2014    48580    44    mtv:)    8    

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

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

22.01.2018    16379    2    dusha0020    11    

Определение MIME-типа файла

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

12.01.2018    15146    24    o.nikolaev    6    

Количество рабочих и выходных дней в месяце с сайта its.1c.ru

Учет рабочего времени Универсальные функции v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Простенькая функция, которая обращается к сайту ИТС и возвращает оттуда сведения о количестве рабочих дней в указанном месяце. Платформа 8.3.10, УФ.

1 стартмани

22.11.2017    15132    1    simplysimply    5    

Сравнение строк с выводом различий Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка созданная с целью представить реализованный мной алгоритм сравнения строк. Реализована на 1С 8.1, однако будет работать и на более поздних версиях.

1 стартмани

15.05.2014    26918    74    bahbah    16    

Запуск приложений на клиенте из RDP-сессии

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

30.10.2017    16885    6    GusevNA    4    

Цвет индикатора в зависимости от значения

Работа с интерфейсом Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Функция, которая выдает значение цвета, в зависимости от передаваемого значения и максимально возможного значения.

1 стартмани

29.08.2017    14593    6    kc-ropa    12    

Программное создание элементов графической схемы (через XSLT)

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

20.07.2017    29279    82    lazarenko    20    

Включаем звук в 1С. Доступно и всерьез. Промо

Математика и алгоритмы Универсальные функции v8 1cv8.cf Абонемент ($m)

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    91828    275    sikuda    37    

Когда надо вывести (короткий) штрихкод ссылки

Универсальные функции v8 1cv8.cf Абонемент ($m)

Недавно поставили задачу - в документах печать штрихкод ссылки на элемент справочника. Все знают функцию XMLСтрока(); -  с ее помощью можно получить текстовое представление ссылки и вывести на штрихкод (типа d8cecae7-aee2-11de-bd70-00151716f9f5 ). Но результат получается аж из 36 символов! Такие штрихкоды понимал не каждый сканер.

1 стартмани

17.05.2017    8748    2    Skimen    5    

Универсальная процедура по загрузке файла из интернета

WEB Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Передаем в процедуру всего два параметра: откуда взять и куда положить. Остальное она сделает сама

1 стартмани

17.05.2017    23271    17    json    5    

Правильный вопрос

Универсальные функции v8 1cv8.cf Абонемент ($m)

Заметили, что пользователи бездумно кликают по первой попавшейся кнопке, не удосужившись прочитать текст предупреждения или вопроса? Данная функция призвана решить данную проблему!

1 стартмани

15.05.2017    15567    0    SvoyakMartin    15    

Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3 Промо

Универсальные функции Обновление 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

10.02.2013    61850    115    pbazeliuk    40    

Набор математических функций

Универсальные функции Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Небольшой набор математических функций для работы с массивами чисел.

1 стартмани

12.01.2017    19813    7    SvoyakMartin    23    

Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9

Универсальные функции Механизмы платформы 1С v8 1cv8.cf Россия Абонемент ($m)

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

1 стартмани

14.11.2016    41587    19    Anton64    25    

Организация выбора месяца из списка (универсально + НЕ модально )

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Пришлось столкнуться с такой проблемой, как выбор месяца из ниспадающего списка (с элементами вида "НазваниеМесяца Год") с возможностью изменения года. Хочу предложить универсальный вариант реализации данного механизма на основе механизма http://infostart.ru/public/167549/ ЗЫ: основные отличия: - вместо "НачалоВыбораИзСписка" работаем с "ОбработкаВыбора" без модальности - Обратное преобразование в дату не только на русском - Универсальность процедур. Одна функция выбирается в нескольких полях.

1 стартмани

09.11.2016    19045    19    igorkosmos    5