Функция ПреобразоватьвСистему(Число10,система) Экспорт Если система > 36 или система < 2 тогда Сообщить("Выбранная система исчисления не поддерживается"); Возврат -1; КонецЕсли; СтрокаЗначений = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; СтрокаСистема = ""; Пока Число10 > 0 цикл РезДеления = Число10/система; ЧислоСистема = цел(РезДеления); остатокОтДеления = Число10 - система*(ЧислоСистема); СтрокаСистема = сред(СтрокаЗначений,остатокОтДеления+1,1)+ СтрокаСистема; Число10 = ?(ЧислоСистема=0,0,РезДеления); КонецЦикла; Нечётное = стрДлина(СтрокаСистема) - цел(стрДлина(СтрокаСистема)/2)*2; Если Нечётное тогда СтрокаСистема = "0"+СтрокаСистема; КонецЕсли; Возврат СтрокаСистема; КонецФункции Функция URLEncode(стр) Экспорт Длина=СтрДлина(Стр); Итог=""; Для Н=1 По Длина Цикл Знак=Сред(Стр,Н,1); Код=КодСимвола(Знак); если ((Знак>="a")и(Знак<="z")) или ((Знак>="A")и(Знак<="Z")) или ((Знак>="0")и(Знак<="9")) тогда Итог=Итог+Знак; Иначе Если (Код>=КодСимвола("А"))И(Код<=КодСимвола("п")) Тогда Итог=Итог+"%"+ПреобразоватьвСистему(208,16)+"%"+ПреобразоватьвСистему(144+Код-КодСимвола("А"),16); ИначеЕсли (Код>=КодСимвола("р"))И(Код<=КодСимвола("я")) Тогда Итог=Итог+"%"+ПреобразоватьвСистему(209,16)+"%"+ПреобразоватьвСистему(128+Код-КодСимвола("р"),16); ИначеЕсли (Знак="ё") Тогда Итог=Итог+"%"+ПреобразоватьвСистему(209,16)+"%"+ПреобразоватьвСистему(145,16); ИначеЕсли (Знак="Ё") Тогда Итог=Итог+"%"+ПреобразоватьвСистему(208,16)+"%"+ПреобразоватьвСистему(129,16); Иначе Итог=Итог+"%"+ПреобразоватьвСистему(Код,16); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции Функция СформироватьСтрокуJSONИзМассива(Объект) СтрокаJSON = "["; Для каждого Элемент Из Объект Цикл Если ТипЗнч(Элемент) = Тип("Строка") Тогда СтрокаJSON = СтрокаJSON + """" + Элемент + """"; ИначеЕсли ТипЗнч(Элемент) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент), Символы.НПП, ""); ИначеЕсли ТипЗнч(Элемент) = Тип("Булево") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент, "БЛ=false; БИ=true"); ИначеЕсли ТипЗнч(Элемент) = Тип("Дата") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент - Дата(1970,1,1,1,0,0), "ЧГ=0"); ИначеЕсли ТипЗнч(Элемент) = Тип("Массив") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); ИначеЕсли ТипЗнч(Элемент) = Тип("Структура") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаЗначений") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); Иначе СтрокаJSON = СтрокаJSON + """" + URLEncode(Строка(Элемент)) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "]"; КонецФункции Функция СформироватьСтрокуJSONИзСтруктуры(Объект) СтрокаJSON = "{"; Для каждого Элемент Из Объект Цикл Если Элемент.Значение = "" Тогда Продолжить; КонецЕсли; СтрокаJSON = СтрокаJSON + """" + Элемент.Ключ + """" + ":"; Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда СтрокаJSON = СтрокаJSON + """" + Элемент.Значение + """"; ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент.Значение), Символы.НПП, ""); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение, "БЛ=false; БИ=true"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение - Дата(1970,1,1,1,0,0), "ЧГ=0"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Массив") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("ТаблицаЗначений") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); Иначе СтрокаJSON = СтрокаJSON + """" + URLEncode(Строка(Элемент.Значение)) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "}"; КонецФункции Функция СформироватьСтрокуJSON(Объект) Экспорт СтрокаJSON = ""; Если ТипЗнч(Объект) = Тип("Массив") Тогда СтрокаJSON = СформироватьСтрокуJSONИзМассива(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("Структура") Тогда СтрокаJSON = СформироватьСтрокуJSONИзСтруктуры(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("ТаблицаЗначений") Тогда СоставСтруктуры = ""; Для каждого Колонка Из Объект.Колонки Цикл СоставСтруктуры = СоставСтруктуры + ?(ЗначениеЗаполнено(СоставСтруктуры), ",", "") + Колонка.Имя; КонецЦикла; МассивСтрок = Новый Массив; Для каждого Строка Из Объект Цикл СтруктураКолонок = Новый Структура(СоставСтруктуры); ЗаполнитьЗначенияСвойств(СтруктураКолонок, Строка); МассивСтрок.Добавить(СтруктураКолонок); КонецЦикла; СтрокаJSON = СформироватьСтрокуJSONИзМассива(МассивСтрок); КонецЕсли; Возврат СтрокаJSON; КонецФункции Процедура ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, ТипДанных) ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); НомерЗначения = 0; Пока ТекстJSON <> "" Цикл ПервыйСимвол = Лев(ТекстJSON, 1); Если ПервыйСимвол = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; ИначеЕсли ТипДанных = "Массив" Тогда Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; Иначе Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Структура" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; ИначеЕсли ПервыйСимвол = "]" И ТипДанных = "Массив" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; Иначе Если ТипДанных = "Структура" Тогда Поз = Найти(ТекстJSON, ":"); Если Поз = 0 Тогда Прервать; КонецЕсли; ИмяЗначения = СокрЛП(Лев(ТекстJSON, Поз-1)); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз+1)); Если Лев(ТекстJSON, 1) = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Иначе Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); КонецЕсли; Результат.Вставить(ИмяЗначения, Значение); ИначеЕсли ТипДанных = "Массив" Тогда Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); Результат.Добавить(Значение); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач ТекстJSON) Экспорт Результат = Новый Структура; ТекстJSON = СтрЗаменить(ТекстJSON, "\""", """"); ТекстJSON = СтрЗаменить(ТекстJSON, """", ""); Если Лев(ТекстJSON, 1) = "{" Тогда ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда МассивДанных = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(МассивДанных, ТекстJSON, "Массив"); Результат.Вставить("Значение", МассивДанных); КонецЕсли; Возврат Результат; КонецФункции