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

Импорт в 1С из текстовых файлов (TXT, CSV)

Не редко возникает необходимость загрузить в справочники или документы 1С данные из текстового файла. Приведенный пример внешней обработки позволит преобразовать текстовый файл с известным разделителем данных в поле табличного документа для последующей обработки уже внутри 1С:Предприятия. Обработка содержит функцию разбора строки на массив данных, настраиваемый разделитель строки текста на "столбцы", процедуру чтения данных из текстового файла.

Разбор строки в массив с использованием функций из конфигурации 1С
Для разложения строки в массив в конфигурация 1С:Бухгалтерия, 1С:Торговля и 1С:УПП имеется замечательная функция - Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт. Функция "расщепляет" строку на подстроки, используя заданный разделитель. Разделитель может иметь любую длину. Если в качестве разделителя задан пробел, рядом стоящие пробелы считаются одним разделителем, а ведущие и хвостовые пробелы параметра "Стр" игнорируются. Подробнее можно прочесть внутри конфигурации - "Общие модули" -> "Общего назначения". Функция возвращает массив значений, элементы которого - подстроки.


Чтение текстового файла (txt) в 1С
Операцию импорта - экспорта текстовых файлов (формат тхт или csv, а также htm, html) очень удобно реализовать при помощи конструкции следующего вида:

1. Функция ПолучитьПотокЧтенияСтрок(Файл) - Назначение: Проверить наличие файла (функция Файл()), Создать текстовый документ (Новый ТекстовыйДокумент()), вызвать метод "Прочитать" для открытия потока чтения файла. Возвращает поток, готовый для чтения.
2. Процедура ЧтениеТХТФайла(Элемент) - Назначение: В цикле произвести последовательное чтение строк файла текстового документа, разбирая на массив колонок данных и добавляя значения массива в табличное поле;

Исходный код 1С функции создания текстового потока чтения файла ТХТ:
Код 1C v 8.х
 Функция ПолучитьПотокЧтенияСтрок(Файл)
  Попытка
    // Используется для доступа к параметрам файлов или каталогов. 
    ТекстовыйФайл = Новый Файл(Файл);
    Если ТекстовыйФайл.Существует() = Ложь Тогда
      Сообщить("Файла "+Файл+" не существует!");
      Возврат Неопределено;
    КонецЕсли;

    // Текстовый документ предназначен для работы с текстами. 
    // Объект позволяет получать и сохранять текст в файле, 
    // работать со строками
    ПотокЧтенияСтрок = Новый ТекстовыйДокумент();
    ПотокЧтенияСтрок.Прочитать(ТекстовыйФайл);
  Исключение
    Сообщить("Файл не прочитан.", СтатусСообщения.Внимание);
    Сообщить(ОписаниеОшибки());
    Возврат Неопределено;
  КонецПопытки;

  // Возвращает текст, извлеченный из файла
  Возврат ПотокЧтенияСтрок;

КонецФункции // ПолучитьПотокЧтенияСтрок


// Исходный код функции загрузки строк в табличное поле:

Процедура ЧтениеТХТФайла(Элемент)

  // Проверка на наличие имени файла
  Если ПустаяСтрока(ИмяФайла) Тогда
    Предупреждение("Для запуска обработки необходимо предварительно выбрать файл данных.");
    Возврат;
  КонецЕсли;

  // Открыть файл, создать текстовый документ, прочитать
  ПотокСтрок = ПолучитьПотокЧтенияСтрок(ИмяФайла);

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

  // Создать колонки табличного документа
  ТаблицаДокумента.Колонки.Добавить("Номер",,"Номер",5);
  ТаблицаДокумента.Колонки.Добавить("Артикул",,"Артикул",11);
  ТаблицаДокумента.Колонки.Добавить("Номенклатура",,"Номенклатура",25);
  ТаблицаДокумента.Колонки.Добавить("Цена",,"Цена",6);

  // Последовательное чтение строк текстового файла
  КоличествоСтрок = ПотокСтрок.КоличествоСтрок();
  Для Строка = 1 По КоличествоСтрок Цикл

    // Обработка нажатия Ctrl + Break
    ОбработкаПрерыванияПользователя();

    // Чтение строки из файла тхт / csv
    СтрокаИзФайла = ПотокСтрок.ПолучитьСтроку(Строка);

    // Разбор строки в массив, используя в качествен символа-разделителя "|"
    МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаИзФайла,"|");

    // Добавить данные в табличную часть экранной формы
    Стр=ТаблицаДокумента.Добавить();
    Стр.Номер	 = Строка;
    Стр.Артикул = МассивСтрок[0];
    Стр.Номенклатура = МассивСтрок[1];
    Стр.Цена = МассивСтрок[2];
    // Отобразить информацию о ходе выполнения обработки
    Состояние("Обработка строки файла : "
      + "строка " + Строка + " из " + КоличествоСтрок);

  КонецЦикла;

  // Отобразить результаты загрузки в форме элемента
  ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
  ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();

КонецПроцедуры // ЧтениеTXTФайла(Элемент)   


В данном примере была произведена загрузка из текстового файла в следующем формате:
Код
7754|Процессор Atom 1.7|10,00
5054|Процессор AMD x64|8,99
7546|Мышь Microsoft|45,88
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 65661
 +7 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1Cv8.1CD - Файл данных достиг максимального размера! 9
1С выдает предупреждение " Файл данных достиг максимального размера" . Подскажите из - за чего это и как можно решить ? Превышен размер файла, обычно это сообщение возникает, когда размер файла 1Cv8.1CD приближается к 10 гигабайтам или размер ка
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
Посмотреть все результаты поиска похожих
Комментарии
escritor
27.01.2017 18:31Комментарий: 4
escritor

K0S13, главное что работает, и кому это надо - просто разберется в коде )

K0S13
21.12.2016 12:40Комментарий: 3
K0S13

Это куски из типовй обработки "ЗагрузкаДанныхИзТабличногоДокумента" да и ещё без расшифровки переменных и параметров....

E_Migachev
27.01.2014 01:01Комментарий: 2
E_Migachev
torrero05
27.01.2014 00:04Комментарий: 1
torrero05
РазложитьСтрокуВМассивПодстрок() в УТ 11 не обнаружена.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!