Имя: Пароль:
1C
 
Как в табличной части редактировать вложенный объект?
0 Гений 1С
 
гуру
15.04.07
18:40
Итак, зарисовка.
У меня есть табличная часть, в ней один из реквизитов - ссылка на справочник.
Каждой строке табличной части соответствует один уникальный элемент справочника.
Мне нужно чтобы в этой строке можно было редактировать реквизиты справочника по ссылке.

Добавим конкретики.

Есть документ "Выполненние работ".
В нем есть табличная часть "Работы", реквизиты: Задача, Работа, Событие, Объем.

Нужно в этой строке редактировать свойство Длительность объекта Событие в поле Объем.

То бишь чтобы в Объем я редактировал именно реквизит Длительность объекта Событие.

При этом при записи документа я буду записывать и все объекты реквизита Событие типа События.

В общем я могу создать реквизит формы РаботыСобытие типа События, но как его приаттачить?
1 ТелепатБот
 
гуру
15.04.07
18:40
2 simol
 
15.04.07
18:45
(0) Я делаю подобное. Обработчик "При изменении" у поля если надо оперативно реагировать или в перед записью в модуле объекта.
3 Гений 1С
 
гуру
15.04.07
18:49
(2) а отображать как, ведь очищается? Через чтение свойства?
4 simol
 
15.04.07
18:52
(3) почему очищается?
5 simol
 
15.04.07
18:54
+(4) объем же это реквизит табличной части у тебя,почему при его смене он очищается?
6 Гений 1С
 
гуру
15.04.07
19:02
(4) реквизим объем берется из реквизита Событие.Длительность, а не хранится в табличной части.
7 simol
 
15.04.07
20:24
(6) Может через ВвестиЧисло?
8 Гений 1С
 
гуру
15.04.07
22:27
(7) В принципе разобрался. Конечно проще было бы добавить реквизит, чтобы он чисто болтался для ввода, но зачем зря напрягать память базы данных.

Короче, я значение отображаю в ПриВыводеСтроки, а заношу в ПриИзменении, что-то типо этого. ;-)
9 Гений 1С
 
гуру
15.04.07
22:28
Вот код:

Перем ДополнительныеДанныеРабота;



Функция ЗаполнитьДополнительныеДанныеРабота()
   ДополнительныеДанныеРабота=Новый Соответствие();
   Для Каждого Стр ИЗ Работа Цикл
       ДополнительныеДанныеРабота.Вставить(Стр, Новый Структура("Событие", Стр.Событие.ПолучитьОбъект()));
   КонецЦикла;
КонецФункции

Процедура ПриОткрытии()
   // Вставить содержимое обработчика.
   ЗаполнитьДополнительныеДанныеРабота();
КонецПроцедуры

Процедура РаботаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   // Вставить содержимое обработчика.
   Стр=ДанныеСтроки;
   ДополнительныеДанныеРаботаСтр=ДополнительныеДанныеРабота[ДанныеСтроки];
   ОформлениеСтроки.Ячейки.Объем.УстановитьТекст(ДополнительныеДанныеРаботаСтр.Событие.Длительность);
КонецПроцедуры

Процедура РаботаПриАктивизацииСтроки(Элемент)
   // Вставить содержимое обработчика.
   Стр=Элемент.ТекущаяСтрока;
   ДополнительныеДанныеРаботаСтр=ДополнительныеДанныеРабота[Стр];
   Если ДополнительныеДанныеРаботаСтр=Неопределено Тогда
       СобытиеОбъект=Справочники.Событие.СоздатьЭлемент();
       ДополнительныеДанныеРабота.Вставить(Стр, Новый Структура("Событие", СобытиеОбъект));
   КонецЕсли;
КонецПроцедуры

Процедура РаботаОбъемПриИзменении(Элемент)
   // Вставить содержимое обработчика.
   Стр=ЭлементыФормы.Работа.ТекущаяСтрока;
   ДополнительныеДанныеРаботаСтр=ДополнительныеДанныеРабота[Стр];
   ДополнительныеДанныеРаботаСтр.Событие.Длительность=Элемент.Значение;
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
   // Вставить содержимое обработчика.
   Для Каждого Стр ИЗ ДополнительныеДанныеРабота Цикл
       Стр.Значение.Событие.Записать();
   КонецЦикла;
КонецПроцедуры