Имя: Пароль:
1C
1С v8
Как правильно поставить функцию
0 2402Andrew2011
 
22.11.11
12:42
Вот код:
Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.УстановитьПараметр("СправочникСсылка", СсылкаНаОбъект.Ссылка);
   Запрос.УстановитьПараметр("Физлицо",СсылкаНаОбъект.Физлицо );
   Запрос.УстановитьПараметр("Организация", СсылкаНаОбъект.ОбособленноеПодразделение);
   Запрос.УстановитьПараметр("ДатаДокумента",     СсылкаНаОбъект.ДатаДоговора);
   Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Представитель действует на основании"));
   Запрос.Текст=
   "ВЫБРАТЬ
   |    ЗначенияСвойствОбъектов.Объект,
   |    ЗначенияСвойствОбъектов.Значение
   |ПОМЕСТИТЬ ВТИзвлечьСвойство
   |ИЗ
   |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
   |ГДЕ
   |    ЗначенияСвойствОбъектов.Свойство = &Свойство";
     
   Запрос.Выполнить();

   // Выберем (если есть доступ) ответственное физлицо
   Запрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо КАК Физлицо,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо.Наименование КАК НаименованиеФизлица,
   |    ФизическиеЛица.Комментарий,
   |    ФизическиеЛица.Пол
   |ПОМЕСТИТЬ ВТОтветственноеЛицо
   |ИЗ
   |    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
   |            &ДатаДокумента,
   |            ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
   |                И СтруктурнаяЕдиница = &Организация) КАК ОтветственныеЛицаОрганизацийСрезПоследних
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
   |        ПО ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо = ФизическиеЛица.Ссылка";
   
   
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ОтветственныеЛицаОрганизаций.ОтветственноеЛицо,
       |    ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
       |    ОтветственныеЛицаОрганизаций.ФизическоеЛицо.Наименование,
//        |    ЕСТЬNULL(ФИОФизЛиц.Фамилия + "" "" + ФИОФизЛиц.Имя + "" "" + ФИОФизЛиц.Отчество, ФИОФизЛиц.ФизЛицо.Наименование ) КАК ФИОРаботника,        
       |    СотрудникиОрганизаций.Наименование КАК ФИОРаботника,
       |    СотрудникиОрганизаций.Физлицо.Пол КАК Пол,
       |    СотрудникиОрганизаций.Физлицо.ДатаРождения КАК ДатаРождения,
       |    УчетКадровОрганизаций.Номер КАК НомерПриказа,
       |    УчетКадровОрганизаций.Дата КАК ДатаПриказа,
       |    СотрудникиОрганизаций.ДатаНачала КАК ДатаПриема,
       |    СотрудникиОрганизаций.ДатаОкончания ДатаУвольнения,
       |    СотрудникиОрганизаций.ПодразделениеОрганизации.Наименование КАК Подразделение,
       |    ВЫРАЗИТЬ(СотрудникиОрганизаций.Организация.Наименование КАК СТРОКА(300)) КАК НазваниеОрганизации,                
       |    СотрудникиОрганизаций.Должность.Наименование КАК Должность
       |ИЗ
       |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций,
       |    ЖурналДокументов.УчетКадровОрганизаций КАК УчетКадровОрганизаций,
       |    РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций,
       |    РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДокумента, Физлицо = &Физлицо) КАК ФИОФизЛиц
       |ГДЕ
       |    СотрудникиОрганизаций.Ссылка = &СправочникСсылка";
       
       
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СПРАВКА_Макет";
   Выборка = Запрос.Выполнить().Выбрать();
   Макетище = ПолучитьМакет("СПРАВКА");
   Макет = Макетище.ПолучитьОбласть("Область");
   Выборка.Следующий() ;
   Макет.Параметры.Заполнить(Выборка);
   ТабДокумент.Вывести(Макет);              
   Возврат ТабДокумент;

Как мне (ФИОРаботника) просклонять стандартной функцией (Функция ПредставлениеРаботника(Работник, Знач Падеж = 3, Знач Пол = Неопределено) Экспорт)
1 2402Andrew2011
 
22.11.11
12:42
Как мне (ФИОРаботника) просклонять стандартной функцией (Функция ПредставлениеРаботника(Работник, Знач Падеж = 3, Знач Пол = Неопределено) Экспорт)
2 rrunover
 
22.11.11
12:54
Как?
Примерно так: Многоуважаемая Функция Адинэсовна-Оглы, будь так добра, просклоняй мне пожалуйста ФИОРаботника. Да возвернись ко мне возвращаемым значением, а передавать тебе я что-либо отказываюсь, ибо боюсь и пробовать не стану!
3 2402Andrew2011
 
22.11.11
12:58
я просто никогда не делал такого,и не пойму,пишу Если ФИОРаботника=.... он пишет что переменная не определена
4 Ненавижу 1С
 
гуру
22.11.11
13:02
(3) ее же нет, что непонятно то?
5 2402Andrew2011
 
22.11.11
13:03
так не пойцму просто как ставить ее
6 2402Andrew2011
 
22.11.11
13:03
и куда
7 Ненавижу 1С
 
гуру
22.11.11
13:03
(5) куда?
8 2402Andrew2011
 
22.11.11
13:04
Функция ПредставлениеРаботника(Работник, Знач Падеж = 3, Знач Пол = Неопределено) Экспорт
   ТипДанных = ТипЗнч(Работник);
   Если ТипДанных = Тип("Строка") Тогда
       РаботникФИО = Работник;
       РаботникПол = Пол;
   Иначе
       Запрос = Новый Запрос;
       Запрос.УстановитьПараметр("Работник", Работник);
       Если ТипДанных = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
           Запрос.Текст =
           "ВЫБРАТЬ
           |    СотрудникиОрганизаций.Наименование,
           |    СотрудникиОрганизаций.Физлицо.Пол КАК Пол
           |ИЗ
           |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
           |ГДЕ
           |    СотрудникиОрганизаций.Ссылка = &Работник";
       Иначе
           Запрос.Текст =
           "ВЫБРАТЬ
           |    ФизическиеЛица.Наименование,
           |    ФизическиеЛица.Пол
           |ИЗ
           |    Справочник.ФизическиеЛица КАК ФизическиеЛица
           |ГДЕ
           |    ФизическиеЛица.Ссылка = &Работник";
       КонецЕсли;
       Выборка = Запрос.Выполнить().Выбрать();
       Если Выборка.Следующий() Тогда
           РаботникФИО = Выборка.Наименование;
           РаботникПол = Выборка.Пол;
       Иначе
           Возврат ""
       КонецЕсли;
   КонецЕсли;
   ФИО = ОбщегоНазначения.ФамилияИнициалыФизЛица(РаботникФИО);
   ПозицияПервогоПробела = Найти(ФИО + " "," ");
   Фамилия  = Лев(ФИО,ПозицияПервогоПробела-1);
   Инициалы = Сред(ФИО,ПозицияПервогоПробела+1);
   РезультатСклонения = "";
   Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), Фамилия, Падеж, РаботникПол, РезультатСклонения) Тогда
       ФИО = РезультатСклонения + " " + Инициалы;    
   КонецЕсли;
   Возврат ФИО
КонецФункции
9 2402Andrew2011
 
22.11.11
13:12
вот ее как сделать и куда поставить!
10 rrunover
 
22.11.11
13:17
1. В "Работник" подставлять значение ФИОРаботника из Выборка.
2. Падеж подбирать, прочитав его в комментах к процедуре УниверсальныеМеханизмы.Просклонять().
3. Пол допустимо не указывать.

Функция возвращает элементарную строку. Всё, что тебе нужно, так это определенному (и явно указанному) параметру макета осуществить присвоение правильно вызываемой функции.
11 Seducer
 
22.11.11
13:19
У тебя запрос ФИОРаботника возвращает как строку. А в функцию нужно передавать ссылку
12 Seducer
 
22.11.11
13:20
ФОИ = ПредставлениеРаботника(СсылкаНаОбъект.Физлицо);
13 2402Andrew2011
 
22.11.11
13:21
ну да тогда получается надо выделить:
СотрудникиОрганизаций.Наименование
14 sergeev-ag-1977
 
22.11.11
13:28
(13) и получите "Иванов Иван Иванович (осн.)"  ;-)
15 sergeev-ag-1977
 
22.11.11
13:28
а он уже не Иванов, Ивонов с января этого года ...
16 sergeev-ag-1977
 
22.11.11
13:29
это для примера ...
17 2402Andrew2011
 
22.11.11
13:31
ФИО = ПредставлениеРаботника(СсылкаНаОбъект.Физлицо);
надо куда поставить?В процедуру обработки падежей?
18 2402Andrew2011
 
22.11.11
13:35
{ВнешняяОбработка.СПРАВКА.МодульОбъекта(74,8)}: Процедура или функция с указанным именем не определена (ПредставлениеРаботника)
   ФИО = <<?>>ПредставлениеРаботника(СсылкаНаОбъект.Физлицо); (Проверка: Толстый клиент (обычное приложение))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан