1С 8.3 CSV - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 CSV

Реклама:
В 1С 8.3 CSV формат используется для упрощенной выгрузки таблицы. В основном для синхронизации информации с сайтом, выгрузкой/загрузкой документов, прайс-листов. Это универсальный текстовый формат, служащий для типизации данных таблицы. В качестве разделителей используются спец. символы: Символы.Таб или , (запятая) или ; (точка с запятой).  Как правило, в первой строчке обозначены названия колонки, во второй и далее - соответсвенно данные. Встроенного функционала для работы с CSV и 1С 8.3 не существует. Однако есть универсальные вспомогательные модели (функции) которые помогают с обработкой данных из CSV файла - например, РазложитьСтрокуВМассивПодстрок. Для работы с CSV файлами больших размеров (более 10Mb) рекомендуется использовать ADO - COMОбъект("ADODB.Connection").
Чтение файла CSV в 1С 8.3:
&НаКлиенте
Процедура ЧтениеФайлаCSV()

   
Файл_CSV = Новый ТекстовыйДокумент;
   
Файл_CSV.Прочитать("D:\import_21092020.csv");
   
Загрузить_CSV(Файл_CSV);

КонецПроцедуры
Загрузка CSV файла (в Таблицу значений) в 1С 8.3:
&НаСервере
Процедура Загрузить_CSV(Файл_CSV)

   
ТЗ = Новый ТаблицаЗначений;
   
// Важно! Чтобы в значениях НЕ встречался используемый разделитель
   
Используемый_разделитель = ";";

   
//*** Если есть шапка таблицы ***
   
Шапка_CSV = Файл_CSV.ПолучитьСтроку(1);
   
// Чтение и разделение на отдельные значения в массив (по разделителю)
   
Массив_CSV = СтрРазделить(Шапка_CSV, Используемый_разделитель);
   
//***************************

   
Для Каждого СтрокаНом Из Массив_CSV Цикл

       
// Удаляем пробелы т.к. в названии столбцов они не допускаются
       
ИмяБП = СтрЗаменить(СтрокаНом," ","");
       
ТЗ.Колонки.Добавить(ИмяБП,, СтрокаНом);

    КонецЦикла;

    Для
НомерСтроки=2 по Файл_CSV.КоличествоСтрок() Цикл // Если без шапки, то начинаем с первой строчки

        // Получаем строку по-порядку
       
Строка_CSV = Файл_CSV.ПолучитьСтроку(НомерСтроки);

       
// Разделяем с помощью выбранного разделителя каждую строку на столбцы
       
Массив_CSV = СтрРазделить(Строка_CSV, Используемый_разделитель);
       
НоваяСтрочка= ТЗ.Добавить();// Добавляем строку в ТЗ

       
Для Ном_Столбца= 1 по Массив_CSV.Количество() Цикл

           
ТекЗначение_CSV = Массив_CSV[Ном_Столбца-1];
           
ИмяКолонки_CSV = ТЗ.Колонки[Ном_Столбца-1].Имя;
           
НоваяСтрочка[ИмяКолонки_CSV] = ТекЗначение_CSV;

        КонецЦикла;

    КонецЦикла;

КонецПроцедуры
Выгрузка в файл CSV и его создание в 1С 8.3:
&НаСервере
Процедура Выгрузка_В_Файл_CSV_Создание();

   
Используемый_разделитель = ";";
   
Файл_CSV="D:\import_21092020.csv";

   
//*** Получаем данные из запроса ***
   
Запрос = Новый Запрос;
   
Запрос.Текст =
   
"ВЫБРАТЬ
    | ВнутреннийПрайс.Код КАК Код,
    | ВнутреннийПрайс.Наименование КАК Наименование,
    | ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
    | ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
    | ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
    |ИЗ
    | Справочник.Цены КАК ВнутреннийПрайс"
;
   
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
   
ТаблицаЗначений = РезультатЗапроса;
   
//**********************************

   
Текст_CSV=""; // Текст с учетом заголовков, разделителей и переноса строк
   
Для Каждого СтрокаТЗ из ТаблицаЗначений Цикл

        Если
Текст_CSV="" тогда

           
СтрокаКол="";
           
КолонкиТЗ=ТаблицаЗначений.колонки;
            Для Каждого
Каждая_Колонка Из КолонкиТЗ Цикл
               
СтрокаКол = "" + СтрокаКол + Каждая_Колонка.Имя + Используемый_разделитель ;
            КонецЦикла;

           
Текст_CSV = СтрокаКол + Символы.ПС;

        КонецЕсли;

       
Текст_CSV = Текст_CSV + СтрокаТЗ.Код + Используемый_разделитель + СтрокаТЗ.Наименование
        + Используемый_разделитель + СтрокаТЗ.ЗакупочнаяЦена + Используемый_разделитель + СтрокаТЗ.РозничнаяЦена
        + Используемый_разделитель + СтрокаТЗ.ОптоваяЦена + Символы.ПС;

    КонецЦикла;

   
КодANSI = КодировкаТекста.ANSI;
   
ТекстовыйФайлЗапись = Новый ЗаписьТекста(Файл_CSV, КодANSI); // Создание файла CSV
   
ТекстовыйФайлЗапись.ЗаписатьСтроку(Текст_CSV); // Запись информации в файл
   
ТекстовыйФайлЗапись.Закрыть(); // Обязательно закрываем, иначе зависает в процессе

КонецПроцедуры
Чтение файла CSV через ADO в 1С 8.3:
&НаСервере
Процедура Чтение_Файла_CSV_ADO(); //Для работы с CSV файлами больших размеров (свыше 10Mb)

   
Файл_CSV="D:\import_21092020.csv";

   
ПутьСоединения  = "Driver={Microsoft Text Driver (*.csv)};";
   
ПутьСоединения  = ПутьСоединения + "Dbq=" + Файл_CSV + ";";
   
ПутьСоединения  = ПутьСоединения + "Uid=" + "Extensions=csv" + ";";

   
ADO_Conn = Новый COMОбъект("ADODB.Connection");
   
ADO_Conn.ConnectionString = ПутьСоединения;
   
ADO_Conn.Open();

   
ADO_Rec = Новый COMОбъект("ADODB.Recordset");
    Попытка
       
ADO_Rec.Open("S_elect * from file#txt", ADO_Conn);
        Пока
ADO_Rec.EOF() = 0 Цикл

           
ADO_Строка="";
            Для
Счетчик = 0 По ADO_Rec.Fields.Count-1 Цикл
               
ADO_Строка ADO_Строка   + ";" + ADO_Rec.Fields(Счетчик).Value;
            КонецЦикла;
           
//Сообщить("Прочитана строка: "+ADO_Строка);
           
ADO_Rec.MoveNext();

        КонецЦикла;
    Исключение
       
ADO_Rec.Close();
       
ADO_Conn.Close();

       
Предупреждение("При чтении данных в CSV произошла ошибка:"+ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры
Готовые модели кода (шаблоны) с "CSV" 1С:
Поиск кода
0
комментарии
____________________
Copyright by 1Cnik.by©, «Программист 1С в г.Минске», 21.09.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому