Универсальная выгрузка данных из 1С 7.7 в JSON




Обработка для универсальной выгрузки данных из конфигурации 7.7 в JSON. Может быть полезна для задач переноса данных из различных конфигураций в другие конфигурации, для перехода на другие версии 1С, для перехода на 8.3, для переноса данных в другие системы учета, для организации онлайн выгрузки с целью синхронизации разных систем учета. Выгрузка справочников, документов, результатов запросов, остатков по планам счетов.

Универсальная выгрузка данных из конфигурации 7.7 в JSON, формат, который делает тривиальным процесс переноса данных в 1с 8.3 с его встроенной поддержкой.

Использовалась в процессе перехода на 8.3 с самописной конфигурации. Все реквизиты из метаданных. Этот факт предполагает возможность использования на любых конфигурациях, типовых, модифицированных, самописных. Протестирована на типовой Бухгалтерский учет, редакция 4.5, 7.70.641, работает.    

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

В один файл можно выгрузить объекты разных типов, справочники, документы. 

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

Использовалась в автоматическом режиме для онлайн выгрузки по регистрации изменений в базе. Прикрутил интерфейс для ручной выгрузки. 

13 Comments

  1. CheBurator

    Вот, тут на днях из дописанной ТиС в УНФ перносить надо будет. в УНФ чем загружать? каким инструментом?

    Reply ↓
  2. CheBurator

    И ссылку на редактор на картинке хорошо бы

    Reply ↓
  3. Serj1C

    а чем не устроила типовая конвертация данных 2.0?

    Reply ↓
  4. Malice

    (2)

    Ссылки на редактор:

    https://www.onlinejsonconvert.com/json-editor.php

    https://jsoneditoronline.org/

    Нужны не для редактирования, а для проверки, что файл валидируется. Помогают при отладке, поиске ошибок. По практике — проблемы бывают из-за символов, переносимых в реквизиты копированием — табуляции, ентеры и проч. Для решения этого добавлена галка на форме — удаляет эти символы из текстовых реквизитов. Немного замедляет выгрузку (процентов на 10), если такой проблемы нет, то можно без нее.

    Reply ↓
  5. Malice

    (1)

    Грузить своей обработкой. Если кратко, то процесс такой:

    &НаКлиенте

    Процедура Загрузитьjson(Команда)

    ЧтениеJSON = Новый ЧтениеJSON();

    ЧтениеJSON.ОткрытьФайл(ЭтаФорма.Объект.файлЗагрузки, «windows-1251»);

    таб = ПрочитатьJSON(ЧтениеJSON);

    ЧтениеJSON.Закрыть();

    ЗагрузитьНаСервере (таб);

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

    &Насервере

    процедура ЗагрузитьНаСервере (таб)

    Для каждого стр из таб Цикл

    если стр.свойство(«ссылка») тогда // справочники

    если стр.ссылка.TYPE=»СправочникСсылка.НормыСписания» тогда

    ЗагрузитьНормыСписанияСервер(стр);

    иначеесли стр.ссылка.TYPE=»СправочникСсылка.Местахранения» тогда

    ЗагрузитьМестаХраненияСервер(стр);

    //и т.д. для каждого вида, либо если только код+наименование +родитель — одной процедурой

    конецесли;

    иначеесли стр.свойство(«TYPE») тогда // документы

    если стр.TYPE=»ДокументСсылка.ПриходнаяНакладная» тогда

    ЗагрузитьДокументПриходнаяНакладная(стр, «ПриходнаяНакладная»);

    иначеесли стр.TYPE=»ДокументСсылка.РасходнаяНакладная» тогда

    // и т.д.

    конецесли;

    конеццикла;

    конецпроцедуры

    &Насервере

    процедура ЗагрузитьДокументПриходнаяНакладная(стр, вид)

    док=»»;

    если не НайтиИЗаполнитьДокумент(стр, вид, док) тогда возврат; конецесли; // тут поиск. По номеру/уиду/как угодно.

    шапка = стр.шапка[0];

    док.Склад = Справочники.МестаХранения.НайтиПоКоду(шапка.Склад.код);

    док.Клиент = Справочники.Контрагенты.НайтиПоКоду(шапка.клиент.код);

    док.товары.очистить();

    для каждого строка из стр.табличнаячасть цикл

    товары = док.товары.Добавить();

    товары.товар = справочники.Номенклатура.НайтиПоКоду(строка.Товар.код);

    товары.Количество = строка.Количество;

    товары.Цена = строка.цена;

    товары.Сумма = строка.Сумма;

    товары.НДС = строка.НДС;

    конеццикла;

    ЗаписатьДокумент(стр, док);

    конецпроцедуры

    Reply ↓
  6. Malice

    (3) Типовая конвертация не работает с самописными конфигурациями. Документов было много, более 3т в сутки. Из типовых конфигураций выгрузить штатно тоже не вышло.. Висит по 2 дня, потом падает с ошибкой. Здесь формат компактнее, запись в файл через Scripting.FileSystemObject — быстрее, нет проблем с длинными строками.

    Reply ↓
  7. ksnik

    А можете выложить пример обработки в автоматическом режиме для онлайн выгрузки по регистрации изменений в базе?

    Reply ↓
  8. CheBurator

    (5) хорошо, конечно, на на 8-ке кодя не пишу, к сожалению. Поэтому приходится пользоваться штатными инструментами. Или инструментами более продвинутыми, но без кодирования на 8-ке.

    Спасибо.

    Попутный вопрос, немножко в сторону

    в 77 у меня все ключевые справочники имеют GUID

    можно ли выгрузив например инфу по товарам в плоский список, и воспользовавшись штатной загрузкой из табличного документа в 8-ке, загрузить так, чтобы в 8-ке у обьектов были эти же ГУИДЫ? Или как-то иначе, без программирования?

    Reply ↓
  9. ksnik

    (8)

    ожно ли выгрузив например инфу по товарам в плоский список, и воспользовавшись штатной загрузкой из табличного документа в 8-ке, загрузить так, чтобы в 8-ке у обьектов были эти же ГУИДЫ? Или как-то иначе, без программиров

    вот пример https://infostart.ru/public/394445/

    Reply ↓
  10. Malice

    (8)

    В 7-ке и 8-ке формат uid-ов разный. Я делал 2-мя способами:

    1. добавлял новый общий реквизит к объектам в 8-ке, в него писал uid7, по нему синхронизировал

    2. писал uid7 в комментарий к объекту, по нему поиск при загрузке.

    Без программирования как раз запись в комментарий подойдет.

    Reply ↓
  11. Malice

    (7)

    В принципе, можно. Алгоритм там такой:

    1. Запускаем обработчик ожидания — форма.ОбработкаОжидания(«Выгрузка»,60*2);

    2. В нем — получить список изменений — запрос к таблице 1SUPDTS

    3. Вызов этой обработки с передачей списка — открытьформумодально(«Отчет»,список, каталогИб()+»extformsВыгрузитьJson.ert»);

    4. Удаление изменившихся объектов из списка — — запрос к таблице 1SUPDTS

    5. В 8-ке по регламенту запускается обработка с загрузкой из каталога.

    На больших оборотах подглючивает. 1SUPDTS фиксирует только факт изменения, не соблюдается порядок. Иногда это критично.

    В результате от онлайн отказались, выгрузили/загрузили всё 1 раз.

    Reply ↓
  12. Belomor

    (1) Держи для КД2 правила, делал когда-то, может, пригодится что

    Reply ↓
  13. CheBurator

    (9) спсб.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *