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..82b20ac6 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,16 +146,8 @@
ТОГДА "Список"
ИНАЧЕ ПредопределенныеЗначения.Значение
КОНЕЦ КАК Значение,
- ПредопределенныеЗначения.Пароль КАК Пароль,
ПредопределенныеЗначения.СписокЗначений КАК СписокЗначений,
ПредопределенныеЗначения.Комментарий КАК Комментарий,
- ПредопределенныеЗначения.ЗначенияЭлементов.(
- Ссылка КАК Ссылка,
- НомерСтроки КАК НомерСтроки,
- Значение КАК Значение
- ) КАК ЗначенияЭлементов,
- ПредопределенныеЗначения.Предопределенный КАК Предопределенный,
- ПредопределенныеЗначения.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
ИЗ
ПланВидовХарактеристик.__ПредопределенныеЗначения КАК ПредопределенныеЗначения
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..d03bf5c0 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,33 @@
КонецПроцедуры
#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура МодифицироватьФорму()
+
+ // ++ Обход ошибки отстутствия модуля БСП, не переносить
+ СхемыЗапросов = __ВспомогательныйСхемыЗапросовERPНеПереносить;
+ // -- Обход ошибки отстутствия модуля БСП, не переносить
+
+ // ++ Пример программного изменения динамического списка через схему запроса
+ Если Список.ПроизвольныйЗапрос Тогда
+ ТекстЗапроса = Список.ТекстЗапроса;
+ Список.ТекстЗапроса = СхемыЗапросов.ДобавитьПолеВыборкиВЗапрос(
+ ТекстЗапроса,
+ "Пароль",
+ "Пароль",
+ ,
+ ,
+ Истина);
+
+ Элемент = Элементы.Добавить("Пароль", Тип("ПолеФормы"), Элементы.Список);
+ Элемент.Вид = ВидПоляФормы.ПолеФлажка;
+ Элемент.ПутьКДанным = "Список.Пароль";
+ КонецЕсли;
+ // -- Пример программного изменения динамического списка через схему запроса
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git "a/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214.xml" "b/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214.xml"
new file mode 100644
index 00000000..4b2931ce
--- /dev/null
+++ "b/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __ВспомогательныйСхемыЗапросовERPНеПереносить
+
+
+ ru
+ Вспомогательный схемы запросов ERP (не переносить)
+
+
+
+ false
+ false
+ true
+ true
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214/Ext/Module.bsl" "b/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214/Ext/Module.bsl"
new file mode 100644
index 00000000..930c02a9
--- /dev/null
+++ "b/src/CommonModules/__\320\222\321\201\320\277\320\276\320\274\320\276\320\263\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\271\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\262ERP\320\235\320\265\320\237\320\265\321\200\320\265\320\275\320\276\321\201\320\270\321\202\321\214/Ext/Module.bsl"
@@ -0,0 +1,832 @@
+
+#Область ПрограммныйИнтерфейс
+
+// Возвращает схему запроса по значению переданного индекса в пакете запросов.
+//
+// Параметры:
+// СхемаЗапроса - СхемаЗапроса - схема запроса.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// ЗапросВыбораСхемыЗапроса, ЗапросУничтоженияТаблицыСхемыЗапроса - измененный текст запроса или запрос.
+//
+Функция ЗапросПакетаЗапросов(Знач СхемаЗапроса, ИндексЗапросаВПакете = Неопределено) Экспорт
+ Перем ЗапросПакетаЗапросов;
+
+ ПакетЗапросов = СхемаЗапроса.ПакетЗапросов;
+
+ Если ИндексЗапросаВПакете = Неопределено Тогда
+ ИндексЗапросаВПакете = ПакетЗапросов.Количество() - 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;
+ КонецЦикла;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Устанавливает в секцию ВЫБРАТЬ ключевые слова "ПЕРВЫЕ 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 = 'Невозможно добавить создание временной таблицы в запрос уничтожения таблицы.';
+ |en = 'Cannot add temporary table creation to the table removal query.'");
+ КонецЕсли;
+
+ ИзменяемыйЗапрос.ТаблицаДляПомещения = ИмяВременнойТаблицы;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Устанавливает индексацию в выборке запроса.
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ПсевдонимыИндексируемыхПолей - Строка - имена полей, которые будут включены в индекс запроса
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция УстановитьИндексациюПолейЗапроса(Знач Запрос, Знач ПсевдонимыИндексируемыхПолей, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ // ++ Обход ошибки отстутствия модуля БСП, не переносить
+ СтроковыеФункцииКлиентСервер = Неопределено;
+ // -- Обход ошибки отстутствия модуля БСП, не переносить
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
+ |en = 'Incorrect type of parameter 1'") ;
+ КонецЕсли;
+
+ СхемаЗапроса = Новый СхемаЗапроса;
+
+ СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
+
+ ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
+
+ Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно добавить создание временной таблицы в запрос уничтожения таблицы.';
+ |en = 'Cannot add temporary table creation to the table removal query.'");
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ИзменяемыйЗапрос.ТаблицаДляПомещения) Тогда
+ ВызватьИсключение НСтр("ru = 'Невозможно установить индексацию полей в запросе, в котором не создается временная таблица.';
+ |en = 'Cannot set field indexing in the query in which a temporary table is not generated.'");
+ КонецЕсли;
+
+ ИзменяемыйЗапрос.Индекс.Очистить();
+
+ ПсевдонимыИндексируемыхПолей =
+ СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
+ ПсевдонимыИндексируемыхПолей,,,
+ Истина);
+
+ Для Каждого ТекПоле Из ПсевдонимыИндексируемыхПолей Цикл
+ ИзменяемыйЗапрос.Индекс.Добавить(ТекПоле);
+ КонецЦикла;
+
+ ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = ТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = ТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+КонецФункции
+
+// Добавляет выражение условия в параметры виртуальных таблиц
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ВыражениеУсловия - Строка - выражение условия для секции параметров виртуальной таблицы.
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьУсловиеВЗапрос(Знач Запрос, ВыражениеУсловия, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("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 change the field alias in the table removal query.'");
+ КонецЕсли;
+
+ КолонкаКУдалению = ИзменяемыйЗапрос.Колонки.Найти(НовыйПсевдонимПоля);
+ Если Не КолонкаКУдалению = Неопределено Тогда
+ ИзменяемыйЗапрос.Колонки.Удалить(ИзменяемыйЗапрос.Колонки.Индекс(КолонкаКУдалению));
+ КонецЕсли;
+
+ КолонкаЗапроса = ИзменяемыйЗапрос.Колонки.Найти(ПсевдонимПоля);
+ Если Не КолонкаЗапроса = Неопределено Тогда
+
+ КолонкаЗапроса.Псевдоним = НовыйПсевдонимПоля;
+
+ НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ Запрос = НовыйТекстЗапроса;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ Запрос.Текст = НовыйТекстЗапроса;
+ КонецЕсли;
+
+ Возврат Запрос;
+
+ Иначе
+ Возврат Запрос;
+ КонецЕсли;
+
+КонецФункции
+
+// Добавляет новое соединение с источником данных.
+//
+// Параметры:
+// Запрос - Строка, Запрос - текст запроса или запрос.
+// ПсевдонимИсточника - Строка - псевдоним источника, к которому необходимо присоединить таблицу.
+// ОписаниеСоединения - см. ОписаниеСоединения
+// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
+// ЗаменятьСуществующееСоединение - Булево - если Истина, то существующее соединение удаляется, если Ложь - вызывается исключение.
+//
+// Возвращаемое значение:
+// Строка, Запрос - измененный текст запроса или запрос.
+//
+Функция ДобавитьСоединениеВЗапрос(Знач Запрос, ПсевдонимИсточника, ОписаниеСоединения,
+ Знач ИндексЗапросаВПакете = Неопределено, ЗаменятьСуществующееСоединение = Ложь) Экспорт
+
+ Если ТипЗнч(Запрос) = Тип("Строка") Тогда
+ ТекстЗапроса = Запрос;
+ ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
+ ТекстЗапроса = Запрос.Текст;
+ Иначе
+ ВызватьИсключение НСтр("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 6510147f..fa9cec14 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -299,6 +299,7 @@
__СтроковыеФункцииКлиентСервер
__ТипСоответствияОбъектовИБПереопределяемый
__ВспомогательныйМодульНеПереноситьКлиентСервер
+ __ВспомогательныйСхемыЗапросовERPНеПереносить
__ДокументыОбработкаЗаполнения
__ДокументыОбработкаПроведения
__ДокументыПередЗаписью