Этюд: Редактирование булево значения в форме списка не открывая формы элемента

Программирование - Практика программирования

Есть: Табличное поле с типом значения *Список, у объекта есть реквизит с типом булево.
Требуется: Редактировать значение реквизита не открывая формы элемента.
Для реализации потребуются два события элемента управления табличное поле

1. ПриПолученииДанных
Размещение флажка и значения флажка в ячейке табличного поля
2. ПриИзмененииФлажка
Получение и изменение значения объекта

Пример:
В справочнике есть реквизит "закрыт".

Процедура
СправочникСписокПриИзмененииФлажка
(
Элемент
,
Колонка
)
Строка 
=
Элемент
.
ТекущиеДанные;
	
Если
Строка 
<>
Неопределено 
Тогда
Ссылка 
=
Строка
.
Ссылка;
		
Если
Не Ссылка
.
ЭтоГруппа 
Тогда
Объект 
=
Ссылка
.
ПолучитьОбъект
()
;
			Объект
.
Закрыт 
=
Не Объект
.
Закрыт;
			Объект
.
Записать
()
;
		
КонецЕсли
;
	
КонецЕсли
;

КонецПроцедуры Процедура
СправочникСписокПриПолученииДанных
(
Элемент
,
ОформленияСтрок
)
Колонка 
=
Элемент
.
Колонки
.
Найти
("Закрыт")
;
	
Если
Колонка 
<>
Неопределено 
И
Колонка
.
Видимость 
Тогда Для
Каждого ОформлениеСтроки Из ОформленияСтрок 
Цикл
ДанныеСтроки 
=
ОформлениеСтроки
.
ДанныеСтроки;
			
Если
ДанныеСтроки 
=
Неопределено 
Тогда Продолжить
;
			
КонецЕсли
;
			Ссылка 
=
ДанныеСтроки
.
Ссылка;
			
Если
Не Ссылка
.
ЭтоГруппа 
Тогда
ОформлениеСтроки
.
Ячейки
.
Закрыт
.
УстановитьФлажок
(
Ссылка
.
Закрыт
)
;
			
КонецЕсли
;
		
КонецЦикла
;
КонецПроцедуры


P.S. Особенность внесения изменений в существующие формы: в свойстве "данные флажка" колонки табличного поля должно быть пустое значение.

пример

См. также

Комментарии
1. Dmitry Abramovsky (kisser) 2 31.01.17 08:07 Сейчас в теме
Для варианта редактирования списка документов.

В реквизиты добавлено "Оплачено" - тип булево и "ДатаОплаты" - тип дата.
На форме списка добавлены колонки "Оплачено" - тип "флажок" и "ДатаОплаты" - тип "поле календаря" без привязки к данным.

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
        Колонка = Элемент.Колонки.Найти("Оплачено");
	Если Колонка <> Неопределено И Колонка.Видимость Тогда 
		Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
			ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
			Если ДанныеСтроки = Неопределено Тогда 
				Продолжить;
			КонецЕсли;
			Ссылка = ДанныеСтроки.Ссылка;
			ОформлениеСтроки.Ячейки.Оплачено.УстановитьФлажок(Ссылка.Оплачено);
			ОформлениеСтроки.Ячейки.ДатаОплаты.Значение = Ссылка.ДатаОплаты;
		КонецЦикла;
	КонецЕсли;
	
        --//--

КонецПроцедуры

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

Процедура ДокументСписокПриИзмененииФлажка(Элемент, Колонка)
	Строка = Элемент.ТекущиеДанные;
	Если Колонка.Имя = "Оплачено" Тогда
        	Ссылка = Строка.Ссылка;
			Объект = Ссылка.ПолучитьОбъект();
			Объект.Оплачено = Не Объект.Оплачено;
			Если Объект.Оплачено = Ложь Тогда
				Объект.ДатаОплаты = "";	
			КонецЕсли;
			Объект.Записать();
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть
Danil.Potapov; +1 Ответить
Оставьте свое сообщение