Найти: на

Примеры разработки на платформе 8.х

Встречи on-line для разработчиков
Подпишитесь на новости



Внимание! Сайт переехал на http://бизнесплюспермь.рф

Список значений, таблица значений, дерево значений


Как создать список значений?

СозданныйСписок = Новый СписокЗначений;

Как добавить элементы в список значений?

СписокСотрудников.Добавить(ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото); 

СписокСотрудников.Вставить(Инд, ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото); 

Как найти элемент списка значений?

ЭлементСписка = СписокСотрудников.НайтиПоЗначению(ИскомыйСотрудник); 
Если ЭлементСписка <> Неопределено Тогда 
	Сообщить(СписокСотрудников.Индекс(ЭлементСписка)); 
КонецЕсли; 

Как обратиться к элементу списка значений?

ЭлементСписка = СписокСотрудников[Инд]; 

ЭлементСписка = СписокСотрудников.Получить(Инд);
 
Сотрудник = ЭлементСписка.Значение; 
Представление = ЭлементСписка.Представление; 
Пометка = ЭлементСписка.Пометка; 
Картинка = ЭлементСписка.Картинка;  

Как перебрать элементы списка значений?

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

СтаршийИндекс = СписокСотрудников.Количество() - 1; 
Для Сч = 0 по СтаршийИндекс Цикл 
	Сообщить(СписокСотрудников[Сч].Значение); 
КонецЦикла;

Как удалить элемент списка значений?

СписокСотрудников.Удалить(0);
Индекс = СписокОбъектов.Количество() - 1; 
Пока Индекс >= 0 Цикл 
	Если ТипЗнч(СписокОбъектов[Индекс].Значение) = Тип("Число") Тогда 
		СписокОбъектов.Удалить(Индекс); 
	КонецЕсли; 
	
	Индекс = Индекс - 1; 

КонецЦикла;

Как создать таблицу значений и заполнить ее поля?

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

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

// Добавить новую строку и задать значения в колонках таблицы. 
НоваяСтрока = ТаблицаЗначений.Добавить(); 
НоваяСтрока["Фамилия"] = "Иванов"; 
НоваяСтрока["Возраст"] = 23; 

Как найти значение в таблице значений?

НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение); 

НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение, "Поставщик, Покупатель"); 

// Сформировать структуру отбора. 
СтруктураПоиска = Структура("Сотрудник", ИскомоеЗначение); 

// Найти строки. 
МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска); 

Как перебрать строки таблицы значений?

Для Каждого ТекущаяСтрока Из ТаблицаСотрудников Цикл 
	Сообщить(ТекущаяСтрока.Сотрудник); 
КонецЦикла; 

СтаршийИндекс = ТаблицаСотрудников.Количество() - 1; 
Для Сч = 0 по СтаршийИндекс Цикл 
	Сообщить(СписокСотрудников[Сч].Сотрудник); 
КонецЦикла;

Как удалить строки (колонки) таблицы значений?

ТаблицаЗначений.Удалить(УдаляемаяСтрока); 

ТаблицаЗначений.Удалить(0); 

ТаблицаЗначений.Колонки.Удалить(УдаляемаяКолонка); 

ТаблицаЗначений.Колонки.Удалить(0); 

СтаршийИндексКолонок = ТаблицаЗначений.Колонки.Количество() - 1; 
Индекс = ТаблицаЗначений.Количество() - 1; 
Пока Индекс > = 0 Цикл 
	Для Сч = 0 По СтаршийИндексКолонок Цикл 
		Если ТипЗнч(ТаблицаЗначений[Индекс][Сч]) = Тип("Число") Тогда 
			ТаблицаЗначений.Удалить(Индекс); 
			Прервать; 
		КонецЕсли; 
	КонецЦикла; 
	
	Индекс = Индекс - 1; 

КонецЦикла;

Как заполнить таблицу значений, если имена колонок содержатся в переменных?

НоваяСтрока = ТаблицаЗначений.Добавить(); 
НоваяСтрока[ИмяКолонки] = Значение; 

Как заполнить всю колонку таблицы значений нужным значением?

ТаблицаЗначений.ЗаполнитьЗначения(Ложь, "ФлагФискальногоУчета");

Как таблицу значений "ТаблицаПолучатель" заполнить данными таблицы значений "ИсходнаяТаблица"?

ТаблицаПолучатель = ТаблицаИсходная.Скопировать(); 

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

ОдноименныеКолонки = Новый Массив(); 
Для Каждого Колонка Из ИсходнаяТаблица.Колонки Цикл 
	СовпадающаяКолонка = ТаблицаПолучатель.Колонки.Найти(Колонка.Имя); 
	Если СовпадающаяКолонка <> Неопределено Тогда 

		// Получить свойства колонки. 
		Индекс = ТаблицаПолучатель.Колонки.Индекс(СовпадающаяКолонка); 
		Имя = Колонка.Имя; 
		ТипЗначения = Колонка.ТипЗначения; 
		Заголовок = Колонка.Заголовок; 
		Ширина = Колонка.Ширина; 

		// Заменить колонки в таблице-получаетеле. 
		ТаблицаПолучатель.Колонки.Удалить(Индекс); 
		ТаблицаПолучатель.Колонки.Вставить(Индекс, Имя, ТипЗначения, Заголовок, Ширина); 

		// Добавить очередное имя совпадающих колонок в массив. 
		ОдноименныеКолонки.Добавить(Колонка.Имя); 
	КонецЕсли; 
КонецЦикла; 

// Цикл перебора строк исходной таблицы. 
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл 

	// Добавить новую строку в таблицу-получатель. 
	НоваяСтрока = ТаблицаПолучатель.Добавить(); 

	// Заполнить значения в совпадающих ячейках. 
	Для Каждого ИмяКолонки Из ОдноименныеКолонки Цикл 
		НоваяСтрока[ИмяКолонки] = СтрокаИсходнойТаблицы[ИмяКолонки]; 
	КонецЦикла; 

КонецЦикла; 

Как добавить колонки к таблице значений "ТаблицаЗначений" с ограничениями по типу?

// Добавить колонку без ограничений по типу. 
ТаблицаЗначений.Колонки.Добавить("Объект"); 

// Ограничения по типам данных колонки: 
// Только элементы справочника "Контрагенты". 
ТаблицаЗначений.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты")); 

// Подготовка и установка ограничений для данных типа Строка. 
КвалификаторыСтроки = Новый КвалификаторыСтроки(20, ДопустимаяДлина.Переменная); 
ДопустимыеТипы = Новый ОписаниеТипов("Строка", , КвалификаторыСтроки); 
ТаблицаЗначений.Колонки.Добавить("ПримечаниеСтроковоеКороткое", ДопустимыеТипы); 

// Расширение уже использованного ранее описания типов. 
КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный); 
КвалификаторыДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата); 
РасширенныеДопустимыеТипы = Новый ОписаниеТипов(ДопустимыеТипы, "Число, Дата", , КвалификаторыЧисла, , КвалификаторыДаты); 
ТаблицаЗначений.Колонки.Добавить("Примечание", РасширенныеДопустимыеТипы); 

Как изменить тип значения колонки таблицы значений, полученной выгрузкой из запроса?

// Создать пустые ссылки. 
ПустоеОприходование = Документы.ОприходованиеТоваров.ПустаяСсылка(); 
ПустойВозврат = Документы.ВозвратТоваровОтПокупателя.ПустаяСсылка(); 

// Выполнить запрос. 
Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ 
|	Ссылка 
|ИЗ 
|	Документ.ПоступлениеТоваровУслуг 
| 
|ОБЪЕДИНИТЬ ВСЕ 
| 
|ВЫБРАТЬ ПЕРВЫЕ 0 
|	&ПустойДокументОприходование 
| 
|ОБЪЕДИНИТЬ ВСЕ 
| 
|ВЫБРАТЬ ПЕРВЫЕ 0 
|	&ПустойДокументВозврат 
|"; 

Запрос.УстановитьПараметр("ПустойДокументОприходование", ПустоеОприходование); 
Запрос.УстановитьПараметр("ПустойДокументВозврат", ПустойВозврат); 

// Выгрузить в таблицу значений. 
ТаблицаСсылок = Запрос.Выполнить().Выгрузить(); 

Как самостоятельно заполнить дерево значений?

Процедура ЗаполнениеДерева(Кнопка) 
	Дерево.Колонки.Очистить(); 
	Дерево.Колонки.Добавить("ИмяКолонки"); 

	// Создать первую строку. Правильнее сказать создать элемент 
	// коллекции. Он помещается в переменную "СтрокаВерхнегоУровня". 
	СтрокаВерхнегоУровня = Дерево.Строки.Добавить(); 

	// В колонку "ИмяКолонки" записать значение "Старшая". 
	СтрокаВерхнегоУровня.ИмяКолонки = "Старшая"; 

	// Создать строку подчиненную "Старшей". 
	ПодчиненнаяСтрока =СтрокаВерхнегоУровня.Строки.Добавить(); 
	ПодчиненнаяСтрока.ИмяКолонки = "Первая подчиненная"; 

	ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); 
	ПодчиненнаяВторогоУровня.ИмяКолонки = "Первая нижняя"; 

	ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); 
	ПодчиненнаяВторогоУровня.ИмяКолонки = "Вторая нижняя"; 

	ПодчиненнаяСтрока = СтрокаВерхнегоУровня.Строки.Добавить(); 
	ПодчиненнаяСтрока.ИмяКолонки = "Вторая подчиненная"; 

	// Использование метода позволит увидеть результат работы 
	// с деревом значений в табличном поле. 
	ЭлементыФормы.Дерево.СоздатьКолонки(); 

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

Процедура ОткрытиеВетки(Кнопка) 

	// Сделать текущим именно элемент коллекции "Строки". 
	РезультатПоиска = Дерево.Строки.Найти("Первая нижняя", "ИмяКолонки", Истина); 

	Если РезультатПоиска <> Неопределено Тогда 
		ЭлементыФормы.Дерево.ТекущаяСтрока = РезультатПоиска; 
	КонецЕсли; 

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

Как в дереве значений найти строку по определенному условию?

// С деревом значений проблема в том, что по сути это массив строк с данными,
// каждая строка в котором может иметь свой массив строк, а может и не иметь.
// Ниже приведен пример функции, которая возвращает строку, найденную по определенному условию

// Получаем искомую строку вызвав функцию, в функцию передаем строки дерева значений на первом уровне:
ОписаниеМетаданныхЗагрузки = НайтиОтмеченноеЗначениеВДеревеЗначений(ДеревоМетаданных.Строки);

// Эта функция осуществляет поиск строки
// Если строка найдена, возвращает найденною строку дерева
// Если строка не найдена, возвращает неопределено
Функция НайтиОтмеченноеЗначениеВДеревеЗначений(СтрокиДерева)
	
	// пробежимся по всем строкам (по всем строкам одного уровня, которые были переданы!)
	Для каждого Строка из СтрокиДерева Цикл
	
		// Вот наше условие, значение Выгружать у строки равно 1:
		Если Строка.Выгружать = 1 Тогда
			// Если условие сработало, возвращаем строку
			Возврат Строка;
		КонецЕсли;
	КонецЦикла;
	
	// Если не нашли строку, смотрим под-строки каждой строки
	Для каждого Строка из СтрокиДерева Цикл
		
		// Здесь осуществляется рекурсивный вызов
		НайденнаяСтрока = НайтиОтмеченноеЗначениеВДеревеЗначений(Строка.Строки);
		Если НайденнаяСтрока <> неопределено Тогда
			// Если нашли, возвращается строка
			Возврат НайденнаяСтрока;
		КонецЕсли;
		
	КонецЦикла;
	
	// Не нашли строку по условию, возвращаем неопределено
	Возврат неопределено;

КонецФункции


Внимание! Сайт переехал на http://бизнесплюспермь.рф

Hosted by uCoz