Универсальная выгрузка данных из 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 не будет опубликован. Обязательные поля помечены *