|
Вопрос по работе со справочником подразделений | ☑ | ||
---|---|---|---|---|
0
не_1Снег
07.11.12
✎
12:43
|
У нас штатная структура в 4 этажа: Служба->Управление->Отдел->Группа
Делаю внешний отчет по штатке в соответствии с утвержденной у нас формой, т.е. вместо одной колонки - подразделение, выводятся все 4 колонки, т.е. Служба->Управление->Отдел->Группа. Все нормально, но на некоторых почему то не выводятся по 2 предыдущих уровна. Открываю справочник ПодразделенияОрганизация, смотрю глазами, там все в порядке. Где неправильно и что? Вот фрагмент кода: Функция ПолучитьВышестоящееПодразделение(КодПодр) Подр = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(КодПодр); Если Подр <> Справочники.ПодразделенияОрганизаций.ПустаяСсылка() Тогда Возврат Подр.Родитель Иначе Сообщить("Вышестоящее подразделение для кода: "+КодПодр+" не надено!"); Возврат Справочники.ПодразделенияОрганизаций.ПустаяСсылка(); КонецЕсли; КонецФункции //........................ Пока ВыборкаДетали.Следующий() Цикл ОбластьСтрокаДоНадбавок.Параметры.Заполнить(ВыборкаДетали); Код = ВыборкаДетали.Код; Подр = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Код); Уровень = Подр.Уровень(); //Текущий уровень строки штатной единицы ОбластьСтрокаДоНадбавок.Параметры.ПодразделениеОрганизацииКод = Цел(Код); Если Уровень = 0 Тогда ОбластьСтрокаДоНадбавок.Параметры.Служба = ВыборкаДетали.ПодразделениеОрганизации; ОбластьСтрокаДоНадбавок.Параметры.Управление = ""; ОбластьСтрокаДоНадбавок.Параметры.Отдел = ""; ОбластьСтрокаДоНадбавок.Параметры.Группа = ""; КонецЕсли; Если Уровень = 1 Тогда ОбластьСтрокаДоНадбавок.Параметры.Управление = ВыборкаДетали.ПодразделениеОрганизации; СлужбаСсылка = ПолучитьВышестоящееПодразделение(Код); ОбластьСтрокаДоНадбавок.Параметры.Служба = СлужбаСсылка; ОбластьСтрокаДоНадбавок.Параметры.Отдел = ""; ОбластьСтрокаДоНадбавок.Параметры.Группа = ""; КонецЕсли; Если Уровень = 2 Тогда ОбластьСтрокаДоНадбавок.Параметры.Отдел = ВыборкаДетали.ПодразделениеОрганизации; УправлениеСсылка = ПолучитьВышестоящееПодразделение(Код); ОбластьСтрокаДоНадбавок.Параметры.Управление = УправлениеСсылка; СлужбаСсылка = ПолучитьВышестоящееПодразделение(УправлениеСсылка.Код); ОбластьСтрокаДоНадбавок.Параметры.Служба = СлужбаСсылка; ОбластьСтрокаДоНадбавок.Параметры.Группа = ""; КонецЕсли; Если Уровень = 3 Тогда ОбластьСтрокаДоНадбавок.Параметры.Группа = ВыборкаДетали.ПодразделениеОрганизации; ОтделСсылка = ПолучитьВышестоящееПодразделение(ВыборкаДетали.Код); ОбластьСтрокаДоНадбавок.Параметры.Отдел = ОтделСсылка; УправлениеСсылка = ПолучитьВышестоящееПодразделение(ОтделСсылка.Код); ОбластьСтрокаДоНадбавок.Параметры.Управление = УправлениеСсылка; Службассылка = ПолучитьВышестоящееПодразделение(УправлениеСсылка.Код); ОбластьСтрокаДоНадбавок.Параметры.Служба = Службассылка; КонецЕсли; |
|||
1
vmv
07.11.12
✎
12:46
|
(0) я не вижу рекурсии в этом блоке г-кода, чувак
можешь быть свободен, вернее бегом изучать классические методы перебора иерархий |
|||
2
не_1Снег
07.11.12
✎
12:49
|
Вот запрос, все путем
" |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации | КОНЕЦ КАК ПодразделениеОрганизации, | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.Должность | КОНЕЦ КАК Должность, | СУММА(ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавокЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок | КОНЕЦ) КАК ОсвобожденныхСтавок |ПОМЕСТИТЬ ОсворбожденныеСтавки |ИЗ | (ВЫБРАТЬ | СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.Сотрудник КАК Сотрудник, | СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.Организация КАК Организация, | ВЫБОР | КОГДА СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ПериодЗавершения <= &Период | ТОГДА СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ОсвобождатьСтавкуЗавершения | ИНАЧЕ СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ОсвобождатьСтавку | КОНЕЦ КАК ОсвобождатьСтавки | ИЗ | РегистрСведений.СотрудникиОсвободившиеСтавкиВОрганизациях.СрезПоследних(&Период, ) КАК СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних | ГДЕ | ВЫБОР | КОГДА СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ПериодЗавершения <= &Период | ТОГДА СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ОсвобождатьСтавкуЗавершения | ИНАЧЕ СотрудникиОсвободившиеСтавкиВОрганизацияхСрезПоследних.ОсвобождатьСтавку | КОНЕЦ) КАК СотрудникиОсовободившиеставки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних | ПО СотрудникиОсовободившиеставки.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник | И СотрудникиОсовободившиеставки.Организация = РаботникиОрганизацийСрезПоследних.Организация |ГДЕ | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния | КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) | |СГРУППИРОВАТЬ ПО | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации | КОНЕЦ, | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &Период | ТОГДА РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.Должность | КОНЕЦ |; | |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код КАК Код, | ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Владелец КАК Организация, | ШтатноеРасписаниеОрганизаций.КоличествоСтавок КАК КоличествоСтавок, | ЕСТЬNULL(ЗанятыеШтатныеЕдиницыОрганизаций.КоличествоСтавокОстаток, 0) - ЕСТЬNULL(ОсворбожденныеСтавки.ОсвобожденныхСтавок, 0) КАК ЗанятоСтавок, | ШтатноеРасписаниеОрганизаций.КоличествоСтавок - ЕСТЬNULL(ЗанятыеШтатныеЕдиницыОрганизаций.КоличествоСтавокОстаток, 0) + ЕСТЬNULL(ОсворбожденныеСтавки.ОсвобожденныхСтавок, 0) КАК Вакантно, | ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации, | ШтатноеРасписаниеОрганизаций.Должность КАК Должность, | ШтатноеРасписаниеОрганизаций.ГрафикРаботы КАК ГрафикРаботы, | ШтатноеРасписаниеОрганизаций.ВидТарифнойСтавки КАК ВидТарифнойСтавки, | ШтатноеРасписаниеОрганизаций.ВалютаТарифнойСтавки КАК ВалютаТарифнойСтавки, | ШтатноеРасписаниеОрганизаций.МинимальнаяТарифнаяСтавка КАК МинимальнаяТарифнаяСтавка, | ШтатноеРасписаниеОрганизаций.МаксимальнаяТарифнаяСтавка КАК МаксимальнаяТарифнаяСтавка, | СведенияОШтатныхЕдиницахОрганизации.Информация КАК Информация, | СведенияОШтатныхЕдиницахОрганизации.ДолжностныеОбязанности КАК ДолжностныеОбязанности, | СведенияОШтатныхЕдиницахОрганизации.ДолженЗнать КАК ДолженЗнать, | СведенияОШтатныхЕдиницахОрганизации.ТребованияККвалификации КАК ТребованияККвалификации |{ВЫБРАТЬ | Организация.*, | КоличествоСтавок, | ЗанятоСтавок, | Вакантно, | ПодразделениеОрганизации.*, | Должность.*, | ГрафикРаботы.*, | ВидТарифнойСтавки, | ВалютаТарифнойСтавки, | МинимальнаяТарифнаяСтавка, | МаксимальнаяТарифнаяСтавка, | Информация, | ДолжностныеОбязанности, | ДолженЗнать, | ТребованияККвалификации} |ИЗ | РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(&Период, {(ПодразделениеОрганизации).* КАК ПодразделениеОрганизации, (Должность).* КАК Должность, (ПодразделениеОрганизации.Владелец).* КАК Организация}) КАК ШтатноеРасписаниеОрганизаций | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗанятыеШтатныеЕдиницыОрганизаций.Остатки(&ДатаПослеАктуальности, {(ПодразделениеОрганизации).* КАК ПодразделениеОрганизации, (Должность).* КАК Должность, (ПодразделениеОрганизации.Владелец).* КАК Организация}) КАК ЗанятыеШтатныеЕдиницыОрганизаций | ПО ШтатноеРасписаниеОрганизаций.Должность = ЗанятыеШтатныеЕдиницыОрганизаций.Должность | И ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации = ЗанятыеШтатныеЕдиницыОрганизаций.ПодразделениеОрганизации | {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОШтатныхЕдиницахОрганизаций КАК СведенияОШтатныхЕдиницахОрганизации | ПО ШтатноеРасписаниеОрганизаций.Должность = СведенияОШтатныхЕдиницахОрганизации.Должность | И ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации = СведенияОШтатныхЕдиницахОрганизации.ПодразделениеОрганизации} | ЛЕВОЕ СОЕДИНЕНИЕ ОсворбожденныеСтавки КАК ОсворбожденныеСтавки | ПО ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации = ОсворбожденныеСтавки.ПодразделениеОрганизации | И ШтатноеРасписаниеОрганизаций.Должность = ОсворбожденныеСтавки.Должность |ГДЕ | ((ШтатноеРасписаниеОрганизаций.КоличествоСтавок <> 0 | ИЛИ ЗанятыеШтатныеЕдиницыОрганизаций.КоличествоСтавокОстаток <> 0)) | И ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Владелец = &Организация | |{ГДЕ | ШтатноеРасписаниеОрганизаций.ГрафикРаботы.* КАК ГрафикРаботы, | ШтатноеРасписаниеОрганизаций.ВидТарифнойСтавки КАК ВидТарифнойСтавки, | ШтатноеРасписаниеОрганизаций.ВалютаТарифнойСтавки КАК ВалютаТарифнойСтавки, | ШтатноеРасписаниеОрганизаций.МинимальнаяТарифнаяСтавка, | ШтатноеРасписаниеОрганизаций.МаксимальнаяТарифнаяСтавка, | ШтатноеРасписаниеОрганизаций.КоличествоСтавок, | ЗанятыеШтатныеЕдиницыОрганизаций.КоличествоСтавокОстаток КАК ЗанятоСтавок, | (ШтатноеРасписаниеОрганизаций.КоличествоСтавок - ЕСТЬNULL(ЗанятыеШтатныеЕдиницыОрганизаций.КоличествоСтавокОстаток, 0)) КАК Вакантно, | СведенияОШтатныхЕдиницахОрганизации.Информация, | СведенияОШтатныхЕдиницахОрганизации.ДолжностныеОбязанности, | СведенияОШтатныхЕдиницахОрганизации.ДолженЗнать, | СведенияОШтатныхЕдиницахОрганизации.ТребованияККвалификации, | ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Владелец.* КАК Организация, | ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.*, | ШтатноеРасписаниеОрганизаций.Должность.*} | УПОРЯДОЧИТЬ ПО | ПодразделениеОрганизации "; |
|||
3
vmv
07.11.12
✎
12:49
|
да почему эту хрень
ОбластьСтрокаДоНадбавок.Параметры.Группа = ВыборкаДетали.ПодразделениеОрганизации; ОтделСсылка = ПолучитьВышестоящееПодразделение(ВыборкаДетали.Код); ОбластьСтрокаДоНадбавок.Параметры.Отдел = ОтделСсылка; УправлениеСсылка = ПолучитьВышестоящееПодразделение(ОтделСсылка.Код); ОбластьСтрокаДоНадбавок.Параметры.Управление = УправлениеСсылка; Службассылка = ПолучитьВышестоящееПодразделение(УправлениеСсылка.Код); ОбластьСтрокаДоНадбавок.Параметры.Служба = Службассылка; не обернуть тожа в процедуру(фкнкцию) а параметры в нее передать в Струкртуре |
|||
4
не_1Снег
07.11.12
✎
12:50
|
(3)Если можно - по делу, Сэр
|
|||
5
vmv
07.11.12
✎
12:52
|
(4) уже все по делу сказано, твое ПолучитьВышестоящее..()
косячное, код уродлив - работай над ошибками |
|||
6
vmv
07.11.12
✎
12:55
|
да и нахрена работать с кодами, если в выборке есть ссылки, да и коды на различных уровнях могут быть идентичны, если уникальность в пределах группы
и такиех почему масса, так и чешуться руки расстрелять тс, ну нельзя быть косячным таким |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |