0
ghostrid3r
26.06.14
✎
10:58
|
Добрый день, существует такая задача например пользователь задает какой то отбор (или не задает) на форме списка регистра, в результате получается определенное количество записей, в которых по кнопке меняется определенное значение. В обычном приложении у нас есть РегистрСведенийСписок. а в управляемом ДинамическийСписок. Собственно вопрос как сделать примерно такое только с динамическим списком.
вот например процедура из обычного приложения:
Процедура ДействияФормыЗаполнитьПоОтбору(Кнопка)
Перем ДатаОкончания;
Запрос = Новый Запрос;
//Воропаева начало 20.06.2014 22:34:53
ВвестиДату(ДатаОкончания,"Введите дату окончания",ЧастиДаты.Дата);
//Воропаева конец 20.06.2014 22:34:55
УсловиеОтбора = "";
Для Каждого Элемент Из РегистрСведенийСписок.Отбор Цикл
Если НЕ Элемент.Использование Тогда
Продолжить;
КонецЕсли;
Параметр = Элемент.Имя;
ВидСравн = Элемент.ВидСравнения;
//Режимы сравнения
// 0 обычный
// 1 список
// 2 интервал
РежимСравнения = 0;
// Режим 0
Если ВидСравн = ВидСравнения.Равно Тогда
ВидСравненияТекст = "=";
ИначеЕсли ВидСравн = ВидСравнения.НеРавно Тогда
ВидСравненияТекст = "<>";
ИначеЕсли ВидСравн = ВидСравнения.Больше Тогда
ВидСравненияТекст = ">";
ИначеЕсли ВидСравн = ВидСравнения.БольшеИлиРавно Тогда
ВидСравненияТекст = ">=";
ИначеЕсли ВидСравн = ВидСравнения.Меньше Тогда
ВидСравненияТекст = "<";
ИначеЕсли ВидСравн = ВидСравнения.МеньшеИлиРавно Тогда
ВидСравненияТекст = "<=";
// Режим 1 Список
ИначеЕсли ВидСравн = ВидСравнения.ВСписке Тогда
ВидСравненияТекст = "В";
РежимСравнения = 1;
ИначеЕсли ВидСравн = ВидСравнения.НеВСписке Тогда
ВидСравненияТекст = "НЕ В";
РежимСравнения = 1;
ИначеЕсли ВидСравн = ВидСравнения.ВСпискеПоИерархии
ИЛИ ВидСравн = ВидСравнения.ВИерархии Тогда
ВидСравненияТекст = "В ИЕРАРХИИ";
РежимСравнения = 1;
ИначеЕсли ВидСравн = ВидСравнения.НеВСпискеПоИерархии
ИЛИ ВидСравн = ВидСравнения.НеВИерархии Тогда
ВидСравненияТекст = "НЕ В ИЕРАРХИИ";
РежимСравнения = 1;
// Режим 2 Интервал
ИначеЕсли ВидСравн = ВидСравнения.Интервал Тогда
ВидСравненияТекстС = ">";
ВидСравненияТекстПо = "<";
РежимСравнения = 2;
ИначеЕсли ВидСравн = ВидСравнения.ИнтервалВключаяГраницы Тогда
ВидСравненияТекстС = ">=";
ВидСравненияТекстПо = "<=";
РежимСравнения = 2;
ИначеЕсли ВидСравн = ВидСравнения.ИнтервалВключаяНачало Тогда
ВидСравненияТекстС = ">=";
ВидСравненияТекстПо = "<";
РежимСравнения = 2;
ИначеЕсли ВидСравн = ВидСравнения.ИнтервалВключаяОкончание Тогда
ВидСравненияТекстС = ">";
ВидСравненияТекстПо = "<=";
РежимСравнения = 2;
Иначе
Сообщить("Не установлен отбор: " + ВидСравн, СтатусСообщения);
Продолжить;
КонецЕсли;
Если РежимСравнения = 0 Тогда
УсловиеОтбора = УсловиеОтбора + " И Данные." + Параметр + " " + ВидСравненияТекст + " &" + Параметр;
ИначеЕсли РежимСравнения = 1 Тогда
УсловиеОтбора = УсловиеОтбора + " И Данные." + Параметр + " " + ВидСравненияТекст + "(&" + Параметр + ")";
ИначеЕсли РежимСравнения = 2 Тогда
УсловиеОтбора = УсловиеОтбора + " И Данные." + Параметр + " " + ВидСравненияТекстС + " &" + Параметр + "С";
УсловиеОтбора = УсловиеОтбора + " И Данные." + Параметр + " " + ВидСравненияТекстПо + " &" + Параметр + "По";
Запрос.УстановитьПараметр(Параметр + "С", Элемент.ЗначениеС);
Запрос.УстановитьПараметр(Параметр + "По", Элемент.ЗначениеПо);
КонецЕсли;
Запрос.УстановитьПараметр(Параметр, Элемент.Значение);
КонецЦикла;
Запрос.Текст = "ВЫБРАТЬ
| Данные.Период,
| Данные.Сотрудник,
| Данные.ДатаНачала,
| Данные.ДатаОкончания,
| Данные.ВидРезерва,
| Данные.КатегорияРезерва,
| Данные.СотрудникиРезерва,
| Данные.ПодразделенияРезер,
| Данные.ДолжностьРезерв,
| Данные.ТабНомерСотрудника,
| Данные.ТабНомерРезервиста
|ИЗ
| РегистрСведений.УчетРаботниковНаходящихсяВРезерве КАК Данные
|ГДЕ
| ИСТИНА
| " + УсловиеОтбора;
Выборка = Запрос.Выполнить().Выбрать();
КоличествоЗаписей = Выборка.Количество();
Если КоличествоЗаписей>0 И Вопрос("Найдено " + КоличествоЗаписей + " записей, заменить ""Дату окончания"" на: " + ДатаОкончания + "?", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Да Тогда
ЭлементыОтбора = Новый Массив();
ЭлементыОтбора.Добавить("Период");
ЭлементыОтбора.Добавить("Сотрудник");
ЭлементыОтбора.Добавить("ДатаНачала");
ЭлементыОтбора.Добавить("ДатаОкончания");
Пока Выборка.Следующий() Цикл
//Удаляем предыдущие записи
НаборЗаписей = РегистрыСведений.УчетРаботниковНаходящихсяВРезерве.СоздатьНаборЗаписей();
Для Каждого Элемент Из ЭлементыОтбора Цикл
НаборЗаписей.Отбор[Элемент].Установить(Выборка[Элемент]);
КонецЦикла;
НаборЗаписей.Записать();
НаборЗаписей.Отбор.ДатаОкончания.Установить(ДатаОкончания);
Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Выборка);
Запись.ДатаОкончания = ДатаОкончания;
НаборЗаписей.Записать();
КонецЦикла;
КонецЕсли;
КонецПроцедуры
|
|