0. Malice 7 09.10.19 19:08 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. CheBurator 3403 10.10.19 01:58 Сейчас в теме
Вот, тут на днях из дописанной ТиС в УНФ перносить надо будет. в УНФ чем загружать? каким инструментом?
5. Malice 7 10.10.19 09:30 Сейчас в теме
(1)
Грузить своей обработкой. Если кратко, то процесс такой:

&НаКлиенте
Процедура Загрузитьjson(Команда)
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ЭтаФорма.Объект.файлЗагрузки, "windows-1251");
таб = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
ЗагрузитьНаСервере (таб);
КонецПроцедуры

&Насервере
процедура ЗагрузитьНаСервере (таб)
Для каждого стр из таб Цикл
если стр.свойство("ссылка") тогда // справочники
если стр.ссылка.TYPE="СправочникСсылка.НормыСписания" тогда
ЗагрузитьНормыСписанияСервер(стр);
иначеесли стр.ссылка.TYPE="СправочникСсылка.Местахранения" тогда
ЗагрузитьМестаХраненияСервер(стр);
//и т.д. для каждого вида, либо если только код+наименование +родитель - одной процедурой
конецесли;
иначеесли стр.свойство("TYPE") тогда // документы
если стр.TYPE="ДокументСсылка.ПриходнаяНакладная" тогда
ЗагрузитьДокументПриходнаяНакладная(стр, "ПриходнаяНакладная");
иначеесли стр.TYPE="ДокументСсылка.РасходнаяНакладная" тогда
// и т.д.
конецесли;
конеццикла;
конецпроцедуры

&Насервере
процедура ЗагрузитьДокументПриходнаяНакладная(стр, вид)
док="";
если не НайтиИЗаполнитьДокумент(стр, вид, док) тогда возврат; конецесли; // тут поиск. По номеру/уиду/как угодно.
шапка = стр.шапка[0];
док.Склад = Справочники.МестаХранения.НайтиПоКоду(шапка.Склад.код);
док.Клиент = Справочники.Контрагенты.НайтиПоКоду(шапка.клиент.код);
док.товары.очистить();
для каждого строка из стр.табличнаячасть цикл
товары = док.товары.Добавить();
товары.товар = справочники.Номенклатура.НайтиПоКоду(строка.Товар.код);
товары.Количество = строка.Количество;
товары.Цена = строка.цена;
товары.Сумма = строка.Сумма;
товары.НДС = строка.НДС;
конеццикла;
ЗаписатьДокумент(стр, док);
конецпроцедуры
8. CheBurator 3403 10.10.19 11:06 Сейчас в теме
(5) хорошо, конечно, на на 8-ке кодя не пишу, к сожалению. Поэтому приходится пользоваться штатными инструментами. Или инструментами более продвинутыми, но без кодирования на 8-ке.
Спасибо.

Попутный вопрос, немножко в сторону
в 77 у меня все ключевые справочники имеют GUID
можно ли выгрузив например инфу по товарам в плоский список, и воспользовавшись штатной загрузкой из табличного документа в 8-ке, загрузить так, чтобы в 8-ке у обьектов были эти же ГУИДЫ? Или как-то иначе, без программирования?
9. ksnik 365 10.10.19 11:43 Сейчас в теме
(8)
ожно ли выгрузив например инфу по товарам в плоский список, и воспользовавшись штатной загрузкой из табличного документа в 8-ке, загрузить так, чтобы в 8-ке у обьектов были эти же ГУИДЫ? Или как-то иначе, без программиров

вот пример https://infostart.ru/public/394445/
13. CheBurator 3403 10.10.19 23:42 Сейчас в теме
10. Malice 7 10.10.19 12:20 Сейчас в теме
(8)
В 7-ке и 8-ке формат uid-ов разный. Я делал 2-мя способами:
1. добавлял новый общий реквизит к объектам в 8-ке, в него писал uid7, по нему синхронизировал
2. писал uid7 в комментарий к объекту, по нему поиск при загрузке.
Без программирования как раз запись в комментарий подойдет.
12. Belomor 96 10.10.19 20:37 Сейчас в теме
(1) Держи для КД2 правила, делал когда-то, может, пригодится что
Прикрепленные файлы:
ts92_unf16.zip
2. CheBurator 3403 10.10.19 02:00 Сейчас в теме
И ссылку на редактор на картинке хорошо бы
4. Malice 7 10.10.19 09:18 Сейчас в теме
(2)
Ссылки на редактор:
https://www.onlinejsonconvert.com/json-editor.php
https://jsoneditoronline.org/
Нужны не для редактирования, а для проверки, что файл валидируется. Помогают при отладке, поиске ошибок. По практике - проблемы бывают из-за символов, переносимых в реквизиты копированием - табуляции, ентеры и проч. Для решения этого добавлена галка на форме - удаляет эти символы из текстовых реквизитов. Немного замедляет выгрузку (процентов на 10), если такой проблемы нет, то можно без нее.
3. Serj1C 477 10.10.19 07:51 Сейчас в теме
а чем не устроила типовая конвертация данных 2.0?
6. Malice 7 10.10.19 09:38 Сейчас в теме
(3) Типовая конвертация не работает с самописными конфигурациями. Документов было много, более 3т в сутки. Из типовых конфигураций выгрузить штатно тоже не вышло.. Висит по 2 дня, потом падает с ошибкой. Здесь формат компактнее, запись в файл через Scripting.FileSystemObject - быстрее, нет проблем с длинными строками.
7. ksnik 365 10.10.19 10:36 Сейчас в теме
А можете выложить пример обработки в автоматическом режиме для онлайн выгрузки по регистрации изменений в базе?
11. Malice 7 10.10.19 12:29 Сейчас в теме
(7)
В принципе, можно. Алгоритм там такой:
1. Запускаем обработчик ожидания - форма.ОбработкаОжидания("Выгрузка",60*2);
2. В нем - получить список изменений - запрос к таблице 1SUPDTS
3. Вызов этой обработки с передачей списка - открытьформумодально("Отчет",список, каталогИб()+"extforms\ВыгрузитьJson.ert");
4. Удаление изменившихся объектов из списка - - запрос к таблице 1SUPDTS
5. В 8-ке по регламенту запускается обработка с загрузкой из каталога.

На больших оборотах подглючивает. 1SUPDTS фиксирует только факт изменения, не соблюдается порядок. Иногда это критично.
В результате от онлайн отказались, выгрузили/загрузили всё 1 раз.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист/Cтарший программист 1С
Москва
зарплата от 100 000 руб. до 250 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день