|
Наложение отбора на должности при открытии справочника сотрудники | ☑ | ||
---|---|---|---|---|
0
falselight
19.09.19
✎
05:15
|
Имеется документ. У которого в шапке есть реквизит типа другого документа.
В этом документе что в реквизите в шапке, в его табличной части хранятся введенные должности. У основного документа в табличной части вводятся сотрудники. При открытии списка выбора сотрудников, в форме выбора должны отображаться, только сотрудники с должностями указанными в табличной части документа что в шапке. Как правильно наложить этот отбор, на открывающуюся форму выбора справочника сотрудники, из поля табличной части документа? Это делается похоже только программно. Пытаюсь выявить решение. Подскажите пожалуйста? |
|||
1
ppa32
19.09.19
✎
06:37
|
Уважаемый, доброго времени суток. Как - то сильно мутно у тебя всё получается.
Тебе получается при выборе сотрудника в ТЧ основного документа надо получить форму выбора сотрудника, передать туда ссылку на "реквизитный" документ. А в событии "ПриСозданииНаСервере" в форме выбора сотрудника запросом получить всех нужных сотрудников, и отображать только их. Или еще вариант: при выборе сотрудника в ТЧ основного документа получить (опять же запросом) все должности из "реквизитного" документа, передать их в форму выбора сотрудника, и там уже легко поставишь отбор. |
|||
2
falselight
19.09.19
✎
06:43
|
(1) А можно ещё подсказку, как передать? Можно пример кода? параметрами?
|
|||
3
ppa32
19.09.19
✎
06:49
|
||||
4
falselight
19.09.19
✎
08:30
|
А если нужно должности отбирать запросом, по реквизиту что на форме? А у объекта справочник этого реквизита нет.
Тогда получается это никак же не сделать? |
|||
5
falselight
19.09.19
✎
08:50
|
Как отбирать?????
|
|||
6
ppa32
19.09.19
✎
09:19
|
(4) вопрос не ясен.
У тебя в момент, когда юзер пытается выбрать сотрудника, происходит событие "НачалоВыбора" (если мне не изменяет мой склероз памяти). В этот момент говоришь СтандартнаяОбработка = Ложь; потом делаешь Параметры = Новый Структура("ОсновнойДокументОбъект",Объект); ФормаВыбора = ПолучитьФорму("Справочник.Сотрудники.ФормаВыбора",Параметры); в форме выбора ПриСозданииНаСервере говоришь: Если Параметры.Свойство("ОсновнойДокументОбъект") Тогда Запрос = Новый Запрос("ВЫБРАТЬ всех долбаных сотрудников ИЗ Справочник.Сотрудники ГДЕ ДолбаннаяДолжность В (&Должности)"); Запрос.УстановитьПараметр("Должности", Параметры.ОсновнойДокументОбъект.СсылкаНаРеквизитныйДокумент.ТЧДолжности.ВыгрузитьКолонку("ДолжностиВсякихКлоунов")); Результат = Запрос.Выполнить().Выгрузить(); Этаформа.ТаблицаСортудников.УстановитьОтбор... КонецЕсли; |
|||
7
Fram
19.09.19
✎
09:22
|
(5) то есть другого способа связать 2 справочника нет?
|
|||
8
ppa32
19.09.19
✎
09:26
|
(5) Точнее даже объект передавать - не есть хорошо. Можно завести реквизит в форме, который бы содержал ссылку на "реквизитный" документ. И именно его уже передаёшь как параметр.
|
|||
9
falselight
19.09.19
✎
09:48
|
Сейчас, есть документ, у него есть тч, там поле Допускающий, составного типа
СправочникСсылка.Сотрудники и СправочникСсылкаФизическоеЛицо, выбирают Сотрудники. Я в процедуре ДопускающийНачалоВыбора() сформировал список нужных сотрудников для выбора. Подскажите пожалуйста, как дальше двигаться, что бы открыть форму выбора этих сотрудников ? ///////////////////////////////////////////////////////////////////// &НаКлиенте Процедура интДопускающиеДопускающийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) МассПриема = ПолучитьДолжности(); КонецПроцедуры &НаСервере Функция ПолучитьДолжности() МассДолжности = Объект.интДолжностиЛицаИмеющиеПравоНаВыдачуНарядаДопуска.Должности.ВыгрузитьКолонку("Должность"); СписокДолжности = Новый СписокЗначений; СписокДолжности.ЗагрузитьЗначения(МассДолжности); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.Период КАК Период, | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудниковСрезПоследних.Организация КАК Организация, | КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение, | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПрофессия КАК ДолжностьПрофессия, | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию, | КадроваяИсторияСотрудниковСрезПоследних.Статус КАК Статус |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних |ГДЕ | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПрофессия В(&СписокДолжностей)"; Запрос.УстановитьПараметр("СписокДолжностей", СписокДолжности); МассСотрудники = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник"); МассВозврата = Новый Массив(1); СтруктВозврата = Новый Структура; СтруктВозврата.Вставить("МассДолжности2", МассСотрудники); МассВозврата[0] = СтруктВозврата; Возврат МассВозврата; КонецФункции ////////////////////////////////////////////////////////////////////// Как сказали в (1) сейчас я получил список нужных сотрудников, и получать их нужно было из регистра не из справочника. Как дальше правильнее продолжить? |
|||
10
falselight
19.09.19
✎
09:51
|
Имея вот тут нужный массив сотрудников, наверное тут и нужно открывать какую то форму выбора с этими сотрудниками?
Подскажите пожалуйста. Наверное нужно открывать форму выбора справочника и передавать туда этот массив сотрудников. Как это будет? |
|||
11
falselight
19.09.19
✎
09:51
|
(10+)
&НаКлиенте Процедура интДопускающиеДопускающийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) МассПриема = ПолучитьДолжности(); КонецПроцедуры |
|||
12
ppa32
19.09.19
✎
09:59
|
(11) Отбор ты должен поставить в форме выбора справочника "Сотрудники".
ПередОткрытием будет что - то типа такого: ЭтаФорма.СотрудникиСписок.Отбор.Должность.ВидСравнения = ВидСравнения.ВСписке; ЭтаФорма.СотрудникиСписок.Отбор.Должность.Значение = СписокЗначенийДолжностейКоторыеТыНаковырялЗапросом; ЭтаФорма.СотрудникиСписок.Отбор.Должность.Использование = Истина; |
|||
13
falselight
19.09.19
✎
10:06
|
(12) А если я её сам открою из формы документа в процедуре НачалоВыбора() так что ли нельзя?
|
|||
14
falselight
19.09.19
✎
10:11
|
Вот так примерно можно делать?
&НаКлиенте Процедура интДопускающиеДопускающийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) МассПриема = ПолучитьДолжности(); СписокСотрудников = Новый СписокЗначений; СписокСотрудников.ЗагрузитьЗначения(МассПриема); // СтандартнаяОбработка = Ложь; Форма = Справочники.Сотрудники.ПолучитьФормуВыбора(); Форма.Заголовок = "ВЫБОР СОТРУДНИКОВ ПО ДОЛЖНОСТЯМ"; Форма.Отбор.Ссылка.Использование = Истина; Форма.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; Форма.Отбор.Ссылка.Значение = СписокСотрудников; Форма.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр=Ложь; ВыбранноеЗначение=Форма.ОткрытьМодально(); КонецПроцедуры |
|||
15
falselight
19.09.19
✎
10:15
|
(14+) Не это совсем не то.
Подскажите пожалуйста по коду как нужно. Можно ли это сделать в форме документа? |
|||
16
falselight
19.09.19
✎
11:09
|
РЕШИЛОСЬ ВСЕ ТАК.
&НаКлиенте Процедура интДопускающиеДопускающийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) МассПриема = ПолучитьСотрудниковПоДолжностям(); СписокСотрудниковПоДолжностям = Новый СписокЗначений; СписокСотрудниковПоДолжностям.ЗагрузитьЗначения(МассПриема[0].МассДолжности2); // СтандартнаяОбработка = Ложь; СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Дата", Объект.Дата); СтруктураПараметров.Вставить("Организация", Объект.Организация); СтруктураПараметров.Вставить("СписокСотрудников", СписокСотрудниковПоДолжностям); ОткрытьФорму("Справочник.Сотрудники.ФормаВыбора", СтруктураПараметров, Элемент); КонецПроцедуры // &НаСервере Функция ПолучитьСотрудниковПоДолжностям() МассДолжности = Объект.интДолжностиЛицаИмеющиеПравоНаВыдачуНарядаДопуска.Должности.ВыгрузитьКолонку("Должность"); СписокДолжности = Новый СписокЗначений; СписокДолжности.ЗагрузитьЗначения(МассДолжности); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.Период КАК Период, | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудниковСрезПоследних.Организация КАК Организация, | КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение, | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПрофессия КАК ДолжностьПрофессия, | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию, | КадроваяИсторияСотрудниковСрезПоследних.Статус КАК Статус |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних |ГДЕ | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПрофессия В(&СписокДолжностей) | И НЕ КадроваяИсторияСотрудниковСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.Уволен)"; Запрос.УстановитьПараметр("СписокДолжностей", СписокДолжности); МассСотрудники = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник"); МассВозврата = Новый Массив(1); СтруктВозврата = Новый Структура; СтруктВозврата.Вставить("МассДолжности2", МассСотрудники); МассВозврата[0] = СтруктВозврата; Возврат МассВозврата; КонецФункции |
|||
17
Fram
19.09.19
✎
17:53
|
(16) где взял этот код?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |