Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Функции типа Post изменяют входной параметр ДополнительныеПараметры #123

Open
7orlum opened this issue Aug 19, 2023 · 0 comments

Comments

@7orlum
Copy link

7orlum commented Aug 19, 2023

Функция Post и подобные модифицирует свой входной параметр ДополнительныеПараметры, используя его для своих внутренних целей, и эти изменения протекают в код, вызывающий эту функцию. Это мешает использовать значение ДополнительныеПараметры повторно.
Например, в коде ниже второй запрос возвращает неожиданный результат, потому что при первом вызове КоннекторHTTP.Post добавил значение Данные в ДополнительныеПараметры. При втором вызове КоннекторHTTP.Post, получив те же самые ДополнительныеПараметры, но другие Данные, отправит на хост неверные устаревшие Данные, потому что возьмет предыдущее значение, сохраненное в ДополнительныеПараметры. Это неожиданное поведение функции, не видел чтобы где-то было предупреждение, что ДополнительныеПараметры нельзя переиспользовать.

Функция СписокИзменений(ИдентификаторСессии)
	Перем Адрес;
	Перем Заголовки;
	Перем ДополнительныеПараметры;
	Перем Данные;
	
	Адрес = "https://online.sbis.ru/service/?srv=1";

	Заголовки = Новый Соответствие();
	Заголовки.Вставить("X-SBISSessionID", ИдентификаторСессии);
	Заголовки.Вставить("Content-Type", "application/json-rpc;charset=utf-8");
	Заголовки.Вставить("User-Agent", "hello");

	ДополнительныеПараметры = Новый Структура();
	ДополнительныеПараметры.Вставить("МаксимальноеКоличествоПовторов", 5);
	ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
	
	Результат = "";

	Данные = 
		"{
		|  ""jsonrpc"": ""2.0"",
		|  ""method"": ""СБИС.СписокИзменений"",
		|  ""params"": {
		|     ""Фильтр"": {
		|        ""ДатаВремяС"": ""18.08.2023 00.00.00"",
		|        ""Навигация"": {
		|           ""РазмерСтраницы"": 50
		|        },
		|        ""ПолныйСертификатЭП"": ""Нет""
		|     }
		|  },
		|  ""id"": 0
		|}";
	
	Пока Истина Цикл
		Ответ = КоннекторHTTP.Post(Адрес, Данные, ДополнительныеПараметры);
		Результат = Результат + КоннекторHTTP.КакТекст(Ответ);
	
		JsonОтвет = КоннекторHTTP.КакJson(Ответ);
		Если Не JsonОтвет["result"]["Навигация"]["ЕстьЕще"] Тогда
			Прервать;
		КонецЕсли;
		
		Данные = СтрШаблон(
			"{
			|  ""jsonrpc"": ""2.0"",
			|  ""method"": ""СБИС.СписокИзменений"",
			|  ""params"": {
			|     ""Фильтр"": {
			|        ""ИдентификаторСобытия"": ""%1"",
			|        ""ИдентификаторДокумента"": ""%2"",
			|        ""Навигация"": {
			|           ""РазмерСтраницы"": 50
			|        },
			|        ""ПолныйСертификатЭП"": ""Нет""
			|     }
			|  },
			|  ""id"": 0
			|}",
			ПоследнийЭлемент(ПоследнийЭлемент(JsonОтвет["result"]["Документ"])["Событие"])["Идентификатор"],
			ПоследнийЭлемент(JsonОтвет["result"]["Документ"])["Идентификатор"]);
		//без следующей строки запрос возвращает те же самые данные вместо следующей порции
		//все потому КоннекторHTTP.Post добавил Данные в ДополнительныеПараметры, и измененные их туда уже не вставит
		ДополнительныеПараметры.Вставить("Данные", Данные);
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant