[РЕШЕНО] Не передается параметр в функцию

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем RuslanKhanow, 24 авг 2015.

  1. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    Приветствую форумчане,возникла проблшема при написании ВПФ
    Код:
    \
    Функция Печать() Экспорт
    
    //Выводим председателя 
        ДанныеКомиссии(КомиссияВСоставе.ПредседательКомиссии);      
        ПредседательКомиссии = Фамилия + " " + Лев(Имя,1) + "." + Лев(Отчество,1) + "."; 
        ДолжностьПредседателя = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(КомиссияВСоставе.ПредседательКомиссии).Должность;
        ОбластьЗаголовок.Параметры.пЧленыКомиссии            = "председатель - " + ДолжностьПредседателя + " " + ПредседательКомиссии;
        ДанныеКомиссии(КомиссияВСоставе.ЗамПредседателяКомиссии); 
       
        //Выводим заместителя
        ДанныеКомиссии(КомиссияВСоставе.ЗамПредседателяКомиссии.Физлицо);
        ЗаместительКомиссии  = Фамилия + " " + Лев(Имя,1) + "." + Лев(Отчество,1) + "."; 
        ДолжностьЗаместителя = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(КомиссияВСоставе.ЗамПредседателяКомиссии).Должность;
        ОбластьЗаголовок.Параметры.ЗамПредседателя            = "Зам. председателя - " + ДолжностьЗаместителя + " " + ЗаместительКомиссии;
    КонецФункции
    
    а вот и сама функция
    Код:
    Функция ДанныеКомиссии(ФизЛицо) 
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    ФИОФизЛицСрезПоследних.ФизЛицо,
        |    ФИОФизЛицСрезПоследних.Фамилия,
        |    ФИОФизЛицСрезПоследних.Имя,
        |    ФИОФизЛицСрезПоследних.Отчество
        |ИЗ
        |    РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
        |ГДЕ
        |    ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
        Запрос.УстановитьПараметр("ФизЛицо",ФизЛицо);
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            Фамилия    = Выборка.фамилия;
            Имя        = Выборка.Имя;
            Отчество   = Выборка.Отчество;       
        КонецЦикла; 
       
    КонецФункции
    
    
    После первого вызова функции параметр передается правильно, а после второго вызова сохраняется тот же самый
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Никогда так не делайте :), запрос в цикле - это жесть. Ваш запрос можно переделать на две строчки кода.
  3. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    не покажете как?)
    --- Объединение сообщений, 24 авг 2015 ---
    и у меня возник еще один вопрос, как все элементы массива засунуть в одну строку?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    СрезПоследних() почитайте в СП.
    Разложить массив в строку. В общих модулях должна быть функция.
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Значит КомиссияВСоставе.ПредседательКомиссии = КомиссияВСоставе.ЗамПредседателяКомиссии.
    Но не понятно. как функция вообще возвращает что-то, т.к., судя по контексту, КомиссияВСоставе.ПредседательКомиссии имеет тип значения СправочникСсылка.Сотрудники, а функция на вход принимает значения типа СправочникСсылка.ФизическиеЛица.
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А почему вот так
    ДанныеКомиссии(КомиссияВСоставе.ЗамПредседателяКомиссии);

    //Выводим заместителя
    ДанныеКомиссии(КомиссияВСоставе.ЗамПредседателяКомиссии.Физлицо);

    В одном месте без физ лица в другом с физ лицом
  7. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    во втором случае ,я просто хотел посмотреть,может если будет физЛицо,то тогда вернет значение
    --- Объединение сообщений, 24 авг 2015 ---
    возвращает ФИОФизЛиц
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ну отладчиком смотрели в первом случае и во втром параметры которые в функцию предаются разные?
  9. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Используете функции как процедуры ? Отладчик не ругается на отсутствие "Возврат" ?
    --- Объединение сообщений, 24 авг 2015 ---
    Фамилия, Имя, Отчество, как понимаю, глобальные переменные ?
    Где еще заполняются ?
    --- Объединение сообщений, 24 авг 2015 ---
    Поскольку на одно физ.лицо может быть несколько сотрудников, у вас могут быть не корректные данные в печатной форме/отчете
    Необходимо использовать запрос к регистру сведений, например "состояние сотрудников организации"
  10. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    Решил задачу
    --- Объединение сообщений, 24 авг 2015 ---
    не правильно делала
    Код:
    Функция ДанныеКомиссии(ФизЛицо) 
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    ФИОФизЛицСрезПоследних.ФизЛицо,
        |    ФИОФизЛицСрезПоследних.Фамилия,
        |    ФИОФизЛицСрезПоследних.Имя,
        |    ФИОФизЛицСрезПоследних.Отчество
        |ИЗ
        |    РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
        |ГДЕ
        |    ФИОФизЛицСрезПоследних.ФизЛицо = &ФизЛицо";
        Запрос.УстановитьПараметр("ФизЛицо",ФизЛицо);
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            Фамилия    = Выборка.фамилия;
            Имя        = Выборка.Имя;
            Отчество   = Выборка.Отчество;       
        КонецЦикла; 
       
        Значение = "" + Фамилия + " " + Лев(Имя,1) + "." + Лев(Отчество,1) + ".";
       
        Возврат Значение;
       
    КонецФункции
    
    
    Код:
    ПредседательКомиссии =  ДанныеКомиссии(КомиссияВСоставе.ПредседательКомиссии.Физлицо);
    ЗаместительКомиссии  = ДанныеКомиссии(КомиссияВСоставе.ЗамПредседателяКомиссии.Физлицо); 
    

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