Имя: Пароль:
1C
1С v8
Заполнить по отбору в регистре сведений в управляемом приложении
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 И Вопрос("Найдено " + КоличествоЗаписей + " записей, заменить ""Дату окончания"" на: " + ДатаОкончания + "?", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Да Тогда
        ЭлементыОтбора = Новый Массив();
        ЭлементыОтбора.Добавить("Период");
        ЭлементыОтбора.Добавить("Сотрудник");
        ЭлементыОтбора.Добавить("ДатаНачала");
        ЭлементыОтбора.Добавить("ДатаОкончания");
        Пока Выборка.Следующий() Цикл
            //Удаляем предыдущие записи
            НаборЗаписей = РегистрыСведений.УчетРаботниковНаходящихсяВРезерве.СоздатьНаборЗаписей();
            Для Каждого Элемент Из ЭлементыОтбора Цикл
                НаборЗаписей.Отбор[Элемент].Установить(Выборка[Элемент]);
            КонецЦикла;
            НаборЗаписей.Записать();
            
            НаборЗаписей.Отбор.ДатаОкончания.Установить(ДатаОкончания);
            Запись = НаборЗаписей.Добавить();
            ЗаполнитьЗначенияСвойств(Запись, Выборка);
            Запись.ДатаОкончания = ДатаОкончания;
            НаборЗаписей.Записать();
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Ошибка? Это не ошибка, это системная функция.