// Функция - Представление отборов форматированной строкой
// ТаблицаОтборов - ТаблицаЗначений - Таблица отборов для формирования представлений. Колонки
// * Имя - Строка - Имя отбора. Должно отвечать требованиям к идентификаторов 1С
// * Значение - Произвольный - Значение установленного отбора
// * Представление - Строка - Представление, которое будет выведено в итоговую строку. Если не заполнено, будет сформировано автоматически
// ВыводитьНезаполненные - Булево - Истина, если нужно выводить отборы, значения которых не заполнены. По умолчанию Ложь
// Возвращаемое значение:
// ФорматированнаяСтрока - Представление установленных отборов вида "УстановленыОтборы: ИмяОтбора: ЗначениеОтбора; ..."
Функция ПредставлениеОтборовФорматированнойСтрокой(ТаблицаОтборов, ВыводитьНезаполненные = Ложь) Экспорт
ПараметрыОформления = ПараметрыФорматированнойСтрокиПредставленияОтборов();
ОписанияОтборов = Новый Массив;
Для Каждого Строка Из ТаблицаОтборов Цикл
ЗначениеОтбора = Строка.Значение;
ПредставлениеОтбора = ?(ЗначениеЗаполнено(Строка.Представление),
НатуральноеПредставлениеСтрокиCamelCase(ИмяОтбора));
Если ВыводитьНезаполненные Тогда
ДобавитьОписаниеЭлементаОтбораВКоллекцию(ОписанияОтборов, ПредставлениеОтбора, ЗначениеОтбора, ПараметрыОформления);
Если ТипЗнч(ЗначениеОтбора) = Тип("Булево") И Не ЗначениеОтбора Тогда
Если ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда
ЗначениеОтбора = ЗначениеОтбора.ВыгрузитьЗначения();
ДобавитьОписаниеЭлементаОтбораВКоллекцию(ОписанияОтборов, ПредставлениеОтбора, ЗначениеОтбора, ПараметрыОформления);
Если ОписанияОтборов.Количество() > 0 Тогда
ОписанияОтборов.Удалить(ОписанияОтборов.ВГраница());
ОписанияОтборов.Вставить(0,
Новый ФорматированнаяСтрока(
СтрШаблон("%1: ", ПараметрыОформления.ЗаголовокДекорации),
ПараметрыОформления.ШрифтЗаголовкаДекорации,
ПараметрыОформления.ЦветТекстаЗаголовкаДекорации));
ОписанияОтборов.Вставить(0,
Новый ФорматированнаяСтрока(
ПараметрыОформления.ПредставлениеПустыхОтборов,
ПараметрыОформления.ШрифтЗаголовкаДекорации,
ПараметрыОформления.ЦветТекстаЗаголовкаДекорации));
Результат = Новый ФорматированнаяСтрока(ОписанияОтборов);
Процедура ДобавитьОписаниеЭлементаОтбораВКоллекцию(Описания, ПредставлениеЭлемента, ЗначениеЭлемента, ПараметрыОформления)
ЦветТекстаЗаголовкаПоля = ПараметрыОформления.ЦветТекстаЗаголовкаПоля;
ШрифтЗаголовкаПоля = ПараметрыОформления.ШрифтЗаголовкаПоля;
ЦветТекстаЗначения = ПараметрыОформления.ЦветТекстаЗначения;
ШрифтЗначения = ПараметрыОформления.ШрифтЗначения;
Описания.Добавить(Новый ФорматированнаяСтрока(СтрШаблон("%1: ", ПредставлениеЭлемента), ШрифтЗаголовкаПоля , ЦветТекстаЗаголовкаПоля));
Если ЗначениеЗаполнено(ЗначениеЭлемента) Тогда
Если ТипЗнч(ЗначениеЭлемента) = Тип("Массив")
Или ТипЗнч(ЗначениеЭлемента) = Тип("ФиксированныйМассив") Тогда
ПредставленияЭлементов = Новый Массив;
Для Каждого ТекЭлемент Из ЗначениеЭлемента Цикл
Если ЗначениеЗаполнено(ТекЭлемент) Тогда
ПредставленияЭлементов.Добавить(Строка(ТекЭлемент));
ПредставленияЭлементов.Добавить(НСтр("ru = '<Пустое значение>'"));
ТекстЗначения = СтрСоединить(ПредставленияЭлементов, "; ");
ИначеЕсли ТипЗнч(ЗначениеЭлемента) = Тип("Дата") Тогда
ТекстЗначения = Формат(ЗначениеЭлемента, "ДФ='ММММ гггг ""г.""'");
ТекстЗначения = Строка(ЗначениеЭлемента);
ТекстЗначения = НСтр("ru = '<Пустое значение>'");
Описания.Добавить(Новый ФорматированнаяСтрока(Строка(ТекстЗначения), ШрифтЗначения , ЦветТекстаЗначения));
Функция ПараметрыФорматированнойСтрокиПредставленияОтборов()
ПараметрыПредставления = Новый Структура;
ПараметрыПредставления.Вставить("ЦветТекстаЗаголовкаДекорации", Новый Цвет(0,150,70));
ПараметрыПредставления.Вставить("ШрифтЗаголовкаДекорации", Новый Шрифт(, , Истина));
ПараметрыПредставления.Вставить("ЦветТекстаЗаголовкаПоля", Новый Цвет(110, 110, 110));
ПараметрыПредставления.Вставить("ШрифтЗаголовкаПоля", Новый Шрифт());
ПараметрыПредставления.Вставить("ЦветТекстаЗначения", Новый Цвет(80, 40, 0));
ПараметрыПредставления.Вставить("ШрифтЗначения", Новый Шрифт(, , Истина));
ПараметрыПредставления.Вставить("ЗаголовокДекорации", "Установлены отборы");
ПараметрыПредставления.Вставить("ПредставлениеПустыхОтборов", "Отборы не установлены");
Возврат ПараметрыПредставления;
// Функция - Преобразует CamelCase в обычный текст.
// СтрокаCamelCase - Строка - строка в стиле CamelCase. Например ВДополнительномПодменю, ВводПоСтроке и т.д.
// Возвращаемое значение:
// Строка - преобразованный CamelCase в обычный текст. Например "HTTPСервис" => "HTTP сервис"
Функция НатуральноеПредставлениеСтрокиCamelCase(Знач СтрокаCamelCase) Экспорт
СтрокаCamelCase = СтрЗаменить(СтрокаCamelCase, "_", "");
КоличествоЗаглавныхСимволов = 0;
Для Сч = 1 По СтрДлина(СтрокаCamelCase) Цикл
Символ = Сред(СтрокаCamelCase, Сч, 1);
ЭтоЗаглавная = (Символ = ВРег(Символ));
Если НЕ ЭтоЗаглавная И КоличествоЗаглавныхСимволов >= 2 Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1) + " " + Прав(Результат, 1);
ИначеЕсли ЭтоЗаглавная И КоличествоЗаглавныхСимволов = 0 И ПредыдущийСимвол <> "" Тогда
Результат = Результат + " ";
Результат = Результат + Символ;
КоличествоЗаглавныхСимволов = КоличествоЗаглавныхСимволов + 1;
КоличествоЗаглавныхСимволов = 0;
ПредыдущийСимвол = Символ;
Слова = СтрРазделить(Результат, " ");
Для Индекс = 1 По Слова.ВГраница() Цикл
ЭтоАббревиатура = (Слово = ВРег(Слово));
Если СтрДлина(Слово) = 1 Или Не ЭтоАббревиатура Тогда // это точно не аббревиатура
Слова[Индекс] = НРег(Слово);
Возврат СокрЛП(СтрСоединить(Слова, " "));