1С8. Загружаем данные из файла Excel в справочник.

Задача - загрузить коды информационных карт из файла Excel в справочник "ИнформационныеКарты".

1С8. Загрузка данных из файла Excel в справочник.
Скачать обработку (архив RAR)

В этом примере приведен простой код для организации теста (TDD). Это две функции: Asset() и ПервоеРазличиеТекстов(строка1,строка2).


функция Загрузить(полноеИмяФайлаДанных, Индикатор)    Экспорт  
	
	Попытка
		Excel = ПолучитьCOMОбъект(полноеИмяФайлаДанных);		
	Исключение
		Excel = NULL;
		Сообщить("Ошибка при установке соединения с COM-объектом:" + полноеИмяФайлаДанных, СтатусСообщения.Важное);
		Возврат 0 ;
	КонецПопытки;			
	
	Лист = Excel.Sheets.Item(1);	
	КоличествоСтрок = Лист.UsedRange.Rows.Count();
	
	Символ160 = Символ(160); // пробел - разделитель разрядов "5 550 000 003 167" 
	
	// Начинаем со строки = 1
	Для номерСтроки = 1 По КоличествоСтрок Цикл
		
	    // СокрЛП(Лист.Cells(Стр, НомерКолонкиExcel.НомерСтроки).Value);
		кодКарты     = СтрЗаменить((Лист.Cells(номерСтроки,1).Value),Символ160,"");						
		наименование = СтрЗаменить((Лист.Cells(номерСтроки,2).Value),Символ160,"");	
		
		сообщить("Прочитано: наименование:" + наименование + "  кодКарты:" + кодКарты );
		
		ЗаполнитьИнформационнуюКарту(наименование,кодКарты);

                индикатор = 100 * номерСтроки / КоличествоСтрок;	
			
	КонецЦикла;
	
	//Excel.Quit();  - ошибка 
	Excel = NULL;  
	
КонецФункции


// Найти в справочнике ИнформационнуюКарту по наименованию ("111111111111")  
// Установить КодКарты ("1234567890")
функция ЗаполнитьИнформационнуюКарту(наименование,кодКарты)
	
	инфКарта = Справочники.ИнформационныеКарты.НайтиПоНаименованию(наименование);
	Если инфКарта = Справочники.ИнформационныеКарты.ПустаяСсылка()  Тогда	 
		сообщить("Не найдена Информационная Карта:" + наименование );		
		возврат 0;
	КонецЕсли;
	
	инфКартаОбъект = инфКарта.ПолучитьОбъект();
	инфКартаОбъект.КодКарты = кодКарты;	
	инфКартаОбъект.Записать();
	
	сообщить("Для карты, наименование:" + наименование + " - присвоен кодКарты:" + кодКарты );
	
	возврат инфКартаОбъект.КодКарты;
	
КонецФункции


//----------------------------------------------------------------------------	
// Тесты:
//----------------------------------------------------------------------------	

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


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

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


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

// Вернуть 
//    ИСТИНА - тест прошел
//    ЛОЖЬ   - тест не прошел
функция тест01_ЗаполнитьИнформационнуюКарту() 
		
	имяФункции = "тест01_ЗаполнитьИнформационнуюКарту()";                                		
	
	наименование	= "111111111111";
	кодКарты  	= "1234567890";	                		
	
	результат = ЗаполнитьИнформационнуюКарту(наименование,кодКарты);
		
	получили  = результат;
	//получили2 = СтрЗаменить(мСтрукураТест.Результат,Символы.ПС,Символы.ПС + "|");

	ожидали  = "1234567890"; 
	
	Ок = Asset(ожидали,получили,имяФункции);    
			
	возврат Ок;

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

ПройтиТесты(); 


Скачать обработку (архив RAR)




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

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

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

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

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

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

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