|
Выгрузка данных из 1с в формате json | ☑ | ||
---|---|---|---|---|
0
falselight
12.09.17
✎
07:49
|
Необходимо реализовать выгрузку из 1с необходимых данных в формате
json, для отправки их автоматически на http. Со слов постановщика задачи, на стороне отправки АПИ. Делал ли кто подобно, или делает ли сейчас? Поделитесь пожалуйста информацией на разработку, для меня это новое, и ранее я такого не делал. |
|||
1
falselight
12.09.17
✎
07:55
|
Пример, запроса отправки
https://zzz.ru/api/set/accruals/?login=ttt&password=qqq123&ccc=[{"tsg_id":1,"objects":[{"apartment_number":"1","month":"2016-11-00","object_type":"квартира","room_number":"","accrual":117.0,"total_debt":231.0}]}] При вводе в строку браузера, выходит сообщение message ok! То есть подобным образом нужно посылать данные из 1с видимо в таком формате. Подскажите пожалуйста с чего начать это делать????? Ранее там был формат .csv, это понятно обмен через текстовый файл, но как реализовывать отправку данных по json ? |
|||
2
Amra
12.09.17
✎
07:59
|
Берешь лист бумаги и пишешь: "Прошу уволить меня по собственному желанию. Дата сегодняшняя, подпись - "ЛивингСтар"
|
|||
3
falselight
12.09.17
✎
08:00
|
Так как я не занимался этим, не понятно с чего начать.
|
|||
4
Юрий Лазаренко
12.09.17
✎
08:02
|
Для начала сформируй текст параметров запроса в формате JSON, ищи в СП по ключевому слову ЗаписьJSON.
|
|||
5
h-sp
12.09.17
✎
08:05
|
(3) ну, в общих модулях разыскиваешь процедуру выгрузка в json. Находишь, пользуешься.
|
|||
6
falselight
12.09.17
✎
08:05
|
(4) В инете нащел всяких статей на эту тему.
Нужно разбираться. Текст параметров запроса, это то есть выборка нужных данных из 1с с формированием их в запрос (1)? А потом как то нужно его выполнить что бы данные передались по http? |
|||
7
Lexey_
12.09.17
✎
08:07
|
(6) сделай уже сам что-нибудь раз в жизни
|
|||
8
falselight
12.09.17
✎
08:14
|
Кто понимает о чем речь, можете сформулировать перечень
действий, для данной разработки? Алгоритм действий, что бы можно было от него отталкиваться, искать решения, выполнять. |
|||
9
Ranger_83
12.09.17
✎
08:16
|
(0) Надеюсь, ты не за деньги это делаешь...
|
|||
10
Злопчинский
12.09.17
✎
08:40
|
(8) начальник ИТ обычно как раз деньги получает за формулировки для подчиненных
|
|||
11
бегинер
12.09.17
✎
08:41
|
(8)
1) программно сформировать в 1с нужнные данные, выгрузить их в формат json 2) полученные данные программно отправить по http |
|||
12
бегинер
12.09.17
✎
08:42
|
на мисте все это есть, тут даже отправка без формирования заголовка запроса - все чисто в одной строке
|
|||
13
Филиал-msk
12.09.17
✎
08:57
|
(6) >Нужно разбираться
Да неужели? |
|||
14
Бычье сердце
12.09.17
✎
09:03
|
(0)
1. Создаешь http сервис. 2. Публикуешь. 3. Тестишь. 4. Вводишь в опытную эксплуатацию Если есть скайп или почта, могу выслать пример простейшего сервиса. |
|||
15
бегинер
12.09.17
✎
09:04
|
тут даже можно тупо самому собрать строку с данными - ручками , без функций по работе с форматом json, в новой платформе уже есть они
|
|||
16
бегинер
12.09.17
✎
09:04
|
(14) мимо :)
|
|||
17
Бычье сердце
12.09.17
✎
09:05
|
(16)
Почему? |
|||
18
Maniac
12.09.17
✎
09:06
|
(0) сделаю. пиши. Писали парсеры. Сделаем выгрузку и загрузку сразу.
Контакты на https://subsystems.ru |
|||
19
Maniac
12.09.17
✎
09:07
|
Есть готовое решение под поставщика ELEVEL
|
|||
20
Asmody
12.09.17
✎
09:26
|
(1) Это прям пример всамделищного запроса?
|
|||
21
бегинер
12.09.17
✎
09:41
|
(17) ему нужно отправить данные, а ты хочешь приемник создавать. плюс он ошибся - "на стороне отправки АПИ"
былоб АПи - все готово уже было на этапе отправки. а так есть готовый сервак уже - который принимает по http в нужном формате по АПИ. вот ему туда надо и скормить данные |
|||
22
Скиурус
12.09.17
✎
09:50
|
Первая ссылка в гугле очень даже хороша http://v8.1c.ru/o7/201410json/index.htm
А вообще формируешь в 1Се массив структур (или соответствий, если там название какого-нибудь поля начинается с цифры) в соответствии с API, потом с помощью объекта ЗаписьJSON кодируешь это все в строку, а потом строку послыаешь с помощью HTTPСодинение и HTTPЗапрос |
|||
23
falselight
12.09.17
✎
09:50
|
(20) да
|
|||
24
Admin_Net_1C
12.09.17
✎
09:53
|
(0) очень хорошая статья на тему
http://xn----1-bedvffifm4g.xn--p1ai/articles/2017-09-07-exchange-with-internet-services/ |
|||
25
Я_в_каске
12.09.17
✎
09:55
|
(22) то что надо ТСу. (24) статья хорошая но ему это не надо пока.
|
|||
26
falselight
12.09.17
✎
10:02
|
(22) Нужно поразбираться с этой постановкой!
|
|||
27
falselight
13.09.17
✎
06:45
|
Если в (1) строка http, которая отправляет данные при вызове, нельзя ли в ней менять значения переменных и отправлять?
Не пойму Json зачем? |
|||
28
Мимохожий Однако
13.09.17
✎
06:58
|
(27) Тебе это не надо.
|
|||
29
d4rkmesa
13.09.17
✎
08:18
|
(0) Какая платформа? 8-ку желательно апнуть до 8.3.6, чтобы появилась возможность работать через ЗаписьJSON. Иначе скорость будет несильно высокая и будут проблемы с совместимостью.
|
|||
30
v77
13.09.17
✎
08:37
|
(27) //Не пойму Json зачем?
затем, что на серваке стоит программа, которая читает этот JSON. Вот и отправляй JSON. JSON это просто текст. вот он у тебя в (1) [{"tsg_id":1,"objects":[{"apartment_number":"1","month":"2016-11-00","object_type":"квартира","room_number":"","accrual":117.0,"total_debt":231.0}]}] |
|||
31
ildary
13.09.17
✎
09:21
|
(27) Ты спрашиваешь нашего разрешения на замену переменных в строке? Конечно даем.
И почему спрашиваешь у нас, зачем твоему поставщику json? Ему виднее наверное. |
|||
32
rudnitskij
13.09.17
✎
09:58
|
ТС бы еще спросил "какие данные мне передавать?"
|
|||
33
falselight
13.09.17
✎
14:46
|
(29) Платформа 8.3.10
что у вас за дохлый релиз? |
|||
34
falselight
13.09.17
✎
17:09
|
Скажите, а как этот json связан с тектовой строкой что передается в http ?
|
|||
35
Parenek_88
13.09.17
✎
17:13
|
(34) это и есть текстовая строка
|
|||
36
spiller26
13.09.17
✎
17:18
|
(34) Передается длиииинная строка.
По сути это массив структур в строчку. |
|||
37
spiller26
13.09.17
✎
17:23
|
(34) Вот держи код формирования JSON, которым я пользуюсь
#Region Формирование_JSON &НаСервере Функция СформироватьСтрокуJSON(Объект) Экспорт СтрокаJSON = ""; Если ТипЗнч(Объект) = Тип("Массив") Тогда СтрокаJSON = СформироватьСтрокуJSONИзМассива(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("Структура") Тогда СтрокаJSON = СформироватьСтрокуJSONИзСтруктуры(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("ТаблицаЗначений") Тогда // преобразуем таблицу значений в массив структур - работает дольше, но кода меньше // если нужна скорость, то нужно отдельно обработать таблицу значений СоставСтруктуры = ""; Для каждого Колонка Из Объект.Колонки Цикл СоставСтруктуры = СоставСтруктуры + ?(ЗначениеЗаполнено(СоставСтруктуры), ",", "") + Колонка.Имя; КонецЦикла; МассивСтрок = Новый Массив; Для каждого Строка Из Объект Цикл СтруктураКолонок = Новый Структура(СоставСтруктуры); ЗаполнитьЗначенияСвойств(СтруктураКолонок, Строка); МассивСтрок.Добавить(СтруктураКолонок); КонецЦикла; СтрокаJSON = СформироватьСтрокуJSONИзМассива(МассивСтрок); КонецЕсли; Возврат СтрокаJSON; КонецФункции &НаСервере Функция СформироватьСтрокуJSONИзМассива(Объект) СтрокаJSON = "["; Для каждого Элемент Из Объект Цикл СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент) + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "]"; КонецФункции &НаСервере Функция СформироватьСтрокуJSONИзСтруктуры(Объект) СтрокаJSON = "{"; Для каждого Элемент Из Объект Цикл Если Элемент.Значение = "" Тогда Продолжить; КонецЕсли; СтрокаJSON = СтрокаJSON + """" + Элемент.Ключ + """" + ":"; Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда //СтрокаJSON = СтрокаJSON + """" + URLEncode(Элемент.Значение) + """"; СтрокаJSON = СтрокаJSON + """" + КодироватьСтроку(Элемент.Значение, СпособКодированияСтроки.КодировкаURL) + """"; ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент.Значение), Символы.НПП, ""); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение, "БЛ=false; БИ=true"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда // преобразование в unixtime СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение - Дата(1970,1,1,1,0,0), "ЧГ=0"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Массив") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("ТаблицаЗначений") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); Иначе СтрокаJSON = СтрокаJSON + """" + КодироватьСтроку(Строка(Элемент.Значение), СпособКодированияСтроки.КодировкаURL) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "}"; КонецФункции #EndRegion |
|||
38
mexanik_96
13.09.17
✎
17:25
|
(37) все давно в платформе есть уже, и работает стабильнее
|
|||
39
spiller26
13.09.17
✎
17:25
|
(34) Вот чтение
#Region JSON &НаСервере Функция ПрочитатьJSONИзФайла(пСтрокаJSON) Экспорт ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(пСтрокаJSON); РезультатЧтения = Неопределено; СформироватьДерево(ЧтениеJSON, РезультатЧтения); ЧтениеJSON.Закрыть(); Возврат РезультатЧтения; КонецФункции &НаСервере Процедура СформироватьДерево(ЧтениеJSON, Дерево) ИмяСвойства = Неопределено; Пока ЧтениеJSON.Прочитать() Цикл TипJSON = ЧтениеJSON.ТипТекущегоЗначения; Если TипJSON = ТипЗначенияJSON.НачалоОбъекта ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив); Если ТипЗнч(Дерево) = Тип("Массив") Тогда Дерево.Добавить(НовыйОбъект); ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда Дерево.Вставить(ИмяСвойства, НовыйОбъект); КонецЕсли; СформироватьДерево(ЧтениеJSON, НовыйОбъект); Если Дерево = Неопределено Тогда Дерево = НовыйОбъект; КонецЕсли; ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда ИмяСвойства = ЧтениеJSON.ТекущееЗначение; ИначеЕсли TипJSON = ТипЗначенияJSON.Число ИЛИ TипJSON = ТипЗначенияJSON.Строка ИЛИ TипJSON = ТипЗначенияJSON.Булево ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда Если ТипЗнч(Дерево) = Тип("Массив") Тогда Дерево.Добавить(ЧтениеJSON.ТекущееЗначение); ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") Тогда Дерево.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение); КонецЕсли; Иначе Возврат; КонецЕсли; КонецЦикла; КонецПроцедуры #EndRegion |
|||
40
spiller26
13.09.17
✎
17:26
|
(38) Не всегда срабатывает, если честно. Мне пришлось этот метод использовать.
|
|||
41
mexanik_96
13.09.17
✎
17:29
|
(40) ну-ну, скажи еще быстрее работает и двойные кавычки в поле обрабатывает
|
|||
42
spiller26
13.09.17
✎
17:34
|
(41) Напиши лучше.
|
|||
43
spiller26
13.09.17
✎
17:37
|
(41) Как мне нужно было так и писалось.
|
|||
44
Valkyrie
13.09.17
✎
19:45
|
(42) ПрочитатьJSON же
|
|||
45
Лефмихалыч
13.09.17
✎
22:23
|
де-то было, ща погодь
|
|||
46
Лефмихалыч
13.09.17
✎
22:26
|
на, держи, эти трое преобразовывают структуру в текст JSON. Унутре структуры могут быть другие структуры и массивы. А вот, чо будет, если там таблица окажется или еще что-то - не помню. Наверное всё это дружно скопытится.
|
|||
47
Лефмихалыч
13.09.17
✎
22:27
|
А, использовать так:
ТекстЖСОН = ПараметрыЗапросаПреобразоватьСтруктуруВТекст(КакаяТоСтруктураСПотрохами); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |