Как выгрузить номенклатуру с остатками из 1С:Управление торговлей 11.4 в CSV-файл?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Выгрузка каталога товаров с актуальными остатками во внешний файл формата CSV — одна из самых частых задач при интеграции 1С с интернет-магазинами, маркетплейсами или внешними системами аналитики. Формат CSV (Comma-Separated Values) ценится за свою простоту, универсальность и легкость обработки на стороне веб-серверов.

В этой статье мы подробно разберем, как решить эту задачу в конфигурации 1С:Управление торговлей 11.4. Мы рассмотрим два основных сценария: быстрый экспорт данных штатными средствами без программирования и создание профессиональной обработки для автоматической выгрузки по расписанию.

Способ №1. Быстрый экспорт через стандартные отчеты и Excel

Если вам требуется разовая выгрузка «здесь и сейчас» и у вас нет под рукой программиста, можно воспользоваться стандартными возможностями системы 1С и табличного редактора Microsoft Excel.

Проанализируем пошагово, как выполнить эту операцию:

  1. Откроем в 1С:УТ 11.4 отчет «Ведомость по товарам на складах» или «Остатки и доступность товаров» (раздел «Склад и доставка» — «Отчеты по складу»).
  2. Настроим отчет: выведем только те колонки, которые нам необходимы (например, Номенклатура, Артикул, Количество). Обязательно отключим группировки по складам или организациям, если нам нужен плоский список товаров.
  3. Сформируем отчет.
  4. Сохраним полученную таблицу на диск. Для этого нажмем кнопку «Сохранить» (иконка дискеты) или воспользуемся меню «Файл» — «Сохранить как...» и выберем формат Лист Excel (*.xlsx).
  5. Откроем сохраненный файл в Microsoft Excel.
  6. Перейдем в меню «Файл» — «Сохранить как», выберем тип файла «CSV (разделители — запятые) (*.csv)» или «CSV-MSDOS (*.csv)».

Важные подводные камни ручного метода:

Способ №2. Разработка программной обработки (исправляем ошибки «быстрого» кода)

Для регулярного обмена ручной способ не подходит. Требуется написать внешнюю обработку. На форумах часто предлагают простые решения «на коленке за 4 минуты», подобные этому:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
             |	ТоварыНаСкладахТоргОстатки.Номенклатура КАК Номенклатура,
             |	ТоварыНаСкладахТоргОстатки.КоличествоОстаток
             |ИЗ
             |	РегистрНакопления.ТоварыНаСкладахТорг.Остатки КАК ТоварыНаСкладахТоргОстатки";
Текст = Новый ТекстовыйДокумент;
// ... обход выборки и запись через Стр = "" + Номенклатура + ";" + Остаток;

Рассмотрим подробнее, почему такой код нельзя использовать в реальной работе, и как написать его правильно:

  1. Несуществующие регистры. В типовой УТ 11.4 нет регистра ТоварыНаСкладахТорг. Остатки хранятся в регистре накопления ТоварыНаСкладах. Если же вам нужны свободные остатки (за вычетом резервов под заказы клиентов), данные нужно получать из регистра РаспределениеЗапасов.
  2. Проблема спецсимволов. Если в наименовании товара встретится точка с запятой (например, «Болт 10х20; оцинкованный») или кавычки, простая склейка строк нарушит структуру CSV-файла. Сторонний сайт прочитает такую строку со сдвигом колонок. Данные необходимо экранировать по стандарту RFC 4180.
  3. Проблема кодировки. Стандартный метод Текст.Записать() без параметров сохраняет файл в кодировке ANSI (Windows-1251). Нам необходимо принудительно задавать UTF-8.

Ниже представлен правильный, оптимизированный шаблон кода для выгрузки остатков товаров из 1С:УТ 11.4 в CSV-формат:


&НаСервере
Процедура ВыгрузитьОстаткиВCSVНаСервере(ИмяФайла)

    // 1. Подготавливаем запрос для получения физических остатков товаров в разрезе складов
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ТоварыНаСкладахОстатки.Номенклатура.Код КАК Код,
        |	ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
        |	ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Наименование,
        |	ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
        |	ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование
        |ИЗ
        |	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |УПОРЯДОЧИТЬ ПО
        |	Наименование";

    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        ВызватьИсключение "Нет данных для выгрузки!";
    КонецЕсли;

    // 2. Используем специализированный объект 1С для работы с CSV
    // Этот объект автоматически экранирует спецсимволы и управляет кавычками
    ПараметрыЗаписи = Новый ПараметрыЗаписиCSV;
    ПараметрыЗаписи.РазделительПолей = ";"; // Стандарт для СНГ-систем
    ПараметрыЗаписи.СтрокаНачалаНовойСтроки = Символы.ПС;
    ПараметрыЗаписи.КавычкиПолей = ВариантКавычекCSV.ПриНеобходимости;

    АрхивныйФайл = Новый ЗаписьCSV;
    // Явно указываем кодировку UTF-8 без BOM для совместимости с Linux-серверами сайтов
    АрхивныйФайл.Открыть(ИмяФайла, КодировкаТекста.UTF8, , ПараметрыЗаписи);

    // Записываем строку заголовков (шапку файла)
    МассивЗаголовков = Новый Массив;
    МассивЗаголовков.Добавить("Код");
    МассивЗаголовков.Добавить("Артикул");
    МассивЗаголовков.Добавить("Наименование");
    МассивЗаголовков.Добавить("Остаток");
    МассивЗаголовков.Добавить("Склад");
    АрхивныйФайл.ЗаписатьСтроку(МассивЗаголовков);

    // 3. Выгружаем данные
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        
        МассивСтроки = Новый Массив;
        МассивСтроки.Добавить(Строка(Выборка.Код));
        МассивСтроки.Добавить(Строка(Выборка.Артикул));
        МассивСтроки.Добавить(Строка(Выборка.Наименование));
        
        // Форматируем числовое поле остатка, убирая неразрывные пробелы в разрядах
        СтрокаОстатка = Формат(Выборка.Остаток, "ЧГ=0");
        МассивСтроки.Добавить(СтрокаОстатка);
        
        МассивСтроки.Добавить(Строка(Выборка.СкладНаименование));
        
        // Записываем подготовленный массив как одну CSV-строку
        АрхивныйФайл.ЗаписатьСтроку(МассивСтроки);
        
    КонецЦикла;

    АрхивныйФайл.Закрыть();

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

Специфика учета в УТ 11.4: что еще нужно предусмотреть?

При реальном внедрении выгрузки в интернет-магазин вам обязательно придется столкнуться со следующими особенностями конфигурации 1С:Управление торговлей:

Использование встроенного объекта ЗаписьCSV платформы 1С v8.3 гарантирует стабильность структуры файла, корректную обработку любых длинных наименований со спецсимволами и беспроблемный импорт данных на стороне принимающего сайта.

← На главную