| 
    
        
     
     | 
    
    
  | 
v7: Склонение по падежам в 1С 7.7 - нужен работающий пример | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        ЧессМастер    
     04.05.16 
            ✎
    10:20 
 | 
         
        Всем доброе время суток !
 
        Встала задача сделать в 1С 7.7 склонение по падежам. То что это делается с помощью Namedecl.dll я в курсе. Интересует работающий пример кода. Погуглил - нашлись одни примеры использования Namedecl.dll в 1С 8.2 У кого есть пример применения Namedecl.dll в 1С 7.7 - просьба подсказать.  | 
|||
| 
    1
    
        Поpyчик-4    
     04.05.16 
            ✎
    10:21 
 | 
         
        (0) Яндекс и гугл ничего не сказали, редиски? Обязательно надо Namedecl.dll?     
         | 
|||
| 
    2
    
        Fish    
     гуру 
    04.05.16 
            ✎
    10:25 
 | 
         
        (0) Лучшего не встречал: http://www.superjur.narod.ru/padeg.htm
 
        Работает для любой платформы (как 7.7, так и 8.х)  | 
|||
| 
    3
    
        GrVas    
     04.05.16 
            ✎
    10:26 
 | 
         
        Больше 10 лет стоит , и работает без проблем
 
        // (c) Jurer Production Begin ( Start ) // В случае, если программа окажется для Вас полезной, и Вы представляете только свои интересы, а не интересы фирмы, // автор будет весьма признателен, если Вы перечислите ему, то есть мне, некую сумму на Ваше усмотрение // Счет для я-деньги: 4100131343416 - будьте ж несдержаней в своих инициативах // // http://superjur.narod.ru // // Удаление этих строк незнаконно! // Гарантия 91 года и 1 месяц!!! // Послегарантийное обслуживание - бесплатно!!! // Круглосуточная поддержка - все 48 часов в бою! // Ссылка на источник обязательна! // Эти программы защищены законом об авторских правах. Запрещается перепродажа данной программы. // ПРОВЕРЕНО! ВИРУСОВ НЕТ!!! АНТИВИРУСОВ ТОЖЕ!!! // Смотри Милячуша в творительном !! // скупой слепой тупой - пропой!! // !№№! // !56! укратил // !55! Падежи - для оглы и кызы // !54! // !53! Очередное сокращение кода // !51! Прегромадное спасибо Олегу Дубровскому за оказанную моральную, информационную и материальную поддержку сего проекта. // Сергею Толкачёву за напоминание о том, что в русском языке всегда есть место исключениям! // !50! П:Ответственный за электрохозяйство Ф:Ацута Груша // !48! исправлена ошибка при склонении фамилий (спасибо, Mario). // !47! исправлена ошибка при склонении профессий ( спасибо, Павел Ковалев). // !46! оптимизация + четвертый параметр задает, что вернуть - фамилия, имя или отчество или всё сразу в нужном падеже // !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец // !41! отчества оканчивающиеся на "ы" считаются женскими ? // Функция для склонения одного слова!!! // z1 - само слово // z2 - номер падежа // z3 - пол // z4 - 1-склонять как фамилию, 2-имя, 3-отчество Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт z5=Найти(z1,"-"); z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4)); z1=НРег(?(z5=0,z1,Лев(z1,z5-1))); z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1); z5=СтрДлина(z1); za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8); zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1)); zc=Макс(z2,-z2); zd=?(za=4,5,Найти("айяь",z9)); zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd))); ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7); zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р")))))))))); // zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2))); zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2))); Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6); КонецФункции //_____________________________________________________________________________ // z1 - фамилия имя отчество например Железняков Юрий Юрьевич // z2 - Падеж ( по умолчанию = 2 - родительный) // 2 - родительный ( нет кого? ) Железнякова Юрия Юрьевича // 3 - дательный ( кому? ) Железнякову Юрию Юрьевичу // 4 - винительный ( вижу кого? ) Железнякова Юрия Юрьевича // 5 - творительный ( кем? ) Железняковым Юрием Юрьевичем // 6 - предложный ( о ком? ) Железнякове Юрии Юрьевиче // Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю. // z3 - параметр Пол может не указываться, но при наличии фамилий с // инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим // параметром 1 - мужской 2 - женский // ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ! // --------------------------------------------------------------------------------------- // Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица // Если Падеж(Фио ,1 ,3), то на выходе получим Фамилия Имя Отчество и т.д. // Если Падеж(Фио ,1 ,3,"1" ), то Фамилия // Если Падеж(Фио ,1 ,3,"2" ), то Имя // Если Падеж(Фио ,1 ,3,"3" ), то Отчество // Если Падеж(Фио, 1 ,3,"12" ), то Фамилия Имя // Если Падеж(Фио, 1 ,3,"23" ), то Имя Отчество // Если Падеж(Фио,-1 ,3,"231" ),то И. О. Фамилия // Если Падеж(Фио,-1 ,3,"23" ), то И. О. // 10-11-2003 3-20 Функция Падеж(z1,z2=2,z3=3,z4="123",z5=1) Экспорт z6=Нрег(Прав(СокрП(z1),4)); z7=Прав(z6,1); Возврат?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(?((z5=3)и(z7="ы"),z1,Лев(z1,Найти(z1+" "," ")-1)),z2,Сред("ча"+z7,?(z3=3,?(z6="оглы",1,?(z6="кызы",1,3)),z3),1),z5)+" "),z5+1),z4); КонецФункции Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2); z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*"); Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4))))); КонецФункции  | 
|||
| 
    4
    
        zak555    
     04.05.16 
            ✎
    10:27 
 | 
         
        (3) супер-функция     
         | 
|||
| 
    5
    
        пипец    
     04.05.16 
            ✎
    10:53 
 | 
         
        вшоке ))))     
         | 
|||
| 
    6
    
        ЧессМастер    
     04.05.16 
            ✎
    10:58 
 | 
         
        (1) Namedecl.dll для 1С 8.2 это проверенно работающий вариант.
 
        Поэтому для 1С 7.7 искал примеры использования ее же.  | 
|||
| 
    7
    
        ЧессМастер    
     04.05.16 
            ✎
    11:07 
 | 
         
        (3) это из (2) ?     
         | 
|||
| 
    8
    
        Сияющий Асинхраль    
     04.05.16 
            ✎
    11:21 
 | 
         
        (7) Да. Это оно. Лучшего для семерки нет, разве что в самой базе хранить падежи...     
         | 
|||
| 
    9
    
        Абыр    
     04.05.16 
            ✎
    11:32 
 | 
         
        (1) только (3) лучше еще подстраховать справочником исключений     
         | 
|||
| 
    10
    
        Абыр    
     04.05.16 
            ✎
    11:33 
 | 
         
        (9) к (0)     
         | 
|||
| 
    11
    
        stix2010    
     04.05.16 
            ✎
    11:45 
 | 
         
        (8) Это даже в 8 работает     
         | 
|||
| 
    12
    
        ЧессМастер    
     04.05.16 
            ✎
    12:41 
 | 
         
        (8) а разве Namedecl.dll в 1С 7.7 не работает ?     
         | 
|||
| 
    13
    
        ЧессМастер    
     04.05.16 
            ✎
    12:41 
 | 
         
        (11) в 1С 8.2 нет проблемы с падежами - там Namedecl.dl отлично работает     
         | 
|||
| 
    14
    
        hhhh    
     04.05.16 
            ✎
    12:48 
 | 
         
        (13) проверьте на фамилии Дубина. В дательном падеже если даст Дубиной, значит хорошо, если Дубине, значит тоже плохо у вас работает.     
         | 
|||
| 
    15
    
        zak555    
     04.05.16 
            ✎
    12:50 
 | 
         
        (13) ой не факт     
         | 
|||
| 
    16
    
        zak555    
     04.05.16 
            ✎
    12:51 
 | 
         
        Кстати, сейчас бсп предлгает склонять через сервис без библиотеки     
         | 
|||
| 
    17
    
        hhhh    
     04.05.16 
            ✎
    12:52 
 | 
         
        ну, Дубина и Голова - это еще можно ее понять. Но вот как она склоняет "Левина" - это уже перебор.     
         | 
|||
| 
    18
    
        zak555    
     04.05.16 
            ✎
    12:56 
 | 
         
        (17) namedecl надо смотреть из 8.3.8     
         | 
|||
| 
    19
    
        ЧессМастер    
     05.05.16 
            ✎
    11:51 
 | 
         
        так а все таки - примеры использования Namedecl.dll в 1С 7.7 для решения вопроса склонения оп падежам есть ?     
         | 
|||
| 
    20
    
        Duke1C    
     05.05.16 
            ✎
    20:15 
 | 
         
        (19) Ну как-то так у меня было
 
        Перем ОбъектПадеж,ЕстьПадежи; //_______________________________________________________ Функция ФиоПадеж(Знач ФИО,Падеж) ФИО=СокрЛП(""+ФИО); Если ПустаяСтрока(ФИО)=1 Тогда Возврат ""; КонецЕсли; Если ЕстьПадежи=1 Тогда Возврат ОбъектПадеж.Просклонять(ФИО,Падеж); Иначе Возврат ФИО; КонецЕсли; КонецФункции // //_______________________________________________________ Процедура ПриОткрытии() Попытка ЕстьПадежи=ЗагрузитьВК("NameDecl.dll",,); ОбъектПадеж=СоздатьОбъект("AddIn.NameDeclension"); Исключение ЕстьПадежи=0; КонецПопытки; КонецПроцедуры;  | 
|||
| 
    21
    
        ЧессМастер    
     06.05.16 
            ✎
    13:52 
 | 
         
        (20) ага спасибо отлично работает     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |