Автоматизация · 11 мин
Как сформировать CSV файл в 1С
Практическое руководство по формированию CSV-файла в 1С: типовая выгрузка, запись через код, разделители, кодировки, проверка результата и типичные ошибки.
CSV — самый простой формат обмена данными между 1С и внешними системами: банковскими клиентами, сайтами, Excel, сторонними учётными программами. Файл представляет собой обычный текст, где значения разделены запятой, точкой с запятой или другим символом, а каждая строка соответствует одной записи. В 1С сформировать такой файл можно двумя путями: штатными средствами выгрузки (универсальная обработка, выгрузка табличного документа) или программно — через объекты ТекстовыйДокумент и ЗаписьТекста.
Выбор способа зависит от задачи. Если нужно разово выгрузить справочник или таблицу — достаточно типовых инструментов без программирования. Если выгрузка должна выполняться регулярно, по расписанию или с нестандартной структурой колонок — потребуется код на встроенном языке. Ниже разобраны оба подхода с конкретными действиями, проверкой результата и разбором типичных ошибок.
Что учесть перед формированием CSV
Прежде чем выгружать данные, определите три параметра: разделитель, кодировку и структуру колонок. Разделитель зависит от системы-приёмника: международный стандарт — запятая, но русскоязычный Excel по умолчанию ожидает точку с запятой, а многие банковские и обменные форматы используют табуляцию или вертикальную черту. Неверный разделитель — самая частая причина того, что файл «не открывается» или вся строка попадает в одну ячейку.
Кодировка определяет, как будут читаться кириллические символы. Современные системы работают с UTF-8, старые программы и некоторые конфигурации — с windows-1251. Если в приёмнике вместо русских букв появляются «кракозябры», проблема почти всегда в несовпадении кодировок. Уточните требования принимающей стороны до выгрузки — это сэкономит время на переделках.
Структура колонок должна быть согласована с приёмником: порядок полей, наличие строки заголовков, формат дат и чисел. Даты чаще всего передают в формате ГГГГ-ММ-ДД или ДД.ММ.ГГГГ, десятичный разделитель чисел — точка или запятая в зависимости от требований. Несогласованный формат дат приводит к тому, что данные загружаются с ошибками или отклоняются целиком.
Способ 1: выгрузка через табличный документ без программирования
Самый быстрый вариант, не требующий прав доступа разработчика. Подходит для разовой выгрузки списков: справочников, документов, отчётов. Откройте нужный список или сформируйте отчёт, выведите результат в табличный документ, затем выберите «Файл → Сохранить как» (или «Сохранить копию») и укажите тип файла CSV. Платформа запишет видимые колонки с текущим разделителем.
В конфигурациях на управляемых формах (УТ 11, ERP, Бухгалтерия 3.0) многие списки поддерживают команду «Вывести список» — она позволяет отобрать нужные колонки и строки перед выгрузкой. Отметьте только необходимые поля, снимите флажки с лишних колонок: чем меньше данных, тем проще последующая обработка файла. После сохранения откройте файл в «Блокноте» и убедитесь, что разделитель и кодировка соответствуют ожиданиям.
Ограничение способа: выгружается только то, что видно в табличном документе, без возможности задать произвольный разделитель, экранирование кавычек и порядок полей. Для обмена со строгими форматами (банки, маркетплейсы, государственные системы) этого недостаточно — нужен программный способ.
- 1Откройте список или сформируйте отчёт с нужными данными
- 2Через «Вывести список» отберите только необходимые колонки и строки
- 3Выберите «Файл → Сохранить как» и укажите тип файла CSV
- 4Откройте результат в текстовом редакторе и проверьте разделитель с кодировкой
- 5Проверьте загрузку файла в систему-приёмник на тестовом объёме
Способ 2: программное формирование через ТекстовыйДокумент
Программный способ даёт полный контроль над структурой файла. Основной объект — ТекстовыйДокумент: данные собираются построчно в цикле, затем записываются на диск с указанием кодировки. Типовой шаблон выглядит так:
Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку("Номенклатура;Артикул;Цена");
Запрос = Новый Запрос("ВЫБРАТЬ Наименование, Артикул ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строка = Выборка.Наименование + ";" + Выборка.Артикул + ";";
Текст.ДобавитьСтроку(Строка);
КонецЦикла;
Текст.Записать("C:\Обмен\выгрузка.csv", КодировкаТекста.UTF8);
Ключевые моменты кода: первая строка — заголовки колонок, если они требуются приёмнику; разделитель явно задан в конкатенации строк; метод Записать принимает параметр кодировки (КодировкаТекста.UTF8, КодировкаТекста.ANSI для windows-1251). Путь к файлу на сервере должен существовать — платформа не создаёт промежуточные каталоги автоматически.
Для больших объёмов (сотни тысяч строк) сборка строки конкатенацией работает медленно. В этом случае эффективнее объект ЗаписьТекста, который пишет данные потоково, без накопления всего документа в памяти: открывается методом Новый ЗаписьТекста(Путь, Кодировка), строки пишутся методом ЗаписатьСтроку, в конце вызывается Закрыть(). Обязательно закрывайте объект — иначе файл останется заблокированным и часть данных может не сохраниться.
Запись = Новый ЗаписьТекста("C:\Обмен\data.csv", КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку("Код;Наименование");
Запись.ЗаписатьСтроку("001;Товар 1");
Запись.Закрыть();Разделители, кавычки и экранирование данных
Главная проблема CSV — данные, содержащие сам разделитель. Если в наименовании товара есть точка с запятой, строка «развалится» на лишние колонки. Стандартное решение — заключать значения в двойные кавычки, а кавычки внутри значения удваивать. Не все приёмники поддерживают экранирование, поэтому надёжнее заранее очищать данные: заменять разделитель и переводы строк внутри полей на пробелы функцией СтрЗаменить.
Числа и даты требуют явного приведения к строке. Функция Строка() выводит число с учётом региональных настроек сеанса, что может дать запятую вместо точки. Для стабильного результата используйте Формат(Число, "ЧРД=.; ЧГ=0") — так гарантирована точка как десятичный разделитель и отключена группировка разрядов. Даты форматируйте через Формат(Дата, "ДФ=yyyy-MM-dd") или в требуемом приёмником виде.
Переводы строк внутри значений (многострочные адреса, комментарии) ломают структуру файла: одна запись распадается на несколько строк. Перед записью удаляйте символы Символы.ПС и Символы.ВК из текстовых полей. Это особенно актуально при выгрузке адресов контрагентов и описаний номенклатуры.
Проверка результата перед передачей файла
Не отправляйте файл в приёмник без проверки. Откройте его в «Блокноте» или другом текстовом редакторе: каждая строка должна содержать одинаковое количество разделителей, кириллица должна читаться, первая строка — соответствовать ожидаемым заголовкам. Затем откройте файл в Excel или LibreOffice: данные должны разложиться по колонкам без смещений.
Контрольная проверка — сопоставление количества строк. Посчитайте записи в выборке из 1С и строки в файле (минус строка заголовков): числа должны совпасть. Расхождение означает, что часть данных потерялась — чаще всего из-за переводов строк внутри полей или ошибок в цикле выгрузки. Для регламентных выгрузок полезно записывать в журнал регистрации количество выгруженных записей.
Как проверить результат
Равно числу выгруженных записей плюс строка заголовков
Строк меньше — данные потеряны из-за переводов строк в полях
Русские буквы читаются корректно
Кракозябры — кодировка файла не совпадает с ожиданиями приёмника
Данные разложены по колонкам без смещений
Всё в одном столбце — неверный разделитель
Формат соответствует требованиям приёмника
Пробелы-разделители разрядов, даты в произвольном виде
Регулярная выгрузка и обмен по расписанию
Если CSV нужен постоянно — для обмена с сайтом, банком или складской системой — оформите выгрузку как регламентное задание. Код формирования файла размещается в общем модуле с признаком «Сервер», в расписании задаётся периодичность. Файл сохраняется в сетевой каталог, доступный обеим системам, либо отправляется по FTP/почте тем же заданием.
Для надёжного обмена добавьте три вещи: уникальное имя файла с датой-временем (чтобы не затирать предыдущую выгрузку до её обработки), запись результата в журнал регистрации и обработку ошибок через Попытка...Исключение с уведомлением ответственного. Без этого сбой обмена обнаружится только тогда, когда кто-то заметит отсутствие свежих данных.
Частые вопросы
Какой разделитель выбрать для выгрузки в Excel?
Для русскоязычной версии Excel — точку с запятой: она соответствует региональным настройкам, и файл откроется сразу по колонкам. Если файл с запятой открылся одним столбцом, используйте в Excel функцию «Данные → Текст по столбцам» или импорт через «Получение данных» с указанием разделителя вручную.
Почему в файле вместо русских букв нечитаемые символы?
Кодировка файла не совпадает с той, в которой его открывает приёмник. Сохраните файл в UTF-8 с BOM для современных систем или в windows-1251 (КодировкаТекста.ANSI) для старых программ. Проверить кодировку можно, открыв файл в Notepad++ — она отображается в строке состояния.
Как выгрузить в CSV данные из нескольких связанных таблиц?
Сформируйте запрос с соединением таблиц (например, документы и их табличные части) и в цикле по выборке собирайте строки файла из полей результата. Плоская структура CSV не хранит иерархию, поэтому каждая строка файла должна содержать полный набор данных одной записи — заголовок документа придётся дублировать в каждой строке его табличной части.
Файл большой, 1С «зависает» при формировании. Что делать?
Замените ТекстовыйДокумент на ЗаписьТекста — потоковая запись не накапливает данные в памяти. Дополнительно ограничьте выборку (выгружайте пачками по периодам) и выполняйте формирование на сервере в фоновом задании, чтобы не блокировать сеанс пользователя.
Можно ли сформировать CSV без прав разработчика?
Да, если достаточно штатной выгрузки: выведите нужные данные в табличный документ через отчёт или «Вывести список» и сохраните в формате CSV. Для нестандартной структуры, особого разделителя или регулярной выгрузки без доработки конфигурации не обойтись.
Как передать в CSV значения с кавычками и переносами строк?
Надёжнее всего очистить данные перед записью: замените разделитель, символы ПС и ВК на пробелы через СтрЗаменить. Если приёмник поддерживает стандарт RFC 4180, значения можно заключить в двойные кавычки, а внутренние кавычки удвоить — но сначала убедитесь, что принимающая система это корректно разбирает.
Что важно запомнить
CSV в 1С формируется штатным сохранением табличного документа или программно через ТекстовыйДокумент и ЗаписьТекста. Заранее согласуйте с приёмником разделитель, кодировку и форматы дат и чисел, очищайте данные от разделителей и переводов строк, а результат проверяйте по количеству строк и читаемости кириллицы до передачи файла.