Имя: Пароль:
1C
1С v8
Склонение ФИО
0 Смертник
 
20.05.13
11:51
Не могу разобраться со склонением в печатной форме
Функция СклонятьПоПадежам(ФизЛицо, Падеж) Экспорт
   РезультатСклонения = "";
   Компонента = "NameDecl.dll";
   
   Попытка
       // Загружаем внешнюю компоненту
       ЗагрузитьВнешнююКомпоненту(Компонента);
       Объект = Новый("AddIn.NameDeclension");
   Исключение
       // Не удалось выполнить операции с внешней компонентой
       Сообщить("Не удалось загрузить внешнюю компоненту по причине: " + ОписаниеОшибки());
       Возврат (Компонента)
   КонецПопытки;
   
   СтрокаФИО = Строка(ФизЛицо);
   Если ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.ПустаяСсылка() Тогда
        ПолЧисло = 0;
   ИначеЕсли ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской Тогда
        ПолЧисло = 1;
   ИначеЕсли ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Женский Тогда
        ПолЧисло = 2;
    КонецЕсли;
       
   // Получаем результат склонения
   РезультатСклонения = Объект.Просклонять(СтрокаФИО, Падеж, ПолЧисло);
   
   Возврат РезультатСклонения;
   
КонецФункции

Сделал как в другой внешней печатной форме сделано. У меня ошибка на Пол. Не пойму в чем дело
1 Cyberhawk
 
20.05.13
11:52
Ошибка на строке

   РезультатСклонения = Объект.Просклонять(СтрокаФИО, Падеж, ПолЧисло);

?
2 Godofsin
 
20.05.13
11:52
Ошибку выложи
3 Смертник
 
20.05.13
11:52
может как то можно по другому.
4 Lama12
 
20.05.13
11:52
(0) На каком фамилии проверяешь?
В 36 релизу УПП библиотека склонений с ошибкой. 1С написали что исправят.
5 Смертник
 
20.05.13
11:52
Значение не является значением объектного типа (Пол)
6 Смертник
 
20.05.13
11:53
39 релиз УПП
7 Godofsin
 
20.05.13
11:53
Значит не ФЛ склоняешь
8 Смертник
 
20.05.13
11:56
ФизЛицо оно откуда должно браться? чтото я туплю страшно
9 Godofsin
 
20.05.13
11:59
(8) Это ты у нас спрашиваешь откуда тебе брать ФЛ? =) Ну вообще-то из справочника физическиеЛица. Но если склонять ты хочешь по справочнику "Сотрудник" тогда Сотрудник.ФизЛицо.
Если тупо строку передаешь, тогда функцию надо допилить
10 Смертник
 
20.05.13
16:09
РезультатСклонения = "";
       Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), Результат.ФизЛицо, 2,Результат.ФизЛицоПол, РезультатСклонения) Тогда
           ФИО = РезультатСклонения;
       КонецЕсли;
Сделал вот так, но выводит все равно в именительном падеже
11 Смертник
 
20.05.13
16:14
Помогите кто знает в чем может быть косяк?
12 fmrlex
 
20.05.13
16:20
Код не смотрел, но предположу "Результат.ФизЛицоПол" меняем на Результат.ФизЛицо.Пол
13 Смертник
 
20.05.13
16:29
Нет я специально вывел Пол ФизЛица - и по нему сделал запрос. Так что это поле отражает пол физ лица
14 Смертник
 
20.05.13
16:31
Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ВЫБОР
       |        КОГДА ПодписантУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантыПоУмолчанию.Должность
       |        ИНАЧЕ ПодписантУказанногоДока.Должность
       |    КОНЕЦ КАК Должность,
       |    ВЫБОР
       |        КОГДА ПодписантУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантыПоУмолчанию.Основание
       |        ИНАЧЕ ПодписантУказанногоДока.Основание
       |    КОНЕЦ КАК Основание,
       |    ВЫБОР
       |        КОГДА ПодписантУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантыПоУмолчанию.ФизЛицо
       |        ИНАЧЕ ПодписантУказанногоДока.ФизЛицо
       |    КОНЕЦ КАК ФизЛицо,
       |    ВЫБОР
       |        КОГДА ПодписантКонтрагентаУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантКонтрагентаПоУмолчанию.Должность
       |        ИНАЧЕ ПодписантКонтрагентаУказанногоДока.Должность
       |    КОНЕЦ КАК ДолжностьКонтрагент,
       |    ВЫБОР
       |        КОГДА ПодписантКонтрагентаУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантКонтрагентаПоУмолчанию.Основание
       |        ИНАЧЕ ПодписантКонтрагентаУказанногоДока.Основание
       |    КОНЕЦ КАК ОснованиеКонтрагент,
       |    ВЫБОР
       |        КОГДА ПодписантКонтрагентаУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантКонтрагентаПоУмолчанию.ФизЛицо
       |        ИНАЧЕ ПодписантКонтрагентаУказанногоДока.ФизЛицо
       |    КОНЕЦ КАК ФизЛицоКонтрагент,
       |    ВЫБОР
       |        КОГДА ПодписантУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантыПоУмолчанию.ФизЛицоКраткоеПредставление
       |        ИНАЧЕ ПодписантУказанногоДока.ФизЛицоКраткоеПредставление
       |    КОНЕЦ КАК ФИО,
       |    ВЫБОР
       |        КОГДА ПодписантКонтрагентаУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантКонтрагентаПоУмолчанию.ФизЛицоКраткоеПредставление
       |        ИНАЧЕ ПодписантКонтрагентаУказанногоДока.ФизЛицоКраткоеПредставление
       |    КОНЕЦ КАК ФИОконтрагента,
       |    ВЫБОР
       |        КОГДА ПодписантУказанногоДока.Организация_Контрагент ЕСТЬ NULL
       |            ТОГДА ПодписантыПоУмолчанию.ФизЛицо.Пол
       |        ИНАЧЕ ПодписантУказанногоДока.ФизЛицо.Пол
       |    КОНЕЦ КАК ФизЛицоПол
       |ИЗ
       |    РегистрСведений.РУ_Подписанты.СрезПоследних(
       |            &ДатаДоговора,
       |            Организация_Контрагент = &Контрагент
       |                И СсылкаНаОбъект = &ТекущийДокумент
       |                И ВидОбъекта = &ВидОбъекта) КАК ПодписантКонтрагентаУказанногоДока
       |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.РУ_Подписанты.СрезПоследних(
       |                &ДатаДоговора,
       |                Организация_Контрагент = &Контрагент
       |                    И ВидОбъекта = &ВидОбъекта) КАК ПодписантКонтрагентаПоУмолчанию
       |            ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.РУ_Подписанты.СрезПоследних(
       |                    &ДатаДоговора,
       |                    Организация_Контрагент = &Организация
       |                        И ВидОбъекта = &ВидОбъекта) КАК ПодписантыПоУмолчанию
       |                ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.РУ_Подписанты.СрезПоследних(
       |                        &ДатаДоговора,
       |                        Организация_Контрагент = &Организация
       |                            И СсылкаНаОбъект = &ТекущийДокумент
       |                            И ВидОбъекта = &ВидОбъекта) КАК ПодписантУказанногоДока
       |                ПО ПодписантыПоУмолчанию.ПорядковыйНомер = ПодписантУказанногоДока.ПорядковыйНомер
       |            ПО ПодписантКонтрагентаПоУмолчанию.ВидОбъекта = ПодписантыПоУмолчанию.ВидОбъекта
       |        ПО ПодписантКонтрагентаУказанногоДока.ПорядковыйНомер = ПодписантКонтрагентаПоУмолчанию.ПорядковыйНомер";
       
   ДатаПодписания  = ?(ЗначениеЗаполнено(СсылкаНаОбъектДоговор.Дата), СсылкаНаОбъектДоговор.Дата, ТекущаяДата());
   Запрос.УстановитьПараметр("ДатаДоговора", ДатаПодписания);
   Запрос.УстановитьПараметр("Контрагент", СсылкаНаОбъектДоговор.Владелец);
   Запрос.УстановитьПараметр("Организация", ЗапросМТС[0].Организация);
   Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   Запрос.УстановитьПараметр("ВидОбъекта", "Заказ поставщику");
   
   Результат = Запрос.Выполнить().Выбрать();
15 fmrlex
 
20.05.13
16:41
(14) Запрос запихай в консоль запросов и посмотри что получается.
16 Смертник
 
20.05.13
17:02
получается все компоненты какие нужны
17 mikecool
 
20.05.13
17:03
(16) т.е. все правильно и не работает?
18 mikecool
 
20.05.13
17:03
+ 17 не верю! (с) Станиславский
19 Смертник
 
20.05.13
17:06
из запроса выбирает те поля какие указаны, а механизм отрабатывает как то не так....все время именительный
20 Смертник
 
20.05.13
17:08
так как эта компонета скажем так работает со Строкой, вывел ФизЛицо.Наименование - чтобы получить строку. Или не так надо было?
21 Мимохожий Однако
 
20.05.13
17:17
Объясни фрагмент
Если ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.ПустаяСсылка() Тогда
        ПолЧисло = 0;
22 Смертник
 
20.05.13
17:48
не у меня мужской получает) я беру конкретный документ
2 + 2 = 3.9999999999999999999999999999999...