Возможно ли при составлении списка элементов справочника высвечивать не все записи

1. dicwork 27.02.12 13:03 Сейчас в теме
Вводятся документы на основании справочника Сотрудники. Сотрудник мог несколько раз поступать на работу и увольняться. Возможно ли при выборе сотрудника высвечивать в списке только те записи справочника Сотрудники у которых не стоит дата увольнения т.е. только последнюю актуальную запись о данном человеке
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dusha0020 1119 27.02.12 13:26 Сейчас в теме
(1) dicwork, Если Вы формируете список значений, то только Ваша воля что туда добавлять.
Если Вы используете список элементов из справочника, то для формы списка из которой вы делаете выбор сотрудника существует метод ИспользоватьСписокЭлементов() - он опять же устанавливает отображение элементов строго по сформированному Вами списку значений.
Ну а если подробнее зададите вопрос, постараюсь ответить подробнее.
3. nicotin 36 27.02.12 13:54 Сейчас в теме
Вот пример применения идеи, изложенной в (2), применительно к стандартной ЗиК.
В качестве параметра для отбора выбран реквизит "СостояниеФизЛица". Он пустой для уволенных.
В форме списка справочника "Сотрудники" "ДляВыбора" добавляем после
ИначеЕсли ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
.....

код
	Иначе
	        СпрСотрудники.ИспользоватьДату(РабочаяДата());
	        СписокСотров = СоздатьОбъект("СписокЗначений");
		СпрСотрудники.ВыбратьЭлементы();
		Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл
			Если ПустоеЗначение(СпрСотрудники.СостояниеФизЛица)=1 Тогда
				Продолжить
			КонецЕсли;
			СписокСотров.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
		КонецЦикла;
		ИспользоватьСписокЭлементов(СписокСотров);
Показать
4. dicwork 27.02.12 14:12 Сейчас в теме
(3) nicotin
У нас не типовая зарплата, поэтому подскажите в какую предопределенную процедуру нужно помещать код для фильтрации элементов?
И вдогонку тогда еще один вопрос на который я в ЖКК не смог найти ответа - возможно ли иметь несколько форм для отбора в список справочника? Если да, то как между ними переключаться во время работы?
6. Altair777 647 27.02.12 14:38 Сейчас в теме
(2) dusha0020,
(3) nicotin,

садитесь, двойка!
16. dusha0020 1119 27.02.12 15:37 Сейчас в теме
(6) Altair777, А за что двойка? ИспользоватьСписокЭлементов() уже не работает?
Он сложнее чем УстановитьОтбор(), но более универсален. Например (из жизни):
У меня для сотрудника стоит реквизит ДатаОкончанияДействия, а он не всегда пустой если человек еще работает (для принятых временно его проставляют сразу, если приказ об увольнении подписан, но срок увольнения еще не наступил его тоже ставят при внесении в базу приказа - то есть он просто больше рабочей даты если человек еще работает или пуст). Здесь в форму списка справочника сотрудники для выбора передается параметр "Актуальные", а дальше идет их отбор не только по пустой дате, но и по дате окончания действия больше рабочей.
Процедура ПриОткрытии()
	Если Форма.Параметр = "Актуальные" Тогда
		спАктСотр = СоздатьОбъект("СписокЗначений");
		спрС = СоздатьОбъект("Справочник.Сотрудники");
		спрС.ВыбратьЭлементы(0);
		Пока спрС.ПолучитьЭлемент() = 1 Цикл
			Если (ПустоеЗначение(спрС.ДатаОкончанияДействия) = 1) Или
			(спрС.ДатаОкончанияДействия > РабочаяДата()) Тогда
				спАктСотр.ДобавитьЗначение(спрС.ТекущийЭлемент());
			КонецЕсли;
		КонецЦикла;
		ИспользоватьСписокЭлементов(спАктСотр);
	КонецЕсли;
КонецПроцедуры
Показать

Ну и хотелось бы Ваш код для такой задачи на основе метода УстановитьОтбор(). Как пояснение к двойке...
20. Altair777 647 27.02.12 15:55 Сейчас в теме
(16) dusha0020, тут дело не в универсальности, а в скорости. Если УстановитьОтбор подходит для выполнения заданной задачи, то нужно пользоваться им и только им.
Хотя бы еще потому что установленный отбор динамический. Что это такое объяснять надо? ;)
21. Altair777 647 27.02.12 15:56 Сейчас в теме
(16) dusha0020, ужас! Перебор справочника?! А почему не запросом?!
22. dusha0020 1119 27.02.12 16:16 Сейчас в теме
(21) Altair777, Так эффективнее ли запрос прямого перебора зависит от размера справочника. Если он не велик, то создание и исполнение запроса, а потом его перегрузка в список значений могут занять больше времени. Я сначала пишу как проще и если время удовлетворительное, то не перхожу к более сложным формам.
Если УстановитьОтбор подходит для выполнения заданной задачи
так нужно было сначала это выяснить, а потом двойки ставить. ИспользоватьСписокЗначений() подойдет для выполнения любой задачи. А вашего кода по моей трактовке задачи я так и не увидел...
З.Ы. Ну надеюсь на тройку то наговорил?)))
23. Altair777 647 27.02.12 16:34 Сейчас в теме
(22) dusha0020,
так нужно было сначала это выяснить

интуиция мне подсказывает что подходит. Тем более, что логично было предположить, что в [1] под списком имелся в виду не список значений, а форма списка справочника. Поэтому утверждение в [2]
Если Вы формируете список значений, то только Ваша воля что туда добавлять

было ошибочным.

P.S. на тройку?! только на 2 с плюсом :)
25. dusha0020 1119 27.02.12 16:53 Сейчас в теме
(23) Altair777, Ну все же не два, спасибо. Если пересдача не требуется - то вполне нормальная оценка!
P.S. Сам 5 лет преподавал, но за рабочее решение двоек никогда не ставил. Вот за доброту меня и любят все:)))
5. Altair777 647 27.02.12 14:37 Сейчас в теме
(1) dicwork,

УстановитьОтбор(<?>,);
Синтаксис:
УстановитьОтбор(<ИмяОтбора>,<ЗначениеОтбора>)
Назначение:
Установить отбор списка справочника.
Параметры:
<ИмяОтбора> - строка с именем реквизита справочника (по которому возможен отбор, т.е. взведен флажок ''Отбор по реквизиту'' в свойствах реквизита справочника), по которому установлен отбор. Если это значение пустое, то отбор отключается.
<ЗначениеОтбора> - необязательный параметр. Значение отбора.
Замечание:
Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
8. nicotin 36 27.02.12 14:45 Сейчас в теме
(5) Altair777, Ваш совет правильный, но для данного конкретного случая бесполезный, так как в справочнике
сотрудников нет реквизита, по которому можно было бы делать отбор. Дату увольнения использовать нельзя, так как она у всех разная.
9. Altair777 647 27.02.12 15:04 Сейчас в теме
(8) nicotin, можно.
В данном случае отбор по ПУСТОЙ дате

Процедура ПриОткрытии()
	УстановитьОтбор("ДатаУвольнения",ПолучитьПустоеЗначение("Дата"));
КонецПроцедуры // ПриОткрытии
dusha0020; dicwork; +2 Ответить
11. nicotin 36 27.02.12 15:23 Сейчас в теме
(9) Altair777, не берусь спорить, но это нужно еще проверить с учетом
Если это значение пустое, то отбор отключается
12. Altair777 647 27.02.12 15:25 Сейчас в теме
(11) nicotin, курим С/П :)
Это цитата относится к <ИмяОтбора>, а не <ЗначениеОтбора>
10. Altair777 647 27.02.12 15:19 Сейчас в теме
(8) nicotin,
так как в справочнике сотрудников нет реквизита, по которому можно было бы делать отбор

откуда информация что этого реквизита нет?
см 1 записи справочника Сотрудники у которых не стоит дата увольнения
Если реквизит все-таки есть :) нужно ему просто установить флажок Дополнительные - Отбор по реквизиту
7. nicotin 36 27.02.12 14:39 Сейчас в теме
По пунктам
1. Предопределенная процедура - "ПриОткрытии"
2. Для справочников можно создавать несколько форм списков. В конфигураторе нажимаем на справочник - кнопка
"Формы списка" - кнопка "Редактировать" для создания новой формы.
3. По умолчанию названия форм закреплены. "ФормаСписка" - для основного представления, "ДляВыбора" - так и есть для выбора. Если форм с таким названием нет, то будут использованы из имеющихся. Если нет ни одной, то при открытии справочника форма будет создана автоматически. Если нужно открыть какую-то конкретную форму списка - смотри в СП "Открыть форму списка справочника"
13. Altair777 647 27.02.12 15:28 Сейчас в теме
to nicotin если Вы не умеете программировать в 1С 7.7, то не надо засорять профессиональные топики своими домыслами. Оставьте это профессионалам :)
14. dicwork 27.02.12 15:30 Сейчас в теме
Я понял оба предложенных метода фильтрации списка выбора и считаю, что они оба имеют право на жизнь. В данном случае мне скорее всего больше подойдет УстановитьОтбор. Ну а вариант преложенный dusha0020 и nicotin они более общие и могут пригодится, если фильтровать список нужно по нескольким реквизитам. Большое спасибо за консультацию.
17. dusha0020 1119 27.02.12 15:39 Сейчас в теме
(14) dicwork, Обратите внимание на (16) в моей конфигурации задача подобная Вашей просто не решается через УстановитьОтбор() в силу специфики ведения кадрового учета. Уточните не ставится ли у Вас дата увольнения для еще работающих людей "наперед".
15. dicwork 27.02.12 15:36 Сейчас в теме
СП (С/П) это так сокращенно называется синтаксис-помощник?
18. Altair777 647 27.02.12 15:52 Сейчас в теме
(15) dicwork,
СП (С/П) это так сокращенно называется синтаксис-помощник?

Да. Есть еще сокращение ЖКК - желто-красные книги, т.е. документация.
19. dicwork 27.02.12 15:54 Сейчас в теме
(18) Altair777
ЖКК - я уже знаю :-)
24. dicwork 27.02.12 16:47 Сейчас в теме
Ну давайте не будем ссориться. Как говаривал кот Леопольд из мультика - "Ребята давайте жить дружно". Мне помогли оба совета - я понял как можно осуществлять фильтрацию списка выбора. Еще раз спасибо за консультацию. Если кто-то предложит третий способ - я буду только рад еще чему-то научиться. :-)
26. dusha0020 1119 27.02.12 16:58 Сейчас в теме
(24) dicwork, Да мы не ссоримся. Altair777 действительно лучше как спец. Я рассматриваю это как "Бьет значит любит".
dicwork; Altair777; +2 Ответить
27. Altair777 647 27.02.12 17:30 Сейчас в теме
(26) dusha0020, вот спасибо :)
Но мне тоже есть куда расти. Лично для меня большим авторитетом является Ёпрст
И он такой не единственный.

P.S. Если бы он сюда зашел, может и был бы третий способ ;)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот