Как организовать универсальную выгрузку данных в CSV, JSON и DBF из 1С 7.7 ТиС?

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Задача экспорта данных из платформы 1С:Предприятие 7.7 (в частности, из конфигурации "Торговля и Склад") в современные форматы обмена остается актуальной — ускоряет этот процесс COM-обмен данными между ТиС 7.7 и 1С 8. Часто возникает потребность передать справочники или документы в интернет-магазин, стороннюю учетную систему или аналитическое приложение. В этой статье мы подробно разберем, почему не существует "волшебной кнопки", какие штатные средства можно использовать и как программно реализовать выгрузку в форматы JSON, CSV и DBF, учитывая ограничения старой платформы.

Миф об универсальной выгрузке

Прежде чем приступать к технической реализации, давайте проанализируем саму постановку задачи. Часто пользователи и начинающие разработчики ищут "универсальную выгрузку". Однако, как справедливо отмечают опытные специалисты, понятие универсальности здесь практически неприменимо.

Рассмотрим основные причины, почему нельзя просто "выгрузить всё":

  1. Различие структур данных. Документы в 1С имеют иерархическую структуру: "Шапка" (дата, номер, контрагент) и "Табличная часть" (товары, количество, цена). Форматы вроде CSV и DBF представляют собой плоские таблицы. Чтобы выгрузить документ в плоский файл, нам придется либо дублировать данные шапки для каждой строки товара, либо делать два разных файла.
  2. Требования принимающей стороны. Сторонняя программа всегда имеет свои спецификации. Например, она может требовать, чтобы поле с артикулом называлось sku, а не Artikul, или чтобы дата была в формате YYYY-MM-DD, а не DD.MM.YYYY. Универсальный инструмент не может предугадать эти требования.
  3. Избыточность. В базе 1С хранится множество служебных реквизитов (флаги, внутренние идентификаторы, пустые поля), которые только "замусорят" файл обмена и могут вызвать ошибки при загрузке в другую систему.

Поэтому правильный подход — это не поиск универсальной обработки, а создание (или настройка) выгрузки под конкретные требования (ТЗ) принимающей системы.

Способ 1. Использование штатных средств (без программирования)

Если ваша задача — разовая выгрузка данных для анализа в Excel или простой загрузки, можно воспользоваться штатными механизмами конфигурации и платформы.

Разберем алгоритм действий для "Торговля и Склад 7.7":

  1. Универсальная печать справочников. На дисках ИТС или в интернете можно найти стандартную обработку U_Print.ert (Универсальная печать справочников). Она позволяет выбрать любой справочник (например, "Номенклатура"), отметить нужные реквизиты галочками и сформировать печатную форму.
  2. Универсальная печать документов. Аналогичная обработка существует для документов. Она выводит реестр документов или их содержимое в табличный документ.
  3. Сохранение в Excel/CSV. После того как отчет сформирован на экране:
    • Нажмите "Файл" -> "Сохранить как".
    • Выберите формат Excel (XLS).
    • Откройте полученный файл в Excel и пересохраните его в формат CSV (разделители-запятые) или DBF.

Этот метод подходит для простых задач, когда нужно просто получить таблицу с данными. Например, таким образом можно подготовить файл выгрузки товаров в сервис МойСклад для обновления остатков и цен.

Способ 2. Программная выгрузка в DBF

Формат DBF (dBase) является "родным" для 1С 7.7, поэтому работать с ним проще всего. Однако здесь есть подводные камни, о которых нужно знать.

Ограничения формата DBF:

Посмотрим, как выглядит код выгрузки документов в DBF:


// Создаем объект XBase
БД = СоздатьОбъект("XBase");

// Описываем структуру файла (Имя, Тип, Длина, Точность)
БД.ДобавитьПоле("DOC_NO", "S", 20, 0); // Номер документа
БД.ДобавитьПоле("DOC_DATE", "D", 8, 0); // Дата
БД.ДобавитьПоле("CLIENT", "S", 100, 0); // Контрагент
БД.ДобавитьПоле("SUMMA", "N", 15, 2);   // Сумма

// Создаем файл
БД.СоздатьФайл("C:\Export\Orders.dbf");

Док = СоздатьОбъект("Документ.Реализация");
Док.ВыбратьДокументы(НачДата, КонДата);

Пока Док.ПолучитьДокумент() = 1 Цикл
    БД.Добавить();
    БД.DOC_NO = Док.НомерДок;
    БД.DOC_DATE = Док.ДатаДок;
    БД.CLIENT = СокрЛП(Док.Контрагент.Наименование);
    БД.SUMMA = Док.Итог("Сумма");
    БД.Записать();
КонецЦикла;

БД.ЗакрытьФайл();

Если требуется выгрузить и товары (табличную часть), вам придется либо дублировать шапку для каждой строки товара, либо создавать два связанных DBF файла.

Способ 3. Программная выгрузка в CSV

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

Разберем пример кода для безопасной записи CSV:


ТекстВыгрузки = СоздатьОбъект("Текст");
Док = СоздатьОбъект("Документ.ПоступлениеТМЦ");
Док.ВыбратьДокументы(НачДата, КонДата);

// Заголовок CSV
ТекстВыгрузки.ДобавитьСтроку("Номер;Дата;Контрагент;Сумма");

Пока Док.ПолучитьДокумент() = 1 Цикл
    // Подготовка данных: заменяем запрещенные символы
    СтрКлиент = СтрЗаменить(Док.Контрагент.Наименование, ";", ",");
    
    СтрокаДанных = "" + Док.НомерДок + ";" + 
                   Формат(Док.ДатаДок, "ДГГГГММДД") + ";" + 
                   СтрКлиент + ";" + 
                   Док.Итог("Сумма");
                   
    ТекстВыгрузки.ДобавитьСтроку(СтрокаДанных);
КонецЦикла;

ТекстВыгрузки.Записать("C:\Export\Data.csv");

Важно: Объект Текст в 1С 7.7 сохраняет файлы в кодировке ANSI (Windows-1251) или DOS (CP866). Если принимающая система требует UTF-8, этот метод не подойдет без дополнительной обработки.

Способ 4. Выгрузка в JSON (Advanced)

JSON — это стандарт современного веб-обмена. Платформа 1С 7.7 не умеет работать с JSON "из коробки". У нас есть два пути: собирать строку JSON вручную или использовать системные библиотеки Windows. В качестве примера готовой реализации можно рассмотреть алгоритмы технической выгрузки номенклатуры в JSON или специализированного экспорта заявок покупателей в формат JSON.

Сборка вручную чревата ошибками (забыли закрыть скобку, не экранировали кавычку в тексте). Поэтому рассмотрим профессиональный подход с использованием MSScriptControl. Это позволяет использовать движок JavaScript внутри 1С для корректного формирования JSON.


// Инициализация ScriptControl
SC = СоздатьОбъект("MSScriptControl.ScriptControl");
SC.Language = "JScript";

// Добавляем вспомогательную функцию для создания объектов
SC.AddCode("
|function CreateObject() { return {}; }
|function CreateArray() { return []; }
|");

// Создаем массив документов
МассивДоков = SC.Run("CreateArray");

Док = СоздатьОбъект("Документ.Реализация");
Док.ВыбратьДокументы(НачДата, КонДата);

Пока Док.ПолучитьДокумент() = 1 Цикл
    // Создаем объект JS для одного документа
    JSDoc = SC.Run("CreateObject");
    
    // Заполняем свойства
    JSDoc.Number = СокрЛП(Док.НомерДок);
    JSDoc.Date = Строка(Док.ДатаДок);
    JSDoc.Client = СокрЛП(Док.Контрагент.Наименование);
    
    // Добавляем документ в массив
    МассивДоков.push(JSDoc);
КонецЦикла;

// Сериализация в JSON строку
JSON_String = SC.Eval("JSON.stringify(МассивДоков)"); // Требует поддержки JSON в ОС
// Если JSON.stringify недоступен в старых ОС, используются библиотеки json2.js

Проблема кодировки UTF-8

Практически все современные системы, принимающие JSON или CSV, ожидают кодировку UTF-8. 1С 7.7 штатно работает с Windows-1251.

Чтобы сохранить файл в UTF-8, нельзя использовать объект Текст. Вместо этого применим объект ADODB.Stream. Это стандартный компонент Windows.

Посмотрим на функцию сохранения текста в UTF-8:


Функция ЗаписатьВUTF8(ИмяФайла, ТекстСтрокой)
    Стрим = СоздатьОбъект("ADODB.Stream");
    Стрим.Type = 2; // Текстовые данные
    Стрим.Charset = "utf-8";
    Стрим.Open();
    
    Стрим.WriteText(ТекстСтрокой);
    
    // Удаляем BOM (Byte Order Mark), если он не нужен принимающей стороне
    
    Стрим.SaveToFile(ИмяФайла, 2); // 2 = adSaveCreateOverWrite
    Стрим.Close();
КонецФункции

Использование конвертации данных (XML)

Если обмен предполагается между двумя конфигурациями 1С (пусть даже 7.7 и 8.3), наиболее правильным решением будет использование XML и инструмента "Конвертация данных 2.0" — для этого пригодятся правила переноса данных из ТиС 7.7 в БП 3.0. Часто для этого используются готовые наборы правил обмена и обработок, которые значительно ускоряют процесс переноса.

Преимущества:

Через XML формат также реализуется выгрузка реализации маркированных товаров для Честного знака, соответствующая актуальным требованиям законодательства и приказам ФНС — для этого есть модуль интеграции с Честным ЗНАКом для 1С 7.7.

Резюме

Подведем итог. Чтобы выгрузить данные из ТиС 7.7:

  1. Узнайте точные требования принимающей стороны (формат, кодировка, структура полей).
  2. Для простых задач используйте Excel как промежуточное звено.
  3. Для DBF используйте объект XBase, помня об ограничениях на длину имен.
  4. Для JSON используйте MSScriptControl, чтобы гарантировать валидность структуры.
  5. Для сохранения файлов в современной кодировке UTF-8 используйте ADODB.Stream.
← На главную