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

Разработка и Конфигурация · 10 мин

Как сохранить таблицу значений в файл в 1С 8.3

Способы сохранения таблицы значений в файл в 1С 8.3: ЗначениеВФайл, XML, CSV, табличный документ. Примеры кода, ошибки и проверка результата.

Таблица значений в 1С 8.3 — это объект в памяти, который исчезает после завершения сеанса или процедуры. Чтобы передать данные между базами, отладить обработку или выгрузить результат пользователю, таблицу нужно сохранить в файл. Встроенный язык предлагает несколько способов: сериализацию через ЗначениеВФайл, запись в XML и JSON, выгрузку в табличный документ (MXL, Excel) и формирование CSV вручную.

Выбор способа зависит от того, кто будет читать файл. Если это другая база 1С — удобнее всего внутренний формат или XML. Если бухгалтер или аналитик — нужен Excel или CSV. Если внешняя система — JSON или XML по согласованной схеме.

Ниже разобраны рабочие примеры кода для каждого варианта, ограничения платформы, типичные ошибки и способы проверить, что файл записался корректно.

Выбор формата файла под задачу

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

Сравнение вариантов

ЗначениеВФайл (внутренний формат)

Подходит для обмена между базами 1С и отладки. Ограничение: файл читается только платформой 1С.

XML / JSON

Подходит для интеграции с внешними системами и обмена между базами. Требует описания структуры записи.

Табличный документ (MXL, XLSX)

Подходит для выгрузки пользователю. Ограничение: типы данных теряются, всё становится текстом или числами представления.

CSV через ТекстовыйДокумент

Подходит для простых выгрузок в Excel и сторонние программы. Требует ручной обработки разделителей и кавычек.

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

Сохранение через ЗначениеВФайл

Самый простой способ сохранить таблицу значений «как есть» — метод ЗначениеВФайл(ИмяФайла, ТаблицаЗначений). Платформа сериализует объект во внутренний формат, и позже его можно полностью восстановить методом ЗначениеИзФайла() с сохранением всех типов колонок.

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

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

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

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

НоваяСтрока.Номенклатура = "Товар 1";

НоваяСтрока.Количество = 10;

ЗначениеВФайл("C:\Temp\Таблица.dat", ТЗ);

Чтение выполняется зеркально: ТЗ = ЗначениеИзФайла("C:\Temp\Таблица.dat"). Типы колонок, включая ссылки на справочники, восстанавливаются полностью — но ссылки будут корректны только в той же базе, где файл создавался.

Метод удобен для отладки: сохранили промежуточную таблицу в файл, а потом загрузили её в тестовой обработке и продолжили эксперименты без повторного выполнения тяжёлого запроса.

Выгрузка в табличный документ (Excel, MXL)

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

ТабДок = Новый ТабличныйДокумент;

// Шапка

НомерКолонки = 0;

Для Каждого Колонка Из ТЗ.Колонки Цикл

НомерКолонки = НомерКолонки + 1;

Область = ТабДок.Область(1, НомерКолонки);

Область.Текст = Колонка.Имя;

КонецЦикла;

// Данные

НомерСтроки = 1;

Для Каждого СтрокаТЗ Из ТЗ Цикл

НомерСтроки = НомерСтроки + 1;

НомерКолонки = 0;

Для Каждого Колонка Из ТЗ.Колонки Цикл

НомерКолонки = НомерКолонки + 1;

Область = ТабДок.Область(НомерСтроки, НомерКолонки);

Область.Текст = Строка(СтрокаТЗ[Колонка.Имя]);

КонецЦикла;

КонецЦикла;

ТабДок.Записать("C:\Temp\Выгрузка.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Метод Записать() табличного документа поддерживает форматы MXL, XLSX, ODS, HTML, PDF и другие. Для Excel используйте ТипФайлаТабличногоДокумента.XLSX — файл откроется без установленного Excel на компьютере, где выполнялся код.

Учтите: все значения записываются как представления. Если в колонке лежит ссылка на справочник, в файл попадёт её наименование. Если нужна точная идентификация — выводите дополнительную колонку с кодом или GUID.

Сохранение в CSV

CSV — универсальный текстовый формат для обмена с Excel и сторонними программами. Встроенного метода записи таблицы значений в CSV нет, поэтому файл формируют через ТекстовыйДокумент или ЗаписьТекста.

Запись = Новый ЗаписьТекста("C:\Temp\export.csv", КодировкаТекста.UTF8);

// Заголовок

ИменаКолонок = Новый Массив;

Для Каждого Колонка Из ТЗ.Колонки Цикл

ИменаКолонок.Добавить(Колонка.Имя);

КонецЦикла;

Запись.ЗаписатьСтроку(СтрСоединить(ИменаКолонок, ";"));

// Данные

Для Каждого СтрокаТЗ Из ТЗ Цикл

Значения = Новый Массив;

Для Каждого Колонка Из ТЗ.Колонки Цикл

Значения.Добавить(Строка(СтрокаТЗ[Колонка.Имя]));

КонецЦикла;

Запись.ЗаписатьСтроку(СтрСоединить(Значения, ";"));

КонецЦикла;

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

Разделитель «;» выбран не случайно: русская локаль Excel по умолчанию ожидает точку с запятой, а не запятую. Если значения могут содержать разделитель или кавычки, их нужно обрамлять кавычками и удваивать внутренние кавычки — иначе структура строки «поедет».

Excel часто открывает CSV в кодировке ANSI и показывает «кракозябры» вместо кириллицы. Записывайте файл в UTF-8 с BOM: ЗаписьТекста поддерживает параметр записи BOM, либо используйте КодировкаТекста.UTF8 и предупредите пользователей открывать файл через «Данные → Из текста».
ПЗ
Практическое замечание

Сохранение в XML и JSON

Для интеграций используют ЗаписьXML и ЗаписьJSON. Эти объекты дают полный контроль над структурой файла: имена узлов, вложенность, формат значений.

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

Запись.ОткрытьФайл("C:\Temp\table.json");

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

Для Каждого СтрокаТЗ Из ТЗ Цикл

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

Для Каждого Колонка Из ТЗ.Колонки Цикл

Запись.ЗаписатьИмяСвойства(Колонка.Имя);

Запись.ЗаписатьЗначение(Строка(СтрокаТЗ[Колонка.Имя]));

КонецЦикла;

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

КонецЦикла;

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

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

Для XML логика аналогична: ЗаписатьНачалоЭлемента(), ЗаписатьАтрибут(), ЗаписатьТекст(), ЗаписатьКонецЭлемента(). Также доступна сериализация через СериализаторXDTO, который умеет записывать таблицу значений в XML одним вызовом ЗаписатьXML() — но полученный файл будет содержать служебные типы платформы и пригоден в первую очередь для чтения обратно в 1С.

Даты в JSON и XML записывайте в формате ISO (например, через Формат(Дата, "ДФ=yyyy-MM-dd")), иначе принимающая система может не распознать значение.

Проверка результата и типичные ошибки

После записи файла убедитесь, что он действительно создан и читается. Минимальная проверка — существование файла и его ненулевой размер, для табличных форматов — открытие файла и сверка количества строк.

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

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

Файл существует после записи
Норма

Файл.Существует() возвращает Истина, размер больше нуля

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

Файла нет — проверьте путь, права и то, на клиенте или сервере выполнялся код

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

Число строк данных совпадает с ТЗ.Количество()

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

Строк меньше — возможно, цикл прервался или часть данных содержала недопустимые символы

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

Кириллица отображается корректно при открытии

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

Кракозябры — неверная кодировка или отсутствует BOM

Типичные ошибки
01
Запись на локальный диск из серверного кода — файл создаётся на сервере, пользователь его не видит
02
Отсутствие каталога назначения — метод записи вызывает исключение; создавайте каталог через СоздатьКаталог() заранее
03
Запятая как разделитель CSV для русской локали Excel — данные слипаются в один столбец
04
Выгрузка ссылок в Excel без строкового представления — пользователь получает пустые или непонятные значения
05
Незакрытый объект ЗаписьТекста/ЗаписьXML — файл остаётся пустым или заблокированным до конца сеанса

Отдельная группа проблем — права доступа. Учётная запись, под которой работает сервер 1С (обычно USR1CV8), должна иметь право записи в целевой каталог. При ошибке «Ошибка доступа к файлу» первым делом проверяйте права каталога и корректность пути.

Порядок действий
  1. 1
    Определите потребителя файла: 1С, пользователь или внешняя система
  2. 2
    Выберите формат: внутренний, XLSX, CSV, XML или JSON
  3. 3
    Убедитесь, что каталог назначения существует и доступен для записи
  4. 4
    Выполните запись с учётом места исполнения кода (клиент/сервер)
  5. 5
    Проверьте существование файла, его размер и корректность содержимого

Часто задаваемые вопросы

Можно ли сохранить таблицу значений в файл без диалога выбора у пользователя?

Да, если путь известен заранее и код выполняется там, где этот путь доступен. На тонком клиенте прямой доступ к файловой системе ограничен — используйте расширение работы с файлами или передавайте данные через временное хранилище с сервера.

Как сохранить таблицу значений в Excel на сервере без установленного Excel?

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

Почему после ЗначениеИзФайла ссылки в таблице «битые»?

Файл загружен в другую базу, где этих объектов нет или у них другие внутренние идентификаторы. Для межбазового обмена сохраняйте не сами ссылки, а их GUID или коды, а при загрузке восстанавливайте ссылки поиском.

Какой формат выбрать для большой таблицы в сотни тысяч строк?

Табличный документ на больших объёмах потребляет много памяти. Для крупных выгрузок используйте потоковую запись в CSV или XML через ЗаписьТекста/ЗаписьXML — данные пишутся построчно без накопления в памяти.

Как передать сохранённый на сервере файл пользователю в управляемом приложении?

Сформируйте файл на сервере, поместите его двоичные данные во временное хранилище функцией ПоместитьВоВременноеХранилище(), верните адрес на клиент и сохраните файл методом ПолучитьФайл() или через НачатьПолучениеФайлов() с диалогом выбора пути.

Итог

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

Способ сохранения таблицы значений выбирается под потребителя файла: ЗначениеВФайл — для 1С, табличный документ — для пользователя, CSV/XML/JSON — для внешних систем. Всегда учитывайте место выполнения кода, проверяйте каталог и права записи, а результат контролируйте по существованию файла и числу строк.