Skip to content

Commit

Permalink
Parameters and variables in custom func (#67)
Browse files Browse the repository at this point in the history
Доработана подсистема произвольных функций
  • Loading branch information
denisushakov authored May 7, 2024
1 parent 37712a2 commit f17690e
Show file tree
Hide file tree
Showing 16 changed files with 532 additions and 298 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@
СписокТипов.Добавить("Массив", НСтр("ru = 'Массив'"));
СписокТипов.Добавить("Структура", НСтр("ru = 'Структура'"));

СписокДобавленныхТипов = СписокТипов.Скопировать();

Для каждого Стр Из НеПримитивныеТипы Цикл
ЗначениеТипа = XMLТип(Стр.Значение).ИмяТипа;
ПредставлениеТипа = Строка(Стр.Значение);
Expand Down Expand Up @@ -381,8 +383,9 @@
//
Процедура ЗаполнитьПараметры(Объект) Экспорт

Объект.ПараметрыФункции.Очистить();

Если Объект.Контекст = Перечисления.__КонтекстыВыполненияПользовательскихФункций.ЗагрузкаЭксель Тогда
Объект.ПараметрыФункции.Очистить();
ДобавитьПараметрыЗагрузкаЭксель(Объект);
КонецЕсли;

Expand All @@ -395,27 +398,65 @@
// Выполняет добавляет параметр при отсутствии.
//
// Параметры:
// ИмяПараметра - Строка.
// Объект - СправочникОбъект.__ПользовательскиеФункции - Изменяемый объект.
// ИмяПараметра - Строка - Имя добавляемого параметра.
// ТипПараметра - Строка - Подставляемый тип в строковом, по умолчанию остается пустой.
//
Процедура НайтиДобавитьПараметр(Объект, ИмяПараметра)
Процедура НайтиДобавитьПараметр(Объект, ИмяПараметра, ТипПараметра = Неопределено)

ТипСтрокой = ТипСтрокой(ТипПараметра);

ДанныеПоиска = Объект.ПараметрыФункции.НайтиСтроки(
Новый Структура("Наименование", ИмяПараметра));

Если Не ДанныеПоиска.Количество() Тогда
Если Не ЗначениеЗаполнено(ДанныеПоиска) Тогда
НоваяСтрока = Объект.ПараметрыФункции.Добавить();
НоваяСтрока.Наименование = ИмяПараметра;
НоваяСтрока.Идентификатор = Новый УникальныйИдентификатор;
НоваяСтрока.Тип = ТипСтрокой;
КонецЕсли;

КонецПроцедуры

Функция ТипСтрокой(Тип)

Если Тип = Неопределено Тогда
Возврат "";
КонецЕсли;

СписокДобавленныхТипов = Новый СписокЗначений;
СформироватьСписокТипов(СписокДобавленныхТипов);

ТипСтрокой = Строка(Тип);

ТипНайден = Ложь;
Для Каждого ЭлементСписка Из СписокДобавленныхТипов Цикл
Если ЭлементСписка.Представление = ТипСтрокой Тогда
ТипНайден = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

Если Не ТипНайден Тогда
ТипСтрокой = XMLТип(Тип).ИмяТипа;
КонецЕсли;

Возврат ТипСтрокой;

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

// Добавляет параметры, необходимые для контекста ЗагрузкаЭксель.
//
//
// Параметры:
// Объект - СправочникОбъект.__ПользовательскиеФункции - Изменяемый объект.
//
Процедура ДобавитьПараметрыЗагрузкаЭксель(Объект)

ТипСтруктура = Тип("Структура");
ТипСтрока = Тип("Строка");
НайтиДобавитьПараметр(Объект, "СтрокаЗагрузки");
НайтиДобавитьПараметр(Объект, "ДанныеЗагрузки");
НайтиДобавитьПараметр(Объект, "СтрокаПравил");
НайтиДобавитьПараметр(Объект, "ДанныеЗагрузки", ТипСтруктура);
НайтиДобавитьПараметр(Объект, "СтрокаПравил", ТипСтрока);

КонецПроцедуры

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,42 @@
<WindowOpeningMode>LockWholeInterface</WindowOpeningMode>
<AutoTitle>false</AutoTitle>
<Customizable>false</Customizable>
<CommandBarLocation>Top</CommandBarLocation>
<VerticalScroll>useIfNecessary</VerticalScroll>
<CommandSet>
<ExcludedCommand>Abort</ExcludedCommand>
<ExcludedCommand>Cancel</ExcludedCommand>
<ExcludedCommand>Ignore</ExcludedCommand>
<ExcludedCommand>No</ExcludedCommand>
<ExcludedCommand>OK</ExcludedCommand>
<ExcludedCommand>RestoreValues</ExcludedCommand>
<ExcludedCommand>Retry</ExcludedCommand>
<ExcludedCommand>SaveValues</ExcludedCommand>
<ExcludedCommand>Yes</ExcludedCommand>
</CommandSet>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>false</Autofill>
<ChildItems>
<Button name="КомандаОК" id="15">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.КомандаОК</CommandName>
<ExtendedTooltip name="КомандаОКРасширеннаяПодсказка" id="25"/>
</Button>
<Button name="ФормаЗакрыть" id="31">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Close</CommandName>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отмена</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="ФормаЗакрытьРасширеннаяПодсказка" id="32"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="ChoiceProcessing">ОбработкаВыбора</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
Expand Down Expand Up @@ -84,39 +115,6 @@
</InputField>
</ChildItems>
</UsualGroup>
<CommandBar name="ГруппаДействияФормы" id="14">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа действия формы</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Group actions forms</v8:content>
</v8:item>
</Title>
<HorizontalLocation>Right</HorizontalLocation>
<ExtendedTooltip name="ГруппаДействияФормыРасширеннаяПодсказка" id="24"/>
<ChildItems>
<Button name="КомандаОК" id="15">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.КомандаОК</CommandName>
<ExtendedTooltip name="КомандаОКРасширеннаяПодсказка" id="25"/>
</Button>
<Button name="Закрыть" id="16">
<Type>CommandBarButton</Type>
<Representation>PictureAndText</Representation>
<CommandName>Form.StandardCommand.Close</CommandName>
<ExtendedTooltip name="ЗакрытьРасширеннаяПодсказка" id="26"/>
</Button>
<Button name="Справка" id="17">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Help</CommandName>
<ExtendedTooltip name="СправкаРасширеннаяПодсказка" id="27"/>
</Button>
</ChildItems>
</CommandBar>
</ChildItems>
<Attributes>
<Attribute name="ЛогическоеВыражение" id="2">
Expand Down Expand Up @@ -195,21 +193,6 @@
</v8:StringQualifiers>
</Type>
</Attribute>
<Attribute name="СписокПеременных" id="6">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Список переменных</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Variables List</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueListType</v8:Type>
</Type>
</Attribute>
<Attribute name="НадписьСинтаксис" id="7">
<Title>
<v8:item>
Expand Down Expand Up @@ -244,6 +227,21 @@
</v8:StringQualifiers>
</Type>
</Attribute>
<Attribute name="АдресЗначений" id="9">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Адрес значений</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
</Attributes>
<Commands>
<Command name="КомандаОК" id="1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,8 @@

Параметры.Свойство("Режим", Режим);

Если Параметры.Свойство("Переменные") Тогда
Для Каждого ТекущаяПеременна Из Параметры.Переменные Цикл
СписокПеременных.Добавить(ТекущаяПеременна.Значение);
КонецЦикла;
Если Параметры.Свойство("ЗначенияЗаполнения") Тогда
АдресЗначений = ПоместитьВоВременноеХранилище(Параметры.ЗначенияЗаполнения, УникальныйИдентификатор);
КонецЕсли;

НадписьСинтаксис = НСтр("ru = '?(<ЛогическоеВыражение>,<ВыражениеЕслиИстина>,<ВыражениеЕслиЛожь>)';
Expand Down Expand Up @@ -90,7 +88,7 @@
Процедура КомандаОК(Команда)

ОбновитьВыражениеРезультат();
Закрыть(ВыражениеРезультат);
ОповеститьОВыборе(Новый Структура("Поле", ВыражениеРезультат));

КонецПроцедуры

Expand All @@ -103,7 +101,7 @@
&НаКлиенте
Процедура ОбновитьВыражениеРезультат()

ВыражениеРезультат = СтрШаблон("?(%1, %2, %3);", ЛогическоеВыражение, ВыражениеИстина, ВыражениеЛожь);
ВыражениеРезультат = СтрШаблон("?(%1, %2, %3)", ЛогическоеВыражение, ВыражениеИстина, ВыражениеЛожь);

КонецПроцедуры

Expand All @@ -116,28 +114,22 @@

ПараметрыФормы.Вставить("Режим", Режим);

Если СписокПеременных.Количество() Тогда
ПараметрыФормы.Вставить("Переменные", СписокПеременных.ВыгрузитьЗначения());
КонецЕсли;
Если Не ПустаяСтрока(АдресЗначений) Тогда
ПараметрыФормы.Вставить("АдресЗначений", АдресЗначений);
КонецЕсли;
ПараметрыФормы.Вставить("ИмяПриемника", ИмяПриемника);

ОткрытьФорму("ОбщаяФорма.__ФормаВыбораПоля",
ПараметрыФормы, ЭтотОбъект,,,,
Новый ОписаниеОповещения("ВыборПоляЗавершение", ЭтотОбъект, Новый Структура("ИмяПриемника", ИмяПриемника)),
РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
ОткрытьФорму("ОбщаяФорма.__ФормаВыбораПоля", ПараметрыФормы, ЭтотОбъект);

КонецПроцедуры

// Обработчик оповещения "ВыборПоляЗавершение".
//
// Параметры:
// РезСтруктура - КодВозвратаДиалога.
// ДополнительныеДанные - Структура.
//
&НаКлиенте
Процедура ВыборПоляЗавершение(Результат, ДополнительныеДанные) Экспорт

Если ТипЗнч(Результат) = Тип("Структура") Тогда
Элементы[ДополнительныеДанные.ИмяПриемника].ВыделенныйТекст = Результат.Имя;
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

Если ИсточникВыбора.ИмяФормы = "ОбщаяФорма.__ФормаВыбораПоля" Тогда
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
Элементы[ВыбранноеЗначение.ИмяПриемника].ВыделенныйТекст = ВыбранноеЗначение.Поле;
КонецЕсли;
ОбновитьВыражениеРезультат();
КонецЕсли;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
<CommandName>Form.Command.СохранитьРезультат</CommandName>
<ExtendedTooltip name="ФормаСохранитьРезультатРасширеннаяПодсказка" id="21"/>
</Button>
<Button name="ФормаЗакрыть" id="38">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Close</CommandName>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отмена</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="ФормаЗакрытьРасширеннаяПодсказка" id="39"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
<CommandName>Form.Command.СохранитьРезультат</CommandName>
<ExtendedTooltip name="ФормаСохранитьРезультатРасширеннаяПодсказка" id="21"/>
</Button>
<Button name="ФормаЗакрыть" id="22">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Close</CommandName>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отмена</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="ФормаЗакрытьРасширеннаяПодсказка" id="23"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
<CommandName>Form.Command.СохранитьРезультат</CommandName>
<ExtendedTooltip name="ФормаСохранитьРезультатРасширеннаяПодсказка" id="38"/>
</Button>
<Button name="ФормаЗакрыть" id="39">
<Type>CommandBarButton</Type>
<CommandName>Form.StandardCommand.Close</CommandName>
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отмена</v8:content>
</v8:item>
</Title>
<ExtendedTooltip name="ФормаЗакрытьРасширеннаяПодсказка" id="40"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

Если Параметры.Свойство("АдресЗначения", АдресЗначения) Тогда
Таблица = ПолучитьИзВременногоХранилища(АдресЗначения);
Если Таблица <> Неопределено Тогда
Если ТипЗнч(Таблица) = Тип("ТаблицаЗначений") И ЗначениеЗаполнено(Таблица.Колонки) Тогда
Для Каждого Колонка Из Таблица.Колонки Цикл
// Заполняем таблицу колонок
нСтрока = КолонкиТаблицыЗначений.Добавить();
Expand Down
Loading

0 comments on commit f17690e

Please sign in to comment.