diff --git "a/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" "b/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml"
index 092a0ab3..637e33c9 100644
--- "a/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml"
+++ "b/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml"
@@ -17,6 +17,9 @@
+
+ ПриСозданииНаСервере
+
@@ -136,7 +139,6 @@
ПредопределенныеЗначения.ЭтоГруппа КАК ЭтоГруппа,
ПредопределенныеЗначения.Код КАК Код,
ПредопределенныеЗначения.Наименование КАК Наименование,
- ПредопределенныеЗначения.ТипЗначения КАК ТипЗначения,
ВЫБОР
КОГДА ПредопределенныеЗначения.Пароль
ТОГДА "Пароль"
@@ -144,17 +146,15 @@
ТОГДА "Список"
ИНАЧЕ ПредопределенныеЗначения.Значение
КОНЕЦ КАК Значение,
- ПредопределенныеЗначения.Пароль КАК Пароль,
ПредопределенныеЗначения.СписокЗначений КАК СписокЗначений,
ПредопределенныеЗначения.Комментарий КАК Комментарий,
+ ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки,
+ ПредопределенныеЗначения.ТипЗначения КАК ТипЗначения,
ПредопределенныеЗначения.ЗначенияЭлементов.(
Ссылка КАК Ссылка,
НомерСтроки КАК НомерСтроки,
Значение КАК Значение
- ) КАК ЗначенияЭлементов,
- ПредопределенныеЗначения.Предопределенный КАК Предопределенный,
- ПредопределенныеЗначения.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
- ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
+ ) КАК ЗначенияЭлементов
ИЗ
ПланВидовХарактеристик.__ПредопределенныеЗначения КАК ПредопределенныеЗначения
ChartOfCharacteristicTypes.__ПредопределенныеЗначения
diff --git "a/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl" "b/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl"
index 25418e7a..151384e5 100644
--- "a/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl"
+++ "b/src/ChartsOfCharacteristicTypes/__\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl"
@@ -1,6 +1,13 @@
#Область ОбработчикиСобытийФормы
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ __МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
+
+КонецПроцедуры
+
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -20,3 +27,7 @@
КонецПроцедуры
#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git "a/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl" "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
index bb103f30..bd909175 100644
--- "a/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
+++ "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
@@ -547,7 +547,7 @@
ПостфиксМодуля = МассивПодимен.Получить(0);
- //Удалим класс
+ // Удалим класс
МассивПодимен.Удалить(0);
Если КолЭлементов > 2 Тогда
// Удалим слово "Форма"
diff --git "a/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272.xml" "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272.xml"
new file mode 100644
index 00000000..aab396ff
--- /dev/null
+++ "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272.xml"
@@ -0,0 +1,27 @@
+
+
+
+
+ __МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик
+
+
+ ru
+ Модификация конфигурации переопределяемый план видов характеристик
+
+
+ en
+ Configuration modification redefined document
+
+
+
+ false
+ false
+ true
+ true
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272/Ext/Module.bsl" "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272/Ext/Module.bsl"
new file mode 100644
index 00000000..c1ad650d
--- /dev/null
+++ "b/src/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\245\320\260\321\200\320\260\320\272\321\202\320\265\321\200\320\270\321\201\321\202\320\270\320\272/Ext/Module.bsl"
@@ -0,0 +1,70 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright 2017-2024 First BIT company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+// e-mail: ivssmirnov@1bit.com
+// Версия: 1.0.0.1
+//
+// Требования: платформа 1С версии 8.3.17 и выше
+
+////////////////////////////////////////////////////////////////////////////////
+// Формы (сервер): для серверных функций обработок форм планов видов характеристик
+
+#Область ПрограммныйИнтерфейс
+
+// Процедура носит ознакомительный характер по работе с подсистемой "__РаботаСФормами", не переносить.
+//
+Процедура __ПредопределенныеЗначенияФормаСпискаПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт
+
+ #Область ДемоПример
+
+ #Область РаботаСЭлементамиФормы
+
+ Список = Форма.Список;
+ Если Список.ПроизвольныйЗапрос Тогда
+ Элементы = Форма.Элементы;
+ Список.ТекстЗапроса = __СхемыЗапросов.ДобавитьПолеВыборкиВЗапрос(Список.ТекстЗапроса,
+ "Пароль", "Пароль",,, Истина);
+
+ Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.Свойство("Предопределенный") Тогда
+ ВыраженияПолей = Новый СписокЗначений;
+ ВыраженияПолей.Добавить("Предопределенный", "Предопределенный");
+ ВыраженияПолей.Добавить("ИмяПредопределенныхДанных", "ИмяПредопределенныхДанных");
+ Список.ТекстЗапроса = __СхемыЗапросов.ДобавитьПоляВыборкиВЗапрос(Список.ТекстЗапроса,
+ ВыраженияПолей,,,, Истина);
+
+ __РаботаСФормами.СоздатьПоле(Форма, "Предопределенный", Элементы.Список,
+ "Предопределенный", 2, "Список.Предопределенный");
+ __РаботаСФормами.СоздатьПоле(Форма, "ИмяПредопределенныхДанных", Элементы.Список,
+ "Имя предопределенных данных", 1, "Список.Предопределенный");
+ КонецЕсли;
+
+ __РаботаСФормами.СоздатьПоле(Форма, "Пароль", Элементы.Список, "Пароль", 2, "Список.Пароль");
+ КонецЕсли;
+
+ #КонецОбласти
+
+ #КонецОбласти //ДемоПример
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262.xml" "b/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262.xml"
new file mode 100644
index 00000000..94de609a
--- /dev/null
+++ "b/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __СхемыЗапросов
+
+
+ ru
+ Схемы запросов
+
+
+
+ false
+ false
+ true
+ true
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Ext/Module.bsl" "b/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Ext/Module.bsl"
new file mode 100644
index 00000000..f513c7d8
--- /dev/null
+++ "b/src/CommonModules/__\320\241\321\205\320\265\320\274\321\213\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Ext/Module.bsl"
@@ -0,0 +1,799 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright 2017-2024 First BIT company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+// e-mail: ivssmirnov@1bit.com
+// Версия: 1.0.0.1
+//
+// Требования: платформа 1С версии 8.3.17 и выше
+
+#Область ПрограммныйИнтерфейс
+
+// Возвращает схему запроса по значению переданного индекса в пакете запросов.
+//
+// Параметры:
+// СхемаЗапроса - СхемаЗапроса - схема запроса.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// ЗапросВыбораСхемыЗапроса, ЗапросУничтоженияТаблицыСхемыЗапроса - измененный текст запроса или запрос.
+//
+Функция ЗапросПакетаЗапросов(Знач СхемаЗапроса, ИндексЗапросаВПакете = Неопределено) Экспорт
+ Перем ЗапросПакетаЗапросов;
+
+ ПакетЗапросов = СхемаЗапроса.ПакетЗапросов;
+
+ Если ИндексЗапросаВПакете = Неопределено Тогда
+ ИндексЗапросаВПакете = ПакетЗапросов.Количество() - 1;
+ КонецЕсли;
+
+ ЗапросПакетаЗапросов = ПакетЗапросов.Получить(ИндексЗапросаВПакете);
+
+ Возврат ЗапросПакетаЗапросов;
+КонецФункции
+
+// Добавляет новое поле в конец секции выборки переданного запроса
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ВыражениеПоля - Строка - выражение поля для секции выборки.
+// ПсевдонимПоля - Строка - псевдоним поля для секции выборки.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+// РасширениеЯзыкаЗапросовСКД - Булево - Истина, когда требуется дополнительно добавить поле в секцию
+// ВЫБРАТЬ расширения языка запросов СКД.
+// ЗаменятьСуществующееПоле - Булево - Истина, когда требуется дополнительно добавить поле в запрос даже
+// если оно было добавлено ранее. Прежнее поле будет удалено.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьПолеВыборкиВЗапрос(Знач Запрос, ВыражениеПоля, ПсевдонимПоля = "", Знач ИндексЗапросаВПакете = Неопределено, РасширениеЯзыкаЗапросовСКД = Ложь, ЗаменятьСуществующееПоле = Ложь) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить поля в запрос уничтожения таблицы.';
+ |en = 'Cannot add fields to the table removal query.'");
+ КонецЕсли;
+
+ Колонки = ИзменяемыйЗапрос.Колонки;
+ // Проверка, что колонка была добавлена ранее
+ КолонкаПоПсевдониму = Колонки.Найти(ПсевдонимПоля);
+ КолонкаУжеДобавлена = (КолонкаПоПсевдониму <> Неопределено);
+
+ Если КолонкаУжеДобавлена И ЗаменятьСуществующееПоле Тогда
+ Колонки.Удалить(Колонки.Индекс(КолонкаПоПсевдониму));
+ КонецЕсли;
+
+ Для ИндексОператора = 0 По ИзменяемыйЗапрос.Операторы.Количество() - 1 Цикл
+
+ Для Каждого Источник Из ИзменяемыйЗапрос.Операторы[ИндексОператора].Источники Цикл
+ Если ТипЗнч(Источник.Источник) = Тип("ОписаниеВременнойТаблицыСхемыЗапроса")
+ И Не СтрНайти(ВыражениеПоля, Источник.Источник.Псевдоним) = 0 Тогда
+ ИмяПоля = СтрЗаменить(ВыражениеПоля, Источник.Источник.Псевдоним + ".", "");
+ Источник.Источник.ДоступныеПоля.Добавить(ИмяПоля);
+ КонецЕсли;
+ КонецЦикла;
+
+ ВыбираемыеПоля = ИзменяемыйЗапрос.Операторы[ИндексОператора].ВыбираемыеПоля;
+
+ НовоеПоле = ВыбираемыеПоля.Добавить(ВыражениеПоля);
+
+ НоваяКолонка = Колонки.Найти(НовоеПоле);
+ Если ЗначениеЗаполнено(ПсевдонимПоля) Тогда
+ НоваяКолонка.Псевдоним = ПсевдонимПоля;
+ КонецЕсли;
+
+ // Только в первом запросе могут быть поля для СКД
+ Если ИндексОператора = 0 И РасширениеЯзыкаЗапросовСКД Тогда
+ ВыражениеСодержитПараметр = СтрНайти(ВыражениеПоля, "&");
+
+ Если ИзменяемыйЗапрос.ПоляВыбораКомпоновкиДанных.Найти(ПсевдонимПоля) = Неопределено Тогда
+ ПолеКД = ИзменяемыйЗапрос.ПоляВыбораКомпоновкиДанных.Добавить(ПсевдонимПоля); // ПолеВыбораКомпоновкиДанныхСхемыЗапроса -
+ ПолеКД.Псевдоним = ПсевдонимПоля;
+ ПолеКД.ИспользоватьРеквизиты = Не ВыражениеСодержитПараметр;
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ // Удалим "мусор" схемы запроса
+ НомерПоля = 1;
+ ИскомаяПодстрока = " КАК Поле" + НомерПоля;
+ НайденоМусорноеПоле = СтрНайти(ТекстЗапроса, ИскомаяПодстрока) > 0;
+ Пока НайденоМусорноеПоле Цикл
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ИскомаяПодстрока, "");
+
+ НомерПоля = НомерПоля + 1;
+ ИскомаяПодстрока = " КАК Поле" + НомерПоля;
+ НайденоМусорноеПоле = СтрНайти(ТекстЗапроса, ИскомаяПодстрока) > 0;
+ КонецЦикла;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Добавляет новое поле в конец секции выборки переданного запроса
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ВыраженияПолей - СписокЗначений - выражения полей для секции выборки.
+// * Значение - Строка - Выражение поля для секции выборки
+// * Представление - Строка - Псевдоним поля, может быть не заполнен
+// ПсевдонимПоля - Строка - псевдоним поля для секции выборки.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+// РасширениеЯзыкаЗапросовСКД - Булево - Истина, когда требуется дополнительно добавить поле в секцию
+// ВЫБРАТЬ расширения языка запросов СКД.
+// ЗаменятьСуществующееПоле - Булево - Истина, когда требуется дополнительно добавить поле в запрос даже
+// если оно было добавлено ранее. Прежнее поле будет удалено.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьПоляВыборкиВЗапрос(Знач Запрос, ВыраженияПолей, Знач ИндексЗапросаВПакете = Неопределено, РасширениеЯзыкаЗапросовСКД = Ложь, ЗаменятьСуществующееПоле = Ложь) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить поля в запрос уничтожения таблицы.';
+ |en = 'Cannot add fields to the table removal query.'");
+ КонецЕсли;
+
+ Колонки = ИзменяемыйЗапрос.Колонки;
+
+ Для Каждого Выражение Из ВыраженияПолей Цикл
+ // Проверка, что колонка была добавлена ранее
+ КолонкаПоПсевдониму = Колонки.Найти(Выражение.Представление);
+ КолонкаУжеДобавлена = (КолонкаПоПсевдониму <> Неопределено);
+
+ Если КолонкаУжеДобавлена И ЗаменятьСуществующееПоле Тогда
+ Колонки.Удалить(Колонки.Индекс(КолонкаПоПсевдониму));
+ КонецЕсли;
+ КонецЦикла;
+
+ Для ИндексОператора = 0 По ИзменяемыйЗапрос.Операторы.Количество() - 1 Цикл
+
+ Для Каждого Источник Из ИзменяемыйЗапрос.Операторы[ИндексОператора].Источники Цикл
+ Для Каждого Выражение Из ВыраженияПолей Цикл
+ Если ТипЗнч(Источник.Источник) = Тип("ОписаниеВременнойТаблицыСхемыЗапроса")
+ И Не СтрНайти(Выражение.Значение, Источник.Источник.Псевдоним) = 0 Тогда
+ ИмяПоля = СтрЗаменить(Выражение.Значение, Источник.Источник.Псевдоним + ".", "");
+ Источник.Источник.ДоступныеПоля.Добавить(ИмяПоля);
+ КонецЕсли;
+ КонецЦикла;
+ КонецЦикла;
+
+ ВыбираемыеПоля = ИзменяемыйЗапрос.Операторы[ИндексОператора].ВыбираемыеПоля;
+
+ Для Каждого Выражение Из ВыраженияПолей Цикл
+ НовоеПоле = ВыбираемыеПоля.Добавить(Выражение.Значение);
+
+ НоваяКолонка = Колонки.Найти(НовоеПоле);
+ Если ЗначениеЗаполнено(Выражение.Представление) Тогда
+ НоваяКолонка.Псевдоним = Выражение.Представление;
+ КонецЕсли;
+ КонецЦикла;
+
+ // Только в первом запросе могут быть поля для СКД
+ Если ИндексОператора = 0 И РасширениеЯзыкаЗапросовСКД Тогда
+ Для Каждого Выражение Из ВыраженияПолей Цикл
+ ВыражениеСодержитПараметр = СтрНайти(Выражение.Значение, "&");
+
+ Если ИзменяемыйЗапрос.ПоляВыбораКомпоновкиДанных.Найти(Выражение.Представление) = Неопределено Тогда
+ ПолеКД = ИзменяемыйЗапрос.ПоляВыбораКомпоновкиДанных.Добавить(Выражение.Представление); // ПолеВыбораКомпоновкиДанныхСхемыЗапроса -
+ ПолеКД.Псевдоним = Выражение.Представление;
+ ПолеКД.ИспользоватьРеквизиты = Не ВыражениеСодержитПараметр;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ // Удалим "мусор" схемы запроса
+ НомерПоля = 1;
+ ИскомаяПодстрока = " КАК Поле" + НомерПоля;
+ НайденоМусорноеПоле = СтрНайти(НовыйТекстЗапроса, ИскомаяПодстрока) > 0;
+ Пока НайденоМусорноеПоле Цикл
+ НовыйТекстЗапроса = СтрЗаменить(НовыйТекстЗапроса, ИскомаяПодстрока, "");
+
+ НомерПоля = НомерПоля + 1;
+ ИскомаяПодстрока = " КАК Поле" + НомерПоля;
+ НайденоМусорноеПоле = СтрНайти(НовыйТекстЗапроса, ИскомаяПодстрока) > 0;
+ КонецЦикла;
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Устанавливает в секцию ВЫБРАТЬ ключевые слова "ПЕРВЫЕ N".
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// КоличествоПолучаемыхЗаписей - Число - количество первых записей, которые необходимо выбрать.
+// - Неопределено - ключевые слова "ПЕРВЫЕ N" будут исключены из секции ВЫБРАТЬ.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция УстановитьКоличествоПолучаемыхЗаписей(Знач Запрос, Знач КоличествоПолучаемыхЗаписей, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить количество выбираемых записей в запрос уничтожения таблицы.';
+ |en = 'Cannot add the number of selected entries to the table removal query.'");
+ КонецЕсли;
+
+ ОператорВыбрать = ИзменяемыйЗапрос.Операторы[0];
+
+ ОператорВыбрать.КоличествоПолучаемыхЗаписей = КоличествоПолучаемыхЗаписей;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Устанавливает в секцию ВЫБРАТЬ ключевое слово "РАЗРЕШЕННЫЕ".
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ВыбиратьРазрешенные - Булево - признак, выбирать ли только разрешенные записи.
+// Истина - будет добавлено ключевое слово "РАЗРЕШЕННЫЕ" в секцию ВЫБРАТЬ.
+// Ложь - будет исключено ключевое слово "РАЗРЕШЕННЫЕ" в секцию ВЫБРАТЬ.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция УстановитьВыборкуРазрешенныхЗаписей(Знач Запрос, Знач ВыбиратьРазрешенные, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить количество выбираемых записей в запрос уничтожения таблицы.';
+ |en = 'Cannot add the number of selected entries to the table removal query.'");
+ КонецЕсли;
+
+ ИзменяемыйЗапрос.ВыбиратьРазрешенные = ВыбиратьРазрешенные;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+Функция УстановитьВыборкуРазрешенныхЗаписейВоВсемЗапросе(Знач Запрос, Знач ВыбиратьРазрешенные) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ПакетЗапросов = СхемаЗапроса.ПакетЗапросов;
+ КоличествоПакетов = ПакетЗапросов.Количество();
+ Если КоличествоПакетов > 0 Тогда
+ Для ИндексЗапросаВПакете = 0 По КоличествоПакетов - 1 Цикл
+ ИзменяемыйЗапрос = ПакетЗапросов.Получить(ИндексЗапросаВПакете);
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ Продолжить;
+ КонецЕсли;
+ ИзменяемыйЗапрос.ВыбиратьРазрешенные = ВыбиратьРазрешенные;
+ КонецЦикла;
+ КонецЕсли;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Добавляет выражение условия в параметры виртуальных таблиц
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ВыражениеУсловия - Строка - выражение условия для секции параметров виртуальной таблицы.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьУсловиеВЗапрос(Знач Запрос, ВыражениеУсловия, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ Если Не ТипЗнч(ВыражениеУсловия) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 2';
+ |en = 'Incorrect type of parameter 2'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить параметр в запрос уничтожения таблицы.';
+ |en = 'Cannot add parameter to the table removal query.'");
+ КонецЕсли;
+
+ // Подстановка выражения во все источники с параметрами
+ ЧастиВыражения = Новый Массив;
+ Для Каждого ОператорЗапроса Из ИзменяемыйЗапрос.Операторы Цикл
+ Для Каждого ИсточникОператора Из ОператорЗапроса.Источники Цикл
+
+ ЧастиВыражения.Очистить();
+
+ Подзапрос = ИсточникОператора.Источник;
+
+ Если ТипЗнч(Подзапрос) = Тип("ВложенныйЗапросСхемыЗапроса") Тогда
+
+ ТекстЗапросаИсточника = Подзапрос.Запрос.ПолучитьТекстЗапроса();
+ ТекстЗапросаИсточника = ДобавитьУсловиеВЗапрос(ТекстЗапросаИсточника, ВыражениеУсловия);
+ Подзапрос.Запрос.УстановитьТекстЗапроса(ТекстЗапросаИсточника);
+
+ ИначеЕсли ТипЗнч(Подзапрос) = Тип("ТаблицаСхемыЗапроса") Тогда
+
+ ПараметрыИсточника = Подзапрос.Параметры;
+ КоличествоПараметров = ПараметрыИсточника.Количество();
+
+ Если КоличествоПараметров = 0 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ // В виртуальных таблицах РБ 3 параметр с конца используется для условий по измерениям.
+ Если СтрНачинаетсяС(ИсточникОператора.Источник.ИмяТаблицы, "РегистрБухгалтерии") Тогда
+ ПоследнийПараметрИсточника = ПараметрыИсточника[КоличествоПараметров - 3];
+ Иначе
+ ПоследнийПараметрИсточника = ПараметрыИсточника[КоличествоПараметров - 1];
+ КонецЕсли;
+
+ ИсходноеВыражение = Строка(ПоследнийПараметрИсточника.Выражение);
+ Если ЗначениеЗаполнено(ИсходноеВыражение) Тогда
+ ЧастиВыражения.Добавить(ИсходноеВыражение);
+ КонецЕсли;
+ ЧастиВыражения.Добавить(ВыражениеУсловия);
+
+ ПоследнийПараметрИсточника.Выражение = Новый ВыражениеСхемыЗапроса(СтрСоединить(ЧастиВыражения, " И "));
+
+ КонецЕсли;
+
+ КонецЦикла;
+ КонецЦикла;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ // Удалим "мусор" схемы запроса
+ Для НомерПоля = 1 По 9 Цикл
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, " КАК Поле" + НомерПоля, "");
+ КонецЦикла;
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Добавляет новое соединение с источником данных.
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ПсевдонимИсточника - Строка - псевдоним источника, к которому необходимо присоединить таблицу.
+// ОписаниеСоединения - см. ОписаниеСоединения
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+// ЗаменятьСуществующееСоединение - Булево - если Истина, то существующее соединение удаляется, если Ложь - вызывается исключение.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьСоединениеВЗапрос(Знач Запрос, ПсевдонимИсточника, ОписаниеСоединения,
+ Знач ИндексЗапросаВПакете = Неопределено, ЗаменятьСуществующееСоединение = Ложь) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'");
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить поля в запрос уничтожения таблицы.';
+ |en = 'Cannot add fields to the table removal query.'");
+ КонецЕсли;
+
+ Для Каждого ТекОператор Из ИзменяемыйЗапрос.Операторы Цикл
+
+ Источник = ТекОператор.Источники.НайтиПоПсевдониму(ПсевдонимИсточника);
+ Если Источник = Неопределено Тогда
+
+ ТекстИсключения = НСтр("ru = 'В запросе отсутствует источник с псевдонимом ""%1""';
+ |en = 'The query does not contain the ""%1"" alias'");
+ ТекстИсключения = СтрШаблон(ТекстИсключения, ПсевдонимИсточника);
+
+ ВызватьИсключение ТекстИсключения;
+
+ КонецЕсли;
+
+ Соединение = Источник.Соединения.НайтиПоИмени(ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы);
+ Если Не Соединение = Неопределено
+ И Не ЗаменятьСуществующееСоединение Тогда
+
+ ТекстИсключения = НСтр("ru = 'В запросе уже присутствует соединение с таблицей ""%1""';
+ |en = 'The query already contains the ""%1"" table connection'");
+ ТекстИсключения = СтрШаблон(ТекстИсключения, ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы);
+
+ ВызватьИсключение ТекстИсключения;
+
+ ИначеЕсли Не Соединение = Неопределено
+ И ЗаменятьСуществующееСоединение Тогда
+ Источник.Соединения.Удалить(Источник.Соединения.Индекс(Соединение));
+ КонецЕсли;
+
+ Соединение = Источник.Соединения.НайтиПоПсевдониму(ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+ Если Не Соединение = Неопределено
+ И Не ЗаменятьСуществующееСоединение Тогда
+
+ ТекстИсключения = НСтр("ru = 'В запросе уже присутствует соединение с псевдонимом ""%1""';
+ |en = 'The query already contains the ""%1"" alias connection'");
+ ТекстИсключения = СтрШаблон(ТекстИсключения, ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+
+ ВызватьИсключение ТекстИсключения;
+
+ ИначеЕсли Не Соединение = Неопределено
+ И ЗаменятьСуществующееСоединение Тогда
+ Источник.Соединения.Удалить(Источник.Соединения.Индекс(Соединение));
+ КонецЕсли;
+
+ ИсточникСоединения = ТекОператор.Источники.НайтиПоИмени(ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы);
+ Если ИсточникСоединения = Неопределено Тогда
+
+ // Если таблица не описана в запросе, необходимо добавить ее описание
+ Если ИзменяемыйЗапрос.ДоступныеТаблицы.Найти(ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы) = Неопределено Тогда
+
+ Если Не ЗначениеЗаполнено(ОписаниеСоединения.ОписаниеТаблицы.ТипТаблицы) Тогда
+ ВызватьИсключение НСтр("ru = 'Не задан тип присоединяемой таблицы.';
+ |en = 'Type of the table to attach is not specified.'");
+ КонецЕсли;
+
+ Если ОписаниеСоединения.ОписаниеТаблицы.ТипТаблицы = Тип("ВложеннаяТаблицаСхемыЗапроса") Тогда
+
+ Если Не ЗначениеЗаполнено(ОписаниеСоединения.ОписаниеТаблицы.ТекстЗапроса) Тогда
+ ВызватьИсключение НСтр("ru = 'Не задан текст запроса присоединяемой таблицы.';
+ |en = 'Query text of the table to attach is not specified.'");
+ КонецЕсли;
+
+ ИсточникСоединения =
+ ТекОператор.Источники.Добавить(
+ ОписаниеСоединения.ОписаниеТаблицы.ТипТаблицы,
+ ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+
+ ИсточникСоединения.Источник.Запрос.УстановитьТекстЗапроса(ОписаниеСоединения.ОписаниеТаблицы.ТекстЗапроса);
+
+ ИначеЕсли ОписаниеСоединения.ОписаниеТаблицы.ТипТаблицы = Тип("ОписаниеВременнойТаблицыСхемыЗапроса") Тогда
+
+ Если Не ЗначениеЗаполнено(ОписаниеСоединения.ОписаниеТаблицы.ДоступныеПоля) Тогда
+ ВызватьИсключение НСтр("ru = 'Не задано описание полей присоединяемой таблицы.';
+ |en = 'Field details of the table to attach are not specified.'");
+ КонецЕсли;
+
+ ИсточникСоединения =
+ ТекОператор.Источники.Добавить(
+ ОписаниеСоединения.ОписаниеТаблицы.ТипТаблицы,
+ ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы,
+ ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+
+ Для Каждого ТекПоле Из ОписаниеСоединения.ОписаниеТаблицы.ДоступныеПоля Цикл
+ ИсточникСоединения.Источник.ДоступныеПоля.Добавить(ТекПоле);
+ КонецЦикла;
+
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Указано неправильное имя присоединяемой таблицы.';
+ |en = 'Incorrect name of the table to attach is specified.'");
+ КонецЕсли;
+
+ Иначе
+ ИсточникСоединения =
+ ТекОператор.Источники.Добавить(
+ ОписаниеСоединения.ОписаниеТаблицы.ИмяТаблицы,
+ ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+ КонецЕсли;
+
+ ИсточникСоединения.Соединения.Очистить();
+
+ КонецЕсли;
+
+ Если Источник.Соединения.Добавить(ИсточникСоединения, ОписаниеСоединения.Условие) Тогда
+ Соединение = Источник.Соединения.НайтиПоПсевдониму(ОписаниеСоединения.ОписаниеТаблицы.ПсевдонимТаблицы);
+ Если ЗначениеЗаполнено(ОписаниеСоединения.ТипСоединения) Тогда
+ Соединение.ТипСоединения = ОписаниеСоединения.ТипСоединения;
+ КонецЕсли;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Не удалось добавить соединение.';
+ |en = 'Cannot add the connection.'");
+ КонецЕсли;
+
+ КонецЦикла;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Удаляет поля из запроса.
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ПсевдонимыПолей - Строка, Массив - строка псевдонимов полей, разделенных запятой, либо массив псевдонимов полей.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то удаляется во всех запросах пакета.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция УдалитьПоляИзЗапроса(Знач Запрос, ПсевдонимыПолей, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ Если ТипЗнч(ПсевдонимыПолей) = Тип("Строка") Тогда
+ УдаляемыеПоля = СтрРазделить(ПсевдонимыПолей, ",", Ложь);
+ Иначе
+ УдаляемыеПоля = ПсевдонимыПолей;
+ КонецЕсли;
+
+ Если ИндексЗапросаВПакете = Неопределено Тогда
+ ИзменяемыеЗапросы = СхемаЗапроса.ПакетЗапросов;
+ Иначе
+ ИзменяемыеЗапросы = Новый Массив;
+ ИзменяемыеЗапросы.Добавить(ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете));
+ КонецЕсли;
+
+ Для Каждого ИзменяемыйЗапрос Из ИзменяемыеЗапросы Цикл
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Колонки = ИзменяемыйЗапрос.Колонки;
+
+ Для Каждого ТекПоле Из УдаляемыеПоля Цикл
+
+ Поле = Колонки.Найти(ТекПоле);
+ Если Не Поле = Неопределено Тогда
+ Колонки.Удалить(Колонки.Индекс(Поле));
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+#Область Конструкторы
+
+// Возвращает описание добавляемого соединения.
+//
+// Параметры:
+// ОписаниеТаблицы - см. ОписаниеТаблицы
+// Условие - Строка - условие соединения
+// ТипСоединения - Неопределено, ТипСоединенияСхемыЗапроса - тип соединения
+//
+// Возвращаемое значение:
+// Структура:
+// *ОписаниеТаблицы - см. ОписаниеТаблицы
+// *Условие - Строка
+// *ТипСоединения - ТипСоединенияСхемыЗапроса
+//
+Функция ОписаниеСоединения(ОписаниеТаблицы, Условие, ТипСоединения = Неопределено) Экспорт
+
+ Описание = Новый Структура;
+ Описание.Вставить("ОписаниеТаблицы", ОписаниеТаблицы);
+ Описание.Вставить("Условие", Условие);
+ Описание.Вставить("ТипСоединения", ТипСоединения);
+
+ Возврат Описание;
+
+КонецФункции
+
+// Описание таблицы схемы запроса
+//
+// Параметры:
+// ТипТаблицы - Тип
+// ИмяТаблицы - Строка
+// ПсевдонимТаблицы - Строка
+// ДоступныеПоля - Строка, Массив из Строка - доступные поля
+// ТекстЗапроса - Строка
+//
+// Возвращаемое значение:
+// Структура - Описание таблицы:
+// *ТипТаблицы - Тип
+// *ИмяТаблицы - Строка
+// *ПсевдонимТаблицы - Строка
+// *ДоступныеПоля - Массив из Строка
+// *ТекстЗапроса - Строка
+//
+Функция ОписаниеТаблицы(ТипТаблицы, ИмяТаблицы, ПсевдонимТаблицы, ДоступныеПоля = Неопределено, ТекстЗапроса = Неопределено) Экспорт
+
+ // ++ Обход ошибки отстутствия модуля БСП, не переносить
+ СтроковыеФункцииКлиентСервер = Неопределено;
+ // -- Обход ошибки отстутствия модуля БСП, не переносить
+
+ Описание = Новый Структура;
+ Описание.Вставить("ТипТаблицы", ТипТаблицы);
+ Описание.Вставить("ИмяТаблицы", ИмяТаблицы);
+ Описание.Вставить("ПсевдонимТаблицы", ПсевдонимТаблицы);
+ Описание.Вставить("ТекстЗапроса", ТекстЗапроса);
+
+ Если ТипЗнч(ДоступныеПоля) = Тип("Строка") Тогда
+ Описание.Вставить(
+ "ДоступныеПоля",
+ СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
+ ДоступныеПоля, ",", Истина, Истина));
+ Иначе
+ Описание.Вставить("ДоступныеПоля", ДоступныеПоля);
+ КонецЕсли;
+
+ Возврат Описание;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/src/Configuration.xml b/src/Configuration.xml
index 52befe22..d9f26704 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -280,6 +280,7 @@
__МодификацияКонфигурацииКлиентСерверПереопределяемый
__МодификацияКонфигурацииПереопределяемый
__МодификацияКонфигурацииПереопределяемыйДокумент
+ __МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик
__ОбщегоНазначенияВызовСервера
__ОбщегоНазначенияКлиент
__ОбщегоНазначенияКлиентСервер
@@ -308,6 +309,7 @@
__СправочникиПриКопировании
__СтроковыеФункцииКлиентСервер
__СтроковыеФункцииСлужебныйКлиентСервер
+ __СхемыЗапросов
__ТипСоответствияОбъектовИБПереопределяемый
__ДокументыОбработкаЗаполнения
__ДокументыОбработкаПроведения