From 61d88532428e4953e257b61e0e9312cc65f73e7d Mon Sep 17 00:00:00 2001 From: DenisUshakov Date: Wed, 10 Apr 2024 10:29:18 +0300 Subject: [PATCH] sampleChangingDL --- .../Ext/Form.xml" | 12 +- .../Ext/Form/Module.bsl" | 37 + ...0\276\321\201\320\270\321\202\321\214.xml" | 23 + .../Ext/Module.bsl" | 832 ++++++++++++++++++ src/Configuration.xml | 1 + 5 files changed, 896 insertions(+), 9 deletions(-) create mode 100644 "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" create mode 100644 "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" 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 @@ ТОГДА "Список" ИНАЧЕ ПредопределенныеЗначения.Значение КОНЕЦ КАК Значение, - ПредопределенныеЗначения.Пароль КАК Пароль, ПредопределенныеЗначения.СписокЗначений КАК СписокЗначений, ПредопределенныеЗначения.Комментарий КАК Комментарий, - ПредопределенныеЗначения.ЗначенияЭлементов.( - Ссылка КАК Ссылка, - НомерСтроки КАК НомерСтроки, - Значение КАК Значение - ) КАК ЗначенияЭлементов, - ПредопределенныеЗначения.Предопределенный КАК Предопределенный, - ПредопределенныеЗначения.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки ИЗ ПланВидовХарактеристик.__ПредопределенныеЗначения КАК ПредопределенныеЗначения</QueryText> 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16"> + <CommonModule uuid="edefce4a-714f-474d-a936-75c3ab0712f5"> + <Properties> + <Name>__ВспомогательныйСхемыЗапросовERPНеПереносить</Name> + <Synonym> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вспомогательный схемы запросов ERP (не переносить)</v8:content> + </v8:item> + </Synonym> + <Comment/> + <Global>false</Global> + <ClientManagedApplication>false</ClientManagedApplication> + <Server>true</Server> + <ExternalConnection>true</ExternalConnection> + <ClientOrdinaryApplication>false</ClientOrdinaryApplication> + <ServerCall>false</ServerCall> + <Privileged>false</Privileged> + <ReturnValuesReuse>DontUse</ReturnValuesReuse> + </Properties> + </CommonModule> +</MetaDataObject> \ 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 @@ <CommonModule>__СтроковыеФункцииКлиентСервер</CommonModule> <CommonModule>__ТипСоответствияОбъектовИБПереопределяемый</CommonModule> <CommonModule>__ВспомогательныйМодульНеПереноситьКлиентСервер</CommonModule> + <CommonModule>__ВспомогательныйСхемыЗапросовERPНеПереносить</CommonModule> <EventSubscription>__ДокументыОбработкаЗаполнения</EventSubscription> <EventSubscription>__ДокументыОбработкаПроведения</EventSubscription> <EventSubscription>__ДокументыПередЗаписью</EventSubscription>