Типа динамический список в обычных формах

1. HIVvich 27.12.16 15:45 Сейчас в теме
Ребята, я пытаюсь сделать динамический список в обычных формах. В форму списка справочника одно поле (а конкретно Владелец) будет браться из регистра сведений, ну т.е. оно изменяемое и мне именно его и нужно отображать зрителям. Я сделала так:
Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
  ОтборВл = Новый Структура;
	
	Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		
		ЗначениеКолонка = ОформлениеСтроки.Ячейки.Наименование.Текст;
		
		ОтборВл.Вставить("Скважина", Справочники.Скважина.НайтиПоНаименованию(ЗначениеКолонка));
		
 		РегВладелец = РегистрыСведений.ВладельцыСкважин.ПолучитьПоследнее(ТекущаяДата(), ОтборВл).Водозабор;
		Если РегВладелец <> Справочники.Водозабор.ПустаяСсылка() Тогда
			ОформлениеСтроки.Ячейки.Владелец.Значение = РегВладелец; 
		КонецЕсли; 
        				
	КонецЦикла;

 КонецПроцедуры
Показать

Но ругается, конечно, на то, что я пытаюсь ссылке присвоить значение. Но прикол в том, что список же будет меняется данным из регистра и применять ПолучитьОбъект(), чтобы насильно "засандалить" нового владельца не очень хочется, как быть в такой ситуации? Обычные формы.
По теме из базы знаний
Найденные решения
2. ice-net 19 27.12.16 20:37 Сейчас в теме
(1)
Совсем не айс..
1. что мешает добавить новую колонку и в нее записывать нужное значение? (будет 2 колонки, а при сильном желании, основную можно так же программно скрыть)
2. гораздо производительнее будет переписать алгоритм так, что бы в цикле запрос не фигурировал.

например:


Колонки = ЭлементыФормы.ИмяЭлементаСпискаЗначений.Колонки;
Колонка = Колонки.Добавить("Водозабор", , "Водозабор")"; //Добавляем новую
Колонки.Владелец.Видимость = ложь; //скрываем старую

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать т.Скважина, т.Водозабор ИЗ РегистрыСведений.ВладельцыСкважин.СрезПоследних(,Скважина В (&МассивСкважин) И Водозабор <> Значение(Справочники.Водозабор.ПустаяСсылка)) КАК т"; 
//Если не предполагается что в регистр записи могут попадать будущим числом - отбор по периоду можно не ставить.


Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	МассивСкважин = новый Массив;
	
	Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		МассивСкважин.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	Запрос.УстановитьПараметр("МассивСкважин",МассивСкважин);
	Результат = Выборка.Выполнить();
	
	Если НЕ Результат.Пустой() Тогда
		ТЗ = Результат.Выгрузить();
		
		Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
			СтрокаВТЗ = ТЗ.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Скважина");
			Если СтрокаВТЗ <> Неопределено Тогда
				ОформлениеСтроки.Ячейки.Владелец.УстановитьТекст(СтрокаВТЗ.Водозабор);
			КонецЕсли; 
		КонецЦикла; 
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ice-net 19 27.12.16 20:37 Сейчас в теме
(1)
Совсем не айс..
1. что мешает добавить новую колонку и в нее записывать нужное значение? (будет 2 колонки, а при сильном желании, основную можно так же программно скрыть)
2. гораздо производительнее будет переписать алгоритм так, что бы в цикле запрос не фигурировал.

например:


Колонки = ЭлементыФормы.ИмяЭлементаСпискаЗначений.Колонки;
Колонка = Колонки.Добавить("Водозабор", , "Водозабор")"; //Добавляем новую
Колонки.Владелец.Видимость = ложь; //скрываем старую

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать т.Скважина, т.Водозабор ИЗ РегистрыСведений.ВладельцыСкважин.СрезПоследних(,Скважина В (&МассивСкважин) И Водозабор <> Значение(Справочники.Водозабор.ПустаяСсылка)) КАК т"; 
//Если не предполагается что в регистр записи могут попадать будущим числом - отбор по периоду можно не ставить.


Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	МассивСкважин = новый Массив;
	
	Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		МассивСкважин.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	Запрос.УстановитьПараметр("МассивСкважин",МассивСкважин);
	Результат = Выборка.Выполнить();
	
	Если НЕ Результат.Пустой() Тогда
		ТЗ = Результат.Выгрузить();
		
		Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
			СтрокаВТЗ = ТЗ.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Скважина");
			Если СтрокаВТЗ <> Неопределено Тогда
				ОформлениеСтроки.Ячейки.Владелец.УстановитьТекст(СтрокаВТЗ.Водозабор);
			КонецЕсли; 
		КонецЦикла; 
	КонецЕсли;
	
КонецПроцедуры
Показать
3. pvlunegov 157 27.12.16 21:34 Сейчас в теме
ОформлениеСтроки.Ячейки.Владелец.Значение = РегВладелец;
В оформлении строк нельзя менять Владельца ячейки, так как оформление строк - подчиненный строкам объект, который реализует оформление данных строк (логично следует из названия).
Все что можно менять в объекте ОформлениеСтроки - это свойства оформления - цвета, шрифты, текст и т.п.
Владельца менять нельзя, потому что оформление привязано к конкретной ячейке, нет смысла менять привязку, все оформление "поплывет".
Изначально, ОформлениеСтроки задумано как объект, в котором будут доп. свойства ячеек Табличного документа в зависимости от контекста, в котором он выводится (на экран или на принтер).
Если вы поймете такие простые вещи, у вас больше не возникнет мысли менять привязку ячеек объекта ОформлениеСтроки к ячейкам Табличного документа.
А свойство поменять можно и нужно.
Например, текст
ОформлениеСтроки.Ячейки.Владелец.УстановитьТекст(СтрокаВТЗ.Водозабор);

Или шрифт и др. свойства
4. HIVvich 28.12.16 09:01 Сейчас в теме
Я все поняла, спасибо за развернутые ответы!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот