Перем мДт;
Перем мСпецНачало;
Перем мСпецПроцент;
// переменные модуля, исп. в вызовах делегата
Перем мПараметры;
Перем мНомерПараметра;
Перем мКоличествоПараметров;
//
Функция Сам(__конт)
Возврат __конт;
КонецФункции
//
// простая строка
//
Функция _Флаг_s(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат Строка(мПараметры.ПолучитьЗначение(мНомерПараметра)) +__знач;
КонецФункции
//
// простое число
//
Функция _Флаг_i(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат Строка(Число(мПараметры.ПолучитьЗначение(мНомерПараметра))) +__знач;
КонецФункции
//
// сокрлп строка (русское с)
//
Функция _Флаг_с(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат СокрЛП(мПараметры.ПолучитьЗначение(мНомерПараметра)) +__знач;
КонецФункции
//
// фрм число (суммы)
//
Функция _Флаг_ч(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат СокрЛ(Формат(мПараметры.ПолучитьЗначение(мНомерПараметра), "Ч15.2")) +__знач;
КонецФункции
//
// фрм число (количество)
//
Функция _Флаг_к(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат СокрЛ(Формат(мПараметры.ПолучитьЗначение(мНомерПараметра), "Ч15.0")) +__знач;
КонецФункции
//
// фрм дата
//
Функция _Флаг_д(__знач) Экспорт
мНомерПараметра =мНомерПараметра +1;
Возврат СокрЛ(Формат(мПараметры.ПолучитьЗначение(мНомерПараметра), "ДДДММГГГГ")) +__знач;
КонецФункции
//
// служебная - начало форматной строки
//
Функция _Флаг_Начало(__знач) Экспорт
Возврат __знач;
КонецФункции
//
// служебная - печать процента
//
Функция _Флаг_Процент(__знач) Экспорт
Возврат "%" +__знач;
КонецФункции
//
Процедура Конструктор()
Сам =Сам(Контекст);
мСпецНачало =Симв(1);
мСпецПроцент =Симв(2);
мДт =СоздатьОбъект("Делегат");
мДт.ОпределитьТип(1, 1);
мДт.Добавить(Сам, "_Флаг_s", "__default");
мДт.Добавить(Сам, "_Флаг_Начало", мСпецНачало);
мДт.Добавить(Сам, "_Флаг_Процент", мСпецПроцент);
мДт.Добавить(Сам, "_Флаг_s", "s");
мДт.Добавить(Сам, "_Флаг_i", "i");
мДт.Добавить(Сам, "_Флаг_с", "с");
мДт.Добавить(Сам, "_Флаг_ч", "ч");
мДт.Добавить(Сам, "_Флаг_к", "к");
мДт.Добавить(Сам, "_Флаг_д", "д");
КонецПроцедуры
//
// основная логика
//
Функция _Строка(__стр)
мНомерПараметра =0;
мКоличествоПараметров =мПараметры.РазмерСписка();
_стр0 =СтрЗаменить(__стр, "%%", "%" +мСпецПроцент);
_стр0 =мСпецНачало +СтрЗаменить(_стр0, "%", РазделительСтрок);
_стр ="";
_колс =СтрКоличествоСтрок(_стр0);
Для _ин =1 По _колс Цикл
_стр1 =СтрПолучитьСтроку(_стр0, _ин);
_ключ =Лев(_стр1, 1);
_знач =Сред(_стр1, 2);
_стр =_стр +мДт.ВызватьПоКлючу(_ключ, _знач);
КонецЦикла;
Возврат _стр;
КонецФункции
//
// паблик метод - возврат полной строки
//
Функция _Фрм(__стр) Экспорт
Сам =Сам(Контекст);
мПараметры =Сам.ПолучитьСписокПараметров("_Фрм");
Возврат _Строка(__стр);
КонецФункции
//
// паблик метод - печать полной строки
//
Процедура _Лог(__стр) Экспорт
Сам =Сам(Контекст);
мПараметры =Сам.ПолучитьСписокПараметров("_Лог");
Сообщить(_Строка(__стр));
КонецПроцедуры
//