|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
olegon7 20.09.16 - 16:37 | Здравствуйте, подскажите как реализовать иерархию в json.
от сервиса буду получать ответ в формате json. данные в нем связаны иерархически. Данные записаны в json массивом. На основе этих данных буду строить отчет с группировкой. | ||
Asmody 1 - 20.09.16 - 16:40 | И как вы массивом передаете иерархические данные? *мне чисто для образования | ||
olegon7 2 - 20.09.16 - 16:43 | |||
Asmody 3 - 20.09.16 - 16:48 | (2) Передавай массив пар. | ||
DrShad 4 - 20.09.16 - 16:53 | поставим закладочкутоже сейчас вштырили всякие json? php и иже с ними для создания json данных пользую обработку 1С:JSON. JavaScript Object Notation парсер и сериализатор. Александра Переверзева | ||
olegon7 5 - 20.09.16 - 16:53 | (3) не понял, можно поподробнее | ||
DrShad 6 - 20.09.16 - 16:54 | тут все зависит от того как ты потом отражать будешь иерархию | ||
olegon7 7 - 20.09.16 - 17:03 | (6) принимаю json преобразовываю в тз ,
тз использую как внешний источник для построения отчета в скд | ||
olegon7 8 - 20.09.16 - 17:04 | в отчете обычная группировка.
т.е. Подстанция __________Фидер _______________ТП т.е . элемент коллекции может быть одним из этих значений | ||
DrShad 9 - 20.09.16 - 17:05 | так тут не 1С-ский сервис, а внешнийи как на внешнем ресурсе отражена иерархия? да и зачем в СКД пихать иерархию если ее можно в самой СКД построить как угодно | ||
DrShad 10 - 20.09.16 - 17:05 | ну так выгружай кроме самого элемента его родительский вот и заготовка для иерархии | ||
Ластик 11 - 20.09.16 - 17:08 | (0) Массив в массиве приходит, если я правильно понял вопрос, таким образом в json иерархия и строится как я понял. Сам не писал приходилось обмен допиливать где именно так дело было, приходил файл с вложенными массивами. | ||
DrShad 12 - 20.09.16 - 17:09 | у тебя же есть ChildNode и ParentNode
в СКД создаешь набор данных и соединяешь его сам с собой по ChildNode = ParentNode
иерархия готова | ||
DrShad 13 - 20.09.16 - 17:11 | кстати обработка из (4) умеет также читать json | ||
olegon7 14 - 20.09.16 - 17:11 | (13) попробую | ||
olegon7 15 - 20.09.16 - 17:12 | (12) Массив в массиве ? В какой объект 1с его можно преобразовать? | ||
olegon7 16 - 20.09.16 - 17:13 | (11) Массив в массиве ? В какой объект 1с его можно преобразовать? | ||
DrShad 17 - 20.09.16 - 17:19 | да хоть в ТЗ, вот только ее нельзя будет в СКД запихнуть | ||
AceVi 18 - 20.09.16 - 17:58 | |||
Torquader 19 - 20.09.16 - 18:47 | Нет, а в чём проблема передачи иерархии ?
У каждого элемента есть массив дочерних - назовём его Children и всё. Вот когда нужно будет передать граф или группу, тогда придётся уже искать идентификаторы и чесать репу. Аналогом иерархии можно рассматривать объект ДеревоЗначений из 1С - оно должно успешно сериализоваться в JsOn. | ||
olegon7 20 - 21.09.16 - 08:54 | (12) т.е . 2 создать набора данных (тз) , запихнуть его
в скд. И соединить эти 2 набора по связи ChildNode = ParentNode левым соединением? я правильно понял? | ||
olegon7 21 - 21.09.16 - 09:00 | структура json {"Items":[{"ObjectType":"Фидер","ObjectCode":"1253-ав-2332","ObjectName":"10 кВ Ф-662","TimeStamp":"01.06.2015","PreviousValue":423423,"NextValue":254235,"Difference":null,"ParentCode":4376-ап-232}, ...вот этот json преобразуется в массив. массив в скд не передашь. как поменять структуру json что бы получилась тз? если элемент верхнего уровня ParentCode какое должен иметь значение "" или null? | ||
DrShad 22 - 21.09.16 - 09:23 | (20) 1 набор данных и соединить его сам с собой | ||
DrShad 23 - 21.09.16 - 09:25 | (21) ну во-первых это не массив, а структура | ||
olegon7 24 - 21.09.16 - 09:31 | (22) в скд можно соединять наборы только левы соединением насколько я помню....
почему не массив.... Вот так я получаю ответ от сервиса Строка=Ответ.ПолучитьТелоКакСтроку("UTF-8"); ЧтениеJSON= новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(Строка); f=ПрочитатьJSON(ЧтениеJSON); мас=f.Items; Items это массив как раз таки | ||
AceVi 25 - 21.09.16 - 09:37 | (22) А если там не 1 уровень подчиненности а 3? Иерархия строиться только в рекурсии и не в запросах. В запросах можно использовать только заранее созданную иерархию в справочниках.
(24) Ок Items - массив - а в массиве что храниться? а там Структура - потому что у каждого элемента помимо значения есть наименование\ключ. | ||
DrShad 26 - 21.09.16 - 09:38 | (24) а вот тут массив | ||
DrShad 27 - 21.09.16 - 09:39 | (25) а по фигу сколько уровней вложенности соединением набора данных сам с собой получаем всю описанную структуру иерархии сколько бы там не было уровней | ||
DrShad 28 - 21.09.16 - 09:42 | |||
olegon7 29 - 21.09.16 - 09:49 | Хорошо я получу массив из сервиса, мне этот массив надо будет преобразовать в тз? чтобы запихнуть в скд во внешний набор данных так?
потому что кроме этого набора я в отчете буду использовать еще два . Один из Mysql а второй непосредственно из 1с. И мне их тоже надо будет соединить по полю ObjectCode . Причем соединять надо только элементы нижнего уровня из первого набора с элементами из второго и третьего набра по полю ObjectCode. | ||
DrShad 30 - 21.09.16 - 10:00 | (29) ну да источником набора может быть в твоем случае только ТЗ Рекламное место пустует | ||
DrShad 31 - 21.09.16 - 10:00 | как преобразовать массив структур в ТЗ надо объяснять? | ||
AceVi 32 - 21.09.16 - 10:16 | (27) Это не левое соединение в запросе - это именно связь наборов данных. И иерархия там строиться не запросом, и в приведенном тобой примере(1 ссылка) не заполнена колонка "параметр" по которому собственно и определяеться иерархия.
Грубо говоря - в таком случае для каждой строки из "источника связи" будет выполняться весь запрос из "приемника связи" в который будет передан параметр(например код). Просто левое соединение не сработает. | ||
DrShad 33 - 21.09.16 - 10:17 | |||
DrShad 34 - 21.09.16 - 10:26 | |||
olegon7 35 - 21.09.16 - 10:37 | (31) Таким образом?
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт тзДанные = Новый ТаблицаЗначений; Для Каждого ЭлементМассива Из мсДанные Цикл  // Рисуем колонки для таблицы Если тзДанные.Колонки.Количество() = 0 Тогда Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ); КонецЦикла; КонецЕсли;  // Добавляем данные в таблицу НоваяСтрока = тзДанные.Добавить(); Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение; КонецЦикла; КонецЦикла; Возврат тзДанные; КонецФункции | ||
DrShad 36 - 21.09.16 - 10:38 | (35) в принципе да, только учти в json массиве у тебя не обязательно в первом же элементе будут все ключи структуры | ||
olegon7 37 - 21.09.16 - 10:43 | (31) у меня в итоге будут 3 набора данных
первый набор- из сервиса (тз1) второй набор - из mysql (тз2) третий набор - из 1 с (тз3) как расставить связи в скд между наборами первая связь понятна тз1 - тз1 левое соединение по полям ObjectCode = ParentCodeкак организовать связь с двумя другими наборами? | ||
DrShad 38 - 21.09.16 - 10:59 | а связь ли нужна? может объединения хватит? | ||
DrShad 39 - 21.09.16 - 10:59 | потому как связь то левая, но слишком часто она сваливается во внутреннее соединение | ||
olegon7 40 - 21.09.16 - 11:07 | (38) попробую объяснить
в тз2 и в тз2 содержаться абоненты которые тоже должны быть подчинены самому нижнему уровню из т31. а связываются они по коду ObjectCode. Т е данные из тз2 и тз3 еще один уровень получается четвертый. В тз1 может хранится только 3 уровня вложенности. | ||
DrShad 41 - 21.09.16 - 11:29 | (40) не видя ваших данных что либо объяснять бессмысленно, все наводки вам дали - дерзайте | ||
olegon7 42 - 21.09.16 - 12:10 | (41) 1)скажите элемент верхнего уровня в поле ParentCode
Заполнять чем? null или пустым значением? 2)если я сначала объединю все 3 набора , а потом сделаю соединение самим с собой по полю code. Все пройдет правильно? Что первично соединение или объединение? | ||
DrShad 43 - 21.09.16 - 12:29 | а хз, нужно эксперементировать | ||
olegon7 44 - 22.09.16 - 14:13 | (43) получил тз от сервиса соединяю само с собой получаю ошибку не найдено поле замены "КодОбъекта" что делать ? http://s46.radikal.ru/i111/1609/92/06e8d0e92fdf.jpg | ||
DrShad 45 - 22.09.16 - 14:16 | для начала показать описание набора данных | ||
olegon7 46 - 22.09.16 - 15:36 | (45) разобрался с этой ошибкой описание полей в скд должно совпадать с описанием полей в тз
сейчас другая ошибка соединяю набор сам с собой получаю в ответ http://s017.radikal.ru/i412/1609/c0/5a39e2427f9b.jpg | ||
olegon7 47 - 22.09.16 - 15:40 | |||
AceVi 48 - 22.09.16 - 16:10 | (46) По русски же все пишет.
Зайди на вкладку Связь наборов данных там есть 2 колонки которые так называются вот их и заполни. И читай внимательно те ссылки которые тут в теме. особенно ту что ведет в гугл) | ||
olegon7 49 - 22.09.16 - 16:44 | (48) Начальное значение связи набора данных заполнил "" строкой Я так понимаю параметр отвечающий за верхний уровень чтобы система понимала у меня у элемента верхнего уровня поле ParentCode пустая строкаошибка пропала , но в отчет ничего не выводит. Что не так сделал? подскажите | ||
AceVi 50 - 22.09.16 - 17:12 | (49) Не знаю что не так. я твои ТЗ и отчет не видел.
выгрузи ТЗ в эксел(надеюсь знаешь как быстро сделать? это все стандартными способами делается за 3 секунды) И обработку свою на почту мне вышли. | ||
AceVi 51 - 22.09.16 - 17:13 | (50) Да даже можно в 1С формате ТЗ сохранить. | ||
DrShad 52 - 22.09.16 - 18:08 | (50) а вот я бы так не смог - уже очень давно ничего не делаю за других )))))) | ||
olegon7 53 - 23.09.16 - 08:49 | (51) отправил вам на почту , посмотрите пожалуйста...
если не получится буду работать с тз запросами еще до помещения во внешний источник скд... | ||
AceVi 54 - 23.09.16 - 11:28 | (53) Как будет время гляну. предположительно после 15. | ||
olegon7 55 - 23.09.16 - 13:33 | Написал запрос
Запрос.Текст = "ВЫБРАТЬ
| Табл1.ObjectName,
| Табл1.ObjectCode,
| Табл1.ParentCode,
| Табл1.RashodGolovnoi,
| Табл1.RashodOtchod,
| Табл1.PoleznyiOptpuskVsego,
| Табл1.PoleznyiOtpuskYur,
| Табл1.PoleznyiOtpuskByt
|ПОМЕСТИТЬ Табл1
|ИЗ
| &Табл1 КАК Табл1
|;
|
////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Табл2.ObjectName,
| Табл2.ObjectCode,
| Табл2.ParentCode,
| Табл2.RashodGolovnoi,
| Табл2.RashodOtchod,
| Табл2.PoleznyiOptpuskVsego,
| Табл2.PoleznyiOtpuskYur,
| Табл2.PoleznyiOtpuskByt
|ПОМЕСТИТЬ Табл2
|ИЗ
| &Табл2 КАК Табл2
|;
|
////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Табл1.ObjectName,
| Табл1.ObjectCode,
| Табл1.ParentCode,
| Табл1.RashodGolovnoi,
| Табл1.RashodOtchod,
| Табл1.PoleznyiOptpuskVsego,
| Табл1.PoleznyiOtpuskYur,
| Табл1.PoleznyiOtpuskByt,
| Табл2.ObjectName КАК ObjectName1,
| Табл2.ObjectCode КАК ObjectCode1,
| Табл2.ParentCode КАК ParentCode1,
| Табл2.RashodGolovnoi КАК RashodGolovnoi1,
| Табл2.RashodOtchod КАК RashodOtchod1,
| Табл2.PoleznyiOptpuskVsego КАК PoleznyiOptpuskVsego1,
| Табл2.PoleznyiOtpuskYur КАК PoleznyiOtpuskYur1,
| Табл2.PoleznyiOtpuskByt КАК PoleznyiOtpuskByt1
|ИЗ
| Табл1 КАК Табл1
| ЛЕВОЕ СОЕДИНЕНИЕ Табл2 КАК Табл2
| ПО Табл1.ObjectCode = Табл2.ParentCode";
Запрос.УстановитьПараметр("Табл1", Тз1);
Запрос.УстановитьПараметр("Табл2", Тз1);
Результат = Запрос.Выполнить().Выгрузить();
Ошибка тип не может быть выбран в запросе
на вторую строку запроса
тз1 создал программно , указав принудительно типы полей | ||
olegon7 56 - 23.09.16 - 14:52 | (52) (54)
вроде бы получилось, загвоздка была в типе данных...как я и думал ..http://s019.radikal.ru/i627/1609/8c/5c68f8565ac2.jpg | ||
DrShad 57 - 23.09.16 - 16:05 | ну вот, можешь, когда захочешь |
|
Список тем форума
|