Не задано значение параметра 1с

1. katod (user712426) 21.03.17 08:39 Сейчас в теме
Доброго дня! необходимо чтобы формировался список численности по подразделениям.
Создаю внешний отчет. 1С8.3
Выдает ошибку: {ВнешнийОтчет.Список.Форма.ФормаОтчета.Форма(158)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос1.Выполнить();
по причине:
{(37, 59)}: Не задано значение параметра "ТекущееПодразделение"
(ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение = <<?>>&ТекущееПодразделение

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


Прошу учесть, что опыт программиста у меня без малого 3 недели. Почему ругается на текущее подразделение?
Ответы
2. Дмитрий Дмитренко (Sokar) 21.03.17 08:50 Сейчас в теме
Запрос1.УстановитьПараметр("ТекущееПодразделение",ПодразделениеПоКоторомуДелаетсяЗапрос);
3. Дмитрий Дмитренко (Sokar) 21.03.17 08:52 Сейчас в теме
вставить перед строкой
РезультатЗапроса = Запрос1.Выполнить();
4. katod (user712426) 21.03.17 09:29 Сейчас в теме
добавляла строку уже
Запрос1.УстановитьПараметр("ТекущееПодразделение",ТекущееПодразделение);


ругается:
{ВнешнийОтчет.Список.Форма.ФормаОтчета.Форма(156,52)}: Переменная не определена (ТекущееПодразделение)
Запрос1.УстановитьПараметр("ТекущееПодразделение",<<?>>ТекущееПодразделение); (Проверка: Сервер)

Не пойму почему. Вначале запроса же объявляли:
ВЫБРАТЬ
   |   ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение, 
5. Александр (petrik) 21.03.17 09:36 Сейчас в теме
(4) в запросе:
|ГДЕ
| (ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение = &ТекущееПодразделение
вы указываете отбор, по какому подразделению хотите получить информацию, для этого необходимо перед выполнением запроса установить подразделение:
Запрос1.УстановитьПараметр("ТекущееПодразделение", Необходимое подразделение);

в начале запроса вы указали поле для результирующей таблицы, с отборами никак не связанную... По вашей логике: я получаю подразделение по подразделению, но не понятно какому.

установите параметр для какого подразделения вы хотите получить данные.
6. Дмитрий Дмитренко (Sokar) 21.03.17 09:38 Сейчас в теме
сделаем скидку на трехнедельный "опыт"...

вам нужно в запрос передать значение "ПодразделениеПоКоторомуДелаетсяЗапрос" - т.е. это ссылка на элемент справочника "Подразделения"... соответственно вам нужно присвоить (или получить) переменной "ПодразделениеПоКоторомуДелаетсяЗапрос" значение

как пример это может быть
ПодразделениеПоКоторомуДелаетсяЗапрос = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделение");
7. Александр (petrik) 21.03.17 09:50 Сейчас в теме
+(5) так же в запросе у вас еще есть параметры:
&состояние, &Возраст, &Пол, &Период - для них тоже необходимо установить параметр
8. katod (user712426) 21.03.17 10:10 Сейчас в теме
(6)
Устанавливаем параметры:
ПодразделениеПоКоторомуДелаетсяЗапрос=Справочники.ПодразделенияОрганизаций;
	Запрос1.УстановитьПараметр("Пол", Пол);
	Запрос1.УстановитьПараметр("Возраст", Возраст);
	Запрос1.УстановитьПараметр("Состояние", Перечисления.СостоянияСотрудника.Увольнение);
	Запрос1.УстановитьПараметр("КонДата", КонДата);
	Запрос1.УстановитьПараметр("ТекущееПодразделение",ПодразделениеПоКоторомуДелаетсяЗапрос);
	
	РезультатЗапроса = Запрос1.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
...Показать Скрыть

Извините,надо делать срочно, а мозгов не хватает+каша в голове. => Поэтому
1)т.к. все подразделения хранятся в Справочник.ПодразделенияОрганизаций
наверное надо так указать значение переменной. чтобы оттуда брались данные. так?
но по идее надо брать данные из регистра сведений ТекущиеКадровыеДанныеСотр
2)
ПодразделениеПоКоторомуДелаетсяЗапрос = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделение");

что есть УправлениеПользователями у вас??
Еще раз извиняюсь за детсадовские вопросы. Хотя возможно кому-то будет интересна темка.
9. katod (user712426) 21.03.17 10:10 Сейчас в теме