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

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


Функция Asset(ожидали,получили,имяфункции)
			
	Ок = (получили = ожидали); 
	
	Если Ок Тогда	// Ок. молчим
	иначе
		сообщить("!!!Не прошел тест: " + имяФункции + " ожидали:" + "<> получили:" + получили);		
		сообщить(имяФункции);		
		сообщить("получили:" + получили);
		сообщить("ожидали :" + ожидали);
		различие = первоеРазличиеТекстов(ожидали,получили);	          		
		
		//сообщить("получили2:" + получили2);		
		сообщить("различие:" + различие,СтатусСообщения.Важное);	
	КонецЕсли;  
		
	возврат Ок;	
КонецФункции	

Функция первоеРазличиеТекстов(строка1,строка2)
	
	результат = "";

	число_строк1 = СтрЧислоСтрок(строка1);
	число_строк2 = СтрЧислоСтрок(строка2);
	
	число_строкМах = Макс(число_строк1,число_строк2); 
	
	Для Счетчик = 1 По СтрЧислоСтрок(строка1) Цикл
    	ТекСтрока1 = СтрПолучитьСтроку(строка1, Счетчик);    
		ТекСтрока2 = СтрПолучитьСтроку(строка2, Счетчик);    
		
		Если ТекСтрока1 = ТекСтрока2  Тогда	 
			// ок
		иначе 
			результат = ТекСтрока1 + " <> " + ТекСтрока2;
			Возврат результат;
		КонецЕсли;            				
		
	КонецЦикла;	
	
	Возврат результат;	
КонецФункции


Функция ПройтиТесты() экспорт	
	имяФункции = "ПройтиТесты()";
	ОчиститьСообщения(); 
			
	// структура уровня видимости - модуль
	мСтрукураТест = новый структура("Имя,НомерЗБ,КаталогФайлов,ФайлЭталон,ФайлРезультат,Результат");	
	
	Ок = (Истина и
		//тест000_Инициализация() и
		тест005_МассивДокументовВТаблицуЗначений() и				
		Истина);		
	
	cОк = ?(Ок,"Успех! Тесты пройдены!","!!! ERRORs !!!");
	сообщить(имяФункции + ":" + cОк);		
	Возврат Ок;
КонецФункции


Функция тест005_МассивДокументовВТаблицуЗначений()
	имяФункции = "тест005_МассивДокументовВТаблицуЗначений()";
	
	МассивЗнач = новый массив();
	//СписокЗнач = новый СписокЗначений();	
	
	док1 = Документы.ПриходныйКассовыйОрдер.НайтиПоНомеру("00ЛЛБ0000001", Дата('20160101'));     //Документы.ПриходныйКассовыйОрдер.НайтиПоНомеру("00ЛЛБ0000001",Дата( '20160101'))
	док2 = Документы.ПриходныйКассовыйОрдер.НайтиПоНомеру("00ЛЛБ0000002", Дата('20160101'));
	МассивЗнач.Добавить(док2);
	МассивЗнач.Добавить(док2);	
	
	имяРеквизита = "Контрагент";	
	ss =  МассивЗнач[0][ИмяРеквизита];
	
	ТабЗнач = МассивДокументовВТаблицуЗначений(МассивЗнач, имяРеквизита); 		
	
	ТабЗнач.Свернуть(имяРеквизита);
	
	получили = "";
	Для каждого элемент Из ТабЗнач Цикл		
		получили = получили + строка(элемент[имяРеквизита]) + Символы.ПС ;
	КонецЦикла;		
	
	ожидали  = 
	"Камеk Со ТД ООО
	|Garden ООО
	|";         			
	получили2 = СтрЗаменить(получили,Символы.ПС,Символы.ПС + "|");  
	сообщить("получили2:" + получили2);
		
	Ок = Asset(ожидали,получили,имяФункции); 
	возврат Ок;		
КонецФункции	


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

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

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

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

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


Результат:




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

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

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

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

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

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

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

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

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