Возможно ли при составлении списка элементов справочника высвечивать не все записи
Вводятся документы на основании справочника Сотрудники. Сотрудник мог несколько раз поступать на работу и увольняться. Возможно ли при выборе сотрудника высвечивать в списке только те записи справочника Сотрудники у которых не стоит дата увольнения т.е. только последнюю актуальную запись о данном человеке
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) dicwork, Если Вы формируете список значений, то только Ваша воля что туда добавлять.
Если Вы используете список элементов из справочника, то для формы списка из которой вы делаете выбор сотрудника существует метод ИспользоватьСписокЭлементов() - он опять же устанавливает отображение элементов строго по сформированному Вами списку значений.
Ну а если подробнее зададите вопрос, постараюсь ответить подробнее.
Если Вы используете список элементов из справочника, то для формы списка из которой вы делаете выбор сотрудника существует метод ИспользоватьСписокЭлементов() - он опять же устанавливает отображение элементов строго по сформированному Вами списку значений.
Ну а если подробнее зададите вопрос, постараюсь ответить подробнее.
Вот пример применения идеи, изложенной в (2), применительно к стандартной ЗиК.
В качестве параметра для отбора выбран реквизит "СостояниеФизЛица". Он пустой для уволенных.
В форме списка справочника "Сотрудники" "ДляВыбора" добавляем после
код
В качестве параметра для отбора выбран реквизит "СостояниеФизЛица". Он пустой для уволенных.
В форме списка справочника "Сотрудники" "ДляВыбора" добавляем после
ИначеЕсли ТипЗначенияСтр(Параметры)="СписокЗначений" Тогда
.....
код
Иначе
СпрСотрудники.ИспользоватьДату(РабочаяДата());
СписокСотров = СоздатьОбъект("СписокЗначений");
СпрСотрудники.ВыбратьЭлементы();
Пока СпрСотрудники.ПолучитьЭлемент()=1 Цикл
Если ПустоеЗначение(СпрСотрудники.СостояниеФизЛица)=1 Тогда
Продолжить
КонецЕсли;
СписокСотров.ДобавитьЗначение(СпрСотрудники.ТекущийЭлемент());
КонецЦикла;
ИспользоватьСписокЭлементов(СписокСотров);
Показать
(3) nicotin
У нас не типовая зарплата, поэтому подскажите в какую предопределенную процедуру нужно помещать код для фильтрации элементов?
И вдогонку тогда еще один вопрос на который я в ЖКК не смог найти ответа - возможно ли иметь несколько форм для отбора в список справочника? Если да, то как между ними переключаться во время работы?
У нас не типовая зарплата, поэтому подскажите в какую предопределенную процедуру нужно помещать код для фильтрации элементов?
И вдогонку тогда еще один вопрос на который я в ЖКК не смог найти ответа - возможно ли иметь несколько форм для отбора в список справочника? Если да, то как между ними переключаться во время работы?
(6) Altair777, А за что двойка? ИспользоватьСписокЭлементов() уже не работает?
Он сложнее чем УстановитьОтбор(), но более универсален. Например (из жизни):
У меня для сотрудника стоит реквизит ДатаОкончанияДействия, а он не всегда пустой если человек еще работает (для принятых временно его проставляют сразу, если приказ об увольнении подписан, но срок увольнения еще не наступил его тоже ставят при внесении в базу приказа - то есть он просто больше рабочей даты если человек еще работает или пуст). Здесь в форму списка справочника сотрудники для выбора передается параметр "Актуальные", а дальше идет их отбор не только по пустой дате, но и по дате окончания действия больше рабочей.
Ну и хотелось бы Ваш код для такой задачи на основе метода УстановитьОтбор(). Как пояснение к двойке...
Он сложнее чем УстановитьОтбор(), но более универсален. Например (из жизни):
У меня для сотрудника стоит реквизит ДатаОкончанияДействия, а он не всегда пустой если человек еще работает (для принятых временно его проставляют сразу, если приказ об увольнении подписан, но срок увольнения еще не наступил его тоже ставят при внесении в базу приказа - то есть он просто больше рабочей даты если человек еще работает или пуст). Здесь в форму списка справочника сотрудники для выбора передается параметр "Актуальные", а дальше идет их отбор не только по пустой дате, но и по дате окончания действия больше рабочей.
Процедура ПриОткрытии()
Если Форма.Параметр = "Актуальные" Тогда
спАктСотр = СоздатьОбъект("СписокЗначений");
спрС = СоздатьОбъект("Справочник.Сотрудники");
спрС.ВыбратьЭлементы(0);
Пока спрС.ПолучитьЭлемент() = 1 Цикл
Если (ПустоеЗначение(спрС.ДатаОкончанияДействия) = 1) Или
(спрС.ДатаОкончанияДействия > РабочаяДата()) Тогда
спАктСотр.ДобавитьЗначение(спрС.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
ИспользоватьСписокЭлементов(спАктСотр);
КонецЕсли;
КонецПроцедуры
ПоказатьНу и хотелось бы Ваш код для такой задачи на основе метода УстановитьОтбор(). Как пояснение к двойке...
(21) Altair777, Так эффективнее ли запрос прямого перебора зависит от размера справочника. Если он не велик, то создание и исполнение запроса, а потом его перегрузка в список значений могут занять больше времени. Я сначала пишу как проще и если время удовлетворительное, то не перхожу к более сложным формам.
З.Ы. Ну надеюсь на тройку то наговорил?)))
Если УстановитьОтбор подходит для выполнения заданной задачи
так нужно было сначала это выяснить, а потом двойки ставить. ИспользоватьСписокЗначений() подойдет для выполнения любой задачи. А вашего кода по моей трактовке задачи я так и не увидел...
З.Ы. Ну надеюсь на тройку то наговорил?)))
(22) dusha0020,
интуиция мне подсказывает что подходит. Тем более, что логично было предположить, что в [1] под списком имелся в виду не список значений, а форма списка справочника. Поэтому утверждение в [2]
было ошибочным.
P.S. на тройку?! только на 2 с плюсом :)
так нужно было сначала это выяснить
интуиция мне подсказывает что подходит. Тем более, что логично было предположить, что в [1] под списком имелся в виду не список значений, а форма списка справочника. Поэтому утверждение в [2]
Если Вы формируете список значений, то только Ваша воля что туда добавлять
было ошибочным.
P.S. на тройку?! только на 2 с плюсом :)
(1) dicwork,
УстановитьОтбор(<?>,);
Синтаксис:
УстановитьОтбор(<ИмяОтбора>,<ЗначениеОтбора>)
Назначение:
Установить отбор списка справочника.
Параметры:
<ИмяОтбора> - строка с именем реквизита справочника (по которому возможен отбор, т.е. взведен флажок ''Отбор по реквизиту'' в свойствах реквизита справочника), по которому установлен отбор. Если это значение пустое, то отбор отключается.
<ЗначениеОтбора> - необязательный параметр. Значение отбора.
Замечание:
Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
УстановитьОтбор(<?>,);
Синтаксис:
УстановитьОтбор(<ИмяОтбора>,<ЗначениеОтбора>)
Назначение:
Установить отбор списка справочника.
Параметры:
<ИмяОтбора> - строка с именем реквизита справочника (по которому возможен отбор, т.е. взведен флажок ''Отбор по реквизиту'' в свойствах реквизита справочника), по которому установлен отбор. Если это значение пустое, то отбор отключается.
<ЗначениеОтбора> - необязательный параметр. Значение отбора.
Замечание:
Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
(8) nicotin,
откуда информация что этого реквизита нет?
см 1 записи справочника Сотрудники у которых не стоит дата увольнения
Если реквизит все-таки есть :) нужно ему просто установить флажок Дополнительные - Отбор по реквизиту
так как в справочнике сотрудников нет реквизита, по которому можно было бы делать отбор
откуда информация что этого реквизита нет?
см 1 записи справочника Сотрудники у которых не стоит дата увольнения
Если реквизит все-таки есть :) нужно ему просто установить флажок Дополнительные - Отбор по реквизиту
По пунктам
1. Предопределенная процедура - "ПриОткрытии"
2. Для справочников можно создавать несколько форм списков. В конфигураторе нажимаем на справочник - кнопка
"Формы списка" - кнопка "Редактировать" для создания новой формы.
3. По умолчанию названия форм закреплены. "ФормаСписка" - для основного представления, "ДляВыбора" - так и есть для выбора. Если форм с таким названием нет, то будут использованы из имеющихся. Если нет ни одной, то при открытии справочника форма будет создана автоматически. Если нужно открыть какую-то конкретную форму списка - смотри в СП "Открыть форму списка справочника"
1. Предопределенная процедура - "ПриОткрытии"
2. Для справочников можно создавать несколько форм списков. В конфигураторе нажимаем на справочник - кнопка
"Формы списка" - кнопка "Редактировать" для создания новой формы.
3. По умолчанию названия форм закреплены. "ФормаСписка" - для основного представления, "ДляВыбора" - так и есть для выбора. Если форм с таким названием нет, то будут использованы из имеющихся. Если нет ни одной, то при открытии справочника форма будет создана автоматически. Если нужно открыть какую-то конкретную форму списка - смотри в СП "Открыть форму списка справочника"
Я понял оба предложенных метода фильтрации списка выбора и считаю, что они оба имеют право на жизнь. В данном случае мне скорее всего больше подойдет УстановитьОтбор. Ну а вариант преложенный dusha0020 и nicotin они более общие и могут пригодится, если фильтровать список нужно по нескольким реквизитам. Большое спасибо за консультацию.
Ну давайте не будем ссориться. Как говаривал кот Леопольд из мультика - "Ребята давайте жить дружно". Мне помогли оба совета - я понял как можно осуществлять фильтрацию списка выбора. Еще раз спасибо за консультацию. Если кто-то предложит третий способ - я буду только рад еще чему-то научиться. :-)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот