CSV-файл и 1С 8.3: чем прочитать таблицу и как загрузить её в базу

· 10 мин

Содержание

Открыть CSV в 1С 8.3 «как таблицу» через Файл → Открыть не получится: табличный документ платформы читает форматы MXL, XLS, XLSX и ODS, а CSV для него просто текст. Рабочих путей три: загрузить файл командой «Загрузить» прямо в списке справочника или в табличной части документа, перегнать CSV в XLSX и открыть уже его, либо прочитать файл кодом на встроенном языке.

Почти все проблемы с CSV в 1С сводятся к трём параметрам: кодировка (UTF-8 или Windows-1251), разделитель (; или ,) и формат чисел и дат. Выставите их правильно — и импорт CSV пройдёт без «кракозябр» и съехавших колонок. Механизм общий для платформы, поэтому всё ниже работает в Бухгалтерии 3.0, УТ 11, ЗУП 3.1 и других типовых конфигурациях на 8.3.

Что внутри CSV и почему 1С читает его не так, как Excel

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

Пример файла с номенклатурой:

Артикул;Наименование;Цена;Единица
00125;"Болт М8х40, оцинк.";12,50;шт
00126;"Гайка ""М8"" DIN 934";3,10;шт

На этих трёх строках видны все подводные камни:

  • 🔢 Ведущие нули. 00125 — это строка. Excel превратит её в число 125, и сопоставление по артикулу в 1С сломается.
  • ✂️ Разделитель внутри значения. Запятая в «Болт М8х40, оцинк.» безопасна, только пока разделитель — точка с запятой. При разделителе-запятой такое поле обязано быть в кавычках.
  • 🔁 Экранированные кавычки. Кавычка внутри значения удваивается: ""М8"". Простое деление строки по ; тут ошибётся.
  • 💱 Десятичная запятая. 12,50 в русской локали — число, в английской — две колонки или текст.

Откройте CSV в Блокноте или Notepad++ перед любой загрузкой. За десять секунд вы увидите реальный разделитель, наличие кавычек и примерную кодировку: если русские буквы читаются, а в Excel нет — дело именно в кодировке.

Кодировки, с которыми вы встретитесь

КодировкаОткуда обычно приходитКак распознать
UTF-8 с BOMвыгрузки маркетплейсов, банков, современных сервисовв Notepad++ внизу «UTF-8-BOM»
UTF-8 без BOMвеб-сервисы, Linux-системы, скриптыExcel по умолчанию показывает «Ð¢Ð¾Ð²Ð°Ñ€»
Windows-1251старые учётные программы, Excel «CSV (разделители — запятые)»в UTF-8-редакторе видны «ромбики»

Загрузка CSV командой «Загрузить» в типовых конфигурациях

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

Где её найти:

  • 📦 Справочники. Например, Справочники → Номенклатура или Справочники → Контрагенты: кнопка «Загрузить» в командной панели списка. В части релизов она спрятана в меню «Ещё».
  • 📄 Табличные части документов. В поступлении товаров, реализации, заказах над табличной частью «Товары» есть такая же кнопка «Загрузить».

Порядок загрузки CSV в справочник

  1. Откройте список справочника и нажмите «Загрузить».
  2. Программа покажет пустой шаблон таблицы с колонками, которые она умеет принимать. Колонки можно заполнить вставкой из буфера или загрузить файлом.
  3. Выберите загрузку из файла и укажите ваш CSV. В диалоге выбора поставьте тип файлов «Все файлы», если CSV не виден в списке.
  4. Проверьте, что данные легли в нужные колонки. Если всё уехало в первую колонку — разделитель не тот (см. раздел про ошибки).
  5. На шаге сопоставления программа ищет существующие элементы — по наименованию, артикулу, ИНН. Посмотрите, что найдено, а что будет создано заново.
  6. Нажмите «Загрузить» и проверьте результат на 2–3 элементах.

Загрузка в справочник создаёт новые элементы для всего, что не удалось сопоставить. Сначала прогоните файл на копии базы или на 5–10 строках, иначе после ошибки с кодировкой придётся вручную помечать на удаление сотни «Ð¢Ð¾Ð²Ð°Ñ€».

Когда встроенной загрузки не хватает

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

Перевод CSV в XLSX: кодировка и разделители под контролем

Если загрузчик спотыкается или файл нужно сначала почистить, самый надёжный приём — открыть CSV в Excel или LibreOffice Calc с явной настройкой импорта и сохранить как XLSX. Такой файл 1С откроет через Файл → Открыть как табличный документ.

Excel: импорт через «Из текстового/CSV-файла»

Двойной клик по CSV — плохая идея: Excel сам угадывает кодировку и формат и портит артикулы. Делайте так:

  1. Создайте пустую книгу.
  2. Откройте вкладку «Данные» → «Из текстового/CSV-файла» и выберите файл.
  3. В поле «Источник файла» выберите 65001: Юникод (UTF-8) или 1251: кириллица (Windows) — смотрите на предпросмотр, пока русские буквы не станут читаемыми.
  4. В поле «Разделитель» укажите точку с запятой или запятую.
  5. Нажмите «Преобразовать данные». В редакторе запросов выделите колонки с артикулами, ИНН, кодами и смените тип на «Текст».
  6. «Закрыть и загрузить», затем Файл → Сохранить как → Книга Excel (*.xlsx).

LibreOffice Calc

Calc при открытии CSV сразу показывает окно «Импорт текста»: кодировка, разделители, а внизу — тип каждой колонки. Щёлкните заголовок колонки с артикулами и выберите тип «Текст». Сохраните в формате XLSX или ODS — 1С читает оба.

Для ИНН, КПП, БИК, расчётных счетов и штрихкодов тип «Текст» обязателен. Excel показывает 20-значный счёт как 4,07028E+19 и при сохранении теряет последние цифры безвозвратно.

Открыть XLSX в 1С

В 1С: Главное меню → Файл → Открыть, выберите XLSX. Файл откроется табличным документом, его можно смотреть, копировать и сохранять в MXL. Чтобы данные попали в базу, нужен следующий шаг — загрузка.

Обработка «Загрузка данных из табличного документа»

Универсальная внешняя обработка «Загрузка данных из табличного документа» (файл вида ЗагрузкаДанныхИзТабличногоДокумента.epf) распространяется с дисками ИТС и годами служит рабочим инструментом внедренцев. Она грузит в справочники, табличные части и регистры сведений, причём в любые реквизиты, а не только в шаблонные.

CSV она напрямую не читает — нужен XLSX, MXL или вставка из буфера. Порядок:

  1. Откройте обработку: Главное меню → Файл → Открыть, выберите .epf. Если открытие внешних обработок запрещено, администратор разрешает его в настройках прав пользователя.
  2. Выберите режим (справочник, табличная часть или регистр сведений ) и конкретный объект.
  3. Загрузите таблицу: кнопкой открытия файла (XLSX/MXL) или скопируйте ячейки в Excel и вставьте Ctrl+V в поле табличного документа обработки.
  4. На закладке настройки отметьте реквизиты, которые грузите, и номер колонки для каждого.
  5. Задайте поле поиска — по нему обработка решит, обновлять элемент или создавать новый. Для номенклатуры обычно артикул, для контрагентов ИНН.
  6. Выполните «Контроль заполнения», исправьте строки с ошибками, затем «Загрузить».
Сопоставление полей
Артикул (колонка 1)→Артикул, поле поиска
Наименование (колонка 2)→Наименование и Полное наименование
Цена (колонка 3)→не грузится в справочник: цены вносят документом установки цен
Единица (колонка 4)→Единица хранения, поиск по наименованию в классификаторе

Обработка пишет напрямую в объекты базы. Сделайте резервную копию перед загрузкой в рабочую базу. Отменить массовую загрузку кнопкой нельзя.

Версия обработки должна подходить к режиму запуска: для управляемого интерфейса «Такси» берите редакцию для управляемых форм.

Чтение CSV кодом на встроенном языке и из командной строки

Когда CSV приходит регулярно — выгрузка с сайта, отчёт маркетплейса, файл от поставщика — проще один раз написать загрузку. Ниже полный пример: чтение файла с заданной кодировкой, разбор строки с учётом кавычек, преобразование чисел и дат.

Разбор строки с кавычками

Функция СтрРазделить (платформа 8.3.6 и выше) режет строку по разделителю, но не знает про кавычки. Строку "Болт М8х40, оцинк.";12,50 с разделителем-запятой она разобьёт неверно. Нужен свой разбор:

Функция РазобратьСтрокуCSV(Строка, Разделитель = ";")

	Поля = Новый Массив;
	Текущее = "";
	ВКавычках = Ложь;
	Длина = СтрДлина(Строка);
	Сч = 1;

	Пока Сч <= Длина Цикл
		Символ = Сред(Строка, Сч, 1);
		Если ВКавычках Тогда
			Если Символ = """" Тогда
				Если Сред(Строка, Сч + 1, 1) = """" Тогда
					Текущее = Текущее + """";
					Сч = Сч + 1;
				Иначе
					ВКавычках = Ложь;
				КонецЕсли;
			Иначе
				Текущее = Текущее + Символ;
			КонецЕсли;
		Иначе
			Если Символ = """" Тогда
				ВКавычках = Истина;
			ИначеЕсли Символ = Разделитель Тогда
				Поля.Добавить(Текущее);
				Текущее = "";
			Иначе
				Текущее = Текущее + Символ;
			КонецЕсли;
		КонецЕсли;
		Сч = Сч + 1;
	КонецЦикла;

	Поля.Добавить(Текущее);
	Возврат Поля;

КонецФункции

Чтение файла в таблицу значений

Функция ПрочитатьCSV(ИмяФайла, Кодировка = "UTF-8", Разделитель = ";")

	Таблица = Новый ТаблицаЗначений;
	Таблица.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
	Таблица.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
	Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));

	Чтение = Новый ЧтениеТекста(ИмяФайла, Кодировка);
	Строка = Чтение.ПрочитатьСтроку(); // заголовок пропускаем
	Строка = Чтение.ПрочитатьСтроку();

	Пока Строка <> Неопределено Цикл
		Если ЗначениеЗаполнено(СокрЛП(Строка)) Тогда
			Поля = РазобратьСтрокуCSV(Строка, Разделитель);
			Если Поля.Количество() >= 3 Тогда
				НоваяСтрока = Таблица.Добавить();
				НоваяСтрока.Артикул = СокрЛП(Поля[0]);
				НоваяСтрока.Наименование = СокрЛП(Поля[1]);
				НоваяСтрока.Цена = СтрокуВЧисло(Поля[2]);
			КонецЕсли;
		КонецЕсли;
		Строка = Чтение.ПрочитатьСтроку();
	КонецЦикла;

	Чтение.Закрыть();
	Возврат Таблица;

КонецФункции

Функция СтрокуВЧисло(Знач Значение)

	Значение = СтрЗаменить(Значение, " ", "");
	Значение = СтрЗаменить(Значение, Символы.НПП, "");
	Значение = СтрЗаменить(Значение, ",", ".");
	Попытка
		Возврат Число(Значение);
	Исключение
		Возврат 0;
	КонецПопытки;

КонецФункции

Для файла в Windows-1251 передайте кодировку "windows-1251". Артикул хранится строкой, поэтому 00125 остаётся 00125. Даты в виде 31.12.2025 собирайте так: Дата(Число(Сред(С, 7, 4)), Число(Сред(С, 4, 2)), Число(Лев(С, 2))).

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

Файл на клиенте, код на сервере

Частая ловушка в клиент-серверной базе: путь C:\Загрузка\prices.csv есть на компьютере пользователя, но не на сервере 1С. Серверный код его не увидит. Схема правильная такая: на клиенте файл передают в базу через временное хранилище (ПоместитьВоВременноеХранилище или выбор файла с помещением), на сервере достают двоичные данные ПолучитьИзВременногоХранилища, записывают во временный файл ПолучитьИмяВременногоФайла("csv") и читают уже его. После чтения временный файл удаляют УдалитьФайлы.

Запуск загрузки из командной строки

Регулярный импорт можно повесить на планировщик Windows. Платформа умеет запустить внешнюю обработку при старте сеанса:

"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /N"Обмен" /P"пароль" /Execute"D:\Scripts\ImportCSV.epf" /C"D:\Exchange\prices.csv"

Ключ /Execute открывает обработку, /C передаёт строку, которую код читает через ПараметрЗапуска. Для серверной базы вместо /F указывают /S"сервер\база". Обработка должна сама загрузить данные и завершить работу системы, иначе сеанс останется висеть и займёт лицензию.

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

Ошибки при открытии и загрузке CSV: симптом и решение

Диагностика: выберите симптом

Чего не делать

  • 🚫 Не правьте CSV в Excel и не сохраняйте его обратно в CSV «как есть»: Excel перепишет кодировку, разделитель и форматы, и исходник будет испорчен.
  • 🚫 Не грузите в рабочую базу файл, который ни разу не проверили на десятке строк.
  • 🚫 Не используйте СтрРазделить для файлов, где в значениях бывают кавычки и разделители — потеряете колонки без всякой ошибки.
  • 🚫 Не надейтесь на Excel для больших выгрузок: лист вмещает 1 048 576 строк, остальное он молча отбросит. Файл крупнее читайте кодом.

Частые вопросы про CSV в 1С

Можно ли сохранить отчёт 1С в CSV?
Напрямую в списке форматов сохранения табличного документа CSV нет. Сохраните отчёт в XLSX и пересохраните в Excel как CSV, либо выгрузите данные кодом через ЗаписьТекста, сами собирая строки с разделителем.
Почему Excel видит файл нормально, а 1С показывает кракозябры?
Excel и загрузчик 1С угадывают кодировку по-разному. Пересохраните CSV в UTF-8 с BOM — эту метку однозначно распознают обе программы.
Какой разделитель лучше: точка с запятой или запятая?
Для русских данных — точка с запятой. Запятая встречается в наименованиях и в дробных числах, поэтому с ней значения приходится постоянно заключать в кавычки.
Можно ли загрузить CSV в 1С через веб-клиент или в облаке?
Да, встроенная команда «Загрузить» работает и в веб-клиенте, и в облачной 1С: файл выбирается на компьютере и передаётся в базу. Пути вида C:\… в серверном коде в облаке не работают — только передача файла через форму.
Что делать с CSV размером в сотни мегабайт?
Читать построчно через ЧтениеТекста и записывать объекты порциями, по несколько сотен в транзакции. Загрузка всего файла в табличный документ или в Excel упрётся в память и лимит строк.