Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Переделать "выполнить" на метод БСП #29

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@
Процедура ВыполнитьКодСервер(ЗначенияПараметров)

// ++ Обход ошибки отстутствия модуля БСП, не переносить
ОбщегоНазначения = Неопределено;
ОбщегоНазначения = __ВспомогательныйМодульНеПереносить;
// -- Обход ошибки отстутствия модуля БСП, не переносить

СтрПеременные = Новый Структура;
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="d4e35638-ad2e-4b01-a968-9eefc21cd2e4">
<Properties>
<Name>__ВспомогательныйМодульНеПереноситьПереопределяемый</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Вспомогательный модуль не переносить переопределяемый</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

// Позволяет отключать подсистемы, например, для целей тестирования.
// Если подсистема отключена, то функции ОбщегоНазначения.ПодсистемаСуществует и
// ОбщегоНазначенияКлиент.ПодсистемаСуществует вернут Ложь.
//
// В реализации этой процедуры нельзя использовать функцию ОбщегоНазначения.ПодсистемаСуществует,
// т.к. это приводит к рекурсии.
//
// Параметры:
// ОтключенныеПодсистемы - Соответствие из КлючИЗначение:
// * Ключ - Строка - имя отключаемой подсистемы
// * Значение - Булево - Истина
//
Процедура ПриОпределенииОтключенныхПодсистем(ОтключенныеПодсистемы) Экспорт



КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="43f23200-6c9b-4f94-ac10-9961c69f9ccc">
<Properties>
<Name>__ВспомогательныйМодульНеПереноситьПотвИсп</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Вспомогательный модуль не переносить потв исп</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DuringSession</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@

// Возвращает соответствие имен "функциональных" подсистем и значения Истина.
// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс".
//
// Возвращаемое значение:
// ФиксированноеСоответствие из КлючИЗначение:
// * Ключ - Строка
// * Значение - Булево
//
Функция ИменаПодсистем() Экспорт

ОтключенныеПодсистемы = Новый Соответствие;
__ВспомогательныйМодульНеПереноситьПереопределяемый.ПриОпределенииОтключенныхПодсистем(ОтключенныеПодсистемы);

Имена = Новый Соответствие;
ВставитьИменаПодчиненныхПодсистем(Имена, Метаданные, ОтключенныеПодсистемы);

Возврат Новый ФиксированноеСоответствие(Имена);

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

Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ОтключенныеПодсистемы, ИмяРодительскойПодсистемы = "")

Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл

Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда
Продолжить;
КонецЕсли;

ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя;
Если ОтключенныеПодсистемы.Получить(ИмяТекущейПодсистемы) = Истина Тогда
Продолжить;
Иначе
Имена.Вставить(ИмяТекущейПодсистемы, Истина);
КонецЕсли;

Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ОтключенныеПодсистемы, ИмяТекущейПодсистемы + ".");
КонецЦикла;

КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -437,41 +437,49 @@

Если Параметр.Номер = 1 Тогда
П1 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П1");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П1");
ИначеЕсли Параметр.Номер = 2 Тогда
П2 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П2");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П2");
ИначеЕсли Параметр.Номер = 3 Тогда
П3 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П3");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П3");
ИначеЕсли Параметр.Номер = 4 Тогда
П4 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П4");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П4");
ИначеЕсли Параметр.Номер = 5 Тогда
П5 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П5");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П5");
ИначеЕсли Параметр.Номер = 6 Тогда
П6 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П6");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П6");
ИначеЕсли Параметр.Номер = 7 Тогда
П7 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П7");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П7");
ИначеЕсли Параметр.Номер = 8 Тогда
П8 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П8");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П8");
ИначеЕсли Параметр.Номер = 9 Тогда
П9 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П9");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П9");
ИначеЕсли Параметр.Номер = 10 Тогда
П10 = Параметр.Значение;
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "П10");
ТекстФункции = СтрЗаменить(ТекстФункции, Параметр.Параметр, "Параметры.П10");
КонецЕсли;
КонецЦикла;

ТекстФункции = СтрЗаменить(ТекстФункции, "Переменные", "Параметры.Переменные");

Результат = Неопределено;

// ++ Обход ошибки отстутствия модуля БСП, не переносить
ОбщегоНазначения = __ВспомогательныйМодульНеПереносить;
// -- Обход ошибки отстутствия модуля БСП, не переносить

Параметры = Новый Структура("П1, П2, П3, П4, П5, П6, П7, П8, П9, П10, Переменные", П1, П2, П3, П4, П5, П6, П7, П8, П9, П10, Переменные);

Попытка
Выполнить(ТекстФункции);
ОбщегоНазначения.ВыполнитьВБезопасномРежиме(ТекстФункции, Параметры);
Исключение
ВызватьИсключение КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,108 @@

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

// Подставляет параметры в строку. Максимально возможное число параметров - 9.
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
//
// Параметры:
// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>",
// например "%1 пошел в %2");
// Параметр1 - Строка - значение подставляемого параметра.
// Параметр2 - Строка
// Параметр3 - Строка
// Параметр4 - Строка
// Параметр5 - Строка
// Параметр6 - Строка
// Параметр7 - Строка
// Параметр8 - Строка
// Параметр9 - Строка
//
// Возвращаемое значение:
// Строка - текстовая строка с подставленными параметрами.
//
// Пример:
// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел
// в Зоопарк".
//
Функция ПодставитьПараметрыВСтроку(Знач ШаблонСтроки,
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт

ЕстьПараметрыСПроцентом = СтрНайти(Параметр1, "%")
Или СтрНайти(Параметр2, "%")
Или СтрНайти(Параметр3, "%")
Или СтрНайти(Параметр4, "%")
Или СтрНайти(Параметр5, "%")
Или СтрНайти(Параметр6, "%")
Или СтрНайти(Параметр7, "%")
Или СтрНайти(Параметр8, "%")
Или СтрНайти(Параметр9, "%");

Если ЕстьПараметрыСПроцентом Тогда
Возврат ПодставитьПараметрыСПроцентом(ШаблонСтроки, Параметр1,
Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
КонецЕсли;

ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%1", Параметр1);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%2", Параметр2);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%3", Параметр3);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%4", Параметр4);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%5", Параметр5);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%6", Параметр6);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%7", Параметр7);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%8", Параметр8);
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%9", Параметр9);
Возврат ШаблонСтроки;

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

// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д.
Функция ПодставитьПараметрыСПроцентом(Знач СтрокаПодстановки,
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено)

Результат = "";
Позиция = СтрНайти(СтрокаПодстановки, "%");
Пока Позиция > 0 Цикл
Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1);
СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1);
ПодставляемыйПараметр = Неопределено;
Если СимволПослеПроцента = "1" Тогда
ПодставляемыйПараметр = Параметр1;
ИначеЕсли СимволПослеПроцента = "2" Тогда
ПодставляемыйПараметр = Параметр2;
ИначеЕсли СимволПослеПроцента = "3" Тогда
ПодставляемыйПараметр = Параметр3;
ИначеЕсли СимволПослеПроцента = "4" Тогда
ПодставляемыйПараметр = Параметр4;
ИначеЕсли СимволПослеПроцента = "5" Тогда
ПодставляемыйПараметр = Параметр5;
ИначеЕсли СимволПослеПроцента = "6" Тогда
ПодставляемыйПараметр = Параметр6;
ИначеЕсли СимволПослеПроцента = "7" Тогда
ПодставляемыйПараметр = Параметр7
ИначеЕсли СимволПослеПроцента = "8" Тогда
ПодставляемыйПараметр = Параметр8;
ИначеЕсли СимволПослеПроцента = "9" Тогда
ПодставляемыйПараметр = Параметр9;
КонецЕсли;
Если ПодставляемыйПараметр = Неопределено Тогда
Результат = Результат + "%";
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1);
Иначе
Результат = Результат + ПодставляемыйПараметр;
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2);
КонецЕсли;
Позиция = СтрНайти(СтрокаПодстановки, "%");
КонецЦикла;
Результат = Результат + СтрокаПодстановки;

Возврат Результат;

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

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции
Expand Down
Loading
Loading