К статье
Практический материал

Автоматизация · 11 мин

Как сформировать CSV файл в 1С

Практическое руководство по формированию CSV-файла в 1С: типовая выгрузка, запись через код, разделители, кодировки, проверка результата и типичные ошибки.

CSV — самый простой формат обмена данными между 1С и внешними системами: банковскими клиентами, сайтами, Excel, сторонними учётными программами. Файл представляет собой обычный текст, где значения разделены запятой, точкой с запятой или другим символом, а каждая строка соответствует одной записи. В 1С сформировать такой файл можно двумя путями: штатными средствами выгрузки (универсальная обработка, выгрузка табличного документа) или программно — через объекты ТекстовыйДокумент и ЗаписьТекста.

Выбор способа зависит от задачи. Если нужно разово выгрузить справочник или таблицу — достаточно типовых инструментов без программирования. Если выгрузка должна выполняться регулярно, по расписанию или с нестандартной структурой колонок — потребуется код на встроенном языке. Ниже разобраны оба подхода с конкретными действиями, проверкой результата и разбором типичных ошибок.

Что учесть перед формированием CSV

Прежде чем выгружать данные, определите три параметра: разделитель, кодировку и структуру колонок. Разделитель зависит от системы-приёмника: международный стандарт — запятая, но русскоязычный Excel по умолчанию ожидает точку с запятой, а многие банковские и обменные форматы используют табуляцию или вертикальную черту. Неверный разделитель — самая частая причина того, что файл «не открывается» или вся строка попадает в одну ячейку.

Кодировка определяет, как будут читаться кириллические символы. Современные системы работают с UTF-8, старые программы и некоторые конфигурации — с windows-1251. Если в приёмнике вместо русских букв появляются «кракозябры», проблема почти всегда в несовпадении кодировок. Уточните требования принимающей стороны до выгрузки — это сэкономит время на переделках.

Структура колонок должна быть согласована с приёмником: порядок полей, наличие строки заголовков, формат дат и чисел. Даты чаще всего передают в формате ГГГГ-ММ-ДД или ДД.ММ.ГГГГ, десятичный разделитель чисел — точка или запятая в зависимости от требований. Несогласованный формат дат приводит к тому, что данные загружаются с ошибками или отклоняются целиком.

Способ 1: выгрузка через табличный документ без программирования

Самый быстрый вариант, не требующий прав доступа разработчика. Подходит для разовой выгрузки списков: справочников, документов, отчётов. Откройте нужный список или сформируйте отчёт, выведите результат в табличный документ, затем выберите «Файл → Сохранить как» (или «Сохранить копию») и укажите тип файла CSV. Платформа запишет видимые колонки с текущим разделителем.

В конфигурациях на управляемых формах (УТ 11, ERP, Бухгалтерия 3.0) многие списки поддерживают команду «Вывести список» — она позволяет отобрать нужные колонки и строки перед выгрузкой. Отметьте только необходимые поля, снимите флажки с лишних колонок: чем меньше данных, тем проще последующая обработка файла. После сохранения откройте файл в «Блокноте» и убедитесь, что разделитель и кодировка соответствуют ожиданиям.

Ограничение способа: выгружается только то, что видно в табличном документе, без возможности задать произвольный разделитель, экранирование кавычек и порядок полей. Для обмена со строгими форматами (банки, маркетплейсы, государственные системы) этого недостаточно — нужен программный способ.

Выгрузка через табличный документ
  1. 1
    Откройте список или сформируйте отчёт с нужными данными
  2. 2
    Через «Вывести список» отберите только необходимые колонки и строки
  3. 3
    Выберите «Файл → Сохранить как» и укажите тип файла CSV
  4. 4
    Откройте результат в текстовом редакторе и проверьте разделитель с кодировкой
  5. 5
    Проверьте загрузку файла в систему-приёмник на тестовом объёме

Способ 2: программное формирование через ТекстовыйДокумент

Программный способ даёт полный контроль над структурой файла. Основной объект — ТекстовыйДокумент: данные собираются построчно в цикле, затем записываются на диск с указанием кодировки. Типовой шаблон выглядит так:

Текст = Новый ТекстовыйДокумент;

Текст.ДобавитьСтроку("Номенклатура;Артикул;Цена");

Запрос = Новый Запрос("ВЫБРАТЬ Наименование, Артикул ИЗ Справочник.Номенклатура");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Строка = Выборка.Наименование + ";" + Выборка.Артикул + ";";

Текст.ДобавитьСтроку(Строка);

КонецЦикла;

Текст.Записать("C:\Обмен\выгрузка.csv", КодировкаТекста.UTF8);

Ключевые моменты кода: первая строка — заголовки колонок, если они требуются приёмнику; разделитель явно задан в конкатенации строк; метод Записать принимает параметр кодировки (КодировкаТекста.UTF8, КодировкаТекста.ANSI для windows-1251). Путь к файлу на сервере должен существовать — платформа не создаёт промежуточные каталоги автоматически.

Для больших объёмов (сотни тысяч строк) сборка строки конкатенацией работает медленно. В этом случае эффективнее объект ЗаписьТекста, который пишет данные потоково, без накопления всего документа в памяти: открывается методом Новый ЗаписьТекста(Путь, Кодировка), строки пишутся методом ЗаписатьСтроку, в конце вызывается Закрыть(). Обязательно закрывайте объект — иначе файл останется заблокированным и часть данных может не сохраниться.

1c
Запись = Новый ЗаписьТекста("C:\Обмен\data.csv", КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Код;Наименование");
Запись.ЗаписатьСтроку("001;Товар 1");
Запись.Закрыть();

Разделители, кавычки и экранирование данных

Главная проблема CSV — данные, содержащие сам разделитель. Если в наименовании товара есть точка с запятой, строка «развалится» на лишние колонки. Стандартное решение — заключать значения в двойные кавычки, а кавычки внутри значения удваивать. Не все приёмники поддерживают экранирование, поэтому надёжнее заранее очищать данные: заменять разделитель и переводы строк внутри полей на пробелы функцией СтрЗаменить.

Числа и даты требуют явного приведения к строке. Функция Строка() выводит число с учётом региональных настроек сеанса, что может дать запятую вместо точки. Для стабильного результата используйте Формат(Число, "ЧРД=.; ЧГ=0") — так гарантирована точка как десятичный разделитель и отключена группировка разрядов. Даты форматируйте через Формат(Дата, "ДФ=yyyy-MM-dd") или в требуемом приёмником виде.

Переводы строк внутри значений (многострочные адреса, комментарии) ломают структуру файла: одна запись распадается на несколько строк. Перед записью удаляйте символы Символы.ПС и Символы.ВК из текстовых полей. Это особенно актуально при выгрузке адресов контрагентов и описаний номенклатуры.

Типичные ошибки
01
Разделитель-запятая при выгрузке для русскоязычного Excel — файл открывается одним столбцом, нужна точка с запятой
02
Кодировка UTF-8 без BOM для старого ПО — кириллица превращается в нечитаемые символы
03
Числа выгружены с группировкой разрядов (1 234,56) — приёмник не распознаёт их как числа
04
Разделитель встречается внутри данных — строки смещаются, колонки «съезжают»
05
Не закрыт объект ЗаписьТекста — файл заблокирован или записан не полностью

Проверка результата перед передачей файла

Не отправляйте файл в приёмник без проверки. Откройте его в «Блокноте» или другом текстовом редакторе: каждая строка должна содержать одинаковое количество разделителей, кириллица должна читаться, первая строка — соответствовать ожидаемым заголовкам. Затем откройте файл в Excel или LibreOffice: данные должны разложиться по колонкам без смещений.

Контрольная проверка — сопоставление количества строк. Посчитайте записи в выборке из 1С и строки в файле (минус строка заголовков): числа должны совпасть. Расхождение означает, что часть данных потерялась — чаще всего из-за переводов строк внутри полей или ошибок в цикле выгрузки. Для регламентных выгрузок полезно записывать в журнал регистрации количество выгруженных записей.

Контрольные точки

Как проверить результат

Количество строк в файле
Норма

Равно числу выгруженных записей плюс строка заголовков

Тревожный признак

Строк меньше — данные потеряны из-за переводов строк в полях

Кириллица в текстовом редакторе
Норма

Русские буквы читаются корректно

Тревожный признак

Кракозябры — кодировка файла не совпадает с ожиданиями приёмника

Открытие в Excel
Норма

Данные разложены по колонкам без смещений

Тревожный признак

Всё в одном столбце — неверный разделитель

Числа и даты
Норма

Формат соответствует требованиям приёмника

Тревожный признак

Пробелы-разделители разрядов, даты в произвольном виде

Регулярная выгрузка и обмен по расписанию

Если CSV нужен постоянно — для обмена с сайтом, банком или складской системой — оформите выгрузку как регламентное задание. Код формирования файла размещается в общем модуле с признаком «Сервер», в расписании задаётся периодичность. Файл сохраняется в сетевой каталог, доступный обеим системам, либо отправляется по FTP/почте тем же заданием.

Для надёжного обмена добавьте три вещи: уникальное имя файла с датой-временем (чтобы не затирать предыдущую выгрузку до её обработки), запись результата в журнал регистрации и обработку ошибок через Попытка...Исключение с уведомлением ответственного. Без этого сбой обмена обнаружится только тогда, когда кто-то заметит отсутствие свежих данных.

Частые вопросы

Какой разделитель выбрать для выгрузки в Excel?

Для русскоязычной версии Excel — точку с запятой: она соответствует региональным настройкам, и файл откроется сразу по колонкам. Если файл с запятой открылся одним столбцом, используйте в Excel функцию «Данные → Текст по столбцам» или импорт через «Получение данных» с указанием разделителя вручную.

Почему в файле вместо русских букв нечитаемые символы?

Кодировка файла не совпадает с той, в которой его открывает приёмник. Сохраните файл в UTF-8 с BOM для современных систем или в windows-1251 (КодировкаТекста.ANSI) для старых программ. Проверить кодировку можно, открыв файл в Notepad++ — она отображается в строке состояния.

Как выгрузить в CSV данные из нескольких связанных таблиц?

Сформируйте запрос с соединением таблиц (например, документы и их табличные части) и в цикле по выборке собирайте строки файла из полей результата. Плоская структура CSV не хранит иерархию, поэтому каждая строка файла должна содержать полный набор данных одной записи — заголовок документа придётся дублировать в каждой строке его табличной части.

Файл большой, 1С «зависает» при формировании. Что делать?

Замените ТекстовыйДокумент на ЗаписьТекста — потоковая запись не накапливает данные в памяти. Дополнительно ограничьте выборку (выгружайте пачками по периодам) и выполняйте формирование на сервере в фоновом задании, чтобы не блокировать сеанс пользователя.

Можно ли сформировать CSV без прав разработчика?

Да, если достаточно штатной выгрузки: выведите нужные данные в табличный документ через отчёт или «Вывести список» и сохраните в формате CSV. Для нестандартной структуры, особого разделителя или регулярной выгрузки без доработки конфигурации не обойтись.

Как передать в CSV значения с кавычками и переносами строк?

Надёжнее всего очистить данные перед записью: замените разделитель, символы ПС и ВК на пробелы через СтрЗаменить. Если приёмник поддерживает стандарт RFC 4180, значения можно заключить в двойные кавычки, а внутренние кавычки удвоить — но сначала убедитесь, что принимающая система это корректно разбирает.

Итог

Что важно запомнить

CSV в 1С формируется штатным сохранением табличного документа или программно через ТекстовыйДокумент и ЗаписьТекста. Заранее согласуйте с приёмником разделитель, кодировку и форматы дат и чисел, очищайте данные от разделителей и переводов строк, а результат проверяйте по количеству строк и читаемости кириллицы до передачи файла.