Имя: Пароль:
1C
1С v8
Не выгружает данные в файл формата JSON как надо
0 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.Закрыть();

Подскажите что не так или хотя бы направление
1 menone_dastan
 
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 не спец), но вызывают сомнения насчет логики...

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

я бы как-то засомневался внутри номенклатуры группировать по родителю в услвоиях когда родитель у номенклатуры - единственный... ну итд.
.
я бы рискнул так написать

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

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

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


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


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

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

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