Для примера рассмотрим преобразование таблицы значений, полученное с помощью произвольного запроса.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *
|ИЗ
| Справочник.Пользователи КАК Пользователи";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
Для начала нам будет необходимо преобразовать Таблицу значений в Табличный документ, для этого есть функция ТаблицаЗначенийВТабличныйДокумент
Функция ТаблицаЗначенийВТабличныйДокумент(ТаблицаЗначений) Экспорт
//Используем Построитель отчета для вставки Данных ТаблицыЗначений в ТабличныйДокумент
ТабличныйДокумент = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьЗаголовокОтчета = Ложь;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначений);
Построитель.Вывести(ТабличныйДокумент);
//Постротель оставляет первую колонку пустой, удаляем ее чтобы данные начинались с первой колонки
ТабличныйДокумент.УдалитьОбласть(ТабличныйДокумент.Область(1, 1,ТабличныйДокумент.ВысотаТаблицы , 1), ТипСмещенияТабличногоДокумента.ПоГоризонтали);
// Возвращает Табличный документ где первая строка содержит колонки ТаблицыЗначений а последующие строки хранят строки
Возврат ТабличныйДокумент;
КонецФункции
ТабличныйДокумент = ТаблицаЗначенийВТабличныйДокумент(ТаблицаЗначений);
Полученный Табличный документ мы сохраним в виде текстового файла.
Предварительно временно заменим существующие символы табуляции в исходных данных, чтобы не сломать структуру csv файла, так как колонки будут разделены по ним:
//Определяем куда нужно сохранить готовый результат
ИмяФайла = "D:\Repository\test.csv";
//В Табличном документе заменяем все символы Табуляции на текст "<$СимволТабуляции$/>" чтобы исключить конфликты при создании csv-файла
// этот цикл можно исключить если исходные данные точно не содержат символы табуляции
ОбластьПоиска = ТабличныйДокумент.Область(1,1,1,1);
Пока Истина Цикл
ОбластьПоиска = ТабличныйДокумент.НайтиТекст(Символы.Таб,ОбластьПоиска);
Если ОбластьПоиска = Неопределено Тогда
Прервать;
КонецЕсли;
ОбластьПоиска.Текст = СтрЗаменить(ОбластьПоиска.Текст,Символы.Таб,"<$СимволТабуляции$/>");
КонецЦикла;
// Сохраняем Табличный документ как текст, в полученном текстовом документе значения каждой ячейки разделяются через символ табуляции
ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.TXT);
//Извлекаем полученный Текстовый документ
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.Прочитать(ИмяФайла,КодировкаТекста.UTF8,Символы.ПС);
Текст = ТекстовыйФайл.ПолучитьТекст();
Сформированный текстовый файл имеет следующий вид:
Как и говорилось выше, данные тут разделены символом табуляции.
Теперь нам необходимо заменить символом табуляции на разделитель csv файла - ";", а также восстановить ранее замененные и символы ТАБ. После чего мы можем сохранить готовый csv файл.
//Заменяем сформированные символы табуляции на символ рахделитель csv файла - ";"
Текст = СтрЗаменить(Текст,Символы.Таб,";");
// Востанавливаем ранее экранированные символы табуляции в самих данных
Текст = СтрЗаменить(Текст,"<$СимволТабуляции$/>",Символы.Таб);
// Сохраняем сформированные текст csv-файла
ТекстовыйФайл.УстановитьТекст(Текст);
ТекстовыйФайл.Записать(ИмяФайла,,Символы.ПС);
Готово!
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.202