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

Передано значение недопустимого типа json

Автор sali, 08 авг 2025, 10:04

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

sali

есть процедура для выгрузки номенклатуры в эдо, вместе со складом, остатком и ценой. она чуть переделана , раньше на форме нужно было склад и цену выбирать самому , а сейчас же нужно чтобы выгружалась вся номенклатура также , но цена должна быть розничной и по всем складам. Снимок экрана 2025-08-08 123745.png
окей , вид цен я на сильно записал что Розничная, а склад просто сделал не доступным. ошибка "Передано значение недопустимого типа" выходит когда записываю данные
код процедуры
&НаСервере
Процедура ОтправитьВЭДОНоменклатура()

// json ///////////////////////////////////////////////////////////
//Пользователь = Пользователи.НайтиПоИмени(ИмяПользователя());
//Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПользователяПоУмолчанию(Пользователь);
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(,Пользователи.ТекущийПользователь());
deviceID = Организация.Дис1_deviceID;
ГуидКлиентаЭДО = Организация.Дис1_ГуидКлиентаЭДО;
ВидЦенЭДО = справочники.видыцен.найтипонаименованию("Розничная цена", истина); // Организация.Дис1_ВидЦенЭДО;
//СкладЭДО = Организация.Дис1_СкладЭДО;

// Остатки //////////////////////////////////////////////////////////////////////////////////////
Данные_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 /////////////////////////////////////////////////////////////////////////////


Сообщить("Выгрузка Завершена");
КонецПроцедуры


ошибка на строке ЗаписатьJSON(ЗаписьJSON, Структура_auth);данные в структурах записаны, всё передается. как решить проблему со складом?

sali

// Цены //////////////////////////////////////////////////////////////////////////////////////
Данные_auth = Новый Структура;
Данные_auth.Вставить("clientID", ГуидКлиентаЭДО);
       
Структура_auth = Новый Структура;
Структура_auth.Вставить("auth", Данные_auth);

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

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

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

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

Данные_goods_strukt = Новый Структура;
Данные_goods_strukt.Вставить("name", Выборка.Наименование);
Данные_goods_strukt.Вставить("goodID", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Данные_goods_strukt.Вставить("typeID", Строка(Выборка.ВидЦены.УникальныйИдентификатор()));
Данные_goods_strukt.Вставить("date", Строка(Формат(Выборка.Дата, "ДФ=yyyy-MM-ddTHH:mm:ss")));
Данные_goods_strukt.Вставить("price", Выборка.Цена);

Данные_goods.Добавить(Данные_goods_strukt);

КонецЦикла;

Данные_typesPrices_strukt = Новый Структура;
Данные_typesPrices_strukt.Вставить("name", ВидЦенЭДО.Наименование);
Данные_typesPrices_strukt.Вставить("typeID", Строка(ВидЦенЭДО.УникальныйИдентификатор()));
Данные_typesPrices.Добавить(Данные_typesPrices_strukt);


    Данные_general = Новый Структура;
Данные_general.Вставить("method", "goods-price");
Данные_general.Вставить("goods", Данные_goods);
Данные_general.Вставить("typesPrices", Данные_typesPrices);


Структура_auth.Вставить("general", Данные_general);

ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); 
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Структура_auth);
СтрокаJS = ЗаписьJSON.Закрыть(); // Данные Цены
Сообщить("Выгрузка Цен Номенклатуры");
ОтправитьВЭДО(СтрокаJS);
Сообщить("Выгрузка Цен Номенклатуры Завершена");


так происходит выгрузка цен

Максим75

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

sali

Максим75, я исправил данное недовольство - в массив все склады запихнул, окей работает. НО работает с неким отбором - в этом расширении было значение булево "выгружать в эдо" ,  та номенклатура у которой стоит эта галочка выгружается , для теста выгружается буквально 6 позиций. а если это условие убрать то вылетает ошибка 413 , точнее
"
Выгрузка пакета не произведена. Код ответа сервера - 413
"
видимо объем слишком большой, но как это исправить?

Максим75

sali, кусками выгружать. где-то хранить всю номенклатуру для выгрузки. и пачками из этого грузить.

sali

Максим75, типо счётчика ставить? там же позиция номенклатуры , цена и остатки это 3 отдельные выгрузки прописывать перед этим переменную с числом 100 (например). и делать записывать в массив....
если набралось столько то значит отправляем потом продолжаем по новой со следующей позиции где остановились

sali

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

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

Данные_goods_strukt = Новый Структура;
Данные_goods_strukt.Вставить("name", Выборка.Наименование);
Данные_goods_strukt.Вставить("article", Выборка.Артикул);
Данные_goods_strukt.Вставить("sku", Выборка.Код);
Данные_goods_strukt.Вставить("goodID", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Данные_goods_strukt.Вставить("type", ?(Выборка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар, 0, 1));
Данные_goods_strukt.Вставить("vat", Строка(Выборка.СтавкаНДС));
Данные_goods_strukt.Вставить("st", Строка(Выборка.СтавкаНСП));
Данные_goods_strukt.Вставить("barcode", Строка(Выборка.Штрихкод));
Данные_goods_strukt.Вставить("measureCode", Строка(Выборка.ЕдиницаИзмеренияКод));
Данные_goods_strukt.Вставить("measureName", Строка(Выборка.ЕдиницаИзмеренияНаименование));
Данные_goods_strukt.Вставить("ownerID", Строка(Выборка.Родитель.УникальныйИдентификатор()));


//Если ЗначениеЗаполнено(Выборка.ФайлКартинки) Тогда
// ДанныеКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Выборка.ФайлКартинки, УникальныйИдентификатор);
// АдресКартинки = ДанныеКартинки.СсылкаНаДвоичныеДанныеФайла;
// Расширение = ДанныеКартинки.Расширение;
// Размер = ДанныеКартинки.Размер;
// ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
//    Строка64 = Base64Строка(ДвоичныеДанные);
// Данные_goods_strukt.Вставить("imageBase64", Строка64);
// Данные_goods_strukt.Вставить("ext", Расширение);
// Данные_goods_strukt.Вставить("size", Размер);
//КонецЕсли;

Данные_goods.Добавить(Данные_goods_strukt);

КонецЦикла;

как можете заметить просто закомментил код с файлом картинки и все заработало. Смотрел до этого, что у большинства проблема была как раз с двоичными данными и заменяли на xml. у меня такого нет я просто это закомментил )))) обожаю 1с :)  :zebzdr:

Теги:

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

Рейтинг@Mail.ru

Поиск