развертывание запросов "представлений"

This commit is contained in:
Dmitry Belyaev 2019-02-28 13:34:23 +03:00
parent b74ecef790
commit e4d768bd9a
Signed by: b4tman
GPG Key ID: 014E87EC54B77673
3 changed files with 152 additions and 6 deletions

View File

@ -2134,6 +2134,26 @@
Возврат ИмяТипа;
КонецФункции
Функция SPS_РазвернутьТекстЗапроса(ТекстЗапроса, ПараметрыЗапроса) Экспорт
// Массив текстов запросов.
МассивТекстов = ПостроитьМассивТекстовЗапросов(ТекстЗапроса);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса ,"\;", ";"); // Экранирование точки с запятой.
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
// Загрузка параметров.
ЗагрузкаПараметровВЗапрос(Запрос, ПараметрыЗапроса);
///SPS
SPS_ЗаполнениеОбщихНаборовДанных(Запрос);
МассивТекстов = ПостроитьМассивТекстовЗапросов(Запрос.Текст);
SPS_ЗаполнитьЗначенияПараметровИзЗапроса(Запрос, ПараметрыЗапроса);
///SPS||
Возврат Запрос.Текст;
КонецФункции
#Область Копии_ЗарплатаКадрыОбщиеНаборыДанных
Процедура SPS_ЗаменитьОбщийТекстЗапросаОбщиеЗапросы(ТекстЗапросаПриемник, ТолькоРазрешенные)
Попытка

View File

@ -203,12 +203,31 @@
<ContextMenu name=екорация1КонтекстноеМеню" id="193"/>
<ExtendedTooltip name=екорация1РасширеннаяПодсказка" id="194"/>
</PictureDecoration>
<CheckBoxField name="ИспользоватьПредставления" id="189">
<DataPath>Объект.ИспользоватьПредставления</DataPath>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ИспользоватьПредставленияКонтекстноеМеню" id="190"/>
<ExtendedTooltip name="ИспользоватьПредставленияРасширеннаяПодсказка" id="191"/>
</CheckBoxField>
<UsualGroup name="SPS_Представления_Группа1" id="195">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>SPS представления группа1</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>SPS представления группа1</v8:content>
</v8:item>
</ToolTip>
<Representation>None</Representation>
<ShowTitle>false</ShowTitle>
<ExtendedTooltip name="SPS_Представления_Группа1РасширеннаяПодсказка" id="196"/>
<ChildItems>
<CheckBoxField name="ИспользоватьПредставления" id="189">
<DataPath>Объект.ИспользоватьПредставления</DataPath>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ИспользоватьПредставленияКонтекстноеМеню" id="190"/>
<ExtendedTooltip name="ИспользоватьПредставленияРасширеннаяПодсказка" id="191"/>
</CheckBoxField>
</ChildItems>
</UsualGroup>
</ChildItems>
</UsualGroup>
<Table name="Параметры" id="1">
@ -369,6 +388,11 @@
<CommandName>Form.Command.СоздатьТекстЗапросаДляКонфигуратора</CommandName>
<ExtendedTooltip name="ТекстЗапросаКонтекстноеМенюСоздатьТекстЗапросаДляКонфигуратораExtendedTooltip" id="79"/>
</Button>
<Button name="ТекстЗапросаКонтекстноеМенюSPS_РазвернутьТекстЗапроса" id="197">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.SPS_РазвернутьТекстЗапроса</CommandName>
<ExtendedTooltip name="ТекстЗапросаКонтекстноеМенюSPS_РазвернутьТекстЗапросаРасширеннаяПодсказка" id="198"/>
</Button>
</ChildItems>
</ButtonGroup>
<Popup name="ТекстЗапросаКонтекстноеМенюГруппаОформление" id="170">
@ -1018,6 +1042,22 @@
<Action>ЗадатьУникальныйИдентификатор</Action>
<CurrentRowUse>DontUse</CurrentRowUse>
</Command>
<Command name="SPS_РазвернутьТекстЗапроса" id="20">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Развернуть текст запроса</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Получить используемый текст запроса (без представлений)</v8:content>
</v8:item>
</ToolTip>
<Action>SPS_РазвернутьТекстЗапроса</Action>
<ModifiesSavedData>true</ModifiesSavedData>
</Command>
</Commands>
<Parameters>
<Parameter name="ДействиеВыбора">

View File

@ -1686,5 +1686,91 @@
ТекущаяСтрока.ЗначениеВФорме = ЗначениеПараметраУникальныйИдентификатор;
КонецПроцедуры
#КонецОбласти
#Область ДоработкиSPS
&НаКлиенте
Процедура SPS_РазвернутьТекстЗапроса(Команда)
Если НЕ Объект.ИспользоватьПредставления Тогда
Возврат;
КонецЕсли;
// СЗахватывается" текущий запрос из списка запросов.
ИндексТекущегоЗапроса = ИндексТекущегоВопроса();
Если ИндексТекущегоЗапроса = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Выберите запрос.'");
ПоказатьСообщениеПользователю(ТекстСообщения, "Объект");
Возврат;
КонецЕсли;
НеотформатированныйТекст = ТекстЗапроса.ПолучитьТекст();
ОтформатированныйТекст = СтрЗаменить(НеотформатированныйТекст, "|", "");
Если ПустаяСтрока(ОтформатированныйТекст) Тогда
ТекстПредупреждения = НСтр("ru = 'Введите текст запроса.'");
ПоказатьПредупреждение(, ТекстПредупреждения );
Возврат;
КонецЕсли;
ТекстЗапроса.УстановитьТекст(ОтформатированныйТекст);
Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст = ОтформатированныйТекст;
// Определение текста запроса.
ВыделенныйТекст = Элементы.ТекстЗапроса.ВыделенныйТекст;
Если Не ПустаяСтрока(ВыделенныйТекст) Тогда
Текст = ВыделенныйТекст;
Иначе
Текст = Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст;
КонецЕсли;
ВыводитьИдентификатор = Объект.ВыводитьВРезультатахЗапросаЗначенияСсылок;
ТекстСообщения = "";
// Серверная часть для выполнения запроса.
// ВыполнитьЗапросСервер(ИндексТекущегоЗапроса, РезультатЗапроса, ВыводитьВременныеТаблицы, ВыводитьИдентификатор, Текст, ТекстСообщения);
ТекстРезультат = SPS_РазвернутьТекстЗапросаНаСервере(ИндексТекущегоЗапроса, Текст);
Если НЕ ТекстРезультат = Текст Тогда
Если Не ПустаяСтрока(ВыделенныйТекст) Тогда
НовыйТекст = СтрЗаменить(ОтформатированныйТекст, ВыделенныйТекст, ТекстРезультат);
Иначе
НовыйТекст = ТекстРезультат;
КонецЕсли;
ТекстЗапроса.УстановитьТекст(НовыйТекст);
Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст = НовыйТекст;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция SPS_РазвернутьТекстЗапросаНаСервере(ИндексТекущегоЗапроса, ТекстЗапроса)
// Заполнение параметров.
ЗаполнитьПараметрыПриВыполненииЗапроса(ТекстЗапроса);
// Убрать строки с комментариями.
КоличествоСтрок = СтрЧислоСтрок(ТекстЗапроса);
Текст = "";
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Фрагмент = СтрПолучитьСтроку(ТекстЗапроса, НомерСтроки);
Если Лев(СокрЛ(Фрагмент), 2) <> "//" Тогда
Текст = Текст + Фрагмент + Символы.ПС;
КонецЕсли;
КонецЦикла;
// Выбор текущего запроса.
ТекущийЗапрос = Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1);
// Выбор параметров по текущему запросу.
Фильтр = Новый Структура;
Фильтр.Вставить("ИдентификаторЗапроса", ТекущийЗапрос.Идентификатор);
МассивПараметров = Объект.Параметры.НайтиСтроки(Фильтр);
РезультатТекст = ОбъектОбработки().SPS_РазвернутьТекстЗапроса(ТекстЗапроса, МассивПараметров);
Возврат РезультатТекст;
КонецФункции
#КонецОбласти