Представление значения. Функция возвращает строковое представление для произвольного значения.
// Функция возвращает строковое представление для произвольного значения.
//
// Параметры:
// ОбрабатываемоеЗначение - Произвольный - значение произвольного типа, которое надо вывести в виде строки;
// Разделитель1 - Строка - разделитель значений 1 (например, разделяет элементы массива или ключ и значение структуры или соответствия);
// Разделитель2 - Строка - разделитель значений 2 (например, разделяет элементы структуры или соответствия);
// Уровень - Число - Значение уровня, влияет на отступ.
//
// Возвращаемое значение:
// Строка - строковое представление.
//
Функция ПредставлениеЗначения(ОбрабатываемоеЗначение, Разделитель1 = "", Разделитель2 = "", Знач Уровень = 0) Экспорт
Результат = "";
ТипЧисло = Тип("Число");
ТипСтрока = Тип("Строка");
ТипДата = Тип("Дата");
ТипБулево = Тип("Булево");
ТипСписокЗначений = Тип("СписокЗначений");
ТипМассив = Тип("Массив");
ТипФиксированныйМассив = Тип("ФиксированныйМассив");
ТипСтруктура = Тип("Структура");
ТипФиксированнаяСтруктура = Тип("ФиксированнаяСтруктура");
ТипСоответствие = Тип("Соответствие");
ТипФиксированноеСоответствие = Тип("ФиксированноеСоответствие");
Если ТипЗнч(Уровень) <> ТипЧисло
ИЛИ Уровень < 0 Тогда
Уровень = 0;
КонецЕсли;
Если ТипЗнч(ОбрабатываемоеЗначение) = ТипСтрока Тогда
Результат = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень) + ОбрабатываемоеЗначение;
ИначеЕсли ТипЗнч(ОбрабатываемоеЗначение) = ТипДата Тогда
Результат = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень) + Формат(ОбрабатываемоеЗначение, "ДЛФ=DT");
ИначеЕсли ТипЗнч(ОбрабатываемоеЗначение) = ТипЧисло Тогда
Результат = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень) + Формат(ОбрабатываемоеЗначение, "ЧЦ=15; ЧДЦ=4; ЧРД=,; ЧРГ=' '; ЧН=0,0000; ЧГ=3,0");
ИначеЕсли ТипЗнч(ОбрабатываемоеЗначение) = ТипБулево Тогда
Результат = СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень) + Формат(ОбрабатываемоеЗначение, "БЛ=Ложь; БИ=Истина");
ИначеЕсли ТипЗнч(ОбрабатываемоеЗначение) = ТипСписокЗначений Тогда
Счетчик = 1;
Для Каждого ТекущееЗначение Из ОбрабатываемоеЗначение Цикл
Если Счетчик = ОбрабатываемоеЗначение.Количество() Тогда
Результат = Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ СокрЛП(ТекущееЗначение.Значение);
Иначе
Результат = Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ СокрЛП(ТекущееЗначение.Значение) + Разделитель1;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
ИначеЕсли (ТипЗнч(ОбрабатываемоеЗначение) = ТипМассив) ИЛИ (ТипЗнч(ОбрабатываемоеЗначение) = ТипФиксированныйМассив) Тогда
Счетчик = 1;
Для Каждого ТекущееЗначение Из ОбрабатываемоеЗначение Цикл
Если Счетчик = ОбрабатываемоеЗначение.Количество() Тогда
Результат = Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ СокрЛП(ТекущееЗначение);
Иначе
Результат = Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ СокрЛП(ТекущееЗначение) + Разделитель1;
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
ИначеЕсли (ТипЗнч(ОбрабатываемоеЗначение) = ТипСтруктура)
ИЛИ (ТипЗнч(ОбрабатываемоеЗначение) = ТипФиксированнаяСтруктура) Тогда
Для Каждого КлючЗначение Из ОбрабатываемоеЗначение Цикл
Если (ТипЗнч(КлючЗначение.Значение) = ТипСтруктура)
ИЛИ (ТипЗнч(КлючЗначение.Значение) = ТипФиксированнаяСтруктура) Тогда
// Перед структурой вставить еще один разделитель.
Результат =
Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ КлючЗначение.Ключ
+ Разделитель1
+ Символы.ПС
+ ПредставлениеЗначения(КлючЗначение.Значение, Разделитель1, Разделитель2, Уровень + 1) // С отступом
+ Разделитель2;
Иначе
Результат =
Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ КлючЗначение.Ключ
+ Разделитель1
+ ПредставлениеЗначения(КлючЗначение.Значение, Разделитель1, Разделитель2, 0) // Без отступа
+ Разделитель2;
КонецЕсли;
КонецЦикла;
ИначеЕсли (ТипЗнч(ОбрабатываемоеЗначение) = ТипСоответствие) ИЛИ (ТипЗнч(ОбрабатываемоеЗначение) = ТипФиксированноеСоответствие) Тогда
Для Каждого КлючЗначение Из ОбрабатываемоеЗначение Цикл
Если (ТипЗнч(КлючЗначение.Значение) = ТипСтруктура)
ИЛИ (ТипЗнч(КлючЗначение.Значение) = ТипФиксированнаяСтруктура) Тогда
// Перед структурой вставить еще один разделитель.
Результат =
Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ ПредставлениеЗначения(КлючЗначение.Ключ, Разделитель1, Разделитель2, Уровень + 1)
+ Разделитель1
+ Символы.ПС
+ ПредставлениеЗначения(КлючЗначение.Значение, Разделитель1, Разделитель2, Уровень + 1) // С отступом
+ Разделитель2;
Иначе
Результат =
Результат
+ СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов(" ", Уровень)
+ ПредставлениеЗначения(КлючЗначение.Ключ, Разделитель1, Разделитель2, Уровень + 1)
+ Разделитель1
+ ПредставлениеЗначения(КлючЗначение.Значение, Разделитель1, Разделитель2, 0) // Без отступа
+ Разделитель2;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
КонтактнаяИнформацияПоПредставлению (БСП)
ПриЧтенииПредставленийНаСервере (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)