Вход | Регистрация

1С:Предприятие ::

Метки:справочники

Помогите разобраться с методом справочника "ПринадлежитГруппе"

Я
   Allan Stark
24.05.04 - 10:16
1С версия 7.7 (7.70.020)
Есть ф-ция, которая должна выдавать ставки начислений (исп. в зарплате).
Конфигурация 1С - комплексная (все компоненты)

Код ф-ции:

Функция ПолучитьСтавку(ГруппаКод, СуммаЗП)
СпрШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок");
СпрШкалаСтавок.ИспользоватьДату(ДатаДок);
СпрШкалаСтавок.ВыбратьЭлементы();
Пока СпрШкалаСтавок.ПолучитьЭлемент() = 1 Цикл
Если (СпрШкалаСтавок.ПринадлежитГруппе(ГруппаКод) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел)
Тогда Возврат СпрШкалаСтавок.Ставка;
КонецЕсли;
КонецЦикла;
Возврат 0;
КонецФункции

Ставки хранятся в соотв. справочнике. Поскольку ставка зависит от суммы начисленной зарплаты, нужно организовать подбор подходящей ставки внутри группы отчислений.

Все замечательно, только метод справочника "ПринадлежитГруппе" работает некорректно - не сравнивает с группой...

Помогите пожалуйста...
 
  Рекламное место пустует
   SnarkHunter
 
1 - 24.05.04 - 10:33
Метод ПринадлежитГруппе работает корректно... Просто его в данном контексте используют некорректно... Параметр некорректный, если уж на то пошлО...
   Allan Stark
3 - 24.05.04 - 11:33
В документации сказано, что ему (ПринадлежитГруппе) передается параметр, "содержащий выражение со значением группы справочника".
как это интерпретировать ? Пробовал в качестве параметра и Код справочника и его Наименование - результат отрицательный...

В общем нужно сделать так, чтоб функция просматривала все элементы справочника и если элемент входит в заданную группу и значение начисления зарплаты ниже пороговой ставки - то возвращался этот Код элемента справочника ставок.
   SnarkHunter
 
4 - 24.05.04 - 11:35
Это нужно интерпретировать, как "ссылка на элемент справочника"...
   Allan Stark
6 - 24.05.04 - 11:43
Ну и ? Что, нужно вначале взять некую переменную и найти в нее элемент справочника, который есть группа (НайтиПоКоду) ?

Например:

...........
ЭлементГруппа = СпрШкалаСтавок.НайтиПоКоду(ГруппаКод);
Если (СпрШкалаСтавок.ПринадлежитГруппе(ЭлементГруппа) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел)
Тогда Возврат СпрШкалаСтавок.Ставка;
...........

???
   lexa
 
7 - 24.05.04 - 11:46
А если код не уникальный?
   SnarkHunter
 
8 - 24.05.04 - 11:54
(7)А если это родитель более высокого уровня?
   Allan Stark
9 - 24.05.04 - 11:56
Lexa

В смысле не уникальный ? Так проверить еще дополнительно с помощью .ЭтоГруппа()
А тот факт, что найдутся две группы с одинаковым кодом можно считать недействительным.

Блин, только что попробовал - все равно не работает...

Я что-то вкурить не могу, что нужно этому ".ПринадлежитГруппе(...)" подсунуть...
   Allan Stark
10 - 24.05.04 - 11:58
Да нет у него родителя... Просто есть отдельный неподчиненный никому справочник. Называется СпрШкалаСтавок. В нем - все ставки по налогам, отчислениям и пр.
Они там внутри него отсортированы по группам: по зарплате - отдельно, налоги с предприятия - отдельно, платежи в разные фонды и пошлины - тоже отдельно...
 
  Рекламное место пустует
   lexa
 
11 - 24.05.04 - 12:03
Тогда уж более кооректно передавать не "Код", а "ПолныйКод", хотя правильно передавать "ссылка на элемент справочника"
   Allan Stark
12 - 24.05.04 - 12:03
Ой, что-то не то сморозил с Родителем... :-)
Да, в принципе там 3 уровня вложенности... Наприемр в группе "зарплата" есть еще подгруппы "С предприятия" и "С сотрудника"...
   lexa
 
13 - 24.05.04 - 12:06
(10)
Родитель
Значение родительской группы элемента справочника.

Синтаксис:

Родитель

Англоязычный синоним:

Parent

Описание:

Атрибут Родитель предоставляет доступ к значению родительской группы выбранного элемента справочника.

Данный атрибут может быть изменен только для объектов, созданных функцией СоздатьОбъект.

Пример:

Функция ДатьРодителя(Элем)

  // Справочник Товаров многоуровневый


  // Получая в параметре функции значение товара, 


  // надо выдать имя группы товара


   Спр = СоздатьОбъект("Справочник.Товары");

   Спр.НайтиЭлемент(Элем);

   Если Спр.Уровень() > 1 Тогда

      Спр.НайтиЭлемент(Спр.Родитель);

      Возврат "Этот товар принадлежит группе " + Спр.Наименование;

   Иначе

      Возврат "Это товар первого уровня - нет родителя!";

   КонецЕсли;

КонецФункции

Все равно "Код" не является однозначным индентификатором, поэтому лучше передавать ГруппаКод, а Группа, как "ссылка на элемент справочника"
   SnarkHunter
 
15 - 24.05.04 - 12:09
(6)Проверку делай после поиска по коду - найден/не найден...

(10)Не путай Родителя и Владельца...
Я тебе речь веду о строке в (7) - (СпрШкалаСтавок.Родитель.Код = ГруппаКод)... Это быть работать, если ГруппаКод - код группы, в которой непосредственно находится элемент и упадет, если задать код группы более высокого уровня, но в которой, тем не менее, элемент находится в этой группе...
   lexa
 
16 - 24.05.04 - 12:13
Функция ПолучитьСтавку(Группа, СуммаЗП) 
СпрШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок"); 
СпрШкалаСтавок.ИспользоватьДату(ДатаДок); 
СпрШкалаСтавок.ВыбратьЭлементы(); 
Пока СпрШкалаСтавок.ПолучитьЭлемент() = 1 Цикл 
Если (СпрШкалаСтавок.ПринадлежитГруппе(Группа) = 1) И (СуммаЗП < СпрШкалаСтавок.Предел) 
Тогда Возврат СпрШкалаСтавок.Ставка;
КонецЕсли; 
КонецЦикла; 
Возврат 0; 
КонецФункции
   lexa
 
18 - 24.05.04 - 12:48
Ты в функцию передавай не значение реквизита Код элемента справочника, а сам элемент справочника. Покажи как ты вызываешь свою функцию и откуда берутся значения, передаваемые в эту функцию.


Список тем форума
Рекламное место пустует   Рекламное место пустует
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует