You've already forked OpenIntegrations
							
							
				mirror of
				https://github.com/Bayselonarrend/OpenIntegrations.git
				synced 2025-10-30 23:47:46 +02:00 
			
		
		
		
	Fastfix
This commit is contained in:
		
							
								
								
									
										12183
									
								
								service/dictionaries/en.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12183
									
								
								service/dictionaries/en.json
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										17
									
								
								src/ru/OInt/core/Modules/OPI_SQLite.os
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								src/ru/OInt/core/Modules/OPI_SQLite.os
									
									
									
									
										vendored
									
									
								
							| @@ -234,6 +234,23 @@ | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| // Удалить записи | ||||
| // Удаляет записи из таблицы | ||||
| //  | ||||
| // Параметры: | ||||
| //  Таблица    - Строка               - Имя таблицы                                          - table | ||||
| //  Фильтры    - Массив Из Структура  - Массив фильтров. См. ПолучитьСтруктуруФильтраЗаписей - filter | ||||
| //  Соединение - Строка, Произвольный - Существующее соединение или путь к базе              - db | ||||
| // | ||||
| // Возвращаемое значение: | ||||
| //  Структура Из КлючИЗначение, Строка - Результат выполнения запроса | ||||
| Функция УдалитьЗаписи(Знач Таблица, Знач Фильтры = "", Знач Соединение = "") Экспорт | ||||
|      | ||||
|     Результат = OPI_ЗапросыSQL.УдалитьЗаписи(OPI_SQLite, Таблица, Фильтры, Соединение); | ||||
|     Возврат Результат; | ||||
|      | ||||
| КонецФункции | ||||
|  | ||||
| // Получить структуру фильтра записей | ||||
| // Получает структуру шаблон для фильтрации записей в запросах ORM | ||||
| // | ||||
|   | ||||
							
								
								
									
										2
									
								
								src/ru/OInt/lib.config
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								src/ru/OInt/lib.config
									
									
									
									
										vendored
									
									
								
							| @@ -23,7 +23,7 @@ | ||||
|     <module name="OPI_YandexID" file="core/Modules/OPI_YandexID.os"/> | ||||
|     <module name="OPI_YandexMarket" file="core/Modules/OPI_YandexMarket.os"/> | ||||
|     <module name="OPI_YandexMetrika" file="core/Modules/OPI_YandexMetrika.os"/> | ||||
|     <module name="os" file="tools/Modules/os"/> | ||||
|     <module name="OPI_ЗапросыSQL" file="tools/Modules/OPI_ЗапросыSQL.os"/> | ||||
|     <module name="OPI_Инструменты" file="tools/Modules/internal/Modules/OPI_Инструменты.os"/> | ||||
|     <module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/> | ||||
|     <module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/> | ||||
|   | ||||
							
								
								
									
										583
									
								
								src/ru/OInt/tools/Modules/OPI_ЗапросыSQL.os
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										583
									
								
								src/ru/OInt/tools/Modules/OPI_ЗапросыSQL.os
									
									
									
									
										vendored
									
									
								
							| @@ -42,164 +42,200 @@ | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Функция ПустаяСхемаSQL(Знач Действие) Экспорт | ||||
| Функция СоздатьТаблицу(Знач Модуль, Знач Таблица, Знач СтруктураКолонок, Знач Соединение = "") Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Действие); | ||||
|     ТекстОшибки = "Структура колонок не является валидной структурой ключ-значение"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(СтруктураКолонок, ТекстОшибки); | ||||
|  | ||||
|     Действие = вРег(Действие); | ||||
|     Схема = ПустаяСхемаSQL("CREATE"); | ||||
|  | ||||
|     Если Действие = "SELECT" Тогда | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|  | ||||
|         Схема = ПустаяСхемаSelect(); | ||||
|     Для Каждого Колонка Из СтруктураКолонок Цикл | ||||
|         ДобавитьКолонку(Схема, Колонка.Ключ, Колонка.Значение); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ИначеЕсли Действие = "INSERT" Тогда | ||||
|     Запрос    = СформироватьТекстSQL(Схема); | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение); | ||||
|  | ||||
|         Схема = ПустаяСхемаInsert(); | ||||
|  | ||||
|     ИначеЕсли Действие = "UPDATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаUpdate(); | ||||
|  | ||||
|     ИначеЕсли Действие = "DELETE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаDelete(); | ||||
|  | ||||
|     ИначеЕсли Действие = "CREATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаCreate(); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема = Новый Структура; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат Схема; | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстSQL(Знач Схема) Экспорт | ||||
| Функция ДобавитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач МассивДанных | ||||
|     , Знач Транзакция = Истина | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     ТекстОшибки = "Переданное значение не является валидной схемой SQL запроса"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Схема, ТекстОшибки); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(МассивДанных); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьБулево(Транзакция); | ||||
|  | ||||
|     ТипСхемы = ""; | ||||
|     Соединение = Модуль.ОткрытьСоединение(Соединение); | ||||
|  | ||||
|     Если Не OPI_Инструменты.ПолеКоллекцииСуществует(Схема, "type", ТипСхемы) Тогда | ||||
|         ВызватьИсключение ТекстОшибки; | ||||
|     Если Не Модуль.ЭтоКоннектор(Соединение) Тогда | ||||
|         Возврат Соединение; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТипСхемы = вРег(ТипСхемы); | ||||
|     Если Транзакция Тогда | ||||
|  | ||||
|     Если ТипСхемы = "SELECT" Тогда | ||||
|         Начало = Модуль.ВыполнитьЗапросSQL("BEGIN TRANSACTION", , , Соединение); | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстSelect(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "INSERT" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстInsert(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "UPDATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстUpdate(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "DELETE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстDelete(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "CREATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстCreate(Схема); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         ТекстЗапроса = ""; | ||||
|         Если Не Начало["result"] Тогда | ||||
|             Возврат Начало; | ||||
|         КонецЕсли; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат ТекстЗапроса; | ||||
|     Счетчик         = 0; | ||||
|     СчетчикУспешных = 0; | ||||
|  | ||||
|     Ошибка          = Ложь; | ||||
|     МассивОшибок    = Новый Массив; | ||||
|     ОшибкаКоллекции = "Invalid data"; | ||||
|  | ||||
|     СтруктураРезультата = Новый Структура; | ||||
|  | ||||
|     Для Каждого Запись Из МассивДанных Цикл | ||||
|  | ||||
|         Если Ошибка И Транзакция Тогда | ||||
|  | ||||
|             Откат = Модуль.ВыполнитьЗапросSQL("ROLLBACK", , , Соединение); | ||||
|  | ||||
|             СчетчикУспешных = 0; | ||||
|             СтруктураРезультата.Вставить("rollback", Откат); | ||||
|             Прервать; | ||||
|  | ||||
|         КонецЕсли; | ||||
|  | ||||
|         Счетчик = Счетчик + 1; | ||||
|         Ошибка  = Ложь; | ||||
|  | ||||
|         Попытка | ||||
|             OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ОшибкаКоллекции); | ||||
|         Исключение | ||||
|             МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, ОшибкаКоллекции)); | ||||
|             Ошибка = Истина; | ||||
|             Продолжить; | ||||
|         КонецПопытки; | ||||
|  | ||||
|         Результат = ДобавитьЗапись(Модуль, Таблица, Запись, Соединение); | ||||
|  | ||||
|         Если Результат["result"] Тогда | ||||
|  | ||||
|             СчетчикУспешных = СчетчикУспешных + 1; | ||||
|  | ||||
|         Иначе | ||||
|  | ||||
|             МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"])); | ||||
|             Ошибка = Истина; | ||||
|  | ||||
|         КонецЕсли; | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
|     Если Транзакция И Не Ошибка Тогда | ||||
|  | ||||
|         Завершение = Модуль.ВыполнитьЗапросSQL("COMMIT", , , Соединение); | ||||
|         СтруктураРезультата.Вставить("commit", Завершение); | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     СтруктураРезультата.Вставить("result", МассивОшибок.Количество() = 0); | ||||
|     СтруктураРезультата.Вставить("rows"  , СчетчикУспешных); | ||||
|     СтруктураРезультата.Вставить("errors", МассивОшибок); | ||||
|  | ||||
|      Возврат СтруктураРезультата; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Процедура ДобавитьКолонку(Схема, Знач Имя, Знач Тип) Экспорт | ||||
| Функция ПолучитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач Поля       = "*" | ||||
|     , Знач Фильтры    = "" | ||||
|     , Знач Сортировка = "" | ||||
|     , Знач Количество = "" | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|     Схема = ПустаяСхемаSQL("SELECT"); | ||||
|  | ||||
|     Если Не Схема["type"] = "CREATE" Тогда | ||||
|         Возврат; | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|     УстановитьЛимит(Схема, Количество); | ||||
|  | ||||
|     ЗаполнитьПоля(Схема, Поля); | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|     ЗаполнитьСортировку(Схема, Сортировка); | ||||
|  | ||||
|     Запрос = СформироватьТекстSQL(Схема); | ||||
|  | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ОбновитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач СтруктураЗначений | ||||
|     , Знач Фильтры    = "" | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("UPDATE"); | ||||
|  | ||||
|     МассивПолей    = Новый Массив; | ||||
|     МассивЗначений = Новый Массив; | ||||
|  | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|     РазделитьКоллекциюДанных(СтруктураЗначений, МассивПолей, МассивЗначений); | ||||
|  | ||||
|     Схема["values"] = МассивЗначений; | ||||
|  | ||||
|     Для Каждого Поле Из МассивПолей Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|  | ||||
|     Запрос    = СформироватьТекстSQL(Схема); | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция УдалитьЗаписи(Знач Модуль, Знач Таблица, Знач Фильтры = "", Знач Соединение = "") Экспорт | ||||
|      | ||||
|     Схема = ПустаяСхемаSQL("DELETE"); | ||||
|      | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|      | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|  | ||||
|     Запрос    = СформироватьТекстSQL(Схема); | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|      | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПолучитьСтруктуруФильтраЗаписей(Знач Пустая = Ложь) Экспорт | ||||
|  | ||||
|     СтруктураФильтра = Новый Структура; | ||||
|  | ||||
|     СтруктураФильтра.Вставить("field", "<имя поля для отбора>"); | ||||
|     СтруктураФильтра.Вставить("type" , "<тип сравнения>"); | ||||
|     СтруктураФильтра.Вставить("value", "<значение для сравнения>"); | ||||
|     СтруктураФильтра.Вставить("union", "<связь со следующим условием: AND, OR и пр.>"); | ||||
|     СтруктураФильтра.Вставить("raw"  , "<истина - значение будет вставлено текстом, как есть, ложь - через параметр>"); | ||||
|  | ||||
|     Если Пустая Тогда | ||||
|         СтруктураФильтра = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураФильтра); | ||||
|     КонецЕсли; | ||||
|  | ||||
|     СоответствиеКолонки = Новый Соответствие; | ||||
|     СоответствиеКолонки.Вставить(Имя, Тип); | ||||
|     //@skip-check constructor-function-return-section | ||||
|     Возврат СтруктураФильтра; | ||||
|  | ||||
|     Схема["columns"].Добавить(СоответствиеКолонки); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьПоле(Схема, Знач Имя) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема["set"].Добавить(Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьОтбор(Схема, Знач Поле, Знач Тип, Знач Значение, Знач Группировка, Знач КакЕсть) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Группировка); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьБулево(КакЕсть); | ||||
|  | ||||
|     ОсновнаяСтруктура = Новый Структура("field,type,union" | ||||
|         , Поле | ||||
|         , Тип | ||||
|         , Группировка); | ||||
|  | ||||
|     Если КакЕсть Тогда | ||||
|  | ||||
|         ОсновнаяСтруктура.Вставить("value", Строка(Значение)); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема["values"].Добавить(Значение); | ||||
|  | ||||
|         ПорядковыйНомер = Схема["values"].Количество(); | ||||
|         ОсновнаяСтруктура.Вставить("value", "?" + OPI_Инструменты.ЧислоВСтроку(ПорядковыйНомер)); | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|  | ||||
|     Схема["filter"].Добавить(ОсновнаяСтруктура); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьСортировку(Схема, Знач Поле, Знач Тип) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|  | ||||
|     Схема["order"].Добавить(Новый Структура("field,type", Поле, Тип)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
|  | ||||
| Процедура УстановитьИмяТаблицы(Схема, Знач Имя) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема.Вставить("table", Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьЛимит(Схема, Знач Количество) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьЧисло(Количество); | ||||
|  | ||||
|     Схема.Вставить("limit", Количество); | ||||
|  | ||||
| КонецПроцедуры | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| @@ -237,9 +273,10 @@ | ||||
|  | ||||
|     Схема = Новый Структура("type", "UPDATE"); | ||||
|  | ||||
|     Схема.Вставить("table" , ""); | ||||
|     Схема.Вставить("set"   , Новый Массив); | ||||
|     Схема.Вставить("filter", Новый Массив); | ||||
|     Схема.Вставить("table"   , ""); | ||||
|     Схема.Вставить("set"     , Новый Массив); | ||||
|     Схема.Вставить("filter"  , Новый Массив); | ||||
|     Схема.Вставить("values"  , Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| @@ -318,7 +355,23 @@ | ||||
|  | ||||
| Функция СформироватьТекстUpdate(Знач Схема) | ||||
|  | ||||
|     ТекстSQL = ""; | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table,set,values"); | ||||
|  | ||||
|     Таблица = Схема["table"]; | ||||
|     Поля    = Схема["set"]; | ||||
|     Фильтры = Схема["filter"]; | ||||
|  | ||||
|     ШаблонSQL = "UPDATE %1 SET %2 %3"; | ||||
|  | ||||
|     ТекстФильтра = СформироватьТекстФильтра(Фильтры); | ||||
|  | ||||
|     Для Н = 0 По Поля.ВГраница() Цикл | ||||
|  | ||||
|         Поля[Н] = Поля[Н] + " = ?" + OPI_Инструменты.ЧислоВСтроку(Н + 1); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, СтрСоединить(Поля, "," + Символы.ПС), ТекстФильтра); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| @@ -326,7 +379,16 @@ | ||||
|  | ||||
| Функция СформироватьТекстDelete(Знач Схема) | ||||
|  | ||||
|     ТекстSQL = ""; | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table"); | ||||
|  | ||||
|     Таблица = Схема["table"]; | ||||
|     Фильтры = Схема["filter"]; | ||||
|      | ||||
|     ШаблонSQL = "DELETE FROM %1 %2"; | ||||
|      | ||||
|     ТекстФильтра = СформироватьТекстФильтра(Фильтры); | ||||
|      | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, ТекстФильтра); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| @@ -363,6 +425,87 @@ | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Вспомогательные | ||||
|  | ||||
| Функция ПустаяСхемаSQL(Знач Действие) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Действие); | ||||
|  | ||||
|     Действие = вРег(Действие); | ||||
|  | ||||
|     Если Действие = "SELECT" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаSelect(); | ||||
|  | ||||
|     ИначеЕсли Действие = "INSERT" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаInsert(); | ||||
|  | ||||
|     ИначеЕсли Действие = "UPDATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаUpdate(); | ||||
|  | ||||
|     ИначеЕсли Действие = "DELETE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаDelete(); | ||||
|  | ||||
|     ИначеЕсли Действие = "CREATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаCreate(); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема = Новый Структура; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстSQL(Знач Схема) | ||||
|  | ||||
|     ТекстОшибки = "Переданное значение не является валидной схемой SQL запроса"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Схема, ТекстОшибки); | ||||
|  | ||||
|     ТипСхемы = ""; | ||||
|  | ||||
|     Если Не OPI_Инструменты.ПолеКоллекцииСуществует(Схема, "type", ТипСхемы) Тогда | ||||
|         ВызватьИсключение ТекстОшибки; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТипСхемы = вРег(ТипСхемы); | ||||
|  | ||||
|     Если ТипСхемы = "SELECT" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстSelect(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "INSERT" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстInsert(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "UPDATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстUpdate(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "DELETE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстDelete(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "CREATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстCreate(Схема); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         ТекстЗапроса = ""; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат ТекстЗапроса; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстНастроекSelect(Знач Фильтры, Знач Сортировка, Знач Количество) | ||||
|  | ||||
|     ШаблонБлока = "%1 | ||||
| @@ -454,6 +597,93 @@ | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ДобавитьЗапись(Знач Модуль, Знач Таблица, Знач Запись, Знач Соединение) | ||||
|  | ||||
|     МассивПолей    = Новый Массив; | ||||
|     МассивЗначений = Новый Массив; | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("INSERT"); | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|  | ||||
|     РазделитьКоллекциюДанных(Запись, МассивПолей, МассивЗначений); | ||||
|  | ||||
|     Для Каждого Поле Из МассивПолей Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     Запрос = СформироватьТекстSQL(Схема); | ||||
|  | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, МассивЗначений, , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений) | ||||
|  | ||||
|     ТекстОшибки = "Некорректный набор данных для обновления"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ТекстОшибки); | ||||
|  | ||||
|     Для Каждого Элемент Из Запись Цикл | ||||
|  | ||||
|         МассивПолей.Добавить(Элемент.Ключ); | ||||
|         МассивЗначений.Добавить(Элемент.Значение); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьПоля(Схема, Знач Поля) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Поля) Тогда | ||||
|         Поля = "*"; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(Поля); | ||||
|  | ||||
|     Для Каждого Поле Из Поля Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьФильтры(Схема, Знач Фильтры) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Фильтры) Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(Фильтры); | ||||
|  | ||||
|     Для Каждого Фильтр Из Фильтры Цикл | ||||
|  | ||||
|         ДобавитьОтбор(Схема | ||||
|             , Фильтр["field"] | ||||
|             , ?(Фильтр.Свойство("type"), Фильтр["type"], "=") | ||||
|             , Фильтр["value"] | ||||
|             , ?(Фильтр.Свойство("union"), Фильтр["union"], "AND") | ||||
|             , ?(Фильтр.Свойство("raw"), Фильтр["raw"], Ложь)); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьСортировку(Знач Схема, Знач Сортировка) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Сортировка) Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Сортировка); | ||||
|  | ||||
|     Для Каждого Элемент Из Сортировка Цикл | ||||
|  | ||||
|         ДобавитьСортировку(Схема, Элемент.Ключ, Элемент.Значение); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПроверитьОбязательныеПоляСхемы(Схема, Знач Поля) | ||||
|  | ||||
|     МассивОбязательныхПолей = СтрРазделить(Поля, ","); | ||||
| @@ -465,4 +695,85 @@ | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьКолонку(Схема, Знач Имя, Знач Тип) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|  | ||||
|     Если Не Схема["type"] = "CREATE" Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     СоответствиеКолонки = Новый Соответствие; | ||||
|     СоответствиеКолонки.Вставить(Имя, Тип); | ||||
|  | ||||
|     Схема["columns"].Добавить(СоответствиеКолонки); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьПоле(Схема, Знач Имя) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема["set"].Добавить(Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьОтбор(Схема, Знач Поле, Знач Тип, Знач Значение, Знач Группировка, Знач КакЕсть) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Группировка); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьБулево(КакЕсть); | ||||
|  | ||||
|     ОсновнаяСтруктура = Новый Структура("field,type,union" | ||||
|         , Поле | ||||
|         , Тип | ||||
|         , Группировка); | ||||
|  | ||||
|     Если КакЕсть Тогда | ||||
|  | ||||
|         ОсновнаяСтруктура.Вставить("value", Строка(Значение)); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема["values"].Добавить(Значение); | ||||
|  | ||||
|         ПорядковыйНомер = Схема["values"].Количество(); | ||||
|         ОсновнаяСтруктура.Вставить("value", "?" + OPI_Инструменты.ЧислоВСтроку(ПорядковыйНомер)); | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|  | ||||
|     Схема["filter"].Добавить(ОсновнаяСтруктура); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьСортировку(Схема, Знач Поле, Знач Тип) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|  | ||||
|     Схема["order"].Добавить(Новый Структура("field,type", Поле, Тип)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьИмяТаблицы(Схема, Знач Имя) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема.Вставить("table", Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьЛимит(Схема, Знач Количество) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьЧисло(Количество); | ||||
|  | ||||
|     Схема.Вставить("limit", Количество); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -2127,9 +2127,9 @@ | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПолучитьОбщийМодуль(Знач Имя) | ||||
|  | ||||
|      | ||||
|     Модуль = Вычислить(Имя); | ||||
|  | ||||
|      | ||||
|     Возврат Модуль; | ||||
| КонецФункции | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user