helpf.pro
Регистрация
 +7 
Распечатать

Импорт/экспорт CSV в ТЗ

Код 1C v 8.х
 //ПреобразоватьТекстCSVвТЗ () импортирует данные в ТЗ из текста формата CSV
//Параметры:
//ТекстCSV 		- Строка, содержащая текст в формате csv
//Разделитель 	- Для формата CSV разделителем является ',', но т.к. 
//				  Excel берет разделитель из региональных стандартов, то
//				  используется ';', поддерживает многострочные поля
//
&НаСервереБезКонтекста
Функция ПреобразоватьТекстCSVвТЗ(ТекстCSV="", Разделитель=";") Экспорт
	ТЗ = Новый ТаблицаЗначений;
	ОсобаяСтрока = "$#%^&*!xyxb$#%&*!^";	// для замены ""
	
	НомерСтроки = 1;
	Стр = СтрПолучитьСтроку(ТекстCSV,НомерСтроки);
	Пока НомерСтроки <= СтрЧислоСтрок(ТекстCSV) Цикл
		СтрокаТЗ = ТЗ.Добавить();
		НомерПоля = 0;
		Пока Стр <> "" Цикл
			Токен = "";
			ПозицияРазделителя = Найти(стр, Разделитель);
			ПозицияОткрКавычек = Найти(стр, """");
			Если (ПозицияРазделителя > ПозицияОткрКавычек ИЛИ ПозицияРазделителя = 0) И ПозицияОткрКавычек > 0 Тогда
				// начинающееся с кавычек читаем до тех пор
				Токен = Сред(Стр, 1, ПозицияОткрКавычек);
				Стр = СтрЗаменить(Сред(Стр, ПозицияОткрКавычек+1), """""", ОсобаяСтрока);
				
				ПозицияЗакрКавычек = Найти(Стр, """");
				Пока ПозицияЗакрКавычек = 0 Цикл
					Токен = Токен + Стр + Символы.ПС;
					НомерСтроки = НомерСтроки + 1;
					Стр = СтрПолучитьСтроку(ТекстCSV, НомерСтроки);
					Стр = СтрЗаменить(Стр, """""", ОсобаяСтрока);
					// пока не встретим закрывающие
					ПозицияЗакрКавычек = Найти(Стр, """");
				КонецЦикла;
				ПозицияРазделителя=Найти(Сред(Стр,ПозицияЗакрКавычек), Разделитель);
				ПозицияРазделителя = ?(ПозицияРазделителя>0, ПозицияЗакрКавычек + ПозицияРазделителя-1, 0);
			КонецЕсли;

			Токен = Токен + ?(ПозицияРазделителя>0, Сред(Стр, 1, ПозицияРазделителя-1), Стр);
			Стр = ?(ПозицияРазделителя>0, Сред(Стр, ПозицияРазделителя+1), "");
			
			Если Лев(Токен, 1) = """" Тогда
				Токен = Сред(Токен, 2);
				Токен = ?(Прав(Токен, 1) = """", Сред(Токен, 1, СтрДлина(Токен)-1), Токен);
			КонецЕсли;
			Токен = СтрЗаменить(Токен, ОсобаяСтрока, """");
			
			НомерПоля = НомерПоля + 1;
			Если ТЗ.Колонки.Количество()<НомерПоля Тогда
				ТЗ.Колонки.Добавить("Колонка"+НомерПоля, Новый ОписаниеТипов("Строка"));
			КонецЕсли;
			СтрокаТЗ[НомерПоля-1] = Токен;

		КонецЦикла;
		НомерСтроки = НомерСтроки + 1;
		Стр = СтрПолучитьСтроку(ТекстCSV, НомерСтроки);
	КонецЦикла;
	Возврат ТЗ;
КонецФункции

//ПреобразоватьТЗвТекстCSV () экспортирует данные ТЗ в текст в формате CSV
//Параметры:
//ТЗ 			- Таблица значений данные которые сохраняются в файл
//флЭкспортироватьИменаКолонок - Первой строкой выводить имена колонок
//Разделитель 	- Для формата CSV разделителем является ',', но т.к. 
//				  Excel берет разделитель из региональных стандартов, то
//				  используется ';'
//
&НаСервереБезКонтекста
Функция ПреобразоватьТЗвТекстCSV(ТЗ, Разделитель = ";", флЭкспортироватьИменаКолонок = Ложь) Экспорт
		
	ТекстCSV = "";
	
	Если флЭкспортироватьИменаКолонок Тогда
		//Если нужно выгружать наименование колонок Выгружаем
		ПодготовленнаяСтрока = "";
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			ПодготовленнаяСтрока = ПодготовленнаяСтрока + Колонка.Имя + Разделитель;
		КонецЦикла;
		ПодготовленнаяСтрока = Лев (ПодготовленнаяСтрока,СтрДлина(ПодготовленнаяСтрока)-1);
		
		ТекстCSV = ТекстCSV + ПодготовленнаяСтрока + Символы.ПС;
	КонецЕсли;
	
	Для Каждого Строка Из ТЗ Цикл
		ПодготовленнаяСтрока = "";
		Для Каждого Колонка Из ТЗ.Колонки Цикл
			ПреобразованноеПоле = Строка[Колонка.Имя];
			//по правилам CSV если поле содержит двойные ковычки они должны повторятся дважды
			Если Найти(ПреобразованноеПоле,"""") Тогда
				ПреобразованноеПоле = СтрЗаменить(ПреобразованноеПоле,"""","""""");
			КонецЕсли;
			//по правилам CSV если поле содержит перенос строки или запятую оно должно заключатся в двойные кавычки
			Если Найти(ПреобразованноеПоле,Разделитель) ИЛИ Найти(ПреобразованноеПоле,Символы.ПС) ИЛИ Найти(ПреобразованноеПоле,"""") Тогда
				ПреобразованноеПоле = """" + ПреобразованноеПоле + """";
			КонецЕсли;

			ПодготовленнаяСтрока = ПодготовленнаяСтрока + ПреобразованноеПоле + Разделитель;
		КонецЦикла;
		ПодготовленнаяСтрока = Лев (ПодготовленнаяСтрока,СтрДлина(ПодготовленнаяСтрока)-1);
		
		ТекстCSV = ТекстCSV + ПодготовленнаяСтрока + Символы.ПС;
	КонецЦикла;

	Возврат ТекстCSV;
КонецФункции   

Источник

Разместил:   Версии: | 8.x |  Дата:   Прочитано: 36831
 +7 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ;
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 2
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!