Экспорт любых документов базы в JSON на платформе 1С:Предприятие

17.12.25

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Это решение позволяет экспортировать документы любой сложности, сохраняя всю бизнес-логику и структуру данных, что делает его пригодным для обмена данными между системами или создания резервных копий.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Экспорт любых документов базы в JSON на платформе 1С:Предприятие
.epf 8,23Kb
6 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Какие преимущества

  1. Автоматическое определение структуры - не нужно вручную описывать реквизиты.

  2. Поддержка всех типов документов - работает с любыми конфигурациями.

  3. Сохранение иерархии - табличные части сохраняют свою структуру.

  4. Готовность к импорту - JSON можно легко загрузить обратно.

  5. Стандартные методы работы - используются встроенные средства 1С.

 

Этап 1: Поиск по метаданным для получения структуры документов

Первым шагом необходимо проанализировать метаданные, чтобы понять структуру каждого типа документа:

&НаСервере
Функция ВыгрузитьСписокВJSONНаСервере(Ссылка)   
    // Получаем метаданные документа по ссылке
    ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка));
    МассивОбработанныхИмен = Новый Массив;
    МассивОбработанныхИменТЧ = Новый Массив;
    
    // Формируем список реквизитов для выборки
    МассивОбработанныхИмен.Добавить(ОбъектМетаданных.Имя + ".Ссылка КАК Ссылка,");
    
    Для каждого СтрРеквизит Из ОбъектМетаданных.Реквизиты Цикл
        МассивОбработанныхИмен.Добавить(ОбъектМетаданных.Имя + "." + СтрРеквизит.Имя + 
                                        " КАК " + СтрРеквизит.Имя + ",");
    КонецЦикла;

Что здесь происходит:

  1. Метаданные.НайтиПоТипу() определяет тип документа по ссылке

  2. Создаются массивы для хранения имен реквизитов и табличных частей

  3. Автоматически собираются все реквизиты документа из метаданных

 

Этап 2: Формирование динамического запроса с учетом табличных частей

Для табличных частей формируем специальные подзапросы:

// Формируем список табличных частей для выборки
    Для каждого СтрТЧ Из ОбъектМетаданных.ТабличныеЧасти Цикл
        МассивИменТЧ = Новый Массив;
        
        Для каждого СтрРеквизит Из СтрТЧ.Реквизиты Цикл
            МассивИменТЧ.Добавить(СтрРеквизит.Имя + " КАК " + СтрРеквизит.Имя + ",");
        КонецЦикла;
        
        // Добавляем номер строки
        МассивИменТЧ.Добавить("НомерСтроки КАК НомерСтроки,");
        
        // Убираем последнюю запятую
        ИмяБезЗапятой = СтрЗаменить(МассивИменТЧ[МассивИменТЧ.Количество() - 1], ",", "");
        МассивИменТЧ.Удалить(МассивИменТЧ.Количество() - 1);
        МассивИменТЧ.Добавить(ИмяБезЗапятой);
        
        // Формируем подзапрос для табличной части
        МассивОбработанныхИменТЧ.Добавить(ОбъектМетаданных.Имя + "." + СтрТЧ.Имя + 
                                          ".( " + СтрСоединить(МассивИменТЧ) + " ) КАК " + 
                                          СтрТЧ.Имя + ",");
    КонецЦикла;

Особенности формирования запроса для табличных частей:

  • Каждая табличная часть становится подзапросом

  • Сохраняется порядок строк через НомерСтроки

  • Автоматически собираются все реквизиты табличной части

 

Этап 3: Сборка и выполнение итогового запроса

// Формируем и выполняем запрос
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    " + СтрСоединить(МассивОбработанныхИмен) + СтрСоединить(МассивОбработанныхИменТЧ) + "
        |ИЗ
        |    Документ." + ОбъектМетаданных.Имя + " КАК " + ОбъектМетаданных.Имя + "
        |ГДЕ
        |    " + ОбъектМетаданных.Имя + ".Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выгрузить();

 

Этап 4: Преобразование результатов в удобные структуры

// Преобразуем результат в удобную структуру
    Выборка = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Выборка[0]);
    
    // Преобразуем табличные части в массивы
    Для каждого Стр Из Выборка Цикл
        Если ТипЗнч(Стр.Значение) = Тип("ТаблицаЗначений") Тогда
            Выборка[Стр.Ключ] = ОбщегоНазначения.ТаблицаЗначенийВМассив(Стр.Значение);
        КонецЕсли;
    КонецЦикла;
    
    Возврат Выборка;   
КонецФункции

Преобразования данных:

  1. СтрокаТаблицыЗначенийВСтруктуру() преобразует строку ТЗ в структуру

  2. Табличные части преобразуются в массивы структур

  3. Получается иерархическая структура, готовая для сериализации в JSON

 

Этап 5: Сериализация в JSON с иерархической структурой

&НаКлиенте
Асинх Процедура ВыгрузитьСписокВJSON(Команда) 
    
    // ... получение пути к файлу
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьФайл(ПутьКФайлу);
    
    // Начинаем запись основного объекта
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("Документы");
    ЗаписьJSON.ЗаписатьНачалоМассива();
    
    Для каждого ЭлементСписка Из СписокДокументов Цикл
        Ссылка = ЭлементСписка.Значение;
        
        // Получаем данные документа с сервера
        Выборка = ВыгрузитьСписокВJSONНаСервере(Ссылка);
        ИмяДокумента = ПолучитьИмяДокумента(Ссылка);
        
        // Записываем объект для текущего документа
        ЗаписьJSON.ЗаписатьНачалоОбъекта();
        ЗаписьJSON.ЗаписатьИмяСвойства(ИмяДокумента);
        ЗаписьJSON.ЗаписатьНачалоОбъекта();
        
        // Записываем реквизиты документа
        Для каждого Стр1 Из Выборка Цикл
            ИмяРеквизита = Стр1.Ключ;
            ЗначениеРеквизита = Стр1.Значение;
			
            // Обработка простых реквизитов (не массивов)
			Если ТипЗнч(ЗначениеРеквизита) <> Тип("Массив") Тогда
				ЗаписьJSON.ЗаписатьИмяСвойства(ИмяРеквизита); 
				ЗаписьJSON.ЗаписатьЗначение(Строка(ЗначениеРеквизита));
			Иначе
                // Обработка табличных частей (массивов)
                Если ЗначениеРеквизита.Количество() > 0 Тогда
                    ЗаписьJSON.ЗаписатьИмяСвойства(ИмяРеквизита);
                    ЗаписьJSON.ЗаписатьНачалоМассива();
                    
                    // Обработка строк табличной части
                    Для каждого Стр2 Из ЗначениеРеквизита Цикл
                        ЗаписьJSON.ЗаписатьНачалоОбъекта();
                        ЗаписьJSON.ЗаписатьИмяСвойства("Строка");
                        ЗаписьJSON.ЗаписатьНачалоОбъекта();
                        
                        // Обработка реквизитов строки табличной части
                        Для каждого Стр3 Из Стр2 Цикл
                            ИмяРеквизитаТЧ = Стр3.Ключ;
                            ЗначениеРеквизитаТЧ = Стр3.Значение;
                            
                            ЗаписьJSON.ЗаписатьИмяСвойства(ИмяРеквизитаТЧ);
                            ЗаписьJSON.ЗаписатьЗначение(Строка(ЗначениеРеквизитаТЧ));
                        КонецЦикла;
                        
                        ЗаписьJSON.ЗаписатьКонецОбъекта();
                        ЗаписьJSON.ЗаписатьКонецОбъекта();
                    КонецЦикла;
                    
                    ЗаписьJSON.ЗаписатьКонецМассива();
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        
        ЗаписьJSON.ЗаписатьКонецОбъекта();
        ЗаписьJSON.ЗаписатьКонецОбъекта();
    КонецЦикла;
    
    // Завершаем запись JSON
    ЗаписьJSON.ЗаписатьКонецМассива();
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    ЗаписьJSON.Закрыть();  
КонецПроцедуры

 

Импорт

Для демонстрации того, как JSON преобразуется обратно в структуры данных 1С:

&НаКлиенте
Асинх Процедура ЗагрузитьСписокИзJSON(Команда)   
    
    // ... получение пути к файлу
    
    // Открываем файл для чтения JSON
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.ОткрытьФайл(ПутьКФайлу);
    
    // Структура JSON автоматически преобразуется в структуры данных 1С
    Результат = ПрочитатьJSON(ЧтениеJSON);

    //Ваш дальнейший код с обработкой полученной структуры	
КонецПроцедуры

Что происходит при импорте:

  1. ЧтениеJSON последовательно читает JSON-файл

  2. ПрочитатьJSON() рекурсивно преобразует JSON в структуры 1С:

    • JSON-объекты → Структура

    • JSON-массивы → Массив

    • Примитивные значения → соответствующие типы 1С

  3. Получается иерархическая структура, идентичная исходной

 

Итоговая структура JSON-файла

 

{
  "Документы": [
    {
      "ИмяТипаДокумента1": {
        "Реквизит1": "Значение1",
        "Реквизит2": "Значение2",
        "ТабличнаяЧасть1": [
          {
            "Строка": {
              "РеквизитСтроки1": "Значение",
              "РеквизитСтроки2": "Значение"
            }
          }
        ]
      }
    }
  ]
}

 

Также вопрос к читателям. Когда начал писать импорт, столкнулся с проблемой при автоматическом заполнении/создании документов на основании полученной из .json структуры, код позволяет легко встроить в функцию "ВыгрузитьСписокВJSON" описание типов реквизитов, с примитивными типами все легко, но с ссылочными типами сложнее. Когда использую метод "ТипЗнч()", то если это ссылочный тип, он выглядит, например, так: "Авансовый отчет", плюс в .json это просто строка и когда я обрабатываю .json, то очевидно не получается с помощью строки "Авансовый отчет" найти необходимые метаданные сначала по типу, а потом найти ссылку для реквизита. Так вот вопрос, как лучше записывать типы реквизитов в .json, чтобы потом по этим типам искать ссылки или придется писать хитрую процедуру определения типа реквизита по тому, что есть?

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.22.131

Вступайте в нашу телеграмм-группу Инфостарт

обработка 1С:Предприятие открытый код json памятка программирование алгоритмы выгрузка инструмент разработчика обмен данными структура метаданные

См. также

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    6793    78    0    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    180616    348    283    

409

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    157333    939    306    

475

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.262.x) и БП 3.0 (3.0.190.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    32217    237    61    

177

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    60963    76    128    

74

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 руб.

23.07.2020    65443    304    83    

243

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    198555    661    543    

560
Отзывы
1. Трактор 1263 17.12.25 09:54 Сейчас в теме
ЗаписьJSON.ЗаписатьЗначение(Строка(ЗначениеРеквизита));


Восстановить значение из представления бывает непросто. Я в таких случаях преобразую ссылку в структуру с полями Ссылка, ТипВид, Представление.
solinik; InFlach; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Трактор 1263 17.12.25 09:54 Сейчас в теме
ЗаписьJSON.ЗаписатьЗначение(Строка(ЗначениеРеквизита));


Восстановить значение из представления бывает непросто. Я в таких случаях преобразую ссылку в структуру с полями Ссылка, ТипВид, Представление.
solinik; InFlach; +2 Ответить
2. InFlach 59 17.12.25 10:16 Сейчас в теме
(1) Спасибо, я почему-то не подумал о том, чтобы просто сохранять как минимум ссылку для ссылочных типов реквизитов и тогда будет сильно легче настроить импрот
3. SerVer1C 1007 24.12.25 11:40 Сейчас в теме
Так вот вопрос, как лучше записывать типы реквизитов в .json, чтобы потом по этим типам искать ссылки или придется писать хитрую процедуру определения типа реквизита по тому, что есть?

Метаданные.НайтиПоТипу(ТипЗнч(ВашеЗначение)).Имя
4. InFlach 59 24.12.25 11:50 Сейчас в теме
(3) Возможно вы меня неправильно поняли. В json же записывается только строка, и если потом я буду обрабатывать этот json и вставлю значение атрибута в "ВашеЗначение", метод "ТипЗнч" вернет мне "Строка". Вопрос в том как лучше сначала записать в json, чтобы потом понять какой тип у значения
Для отправки сообщения требуется регистрация/авторизация