Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Не выгружает данные в файл формата JSON как надо

Не выгружает данные в  файл формата JSON как надо
Я
   menone_dastan
 
03.12.19 - 02:44
Всем привет. Есть файл шаблон, формата json. Не получается выгрузить данные его подобию, помогите...

{
    "title": "Домашний хлеб",
    "descriptions": "",
    "unit": "кг",
    "price": 100,
    "amount": 50,
    "categories": "Мучное изделие"
}
{
    "title": "Хлеб ржаной",
    "descriptions": "",
    "unit": "шт",
    "price": 120,
    "amount": 70,
    "categories": "Мучное изделие"
}
{
    "title": "Хлеб чесночны",
    "descriptions": "",
    "unit": "л",
    "price": 80,
    "amount": 70,
    "categories": "Мучное изделие"
}

Мой код:

Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад,
            |    ТоварыНаСкладахОстатки.КоличествоОстаток,
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель КАК Родитель,
            |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
            |    ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения
            |ИЗ
            |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних КАК ЦеныНоменклатурыМагазиновСрезПоследних
            |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура
            |ГДЕ
            |    ТоварыНаСкладахОстатки.КоличествоОстаток > 0
            |
            |СГРУППИРОВАТЬ ПО
            |    ТоварыНаСкладахОстатки.Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад,
            |    ТоварыНаСкладахОстатки.КоличествоОстаток,
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель,
            |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
            |    ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения
            |
            |УПОРЯДОЧИТЬ ПО
            |    Номенклатура";
        
        РезультатЗапроса = Запрос.Выполнить().Выгрузить();
                
        Для Каждого СтрокаТЧ Из РезультатЗапроса Цикл
            
             ЗаписьJSON = Новый ЗаписьJSON;
             ЗаписьJSON.ПроверятьСтруктуру = Истина;
             ЗаписьJSON.ОткрытьФайл("D:\json2.json",,,Новый ПараметрыЗаписиJSON(,Символы.Таб));
        
             ЗаписьJSON.ЗаписатьНачалоОбъекта();
            
                ЗаписьJSON.ЗаписатьИмяСвойства("title");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.Номенклатура), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("descriptions");
                ЗаписьJSON.ЗаписатьЗначение("", Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("unit");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.БазоваяЕдиницаИзмерения), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("price");
                ЗаписьJSON.ЗаписатьЗначение(Число(СтрокаТЧ.Цена), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("amount");
                ЗаписьJSON.ЗаписатьЗначение(Цел(Число(СтрокаТЧ.КоличествоОстаток)), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("categories");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.Родитель), Ложь);
                            
            ЗаписьJSON.ЗаписатьКонецОбъекта();    

        КонецЦикла;
        
    ЗаписьJSON.Закрыть();

Подскажите что не так или хотя бы направление
 
 
   menone_dastan
 
1 - 03.12.19 - 02:56
Вот мой код. Выходит ошибка, Неверный порядок записи JSON.
Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад,
            |    ТоварыНаСкладахОстатки.КоличествоОстаток,
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель КАК Родитель,
            |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
            |    ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения
            |ИЗ
            |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних КАК ЦеныНоменклатурыМагазиновСрезПоследних
            |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура
            |ГДЕ
            |    ТоварыНаСкладахОстатки.КоличествоОстаток > 0
            |    И ТоварыНаСкладахОстатки.Номенклатура.ПометкаУдаления = ЛОЖЬ
            |    И ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа = ЛОЖЬ
            |
            |СГРУППИРОВАТЬ ПО
            |    ТоварыНаСкладахОстатки.Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад,
            |    ТоварыНаСкладахОстатки.КоличествоОстаток,
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель,
            |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
            |    ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения
            |
            |УПОРЯДОЧИТЬ ПО
            |    Номенклатура";
        
        РезультатЗапроса = Запрос.Выполнить().Выгрузить();
        
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.ПроверятьСтруктуру = Истина;
        ЗаписьJSON.ОткрытьФайл("D:\json2.json",,,Новый ПараметрыЗаписиJSON(,Символы.Таб));
         
        ЗаписьJSON.ЗаписатьНачалоОбъекта();        
        
        Для Каждого СтрокаТЧ Из РезультатЗапроса Цикл
            
                ЗаписьJSON.ЗаписатьИмяСвойства("title");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.Номенклатура), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("descriptions");
                ЗаписьJSON.ЗаписатьЗначение("", Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("unit");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.БазоваяЕдиницаИзмерения), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("price");
                ЗаписьJSON.ЗаписатьЗначение(Число(СтрокаТЧ.Цена), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("amount");
                ЗаписьJSON.ЗаписатьЗначение(Цел(Число(СтрокаТЧ.КоличествоОстаток)), Ложь);
                
                ЗаписьJSON.ЗаписатьИмяСвойства("categories");
                ЗаписьJSON.ЗаписатьЗначение(Строка(СтрокаТЧ.Родитель), Ложь);
                            
            ЗаписьJSON.ЗаписатьКонецОбъекта();    

        КонецЦикла;
         
     ЗаписьJSON.Закрыть();
   Злопчинский
 
2 - 03.12.19 - 03:20
ЗаписьJSON.ЗаписатьКонецОбъекта();    - или это за цикл или ЗаписатьНачалао в цикл
   Злопчинский
 
3 - 03.12.19 - 03:24
...вдогонку...
я не спец в 8-ых запросах (я вообще в8 не спец), но вызывают сомнения насчет логики...

            |СГРУППИРОВАТЬ ПО
            |    ТоварыНаСкладахОстатки.Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад,
            |    ТоварыНаСкладахОстатки.КоличествоОстаток,
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель,
            |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена,
            |    ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения

я бы как-то засомневался внутри номенклатуры группировать по родителю в услвоиях когда родитель у номенклатуры - единственный... ну итд.
.
я бы рискнул так написать
            |СГРУППИРОВАТЬ ПО
            |    ТоварыНаСкладахОстатки.Номенклатура.Родитель,
            |    ТоварыНаСкладахОстатки.Номенклатура,
            |    ТоварыНаСкладахОстатки.Склад

и все.. бо группировка по числовым значениям (остаткам и ценам) -как-то тоже напрягает...
.
спецы меня поправлят если что
   Fram
 
4 - 03.12.19 - 03:40
(0) во первых приведенный пример не json, а только какой то набор отдельных json'ов. так что предлагаю потратить полчаса чтобы разобраться в формате json. хотя 5-10 минут должно быть достаточно. просто руками его набей в текстовом редакторе, потом проверь вот здесь например https://jsonlint.com/
   icipher
 
5 - 03.12.19 - 05:38
может там все таки массив данных, тогда:

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();                       
ЗаписатьJSON(ЗаписьJSON, МассивДанных);            
Результат = ЗаписьJSON.Закрыть();
   Сияющий в темноте
 
6 - 03.12.19 - 08:58
вообще в примере не json,а какое то отдаленное его подобие.
   sevod
 
7 - 03.12.19 - 10:05
(0) Как уже писали, это не JSON, а его обрывки. Поэтому загоняй в цикл куски и склеивай в файле. Примерно так.


[code]
ОтветСтруктурой = Новый Структура("НомерСтроки, Ссылка, Количество",
                Строка(ВыборкаДетальныеЗаписи.НомерСтроки),
                Строка(ВыборкаДетальныеЗаписи.НоменклатураСсылка.УникальныйИдентификатор()), 
                Строка(ВыборкаДетальныеЗаписи.Количество)));    


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ОтветСтруктурой);
СтрокаДляТела = ЗаписьJSON.Закрыть();
[/code]

Это кусок моего кода, "СтрокаДляТела", это и есть кусок твоего JSON. Но я это все еще в массив загоняю и тогда там где, "СтрокаДляТела" весь запрос помещается, а не обрывки.

Ты где этот формат взял? Меняй его.
   sevod
 
8 - 03.12.19 - 10:07
(7)Там где "СтрокаДляТела", тип данных строка, можешь что хочешь с ней делать. Можно и твой формат собрать.
   pechkin
 
9 - 03.12.19 - 10:18
(0) ты забыл скобочки массива.
Иначе это некорректный джсон

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