CSV-файл и 1С 8.3: чем прочитать таблицу и как загрузить её в базу
Содержание
Открыть 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 в справочник
- Откройте список справочника и нажмите «Загрузить».
- Программа покажет пустой шаблон таблицы с колонками, которые она умеет принимать. Колонки можно заполнить вставкой из буфера или загрузить файлом.
- Выберите загрузку из файла и укажите ваш CSV. В диалоге выбора поставьте тип файлов «Все файлы», если CSV не виден в списке.
- Проверьте, что данные легли в нужные колонки. Если всё уехало в первую колонку — разделитель не тот (см. раздел про ошибки).
- На шаге сопоставления программа ищет существующие элементы — по наименованию, артикулу, ИНН. Посмотрите, что найдено, а что будет создано заново.
- Нажмите «Загрузить» и проверьте результат на 2–3 элементах.
Загрузка в справочник создаёт новые элементы для всего, что не удалось сопоставить. Сначала прогоните файл на копии базы или на 5–10 строках, иначе после ошибки с кодировкой придётся вручную помечать на удаление сотни «Ð¢Ð¾Ð²Ð°Ñ€».
Когда встроенной загрузки не хватает
Встроенный механизм грузит только те реквизиты, которые разработчики вывели в шаблон. Дополнительные реквизиты, цены нескольких видов, характеристики — часто мимо. Для таких случаев нужна обработка из следующего раздела или код.
Перевод CSV в XLSX: кодировка и разделители под контролем
Если загрузчик спотыкается или файл нужно сначала почистить, самый надёжный приём — открыть CSV в Excel или LibreOffice Calc с явной настройкой импорта и сохранить как XLSX. Такой файл 1С откроет через Файл → Открыть как табличный документ.
Excel: импорт через «Из текстового/CSV-файла»
Двойной клик по CSV — плохая идея: Excel сам угадывает кодировку и формат и портит артикулы. Делайте так:
- Создайте пустую книгу.
- Откройте вкладку «Данные» → «Из текстового/CSV-файла» и выберите файл.
- В поле «Источник файла» выберите
65001: Юникод (UTF-8)или1251: кириллица (Windows)— смотрите на предпросмотр, пока русские буквы не станут читаемыми. - В поле «Разделитель» укажите точку с запятой или запятую.
- Нажмите «Преобразовать данные». В редакторе запросов выделите колонки с артикулами, ИНН, кодами и смените тип на «Текст».
- «Закрыть и загрузить», затем
Файл → Сохранить как → Книга Excel (*.xlsx).
LibreOffice Calc
Calc при открытии CSV сразу показывает окно «Импорт текста»: кодировка, разделители, а внизу — тип каждой колонки. Щёлкните заголовок колонки с артикулами и выберите тип «Текст». Сохраните в формате XLSX или ODS — 1С читает оба.
Для ИНН, КПП, БИК, расчётных счетов и штрихкодов тип «Текст» обязателен. Excel показывает 20-значный счёт как 4,07028E+19 и при сохранении теряет последние цифры безвозвратно.
Открыть XLSX в 1С
В 1С: Главное меню → Файл → Открыть, выберите XLSX. Файл откроется табличным документом, его можно смотреть, копировать и сохранять в MXL. Чтобы данные попали в базу, нужен следующий шаг — загрузка.
Обработка «Загрузка данных из табличного документа»
Универсальная внешняя обработка «Загрузка данных из табличного документа» (файл вида ЗагрузкаДанныхИзТабличногоДокумента.epf) распространяется с дисками ИТС и годами служит рабочим инструментом внедренцев. Она грузит в справочники, табличные части и регистры сведений, причём в любые реквизиты, а не только в шаблонные.
CSV она напрямую не читает — нужен XLSX, MXL или вставка из буфера. Порядок:
- Откройте обработку:
Главное меню → Файл → Открыть, выберите.epf. Если открытие внешних обработок запрещено, администратор разрешает его в настройках прав пользователя. - Выберите режим (справочник, табличная часть или регистр сведений ) и конкретный объект.
- Загрузите таблицу: кнопкой открытия файла (XLSX/MXL) или скопируйте ячейки в Excel и вставьте
Ctrl+Vв поле табличного документа обработки. - На закладке настройки отметьте реквизиты, которые грузите, и номер колонки для каждого.
- Задайте поле поиска — по нему обработка решит, обновлять элемент или создавать новый. Для номенклатуры обычно артикул, для контрагентов ИНН.
- Выполните «Контроль заполнения», исправьте строки с ошибками, затем «Загрузить».
Обработка пишет напрямую в объекты базы. Сделайте резервную копию перед загрузкой в рабочую базу. Отменить массовую загрузку кнопкой нельзя.
Версия обработки должна подходить к режиму запуска: для управляемого интерфейса «Такси» берите редакцию для управляемых форм.
Чтение 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?
ЗаписьТекста, сами собирая строки с разделителем.Почему Excel видит файл нормально, а 1С показывает кракозябры?
Какой разделитель лучше: точка с запятой или запятая?
Можно ли загрузить CSV в 1С через веб-клиент или в облаке?
C:\… в серверном коде в облаке не работают — только передача файла через форму.Что делать с CSV размером в сотни мегабайт?
ЧтениеТекста и записывать объекты порциями, по несколько сотен в транзакции. Загрузка всего файла в табличный документ или в Excel упрётся в память и лимит строк.