8.х Формирование данных в реквизите обработки "Динамический список"

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

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Делаю конфигурацию в 1с 8.3. Специфика -проектная деятельность. Есть справочники: Объекты(Код, Наименование, ГИП, РПО,СтатусОбъекта),Сотрудники(Код,Наименование...) и т.д. Документы: РаспределительнаяВедомость(Объект, ГИП, РПО, ВремяГИП, ВремяРуководителяПО, ФактГИП, ФактРПО, ОстатокГИП, ОстатокРПО); ОтчетРуководителяПроекта(РуководительПроекта, СтатусРуководителя,ЧасовВОтчете). Типы данных реквизитов:
    ГИП,РПО - СправочникСсылкаСотрудники
    СтатусОбъекта - ПеречисленияСсылка.СтатусОбъекта
    ПланГИП,ПланРПО, ФактГИП, ФактРПО, ОстатокГИП,ОстатокРПО - Число, 10,3
    РуководительПроекта - СправочникСсылкаСотрудники
    СтатусРуководителя - ПеречисленияСсылка.СтатусРуководителя
    ЧасовВОтчете - Число, 10,3
    Руководители проектов (ГИП и РПО) должны формировать отчеты - сколько они затратили времени на работу по своим объектам. Дляэтого я добавил обработку с реквизитами: РуководительПроекта - СправочникСсылкаСотрудники; СтатусРуководителяПроекта - ПеречисленияСсылка.СтатусРуководителя;СтатусОбъектов - ПеречисленияСсылка.СтатусОбъекта. Также в реквизиты формы обработки добавил динамический список "ОбъектыДляОтчета",в который должен выводиться перечень объектов в зависимости от выбранного руководителя, статуса руководителя и статуса объектов. Для списка я сделал запрос(Свойство - Объект.НастройкаСписка):
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
        Объекты.Наименование КАК ШифрОбъекта,
    Объекты.НаименованиеПолное КАК НаименованиеОбъекта,
    РаспределительнаяВедомость.ВремяГИП,
    РаспределительнаяВедомость.ВремяРуководителяПО,
    РаспределительнаяВедомость.ФактГИП,
    РаспределительнаяВедомость.ФактРПО,
    РаспределительнаяВедомость.ОстатокГИП,
    РаспределительнаяВедомость.ОстатокРПО,
    Объекты.Активность КАК СтатусОбъекта
    ИЗ
        Справочник.Объекты КАК Объекты
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаспределительнаяВедомость КАК РаспределительнаяВедомость
        ПО (РаспределительнаяВедомость.Объект = Объекты.Ссылка)
    ГДЕ
    (Объекты.ГИП = &ГИП
        И Объекты.Активность = &СтатусОбъекта
        ИЛИ Объекты.РуководительПО = &РПО
        И Объекты.Активность = &СтатусОбъекта)
    в модуле обработки прописал процедуры:
    Код:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Объект.РуководительПроекта = ПараметрыСеанса.ТекущийПользователь.ФизЛицо;
        //Объект.Подразделение = ПараметрыСеанса.ТекущийПользователь.ФизЛицо.Подразделение;
            //УстановитьЗапросПоОбъектам();
        КонецПроцедуры
    &НаСервере
    Процедура УстановитьЗапросПоОбъектам()
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("ГИП",Объект.РуководительПроекта);
      //ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("РПО",Объект.РуководительПроекта);
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("СтатусОбъекта",Объект.СтатусОбъектов);
        Если Объект.СтатусРуководителя=Перечисления.СтатусРуководителяПроекта.ГИП Тогда
        ОбъектыДляОтчета.ТекстЗапроса="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                  |    Объекты.НаименованиеПолное КАК НаименованиеОбъекта,
                                  |    РаспределительнаяВедомость.ВремяГИП,
                                  |    РаспределительнаяВедомость.ФактГИП,
                                  |    РаспределительнаяВедомость.ОстатокГИП,
                                  |    Объекты.Активность КАК СтатусОбъекта,
                                  |    Объекты.Ссылка КАК ШифрОбъекта
                                  |ИЗ
                                  |    Справочник.Объекты КАК Объекты
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаспределительнаяВедомость КАК РаспределительнаяВедомость
                                  |        ПО (РаспределительнаяВедомость.Объект = Объекты.Ссылка)
                                  |ГДЕ
                                  |    Объекты.ГИП = &ГИП
                                  |    И Объекты.Активность = &СтатусОбъекта
                                  |
                                  |СГРУППИРОВАТЬ ПО
                                  |    Объекты.НаименованиеПолное,
                                  |    РаспределительнаяВедомость.ВремяГИП,
                                  |    РаспределительнаяВедомость.ФактГИП,
                                  |    РаспределительнаяВедомость.ОстатокГИП,
                                  |    Объекты.Активность,
                                  |    Объекты.Ссылка";
                                 
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("ГИП",Объект.РуководительПроекта);
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("СтатусОбъекта",Объект.СтатусОбъектов);
    КонецЕсли;
    Если Объект.СтатусРуководителя=Перечисления.СтатусРуководителяПроекта.РПО Тогда
    ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("РПО",Объект.РуководительПроекта);   
    ОбъектыДляОтчета.ТекстЗапроса="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                  |    Объекты.НаименованиеПолное КАК НаименованиеОбъекта,
                                  |    РаспределительнаяВедомость.ВремяРуководителяПО,
                                  |    РаспределительнаяВедомость.ФактРПО,
                                  |    РаспределительнаяВедомость.ОстатокРПО,
                                  |    Объекты.Активность КАК СтатусОбъекта,
                                  |    Объекты.Ссылка КАК ШифрОбъекта
                                  |ИЗ
                                  |    Справочник.Объекты КАК Объекты
                                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РаспределительнаяВедомость КАК РаспределительнаяВедомость
                                  |        ПО (РаспределительнаяВедомость.Объект = Объекты.Ссылка)
                                  |ГДЕ
                                  |    Объекты.РуководительПО = &РПО
                                  |    И Объекты.Активность = &СтатусОбъекта
                                  |
                                  |СГРУППИРОВАТЬ ПО
                                  |    Объекты.НаименованиеПолное,
                                  |    РаспределительнаяВедомость.ВремяРуководителяПО,
                                  |    РаспределительнаяВедомость.ФактРПО,
                                  |    РаспределительнаяВедомость.ОстатокРПО,
                                  |    Объекты.Активность,
                                  |    Объекты.Ссылка";
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("РПО",Объект.РуководительПроекта);
        ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("СтатусОбъекта",Объект.СтатусОбъектов);
    КонецЕсли;
    КонецПроцедуры
    &НаСервере
    Процедура СтатусОбъектовПриИзменении(Элемент)
        // Вставить содержимое обработчика.
    УстановитьЗапросПоОбъектам();   
    КонецПроцедуры
    
    т.е. содержимое динамического списка должно меняться в зависимости от выбранного статуса объекта и статуса руководителя проекта. При запуске в режиме предприятия вылетает ошибка:
    Ошибка при выполнении запроса. Ошибка при выполнении запроса.
    по причине:
    Ошибка получения данных
    по причине:
    Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
    по причине:
    Ошибка при исполнении запроса набора данных
    по причине:
    {(14, 17)}: Не задано значение параметра "ГИП"
    (Объекты.ГИП = <<?>>&ГИП

    Что не так делаю? Помогите пожалуйста.
  2. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    В модуле обработки или в модуле формы обработки? Модуль объекта обработки про форму ничего не знает, соответственно и параметры вам не установит.
  3. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    в модуле формы обработки
  4. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Когда открывается форма - выполняется "ПриСозданииНаСервере" и в этот момент выполняется запрос дин. списка.
    У вас запрос дин. списка содержит параметр "ГИП" , который вы не задаете, поэтому он и ругается.
    А уже потом нажатием кнопки наверное вы предполагали изменить текст запроса.
    Т.е надо либо менять текст запроса в процедуре "ПриСозданииНаСервере", либо устанавливать параметр ГП по умолчанию при первоначальном открытиии обработки (также "ПриСозданииНаСервере"),
    а потом уже надеяться на изменение текста запроса ручками с клиента
  5. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    а чем не та установка параметра?
    Код:
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Объект.РуководительПроекта = ПараметрыСеанса.ТекущийПользователь.ФизЛицо;
    
    т.е. лучше создать кнопку с командой и сперва выбирать статусы объектов и руководителя ,а потом по нажатию кнопки заполнять список, назначая новый текст запроса с установкой выбранных параметров?
  6. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Операция присваивания. Слева от знака равенства что находится?
    Параметр в запросе устанавливается по-другому.
    Вы же уже устанавливали параметр в другой процедуре, а тут вдруг незнаете, как.. Списывать нехорошо! :)
  7. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    я не списываю)) я пытаюсь сначала в реквизит РуководительПроекта записать текущего пользователя, а затем установить этого пользователя как значение параметра для запроса кодом:
    Код:
    ОбъектыДляОтчета.Параметры.УстановитьЗначениеПараметра("ГИП",Объект.РуководительПроекта);
  8. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Вот так и установите все параметры "ПриСозданииНаСервере":
    &ГИП
    &СтатусОбъекта
    &РПО
  9. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    спасибо, работает. Пока разобрался))

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