![]() |
![]() |
![]() |
|
Помогите разобраться с методом справочника "ПринадлежитГруппе" | ☑ | ||
---|---|---|---|---|
0
Allan Stark
24.05.04
✎
10:16
|
1С версия 7.7 (7.70.020)
Есть ф-ция, которая должна выдавать ставки начислений (исп. в зарплате). Конфигурация 1С - комплексная (все компоненты) Код ф-ции: Функция ПолучитьСтавку(ГруппаКод, СуммаЗП) СпрШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок"); СпрШкалаСтавок.ИспользоватьДату(ДатаДок); СпрШкалаСтавок.ВыбратьЭлементы(); Пока СпрШкалаСтавок.ПолучитьЭлемент() = 1 Цикл Если (СпрШкалаСтавок.ПринадлежитГруппе(ГруппаКод) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел) Тогда Возврат СпрШкалаСтавок.Ставка; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции Ставки хранятся в соотв. справочнике. Поскольку ставка зависит от суммы начисленной зарплаты, нужно организовать подбор подходящей ставки внутри группы отчислений. Все замечательно, только метод справочника "ПринадлежитГруппе" работает некорректно - не сравнивает с группой... Помогите пожалуйста... |
|||
1
SnarkHunter
24.05.04
✎
10:33
|
Метод ПринадлежитГруппе работает корректно... Просто его в данном контексте используют некорректно... Параметр некорректный, если уж на то пошлО...
|
|||
2
Allan Stark
24.05.04
✎
11:30
|
Хорошо.
Тогда не подскажете, как сделать так, чтоб корректно работало ? |
|||
3
Allan Stark
24.05.04
✎
11:33
|
В документации сказано, что ему (ПринадлежитГруппе) передается параметр, "содержащий выражение со значением группы справочника".
как это интерпретировать ? Пробовал в качестве параметра и Код справочника и его Наименование - результат отрицательный... В общем нужно сделать так, чтоб функция просматривала все элементы справочника и если элемент входит в заданную группу и значение начисления зарплаты ниже пороговой ставки - то возвращался этот Код элемента справочника ставок. |
|||
4
SnarkHunter
24.05.04
✎
11:35
|
Это нужно интерпретировать, как "ссылка на элемент справочника"...
|
|||
5
lexa
24.05.04
✎
11:43
|
Попробуй
Функция ПолучитьСтавку(ГруппаКод, СуммаЗП) СпрШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок"); СпрШкалаСтавок.ИспользоватьДату(ДатаДок); СпрШкалаСтавок.ВыбратьЭлементы(); Пока СпрШкалаСтавок.ПолучитьЭлемент() = 1 Цикл Если (СпрШкалаСтавок.Родитель.Код = ГруппаКод) И (СуммаЗП < СпрШкалаСтавок.Предел) Тогда Возврат СпрШкалаСтавок.Ставка; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции А вообще лучше передавать не ГруппаКод а Группа, как агрегатный объект, т.е.е элемент справочника |
|||
6
Allan Stark
24.05.04
✎
11:43
|
Ну и ? Что, нужно вначале взять некую переменную и найти в нее элемент справочника, который есть группа (НайтиПоКоду) ?
Например: ........... ЭлементГруппа = СпрШкалаСтавок.НайтиПоКоду(ГруппаКод); Если (СпрШкалаСтавок.ПринадлежитГруппе(ЭлементГруппа) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел) Тогда Возврат СпрШкалаСтавок.Ставка; ........... ??? |
|||
7
lexa
24.05.04
✎
11:46
|
А если код не уникальный?
|
|||
8
SnarkHunter
24.05.04
✎
11:54
|
(7)А если это родитель более высокого уровня?
|
|||
9
Allan Stark
24.05.04
✎
11:56
|
Lexa
В смысле не уникальный ? Так проверить еще дополнительно с помощью .ЭтоГруппа() А тот факт, что найдутся две группы с одинаковым кодом можно считать недействительным. Блин, только что попробовал - все равно не работает... Я что-то вкурить не могу, что нужно этому ".ПринадлежитГруппе(...)" подсунуть... |
|||
10
Allan Stark
24.05.04
✎
11:58
|
Да нет у него родителя... Просто есть отдельный неподчиненный никому справочник. Называется СпрШкалаСтавок. В нем - все ставки по налогам, отчислениям и пр.
Они там внутри него отсортированы по группам: по зарплате - отдельно, налоги с предприятия - отдельно, платежи в разные фонды и пошлины - тоже отдельно... |
|||
11
lexa
24.05.04
✎
12:03
|
Тогда уж более кооректно передавать не "Код", а "ПолныйКод", хотя правильно передавать "ссылка на элемент справочника"
|
|||
12
Allan Stark
24.05.04
✎
12:03
|
Ой, что-то не то сморозил с Родителем... :-)
Да, в принципе там 3 уровня вложенности... Наприемр в группе "зарплата" есть еще подгруппы "С предприятия" и "С сотрудника"... |
|||
13
lexa
24.05.04
✎
12:06
|
(10)
Родитель Значение родительской группы элемента справочника. Синтаксис: Родитель Англоязычный синоним: Parent Описание: Атрибут Родитель предоставляет доступ к значению родительской группы выбранного элемента справочника. Данный атрибут может быть изменен только для объектов, созданных функцией СоздатьОбъект. Пример: Функция ДатьРодителя(Элем) // Справочник Товаров многоуровневый // Получая в параметре функции значение товара, // надо выдать имя группы товара Спр = СоздатьОбъект("Справочник.Товары"); Спр.НайтиЭлемент(Элем); Если Спр.Уровень() > 1 Тогда Спр.НайтиЭлемент(Спр.Родитель); Возврат "Этот товар принадлежит группе " + Спр.Наименование; Иначе Возврат "Это товар первого уровня - нет родителя!"; КонецЕсли; КонецФункции Все равно "Код" не является однозначным индентификатором, поэтому лучше передавать ГруппаКод, а Группа, как "ссылка на элемент справочника" |
|||
14
Allan Stark
24.05.04
✎
12:08
|
lexa, не, как ты предложил что-то не работает...
|
|||
15
SnarkHunter
24.05.04
✎
12:09
|
(6)Проверку делай после поиска по коду - найден/не найден...
(10)Не путай Родителя и Владельца... Я тебе речь веду о строке в (7) - (СпрШкалаСтавок.Родитель.Код = ГруппаКод)... Это быть работать, если ГруппаКод - код группы, в которой непосредственно находится элемент и упадет, если задать код группы более высокого уровня, но в которой, тем не менее, элемент находится в этой группе... |
|||
16
lexa
24.05.04
✎
12:13
|
Функция ПолучитьСтавку(Группа, СуммаЗП)
СпрШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок"); СпрШкалаСтавок.ИспользоватьДату(ДатаДок); СпрШкалаСтавок.ВыбратьЭлементы(); Пока СпрШкалаСтавок.ПолучитьЭлемент() = 1 Цикл Если (СпрШкалаСтавок.ПринадлежитГруппе(Группа) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел) Тогда Возврат СпрШкалаСтавок.Ставка; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции |
|||
17
Allan Stark
24.05.04
✎
12:42
|
lexa, дружище, :-)
Посмотри мой самый первый пост в этой теме... |
|||
18
lexa
24.05.04
✎
12:48
|
Ты в функцию передавай не значение реквизита Код элемента справочника, а сам элемент справочника. Покажи как ты вызываешь свою функцию и откуда берутся значения, передаваемые в эту функцию.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |