Skip to content

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

@7orlum

Description

@7orlum

Функция 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 добавил Данные в ДополнительныеПараметры, и измененные их туда уже не вставит
		ДополнительныеПараметры.Вставить("Данные", Данные);
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @7orlum

        Issue actions

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