Увы! Статья не может состоять только из кода. После некоторых раздумий я решился осквернить этот скрижаль мысли в рамках RFC4180, квинтэссенцию материализации файла с разделителями на накопителях и прочее и прочее своим косноязычным описанием сего таинства.
Пролью свет и приоткрою глаза начинающего программиста Архипа на это чудо. Итак, слушай, о достопочтенный начинающий программист Архип.
...
имяФайлаCSV = КаталогВременныхФайлов()+"anycsvfile.txt";
Кодировка = КодировкаТекста.ANSI; разделитель = ",";
текст = СоздатьДанныеCSV(ТаблицаЗначенийПолученнаяИзЗапроса, разделитель);
ЗаписатьCSV(текст, имяФайлаCSV, Кодировка);
...
Прежде всего должен ты получить таблицу значений. Самый простой способ - написать запрос и выгрузить результат в упомянутую мной сущность бытия данных. Затем надо определиться с именем файла. После этого дозволь обратить твой взор, о начинающий программист Архип, на функцию СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ). В эту функцию передается та самая таблица значений, полученная из запроса. А кроме нее разделитель полей. А потом принять ответственное решение на заполнение первой строки названиями колонок этой самой, выше упомянутой таблицы значений (см. функцию СоздатьЗаголовкиCSV).
А дальше таблица значений будет читаться построчно, и каждая строка ее будет превращаться в сроковое значение в соответствии с заклинанием манускрипта СоздатьСтрокуCSV(запись,разделитель).
// Создаем строку загоовков для CSV-файла
Функция СоздатьЗаголовкиCSV(таблицаЗначений, разделитель)
колонкиТЗ = ТаблицаЗначений.колонки;
Для каждого колонка Из колонкиТЗ Цикл
Если СтрДлина(стрКолонки)>0 Тогда
стрКолонки = стрКолонки + разделитель;
КонецЕсли;
стрКолонки = стрКолонки + колонка.Имя;
КонецЦикла;
Возврат стрКолонки;
КонецФункции
// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений, разделитель)
стрЗапись = "";
Для каждого поле Из записьТаблицаЗначений Цикл
Если СтрДлина(стрЗапись)>0 Тогда
стрЗапись = стрЗапись + разделитель;
КонецЕсли;
Если ТипЗнч(поле) = Тип("Число") Тогда
стрПоле = ?(ЗначениеЗаполнено(поле),Формат(поле,"ЧРД=."),"0");
ИначеЕсли ТипЗнч(поле) = Тип("Дата") Тогда
стрПоле = Формат(поле,"ДФ=dd.MM.yyyy");
Иначе //Если ТипЗнч(поле) = Тип("Строка") Тогда
стрПоле = СтрЗаменить(Строка(поле),"""","""""");
Если
( СтрНайти(стрПоле," ")>0 ) ИЛИ
( СтрНайти(стрПоле,"""")>0 ) ИЛИ
( СтрНайти(стрПоле,",")>0 ) ИЛИ
( СтрНайти(стрПоле,";")>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.Таб)>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.ВК)>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.ПФ)>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.ВТаб)>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.НПП)>0 ) ИЛИ
( СтрНайти(стрПоле,Символы.ПС)>0 )
Тогда
стрПоле = """"+стрПоле+"""";
КонецЕсли;
КонецЕсли;
стрЗапись = стрЗапись + Строка(стрПоле);
КонецЦикла;
Возврат стрЗапись;
КонецФункции
//
Функция СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ)
текстЗапись="";
Если выводитьЗаголовок Тогда
текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений, разделитель);
КонецЕсли;
Для Каждого запись Из таблицаЗначений Цикл
стрЗапись = СоздатьСтрокуCSV(запись,разделитель);
Если СтрДлина(стрЗапись)>0 Тогда
текстЗапись = текстЗапись + Символы.ПС;
КонецЕсли;
текстЗапись = текстЗапись + стрЗапись;
КонецЦикла;
Возврат текстЗапись;
КонецФункции // СоздатьДанныеCSV()
// Запишем данные в файл
Процедура ЗаписатьCSV(текст, имяФайла, кодировка)
ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла, кодировка);
ТекстовыйФайлЗапись.Записать(Текст);
ТекстовыйФайлЗапись.Закрыть();
КонецПроцедуры // ЗаписатьCSV()