Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 сен 2025, 15:49

json

Автор sali, Сегодня в 11:59

0 Пользователей и 1 гость просматривают эту тему.

sali

есть код для выгрузки номенклатуры, цен и остатков на эдо с предприятия. первые два отправляются успешно, но остатки падают в ошибку, на моменте записи, ЗаписатьJSON(ЗаписьJSON, Структура_auth); получаем ошибку "Передано значение недопустимого типа".
открываю структуру, просматриваю 14 с лихом тысяч позиций все заполнено, как надо, нет такого что в остатках написано не "17", а "шесть". И ранее была такая проблема, не помню как решили ее
// Остатки //////////////////////////////////////////////////////////////////////////////////////
Данные_auth = Новый Структура;
Данные_auth.Вставить("clientID", ГуидКлиентаЭДО);
       
Структура_auth = Новый Структура;
Структура_auth.Вставить("auth", Данные_auth);

Данные_goods = Новый Массив;
Данные_stocks = Новый Массив;

Запрос.Текст =
            "ВЫБРАТЬ
            |    ВТ_Ном.Наименование КАК Наименование,
            |    ВТ_Ном.Ссылка КАК Ссылка,
            |    ВТ_Ном.ЭтоГруппа КАК ЭтоГруппа
        //    |    ВТ_Ном.ОстаткиЭДО КАК ОстаткиЭДО
            |ПОМЕСТИТЬ ВТ_Ном
            |ИЗ
            |    ВТ_Номенклатура КАК ВТ_Ном
            |ГДЕ
            |    НЕ ВТ_Ном.ЭтоГруппа
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    ЕСТЬNULL(ТоварыНаСкладахОстатки.Склад, 0) КАК Склад,
            |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
            |    ВТ_Номенклатур.Наименование КАК Наименование,
            |    ВТ_Номенклатур.Ссылка КАК Ссылка
    //        |    ВТ_Номенклатур.ОстаткиЭДО КАК ОстаткиЭДО
            |ПОМЕСТИТЬ ВТ_Остатки
            |ИЗ
            |    ВТ_Ном КАК ВТ_Номенклатур
    //        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
            |        ПО ВТ_Номенклатур.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    ВТ_Остатки.Склад КАК Склад,
            |    ВТ_Остатки.Ссылка КАК Ссылка,
            |    ВТ_Остатки.Наименование КАК Наименование,
            //|    ВЫБОР
            //|        КОГДА ВТ_Остатки.Остаток < ВТ_Остатки.ОстаткиЭДО
            //|            ТОГДА ВТ_Остатки.Остаток
            //|        ИНАЧЕ ВТ_Остатки.ОстаткиЭДО
            //|    КОНЕЦ КАК Остаток
            |   ВТ_Остатки.Остаток КАК Остаток
            |ИЗ
            |    ВТ_Остатки КАК ВТ_Остатки";


// Запрос.УстановитьПараметр("Склад", СкладЭДО);
        РезультатЗапроса = Запрос.Выполнить();
       
        Выборка = РезультатЗапроса.Выбрать();
       
        Пока Выборка.Следующий() Цикл
                       
            Данные_goods_strukt = Новый Структура;
            Данные_goods_strukt.Вставить("name", Выборка.Наименование);
            Данные_goods_strukt.Вставить("goodID", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
            Данные_goods_strukt.Вставить("stockID", Строка(Выборка.Склад.УникальныйИдентификатор()));
            Данные_goods_strukt.Вставить("quantity", Выборка.Остаток);
           
            Данные_goods.Добавить(Данные_goods_strukt);
                                       
        КонецЦикла;     
       
        Данные_stocks_strukt = Новый Структура;
        Данные_stocks_strukt.Вставить("name", Выборка.Склад); // СкладЭДО.Наименование);
        Данные_stocks_strukt.Вставить("stockID", Строка(Выборка.Склад.Ссылка.УникальныйИдентификатор())); // Строка(СкладЭДО.УникальныйИдентификатор()));   
        Данные_stocks.Добавить(Данные_stocks_strukt);
           
        Данные_general = Новый Структура;
        Данные_general.Вставить("method", "goods-quantity");
        Данные_general.Вставить("goods", Данные_goods);
        Данные_general.Вставить("stocks", Данные_stocks);
           
        Структура_auth.Вставить("general", Данные_general);
       
        ЗаписьJSON = Новый ЗаписьJSON;
        ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); 
        ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
        ЗаписатьJSON(ЗаписьJSON, Структура_auth);
        СтрокаJS = ЗаписьJSON.Закрыть(); // Данные Цены
        Сообщить("Выгрузка Остатков Номенклатуры");
        ОтправитьВЭДО(СтрокаJS);
        Сообщить("Выгрузка Остатков Номенклатуры Завершена");
        // json /////////////////////////////////////////////////////////////////////////////
       
       
        Сообщить("Выгрузка Завершена");
    КонецПроцедуры

antoneus

Ну запихали туда ссылку или null какой-нибудь.

sali

antoneus, в самом спр так? то есть позиция номенклатуры пустая ?

antoneus

В запросе мог null приехать.

Значение недопустимого типа - это не строка, не число, не дата, не булево и не Неопределено.

sali

antoneus, ну в ценах не было , в остатки как могло попасть? там запросы можно сказать идентичны. вот запрос для цен
"ВЫБРАТЬ
| ВТ_Ном.Наименование КАК Наименование,
| ВТ_Ном.Ссылка КАК Ссылка,
| ВТ_Ном.ЭтоГруппа КАК ЭтоГруппа
|ПОМЕСТИТЬ ВТ_Номенклатур
|ИЗ
| ВТ_Номенклатура КАК ВТ_Ном
|ГДЕ
| НЕ ВТ_Ном.ЭтоГруппа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
| ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ВидЦены.Ссылка, 0) КАК ВидЦены,
| ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Период, 0) КАК Дата,
| ВТ_Номенклатура.Ссылка КАК Ссылка,
| ВТ_Номенклатура.Наименование КАК Наименование
|ПОМЕСТИТЬ ВТ
|ИЗ
| ВТ_Номенклатур КАК ВТ_Номенклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТ_Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование ПОДОБНО ""Розничная%""
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Цена КАК Цена,
| ВТ.ВидЦены КАК ВидЦены,
| ВТ.Дата КАК Дата,
| ВТ.Ссылка КАК Ссылка,
| ВТ.Наименование КАК Наименование
|ИЗ
| ВТ КАК ВТ
|ГДЕ
| ВТ.ВидЦены <> 0";

// Запрос.УстановитьПараметр("ВидЦены", ВидЦенЭДО);

antoneus

Цитата: sali от Сегодня в 12:16в остатки как могло попасть?

Так?

Данные_stocks_strukt.Вставить("name", Выборка.Склад);

sali

antoneus, врядли. потому что я менял , точно помню. для выгрузки всех позицийСнимок экрана 2025-09-18 155820.png

antoneus

Что менял? В структуру для записи json пихается ссылка на склад.

sali

Цитата: antoneus от Сегодня в 12:59Что менял?
запись склада
раньше нужно было выбирать, с какого склада и какой вид цен выгружать, а потом переделали шоб все нафиг выгружалось

Данные_stocks_strukt = Новый Структура;
        Данные_stocks_strukt.Вставить("name", Выборка.Склад); // СкладЭДО.Наименование); - код раньше
        Данные_stocks_strukt.Вставить("stockID", Строка(Выборка.Склад.Ссылка.УникальныйИдентификатор())); // Строка(СкладЭДО.УникальныйИдентификатор())); - раньше код   
        Данные_stocks.Добавить(Данные_stocks_strukt);

antoneus

Вот здесь

Данные_stocks_strukt.Вставить("name", Выборка.Склад);
в структуру вставляется ССЫЛКА. 1С не умеет записывать в json что-либо кроме числа, строки, даты, булева и неопределено.

Ладно, дарю решение:

Данные_stocks_strukt.Вставить("name", Выборка.Склад.Наименование);
И вот этот ужос

Данные_stocks_strukt.Вставить("stockID", Строка(Выборка.Склад.Ссылка.УникальныйИдентификатор()));
меняем на

Данные_stocks_strukt.Вставить("stockID", XMLСтрока(Выборка.Склад));

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск