Как выгрузить csv из 1с
Перейти к содержимому

Как выгрузить csv из 1с

  • автор:

Чтение и запись данных в формате csv с помощью 1С

Создаем внешнюю обработку. Здесь будет реализован вариант для управляемой формы. Но сути дела это не меняет.

Чтение и запись через csv в 1С - создание обработки

Чтение и запись данных в формате csv в 1С - создание формы

Для наглядности поместим на форму таблицу значений и команду ее заполнения начальными данными. Начальное заполнение будет происходить из массивов фамилий, имен, отчеств, дат рождения и ИНН в случайном сочетании. К реальным лицам никакого отношения эти данные не имеют. Также добавим два поля ввода и две команды — для чтения и записи данных в формате csv.

Ну и теперь основное. Поместим в обработчики кнопок код чтения и запись данных в формате csv в 1С.
Сначала запись. В данной обработке запись будет в указанный файл, заполнение данными из таблицы значений.
Следует заметить, что типового функционала записи и чтения файлов в формате csv в 1С не предусмотрено. Сначала получается строка данных. При желании можно вставить первой строкой заголовки (в фрагменте кода закомментировано). Далее строка данных формируется путем объединения элементов данных через разделитель. А затем используется обычная запись в файл полученной строки.

 КоличествоСтрок СтрокаДанныхМассив Пример обработки можно скачать тут.

Как выгрузить csv из 1с

8(495)005-62-29

skype: live:di-sem

@programmist_1C

Отправить заявку

Загрузка в 1с из csv. Обработка-шаблон для импорта из csv

Выкладываю обработку-шаблон для загрузки данных из файла csv в 1с.

Она позволяет выбрать файл csv для загрузки.

Получить из файла строки и разложить их в массив.

Вам остается лишь дописать что вы хотите сделать с полученными данными.

Если не сможете разобраться как это сделать — обращайтесь 🙂

Скачать обработку-шаблон Импорт в 1с из файла CSV

Текст процедур обработки:

&НаКлиенте Процедура ЗагрузитьCSV(Команда) // выполняется при нажатии на кнопку ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); //. ДиалогФыбораФайла.Фильтр="csv файл с разделтелями (*.csv)|*.csv|"; ДиалогФыбораФайла.Заголовок = "Выберите файл"; ДиалогФыбораФайла.ИндексФильтра = 0; описаниеОповещения = Новый ОписаниеОповещения("ГрузимИзФайла", ЭтотОбъект); ДиалогФыбораФайла.Показать(описаниеОповещения); КонецПроцедуры &НаКлиенте Процедура ГрузимИзФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт // вызываем диалог выбора файла Если ВыбранныеФайлы > Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда // Сообщить("Файл выбран!"); //работаем с файлом Имяфайла=ВыбранныеФайлы[0]; // Пишем в реестр сообщить(имяФайла); // вызываем дальнейшую процедуру обработки Путь=имяФайла; // для сохранения xml понадобится // читаем файл ЗагружаемыйФайл = Новый ТекстовыйДокумент; ЗагружаемыйФайл.Прочитать(ИмяФайла); Если лист="лист1" тогда обработатьCSV1(ЗагружаемыйФайл); конецЕсли; Иначе Сообщить("Файл не выбран!"); КонецЕсли; КонецПроцедуры // процедуру обработатьCSV1(файл) - можно сделать на клиенте &наСервере процедура обработатьCSV1(файл) для номерстроки=2 по файл.КоличествоСтрок() цикл // первую строку пропускаем т.к. там название полей строка=файл.получитьСтроку(номерСтроки); массив=РазложитьСтрокуВМассивПодстрок(строка,";"); // строка csv - файла, преобразованная в массив, дальше с этими данными можно делать что угодно конецЦикла; конецПроцедуры // процедуру РазложитьСтрокуВМассивПодстрок - можно сделать на клиенте, если процедура "обработатьCSV1" тоже имеет директиву &наКлиенте &наСервере Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // глРазложить 
  • Главная
  • Блог
  • В помощь 1с программисту
  • Загрузка в 1с из csv. Обработка-шаблон для импорта из csv

Как выгрузить csv из 1с

csv- это текстовый файл с разделителем строк точка с запятой.Но при открытии этого файла в блокноте в файле показывается одна строка(есть пример правильного файла csv).

Такая постановка задачи:
«Разделители строк должны иметь формат MS Windows/DOS — два последовательных символа 0x0D 0x0A. Одинарный разделитель формата Unix 0x0D не допускается.»

Как эти символы записать после каждой строки в файле?

Например такая строка
стр=»1;2;3;»;

Делаю из нее 3 строки для проверки
стр=стр+Символы.ВК+стр+Символы.ВК+стр+Символы.ВК;

Текст = Новый ЗаписьТекста(ИмяФайлаCSV,КодировкаТекста.ANSI);
Текст.ЗаписатьСтроку(стр);

Файл получаю почти такой как мне надо, но за исключением того что в конце всей строки символа возврата каретки нет, а после первой и второй строки есть

1С 8.3 CSV — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С

В 1С 8.3 CSV формат используется для упрощенной выгрузки таблицы. В основном для синхронизации информации с сайтом, выгрузкой/загрузкой документов, прайс-листов. Это универсальный текстовый формат, служащий для типизации данных таблицы. В качестве разделителей используются спец. символы: Символы.Таб или , (запятая) или ; (точка с запятой). Как правило, в первой строчке обозначены названия колонки, во второй и далее — соответсвенно данные. Встроенного функционала для работы с CSV и 1С 8.3 не существует. Однако есть универсальные вспомогательные модели (функции) которые помогают с обработкой данных из CSV файла — например, РазложитьСтрокуВМассивПодстрок . Для работы с CSV файлами больших размеров (более 10Mb) рекомендуется использовать ADO — COMОбъект(«ADODB.Connection») .

Оглавление:

Чтение файла CSV в 1С 8.3:

&НаКлиенте
Процедура ЧтениеФайлаCSV ()

ФайлCSV = Новый ТекстовыйДокумент ;
ФайлCSV . Прочитать ( «D:\import_21092020.csv» );
ЗагрузитьCSV ( ФайлCSV );

Загрузка CSV файла (в Таблицу значений) в 1С 8.3:

&НаСервере
Процедура ЗагрузитьCSV ( ФайлCSV )

ТЗ = Новый ТаблицаЗначений ;
// Важно! Чтобы в значениях НЕ встречался используемый разделитель
ИспользуемыйРазделитель = «;» ;

//*** Если есть шапка таблицы ***
ШапкаCSV = ФайлCSV . ПолучитьСтроку ( 1 );
// Чтение и разделение на отдельные значения в массив (по разделителю)
МассивCSV = СтрРазделить ( ШапкаCSV , ИспользуемыйРазделитель );
//***************************

Для Каждого СтрокаНом Из МассивCSV Цикл

// Удаляем пробелы т.к. в названии столбцов они не допускаются
ИмяБП = СтрЗаменить ( СтрокаНом , » » , «» );
ТЗ . Колонки . Добавить ( ИмяБП ,, СтрокаНом );

Для НомерСтроки = 2 По ФайлCSV . КоличествоСтрок () Цикл // Если без шапки, то начинаем с первой строчки

// Получаем строку по-порядку
СтрокаCSV = ФайлCSV . ПолучитьСтроку ( НомерСтроки );

// Разделяем с помощью выбранного разделителя каждую строку на столбцы
МассивCSV = СтрРазделить ( СтрокаCSV , ИспользуемыйРазделитель );
НоваяСтрочка = ТЗ . Добавить (); // Добавляем строку в ТЗ

Для НомСтолбца = 1 По МассивCSV . Количество () Цикл

ТекЗначениеCSV = МассивCSV [ НомСтолбца — 1 ];
ИмяКолонкиCSV = ТЗ . Колонки [ НомСтолбца — 1 ]. Имя ;
НоваяСтрочка [ ИмяКолонкиCSV ] = ТекЗначениеCSV ;

Выгрузка в файл CSV и его создание в 1С 8.3:

ИспользуемыйРазделитель = «;» ;
ФайлCSV = «D:\import_21092020.csv» ;

//*** Получаем данные из запроса ***
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| ВнутреннийПрайс.Код КАК Код,
| ВнутреннийПрайс.Наименование КАК Наименование,
| ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
| ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
| ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
|ИЗ
| Справочник.Цены КАК ВнутреннийПрайс» ;
РезультатЗапроса = Запрос . Выполнить (). Выгрузить ();
ТЗ = РезультатЗапроса ;
//**********************************

ТекстCSV = «» ; // Текст с учетом заголовков, разделителей и переноса строк
Для Каждого СтрокаТЗ Из ТЗ Цикл

Если ТекстCSV = «» Тогда

СтрокаКол = «» ;
КолонкиТЗ = ТЗ . Колонки ;
Для Каждого Колонка Из КолонкиТЗ Цикл
СтрокаКол = «» + СтрокаКол + Колонка . Имя + ИспользуемыйРазделитель ;
КонецЦикла;
ТекстCSV = СтрокаКол + Символы . ПС ;

ТекстCSV = ТекстCSV + СтрокаТЗ . Код + ИспользуемыйРазделитель + СтрокаТЗ . Наименование
+ ИспользуемыйРазделитель + СтрокаТЗ . ЗакупочнаяЦена + ИспользуемыйРазделитель + СтрокаТЗ . РозничнаяЦена
+ ИспользуемыйРазделитель + СтрокаТЗ . ОптоваяЦена + Символы . ПС ;

КодANSI = КодировкаТекста . ANSI ;
ТекстовыйФайлЗапись = Новый ЗаписьТекста ( ФайлCSV , КодANSI ); // Создание файла CSV
ТекстовыйФайлЗапись . ЗаписатьСтроку ( ТекстCSV ); // Запись информации в файл
ТекстовыйФайлЗапись . Закрыть (); // Обязательно закрываем, иначе зависает в процессе

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

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