|
v7: Отобрать сотрудников с определенными должностями | ☑ | ||
---|---|---|---|---|
0
dft2014
21.04.14
✎
11:22
|
Подскажите, как отобрать сотрудников с определенными должностями (5штук)? Вот код, но в 77 уже давно выборки не делала:
Сотрудники = СоздатьОбъект("Справочник.Сотрудники"); Сотрудники.ВыбратьЭлементы(1); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир); Если СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной Тогда ТекДолжность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; Если Сотрудники.НайтиПоРеквизиту("Должность",ТекДолжность,1) = 1 Тогда КонецЕсли; КонецЕсли; |
|||
1
dk
21.04.14
✎
11:37
|
учитесь формулировать вопросы
|
|||
2
dft2014
21.04.14
✎
11:52
|
(1) Надо отобрать сотрудников, у которых наименование должности:
- менеджер - ведущий менеджер - главный менеджер - региональный менеджер |
|||
3
dk
21.04.14
✎
11:54
|
как-то туго с вопросами пока
проблема-то в чем? |
|||
4
КонецЦикла
21.04.14
✎
12:00
|
(0) Должность - это же справочник?
Тогда почему Получить(ДатаФормир).Наименование;? (3) Наверное "как это сделать" |
|||
5
dft2014
21.04.14
✎
12:28
|
(4) Да, это справочник. Типовая ЗиК.
|
|||
6
dft2014
21.04.14
✎
12:49
|
Ап!
|
|||
7
dft2014
21.04.14
✎
13:43
|
Up!
|
|||
8
eshtrey
21.04.14
✎
13:50
|
что должна делать конструкция?
ТекДолжность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; Если Сотрудники.НайтиПоРеквизиту("Должность",ТекДолжность,1) = 1 Тогда ну и если реквизит периодический, по НайтиПоРеквизиту работать не будет |
|||
9
dft2014
21.04.14
✎
14:06
|
(8) Надо вывести в отчет сотрудников с определенными должностями. Поэтому, при переборе спр.Сотрудники надо ставить условие на проверку должности у сотрудника. Если должность входит в эти пять должностей, то отобрать таких сотрудников.
|
|||
10
dft2014
21.04.14
✎
14:16
|
Если пишу:
Сотрудники = СоздатьОбъект("Справочник.Сотрудники"); Сотрудники.ВыбратьЭлементы(1); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир); Если СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной Тогда ТекДолжность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; // Если Сотрудники.НайтиПоРеквизиту("Должность",ТекДолжность,1) = 1 Тогда Если (СокрЛП(Сотрудники.ТекДолжность) = "Менеджер") Тогда // ... КонецЕсли; КонецЕсли; КонецЦикла; То пишет ошибку: Поле агрегатного объекта не обнаружено (ТекДолжность) |
|||
11
parasite12
21.04.14
✎
14:19
|
Значение должности пустое, проверяй на пустое значение
|
|||
12
parasite12
21.04.14
✎
14:22
|
Ну и переменную определи где-нибудь
|
|||
13
dft2014
21.04.14
✎
14:53
|
(11) Переписала, все равно пишет "Неверное имя реквизита". Вот код:
Сотрудники = СоздатьОбъект("Справочник.Сотрудники"); Сотрудники.ВыбратьЭлементы(1); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл Если ПустоеЗначение(Сотрудники.Должность) = 1 Тогда Продолжить; КонецЕсли; СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир); Если СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной Тогда ТекДолжность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; // Если Сотрудники.НайтиПоРеквизиту("Должность",ТекДолжность,1) = 1 Тогда // Если (СокрЛП(Сотрудники.ТекДолжность) = "Менеджер") Тогда Если Сотрудники.НайтиПоРеквизиту("Должность","Менеджер",1) = 1 Тогда // ... КонецЕсли; КонецЕсли; КонецЦикла; |
|||
14
dft2014
21.04.14
✎
14:56
|
Что-то (13) некрасиво получился. Перевыложу:
Сотрудники = СоздатьОбъект("Справочник.Сотрудники"); Сотрудники.ВыбратьЭлементы(1); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл Если ПустоеЗначение(Сотрудники.Должность) = 1 Тогда Продолжить; КонецЕсли; СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир); Если СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной Тогда ТекДолжность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; // Если Сотрудники.НайтиПоРеквизиту("Должность",ТекДолжность,1) = 1 Тогда // Если (СокрЛП(Сотрудники.ТекДолжность) = "Менеджер") Тогда Если Сотрудники.НайтиПоРеквизиту("Должность","Менеджер",1) = 1 Тогда // ... КонецЕсли; КонецЕсли; КонецЦикла; |
|||
15
dft2014
21.04.14
✎
14:56
|
пишет "Неверное имя реквизита".
|
|||
16
eshtrey
21.04.14
✎
15:04
|
(15) у тебя не будет работать
Если Сотрудники.НайтиПоРеквизиту("Должность","Менеджер",1) = 1 Тогда потому что реквизит Должность периодический |
|||
17
dft2014
21.04.14
✎
15:26
|
(16) и как быть? как дотянуться?
|
|||
18
2S
21.04.14
✎
15:34
|
(13) "переписала", пол Мужской
Ахтунг, фото залей и рещим все твои проблемы |
|||
19
Chum
21.04.14
✎
15:36
|
л_СпрДолжности = СоздатьОбъект("Справочник.Должности");
л_Список = СоздатьОбъект("СписокЗначений"); л_СпрДолжности.НайтипоКоду( ТутКодДолжностиМенеджер ); л_Список.ДобавитьЗначение(л_СпрДолжности.ТекущийЭлемент()); // повторить для // ведущий менеджер // главный менеджер // региональный менеджер Сотрудники = СоздатьОбъект("Справочник.Сотрудники"); Сотрудники.ИспользоватьДату(ДатаФормир, 1); Сотрудники.ВыбратьЭлементы(); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл Если Сотрудники.ЭтоГруппа() + Сотрудники.ПометкаУдаления() <> 0 тогда Продолжить; КонецЕсли; Если Сотрудники.СостояниеФизЛица <> Перечисление.СостояниеФизлица.СотрудникОсновной тогда Продолжить; КонецЕсли; Если л_Список.НайтиЗначение(Сотрудники.Должность) = 0 Тогда Продолжить; КонецЕсли; // тут какое-то нужное действие с отобранным сотрудником КонецЦикла; // по сотрудникам |
|||
20
2S
21.04.14
✎
15:36
|
Сотрудники = СоздатьОбъект("Справочник.Сотрудники");
Сотрудники.ВыбратьЭлементы(1); Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл Если Сотрудники.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; Должность = Сотрудники.Должность.Получить(ДатаФормир).Наименование; СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир); Если СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной Тогда Если Сотрудники.НайтиПоРеквизиту(Должность,"Менеджер, бла, блабла, блаблабла",1) = 1 Тогда ... КонецЕсли; КонецЦикла; |
|||
21
2S
21.04.14
✎
15:37
|
пардон
Если Найти(Должность,"Менеджер, бла, блабла, блаблабла")> 0 Тогда ... КонецЕсли; |
|||
22
2S
21.04.14
✎
15:38
|
пля, наоборот ))
Если Найти("Менеджер, бла, блабла, блаблабла",Должность)> 0 Тогда . |
|||
23
asjasj555
21.04.14
✎
15:39
|
Может через запрос
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с (ТекущаяДата()) по (ТекущаяДата()); |Обрабатывать НеПомеченныеНаУдаление; |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент; |Должность = Справочник.Сотрудники.Должность; |Группировка Сотрудник; |Условие(Должность в Список); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; где Список - список из нужных должностей. А теущую дату можно заменить на дату формирования |
|||
24
2S
21.04.14
✎
15:39
|
(23) автор до черных запросов еще не дорос
|
|||
25
Duke1C
22.04.14
✎
10:51
|
(10) Правильно пишет, у объекта "Сотрудники" нет реквизита "ТекДолжность"
пиши вместо: Если (СокрЛП(Сотрудники.ТекДолжность) = "Менеджер") Тогда КонецЕсли; так: Если Найти(Нрег(ТекДолжность),"менеджер")>0 Тогда КонецЕсли; а вообще лучше как в (23) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |