7.7 Модульный код перевод

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем Жентяй, 4 авг 2010.

  1. TopicStarter Overlay
    Жентяй
    Offline

    Жентяй

    Регистрация:
    4 авг 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    переведите код на русский за ранее очень благодарен

    Вложения:

  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Язык вероятного противника нужно знать.....

    Вложения:

    • declineFIO.ert
      Размер файла:
      34 КБ
      Просмотров:
      20
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Код:
    функция ВрегП(val str) экспорт
    Если ПустаяСтрока(str)=1 Тогда Возврат "" КонецЕсли;
    str=lower(str);
    Возврат Врег(Сред(str,1,1))+Сред(str,2);
    КонецФункции  
    //-----------------------------------------------------------------------------
    функция decline(word,sex,declension,base,case)
    Если ПустаяСтрока(word)=1 Тогда Возврат ""  КонецЕсли;
    Если declension=0 Тогда Возврат word
    ИначеЕсли declension=1 Тогда        
    Возврат word+?(case=0,?(base=0,"я","а"),?(base=0,"ю","у"));
    ИначеЕсли declension=2 Тогда 
    Если case=0 Тогда Возврат word+?(base=0,"и","ы") КонецЕсли;
    Если Прав(word,1)="и" Тогда Возврат word+"и" КонецЕсли;
    Возврат word+"е";
    ИначеЕсли declension=3 Тогда 
    Если sex=0 Тогда Возврат word+"ой" КонецЕсли;
    Возврат word+?(case=0,"а","у");  
    ИначеЕсли declension=4 Тогда 
    Если sex=0 Тогда Возврат word+?(base=0,"ей","ой") КонецЕсли;
    Возврат word+?(case=0,?(base=0,"его","ого"),?(base=0,"ему","ому"));
    КонецЕсли;
    Возврат word;
    КонецФункции
    //----------------------------------------------------------------------------- 
    функция analysisI(word,base,sex,declension,sexUpdate=0) 
    Если word="" Тогда Возврат("") КонецЕсли;	
    base=1;       
    Если найти("бвгджзклмнпрстфхцчшщ",Прав(word,1))<>0 Тогда 
    declension=1;                           
    Если sexUpdate=0 Тогда sex=1; sexUpdate=1; КонецЕсли;
    Если word="Павел" Тогда Возврат "Павл" КонецЕсли;
    Если word="Лев" Тогда Возврат "Льв" КонецЕсли;  
    Возврат word;
    ИначеЕсли найти("ьй",Прав(word,1))<>0 Тогда 
    Если (sex=0) or (word="Любовь") Тогда
    declension=0;
    Возврат word; 
    КонецЕсли;
    declension=1;
    Если sexUpdate=0 Тогда sex=1; sexUpdate=1; КонецЕсли;
    base=0;
    Возврат Лев(word,СтрДлина(word)-1);
    ИначеЕсли Прав(word,1)="а" Тогда 
    declension=2;
    Если sexUpdate=0 Тогда sex=0; КонецЕсли;
    Если найти("гйкхчшщ",Сред(word,СтрДлина(word)-1,1))<>0 Тогда base=0 КонецЕсли;
    Возврат Лев(word,СтрДлина(word)-1);
    ИначеЕсли Прав(word,1)="я" Тогда 
    declension=2;
    Если sexUpdate=0 Тогда sex=0; КонецЕсли;
    base=0;
    Возврат Лев(word,СтрДлина(word)-1);
    КонецЕсли;      
    declension=0;
    Возврат word; 
    КонецФункции
    //-----------------------------------------------------------------------------
    функция analysisF(word,base,sex,declension,sexUpdate=0)
    base=1;     
    Если найти("ин ын ов ев ёв",Прав(word,2))<>0 Тогда 
    declension=3; 
    Если sexUpdate=0 Тогда sex=1; sexUpdate=1; КонецЕсли;
    Возврат word;
    ИначеЕсли найти("ина ына ова ева ёва",Прав(word,3))<>0 Тогда 
    declension=3;
    Если sexUpdate=0 Тогда sex=0; sexUpdate=1; КонецЕсли;
    Возврат Лев(word,СтрДлина(word)-1);
    ИначеЕсли найти("ий ый ой",Прав(word,2))<>0 Тогда 
    declension=4;  
    Если sexUpdate=0 Тогда sex=1; sexUpdate=1; КонецЕсли;
    Возврат Лев(word,СтрДлина(word)-2); 
    ИначеЕсли Прав(word,2)="ая" Тогда 
    declension=4;
    Если sexUpdate=0 Тогда sex=0; sexUpdate=1; КонецЕсли;
    Возврат Лев(word,СтрДлина(word)-2);  
    ИначеЕсли Прав(word,2)="яя" Тогда 
    declension=4; 
    base=1;
    Если sexUpdate=0 Тогда sex=0; sexUpdate=1; КонецЕсли;
    Возврат Лев(word,СтрДлина(word)-2);    
    ИначеЕсли (найти("их ых ко",Прав(word,2))<>0) or (Прав(word,3)="ово") Тогда 
    declension=0;
    Возврат word;
    КонецЕсли;
    Если sex=1 Тогда Возврат analysisI(word,base,sex,declension,sexUpdate) КонецЕсли; 
    declension=0;
    Возврат word;
    КонецФункции   
    //-----------------------------------------------------------------------------
    функция analysisO(word,base,sex,declension) 
    base=1;
    Если найти("ич ыч",Прав(word,2))<>0 Тогда 
    declension=1; 
    sex=1;
    Возврат word;
    ИначеЕсли Прав(word,2)="на" Тогда 
    declension=2;
    sex=0;
    Возврат Лев(word,СтрДлина(word)-1);
    КонецЕсли;  
    declension=0;
    Возврат word; 
    КонецФункции
    //----------------------------------------------------------------------------- 
    функция prepareF(fname,sex,case,sexUpdate=0) 
    Перем base,declension;  
    pos=найти(fname,"-");
    vlfname=СоздатьОбъект("ValueList");
    Пока pos<>0 Цикл
    vlfname.addValue(ВрегП(Лев(fname,pos-1)));
    fname=Сред(fname,pos+1);
    pos=найти(fname,"-");
    КонецЦикла;
    vlfname.addValue(ВрегП(fname));  
    i=1;
    Пока sexUpdate=0 Цикл 
    попытка fname=vlfname.getValue(i) исключение Прервать КонецПопытки;
    word=analysisF(fname,base,sex,declension,sexUpdate);
    i=i+1;
    КонецЦикла;
    fname="";
    for i=1 to vlfname.getListSize() Цикл
    word=analysisF(vlfname.getValue(i),base,sex,declension,sexUpdate);
    fname=fname+?(fname="","","-")+decline(word,sex,declension,base,case);
    КонецЦикла;
    Возврат fname;
    КонецФункции
    //-----------------------------------------------------------------------------
    функция declineFIO(val fio,case=0,val sex="") экспорт 
    //основа алгоритма: [url="http://mt.nightmail.ru/index.htm?/russian/fio.htm"]http://mt.nightmail.ru/index.htm?/russian/fio.htm[/url]  
    //
    //fio  - Фамилия Имя Отчество
    //       либо Фамилия Имя
    //       либо Фамилия И.О.
    //       либо Фамилия И.  
    //       либо только Фамилия.
    //       фамилия может быть двойной, тройной и т.д. ("Соловьев-Седой"),
    //       при этом склоняются все части фамилии ("Соловьеву-Седому").
    //       fio может передаваться в любом регистре символов.
    //case - падеж; 0-родительный, 1-дательный.
    //sex  - род; 0-женский, 1-мужской; необходимо указывать только для
    //       склонения неоднозначностей типа "Блок Саша", "Гоголь Н.В." и т.п.
    Перем fname,iname,oname;
    Перем base,declension;                   
    Если sex="" Тогда sexUpdate=0; else sexUpdate=1 КонецЕсли;
    Если ПустаяСтрока(fio)=1 Тогда Возврат "" КонецЕсли;
    fio=СокрЛП(fio);
    //Если СтрЧислоВхождений(fio," ")=0 Тогда Возврат fio КонецЕсли;
    Пока найти(fio,"  ")>0 Цикл fio=СтрЗаменить(fio,"  "," ") КонецЦикла;
    fio=СтрЗаменить(fio," -","-");                     
    fio=СтрЗаменить(fio,"- ","-"); 
    fio=СтрЗаменить(fio," .",".");                     
    fio=СтрЗаменить(fio,". ",".");
    Если найти(fio,".")<>0 Тогда 
    pos=найти(fio," ");
    Если pos=0 Тогда Возврат fio КонецЕсли;
    fname=Лев(fio,pos-1);
    ioname=Врег(Сред(fio,pos+1));
    fname=prepareF(fname,sex,case);
    Возврат fname+" "+СтрЗаменить(ioname," ","");
    КонецЕсли;
    pos=найти(fio," ");
    Если pos=0 Тогда
    Возврат prepareF(fio,sex,case);
    else
    fname=Лев(fio,pos-1);
    fio=Сред(fio,pos+1);
    pos=найти(fio," "); 
    Если pos=0 Тогда
    iname=ВрегП(fio);
    oname="";                   
    else
    iname=ВрегП(Лев(fio,pos-1));
    oname=ВрегП(Сред(fio,pos+1));
    sex=?(Прав(oname,1)="ч",1,0);  
    sexUpdate=1;
    КонецЕсли;                                     
    КонецЕсли;
    Если sexUpdate=0 Тогда word=analysisI(iname,base,sex,declension,sexUpdate) КонецЕсли;  
    Если sex="" Тогда sex=0 КонецЕсли;
    fname=prepareF(fname,sex,case,sexUpdate);
    word=analysisI(iname,base,sex,declension,sexUpdate);
    iname=decline(word,sex,declension,base,case);
    word=analysisO(oname,base,sex,declension);
    oname=decline(word,sex,declension,base,case);
    Возврат СокрЛП(fname+" "+iname+" "+oname);
    КонецФункции 
    //----------------------------------------------------------------------------- 
    rgCase=1;  
    rgSex=1;
    form.lbfio.Caption("Фамилия Имя Отчество
    |либо Фамилия Имя
    |либо Фамилия И.О.
    |либо Фамилия И.  
    |либо только Фамилия.    
    |(именно в таком порядке)
    |Фамилия может быть двойной, тройной и т.д. (""Соловьев-Седой"")");
    
    
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Для чего собственно выкладывать такой большой кусок текста, когда ПРАВИЛЬНЕЕ было бы прикрепить фал....
    А если бы ГМ предложили перевести на русский?)))))))
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    у меня просто под рукой нет 7.7.......
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    с ГМ - это намного дольше.....там можно и завернуть в виде аттача :)
  7. TopicStarter Overlay
    Жентяй
    Offline

    Жентяй

    Регистрация:
    4 авг 2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Всем большое спасибо!!!

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