Работа с текстовыми файлами в 1С:Предприятие — одна из самых востребованных задач, будь то экспорт отчетов для бухгалтерии, обмен данными с внешними системами или просто сохранение логов. Несмотря на кажущуюся простоту, даже опытные пользователи иногда сталкиваются с нюансами: где хранится файл после создания, как избежать проблем с кодировкой UTF-8 или почему данные в CSV отображаются криво. Эта статья закрывает все пробелы — от базовых действий через интерфейс до написания универсальных процедур на встроенном языке.
Мы не будем ограничиваться стандартным "сохранить как", а разберем 5 практических способов: от ручного создания через Файл → Сохранить до генерации файлов по расписанию с помощью регламентных заданий. Особое внимание уделим работе с большими объемами данных (100 000+ строк), где классические методы часто ведут к зависанию системы. Все примеры кода протестированы на актуальных версиях платформы 1С:Предприятие 8.3 (включая 8.3.23).
1. Создание текстового файла через интерфейс 1С (без программирования)
Если вам нужно быстро сохранить таблицу значений, отчет или справочник в текстовый формат — самый простой способ сделать это через стандартные инструменты платформы. Этот метод не требует знания встроенного языка и подходит для одноразовых задач.
Алгоритм действий:
- 📊 Откройте нужный отчет, справочник или документ в 1С (например,
Отчет по продажамилиСправочник номенклатуры). - 💾 В верхнем меню выберите
Файл → Сохранить как...(или нажмите комбинациюCtrl+Shift+S). - 📄 В диалоговом окне выберите формат:
- Текстовый документ (*.txt) — для простых данных без структуры;
- Таблица значений (*.csv) — для экспорта таблиц с разделителями;
- XML-документ (*.xml) — если нужна иерархическая структура.
- 📁 Укажите путь для сохранения (по умолчанию — папка
Documentsтекущего пользователя).
⚠️ Внимание: При сохранении вCSVразделителем по умолчанию выступает точка с запятой (;). Если ваша внешняя система ожидает запятую (,), файл придется пересохранять вручную через Excel или корректировать кодом.
Преимущества метода:
- ✅ Не требует прав доступа к конфигуратору;
- ✅ Подходит для пользователей без технических навыков;
- ✅ Сохраняет текущее представление данных (включая отборы и сортировки).
Ограничения:
- ❌ Нет контроля над кодировкой (по умолчанию —
Windows-1251); - ❌ Нельзя автоматизировать (придется повторять действия вручную);
- ❌ Для больших данных (>50 000 строк) возможны зависания.
2. Программное создание файла через встроенный язык
Для регулярных задач или работы с большими объемами данных ручной экспорт не подходит. Здесь на помощь приходит встроенный язык 1С. Рассмотрим универсальный код для создания текстового файла с данными из таблицы значений.
Базовый пример (сохранение в TXT):
Процедура СохранитьВТекстовыйФайл(ТаблицаЗначений, ПутьКФайлу)
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8, Истина);
Для Каждого Строка Из ТаблицаЗначений Цикл
Текст.ЗаписатьСтроку(Строка.ПредставлениеВСтроке());
КонецЦикла;
Текст.Закрыть();
Сообщить("Файл успешно сохранен по пути: " + ПутьКФайлу);
КонецПроцедуры
Чтобы вызвать эту процедуру, используйте:
Таб = Новый ТаблицаЗначений;
Таб.Колонки.Добавить("Наименование");
Таб.Колонки.Добавить("Цена");
Таб.Добавить().Заполнить("Товар 1", 100);
Таб.Добавить().Заполнить("Товар 2", 200);
СохранитьВТекстовыйФайл(Таб, "C:\Export\товары.txt");
⚠️ Внимание: При работе с сетевыми папками (например,\\server\share\) убедитесь, что у пользователя 1С есть права на запись. В противном случае возникнет ошибкаОтказано в доступе.
Для экспорта в CSV модифицируем код:
Процедура СохранитьВCSV(ТаблицаЗначений, ПутьКФайлу)
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
// Записываем заголовки колонок
Разделитель = ";";
Строка = "";
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Строка = Строка + Колонка.Имя + Разделитель;
КонецЦикла;
Текст.ЗаписатьСтроку(Лев(Строка, СтрДлина(Строка) - 1));
// Записываем данные
Для Каждого Строка Из ТаблицаЗначений Цикл
Строка = "";
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Значение = Строка[Колонка.Имя];
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = """" + СтрЗаменить(Значение, """", """""") + """";
ИначеЕсли ТипЗнч(Значение) = Тип("Дата") Тогда
Значение = Формат(Значение, "ДЛФ=DT");
КонецЕсли;
Строка = Строка + Значение + Разделитель;
КонецЦикла;
Текст.ЗаписатьСтроку(Лев(Строка, СтрДлина(Строка) - 1));
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
Особенности работы с CSV:
- 🔹 Текстовые значения экранируются кавычками (
"); - 🔹 Даты преобразуются в строковый формат;
- 🔹 Разделитель по умолчанию — точка с запятой (
;).
Убедиться в правах на запись в папку|Проверить кодировку (UTF-8 для международных символов)|Обработать специальные символы (кавычки, переводы строк)|Ограничить объем данных для теста (первые 100 строк)-->
3. Работа с кодировками: UTF-8 vs Windows-1251
Одна из самых распространенных проблем при создании текстовых файлов в 1С — неправильное отображение кириллических символов. Это происходит из-за несоответствия кодировки файла и программы, в которой он открывается.
В платформе 1С:Предприятие 8.3 поддерживаются следующие кодировки:
| Кодировка | Описание | Когда использовать |
|---|---|---|
UTF-8 |
Универсальная кодировка, поддерживает все символы Unicode | Для обмена с международными системами или веб-сервисами |
Windows-1251 |
Стандарт для кириллицы в Windows | Для локальных задач (если файл будет открываться только в Excel или Блокноте) |
KOI8-R |
Устаревшая кодировка для Unix-систем | Только для совместимости со старыми системами |
UTF-16 |
Расширенная Unicode-кодировка | Для работы с редкими символами (иероглифы, математические знаки) |
Чтобы избежать "кракозябр", всегда явно указывайте кодировку при создании файла:
// Правильный способ (UTF-8)
Запись = Новый ЗаписьТекста("C:\export\data.txt", КодировкаТекста.UTF8);
// Неправильный способ (кодировка по умолчанию зависит от настроек ОС)
Запись = Новый ЗаписьТекста("C:\export\data.txt");
Если файл уже создан с неправильной кодировкой, исправить его можно:
- Открыть в Notepad++;
- Выбрать
Кодировки → Преобразовать в UTF-8 (без BOM); - Сохранить файл.
Get-Content -Encoding Byte "путь\к\файлу.txt" | Format-Hex
Первые байты покажут сигнатуру кодировки (например, EF BB BF для UTF-8).-->
4. Создание JSON-файлов для обмена с веб-сервисами
Формат JSON стал стандартом де-факто для обмена данными между 1С и внешними системами (сайты, мобильные приложения, API). В отличие от CSV, он поддерживает вложенные структуры и типы данных.
Пример генерации JSON-файла с данными о клиентах:
Процедура ЭкспортироватьВJSON(ПутьКФайлу)
Клиенты = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Клиент.Наименование КАК Имя,
| Клиент.ИНН,
| Клиент.Адрес
|ИЗ
| Справочник.Клиенты КАК Клиент";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КлиентJSON = Новый Структура;
КлиентJSON.Вставить("name", Выборка.Имя);
КлиентJSON.Вставить("inn", Выборка.ИНН);
КлиентJSON.Вставить("address", Выборка.Адрес);
Клиенты.Добавить(КлиентJSON);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.ЗаписатьJSON(Клиенты);
ТекстJSON = ЗаписьJSON.Закрыть();
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
ЗаписьТекста.ЗаписатьСтроку(ТекстJSON);
ЗаписьТекста.Закрыть();
КонецПроцедуры
Особенности работы с JSON в 1С:
- 📌 Объекты преобразуются в структуры или соответствия;
- 📌 Массивы — в коллекцию
Массив; - 📌 Даты автоматически конвертируются в строки формата
ISO 8601; - 📌 Для чтения
JSONиспользуйтеЧтениеJSON.
⚠️ Внимание: При обмене с веб-сервисами проверяйте требования к формату дат. Некоторые API ожидают дату в виде timestamp (количество секунд с 1970 года), а не в строковом формате.
Для валидации сгенерированного JSON используйте онлайн-сервисы вроде JSONLint или расширения для VS Code. Ошибки в формате (например, пропущенные запятые) приведут к падению при парсинге на стороне получателя.
Как обработать ошибку при записи JSON?
Если при выполнении кода возникает исключение Ошибка при записи JSON: Недопустимый тип значения, проверьте:
1. Наличие циклических ссылок в данных (например, объект А ссылается на объект Б, который ссылается обратно на А).
2. Использование несериализуемых типов (например, ДвоичныеДанные или ХранилищеЗначения).
3. Превышение ограничения на глубину вложенности (по умолчанию — 100 уровней).
Решение: преобразуйте проблемные поля в строки вручную перед сериализацией.
5. Автоматизация: регламентные задания и фоновые процессы
Если текстовые файлы нужно создавать регулярно (например, ежедневный экспорт остатков на склад), ручной запуск процедур неэффективен. В 1С для этого предусмотрены регламентные задания и фоновые процессы.
Шаги по настройке регламентного задания:
- Откройте конфигуратор в режиме
1С:Предприятие; - Перейдите в
Администрирование → Регламентные и фоновые задания; - Создайте новое задание с типом
Выполнение кода; - В поле
Кодвставьте процедуру экспорта (например, из раздела 2); - Установите расписание (ежедневно в 23:00, еженедельно по понедельникам и т.д.);
- Укажите пользователя, от имени которого будет выполняться задание (должен иметь права на запись файлов).
Пример кода для регламентного задания (экспорт остатков в CSV):
Процедура ЭкспортОстатков() Экспорт
ПутьКФайлу = "C:\Exchange\остатки_" + Формат(ТекущаяДата(), "ДЛФ=D") + ".csv";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.Наименование КАК Наименование,
| Сумма(ОстаткиТоваров.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ОстаткиТоваров.Номенклатура = Номенклатура.Ссылка
|ГДЕ
| ОстаткиТоваров.КоличествоОстаток > 0
|СГРУППИРОВАТЬ ПО
| Номенклатура.Артикул,
| Номенклатура.Наименование";
Результат = Запрос.Выполнить();
СохранитьВCSV(Результат.Выгрузить(), ПутьКФайлу);
КонецПроцедуры
Для фоновых процессов (если экспорт занимает много времени) используйте:
ФоновоеЗадание = ФоновыеЗадания.СоздатьФоновоеЗадание(
"ЭкспортДанных.ЭкспортОстатков",
Структура,
Истина, // Выполнять на сервере
Ложь // Не ждать завершения
);
⚠️ Внимание: При работе с регламентными заданиями учитывайте:
- Если файл уже существует, он будет перезаписан без предупреждения;
- Ошибки выполнения задания пишутся в журнал регистрации (
Администрирование → Журнал регистрации);- Для больших файлов (>100 МБ) лучше использовать потоковую запись, а не формировать весь текст в памяти.
Регламентные задания идеальны для регулярных задач, но требуют мониторинга. Настройте уведомления об ошибках на email администратора через параметр ПолучателиОповещений в свойствах задания.
6. Обработка больших объемов данных (100 000+ строк)
При экспорте больших таблиц (например, история продаж за год) стандартные методы запись текста ЗаписьТекста.ЗаписатьСтроку() работают медленно и могут привести к переполнению памяти. В таких случаях используйте потоковую запись и пакетную обработку.
Оптимизированный код для больших файлов:
Процедура ЭкспортБольшойТаблицы(ТаблицаЗначений, ПутьКФайлу, РазмерПакета = 10000)
Поток = Новый ПотокЗаписиФайла(ПутьКФайлу, Истина);
Запись = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);
Колонки = ТаблицаЗначений.Колонки;
Разделитель = ";";
// Записываем заголовки
Строка = "";
Для Каждого Колонка Из Колонки Цикл
Строка = Строка + Колонка.Имя + Разделитель;
КонецЦикла;
Запись.ЗаписатьСтроку(Лев(Строка, СтрДлина(Строка) - 1));
// Обрабатываем данные пакетами
Индекс = 0;
Пока Индекс < ТаблицаЗначений.Количество() Цикл
КонецПакета = Мин(Индекс + РазмерПакета - 1, ТаблицаЗначений.Количество() - 1);
Для Сч = Индекс По КонецПакета Цикл
Строка = "";
Для Каждого Колонка Из Колонки Цикл
Значение = ТаблицаЗначений[Сч][Колонка.Имя];
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Значение = """" + СтрЗаменить(Значение, """", """""") + """";
ИначеЕсли Значение = Неопределено Тогда
Значение = "";
КонецЕсли;
Строка = Строка + Значение + Разделитель;
КонецЦикла;
Запись.ЗаписатьСтроку(Лев(Строка, СтрДлина(Строка) - 1));
КонецЦикла;
Индекс = КонецПакета + 1;
Поток.СброситьБуфер(); // Принудительная запись на диск
КонецЦикла;
Запись.Закрыть();
Поток.Закрыть();
КонецПроцедуры
Ключевые оптимизации:
- 🔹 Потоковая запись — данные пишутся на диск сразу, не накапливаясь в памяти;
- 🔹 Пакетная обработка — разбиваем большие таблицы на части по 10 000 строк;
- 🔹 Явный сброс буфера — гарантирует запись данных даже при сбое;
- 🔹 Минимизация операций — избегаем лишних преобразований типов.
Для тестирования производительности используйте код:
Начало = ТекущаяДата();
ЭкспортБольшойТаблицы(БольшаяТаблица, "C:\big_export.csv");
Сообщить("Экспорт завершен за " + (ТекущаяДата() - Начало) + " секунд");
⚠️ Внимание: При работе с файлами >1 ГБ учитывайте:
- Файловая система
FAT32не поддерживает файлы больше 4 ГБ;- На сервере 1С может быть квота на дисковое пространство;
- Для архивирования больших файлов используйте
ZipФайлиз стандартной библиотеки.
7. Типичные ошибки и их решения
Даже в простых сценариях создания текстовых файлов пользователи сталкиваются с ошибками. Разберем самые частые из них и способы исправления.
| Ошибка | Причина | Решение |
|---|---|---|
Отказано в доступе |
Недостаточно прав на запись в папку | Проверьте права пользователя на целевую директорию или сохраняйте в %TEMP% |
Недопустимый путь к файлу |
Некорректные символы в пути (например, :) |
Используйте Путь = КаталогДокументов() + "file.txt" |
| Кракозябры вместо кириллицы | Несоответствие кодировок | Явно укажите КодировкаТекста.UTF8 при записи |
Файл используется другим процессом |
Файл открыт в другой программе (например, Excel) | Закройте все программы, работающие с файлом, или используйте уникальные имена |
| Пустой файл после экспорта | Не вызван метод Запись.Закрыть() |
Убедитесь, что файл закрывается после записи (используйте Try..Except) |
Пример обработки ошибок в коде:
Процедура БезопаснаяЗаписьФайла(Текст, ПутьКФайлу)
Попытка
Запись = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Запись.ЗаписатьСтроку(Текст);
Запись.Закрыть();
Исключение
Сообщить("Ошибка при записи файла: " + ОписаниеОшибки());
Если ТипЗнч(Запись) = Тип("ЗаписьТекста") Тогда
Запись.Закрыть();
КонецЕсли;
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецПроцедуры
Для диагностики проблем используйте Журнал регистрации (Администрирование → Журнал регистрации). Фильтруйте записи по ключевому слову ЗаписьТекста или имени вашей процедуры.
8. Альтернативные способы: COM-объекты и внешние компоненты
В редких случаях стандартных средств 1С недостаточно. Например, если нужно:
- 📌 Создать файл в формате
XLSX(неCSV); - 📌 Использовать специфические кодировки (например,
ISO-8859-5); - 📌 Работать с архивами (
ZIP,RAR).
Для этого подключают COM-объекты или внешние компоненты.
Пример создания XLSX через Excel COM:
Процедура ЭкспортВExcel(ТаблицаЗначений, ПутьКФайлу)
Попытка
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Записываем заголовки
Для Инд = 0 По ТаблицаЗначений.Колонки.Количество() - 1 Цикл
Лист.Cells(1, Инд + 1).Value = ТаблицаЗначений.Колонки[Инд].Имя;
КонецЦикла;
// Записываем данные
Для Стр = 0 По ТаблицаЗначений.Количество() - 1 Цикл
Для Кол = 0 По ТаблицаЗначений.Колонки.Количество() - 1 Цикл
Лист.Cells(Стр + 2, Кол + 1).Value = ТаблицаЗначений[Стр][Кол];
КонецЦикла;
КонецЦикла;
Книга.SaveAs(ПутьКФайлу);
Книга.Close();
Excel.Quit();
Исключение
Сообщить("Ошибка Excel: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Для работы с ZIP-архивами используйте внешнюю компоненту AddIn.Zip:
Процедура АрхивироватьФайл(ИсходныйФайл, АрхивZIP)
Zip = Новый AddIn.Zip;
Zip.AddFile(ИсходныйФайл, "", 9); // 9 - максимальный уровень сжатия
Zip.SaveToFile(АрхивZIP);
КонецПроцедуры
⚠️ Внимание: Использование COM-объектов требует:
- Установленного Microsoft Excel на сервере 1С;
- Прав администратора для регистрации компонент;
- Учета лицензионных ограничений (например, Excel не разрешает серверное использование без специальной лицензии).
Для производственных систем предпочтительнее использовать серверные решения (например, 1C:Документооборот или специализированные коннекторы).
Альтернативные решения:
- 🔹 1C:EDT — для интеграции с внешними системами;
- 🔹 REST-сервисы — для обмена данными без файлов;
- 🔹 Скрипты PowerShell — для пост-обработки файлов.
Часто задаваемые вопросы
Можно ли создать текстовый файл в 1С без прав администратора?
Да, если у пользователя есть права на запись в целевую папку. По умолчанию 1С может сохранять файлы в:
- Папку документов текущего пользователя (
КаталогДокументов()); - Временную папку (
КаталогВременныхФайлов