Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Работа в 1С с CSV файлами

CSV (от англ. Comma-Separated Values) — универсальный текстовый формат, предназначенный для типизации табличных данных. В этом формате колонки отделяются специальными символами — разделителями. Разделителями чаще всего служат символы «;»(точка с запятой) , «,»(запятая) или табуляция (системное значение «Символы.Таб» в 1С 8). Загрузка из CSV в 1С чаще всего нужна что бы загрузить данные в систему из внешнего источника, например, сайта или другой учетной системы.

Ниже я рассмотрю создание обработки загрузки данных из CSV и дам ссылку на скачивание универсальной обработки загрузки данных.

Файл CSV

Что такое CSV

CSV по сути — обыкновенный текст, в котором указаны данные. Обычно в первой строке обозначены названия колонки, во второй и далее — данные. Вот пример типичного CSV отрытого в блокноте вы можете удивить выше.

Разработка обработки загрузки из CSV в 1С

Ниже я рассмотрю пошагово каким образом можно реализовать парсинг из CSV и загрузку в 1С 8.3 на основе универсальной обработки, которую я создал. С помощью это обработки вы сможете загрузить любые данные.

1.Создаем новую обработку и форму обработки

Обратите внимание, что в табличное поле я не добавлял колонки, при загрузке колонки будут генерироваться автоматически исходя из файла

2. Обработчик выбора каталога

При нажатие на выбор необходимо отображать диалог выбора файла в ОС. Сделать это очень просто. Необходимо на обработчик «НачалоВыбора» в поле ввода файла указать следующий код:

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите каталог";

Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;

3. Обработка данных из CSV в 1C

После того, как мы указали нужный путь на диске, мы должны приступить к обработке файла.

Для начала мы очищаем информацию в таблице и находим файл на диске, а потом считываем его:

//очищаем таблицу и удаляем информацию
Таблица.Очистить();
Таблица.Колонки.Очистить();
ЭлементыФормы.Таблица.Колонки.Очистить();

// чтение
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
ЗагружаемыйФайл.Прочитать(ИмяФайла);

После того как мы получили все данные из CSV, мы считываем первую строчку и формируем столбцы на форме с наименованиями шапки

//шапка по умолчанию первая строчка
Шапка = ЗагружаемыйФайл.ПолучитьСтрoку(1);

//раскладываем стрoку в массив
МассивКол = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель); // процедура из типовой конфигурации, разбивает строку в массив по разделителям

//генерируем столбцы
Для Каждого ИмяСтолбца Из МассивКол Цикл

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

КонецЦикла;

После того, как шапка сформирована можно приступать к обработке загрузке самих данных:

Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл

Состояние("Обрабатывается "+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/                                                                                                ЗагружаемыйФайл.КоличествоСтрок())),"ЧЦ=3; ЧДЦ=0"))+" %");
ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break

// получить стрoку с указанным номером и преобразуем её в массив
Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
МассивКол = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);// процедура из типовой конфигурации, разбивает строку в массив по разделителям
НоваяСтрочка= Таблица.Добавить();

Если МассивКол.Количество() <> Таблица.Колонки.Количество() Тогда
Продолжить; // скорее всего в тексте содержит разделитель
КонецЕсли;

Для НомерСтолбца= 1 по МассивКол.Количество() Цикл
//заполняем строчку значениями
ТекущееЗначение = МассивКол[НомерСтолбца-1];
ИмяКолонки = Таблица.Колонки[НомерСтолбца-1].Имя;
НоваяСтрочка[ИмяКолонки] = ТекущееЗначение;
КонецЦикла;

КонецЦикла;

Тут мы обрабатываем построчно все строчки и заносим их в табличное поле.

В результате у нас получается вот такая вот красивая табличка:

После того, как данные загружены в табличку, их можно использовать как вам угодно — загрузить прайс, загрузить номенклатуру  загрузить контрагентов, загрузить остатки — как вам угодно.

Cкачать: обработка для загрузки данных из CSV в 1С 8.2.

Про загрузку из excel в 1С можно прочитать тут.

Если же у вас всё равно возникают трудности — вы можете обратится ко мне, подробнее в разделе услуги программиста 1С

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 499 76 06.

Остались вопросы?

Задайте ВОПРОС на нашем форуме 1С! ››

СПРОСИТЕ в комментариях!

Комментариев: 17 на “Работа в 1С с CSV файлами
  1. К сожалению универсальная обработка не заработала в Розница 2.0
    Выдаёт ошибку «Возможно, обработка (отчет) устарела или не является дополнительной:Метод объекта не обнаружен (СведенияОВнешнейОбработке)»

    Как решить эту проблему?
    Можете подсказать?

    Ответить

    • Обработка предназначена для работы в режиме обычного приложения.
      А розница 2.0 — конфигурация написана уже под управляемое приложение.

      И она не предназначена что бы подключать её как внешнюю обработку.

      Ответить

  2. «После того, как данные загружены в табличку, их можно использовать как вам угодно»
    Имеется в виду, что это заготовка для обработки? то есть надо дописывать загрузку собственно в объекты конфигурации?
    Или как-то можно использовать получившуюся таблицу?

    Ответить

    • Да, это некая заготовка.

      После загрузки в табличку обработки очень просто обработать данные в объекты конфигурации.

      Ответить

  3. а можно несколько слов про это «очень просто»?
    если создавать интерфейс, в котором настраивать соответствие полей файла полям справочника (к примеру), то выводить табличку необязательно — нужна только ее структура.
    если же писать под конкретный объект и конкретную структуру файла — табличка тем более не нужна — можно обойтись временной таблицей без вывода ее в интерфейс.
    хочется понять логику

    Ответить

    • Логика — научить Вас загружать данные из csv в табличку 1С, для наглядности сделана форма что бы видеть данные.

      Трансформация данных в вашей конфигурации это дело второе.

      Ответить

  4. понял, спасибо

    Ответить

  5. Добрый день, подскажите как с помощью данной обработки можно загрузить реестр из банка с разделителем ^ и затем выгрузить обратно разбив его на несколько других файлов согласно кода услуги?
    например:
    1^854525^9999^
    1^1^25300016326^^^130000.00^0.00^
    2^2^95000044902^^^153679.00^0.00^
    3^2^95000096004^^^13438.00^0.00^
    код услуги — второй реквизит каждой из последних трех строк….заранее спасибо. Первая строка служебная.

    Ответить

  6. Можно еще добавить выбор разделителя, т.к. он бывает разным

    Ответить

  7. Здравствуйте, очень нужна эта обработка в УТ. Но ссылка, видимо, уже не рабочая. Помогите!!! )))

    Ответить

    • Приветствую!)

      Браузер видимо некорректно обрабатывал скачивание.
      Перезагрузил в zip формат)))

      Ответить

  8. Добрый день!

    Если в csv файле несколько колонок с одинаковым названием то при прочтении файла выскакивает ошибка. Натолкните на мысль пожалуйста как сделать чтобы не уникальные колонки автоматом переименовывались, и значения попадали именно туда куда нужно.

    Ответить

    • Добрый день,

      Можно в имени колонки добавить порядковый номер, например: «Товар_1, Цена_2, Сумма_3».

      В этом случае мы генерируем 100% уникальные имена колонок и решаем эту проблему.

      Ответить

  9. Добрый день!
    Подскажите как быть: есть строка — она делится на колонке разделителем «;», но есть колонка «назначение платежа» и тексте которой присутствует «;» и естественно в МассивКолонок добавляется больше значений чем надо. Есть ли возможность как-то вытянуть отдельно именно эту строку. Спасибо!

    Ответить

    • Добрый день!

      Красивых решений наверное не подскажу. Но Ексель как то понимает такие вещи — значит скорее всего можно научить и 1С.

      Из простого — попросить выгружать CSV файл с другим разделителем. Практически во всех выгрузках в других программах можно выбрать нужный разделитель.

      Если найдете изящное решение — пожалуйста, напишите как решили)

      Ответить

  10. Скачал, спасибо, хорошая заготовка. Облегчила пол дела

    Ответить

Добавить комментарий:

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*