Формат CSV распространен в современном информационном мире достаточно широко, поэтому взаимодействовать с ним рано или поздно придется любому разработчику в среде 1С.
Наиболее часто импорт CSV используют, чтобы получить в 1С данные с сайта. Несмотря на то, что часто в него выгружают таблицы, важно понимать, что это текстовый формат со специальными разделителями
В их роли могут выступать различные знаки препинания или специальные символы – табуляция и другие.
Загрузка CSV в 1С 8.3
Самостоятельных функций работы с CSV-файлами в платформе 1С Предприятие 8.3 нет. Разработчикам приходится работать с ним как с текстовым форматом, впоследствии разбивая полученные данные на отдельные столбцы. Это немного сложнее и требует от неопытных программистов некоторого времени на теоретическую подготовку. Впрочем, если у вас простой формат данных, то можно воспользоваться текстом универсальной обработки выгрузки и загрузки информации.
Настроим обмен 1С с любым CMS по выгодным тарифамВ первую очередь необходимо нужный файл разместить в каталоге, доступном 1С. Также придется выбрать символ – разделитель, который отделяет данные различных столбцов в строке текстового документа. Проследите, чтобы в значениях не встречался выбранный символ-разделитель, так как это помешает корректной обработке при загрузке данных. В большинстве случаев алгоритм загрузки CSV файла в 1С состоит из следующих этапов:
- Считываем данные на клиенте в текстовый документ, указав путь к файлу формата CSV;
ПрочитанныйФайл = Новый текстовыйДокумент; ПрочитанныйФайл.Прочитать("D:\20190227_144335.csv");
- Передаем прочитанный текстовый документ в процедуру на сервере;
ЗагрузитьДанныеНаСервере(ПрочитанныйФайл);
- В серверной процедуре создаем таблицу значений, в которую впоследствии будут загружены данные и задаем разделитель, используемый в конкретном CSV. Очень важно, чтобы это был уникальный символ, не используемый в значениях. Часто используют знаки препинания или специальные знаки;
ДанныеИзФайла = новый ТаблицаЗначений; Разделитель = ";";
- Если в файле присутствует шапка таблицы, то считываем ее и разделяем на отдельные значения в массив по символу-разделителю. Используется стандартная функция платформы «СтрРазделить», с которой можно ознакомиться в синтакс-помощнике. Если в файле не было названий столбцов, то эти команды нужно убрать;
Шапка = ПрочитанныйФайл.ПолучитьСтроку(1); МассивКол = СтрРазделить(Шапка, Разделитель);
- Задаем столбцы в ТЗ, которую создали, попутно приравнивая их к единому формату. Кроме этого, в названии столбцов таблицы значений не допускается пробелов, поэтому их нужно убирать;
Для Каждого ИмяСт Из МассивКол Цикл ИмяБП = СтрЗаменить(ИмяСт," ",""); ДанныеИзФайла.Колонки.Добавить(ИмяБП,, ИмяСт); КонецЦикла;
- В цикле проходим построчно весь текстовый файл и каждую строку разделяем на столбцы с помощью выбранного разделителя. Во вложенном цикле заполняем каждый столбец значением из строки текстового документа.
Для НомерСтроки=2 по ПрочитанныйФайл.КоличествоСтрок() Цикл Строка = ПрочитанныйФайл.ПолучитьСтроку(НомерСтроки); МассивКол = СтрРазделить(Строка,Разделитель); НоваяСтрочка= ДанныеИзФайла.Добавить(); Для НомерСтолбца= 1 по МассивКол.Количество() Цикл ТекущееЗначение = МассивКол[НомерСтолбца-1]; ИмяКолонки = ДанныеИзФайла.Колонки[НомерСтолбца-1].Имя; НоваяСтрочка[ИмяКолонки] = ТекущееЗначение; КонецЦикла; КонецЦикла;
Представленный алгоритм чтения из CSV использует клиент-серверную архитектуру, но также вы сможете его выполнить и на клиенте. Конечно, придется обойтись без использования таблиц значений, но импортировать данные можно. Зачастую это используется, если при импорте из CSV необходимо получать подтверждение данных от пользователя.
Также в работе часто приходится выгружать данные из 1С для разнообразных программ. Формат CSV отлично подходит для этого, так как с ним работает большинство приложений. Единственный момент – разделяющий символ нужно заранее продумать и согласовать, чтобы принимающему данные программисту было легче обрабатывать файлы.
Выгрузка в CSV из 1С 8.3
Перед тем как настраивать экспорт в CSV, стоит определиться с каталогом, в который будут выгружаться данные. У пользователя, который будет выгружать данные, должен быть доступ на запись в выбранную папку. Обработка для CSV будет состоять из нескольких функций – так намного нагляднее и понятнее, чем одна большая процедура:
- Процедура запуска выгрузки в файл. Указываем путь к файлу, который нужно создать;
Процедура СоздатьCSV(Команда) ВыгрузитьВCSV("D:\Nomenklatura.csv"); КонецПроцедуры
- Задаем разделитель и вызываем последовательно все функции – запроса данных, их обработки и записи;
Процедура ВыгрузитьВCSV(имяФайлаCSV); Разделитель = "|"; ТаблицаЗначений = Получитьданные(); Текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель); ЗаписатьCSV(текст,имяФайлаCSV); КонецПроцедуры
- Функция получения данных, которые необходимо сохранить в CSV. Информация выгружается из базы данных в таблицу значений с помощью запроса;
Функция Получитьданные() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Код КАК Код, | Номенклатура.Наименование КАК Наименование, | Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Номенклатура.Родитель КАК Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Возврат РезультатЗапроса; КонецФункции
- Формирование текста для нового файла с учетом разделителей, заголовков и переноса строк;
Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель) Текст=""; для каждого запись из ТаблицаЗначений Цикл если Текст="" тогда Текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) + Символы.ПС; КонецЕсли; Текст = Текст + запись.Код + разделитель + запись.ЕдиницаИзмерения + разделитель + запись.Наименование + разделитель + запись.Родитель + Символы.ПС; КонецЦикла; Возврат текст; КонецФункции
- Процедура записи полученной текстовой строки в конечный файл с указанием нужной кодировки.
Процедура ЗаписатьCSV(текст,имяФайла) кодировка = КодировкаТекста.ANSI; ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка); ТекстовыйФайлЗапись.ЗаписатьСтроку(текст); ТекстовыйФайлЗапись.Закрыть(); КонецПроцедуры
Чтобы представить полученный файл в виде таблицы в Excel, можно воспользоваться мастером импорта текста. На вкладке «Данные» есть кнопка «Текст по столбцам». Необходимо выделить наш текст, который по умолчанию сохраняется в первый столбец, и нажать на эту кнопку. После простой настройки, в течение которой вы укажете разделитель, перед нами появится таблица.
Это код универсальной выгрузки данных, которая применима в большинстве случаев. Важно помнить, что выбранный символ разделителя не должен встречаться в данных, иначе придется обрабатывать конечный файл. Поэтому, перед тем как выгружать данные, проведите их анализ и определите наилучший вариант. Платформа 1С Предприятие 8.3 предоставляет широкий выбор, поэтому вряд ли возможна ситуация, когда в данных встречаются все спецсимволы.
Уверенная работа с CSV позволит вам зарекомендовать себя не только как опытного разработчика 1С, но и интегратора. На текущий момент большинство задач для 1С от крупных компаний связано именно с обменом данными между системами. Конечно, не во всех случаях подойдет приведенный выше алгоритм, но поняв его принцип, вы с легкостью доработаете его при необходимости.
консультация эксперта
самые свежие новости 1 раз в месяц