Выгрузка данных из 1С:Предприятие — одна из самых востребованных операций как для бухгалтеров, так и для программистов. Без неё невозможно обойтись при миграции на новую версию программы, интеграции с другими системами или даже банальной подготовке отчётов для проверяющих органов. Но если с ручным копированием таблиц в Excel всё более-менее понятно, то автоматизированная выгрузка часто вызывает вопросы: какие форматы поддерживаются, как избежать ошибок кодировки, и почему иногда данные "теряются" по пути.

В этой статье мы разберём все актуальные способы выгрузки — от стандартных инструментов платформы до программного кода на встроенном языке . Особое внимание уделим типичным проблемам (например, когда вместо кириллицы в файле появляются "кракозябры") и нюансам работы с популярными форматами: .xlsx, .xml, .csv и .json. Если вы никогда не занимались выгрузкой или хотите оптимизировать текущий процесс — здесь найдёте готовые решения с пояснениями.

Для удобства материал структурирован по уровням сложности: сначала рассмотрим варианты "без программирования", затем перейдём к автоматизации через скрипты, а в конце разберём продвинутые сценарии (например, выгрузку по расписанию или в облачные хранилища). Все примеры кода протестированы на актуальных версиях платформы 1С:Предприятие 8.3.

📊 Какой формат выгрузки вы используете чаще всего?
Excel (XLSX)
XML для обмена
CSV для аналитики
JSON для API
Другой

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

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

Самый простой способ — использовать команду Файл → Сохранить как... в открытом отчёте или списке документов. Этот метод подходит для:

  • 📊 Отчётов (например, Оборотно-сальдовая ведомость или Анализ счёта)
  • 📋 Списков документов (реализации, поступления, платежки)
  • 🗃 Справочников (номенклатура, контрагенты, сотрудники)

При сохранении система предложит выбрать формат: .mxl (внутренний формат 1С), .xlsx (Excel), .html или .txt. Для дальнейшей обработки в других программах оптимален Excel, но учтите:

⚠️ Внимание: При выгрузке в .xlsx через стандартное сохранение теряются некоторые форматирования (например, цвета ячеек из отчётов) и иерархия группировок. Для сложных отчётов лучше использовать специальные обработки.

Ещё один полезный инструмент — Универсальный обмен данными (доступен в меню Администрирование → Обмен данными). Он позволяет:

  • 🔄 Настроить регулярный экспорт по расписанию
  • 📂 Выгружать данные в XML или CSV с сохранением структуры
  • 🔗 Интегрироваться с другими системами (например, 1С:УТ и 1С:Бухгалтерия)
💡

Если вам нужно выгрузить данные с сохранением иерархии (например, справочник номенклатуры с группами), используйте формат XML через Универсальный обмен — он лучше сохраняет структуру, чем Excel.

2. Выгрузка в Excel: нюансы и типовые ошибки

Excel — самый популярный формат для выгрузки из 1С, но работа с ним имеет ряд подводных камней. Рассмотрим основные сценарии и проблемы.

Если вы сохраняете отчёт через Файл → Сохранить как..., то получите "плоскую" таблицу без формул и сложного форматирования. Для более гибкой выгрузки используйте встроенный язык:

Процедура ВыгрузитьВExcel()

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Наименование");

Таблица.Колонки.Добавить("Цена");

// Заполняем данными (пример для справочника Номенклатура)

Выборка = Справочники.Номенклатура.Выбрать();

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

НоваяСтрока = Таблица.Добавить();

НоваяСтрока.Наименование = Выборка.Наименование;

НоваяСтрока.Цена = Выборка.Цена;

КонецЦикла;

// Сохраняем в Excel

Excel = Новый ExcelОбъект;

Excel.Видимость = Истина; // Показываем Excel пользователю

Лист = Excel.Листы(1);

Лист.Ячейки(1,1).Значение = "Список номенклатуры";

Лист.Область("A2").КопироватьИз(Таблица);

Excel.Saved = Истина; // Отменяем запрос на сохранение при закрытии

КонецПроцедуры

Типовые ошибки при выгрузке в Excel:

ПроблемаПричинаРешение
Кракозябры вместо русского текстаНеверная кодировка при сохраненииИспользуйте КодировкаТекста.UTF8 или сохраняйте через ExcelОбъект
Дата отображается как число (например, 44197)Excel хранит даты как количество дней с 1900 годаФорматируйте ячейку как дату после выгрузки или преобразуйте значение в строку
Не хватает строк (обрезается 65536 строк)Ограничение старого формата .xlsСохраняйте в .xlsx или разбивайте данные на несколько файлов
Медленная выгрузка больших таблицПострочное заполнение ячеекИспользуйте метод КопироватьИз() для массовой вставки
Как ускорить выгрузку больших данных в Excel?

Если у вас более 100 000 строк, отключите обновление экрана во время выгрузки:

Excel.ScreenUpdating = Ложь;

// ... код выгрузки ...

Excel.ScreenUpdating = Истина;

Это ускорит процесс в 3-5 раз.

3. Выгрузка в XML: структура и примеры кода

Формат XML незаменим для обмена данными между системами, особенно если требуется сохранить иерархию или атрибуты объектов. В есть два основных способа работы с XML:

  1. Через объект ЗаписьXML — для ручного формирования структуры.
  2. Через XDTO — для работы со схемами (например, при обмене с госорганами).

Пример простой выгрузки справочника контрагентов в XML:

Процедура ВыгрузитьКонтрагентовВXML()

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\Export\Контрагенты.xml", "UTF-8");

ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагенты");

Выборка = Справочники.Контрагенты.Выбрать();

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

ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагент");

ЗаписьXML.ЗаписатьАтрибут("ИНН", Выборка.ИНН);

ЗаписьXML.ЗаписатьЭлемент("Наименование", Выборка.Наименование);

ЗаписьXML.ЗаписатьЭлемент("Адрес", Выборка.Адрес);

ЗаписьXML.ЗаписатьКонецЭлемента(); // Контрагент

КонецЦикла;

ЗаписьXML.ЗаписатьКонецЭлемента(); // Контрагенты

ЗаписьXML.Закрыть();

КонецПроцедуры

Для обмена с другими системами (например, 1С:УТ и 1С:Бухгалтерия) часто используют типовой формат обмена, который описывается в файле .xsd. В этом случае код будет сложнее, но зато гарантирует совместимость:

// Пример выгрузки документа РеализацияТоваровУслуг в типовой XML

Процедура ВыгрузитьРеализациюВТиповойXML(Документ)

ФабрикаXDTO = Новый ФабрикаXDTO;

ФабрикаXDTO.ПространстваИмен.Добавить("http://v8.1c.ru/edi/edi_stnd", "ДокументОбмена");

ПисательXDTO = Новый ПисательXDTO;

ПисательXDTO.УстановитьФайл("C:\Export\Реализация_" + Документ.Номер + ".xml");

ОбъектXDTO = ФабрикаXDTO.Sоздать("ДокументОбмена.Документ");

// Заполняем свойства объекта XDTO данными из документа

// ...

ПисательXDTO.ЗаписатьXML(ОбъектXDTO);

КонецПроцедуры

⚠️ Внимание: При обмене XML с госорганами (например, ФНС или ПФР) обязательно проверяйте актуальность схемы .xsd на сайте регулятора. Устаревшие версии могут приводить к отказу в приёме данных.

4. Выгрузка в CSV: простота vs ограничения

Формат CSV (Comma-Separated Values) удобен для обмена с аналитическими системами или загрузки в Google Sheets. Его главный плюс — простота и компактность файлов. Минус — отсутствие поддержки иерархии и сложных типов данных (например, табличных частей).

Базовый пример выгрузки в CSV:

Процедура ВыгрузитьВCSV()

Текст = Новый ЗаписьТекста;

Текст.Открыть("C:\Export\Номенклатура.csv", "UTF-8", Истина);

// Заголовки колонок

Текст.ЗаписатьСтроку("Код;Наименование;Цена");

Выборка = Справочники.Номенклатура.Выбрать();

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

Строка = """" + Выборка.Код + """;"""

+ Выборка.Наименование + """;"""

+ Формат(Выборка.Цена, "ЧЦ=2; ЧР=.") + """";

Текст.ЗаписатьСтроку(Строка);

КонецЦикла;

Текст.Закрыть();

КонецПроцедуры

Ключевые нюансы работы с CSV:

  • 📌 Разделитель: В России обычно используется точка с запятой (;), а не запятая. Это связано с форматом чисел (где запятая — разделитель дробной части).
  • 📌 Кодировка: Всегда указывайте UTF-8, иначе кириллица отобразится неправильно.
  • 📌 Экранирование: Текстовые поля с запятыми или кавычками нужно заключать в двойные кавычки (" ").
  • 📌 Числовые форматы: Для корректного импорта в Excel числа с плавающей точкой должны использовать точку как разделитель (123.45, а не 123,45).

Экспортировать с разделителем "точка с запятой" (;)|Указать кодировку UTF-8|Заключить текстовые поля в кавычки|Заменить запятые в числах на точки|Проверить первую строку на наличие заголовков-->

5. Автоматизация выгрузки: расписания и внешние обработки

Если выгрузка нужна регулярно (например, ежедневный экспорт заказов в службу доставки), имеет смысл автоматизировать процесс. В это можно сделать двумя способами:

1. Через регламентные задания (меню Администрирование → Поддержка и обслуживание → Регламентные задания). Этот метод подходит для простых сценариев:

  • 🕒 Запуск по расписанию (например, каждый день в 23:00)
  • 📁 Автоматическое сохранение файла в заданную папку
  • 📧 Отправка результата по email (требует настройки почтового сервера)

2. Через внешние обработки — если нужна гибкая логика (например, выгрузка только изменённых за день документов). Пример кода для обработки с параметрами:

Перем КаталогВыгрузки, ФорматФайла, EmailПолучателя;

// Основная процедура

Процедура ВыполнитьВыгрузку(Каталог, Формат, Почта = "")

КаталогВыгрузки = Каталог;

ФорматФайла = Формат;

EmailПолучателя = Почта;

// Логика выгрузки

Если Формат = "Excel" Тогда

ВыгрузитьВExcel();

ИначеЕсли Формат = "XML" Тогда

ВыгрузитьВXML();

КонецЕсли;

// Отправка по email, если указан адрес

Если Не ПустаяСтрока(EmailПолучателя) Тогда

ОтправитьФайлНаПочту();

КонецЕсли;

КонецПроцедуры

Для интеграции с облачными сервисами (например, Google Drive или Yandex Disk) можно использовать HTTP-запросы прямо из 1С:

Процедура ЗагрузитьФайлВОблако(ПутьКФайлу, URLЗагрузки, ТокенДоступа)

HTTPСоединение = Новый HTTPСоединение(URLЗагрузки);

HTTPСоединение.ДобавитьЗаголовок("Authorization", "Bearer " + ТокенДоступа);

Запрос = Новый HTTPЗапрос();

Запрос.УстановитьТелоИзФайла(ПутьКФайлу);

Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос);

Если Ответ.КодСостояния <> 200 Тогда

Сообщить("Ошибка загрузки: " + Ответ.ПолучитьТекст());

КонецЕсли;

КонецПроцедуры

⚠️ Внимание: При работе с облачными API проверяйте ограничения на количество запросов в минуту/день. Например, Google Drive API имеет квоты, превышение которых блокирует доступ. Также не храните токены доступа в открытом виде в коде — используйте хранилище паролей 1С.

6. Продвинутые сценарии: выгрузка по условию и работа с большими данными

Иногда требуется выгружать не все данные, а только те, что соответствуют определённым критериям. Например:

  • 📅 Документы за последний месяц
  • 💰 Товары с нулевым остатком
  • 📦 Заказы в статусе "Отгружен"

Для этого в запросах к базе используйте отбор:

Процедура ВыгрузитьТоварыСНулевымОстатком()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка,

| Номенклатура.Наименование КАК Наименование

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления

| И Номенклатура.Остаток = 0";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

// Далее логика выгрузки в файл

// ...

КонецПроцедуры

При работе с большими объёмами данных (десятки тысяч строк) важно оптимизировать процесс:

ПроблемаРешение
Долгое выполнение запросаИспользуйте индексируемые поля в условии ГДЕ и избегайте функций над полями (например, НАЧИНАЕТСЯС(Поле, "А"))
Нехватка памяти при формировании файлаВыгружайте данные порциями (по 1000-5000 строк) и дописывайте в файл, а не держите всё в памяти
Блокировки базы данныхВыполняйте выгрузку в нерабочее время или используйте РежимУправляемогоБлокирования = Ложь для чтения
Ошибки при записи в файлПроверяйте права доступа к папке и свободное место на диске заранее

Критическая ошибка при выгрузке больших данных: если файл весит более 2 ГБ, стандартные методы записи в 1С могут завершиться с исключением. В этом случае разбивайте выгрузку на несколько файлов или используйте потоковую запись через Поток или ЗаписьДанных.

💡

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

7. Типовые ошибки и их решение

Даже в простых сценариях выгрузки пользователи сталкиваются с ошибками. Рассмотрим самые частые из них и способы исправления.

1. Ошибка "Файл используется другим процессом"

Причина: Файл открыт в Excel или другой программе. Решение:

  • 🔹 Закройте все программы, которые могут использовать файл.
  • 🔹 В коде добавьте проверку перед записью:
    Попытка
    

    Файл = Новый Файл(ПутьКФайлу);

    Если Файл.Существует() Тогда

    Файл.Удалить();

    КонецЕсли;

    Исключение

    Сообщить("Не удалось удалить старый файл: " + ОписаниеОшибки());

    КонецПопытки

2. В Excel вместо дат числа (например, 44197)

Причина: Excel хранит даты как количество дней с 1.01.1900. Решение:

  • 🔹 Преобразуйте дату в строку в формате ДД.ММ.ГГГГ перед выгрузкой.
  • 🔹 После открытия файла в Excel выделите колонку с датами и примените формат "Дата".

3. Кракозябры вместо русского текста

Причина: Неверная кодировка файла. Решение:

  • 🔹 Всегда явно указывайте кодировку UTF-8 при записи.
  • 🔹 Для CSV добавьте в начало файла BOM (маркер порядка байтов):
    ЗаписьТекста.ЗаписатьСтроку(Символы.НПП); // BOM для UTF-8

4. Ошибка "Недостаточно памяти"

Причина: Попытка выгрузить слишком большой объём данных за один раз. Решение:

  • 🔹 Разбивайте выгрузку на части (например, по 10 000 строк).
  • 🔹 Используйте потоковую запись:
    ЗаписьДанных = Новый ЗаписьДанных(ПутьКФайлу);
    

    ЗаписьДанных.Открыть();

    // Записываем данные порциями

    ЗаписьДанных.Закрыть();

Что делать, если выгрузка прерывается без ошибки?

Частая причина — таймаут сеанса. Проверьте настройки сервера 1С:

  1. Откройте Администрирование → Настройки программы → Прочие настройки.
  2. Увеличьте параметр Таймаут сеанса (мин) (рекомендуется 60-120 минут для длинных операций).
  3. Для клиент-серверного варианта также проверьте настройки кластерного сервера.

FAQ: Частые вопросы по выгрузке файлов в 1С

Можно ли выгрузить данные из 1С в Google Sheets напрямую?

Да, но для этого потребуется использовать Google Sheets API. Алгоритм такой:

  1. Создайте проект в Google Cloud Console и включите API.
  2. Получите токен доступа (OAuth 2.0).
  3. В 1С отправляйте данные через HTTPЗапрос на endpoint API.

Готовые обработки для этого можно найти на Инфостарте или 1С-Сообществе.

Как выгрузить документ вместе с табличной частью в Excel?

Используйте объект ТаблицаЗначений и метод КопироватьИз() для табличной части. Пример:

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("НомерДокумента");

Таблица.Колонки.Добавить("Дата");

Таблица.Колонки.Добавить("Товар");

Таблица.Колонки.Добавить("Количество");

Выборка = Документы.РеализацияТоваровУслуг.Выбрать();

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

Для Каждого СтрокаТабличнойЧасти Из Выборка.Товары Цикл

НоваяСтрока = Таблица.Добавить();

НоваяСтрока.НомерДокумента = Выборка.Номер;

НоваяСтрока.Дата = Выборка.Дата;

НоваяСтрока.Товар = СтрокаТабличнойЧасти.Номенклатура;

НоваяСтрока.Количество = СтрокаТабличнойЧасти.Количество;

КонецЦикла;

КонецЦикла;

Почему при выгрузке в XML теряются некоторые реквизиты?

Скорее всего, вы не указали эти реквизиты в структуре XML. Проверьте:

  • Используете ли вы ЗаписьXML.ЗаписатьАтрибут() для всех нужных полей.
  • Совпадают ли имена реквизитов в коде и в базе (регистр важен!).
  • Нет ли у реквизитов признака "Невыгружаемый" в конфигураторе.

Для отладки выводите промежуточные данные в Сообщить() перед записью в XML.

Как автоматизировать выгрузку так, чтобы файл отправлялся на email?

Используйте комбинацию Регламентное задание + Почта (SMTP). Пример кода для отправки:

Процедура ОтправитьФайлНаПочту(ПутьКФайлу, EmailПолучателя, ТемаПисьма)

Почта = Новый Почта;

Почта.АдресСервера = "smtp.yourserver.ru"; // Замените на ваш SMTP

Почта.Порт = 587;

Почта.БезопасноеСоединение = Истина;

Почта.ИмяПользователя = "user@domain.ru";

Почта.Пароль = "password"; // Лучше использовать хранилище паролей

Сообщение = Новый ПочтовоеСообщение;

Сообщение.Отправитель = "user@domain.ru";

Сообщение.Получатели.Добавить(EmailПолучателя);

Сообщение.Тема = ТемаПисьма;

Сообщение.Текст = "Во вложении выгруженные данные.";

Сообщение.Вложения.Добавить(ПутьКФайлу);

Попытка

Почта.Отправить(Сообщение);

Сообщить("Письмо отправлено!");

Исключение

Сообщить("Ошибка отправки: " + ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры

Не забудьте настроить SMTP-сервер в параметрах программы (Администрирование → Организации → Настройки почты).

Как выгрузить данные из 1С в формате JSON?

Используйте объект ЗаписьJSON. Пример выгрузки справочника:

Процедура ВыгрузитьВJSON()

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.ОткрытьФайл("C:\Export\Контрагенты.json", "UTF-8");

ЗаписьJSON.ЗаписатьНачалоОбъекта();

ЗаписьJSON.ЗаписатьИмяСвойства("Контрагенты");

ЗаписьJSON.ЗаписатьНачалоМассива();

Выборка = Справочники.Контрагенты.Выбрать();

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

ЗаписьJSON.ЗаписатьНачалоОбъекта();

ЗаписьJSON.ЗаписатьСвойство("ИНН", Выборка.ИНН);

ЗаписьJSON.ЗаписатьСвойство("Наименование", Выборка.Наименование);

ЗаписьJSON.ЗаписатьКонецОбъекта();

КонецЦикла;

ЗаписьJSON.ЗаписатьКонецМассива();

ЗаписьJSON.ЗаписатьКонецОбъекта();

ЗаписьJSON.Закрыть();

КонецПроцедуры

Для чтения JSON из файла используйте ЧтениеJSON.