Заполнить таблицу значений на основе строки

SeiOkami 463 5 11 9

Позволяет в коде не используя макеты заполнить ТЗ на основе текстовой таблицы с отступами

// Возвращает таблицу значений на основе текста (формат в примере использования).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//  
// Параметры:
//  Текст - Строка
// 
// Возвращаемое значение:
//  ТаблицаЗначений
//  
// Пример:
// 	Содержимое = 
// 	"Фамилия   |Имя       |Отчество
// 	|
// 	|Смирнов   |Александр |Владимирович
// 	|Иванова   |Мария     |Петровна
// 	|Кузнецов  |Дмитрий   |Александрович";
// 	
// 	Таблица = ТаблицаЗначенийИзСтроки(Содержимое);
// 	//Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//  
Функция ТаблицаЗначенийИзСтроки(Знач Текст) Экспорт
	
	Таблица = Новый ТаблицаЗначений();
	ЗаполнитьТаблицуЗначенийИзСтроки(Текст, Таблица, Истина);
	
	Возврат Таблица;
	
КонецФункции

// Заполнить таблицу значений из строки (формат в примере использования)
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/11
//  
// Параметры:
//  Текст   - Строка
//  Таблица - ТаблицаЗначений, Неопределено - Таблица или переменная, в которую она будет помещена
//  ДополнятьКолонками - Булево - Нужно ли дополнять колонками таблицу
//  
// Пример:
// 	Содержимое = 
// 	"Фамилия   |Имя       |Отчество
// 	|
// 	|Смирнов   |Александр |Владимирович
// 	|Иванова   |Мария     |Петровна
// 	|Кузнецов  |Дмитрий   |Александрович";
// 	
// 	Таблица = Новый ТаблицаЗначений();
// 	Таблица.Колонки.Добавить("Фамилия");
// 	Таблица.Колонки.Добавить("Имя");
// 	
// 	ЗаполнитьТаблицуЗначенийИзСтроки(Содержимое, Таблица, Истина);
// 	//Таблица будет содержать 3 колонки Фамилия, Имя, Отчество и 3 строки
//  
Процедура ЗаполнитьТаблицуЗначенийИзСтроки(Знач Текст, Знач Таблица = Неопределено, Знач ДополнятьКолонками = Ложь) Экспорт
	
	Если Таблица = Неопределено Тогда
		Таблица = Новый ТаблицаЗначений();
	КонецЕсли;
	
	ЧислоСтрок   = СтрЧислоСтрок(Текст);
	ИменаКолонок = Новый Массив; // Массив из Строка
	Разделитель  = "|";
	
	Для НомерСтроки = 1 По ЧислоСтрок Цикл
		
		СтрокаТекста = СтрПолучитьСтроку(Текст, НомерСтроки);
		Если ПустаяСтрока(СтрокаТекста) Тогда
			Продолжить;
		КонецЕсли;
		
		ЧастиСтроки = СтрРазделить(СтрокаТекста, Разделитель, Истина);
		ЗаполненыКолонки = ЗначениеЗаполнено(ИменаКолонок);
		
		Если ЗаполненыКолонки Тогда
			СтрокаТаблицы = Таблица.Добавить();
		КонецЕсли;
		
		Для ИндексЧасти = 0 По ЧастиСтроки.Количество() - 1 Цикл
			
			ЧастьСтроки = СокрЛП(ЧастиСтроки[ИндексЧасти]);
			
			Если ПустаяСтрока(ЧастьСтроки) Тогда
				Продолжить;
			КонецЕсли;
			
			Если ЗаполненыКолонки Тогда
				СтрокаТаблицы[ИменаКолонок[ИндексЧасти]] = ЧастьСтроки;
			Иначе
				ИменаКолонок.Добавить(ЧастьСтроки);
				Если ДополнятьКолонками И Таблица.Колонки.Найти(ЧастьСтроки) = Неопределено Тогда
					Таблица.Колонки.Добавить(ЧастьСтроки, Новый ОписаниеТипов("Строка"));
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры
1

Комментарии

SeiOkami
#1, 06 июля 2023 15:38


См. также

ЗаполнитьТаблицуЗначений (БСП)

ПрочитатьXMLВТаблицу

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

Отбор по таблице значений

Преобразовать строку таблицы значений в структуру

Заполнение "пустых" строк табличной части

СтрокаТаблицыЗначенийВСтруктуру (БСП)

ЗаполнитьНомераСтрокЗначенийДоступаПоВиду (БСП)

Удаление строк таблицы по условию

Модератору