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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Natalia_k, 4 май 2012.

  1. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Всем привет!
    Подскажите, пожалуйста, как просклонять сокращенное ФИО?

    Например, был Иванов Иван Иванович, а нужно чтобы выводило Иванову И. И.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
     Стр="Иванов	 Петр		Сергеевич";  
    //убрать лишние пробелы
    Пока Найти(Стр,"  ")>0 Цикл
    Стр=СтрЗаменить(Стр,"  "," ");
    КонецЦикла;
    //загнать в СЗ
    Стр=""""+СтрЗаменить(Стр," ",""",""")+"""";
    С=СоздатьОбъект("СписокЗначений");
    С.ИзСтрокиСРазделителями(Стр);
    //вуаля...
    Стр=С.ПолучитьЗначение(1)+" "+Лев(С.ПолучитьЗначение(2),1)+". "+Лев(С.ПолучитьЗначение(3),1)+".";
    
    В алгоритме нет проверки на отсутствие отчества (в СЗ только две или одна строка) - допишите сами
  3. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26

    Проблема заключалась не в сокращении инициалов, а в склонении фамилии был Иванов, а нужно, чтобы было Иванову (дательный падеж).
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    // Функция для склонения одного слова!!!
    // 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)));
    Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
    КонецФункции
  5. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Спасибо!
    Только есть нюанс

    если мужской пол, то склоняет правильно, а вот с женским плохо
    Например,
    Бабкин Александр Юрьевич - Бабкину А .Ю.
    Бабкина Наталья Валерьевна - Бабкине Н. В. , а нужно Бабкиной Н.В.

    Как быть?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Пол задается в параметрах. Вы его сами не знаете?
  7. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    К сожалению, нет.

    В справочнике контрагенты я добавила возможность печатать договор, где нужно, чтобы заполнялись данные по шаблону:

    письмо Иванову Н.Н.
    адрес................................


    Поэтому пол я только знаю из карточки и фио самого контрагента.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Пол можно определить по окончанию отчества.

Поделиться этой страницей