@KTG

Как вклинить в список выбора свой флажок (1С)?

1С ЗуП 2.5
Пытаюсь осваивать программу, но не совсем получается.
Стоит задача по сотруднику определить всё вышестоящее начальство над ним - начальник отдела, начальник управления и так до ген. директора.
Структура подразделений кривая, поэтому кодом я смог определить только иерархию подразделений, к чему отдел относится. Но не получилось однозначно определить кто в этих подразделениях руководитель.
Пытался вот так:
Функция ПолучитьИерархическийСписокРуководства(Подразделение, СписокРуководства)
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
	               |	РаботникиОрганизацийСрезПоследних.Сотрудник,
	               |	РаботникиОрганизацийСрезПоследних.Должность,
	               |	РаботникиОрганизацийСрезПоследних.Сотрудник.ТекущееПодразделениеОрганизации.Родитель КАК Родитель
	               |ИЗ
	               |	РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
	               |ГДЕ
	               |	РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = &Подразделение
	               |	И (РаботникиОрганизацийСрезПоследних.Должность.Наименование ПОДОБНО ""%Начальник%""
				   |	ИЛИ РаботникиОрганизацийСрезПоследних.Должность.Наименование ПОДОБНО ""%Руководитель%""
				   |	ИЛИ РаботникиОрганизацийСрезПоследних.Должность.Наименование ПОДОБНО ""%Старший%"")
				   |УПОРЯДОЧИТЬ ПО ПЕРИОД УБЫВ";
				   
	Запрос.УстановитьПараметр("Подразделение", Подразделение);
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	Если Выборка.Количество() > 0 Тогда
		Пока Выборка.Следующий() Цикл
			СписокРуководства.Добавить(Выборка.Сотрудник, Выборка.Должность);
		КонецЦикла;
		СписокРуководства = ПолучитьИерархическийСписокРуководства(Выборка.Родитель, СписокРуководства);
	Иначе 
		СписокРуководства.Добавить("-", Подразделение);
	КонецЕсли;
	
	Возврат СписокРуководства;
КонецФункции

В общем сбоит, где идет совмещение должностей, но это совмещение идет через заведение должности. Например: "главный инженер - начальник отдела", а в этом отделе идет еще "и.о. начальника отдела". Как идентифицировать - не понятно. Тем более по справочнику руководящая верхушка вообще вынесена за пределы своих подразделений в отдельное и не связанное с другими.

Поэтому решил добавить флажок.
Есть стандартная форма списка (справочник Сотрудники), на ней есть слева дерево отбора со списком подразделений, справа выводятся сотрудники по выбранному подразделению. Хочу что бы на части где список сотрудников можно было проставлять флажок, кто начальник.

Хранить данные связи между подразделение и сотрудником (кто руководитель) решил в регистре сведений: "РуководителиОтделов".
История когда и кто начальником был мне не нужна, поэтому регистр будет "Непериодический".
1 подразделение - 1 галочка.
Поэтому делаю измерение: "Подразделение", тип: СправочникСсылка.ПодразделенияОрганизаций.
Т.к. если подразделения не будет, то не будет и начальника, ставим галочку у измерения "Ведущее".
По подразделению мне нужно получать руководителя, поэтому в ресурсы добавляю "Руководитель", тип: СправочникСсылка.СотрудникиОрганизаций

Регистр создан. А вот дальше у меня засада.
Хранить дублирующую информацию в справочнике сотрудники не вижу смысла. Поэтому думал делать через реквизит формы (флажок) с типом: РегистрСведенийМенеджерЗаписи.РуководителиОтделов.
По моей логике в списке сотрудников на против каждого появляется поле-флажок, где я могу щелкнуть установив его начальником подразделения по которому произведен отбор. Ну и при отборе по подразделению, у меня напротив начальника, если такой есть, высвечивается проставленный флажок.

Затык встал в том, что список сотрудников выводится в табличном поле с типом "СправочникСписок.СотрудникиОрганизации", и не получается в него вклинить новую колонку с реквизитом формы.
Т.е. создал колонку, поставил "элемент управления флажок", но в графе Данные моего реквизита формы нет.
Я понимаю. что там выводит поля справочника сотрудников, но как добавить в эту табличную часть еще и поле регистра?

Возник вопрос, чего я делаю не так? И на сколько логика моя правильная?
  • Вопрос задан
  • 1666 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Dementor
программист, архитектор, аналитик
Загуглил информацию по вашей версии ЗУПа - оказывается она снята с поддержки. Вы точно хотите ее переписывать и вручную самостоятельно реализовывать функционал при изменении требований к учету?

Вашу задачу можно решить несколькими способами. Я бы выбрал самый простой - через описание двух обработчиков событий вашего списка сотрудников.

На форму вашего элемента форма (который типа СправочникСписок) добавляем новую колонку для флажка (без пути к данным). Далее опишем обработчик этого элемента формы ПриПолученииДанных, где в коде обратимся в ваш новый регистр РуководителиОтделов и, в случае нахождения там сотрудника по текущему отделу, устанавливаем флажек, а иначе снимаем.

Установку в базе можно сделать в обработчике ПриВыборе, в котором анализируем текущую колонку и если кликали по флажку, то отказываемся от стандартной обработки и удаляем/добавляем запись в вашем регистре РуководителиОтделов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы