Имя: Пароль:
1C
1С v8
Элемент управления динамической колонки табличного поля
0 OnCheck
 
16.07.12
14:19
Есть ТП. Тип значения ТП РегистрСведенийСписок. Требуется добавить поле, не добавляя его в регистр сведений.
Сделал так:
1. В процедуре "ПриПолученииДанных" для каждой строки добавляю требуемое поле
2. Назначил ЭлементУправления этому полю.
3. Установил значение этому элементу управления.
4. Назначил обработчик действия "ПриИзменении" для этого элемента управления.

Проблема в том в это процедуре "ПриИзменении", не удается получить выбранное значение. Поле Элемент.Значение всегда равно значению установленному в процедуре "ПриПолученииДанных". Подскажите. Как реализовать возможно изменения значения элемента управления?
Спасибо!
1 palpetrovich
 
16.07.12
14:20
зачем программно? добавь "требуемое поле" прямо на форме, а  "ПриПолученииДанных"  уже определяй что в нем будет
2 OnCheck
 
16.07.12
14:22
(1) динамически надо. Их много будет.
3 OnCheck
 
16.07.12
14:23
+(2) к тому же, эту проблему так не обойти
4 palpetrovich
 
16.07.12
14:24
(2) да пофиг, хочешь создавать колонки программно - пожалуйста, но не при  "ПриПолученииДанных"
5 OnCheck
 
16.07.12
14:25
(4) а что так?
6 palpetrovich
 
16.07.12
14:31
(5) ну как-бы  "ПриПолученииДанных" - надо данные заполнять :)
к примеру так
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   СписокЗаказов = Новый СписокЗначений;
   Для Каждого ЭлементОформления Из ОформленияСтрок Цикл
       СписокЗаказов.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка);
   КонецЦикла;    
   Запрос = Новый Запрос("ВЫБРАТЬ
                         |    РеализацияТоваровУслуг.Сделка,
                         |    РеализацияТоваровУслуг.Ссылка
                         |ИЗ
                         |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                         |ГДЕ
                         |    РеализацияТоваровУслуг.Сделка В(&СписокЗаказов)
                         |");
   Запрос.УстановитьПараметр("СписокЗаказов", СписокЗаказов);
   Выборка = Запрос.Выполнить().Выбрать();
   Для Каждого ЭлементОформления Из ОформленияСтрок Цикл
       Выборка.Сбросить();
       Если Выборка.НайтиСледующий(ЭлементОформления.ДанныеСтроки.Ссылка,"Сделка") Тогда
           ЭлементОформления.Ячейки.Реализация.ОтображатьТекст = Истина;
           ЭлементОформления.Ячейки.Реализация.Текст = ""+ Выборка.Ссылка;  
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
7 OnCheck
 
16.07.12
14:36
Надо создать требуемое количество колонок в зависимости от данных в строке:

Процедура ПриПолученииДанных(Элемент, ОформленияСтрок)
   Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
       //{pack 2012-07-16
       
       Организация = ДанныеСтроки.Подразделение.Владелец;
       Подразделение = ДанныеСтроки.Подразделение;
       Должность = ДанныеСтроки.Должность;
       ВидРасчета = ДанныеСтроки.ВидРасчета;
       
       ДанныеПериодов = ПолучитьДанныеПериодов(Организация, Подразделение, Должность, ВидРасчета).Выбрать();
       
       счетчик = 0;
       Пока ДанныеПериодов.Следующий() Цикл
           
           Счетчик = Счетчик + 1;
           ИмяКолонкиС = "ПериодС" + Счетчик;
           КолонкаС = Элемент.Колонки.Найти(ИмяКолонкиС);
           Если КолонкаС = Неопределено Тогда
               
               
               КолонкаС = Элемент.Колонки.Вставить(2,"Период");
               КолонкаС.Имя = ИмяКолонкиС;
               КолонкаС.УстановитьЭлементУправления(Тип("ПолеВвода"));
               
           Иначе
               
               ЭУ = КолонкаС.ЭлементУправления;
               ЭУ.ТипЗначения = Новый ОписаниеТипов("Дата",,,,Новый КвалификаторыДаты(ЧастиДаты.Дата));
               //ЭУ.Значение = ДанныеПериодов.ДатаНачальная;
               
               ОбработкаПриИзменении = Новый Действие("ПериодСПриИзменении");
               ЭУ.УстановитьДействие("ПриИзменении", ОбработкаПриИзменении);
               ОформлениеСтроки.Ячейки[ИмяКолонкиС].Значение = ДанныеПериодов.ДатаНачальная;
               
           КонецЕсли;
           
           ИмяКолонкиПо = "ПериодПо" + Счетчик;
           КолонкаПо = Элемент.Колонки.Найти(ИмяКолонкиПо);
           Если КолонкаПо = Неопределено Тогда
           
               КолонкаПо = Элемент.Колонки.Вставить(3," по");
               КолонкаПо.Имя = ИмяКолонкиПо;
               КолонкаПо.Положение = ПоложениеКолонки.ВТойЖеКолонке;
           
           КонецЕсли;
       КонецЦикла;
       
       //}

   КонецЦикла;
   
КонецПроцедуры
8 OnCheck
 
16.07.12
14:40
(8) вопрос то немного не в этом. Как получить введённое значение в процедуре "ПриИзменении".
9 palpetrovich
 
16.07.12
14:42
(7) а ПриОткрытии(...) Формы добавить колонки в ТП не судьба?
10 OnCheck
 
16.07.12
14:43
(9) в при открытии я не знаю сколько колонок нужно добавить в каждую строку.
11 palpetrovich
 
16.07.12
14:47
(10) жестко
12 palpetrovich
 
16.07.12
14:48
кста, речь про УФ?
13 Reset
 
16.07.12
14:49
(10) тогда добавляй в тот момент, когда тебе это становится известно.
Наверняка это происходит не в момент оформления ТП. palpetrovich все верно сказал
14 OnCheck
 
16.07.12
14:49
кажется понял, после ввода данных в ячейку сначала отрабатывает "ПриПолученииДанных", которая скидывает введённое значение в исходное. а только потом "ПриИзменении". Значит значение ЭУ надо устанавливать в процедуре "НачалоВыбора".
(11) думаешь есть смысл поработать на ТЗ ;-)?
(12) нет
15 OnCheck
 
16.07.12
16:10
(13) хм, счас посмотрел в СП пишут "привыводеданных" вызывается раньше чем "приполученииданных", странно ведь сначала получают данные, затем выводят.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший