Задача экспорта данных из платформы 1С:Предприятие 7.7 (в частности, из конфигурации "Торговля и Склад") в современные форматы обмена остается актуальной — ускоряет этот процесс COM-обмен данными между ТиС 7.7 и 1С 8. Часто возникает потребность передать справочники или документы в интернет-магазин, стороннюю учетную систему или аналитическое приложение. В этой статье мы подробно разберем, почему не существует "волшебной кнопки", какие штатные средства можно использовать и как программно реализовать выгрузку в форматы JSON, CSV и DBF, учитывая ограничения старой платформы.
Прежде чем приступать к технической реализации, давайте проанализируем саму постановку задачи. Часто пользователи и начинающие разработчики ищут "универсальную выгрузку". Однако, как справедливо отмечают опытные специалисты, понятие универсальности здесь практически неприменимо.
Рассмотрим основные причины, почему нельзя просто "выгрузить всё":
sku, а не Artikul, или чтобы дата была в формате YYYY-MM-DD, а не DD.MM.YYYY. Универсальный инструмент не может предугадать эти требования.Поэтому правильный подход — это не поиск универсальной обработки, а создание (или настройка) выгрузки под конкретные требования (ТЗ) принимающей системы.
Если ваша задача — разовая выгрузка данных для анализа в Excel или простой загрузки, можно воспользоваться штатными механизмами конфигурации и платформы.
Разберем алгоритм действий для "Торговля и Склад 7.7":
U_Print.ert (Универсальная печать справочников). Она позволяет выбрать любой справочник (например, "Номенклатура"), отметить нужные реквизиты галочками и сформировать печатную форму.Этот метод подходит для простых задач, когда нужно просто получить таблицу с данными. Например, таким образом можно подготовить файл выгрузки товаров в сервис МойСклад для обновления остатков и цен.
Формат DBF (dBase) является "родным" для 1С 7.7, поэтому работать с ним проще всего. Однако здесь есть подводные камни, о которых нужно знать.
Ограничения формата DBF:
DeliveryAddress, вы не сможете создать такое поле в DBF из 1С 7.7. Придется называть его DelivAddr.Посмотрим, как выглядит код выгрузки документов в 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 файла.
CSV (Comma-Separated Values) — это простой текстовый формат. В 1С 7.7 его можно сформировать с помощью объекта Текст. Основная сложность здесь — правильное экранирование данных. Если в названии товара встретится точка с запятой (разделитель) или кавычка, структура файла нарушится.
Разберем пример кода для безопасной записи CSV:
ТекстВыгрузки = СоздатьОбъект("Текст");
Док = СоздатьОбъект("Документ.ПоступлениеТМЦ");
Док.ВыбратьДокументы(НачДата, КонДата);
// Заголовок CSV
ТекстВыгрузки.ДобавитьСтроку("Номер;Дата;Контрагент;Сумма");
Пока Док.ПолучитьДокумент() = 1 Цикл
// Подготовка данных: заменяем запрещенные символы
СтрКлиент = СтрЗаменить(Док.Контрагент.Наименование, ";", ",");
СтрокаДанных = "" + Док.НомерДок + ";" +
Формат(Док.ДатаДок, "ДГГГГММДД") + ";" +
СтрКлиент + ";" +
Док.Итог("Сумма");
ТекстВыгрузки.ДобавитьСтроку(СтрокаДанных);
КонецЦикла;
ТекстВыгрузки.Записать("C:\Export\Data.csv");
Важно: Объект Текст в 1С 7.7 сохраняет файлы в кодировке ANSI (Windows-1251) или DOS (CP866). Если принимающая система требует UTF-8, этот метод не подойдет без дополнительной обработки.
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
Практически все современные системы, принимающие 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();
КонецФункции
Если обмен предполагается между двумя конфигурациями 1С (пусть даже 7.7 и 8.3), наиболее правильным решением будет использование XML и инструмента "Конвертация данных 2.0" — для этого пригодятся правила переноса данных из ТиС 7.7 в БП 3.0. Часто для этого используются готовые наборы правил обмена и обработок, которые значительно ускоряют процесс переноса.
Преимущества:
Через XML формат также реализуется выгрузка реализации маркированных товаров для Честного знака, соответствующая актуальным требованиям законодательства и приказам ФНС — для этого есть модуль интеграции с Честным ЗНАКом для 1С 7.7.
Подведем итог. Чтобы выгрузить данные из ТиС 7.7:
XBase, помня об ограничениях на длину имен.MSScriptControl, чтобы гарантировать валидность структуры.ADODB.Stream.