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