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

Работа в 1С с CSV файлами — загрузка из внешнего файла в 1С

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

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

Файл CSV

Что такое CSV

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

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

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

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

форма обработки для загрузки в 1С

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

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

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

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

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

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

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

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

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

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

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

Получите 267 видеоуроков по 1С бесплатно:

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

КонецЦикла;

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

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

результат загрузки файла

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

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

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

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

Комментариев: 25 на “Работа в 1С с CSV файлами — загрузка из внешнего файла в 1С
  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. Скачал, спасибо, хорошая заготовка. Облегчила пол дела

    Ответить

  11. Очень долго грузит данный пример, можно загрузить быстрее?
    файл 12 млн строк, 15 колонок в файле.

    Ответить

  12. Здравия! А можно увидеть обработку по выгрузке в csv? Интересует выгрузка регистра сведений.
    Благодарю.

    Ответить

  13. В 8.3 не работает, не понимает что за таблица

    Ответить

  14. Выгружаю данные по автобусам из csv в 1С,есть автобусы с одинаковыми номерами:цифры одинаковы,серии разные, и они у нас различаются просто с индексами 1 и 2, например:6711 и 6712, т.е получаются четырехзначные номера.Формула считывает информацию только с автобусов с трехзначным номером.Куда залезть,чтобы дать команду на считывание четырехзначного номера…связь с программистом,который нам это делать потеряна …

    Ответить

  15. 3500;0001;81298919;33;31.10.2017 06:13;1;01;0054;0054;00000802;00000802;0;29;93;54;0;0;0;71800;0;1;3500-0001-2017.11.01-СЕРГЕЙ-ПК-1.csv
    3500;0001;81136253;36;31.10.2017 05:33;1;01;0070;0070;00006712;00006712;0;32;81;52;0;0;0;78350;0;1;3500-0001-2017.11.01-СЕРГЕЙ-ПК-1.csv
    3500;0001;81130341;39;31.10.2017 05:29;1;01;0054;0054;00006711;00006711;0;33;112;62;0;0;0;81000;0;1;3500-0001-2017.11.01-СЕРГЕЙ-ПК-1.csv

    Ответить

  16. к примеру:здесь три машины с номером 802, 6711, 6712.Безболезненно выгружается 802 машина ,»двойников» не находит. ПОМОГИТЕ…

    Ответить

  17. спасибо

    Ответить

  18. Спасибо огромное!

    Ответить

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

Ваш e-mail не будет опубликован.