1с создать файл csv
В интернете довольно много примеров, как парсить CSV-файл.
Но ни один из них не смог сразу прочитать правильно CSV-файл от MS Exchange!
Данный парсер не только может корректно это сделать, но и читает любые CSV-файлы от других программ.
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат , предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой ( , ). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя.
За основу кода взята типовая функция РазложитьСтрокуВМассивПодстрок .
Это функция дополнена параметром СимволВыделения! Этот параметр решает проблему выделения ячеек, в которых присутствует разделитель.
В разработке использовался код: Работа в 1С с CSV файлами.
Обновление от 30.10.2015
Дописан алгоритм вычленения ячеек, в которых есть и символ разделитель, и символ выделения.
Например, строка: "Ответ на письмо", мой друг" доставлен". Вернятся как: Ответ на письмо", мой друг" доставлен.
В прошлой версии результат был: Ответ на письмо| мой друг" доставлен.
Специальные предложения
Автор, а вы в курсе, что читать csv-файлы как текст - это жесть, допустимая только при маленьком их размере или откровенно кривом формате? Это я к тому, что заголовочек у публикации больно сомнителен - "универсальный парсер", ага. Универсальные, во-первых, давно есть, а во-вторых, не через "Разложить строку" делаются)
(1) Yashazz, покажите мне универсальный, ссылку пожалуйста!
Давайте я вам дам файл, а вы мне его корректно вашим парсером разложите?
А как быть со строковыми колонками которые в тексте содержат разделитель? По стандарту такие значения заключают в кавычки, и тогда разделитель до закрывающей кавычки не анализируется!
(3) V.Nikonov, после тестирования парсера на большом массиве строк, доработал код. Но пока нет времени обновить файл публикации. Так что в скором времени и этот вопрос будет решен.
Но даже в текущей версии такую строку распарсит корректно, если рядом не будет символа выделения!
Немного статистики. CSV-файл более 2 ГБ обработка не смогла даже прочитала, т.к. просто вылетела платформа. А вот файл менее 1 ГБ обработало, но на 97% не хватило памяти на сервере и тоже вылет (процесс 1С использовал почти 3 гига оперативной памяти).
Файл в 680 МБ с трудом дочитало (процесс 1С использовал почти 2.5 гига оперативной памяти).
Файлы с меньшим объемом без проблем читает.
Все операции выполнялись на 32-битном процессе. Как поведет себя обработка в регламентном задании, пока не могу сказать, но там используется 64-битный процесс, поэтому ограничение на память там больше.
(0) функция РазложитьСтрокуВМассивПодстрокMSExchange работает неверно!
Как видно из вложений в Excel csv открывается правильно, а в 1С неправильно.
Из Вашей обработки я взял только одну функцию.
(8) BigB, так с такими параметрами, она будет работать по другому. Как типовая. Используйте полный список параметров!
(9) приложил настройки из обработки.
Только я не понял, чем они отличаются от моих, что я выложил ранее?
Специально проверил Вашу загрузку. Мало того, что она не отработала нормально даже шапку файла, так и табличная часть была пустой!
(10) BigB, у вас шапка есть? Похоже строки шапки либо нет, либо разделитель у вас не тот. Взять только эту функцию будет не достаточно для корректной работы всего алгоритма! Используйте обработку полностью!
(11) Вы почему не умеете читать, то, что Вам пишут? Я же Вам только, что написал и картинки приложил. Повторю ещё раз: При использовании Вашей обработки с настройками, которые я уже выкладывал - я получил кривую шапку (только последнюю колонку) и пустую табличную часть. В личку могу выслать csv файл, чтобы Вы сами убедиться, что функция РазложитьСтрокуВМассивПодстрокMSExchange не работает.
(12) BigB, скиньте в личку ваш файл. Важным нюансом также является, чтобы названия колонок шапки писались слитно!
Думаю именно из-за этого у вас и не работает все. Поэтому, если вы весь алгоритм работы не разобрали, то такой результат и получили!
Просмотры 24548
Загрузки 43
Рейтинг 10
Создание 22.10.15 11:37
Обновление 22.10.15 11:37
№ Публикации 410803
Конфигурация Конфигурации 1cv8
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо
Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.
2 стартмани
30.06.2020 11176 100 XilDen 15
Сервис push-уведомлений для 1С (Push Notification Service For 1C - PNS4OneS)
1 стартмани
02.02.2022 4561 18 ltfriend 5
Создание интерактивных обучающих курсов с помощью Vanessa Interactive
Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).
1 стартмани
02.02.2022 3238 0 Viktor_Ermakov 2
Универсальный метод, html шаблоны, страницы с авторизацией и без, многоязычность, страница авторизации, etc.
1 стартмани
22.01.2022 4410 7 vl-sher1 29
Модуль обмена с QIWI Промо
Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.
5 стартмани
25.05.2020 10640 1 Neti 10
Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)
Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.
1 стартмани
01.04.2021 11842 13 SaschaG 4
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
1 стартмани
31.03.2021 14948 49 Parsec1C 18
1 стартмани
24.03.2021 10653 17 ltfriend 12
BIM: взаимодействие с платформой Autodesk Forge Промо
Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.
1 стартмани
25.11.2020 58119 13 kandr 3
Загрузка данных о продажах ОЗОН из API Ozon и Отчетов в формате *.xlsx в документ "Отчет комиссионера"
Обработки предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 1.6; Управление торговлей, редакция 10.3; Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP Управление предприятием 2
На днях потребовалось выгрузить данные из таблицы значений в CSV-файл. Спросил у гугла готовый код и. поставил его в тупик. Тогда отправился в закрома и нарыл универсальную процедуру на Delphi, которую когда-то (много-много лет тому назад) написал. Перевел ее на 1С-овременный язык. И вот что получилось.
Увы! Статья не может состоять только из кода. После некоторых раздумий я решился осквернить этот скрижаль мысли в рамках RFC4180, квинтэссенцию материализации файла с разделителями на накопителях и прочее и прочее своим косноязычным описанием сего таинства.
Пролью свет и приоткрою глаза начинающего программиста Архипа на это чудо. Итак, слушай, о достопочтенный начинающий программист Архип.
Прежде всего должен ты получить таблицу значений. Самый простой способ - написать запрос и выгрузить результат в упомянутую мной сущность бытия данных. Затем надо определиться с именем файла. После этого дозволь обратить твой взор, о начинающий программист Архип, на функцию СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ). В эту функцию передается та самая таблица значений, полученная из запроса. А кроме нее разделитель полей. А потом принять ответственное решение на заполнение первой строки названиями колонок этой самой, выше упомянутой таблицы значений (см. функцию СоздатьЗаголовкиCSV).
А дальше таблица значений будет читаться построчно, и каждая строка ее будет превращаться в сроковое значение в соответствии с заклинанием манускрипта СоздатьСтрокуCSV(запись,разделитель).
Специальные предложения
Боюсь ошибку выдаст программа сия, о достопочтенный учитель, в случае когда надо вывести заголовки.
В функции СоздатьЗаголовкиCSV нет начального описания переменной стрКолонки.
(6) Прости учитель. С первого класса у меня так - сначала скажу, потом подумаю, а часто и не подумаю - скажу. Из-за чего часто выгоняли в коридор.
На длинных таблицах код будет быстро деградировать по производительности. И только эта деградация спасёт от переполнения памяти. Тут либо уж сразу в файл писать, либо использовать ЗаписьXML как StringBuilder.
Вот пример. Учтите только, что этому коду уже 6 лет.
(8) speshuric,
Все так. Нужно будет выгрузить большие объемы - деградируем. Хотя csv и большие объемы - сомнительный союз.
(12)
Не соглашусь. Именно CSV нереально рулит на больших объёмах. Какие другие варианты в родном 1С-коде? XML - это вообще нецензурно. DBF - ограничение в сколько-то гигов (то ли 2 то ли 4 то ли еще что-то подобное). JSON - слишком молодо и оверхэд всё равно заметный. Табличный документ (в MXL или XLSX) сдохнут в районе миллиона строк. Остаются только внешние источники данных (или сразу ADO), там можно по частям запихивать, но не все получатели могут через ODBC/ADO. Все остальные средства - неродные вроде бы. И вот - единственный финалист CSV - благо во всех языках, в том числе 1С, его прочитать можно последовательно. Но и CSV в памяти тогда весь держать не следует, конечно же.
(13) speshuric,
Ok, прозвучало убедительно, после праздников выпущу в свет второй комплект процедур и функций для больших массивов.
(14) starik-2005,
про паспорта мне комментировать сложно, не тот профиль. Но есть предположение что, что-то не то в регламенте обмена. У меня получается на 1 недействительный паспорт 4+6+6 символов, плюсом 3 запятых. Итого 20(21) символ на запись с учетом ПС. 1073741824 /21=51130563 паспортов. Каждый третий в стране поменял паспорт. Интересно за какой период эта выборка?
Ну есть же в формате вариант для описания нулевого значения!
Дальше если в поле есть символ ( " ), то вы такое поле помещаете в кавычки:
Если на входе будет такая строка, то что получится:
В итоге все преобразуется в строку:
Как это распарсится при чтении? Хреново. В действительности, надо все символы ( " ) заменить на символы ( "" ), т.е. так:
Что, я один это увидел?
(10) starik-2005,
чуть выше проверки на кавычку в строке есть строка, предлагаемый Вами вариантом с заменой кавычки на пару кавычек
так-что вроде все справедливо.
А насчет 0 у числового значения: у 1С трудно понять в числовом значении где 0, а где NULL.Поэтому и проверяю если тип = ЧИСЛО и пусто, то пусть будет 0, а не пустое значение. Хотя вопрос интересный. Или имелось ввиду
Общий формат и MIME-тип для значений, разделенных запятыми (CSV файлов)
В то же время, различные программы и операционные системы с низапямятных времен используют различные MIME-типы для этого формата. Этот RFC документ официально регистрирует "text/csv" MIME-тип для CSV в соответствии с RFC 2048 [1].
В то время как существуют различные реализации и спецификации для CSV формата
(напр. [4], [5], [6] и [7]), не существует ни одной официальной спецификации
в настоящее время, что позволяет существовать множеству разнообразных
интерпретации CSV файлов. Этот раздел описывает формат, которому, похоже,
следуют большинство реализаций:
1. Записи расположены на отдельных строках, разделенных символом разрыва
строки (CRLF). Например:
ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF
2. Последняя запись в файле может иметь или не иметь перенос строки.
Например:
ааа, bbb, ссс CRLF
zzz, ууу, ххх
3. Опционально и совсем необязательно в первой строке файла может быть
расположен заголовокв том же формате, как и для обычных записей строк.
Этот заголовок будет являться именами соответствующих полей в файле и
должн содержать такое же количество полей, как записи в остальной части
файла (наличие или отсутствие строки заголовка должно быть указано с
помощью дополнительного параметра этого MIME-типа). Например:
field_name, field_name, field_name CRLF
ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF
4. В пределах заголовка и каждой записи, может быть одно или более
полей, разделенных запятыми. Каждая строка должна содержать то же самое
количество полей по всему файлу. Пробелы считаются частью поля и не
должны игнорироваться. Последнее поле в записи не должна оканчиваться
запятой. Например:
5. Каждое поле может быть (а может и не быть) заключено в двойные
кавычки (однако некоторые программы, такие как Microsoft Excel, могут не
использовать двойные кавычки вообще). Поля, не заключеные в двойные
кавычки, не могут содержать двойные кавычки внутри полей. Например:
"ааа", "bbb", "ccc" CRLF
zzz, ууу, ххх
6. Поля, содержащие разрывы строки (CRLF), двойные кавычки, или запятые
должены быть заключены в двойные кавычки. Например:
"ааа", "b CRLF
bb ","ccc" CRLF
zzz, ууу, ххх
7. Если двойная кавычка используется внутри заключенного поля, то она
должна быть экранирована другой двойной кавычкой. Например:
ABNF грамматика (англ. augmented Backus-Naur form — расширенная форма
Бэкуса — Наура) [2] выглядит следующим образом:
file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
CR = %x0D ;как указано в разделе 6.1 RFC 2234 [2]
DQUOTE = %x22 ;как указано в разделе 6.1 of RFC 2234 [2]
LF = %x0A ;как указано в разделе 6.1 of RFC 2234 [2]
CRLF = CR LF ;как указано в разделе 6.1 of RFC 2234 [2]
TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
Этот раздел содержит media-type описание приложений (в соответствии
с RFC 2048 [1]).
Повсеместно использование CSV в US-ASCII, но и другие кодировки могут
быть использованы в сочетании с параметром "Charset" .
Параметр "header" указывает на наличие или отсутствие строки заголовка.
Допустимые значения "present" или "absent". Разработчики могут не
использовать этот параметр должен самостоятельно принимать решение
относительно того, присутствует или отсутствует строка заголовка.
Как указано в разделе 4.1.1 RFC 2046 [3], этот media-тип использует CRLF
для обозначения разрыва строки, однако, разработчики должны знать, что
некоторые реализации могут использовать другие значения.
CSV-файлы содержат пассивный текстовые данные которые не должны создавать
каких-либо рисков. Тем не менее, теоретически возможно, что злонамеренные
двоичные данные могут быть включены для того, чтобы использовать
потенциальное переполнение буфера в программе обработки CSV данных.
Кроме того, частные данные могут быть переданы через этот формат (что,
конечно, относится к любому текстовых данных).
Из-за отсутствия единой спецификации, существуют значительные
различия между реализациями. Разработчики, вы должны "быть
консервативными в том, что вы делаете, и быть либеральным в том,
что вы принимаете от других"(RFC 793 [8]), когда делаете обработку
файлов CSV. Попытка создать общее определение можно найти в разделе 2.
Разработчик, решенив не использовать параметр "header" должен принимать
самостоятельно решение относительно того, присутствует ли заголовок
или отсутствует.
В то время как множество собственных спецификации существуют для различных программ и систем, не существует ни одного «хозяина» спецификации для этого формата. Попытка общего определения можно найти в разделе 2.
Приложения, использующие этот media-тип:
Электронные таблицы и различные утилиты преобразования данных.
Магическое число: нет
Расширение файла: CSV
Macintosh тип файла: TEXT
Email для получения дополнительной информации:
Назначение использования: ОБЩЕЕ
Автор / Контроллер: IESG
4. Соображения IANA
IANA зарегистрировал MIME-тип "text/csv" с помощью
приложения, предусмотреного в разделе 3 настоящего документа.
5. Вопросы безопасности
См обсуждение выше в разделе 3.
6. Выражаю признательностт
Автор хотел бы поблагодарить Dave Crocker, Martin Duerst, Joel M.
Halpern, Clyde Ingram, Graham Klyne, Bruce Lilly, Chris Lilley, и
членов IESG за их полезные предложения. Особое слово
благодарности Дэйву за помощь с грамматикой ABNF.
Особая благодарность L.T.S.
7.1. Нормативные ссылки
[1] Freed, Н., Кленсин, J., и J. Постел, "Интернет Многоцелевой
Mail Extensions (MIME) Часть четвертая: Процедуры регистрации ", BCP
13, RFC 2048, ноябрь 1996 года.
[2] Крокер, Д. и П. Overell, "Augmented BNF для синтаксиса
Технические характеристики: ABNF ", RFC 2234, ноябрь 1997 года.
[3] Freed, Н. и Н. Borenstein, "Многоцелевой Internet Mail
Расширения (MIME) Часть вторая: Типы носителей ", RFC 2046, ноябрь
1996.
7.2. Информативные ссылки
[8] Постел, J., "Протокол управления передачей", STD 7, RFC 793,
Сентябрь 1981.
Yakov Shafranovich
SolidMatrix Technologies, Inc.
Собственно самая интересная часть:
file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
В 1С 8.3 CSV формат используется для упрощенной выгрузки таблицы. В основном для синхронизации информации с сайтом, выгрузкой/загрузкой документов, прайс-листов. Это универсальный текстовый формат, служащий для типизации данных таблицы. В качестве разделителей используются спец. символы: Символы.Таб или , (запятая) или ; (точка с запятой). Как правило, в первой строчке обозначены названия колонки, во второй и далее - соответсвенно данные. Встроенного функционала для работы с CSV и 1С 8.3 не существует. Однако есть универсальные вспомогательные модели (функции) которые помогают с обработкой данных из CSV файла - например, РазложитьСтрокуВМассивПодстрок . Для работы с CSV файлами больших размеров (более 10Mb) рекомендуется использовать ADO - COMОбъект("ADODB.Connection") .
&НаКлиенте
Процедура ЧтениеФайлаCSV ()
ФайлCSV = Новый ТекстовыйДокумент ;
ФайлCSV . Прочитать ( "D:\import_21092020.csv" );
ЗагрузитьCSV ( ФайлCSV );
&НаСервере
Процедура ЗагрузитьCSV ( ФайлCSV )
ТЗ = Новый ТаблицаЗначений ;
// Важно! Чтобы в значениях НЕ встречался используемый разделитель
ИспользуемыйРазделитель = ";" ;
//*** Если есть шапка таблицы ***
ШапкаCSV = ФайлCSV . ПолучитьСтроку ( 1 );
// Чтение и разделение на отдельные значения в массив (по разделителю)
МассивCSV = СтрРазделить ( ШапкаCSV , ИспользуемыйРазделитель );
//***************************
Для Каждого СтрокаНом Из МассивCSV Цикл
// Удаляем пробелы т.к. в названии столбцов они не допускаются
ИмяБП = СтрЗаменить ( СтрокаНом , " " , "" );
ТЗ . Колонки . Добавить ( ИмяБП ,, СтрокаНом );
Для НомерСтроки = 2 По ФайлCSV . КоличествоСтрок () Цикл // Если без шапки, то начинаем с первой строчки
// Получаем строку по-порядку
СтрокаCSV = ФайлCSV . ПолучитьСтроку ( НомерСтроки );
// Разделяем с помощью выбранного разделителя каждую строку на столбцы
МассивCSV = СтрРазделить ( СтрокаCSV , ИспользуемыйРазделитель );
НоваяСтрочка = ТЗ . Добавить (); // Добавляем строку в ТЗ
Для НомСтолбца = 1 По МассивCSV . Количество () Цикл
ТекЗначениеCSV = МассивCSV [ НомСтолбца - 1 ];
ИмяКолонкиCSV = ТЗ . Колонки [ НомСтолбца - 1 ]. Имя ;
НоваяСтрочка [ ИмяКолонкиCSV ] = ТекЗначениеCSV ;
ИспользуемыйРазделитель = ";" ;
ФайлCSV = "D:\import_21092020.csv" ;
//*** Получаем данные из запроса ***
Запрос = Новый Запрос ;
Запрос . Текст =
"ВЫБРАТЬ
| ВнутреннийПрайс.Код КАК Код,
| ВнутреннийПрайс.Наименование КАК Наименование,
| ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
| ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
| ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
|ИЗ
| Справочник.Цены КАК ВнутреннийПрайс" ;
РезультатЗапроса = Запрос . Выполнить (). Выгрузить ();
ТЗ = РезультатЗапроса ;
//**********************************
ТекстCSV = "" ; // Текст с учетом заголовков, разделителей и переноса строк
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если ТекстCSV = "" Тогда
СтрокаКол = "" ;
КолонкиТЗ = ТЗ . Колонки ;
Для Каждого Колонка Из КолонкиТЗ Цикл
СтрокаКол = "" + СтрокаКол + Колонка . Имя + ИспользуемыйРазделитель ;
КонецЦикла;
ТекстCSV = СтрокаКол + Символы . ПС ;
ТекстCSV = ТекстCSV + СтрокаТЗ . Код + ИспользуемыйРазделитель + СтрокаТЗ . Наименование
+ ИспользуемыйРазделитель + СтрокаТЗ . ЗакупочнаяЦена + ИспользуемыйРазделитель + СтрокаТЗ . РозничнаяЦена
+ ИспользуемыйРазделитель + СтрокаТЗ . ОптоваяЦена + Символы . ПС ;
КодANSI = КодировкаТекста . ANSI ;
ТекстовыйФайлЗапись = Новый ЗаписьТекста ( ФайлCSV , КодANSI ); // Создание файла CSV
ТекстовыйФайлЗапись . ЗаписатьСтроку ( ТекстCSV ); // Запись информации в файл
ТекстовыйФайлЗапись . Закрыть (); // Обязательно закрываем, иначе зависает в процессе
Форма импорта (Контент > Инфоблоки > Импорт > CSV) предназначен для импорта данных в формате CSV в информационный блок.
Шаг 1. Файл данных
Форма предназначена для выбора загружаемого файла и информационного блока, в который будет выполняться загрузка данных.
Поле | Описание |
---|---|
Файл данных | С помощью кнопки Обзор выберите файл с загружаемыми данными. |
Информационный блок | Выберите сначала тип информационного блока, а затем и сам блок, в который будет выполняться загрузка данных. |
Шаг 2. Формат
- с разделителями - поля разделяются специальным символом (например, запятой или пробелом);
- фиксированная ширина полей.
Шаг 3. Поля
Форма служит для задания соответствия между полями инфоблока и загружаемого файла.
Важно! Обязательно должно быть выбрано хотя бы одно из полей Уникальный идентификатор (B_IBLOCK_ELEMENT.XML_ID) или Название (B_IBLOCK_ELEMENT.NAME). Эти поля используются для сопоставления записей в файле записям в базе данных.
Также проверьте настройки инфоблока В данном примере опция Начало активности отмечена как обязательная, поэтому в создаваемом
файле csv тоже должна быть колонка с указанием начала активности элемента.
( Контент > Инфоблоки > Типы инфоблоков > [ваш тип инфоблока]/[ваш инфоблок] ), в который Вы хотите загрузить файл: если во вкладках Поля или Поля разделов какие-либо поля отмечены как обязательные, то эти колонки должны быть обязательно и в загружаемом csv-файле.
Внимание! Убедитесь, что соответствия полей заданы корректно. В противном случае результат загрузки непредсказуем.
- деактивировать - элементы инфоблока станут неактивными;
- удалить - элементы будут удалены;
- не трогать - элементы будут сохранены без изменений.
- оставить как есть - элементы/группы не будут изменены;
- активировать - элементы/группы станут активными (т.е. доступными для показа в публичном разделе).
Шаг 4. Результат
Выводится информация о результатах загрузки данных. Для того чтобы повторить загрузку данных или импортировать данные из другого CSV файла, нажмите кнопку Вернуться на первый шаг.
Целью данной статьи будет изучение алгоритмов работы с текстовыми файлами, TXT и CSV. Очень часто приходится использовать данные форматы для обмена данными между несколькими базами, в том числе и отличными от 1С.
Чтение текстового файла
В данной конструкции создается неинициализированный объект ЧтениеТекста, а для инициализации используется метод Открыть()
Если файл небольшой можно использовать объект ТекстовыйДокумент (пример чтения )
Текст = Новый ТекстовыйДокумент ;
ПолноеИмяФайла = «D:\1C\Пример.txt» ;
Текст . Прочитать ( ПолноеИмяФайла ) ;
КоличествоСтрок = Текст . КоличествоСтрок ( ) ;
Для Счетчик = 1 по КоличествоСтрок Цикл
ТекСтрока = Текст . ПолучитьСтроку ( Счетчик ) ;
Сообщить ( ТекСтрока ) ;
КонецЦикла ;
Запись текстового файла
Записать текст в документ можно при помощи функции ЗаписатьСтроку() — в данном случае после записанной строки автоматически добавится разделитель строк и следующая запись начнется с новой строки. Если же необходимо добавить в строку дополнительно текст, то можно воспользоваться функцией без переноса строки — Записать().
Запись через «ТекстовыйДокумент»
Пример не содержит проверок на наличие файла, файл перезаписывается. При необходимости добавления используйте метод Прочитать().
Чтение файла CSV
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятая (,) или точка с запятой (;). (Википедия)
Такой формат часто используют для выгрузки данных из различных баз отличных от 1С. Ниже представлен алгоритм чтения данного формата на основе обычного чтения текстового файла с анализом строки и разбиением ее на поля.
Для типовых конфигураций для «парсинга» строки возможно использование функции общего назначения РазложитьСтрокуВМассивПодстрок(Текст, «.»), в которой можно задать произвольный разделитель..
Подведем итоги:
Для чтения и записи текстового файла в 1С существуют 3 объекта ЧтениеФайла, ЗаписьФайла, ТекстовыйДокумент.
Последний более универсальный, но медлительный, т.к. считывает файл сразу. Если памяти мало, его использование может вызвать ошибку нехватки памяти. Данный объект является основой для интерфейсного объекта «ПолеТекстовогоДокумента»
Возможно использовать данные функции для чтения/записи HTML и log файлов.
Для работы с XML (хотя они тоже текстовые) рекомендуется использовать специализированные объекты ЧтениеXML, ЗаписьXML.
Половина денег, которые идут на рекламу, выбрасываются впустую; но как узнать, какая именно половина?
— Уильям Гескет Левер
Читайте также: