From e4d768bd9ac134bbd7f6cc3583d4fc558011574c Mon Sep 17 00:00:00 2001
From: Dmitry <b4tm4n@mail.ru>
Date: Thu, 28 Feb 2019 13:34:23 +0300
Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B2=D0=B5=D1=80=D1=82?=
 =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BF=D1=80?=
 =?UTF-8?q?=D0=BE=D1=81=D0=BE=D0=B2=20"=D0=BF=D1=80=D0=B5=D0=B4=D1=81?=
 =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Ext/ObjectModule.bsl                      | 20 +++++
 .../Forms/Форма/Ext/Form.xml                  | 52 +++++++++--
 .../Forms/Форма/Ext/Form/Module.bsl           | 86 +++++++++++++++++++
 3 files changed, 152 insertions(+), 6 deletions(-)

diff --git a/src/ИнструментыРазработчикаКонсольЗапросов/Ext/ObjectModule.bsl b/src/ИнструментыРазработчикаКонсольЗапросов/Ext/ObjectModule.bsl
index 813f62d..8198f4d 100644
--- a/src/ИнструментыРазработчикаКонсольЗапросов/Ext/ObjectModule.bsl
+++ b/src/ИнструментыРазработчикаКонсольЗапросов/Ext/ObjectModule.bsl
@@ -2134,6 +2134,26 @@
 	Возврат ИмяТипа;
 КонецФункции
 
+Функция SPS_РазвернутьТекстЗапроса(ТекстЗапроса, ПараметрыЗапроса) Экспорт
+	// Массив текстов запросов.
+	МассивТекстов = ПостроитьМассивТекстовЗапросов(ТекстЗапроса);
+	
+	ТекстЗапроса = СтрЗаменить(ТекстЗапроса ,"\;", ";"); // Экранирование точки с запятой.
+	Запрос = Новый Запрос(ТекстЗапроса);
+	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
+	
+	// Загрузка параметров.
+	ЗагрузкаПараметровВЗапрос(Запрос, ПараметрыЗапроса);
+	
+	///SPS
+	SPS_ЗаполнениеОбщихНаборовДанных(Запрос);
+	МассивТекстов = ПостроитьМассивТекстовЗапросов(Запрос.Текст);
+	SPS_ЗаполнитьЗначенияПараметровИзЗапроса(Запрос, ПараметрыЗапроса);
+	///SPS||
+	
+	Возврат Запрос.Текст;
+КонецФункции
+
 #Область Копии_ЗарплатаКадрыОбщиеНаборыДанных
 Процедура SPS_ЗаменитьОбщийТекстЗапросаОбщиеЗапросы(ТекстЗапросаПриемник, ТолькоРазрешенные)
 	Попытка
diff --git a/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form.xml b/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form.xml
index 8e1349b..7dd502d 100644
--- a/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form.xml
+++ b/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form.xml
@@ -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="ДействиеВыбора">
diff --git a/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form/Module.bsl b/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form/Module.bsl
index 2ff09f5..a90ca90 100644
--- a/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form/Module.bsl
+++ b/src/ИнструментыРазработчикаКонсольЗапросов/Forms/Форма/Ext/Form/Module.bsl
@@ -1686,5 +1686,91 @@
 	ТекущаяСтрока.ЗначениеВФорме = ЗначениеПараметраУникальныйИдентификатор;
 КонецПроцедуры
 
+#КонецОбласти
+
+#Область ДоработкиSPS
+
+&НаКлиенте
+Процедура SPS_РазвернутьТекстЗапроса(Команда)
+	Если НЕ Объект.ИспользоватьПредставления Тогда
+		Возврат;
+	КонецЕсли;
+	
+	// СЗахватывается" текущий запрос из списка запросов.
+	ИндексТекущегоЗапроса = ИндексТекущегоВопроса();
+	Если ИндексТекущегоЗапроса = Неопределено Тогда
+		ТекстСообщения = НСтр("ru = 'Выберите запрос.'");
+		ПоказатьСообщениеПользователю(ТекстСообщения, "Объект");
+		Возврат;
+	КонецЕсли;
+	
+	НеотформатированныйТекст = ТекстЗапроса.ПолучитьТекст();
+	ОтформатированныйТекст = СтрЗаменить(НеотформатированныйТекст, "|", "");
+	
+	Если ПустаяСтрока(ОтформатированныйТекст) Тогда 
+		ТекстПредупреждения = НСтр("ru = 'Введите текст запроса.'");
+		ПоказатьПредупреждение(, ТекстПредупреждения );
+		Возврат;
+	КонецЕсли;
+	
+	ТекстЗапроса.УстановитьТекст(ОтформатированныйТекст);
+	Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст = ОтформатированныйТекст;
+	
+	// Определение текста запроса.
+	ВыделенныйТекст = Элементы.ТекстЗапроса.ВыделенныйТекст;
+	Если Не ПустаяСтрока(ВыделенныйТекст) Тогда 
+		Текст = ВыделенныйТекст;
+	Иначе
+		Текст = Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст;
+	КонецЕсли;
+	
+	ВыводитьИдентификатор = Объект.ВыводитьВРезультатахЗапросаЗначенияСсылок;
+	
+	ТекстСообщения = "";
+	
+	// Серверная часть для выполнения запроса.
+	// ВыполнитьЗапросСервер(ИндексТекущегоЗапроса, РезультатЗапроса, ВыводитьВременныеТаблицы, ВыводитьИдентификатор, Текст, ТекстСообщения);
+	
+	
+	ТекстРезультат = SPS_РазвернутьТекстЗапросаНаСервере(ИндексТекущегоЗапроса, Текст);
+	
+	Если НЕ ТекстРезультат = Текст Тогда		
+		Если Не ПустаяСтрока(ВыделенныйТекст) Тогда
+			НовыйТекст = СтрЗаменить(ОтформатированныйТекст, ВыделенныйТекст, ТекстРезультат);
+		Иначе
+			НовыйТекст = ТекстРезультат;
+		КонецЕсли;
+		
+		ТекстЗапроса.УстановитьТекст(НовыйТекст);
+		Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1).Текст = НовыйТекст;
+	КонецЕсли;	
+КонецПроцедуры
+
+&НаСервере
+Функция SPS_РазвернутьТекстЗапросаНаСервере(ИндексТекущегоЗапроса, ТекстЗапроса)	
+	// Заполнение параметров.
+	ЗаполнитьПараметрыПриВыполненииЗапроса(ТекстЗапроса);
+	
+	// Убрать строки с комментариями.
+	КоличествоСтрок = СтрЧислоСтрок(ТекстЗапроса);
+	Текст = "";
+	Для НомерСтроки = 1 По КоличествоСтрок Цикл
+		Фрагмент = СтрПолучитьСтроку(ТекстЗапроса, НомерСтроки);
+		Если Лев(СокрЛ(Фрагмент), 2) <> "//" Тогда 
+			Текст = Текст + Фрагмент + Символы.ПС;
+		КонецЕсли;
+	КонецЦикла;
+	
+	// Выбор текущего запроса.
+	ТекущийЗапрос = Объект.Запросы.Получить(ИндексТекущегоЗапроса - 1);
+	// Выбор параметров по текущему запросу.
+	Фильтр = Новый Структура;
+	Фильтр.Вставить("ИдентификаторЗапроса", ТекущийЗапрос.Идентификатор);
+	МассивПараметров = Объект.Параметры.НайтиСтроки(Фильтр);
+	
+	РезультатТекст = ОбъектОбработки().SPS_РазвернутьТекстЗапроса(ТекстЗапроса, МассивПараметров);
+	
+	Возврат РезультатТекст;
+КонецФункции
 
 #КонецОбласти