Вход | Регистрация


1С:Предприятие ::

Метки:

Выгрузка данных из 1с в формате json

Я
   falselight
 
12.09.17 - 07:49
Необходимо реализовать выгрузку из 1с необходимых данных в формате
json, для отправки их автоматически на http. Со слов постановщика
задачи, на стороне отправки АПИ. Делал ли кто подобно, или делает ли
сейчас? Поделитесь пожалуйста информацией на разработку, для меня
это новое, и ранее я такого не делал.
 
 
   falselight
 
1 - 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 ?
   Amra
 
2 - 12.09.17 - 07:59
Берешь лист бумаги и пишешь: "Прошу уволить меня по собственному желанию. Дата сегодняшняя, подпись - "ЛивингСтар"
   falselight
 
3 - 12.09.17 - 08:00
Так как я не занимался этим, не понятно с чего начать.
   Юрий Лазаренко
 
4 - 12.09.17 - 08:02
Для начала сформируй текст параметров запроса в формате JSON, ищи в СП по ключевому слову ЗаписьJSON.
   h-sp
 
5 - 12.09.17 - 08:05
(3) ну, в общих модулях разыскиваешь процедуру выгрузка в json. Находишь, пользуешься.
   falselight
 
6 - 12.09.17 - 08:05
(4) В инете нащел всяких статей на эту тему.
Нужно разбираться.
Текст параметров запроса, это то есть выборка нужных
данных из 1с с формированием их в запрос (1)?
А потом как то нужно его выполнить что бы данные передались
по http?
   Lexey_
 
7 - 12.09.17 - 08:07
(6) сделай уже сам что-нибудь раз в жизни
   falselight
 
8 - 12.09.17 - 08:14
Кто понимает о чем речь, можете сформулировать перечень
действий, для данной разработки? Алгоритм действий,
что бы можно было от него отталкиваться, искать решения,
выполнять.
   Ranger_83
 
9 - 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
на мисте все это есть, тут даже отправка без формирования заголовка запроса - все чисто в одной строке
   Филиал-msk
 
13 - 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)
Почему?
   Maniac
 
18 - 12.09.17 - 09:06
(0) сделаю. пиши. Писали парсеры. Сделаем выгрузку и загрузку сразу.
Контакты на https://subsystems.ru
   Maniac
 
19 - 12.09.17 - 09:07
Есть готовое решение под поставщика ELEVEL
   Asmody
 
20 - 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Запрос
   falselight
 
23 - 12.09.17 - 09:50
(20) да
   Admin_Net_1C
 
24 - 12.09.17 - 09:53
   Я_в_каске
 
25 - 12.09.17 - 09:55
(22) то что надо ТСу. (24) статья хорошая но ему это не надо пока.
   falselight
 
26 - 12.09.17 - 10:02
(22) Нужно поразбираться с этой постановкой!
   falselight
 
27 - 13.09.17 - 06:45
Если в (1) строка http, которая отправляет данные при вызове, нельзя ли в ней менять значения переменных и отправлять?

Не пойму Json зачем?
   МимохожийОднако
 
28 - 13.09.17 - 06:58
(27) Тебе это не надо.
   d4rkmesa
 
29 - 13.09.17 - 08:18
(0) Какая платформа? 8-ку желательно апнуть до 8.3.6, чтобы появилась возможность работать через ЗаписьJSON. Иначе скорость будет несильно высокая и будут проблемы с совместимостью.
   v77
 
30 - 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}]}]
   ildary
 
31 - 13.09.17 - 09:21
(27) Ты спрашиваешь нашего разрешения на замену переменных в строке? Конечно даем.
И почему спрашиваешь у нас, зачем твоему поставщику json? Ему виднее наверное.
   rudnitskij
 
32 - 13.09.17 - 09:58
ТС бы еще спросил "какие данные мне передавать?"
   falselight
 
33 - 13.09.17 - 14:46
(29) Платформа 8.3.10

что у вас за дохлый релиз?
 
  Рекламное место пустует
   falselight
 
34 - 13.09.17 - 17:09
Скажите, а как этот json связан с тектовой строкой что передается в http ?
   Parenek_88
 
35 - 13.09.17 - 17:13
(34) это и есть текстовая строка
   spiller26
 
36 - 13.09.17 - 17:18
(34) Передается длиииинная строка.
По сути это массив структур в строчку.
   spiller26
 
37 - 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
   mexanik_96
 
38 - 13.09.17 - 17:25
(37) все давно в платформе есть уже, и работает стабильнее
   spiller26
 
39 - 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
   spiller26
 
40 - 13.09.17 - 17:26
(38) Не всегда срабатывает, если честно. Мне пришлось этот метод использовать.
   mexanik_96
 
41 - 13.09.17 - 17:29
(40) ну-ну, скажи еще быстрее работает и двойные кавычки в поле обрабатывает
   spiller26
 
42 - 13.09.17 - 17:34
(41) Напиши лучше.
   spiller26
 
43 - 13.09.17 - 17:37
(41) Как мне нужно было так и писалось.
   Valkyrie
 
44 - 13.09.17 - 19:45
(42) ПрочитатьJSON же
   Лефмихалыч
 
45 - 13.09.17 - 22:23
де-то было, ща погодь
   Лефмихалыч
 
46 - 13.09.17 - 22:26
на, держи, эти трое преобразовывают структуру в текст JSON. Унутре структуры могут быть другие структуры и массивы. А вот, чо будет, если там таблица окажется или еще что-то - не помню. Наверное всё это дружно скопытится.


// жаль, что нет штатного способа получить из структуры/соответствия текст в формате JSON


Функция ПараметрыЗапросаПреобразоватьСтруктуруВТекст(ПараметрыЗапроса)

    ПараметрыЗапросаТекст = "{ ";
    Для каждого КлючЗначение Из ПараметрыЗапроса Цикл
        
        ТекущийПараметрТекст = """"+КлючЗначение.Ключ+"""";
        
        ЗначениеJSON = ПараметрыЗапросаПреобразоватьЗначениеВТекст(КлючЗначение.Значение);
        
        ПараметрыЗапросаТекст = ПараметрыЗапросаТекст + ТекущийПараметрТекст + " : "+ ЗначениеJSON + Символы.ПС;
        
    КонецЦикла;
    
    ПараметрыЗапросаТекст = СтрЗаменить(СокрЛП(ПараметрыЗапросаТекст), Символы.ПС, ", ");
    
    ПараметрыЗапросаТекст = ПараметрыЗапросаТекст + " }";

    Возврат ПараметрыЗапросаТекст;
    
КонецФункции

Функция ПараметрыЗапросаПреобразоватьЗначениеВТекст(Значение)

    ЗначениеJSON = "null";
    
    ТипЗначения = ТипЗнч(Значение);
    
    Если ТипЗначения = ТИп("Структура") Тогда
        ЗначениеJSON = ПараметрыЗапросаПреобразоватьСтруктуруВТекст(Значение);
    ИначеЕсли ТипЗначения = ТИп("Массив") Тогда
        ЗначениеJSON = ПараметрыЗапросаПреобразоватьМассивВТекст(Значение);
    ИначеЕсли Значение = Неопределено Тогда
        ЗначениеJSON = "null";
    Иначе
        // дату и строку - в кавычки, остальное - нет

        ЗначениеJSON = Формат(Значение, "ЧГ=0; ДФ=yyyy-MM-ddThh:mm:ss; ДП=null; БЛ=false; БИ=true");
        
        ЗавернутьВКавычки = Ложь;
        Если ТипЗначения = Тип("Дата") Тогда
            Если не ЗначениеЗаполнено(Значение) Тогда
                ЗначениеJSON = "null";
            Иначе
                ЗавернутьВКавычки = Истина;
            КонецЕсли;
        ИначеЕсли ТипЗначения = ТИп("Строка") Тогда
            ЗавернутьВКавычки = Истина;
        КонецЕсли;
        
        Если ЗавернутьВКавычки Тогда
            ЗначениеJSON = """"+ЗначениеJSON+"""";
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат ЗначениеJSON;
    
КонецФункции

Функция ПараметрыЗапросаПреобразоватьМассивВТекст(Значение)

    ПараметрыЗапросаТекст = "[ ";
    Для каждого Элемент Из Значение Цикл
        
        ЭлементJSON = ПараметрыЗапроса_ПреобразоватьЗначениеВТекст(Элемент);
        
        ПараметрыЗапросаТекст = ПараметрыЗапросаТекст + ЭлементJSON + Символы.ПС;
        
    КонецЦикла;
    
    ПараметрыЗапросаТекст = СтрЗаменить(СокрЛП(ПараметрыЗапросаТекст), Символы.ПС, ", ");
    
    ПараметрыЗапросаТекст = ПараметрыЗапросаТекст + " ]";

    Возврат ПараметрыЗапросаТекст;    

КонецФункции


   Лефмихалыч
 
47 - 13.09.17 - 22:27
А, использовать так:

ТекстЖСОН = ПараметрыЗапросаПреобразоватьСтруктуруВТекст(КакаяТоСтруктураСПотрохами);



Список тем форума
Рекламное место пустует  
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует