1C 8 массив в таблицу значений.

Как в 1C 8 поместить массив в таблицу значений.


Пример носит скорее учебный характер.

Таблица значений - тяжелый, ресурсоемкий объект - контейнер с огромными возможностями:
- отборы
- запросы
- колонки

Таблица значений требует деликатного отношения - глубокого вдумчивого создания структуры таблицы, - (использование и создания индексов, описание типов данных в колонках, и т.д.).

Пример содержит несколько этапов:
1. Подготовка колонки таблицы значений
1.1 Вычисляем тип данных для записи в колонки по типу данных в первом элементе массива.
1.2 Создаем колонку таблицы значений.
2. Записываем данные массива в колонку.

ТипКолонки = ТипЗнч(МассивЭлементов[0][ИмяРеквизита]);


МассивДопустимыеТипы.Добавить(ТипКолонки);
Описание_Типов = Новый ОписаниеТипов(МассивДопустимыеТипы);
ИмяКолонки = СтрЗаменить(Строка(ТипКолонки)," ","_");
ШиринаКолонки = СтрДлина(Строка(МассивЭлементов[0][ИмяРеквизита]));

// Вернем Таблицу значений из одной колонки
Функция МассивДокументовВТаблицуЗначений(МассивЭлементов, ИмяРеквизита) 	
				
	// преобразуем массив в Таблицу Значений
	ТабЗнач = Новый ТаблицаЗначений();	
	
	// вычислим массив типов для колонки
	МассивДопустимыеТипы = Новый Массив;		
	
	Если МассивЭлементов[0][ИмяРеквизита] = Неопределено Тогда 	 				
		
		//Возврат	ТабЗнач;
		сообщить("ОШИБКА - имя реквизита не найдено:" + ИмяРеквизита);
		Возврат	Неопределено; // лучше получить явную ошибку
	КонецЕсли;      			
	

	ТипКолонки = ТипЗнч(МассивЭлементов[0][ИмяРеквизита]); 
	МассивДопустимыеТипы.Добавить(ТипКолонки); 					
	Описание_Типов = Новый ОписаниеТипов(МассивДопустимыеТипы);
	
	ИмяКолонки = СтрЗаменить(Строка(ТипКолонки)," ","_");	
	
	ШиринаКолонки = СтрДлина(Строка(МассивЭлементов[0][ИмяРеквизита]));
	
	// добавим колонку, например "Контрагент" в ТЗ	
	//ТабЗнач.Колонки.Добавить("Контрагент", Описание_Типов, "Контрагент", ШиринаКолонки);	
	
        ТабЗнач.Колонки.Добавить(ИмяКолонки, Описание_Типов, ИмяКолонки, ШиринаКолонки);	

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

	Возврат ТабЗнач;
	
КонецФункции

ТЗ = МассивДокументовВТаблицуЗначений(МассивДокументов, имяРеквизита);

Результат:

Гораздо интереснее, с практической точки зрения, преобразование массива в "соответствие".
В контейнере-"соответствие" поиск элемента ведется по "ключу" этого элемента.
Он гораздо "легче" и быстрее.
В качестве ключа может использоваться значение любого типа. Ключ должен быть уникальным в этом контейнере-"соответствие".
Фактически, контейнер-"соответствие" имеет один единственный встроенный индекс по колонке "ключ".
Но это уже отдельная тема.




Рекламный блок:

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

  • Организуем вам индивидуальное экспресс обучение программам 1С.
  • Мы поможем Вам начать работать с программами 1С.
  • Мы поможем Вам настроить ваши отчеты в 1С.
  • Установим и настроим 1С под ваши задачи.
  • Поможем сделать ввод начальных остатков по складам и контрагентам
  • Перенесем данные из старых систем.
  • Подскажем как избежать ошибок.

Доработка и сопровождение 1С:

  • Доработаем существующие или создадим новые печатных формы и документы.
  • Разработаем внешние отчеты по Вашим требованиям.
  • Напишем внешние обработоки по загрузке документов из учетных (торговых) систем в бухгалтерию.
  • Разработаем приложения для выгрузки данных на сайты.

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Пишите: j008@j008.ru

Звоните: 8 916 710 83 51 Ольга