По нажатию отметки не записывается реквизит Префикс

1. sergqwert15 3 10.09.24 20:51 Сейчас в теме
Есть справочник Сотрудники(УФ)(иерархический) с реквизитами Код, наименование, Полное Наименование и Префикс(текстовый).
Есть обработка "заполнение префиксов", в которой открывается динамический иерархический список сотрудников с добавленным элементом формы "Флаг"(тип булево, отображение флаг).
Добавлен на форму реквизит префикс(текстовый). При нажатии кнопки Выполнить для всех элементов списка с установленным флагом должен записываться реквизит элемента справочника "префикс" из реквизита формы обработки "Префикс". Как раз последний момент не работает. В чём проблема? Помогите, пожалуйста. Прикладываю обработку.

&НаКлиенте
Перем ВыбранныйСотрудник; 

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ВыбранныйСотрудник = Новый Массив;
	
	Сотрудники.Параметры.УстановитьЗначениеПараметра("ВыбранныйСотрудник", ВыбранныйСотрудник);
	
КонецПроцедуры

&НаКлиенте
Процедура СотрудникиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле = Элементы.СотрудникиПометка Тогда
		
		СтандартнаяОбработка = Ложь;
		
		ТекущиеДанные = Элемент.ТекущиеДанные;
		Если ТекущиеДанные <> Неопределено Тогда
			Если ТекущиеДанные.Пометка Тогда
				СнятьПометку(ТекущиеДанные.Ссылка);
			Иначе
				ПоставитьПометку(ТекущиеДанные.Ссылка);
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;
	
	Сотрудники.Параметры.УстановитьЗначениеПараметра("ВыбранныйСотрудник", ВыбранныйСотрудник);
	
	Элементы.Сотрудники.Обновить();
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьПометку(Сотрудник)
	Индекс = ВыбранныйСотрудник.Найти(Сотрудник);
	Если Индекс >= 0 Тогда
		ВыбранныйСотрудник.Удалить(Индекс);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоставитьПометку(Сотрудник)
	Индекс = ВыбранныйСотрудник.Найти(Сотрудник);
	Если Индекс = Неопределено Тогда
		ВыбранныйСотрудник.Добавить(Сотрудник);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
	
	ВыполнитьОбновлениеПрефиксов();
		
КонецПроцедуры

&НаСервере
Процедура ВыполнитьОбновлениеПрефиксов()
	
	Схема = Элементы.Сотрудники.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Сотрудники.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	
	тзСотрудники = Новый ТаблицаЗначений; 
	//Сотрудники = Строки;
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(тзСотрудники);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
	
	Для каждого стТаблицы из тзСотрудники Цикл
		Если стТаблицы.Пометка = Истина Тогда 
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	Сотрудники.Ссылка КАК Ссылка,
			|	Сотрудники.Префикс КАК Префикс
			|ИЗ
			|	Справочник.Сотрудники КАК Сотрудники";
			
			
			РезультатЗапроса = Запрос.Выполнить();
			
			ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл 
				Префикс = Объект.Префикс; 
				СпрСотр = Справочники.Сотрудники.Выбрать();
				
				Пока СпрСотр.Следующий() Цикл
					
					Если СпрСотр.ЭтоГруппа Тогда
						Продолжить;
					КонецЕсли;
					
					СпрСотрОб  = СпрСотр.ПолучитьОбъект();
					
					СпрСотрОб.Префикс = Объект.Префикс;
					СпрСотрОб.Записать();
					
				КонецЦикла;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	

КонецПроцедуры	

&НаКлиенте
Процедура Выполнить(Команда)
	ВыполнитьНаСервере();
КонецПроцедуры
Показать
Прикрепленные файлы:
ЗаполнениеПрефиксов.epf
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 10.09.24 21:07 Сейчас в теме
Блин, это чудовище надо где-то себе сохранить...
Цикл по таблице значений, для каждой строки которой выполняется отдельный запрос с получением всех сотрудников из БД, а потом в цикле по всем сотрудникам из базы данных - еще один цикл по полной выборке из Справочника Сотрудники.

Это зачот, бро!

Сохраню, пока не переписал:
Для каждого стТаблицы из тзСотрудники Цикл
Если стТаблицы.Пометка = Истина Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Ссылка,
| Сотрудники.Префикс КАК Префикс
|ИЗ
| Справочник.Сотрудники КАК Сотрудники";


РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Префикс = Объект.Префикс;
СпрСотр = Справочники.Сотрудники.Выбрать();

Пока СпрСотр.Следующий() Цикл

Если СпрСотр.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;

СпрСотрОб = СпрСотр.ПолучитьОбъект();

СпрСотрОб.Префикс = Объект.Префикс;
СпрСотрОб.Записать();

КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Показать
Оставьте свое сообщение

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