Все об 1С8 - просто и доступно

Добавить в Избранное  Сделать Стартовой  Написать письмо

Главная Статьи Вопрос-ответ Экспресс-справочник Гостевая книга
Статьи по 1С

Чтение и запись данных в формате csv с помощью 1С


      Большой часть задач, реализуемых на платформе 1С, является перенос данных между различными системами. Которые могут быть также на базе платформы 1с, так и всякие другие. Как уже упоминалось в одной из статей, способы переноса данных могут быть самыми разными: прямое подключение к базе, через файл XML, Excel, посредством сервисов и т.д. В этой статье будет рассмотрена возможность чтения и записи данных в формате CSV при помощи 1С. Этот способ обмена данными востребован не так часто, как иные, но встречается и такая потребность. А если есть необходимость, то осветим и вариант переноса данных через чтение и запись в формате CSV.

      Создаем внешнюю обработку. Здесь будет реализован вариант для управляемой формы. Но сути дела это не меняет.

Чтение и запись через csv в 1С - создание обработки

Для наглядности поместим на форму таблицу значений и команду ее заполнения начальными данными. Начальное заполнение будет происходить из массивов фамилий, имен, отчеств, дат рождения и ИНН в случайном сочетании. К реальным лицам никакого отношения эти данные не имеют. Также добавим два поля ввода и две команды - для чтения и записи данных в формате csv.
Чтение и запись данных в формате csv в 1С - создание формы

Ну и теперь основное. Поместим в обработчики кнопок код чтения и запись данных в формате csv в 1С.
Сначала запись. В данной обработке запись будет в указанный файл, заполнение данными из таблицы значений.
Следует заметить, что типового функционала записи и чтения файлов в формате csv  в 1С не предусмотрено. Сначала получается строка данных. При желании можно вставить первой строкой заголовки (в фрагменте кода закомментировано). Далее строка данных формируется путем объединения элементов данных через разделитель. А затем используется обычная запись в файл полученной строки.
&НаКлиенте
Процедура ЗаписатьCSV(ТекстФайла, ИмяФайла)
		
	КодировкаФайла 	= КодировкаТекста.Системная;
	ТекстовыйФайлЗапись = Новый ЗаписьТекста(ИмяФайла, КодировкаФайла);           
	ТекстовыйФайлЗапись.ЗаписатьСтроку(ТекстФайла);
	ТекстовыйФайлЗапись.Закрыть();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПрочитатьДанныеИзФайлаCSV(Команда)
	
	Если Не ЗначениеЗаполнено(ФайлЧтенияДанных) Тогда
		Возврат;
	КонецЕсли;
	
	ТЗПример.Очистить();
	
	КодировкаФайла 		= КодировкаТекста.Системная;

	ФайлДанных = Новый ТекстовыйДокумент;
	ФайлДанных.Прочитать(ФайлЧтенияДанных, КодировкаФайла); //получаем содержимое файла построчно
	КоличествоСтрок = ФайлДанных.КоличествоСтрок() - 1;
	
	Для СчСтрок = 1 По КоличествоСтрок Цикл
		
		СтрокаДанных = ФайлДанных.ПолучитьСтроку(СчСтрок);
		//СтрокаДанныхМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаДанных, ",");
		СтрокаДанныхМассив = СтроковыеФункции.РазложитьСтрокуВМассивПодстрок(СтрокаДанных, ",");
		НоваяСтрока = ТЗПример.Добавить();
		НоваяСтрока.Фамилия 		= СтрокаДанныхМассив[0];
		НоваяСтрока.Имя 		= СтрокаДанныхМассив[1];
		НоваяСтрока.Отчество 		= СтрокаДанныхМассив[2];
		НоваяСтрока.ИНН 		= СтрокаДанныхМассив[3];
		НоваяСтрока.ДатаРождения 	= СтрокаДанныхМассив[4];

	КонецЦикла;	
	
КонецПроцедуры

Пример обработки можно скачать тут.