Skip to content

Commit 60ae54e

Browse files
committed
Finish emun-opts-args
2 parents eb43cbc + 8bdc721 commit 60ae54e

File tree

4 files changed

+258
-11
lines changed

4 files changed

+258
-11
lines changed

src/core/Классы/cmd/КомандаПриложения.os

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,17 @@
217217
ТаблицаОпций = ТаблицаАргументовДляСправки();
218218
Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл
219219

220-
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
220+
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
221+
222+
Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
223+
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;
224+
МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);
225+
226+
Для каждого СтрокаОписания Из МассивСтрок Цикл
227+
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
228+
КонецЦикла;
229+
230+
КонецЕсли;
221231

222232
КонецЦикла;
223233

@@ -232,7 +242,17 @@
232242
ТаблицаОпций = ТаблицаОпцийДляСправки();
233243
Для каждого СтрокаТаблицы Из ТаблицаОпций Цикл
234244

235-
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК,СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
245+
КонсольВывода.ВывестиСтроку(СтрШаблон(" %3%1%4%2", Символы.Таб, Символы.ВК, СтрокаТаблицы.Наименование, СтрокаТаблицы.Описание));
246+
247+
Если Не ПустаяСтрока(СтрокаТаблицы.ДополнительноеОписание) Тогда
248+
ДлинаДополнения = СтрДлина(СтрШаблон(" %2%1%", Символы.Таб, СтрокаТаблицы.Наименование))+3;
249+
250+
МассивСтрок = СтрРазделить(СтрокаТаблицы.ДополнительноеОписание, Символы.ПС, Ложь);
251+
Для каждого СтрокаОписания Из МассивСтрок Цикл
252+
КонсольВывода.ВывестиСтроку(СтрШаблон("%1%2", ДополнитьСтрокуПробеламиДо(СтрокаОписания, ДлинаДополнения), Символы.ВК));
253+
КонецЦикла;
254+
255+
КонецЕсли;
236256

237257
КонецЦикла;
238258
КонсольВывода.ВывестиСтроку("");
@@ -728,6 +748,7 @@
728748
Таблица.Колонки.Добавить("Наименование");
729749
Таблица.Колонки.Добавить("Описание");
730750
Таблица.Колонки.Добавить("ДлинаНаименования");
751+
Таблица.Колонки.Добавить("ДополнительноеОписание");
731752

732753
Для каждого КлючЗначение Из Аргументы Цикл
733754

@@ -742,6 +763,7 @@
742763

743764
НоваяЗапись.Наименование = ИмяОпции;
744765
НоваяЗапись.Описание = ОписаниеОпции;
766+
НоваяЗапись.ДополнительноеОписание = АргументСправки.ПолучитьПодробноеОписание();
745767
НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции)+1;
746768

747769
КонецЦикла;
@@ -774,6 +796,7 @@
774796
Таблица = новый ТаблицаЗначений;
775797
Таблица.Колонки.Добавить("Наименование");
776798
Таблица.Колонки.Добавить("Описание");
799+
Таблица.Колонки.Добавить("ДополнительноеОписание");
777800
Таблица.Колонки.Добавить("ДлинаНаименования");
778801

779802
Если Опции.Количество() = 0 Тогда
@@ -790,9 +813,10 @@
790813
ПеременныеОкружения = ФорматироватьПеременнуюОкруженияОпцииДляСправки(ОпцияСправки);
791814
ЗначениеОпции = ФорматироватьЗначениеОпцииДляСправки(ОпцияСправки);
792815
ОписаниеОпции = ОпцияСправки.Описание + " " + ПеременныеОкружения + " " + ЗначениеОпции;
793-
816+
794817
НоваяЗапись.Наименование = ИмяОпции;
795818
НоваяЗапись.Описание = ОписаниеОпции;
819+
НоваяЗапись.ДополнительноеОписание = ОпцияСправки.ПолучитьПодробноеОписание();
796820
НоваяЗапись.ДлинаНаименования = СтрДлина(ИмяОпции)+1;
797821

798822
КонецЦикла;
@@ -830,6 +854,18 @@
830854

831855
КонецФункции
832856

857+
Функция ДополнитьСтрокуПробеламиДо(Знач НачальнаяСтрока, Знач КоличествоПробелов)
858+
859+
СтрокаПробелов = "";
860+
861+
Для Счетчик = 1 По КоличествоПробелов Цикл
862+
СтрокаПробелов = СтрокаПробелов + " ";
863+
КонецЦикла;
864+
865+
Возврат СтрокаПробелов + НачальнаяСтрока;
866+
867+
КонецФункции
868+
833869
Функция ФорматироватьИмяОпцииДляСправки(Знач КлассОпции)
834870

835871
КороткоеНаименование = "";

src/core/Классы/cmd/ПараметрКоманды.os

Lines changed: 92 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
// Подробное описание параметра команды
1010
// Используется при выводе справки (запланировано)
11-
Перем ПодробноеОписание Экспорт; // Строка
11+
Перем ПодробноеОписаниеПараметра Экспорт; // Строка
1212

1313
// Содержит имя переменной окружения, откуда получать значение
1414
// допустимо использование нескольких переменных окружения через пробел
@@ -87,6 +87,7 @@
8787
ТипПараметра = ВходящийТипПараметра;
8888

8989
РазделительМассива = Неопределено;
90+
ПодробноеОписаниеПараметра = "";
9091
ПодготовитьНаименованияПараметров();
9192

9293
КонецПроцедуры
@@ -123,6 +124,23 @@
123124

124125
КонецФункции
125126

127+
// Возвращает подробное описание для справки
128+
//
129+
// Возвращаемое значение:
130+
// строка
131+
Функция ПолучитьПодробноеОписание() Экспорт
132+
133+
ВстроенныеТипы = ВстроенныеТипЗначенийПараметров();
134+
ОпределенныйТип = ВстроенныеТипы[Строка(ТипЗнч(ТипЗначенияПараметра))];
135+
Если ОпределенныйТип = Неопределено
136+
Или Тип("ТипПеречисление") = ОпределенныйТип Тогда
137+
ПодробноеОписаниеПараметра = ТипЗначенияПараметра.ПодробноеОписание();
138+
КонецЕсли;
139+
140+
Возврат ПодробноеОписаниеПараметра;
141+
142+
КонецФункции
143+
126144
// Возвращает истина, если данный параметр обязателен для указания
127145
//
128146
// Возвращаемое значение:
@@ -475,21 +493,87 @@
475493

476494
КонецФункции
477495

496+
// Функция устанавливает тип параметра "Перечисление"
497+
// возвращает текущий параметр команды
498+
//
499+
// Параметры:
500+
// ДоступныеПеречисления - Соответсвие
501+
// Ключ - Строка
502+
// Значение - Структура ("Наименование, Значение, ДополнительнаяСправка")
503+
// Возвращаемое значение:
504+
// ЭтотОбъект - класс ПараметрКоманды
505+
// Вызов необязателен, автоматически определяется при создании параметра,
506+
// если передано значение по умолчанию
507+
Функция ТПеречисление(Знач ДоступныеПеречисления = Неопределено) Экспорт
508+
509+
ТипОпции = ТипЗнч(Неопределено);
510+
ТипЭлементаОпции = ТипОпции;
511+
ТипЗначенияПараметра = Новый ТипПеречисление();
512+
513+
Если Не ДоступныеПеречисления = Неопределено Тогда
514+
ТипЗначенияПараметра.УстановитьПеречисления(ДоступныеПеречисления);
515+
КонецЕсли;
516+
517+
Возврат ЭтотОбъект;
518+
519+
КонецФункции
520+
521+
// Функция устанавливает произвольный тип параметра
522+
// возвращает текущий параметр команды
523+
//
524+
// Параметры:
525+
// НаименованиеПеречисления - строка - пользовательное значение перечисления
526+
// ЗначениеПеречисления - произвольный - системное значение перечисления
527+
// ДополнительнаяСправкаПеречисления - строка - дополнительная строка для справки
528+
//
529+
Функция Перечисление(Знач НаименованиеПеречисления, Знач ЗначениеПеречисления = Неопределено, Знач ДополнительнаяСправкаПеречисления = "") Экспорт
530+
531+
Если Не ТипЗнч(ТипЗначенияПараметра) = Тип("ТипПеречисление") Тогда
532+
ВызватьИсключение "Указание перечисления допустимо только для типа параметра перечисление";
533+
КонецЕсли;
534+
535+
Если ЗначениеПеречисления = Неопределено Тогда
536+
ЗначениеПеречисления = НаименованиеПеречисления;
537+
КонецЕсли;
538+
539+
ТипЗначенияПараметра.ДобавитьПеречисление(НаименованиеПеречисления, ЗначениеПеречисления, ДополнительнаяСправкаПеречисления);
540+
541+
Возврат ЭтотОбъект;
542+
543+
КонецФункции
544+
545+
// Функция устанавливает признак обязательности указания данного параметра
546+
// возвращает текущий параметр команды
547+
//
548+
// Параметры:
549+
// Признак - булево - признак обязательности указания данного параметра (по умолчанию Истина)
550+
//
551+
// Возвращаемое значение:
552+
// ЭтотОбъект - класс ПараметрКоманды
553+
Функция ПодробноеОписание(Знач ВходящееПодробноеОписание) Экспорт
554+
555+
ПодробноеОписаниеПараметра = ВходящееПодробноеОписание;
556+
557+
Возврат ЭтотОбъект;
558+
559+
КонецФункции
560+
478561
#КонецОбласти
479562

480563
Функция ВстроенныеТипЗначенийПараметров()
481564

482565
ВстроенныеТипы = Новый Соответствие;
483566

484-
ВстроенныеТипы.Вставить("Булево", Новый ТипБулево);
485-
ВстроенныеТипы.Вставить("Число", Новый ТипЧисло);
486-
ВстроенныеТипы.Вставить("Дата", Новый ТипДатаВремя);
567+
ВстроенныеТипы.Вставить("ТипБулево", Тип("ТипБулево"));
568+
ВстроенныеТипы.Вставить("ТипЧисло", Тип("ТипЧисло"));
569+
ВстроенныеТипы.Вставить("ТипДатаВремя", Тип("ТипДатаВремя"));
487570
//ВстроенныеТипы.Вставить("Длительность", Новый ТипДлительность);
488-
ВстроенныеТипы.Вставить("Строка", Новый ТипСтрока);
571+
ВстроенныеТипы.Вставить("ТипСтрока", Тип("ТипСтрока"));
489572
//ВстроенныеТипы.Вставить("МассивДлительностей", Новый ТипМассивДлительностей);
490-
ВстроенныеТипы.Вставить("МассивЧисел", Новый ТипМассивЧисел);
491-
ВстроенныеТипы.Вставить("МассивСтрок", Новый ТипМассивСтрок);
492-
ВстроенныеТипы.Вставить("МассивДат", Новый ТипМассивДат);
573+
ВстроенныеТипы.Вставить("ТипМассивЧисел", Тип("ТипМассивЧисел"));
574+
ВстроенныеТипы.Вставить("ТипМассивСтрок", Тип("ТипМассивСтрок"));
575+
ВстроенныеТипы.Вставить("ТипМассивДат", Тип("ТипМассивДат"));
576+
ВстроенныеТипы.Вставить("ТипПеречисление", Тип("ТипПеречисление"));
493577

494578
Возврат ВстроенныеТипы;
495579

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
Перем ПеречисленияКласса Экспорт; // Соответствие
3+
4+
Перем ОписаниеОшибкиКласса;
5+
6+
Функция ВСтроку(Значение) Экспорт
7+
8+
Если ТипЗнч(Значение) = Тип("Сценарий") Тогда
9+
Возврат Значение.ВСтроку();
10+
КонецЕсли;
11+
12+
Возврат Строка(Значение);
13+
14+
КонецФункции
15+
16+
Функция ПодробноеОписание() Экспорт
17+
18+
СтрокаОписания = "";
19+
20+
Для каждого КлючЗначение Из ПеречисленияКласса Цикл
21+
22+
СтрокаОписания = СтрокаОписания + СтрШаблон("%1: %2", КлючЗначение.Значение.Наименование, КлючЗначение.Значение.ДополнительнаяСправка) + Символы.ПС;
23+
24+
КонецЦикла;
25+
26+
Возврат СтрокаОписания;
27+
28+
КонецФункции
29+
30+
Функция УстановитьЗначение(Знач ВходящееЗначение, Значение) Экспорт
31+
32+
ЗначениеПеречисления = ПеречисленияКласса[ВходящееЗначение];
33+
34+
Если НЕ ЗначениеПеречисления = Неопределено Тогда
35+
Значение = ЗначениеПеречисления.Значение;
36+
Иначе
37+
ОписаниеОшибкиКласса = "Выбранное значение перечисления не соответствует доступным";
38+
КонецЕсли;
39+
40+
Возврат Значение;
41+
42+
КонецФункции
43+
44+
Функция Ошибка(ЕстьОшибка = Ложь) Экспорт
45+
46+
Если НЕ ПустаяСтрока(ОписаниеОшибкиКласса) Тогда
47+
ЕстьОшибка = Истина;
48+
КонецЕсли;
49+
50+
Возврат ОписаниеОшибкиКласса;
51+
52+
КонецФункции
53+
54+
Процедура УстановитьПеречисления(Знач СоответствиеПеречислений) Экспорт
55+
56+
Если Тип("Соответствие") = ТипЗнч(СоответствиеПеречислений) Тогда
57+
ПеречисленияКласса = СоответствиеПеречислений;
58+
КонецЕсли;
59+
60+
КонецПроцедуры
61+
62+
Процедура ДобавитьПеречисление(Знач ПользовательскоеЗначение, Знач Значение, Знач ДополнительнаяСправка = "") Экспорт
63+
64+
ПеречисленияКласса.Вставить(ПользовательскоеЗначение, НовоеПеречисление(ПользовательскоеЗначение, Значение, ДополнительнаяСправка));
65+
66+
КонецПроцедуры
67+
68+
Функция НовоеПеречисление(Знач Наименование, Знач Значение, Знач ДополнительнаяСправка = "")
69+
70+
Возврат Новый Структура("Наименование, Значение, ДополнительнаяСправка", Наименование, Значение, ДополнительнаяСправка);
71+
72+
КонецФункции
73+
74+
ПеречисленияКласса = Новый Соответствие;
75+
76+
ОписаниеОшибкиКласса = "";

0 commit comments

Comments
 (0)