Имя: Пароль:
1C
1С v8
Представление РегистраСведений в форме в виде ДереваЗначений
0 animatic
 
05.04.12
09:46
Добрый день, такая ситуация: в справочнике, например Номенклатура, нужно отбражать данные Регистра сведений. При этом данные хочется отбражать в виде дерева с группировкой по виду показателя, хранящегося в регистре сведений. Добавил в справочник дату, и на эту дату выбираю запросом со зрезом последних из регистра сведений нужные данные. Группирую их как надо, вывожу в справочник номенклатура в виде дерева, у реквизита тип ДеревоЗначений. Все врожде бы хорошо. Но теперь как быть с редактированием данных и добавлением. Добавление вроде решил. При добавлении в дерево значений, получаю форму записи регистра, добавляю туда данные и потом в этой форме в процедуре ПослеЗаписи проверяю, если Тип владельца формы справояник Номенклатура, то вызываю из его формы процедуру, которая заполняет ДеревоЗначений. Как работает устраивает, но есть ли способ попроще, может чего забыл уже? Теперь с редактированием, столкнулся с проблемой. При редактированиии с помощью метода Выбрать РегистраСведений и Отбора по нужным мне показателям, хочу получить нужное мне значение в виде РегистрСведенийВыборка, потом получить менеджерЗаписи и через него открыть форму для редактирования выбранного в ДеревеЗначений элемента. Тоже кажется сложновато все, есть ли способ попроще. Плюс проблема в том что Выбрать с моим отбором не хочет работать, почему-то выдает ошибку. Без отбора все работает открываются все формы. Вроде все делаю, как положенно отбор ввиде структуры,у измерений регистра, по которым делается отбор поставил галочки ведущее. Все-равно не работает, что пропустил, куда копать?
1 animatic
 
05.04.12
09:54
Отбор разве только по одному измерению можно делать? Когда в отборе оставляю один показатель срабатывает, когда пару ошибка.
2 animatic
 
05.04.12
10:09
походу только по одному, так не пойдет, тогда есть ли еще какой способ решить указанную выше проблему?
3 vmv
 
05.04.12
10:29
для редактирования тоже все просто - по позициям в своем дереве формируешь ключ записи

например
- на 1-ом уровне текущего элемента дерева "дата"
- на 2-м  уровне текущего элемента дерева "группа показателей"
- на 3-м  уровне текущего элемента дерева "Показатель"
- на последнем уровне позиционированного элемента дерева "Номенклатура"

собрал вю эту катавасию в ключ записи и открымл запись на редактирование.

вообще группировки и формирование дерева на форме - дорогое удаовольствие, у меня например регистры технологических показателей содержат миллионы записей и такой подход не катит.

я делаю мастер детали

слева маленкие узкие таблички "Дата", "Группа показателей", ...
спрва список записей регистра

юзер шариться по маленьким мастерам, в том числе в иерархии и получает список согласно этим отборам

на дспсиках при активизации строк мастеров - происходит простая установка параметров запроса главного списка и система не делает ничего лишнего и кучи кода в обработчиках не надо
4 vmv
 
05.04.12
10:36
кароче так примерно для однораноговой мастер-детали

НаКлиенте
Процедура СписокУчетПоказателиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
   
   Отказ = Истина;
   
   ПараметрыФормы = Новый Структура;
   
   Если Копирование И Элемент.ТекущиеДанные <> Неопределено Тогда
       
       ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока);
       
   Иначе
       
       // Инициализируем переменные групп параметров
       ГруппПоказателейПустая    = Параметры.СписокЗначенийТипов.Получить(5).Значение;
       ГруппПоказателейРежим     = Параметры.СписокЗначенийТипов.Получить(6).Значение;
       ГруппПоказателейСкважины  = Параметры.СписокЗначенийТипов.Получить(7).Значение;
       ГруппПоказателейПТИ       = Параметры.СписокЗначенийТипов.Получить(8).Значение;
       
       ТочкаИзмерения = Элементы.СписокСоставРежимТИ.ТекущаяСтрока;
       
       Если ТипЗнч(ТочкаИзмерения) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
           
           Предупреждение("Необходимо выбрать элемент точки измерения в списке состава, а не группировку", 10);
           Возврат;
           
           //Если ЗначениеЗаполнено(ТочкаИзмерения.Ключ) Тогда
           //    ТочкаИзмерения = ПараметрДСЗначениеУстановить.Ключ;
           //Иначе    
           //    ПараметрДСЗначениеУстановить = Элементы.Список.ТекущаяСтрока;
           //КонецЕсли;
           
       КонецЕсли;
       
       Если ТочкаИзмерения = Неопределено Тогда
           Предупреждение("Не выбрана точка измерения в списке состава", 10);
           Возврат;
       КонецЕсли;
       
       Если ТочкаИзмерения.Пустая() Тогда
           Предупреждение("Не выбрана точка измерения в списке состава", 10);
           Возврат;
       КонецЕсли;
       
       Показатель = Элементы.СписокСоставПоказатели.ТекущаяСтрока;
       
       Если Показатель = Неопределено Тогда
           Предупреждение("Не выбран показатель измерения в списке состава", 10);
           Возврат;
       КонецЕсли;
       
       Если Показатель.Пустая() Тогда
           Предупреждение("Не выбран показатель измерения в списке состава", 10);
           Возврат;
       КонецЕсли;
       
       СтруктураЗначенияЗаполнения = Новый Структура;
       СтруктураЗначенияЗаполнения.Вставить("ОбъектИзмерений", ТочкаИзмерения);
       СтруктураЗначенияЗаполнения.Вставить("Показатель"     , Показатель);
       СтруктураЗначенияЗаполнения.Вставить("СостояниеУчета" , Параметры.СписокЗначенийТипов.Получить(4).Значение);
       
       ПараметрыФормы.Вставить("ЗначенияЗаполнения", СтруктураЗначенияЗаполнения);
       
   КонецЕсли;
   
   ОткрытьФормуМодально("РегистрСведений.Add_IR_УчетПоказателей.Форма.ФормаЗаписи", ПараметрыФормы, ЭтаФорма);
   
КонецПроцедуры

&НаКлиенте
Процедура СписокУчетПоказателиПередНачаломИзменения(Элемент, Отказ)
   
   Отказ = Истина;
   
   ПараметрыФормы = Новый Структура;
   
   Если Элемент.ТекущиеДанные <> Неопределено Тогда
       
       ПараметрыФормы.Вставить("Ключ", Элемент.ТекущаяСтрока);
       ОткрытьФормуМодально("РегистрСведений.Add_IR_УчетПоказателей.Форма.ФормаЗаписи", ПараметрыФормы, ЭтаФорма);
       
   Иначе
       
       Предупреждение("Не выбрана текущая строка списка", 10);
       Возврат;
       
   КонецЕсли;
   
КонецПроцедуры
5 animatic
 
05.04.12
10:43
Спсаибо буду разбираться, в регистре думаю много записей не будет поэтому попробую так.
6 animatic
 
05.04.12
11:04
Получается при изменении он создает форму с заполненными данными такими же как в выбранной строке, а не открывает уже существующую запись регистра?
7 vmv
 
05.04.12
11:27
(6) если при редактировании передать в окрывемую форму полный ключ записи, то откроется форма сущекствующей записи - читай сп "ключзаписирегистра"
8 animatic
 
06.04.12
10:00
Не пойму вроде все данные передаю, а открывается пустая формы при редактировании. В регистре есть Период, Номенклатура, Полказатель, ЗначениеПоказателя, ЗначениеМин, ЗначениеМас и ЕдиницаИзмерения. Все эти данные закидываю в структуру вот так:
               ПараметрыФормы = Новый Структура;
       Отбор = Новый Структура;
       Отбор.Вставить("Период"      , ВыбраннаяСтрока.Период);
       Отбор.Вставить("Номенклатура", Ссылка);
       Отбор.Вставить("Показатель"  , ВыбраннаяСтрока.Показатель);
       Отбор.Вставить("ЗначениеПоказателя", ВыбраннаяСтрока.ЗначениеПоказателя);
       Отбор.Вставить("ЗначениеМин", ВыбраннаяСтрока.ЗначениеМин);
       Отбор.Вставить("ЗначениеМакс", ВыбраннаяСтрока.ЗначениеМакс);
       Отбор.Вставить("ЕдиницаИзмерения", ВыбраннаяСтрока.ЕдиницаИзмерения);
       
       ПараметрыФормы.Вставить("Ключ", Отбор);
9 animatic
 
06.04.12
10:47
Сделал так
Регистр = РегистрыСведений.алкНормативныеПоказателиАнализовНоменклатуры.СоздатьМенеджерЗаписи();
       Регистр.Период = ТекущийЭлемент.ТекущаяСтрока.Период;
       Регистр.Номенклатура = Ссылка;
       Регистр.Показатель = ТекущийЭлемент.ТекущаяСтрока.Показатель;
       
       Регистр.Прочитать();
       
       ФормаЗаписи = Регистр.ПолучитьФорму(ФормаЗаписи, ЭтаФорма,);
       ФормаЗаписи.Открыть();
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс