1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-06-16 04:03:20 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot)
2025-08-12 13:07:23 +03:00
parent f4a8d37c59
commit 3749ce654d
57 changed files with 9155 additions and 8773 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
PictureFile = GetTempFileName("png");
Image.Write(PictureFile); // PictureFile - File to disk
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
DataArray = New Array;
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Name = "new_col";
DataType = "TEXT";
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.ClearTable(Table, Base);
+1 -1
View File
@@ -4,7 +4,7 @@
Extension = "https://hut.openintegrations.dev/test_data/uuid.so"; // URL, Path or Binary Data
EndIf;
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
EntryPoint = "sqlite3_uuid_init";
Connection = OPI_SQLite.CreateConnection(Base);
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
ColoumnsStruct = New Structure;
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Filters = New Array;
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.DeleteTable(Table, Base);
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Name = "new_col";
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Fields = New Array;
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.GetTableInformation(Table, Base);
+1 -1
View File
@@ -1,4 +1,4 @@
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
FieldsStructure = New Structure;
+1 -1
View File
@@ -47,7 +47,7 @@ Parameters with Binary data type can also accept file paths on disk and URLs
Extension = "https://hut.openintegrations.dev/test_data/uuid.so"; // URL, Path or Binary Data
EndIf;
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
EntryPoint = "sqlite3_uuid_init";
Connection = OPI_SQLite.CreateConnection(Base);
+1 -1
View File
@@ -40,7 +40,7 @@ Binary data can also be transferred as a structure `{'blob':File path}`
PictureFile = GetTempFileName("png");
Image.Write(PictureFile); // PictureFile - File to disk
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
DataArray = New Array;
+1 -1
View File
@@ -30,7 +30,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Name = "new_col";
DataType = "TEXT";
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.ClearTable(Table, Base);
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
ColoumnsStruct = New Structure;
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Filters = New Array;
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Name = "new_col";
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.DeleteTable(Table, Base);
+1 -1
View File
@@ -35,7 +35,7 @@ This function does not update the data type of existing columns
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
+1 -1
View File
@@ -36,7 +36,7 @@ Values of the Binary data type (BLOB) are returned as `{'blob':Base64 string}`
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Fields = New Array;
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
Result = OPI_SQLite.GetTableInformation(Table, Base);
+1 -1
View File
@@ -30,7 +30,7 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
Base = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
Base = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Table = "test";
FieldsStructure = New Structure;
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
+1 -1
View File
@@ -4,7 +4,7 @@
ФайлКартинки = ПолучитьИмяВременногоФайла("png");
Картинка.Записать(ФайлКартинки); // ФайлКартинки - Файл на диске
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
МассивДанных = Новый Массив;
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Имя = "new_col";
ТипДанных = "TEXT";
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
СтруктураПолей = Новый Структура;
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.ОчиститьТаблицу(Таблица, База);
@@ -4,7 +4,7 @@
Расширение = "https://hut.openintegrations.dev/test_data/uuid.so"; // URL, Путь или Двоичные данные
КонецЕсли;
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
ТочкаВхода = "sqlite3_uuid_init";
Соединение = OPI_SQLite.ОткрытьСоединение(База);
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Поля = Новый Массив;
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.ПолучитьИнформациюОТаблице(Таблица, База);
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
СтруктураКолонок = Новый Структура;
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Фильтры = Новый Массив;
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Имя = "new_col";
+1 -1
View File
@@ -1,4 +1,4 @@
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.УдалитьТаблицу(Таблица, База);
+1 -1
View File
@@ -47,7 +47,7 @@ import TabItem from '@theme/TabItem';
Расширение = "https://hut.openintegrations.dev/test_data/uuid.so"; // URL, Путь или Двоичные данные
КонецЕсли;
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
ТочкаВхода = "sqlite3_uuid_init";
Соединение = OPI_SQLite.ОткрытьСоединение(База);
+1 -1
View File
@@ -40,7 +40,7 @@ import TabItem from '@theme/TabItem';
ФайлКартинки = ПолучитьИмяВременногоФайла("png");
Картинка.Записать(ФайлКартинки); // ФайлКартинки - Файл на диске
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
МассивДанных = Новый Массив;
+1 -1
View File
@@ -30,7 +30,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Имя = "new_col";
ТипДанных = "TEXT";
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.ОчиститьТаблицу(Таблица, База);
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
СтруктураКолонок = Новый Структура;
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Фильтры = Новый Массив;
+1 -1
View File
@@ -29,7 +29,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Имя = "new_col";
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.УдалитьТаблицу(Таблица, База);
+1 -1
View File
@@ -35,7 +35,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
+1 -1
View File
@@ -36,7 +36,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Поля = Новый Массив;
+1 -1
View File
@@ -28,7 +28,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
Результат = OPI_SQLite.ПолучитьИнформациюОТаблице(Таблица, База);
+1 -1
View File
@@ -30,7 +30,7 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
База = "C:\Users\bayse\AppData\Local\Temp\v8_42C7_51c.sqlite";
База = "C:\Users\bayse\AppData\Local\Temp\v8_1212_2fd.sqlite";
Таблица = "test";
СтруктураПолей = Новый Структура;
+8433 -8433
View File
File diff suppressed because it is too large Load Diff
+165 -63
View File
@@ -981,44 +981,182 @@ EndFunction
Function ProcessRecords(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
ErrorsArray = New Array;
CollectionError = "Invalid data";
Counter = 0;
SuccessCount = 0;
If OPI_AddIns.FileTransferRequired() Then
Result = AddRecordsBatch(Module, Table, DataArray, Transaction, Connection);
Else
Result = AddRecordsSeparately(Module, Table, DataArray, Transaction, Connection);
EndIf;
Return Result;
EndFunction
Function AddRecordsSeparately(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
ErrorsArray = New Array;
Counter = 0;
SuccessCount = 0;
For Each Record In DataArray Do
Counter = Counter + 1;
Try
OPI_TypeConversion.GetKeyValueCollection(Record, CollectionError);
Except
ErrorsArray.Add(New Structure("row,error", Counter, CollectionError));
If Not CheckRecordCorrectness(Record, ErrorsArray, Counter) Then
If Transaction Then
Break;
Else
Continue;
EndIf;
EndTry;
EndIf;
Result = AddRow(Module, Table, Record, Connection);
If Result["result"] Then
SuccessCount = SuccessCount + 1;
Else
ErrorsArray.Add(New Structure("row,error", Counter, Result["error"]));
If Transaction Then
Break;
EndIf;
EndIf;
EndDo;
Result = New Structure("ErrorsArray,SuccessCount", ErrorsArray, SuccessCount);
Return Result;
EndFunction
Function AddRecordsBatch(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
BlanksArray = New Array;
ErrorsArray = New Array;
//@skip-check missing-temporary-file-deletion
BlanksPath = GetTempFileName();
//@skip-check missing-temporary-file-deletion
KeysPath = GetTempFileName();
Counter = 0;
SuccessCount = 0;
For Each Record In DataArray Do
Counter = Counter + 1;
If Not CheckRecordCorrectness(Record, ErrorsArray, Counter) Then
If Transaction Then
Break;
Else
Continue;
EndIf;
EndIf;
Result = AddRow(Module, Table, Record, Connection, False);
BlanksArray.Add(Result);
EndDo;
Try
OPI_Tools.WriteJSONFile(BlanksPath, BlanksArray);
Initialization = Connection.BatchQuery(BlanksPath, KeysPath);
Initialization = OPI_Tools.JsonToStructure(Initialization);
OPI_Tools.RemoveFileWithTry(BlanksPath, "Failed to delete query package file after installation");
If Not Initialization["result"] Then
Raise Initialization["error"];
EndIf;
Keys = OPI_Tools.ReadJSONFile(KeysPath, True);
OPI_Tools.RemoveFileWithTry(KeysPath, "Failed to delete key file after initialization");
Except
Error = StrTemplate("Batch query error: %1", ErrorDescription());
ErrorsArray.Add(New Structure("row,error", -1, Error));
Return New Structure("ErrorsArray,SuccessCount", ErrorsArray, 0);
EndTry;
For Each Key In Keys Do
Result = Connection.Execute(Key);
Result = ProcessQueryResult(Connection, Key, Result);
If Result["result"] Then
SuccessCount = SuccessCount + 1;
Else
ErrorsArray.Add(New Structure("row,error", Counter, Result["error"]));
If Transaction Then
Break;
EndIf;
EndIf;
EndDo;
Result = New Structure("ErrorsArray,SuccessCount", ErrorsArray, SuccessCount);
Return Result;
EndFunction
Function CheckRecordCorrectness(Record, ErrorsArray, Val Counter)
CollectionError = "Invalid data";
Correct = True;
Try
OPI_TypeConversion.GetKeyValueCollection(Record, CollectionError);
Except
ErrorsArray.Add(New Structure("row,error", Counter, CollectionError));
Correct = False;
EndTry;
Return Correct;
EndFunction
Function AddRow(Val Module, Val Table, Val Record, Val Connection, Val ExecuteNow = True)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT", Module);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
For Each Field In FieldArray Do
AddField(Scheme, Field);
EndDo;
Request = FormSQLText(Scheme);
If ExecuteNow Then
Result = Module.ExecuteSQLQuery(Request, ValuesArray, , Connection);
Else
Parameters = ProcessParameters(ValuesArray, Module.GetTypesStructure());
Result = New Map;
Result.Insert("text" , Request);
Result.Insert("params" , Parameters);
Result.Insert("force_result", False);
EndIf;
Return Result;
EndFunction
@@ -1075,28 +1213,6 @@ Function ProcessRecordsEnd(Val ProcessedStructure, Val Module, Val Transaction,
EndFunction
Function AddRow(Val Module, Val Table, Val Record, Val Connection)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT", Module);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
For Each Field In FieldArray Do
AddField(Scheme, Field);
EndDo;
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, ValuesArray, , Connection);
Return Result;
EndFunction
Function NormalizeTable(Val Module
, Val Table
, Val ColoumnsStruct
@@ -1461,20 +1577,16 @@ EndProcedure
Function InitializeQuery(Val Connector, Val QueryText, Val ForceResult)
If OPI_AddIns.FileTransferRequired() Then
If OPI_AddIns.FileTransferRequired() And StrLen(QueryText) > 1000 Then
TFN = GetTempFileName();
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
TextBD = GetBinaryDataFromString(QueryText);
TextBD.Write(TFN);
Key = Connector.InitQuery(TFN, ForceResult, True);
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete query file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete query file after execution");
Else
Key = Connector.InitQuery(QueryText, ForceResult, False);
@@ -1488,29 +1600,22 @@ EndFunction
Function SetQueryParams(Val Connector, Val QueryKey, Val Parameters)
If OPI_AddIns.FileTransferRequired() Then
If OPI_AddIns.FileTransferRequired() And ValueIsFilled(Parameters) Then
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
Try
JSONWriter = New JSONWriter();
JSONWriter.OpenFile(TFN, , False);
WriteJSON(JSONWriter, Parameters);
JSONWriter.Close();
OPI_Tools.WriteJSONFile(TFN, Parameters);
Except
ErrInfo = ErrorDescription();
ErrInfo = ErrorDescription();
Raise StrTemplate("JSON parameter array validation error: %1", ErrInfo);
EndTry;
JSONWriter = Undefined;
Adding = Connector.SetParamsFromFile(QueryKey, TFN);
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete query parameters file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete query parameters file after execution");
Else
Parameters_ = OPI_Tools.JSONString(Parameters);
@@ -1540,7 +1645,8 @@ Function ProcessQueryResult(Val Connector, Val QueryKey, Val ExecutionResult)
If OPI_AddIns.FileTransferRequired() Then
TFN = GetTempFileName();
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
Result = Connector.GetResultAsFile(QueryKey, TFN);
Result = OPI_Tools.JsonToStructure(Result);
@@ -1548,12 +1654,8 @@ Function ProcessQueryResult(Val Connector, Val QueryKey, Val ExecutionResult)
Result = OPI_Tools.ReadJSONFile(TFN, True);
EndIf;
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete result file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete result file after execution");
Else
Result = Connector.GetResultAsString(QueryKey);
+28
View File
@@ -274,6 +274,15 @@ Function ReadJSONFile(Val Path, Val ToMap = False) Export
EndFunction
Procedure WriteJSONFile(Val Path, Val Data) Export
JSONWriter = New JSONWriter();
JSONWriter.OpenFile(Path, , False);
WriteJSON(JSONWriter, Data);
JSONWriter.Close();
EndProcedure
#EndRegion
#Region XML
@@ -837,6 +846,17 @@ Procedure StreamToStart(CurrentStream) Export
EndProcedure
Procedure RemoveFileWithTry(Val Path, Val MessageText) Export
Try
DeleteFiles(Path);
Except
//@skip-check use-non-recommended-method
Message(MessageText);
EndTry;
EndProcedure
Function NumberToString(Val Value) Export
If TypeOf(Value) = Type("Number") Then
@@ -1185,6 +1205,10 @@ Function ПрочитатьJSONФайл(Val Путь, Val ВСоответств
Return ReadJSONFile(Путь, ВСоответствие);
EndFunction
Procedure ЗаписатьJSONФайл(Val Путь, Val Данные) Export
WriteJSONFile(Путь, Данные);
EndProcedure
Function ОбработатьXML(XML) Export
Return ProcessXML(XML);
EndFunction
@@ -1261,6 +1285,10 @@ Procedure ПотокВНачало(ТекущийПоток) Export
StreamToStart(ТекущийПоток);
EndProcedure
Procedure УдалитьФайлВПопытке(Val Путь, Val ТекстСообщения) Export
RemoveFileWithTry(Путь, ТекстСообщения);
EndProcedure
Function ЧислоВСтроку(Val Значение) Export
Return NumberToString(Значение);
EndFunction
+165 -63
View File
@@ -981,44 +981,182 @@ EndFunction
Function ProcessRecords(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
ErrorsArray = New Array;
CollectionError = "Invalid data";
Counter = 0;
SuccessCount = 0;
If OPI_AddIns.FileTransferRequired() Then
Result = AddRecordsBatch(Module, Table, DataArray, Transaction, Connection);
Else
Result = AddRecordsSeparately(Module, Table, DataArray, Transaction, Connection);
EndIf;
Return Result;
EndFunction
Function AddRecordsSeparately(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
ErrorsArray = New Array;
Counter = 0;
SuccessCount = 0;
For Each Record In DataArray Do
Counter = Counter + 1;
Try
OPI_TypeConversion.GetKeyValueCollection(Record, CollectionError);
Except
ErrorsArray.Add(New Structure("row,error", Counter, CollectionError));
If Not CheckRecordCorrectness(Record, ErrorsArray, Counter) Then
If Transaction Then
Break;
Else
Continue;
EndIf;
EndTry;
EndIf;
Result = AddRow(Module, Table, Record, Connection);
If Result["result"] Then
SuccessCount = SuccessCount + 1;
Else
ErrorsArray.Add(New Structure("row,error", Counter, Result["error"]));
If Transaction Then
Break;
EndIf;
EndIf;
EndDo;
Result = New Structure("ErrorsArray,SuccessCount", ErrorsArray, SuccessCount);
Return Result;
EndFunction
Function AddRecordsBatch(Val Module, Val Table, Val DataArray, Val Transaction, Val Connection)
BlanksArray = New Array;
ErrorsArray = New Array;
//@skip-check missing-temporary-file-deletion
BlanksPath = GetTempFileName();
//@skip-check missing-temporary-file-deletion
KeysPath = GetTempFileName();
Counter = 0;
SuccessCount = 0;
For Each Record In DataArray Do
Counter = Counter + 1;
If Not CheckRecordCorrectness(Record, ErrorsArray, Counter) Then
If Transaction Then
Break;
Else
Continue;
EndIf;
EndIf;
Result = AddRow(Module, Table, Record, Connection, False);
BlanksArray.Add(Result);
EndDo;
Try
OPI_Tools.WriteJSONFile(BlanksPath, BlanksArray);
Initialization = Connection.BatchQuery(BlanksPath, KeysPath);
Initialization = OPI_Tools.JsonToStructure(Initialization);
OPI_Tools.RemoveFileWithTry(BlanksPath, "Failed to delete query package file after installation");
If Not Initialization["result"] Then
Raise Initialization["error"];
EndIf;
Keys = OPI_Tools.ReadJSONFile(KeysPath, True);
OPI_Tools.RemoveFileWithTry(KeysPath, "Failed to delete key file after initialization");
Except
Error = StrTemplate("Batch query error: %1", ErrorDescription());
ErrorsArray.Add(New Structure("row,error", -1, Error));
Return New Structure("ErrorsArray,SuccessCount", ErrorsArray, 0);
EndTry;
For Each Key In Keys Do
Result = Connection.Execute(Key);
Result = ProcessQueryResult(Connection, Key, Result);
If Result["result"] Then
SuccessCount = SuccessCount + 1;
Else
ErrorsArray.Add(New Structure("row,error", Counter, Result["error"]));
If Transaction Then
Break;
EndIf;
EndIf;
EndDo;
Result = New Structure("ErrorsArray,SuccessCount", ErrorsArray, SuccessCount);
Return Result;
EndFunction
Function CheckRecordCorrectness(Record, ErrorsArray, Val Counter)
CollectionError = "Invalid data";
Correct = True;
Try
OPI_TypeConversion.GetKeyValueCollection(Record, CollectionError);
Except
ErrorsArray.Add(New Structure("row,error", Counter, CollectionError));
Correct = False;
EndTry;
Return Correct;
EndFunction
Function AddRow(Val Module, Val Table, Val Record, Val Connection, Val ExecuteNow = True)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT", Module);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
For Each Field In FieldArray Do
AddField(Scheme, Field);
EndDo;
Request = FormSQLText(Scheme);
If ExecuteNow Then
Result = Module.ExecuteSQLQuery(Request, ValuesArray, , Connection);
Else
Parameters = ProcessParameters(ValuesArray, Module.GetTypesStructure());
Result = New Map;
Result.Insert("text" , Request);
Result.Insert("params" , Parameters);
Result.Insert("force_result", False);
EndIf;
Return Result;
EndFunction
@@ -1075,28 +1213,6 @@ Function ProcessRecordsEnd(Val ProcessedStructure, Val Module, Val Transaction,
EndFunction
Function AddRow(Val Module, Val Table, Val Record, Val Connection)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT", Module);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
For Each Field In FieldArray Do
AddField(Scheme, Field);
EndDo;
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, ValuesArray, , Connection);
Return Result;
EndFunction
Function NormalizeTable(Val Module
, Val Table
, Val ColoumnsStruct
@@ -1461,20 +1577,16 @@ EndProcedure
Function InitializeQuery(Val Connector, Val QueryText, Val ForceResult)
If OPI_AddIns.FileTransferRequired() Then
If OPI_AddIns.FileTransferRequired() And StrLen(QueryText) > 1000 Then
TFN = GetTempFileName();
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
TextBD = GetBinaryDataFromString(QueryText);
TextBD.Write(TFN);
Key = Connector.InitQuery(TFN, ForceResult, True);
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete query file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete query file after execution");
Else
Key = Connector.InitQuery(QueryText, ForceResult, False);
@@ -1488,29 +1600,22 @@ EndFunction
Function SetQueryParams(Val Connector, Val QueryKey, Val Parameters)
If OPI_AddIns.FileTransferRequired() Then
If OPI_AddIns.FileTransferRequired() And ValueIsFilled(Parameters) Then
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
Try
JSONWriter = New JSONWriter();
JSONWriter.OpenFile(TFN, , False);
WriteJSON(JSONWriter, Parameters);
JSONWriter.Close();
OPI_Tools.WriteJSONFile(TFN, Parameters);
Except
ErrInfo = ErrorDescription();
ErrInfo = ErrorDescription();
Raise StrTemplate("JSON parameter array validation error: %1", ErrInfo);
EndTry;
JSONWriter = Undefined;
Adding = Connector.SetParamsFromFile(QueryKey, TFN);
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete query parameters file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete query parameters file after execution");
Else
Parameters_ = OPI_Tools.JSONString(Parameters);
@@ -1540,7 +1645,8 @@ Function ProcessQueryResult(Val Connector, Val QueryKey, Val ExecutionResult)
If OPI_AddIns.FileTransferRequired() Then
TFN = GetTempFileName();
//@skip-check missing-temporary-file-deletion
TFN = GetTempFileName();
Result = Connector.GetResultAsFile(QueryKey, TFN);
Result = OPI_Tools.JsonToStructure(Result);
@@ -1548,12 +1654,8 @@ Function ProcessQueryResult(Val Connector, Val QueryKey, Val ExecutionResult)
Result = OPI_Tools.ReadJSONFile(TFN, True);
EndIf;
Try
DeleteFiles(TFN);
Except
//@skip-check use-non-recommended-method
Message("Failed to delete result file after execution");
EndTry;
OPI_Tools.RemoveFileWithTry(TFN, "Failed to delete result file after execution");
Else
Result = Connector.GetResultAsString(QueryKey);
+20
View File
@@ -274,6 +274,15 @@ Function ReadJSONFile(Val Path, Val ToMap = False) Export
EndFunction
Procedure WriteJSONFile(Val Path, Val Data) Export
JSONWriter = New JSONWriter();
JSONWriter.OpenFile(Path, , False);
WriteJSON(JSONWriter, Data);
JSONWriter.Close();
EndProcedure
#EndRegion
#Region XML
@@ -837,6 +846,17 @@ Procedure StreamToStart(CurrentStream) Export
EndProcedure
Procedure RemoveFileWithTry(Val Path, Val MessageText) Export
Try
DeleteFiles(Path);
Except
//@skip-check use-non-recommended-method
Message(MessageText);
EndTry;
EndProcedure
Function NumberToString(Val Value) Export
If TypeOf(Value) = Type("Number") Then
+160 -58
View File
@@ -981,8 +981,19 @@
Функция ОбработатьЗаписи(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
Результат = ДобавитьЗаписиПакетом(Модуль, Таблица, МассивДанных, Транзакция, Соединение);
Иначе
Результат = ДобавитьЗаписиРаздельно(Модуль, Таблица, МассивДанных, Транзакция, Соединение);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ДобавитьЗаписиРаздельно(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
МассивОшибок = Новый Массив;
ОшибкаКоллекции = "Invalid data";
Счетчик = 0;
СчетчикУспешных = 0;
@@ -990,35 +1001,162 @@
Счетчик = Счетчик + 1;
Попытка
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ОшибкаКоллекции);
Исключение
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, ОшибкаКоллекции));
Если Не ПроверитьКорректностьЗаписи(Запись, МассивОшибок, Счетчик) Тогда
Если Транзакция Тогда
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецПопытки;
КонецЕсли;
Результат = ДобавитьЗапись(Модуль, Таблица, Запись, Соединение);
Если Результат["result"] Тогда
СчетчикУспешных = СчетчикУспешных + 1;
Иначе
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
Если Транзакция Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, СчетчикУспешных);
Возврат Результат;
КонецФункции
Функция ДобавитьЗаписиПакетом(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
МассивЗаготовок = Новый Массив;
МассивОшибок = Новый Массив;
//@skip-check missing-temporary-file-deletion
ПутьЗаготовок = ПолучитьИмяВременногоФайла();
//@skip-check missing-temporary-file-deletion
ПутьКлючей = ПолучитьИмяВременногоФайла();
Счетчик = 0;
СчетчикУспешных = 0;
Для Каждого Запись Из МассивДанных Цикл
Счетчик = Счетчик + 1;
Если Не ПроверитьКорректностьЗаписи(Запись, МассивОшибок, Счетчик) Тогда
Если Транзакция Тогда
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Результат = ДобавитьЗапись(Модуль, Таблица, Запись, Соединение, Ложь);
МассивЗаготовок.Добавить(Результат);
КонецЦикла;
Попытка
OPI_Инструменты.ЗаписатьJSONФайл(ПутьЗаготовок, МассивЗаготовок);
Инициализация = Соединение.BatchQuery(ПутьЗаготовок, ПутьКлючей);
Инициализация = OPI_Инструменты.JsonВСтруктуру(Инициализация);
OPI_Инструменты.УдалитьФайлВПопытке(ПутьЗаготовок, "Не удалось удалить файл пакета запросов после установки");
Если Не Инициализация["result"] Тогда
ВызватьИсключение Инициализация["error"];
КонецЕсли;
Ключи = OPI_Инструменты.ПрочитатьJSONФайл(ПутьКлючей, Истина);
OPI_Инструменты.УдалитьФайлВПопытке(ПутьКлючей, "Не удалось удалить файл ключей после инициализации");
Исключение
Ошибка = СтрШаблон("Batch query error: %1", ОписаниеОшибки());
МассивОшибок.Добавить(Новый Структура("row,error", -1, Ошибка));
Возврат Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, 0);
КонецПопытки;
Для Каждого Ключ Из Ключи Цикл
Результат = Соединение.Execute(Ключ);
Результат = ОбработатьРезультатЗапроса(Соединение, Ключ, Результат);
Если Результат["result"] Тогда
СчетчикУспешных = СчетчикУспешных + 1;
Иначе
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
Если Транзакция Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, СчетчикУспешных);
Возврат Результат;
КонецФункции
Функция ПроверитьКорректностьЗаписи(Запись, МассивОшибок, Знач Счетчик)
ОшибкаКоллекции = "Invalid data";
Корректна = Истина;
Попытка
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ОшибкаКоллекции);
Исключение
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, ОшибкаКоллекции));
Корректна = Ложь;
КонецПопытки;
Возврат Корректна;
КонецФункции
Функция ДобавитьЗапись(Знач Модуль, Знач Таблица, Знач Запись, Знач Соединение, Знач ВыполнятьСразу = Истина)
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
Схема = ПустаяСхемаSQL("INSERT", Модуль);
УстановитьИмяТаблицы(Схема, Таблица);
РазделитьКоллекциюДанных(Запись, МассивПолей, МассивЗначений);
Для Каждого Поле Из МассивПолей Цикл
ДобавитьПоле(Схема, Поле);
КонецЦикла;
Запрос = СформироватьТекстSQL(Схема);
Если ВыполнятьСразу Тогда
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, МассивЗначений, , Соединение);
Иначе
Параметры = ОбработатьПараметры(МассивЗначений, Модуль.ПолучитьСтруктуруТипов());
Результат = Новый Соответствие;
Результат.Вставить("text" , Запрос);
Результат.Вставить("params" , Параметры);
Результат.Вставить("force_result", Ложь);
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -1075,28 +1213,6 @@
КонецФункции
Функция ДобавитьЗапись(Знач Модуль, Знач Таблица, Знач Запись, Знач Соединение)
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
Схема = ПустаяСхемаSQL("INSERT", Модуль);
УстановитьИмяТаблицы(Схема, Таблица);
РазделитьКоллекциюДанных(Запись, МассивПолей, МассивЗначений);
Для Каждого Поле Из МассивПолей Цикл
ДобавитьПоле(Схема, Поле);
КонецЦикла;
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, МассивЗначений, , Соединение);
Возврат Результат;
КонецФункции
Функция НормализоватьТаблицу(Знач Модуль
, Знач Таблица
, Знач СтруктураКолонок
@@ -1461,20 +1577,16 @@
Функция ИнициализироватьЗапрос(Знач Коннектор, Знач ТекстЗапроса, Знач ФорсироватьРезультат)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() И СтрДлина(ТекстЗапроса) > 1000 Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
ТекстДД = ПолучитьДвоичныеДанныеИзСтроки(ТекстЗапроса);
ТекстДД.Записать(ИВФ);
Ключ = Коннектор.InitQuery(ИВФ, ФорсироватьРезультат, Истина);
Попытка
УдалитьФайлы(ИВФ);
Исключение
//@skip-check use-non-recommended-method
Сообщить("Не удалось удалить файл запроса после установки");
КонецПопытки;
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл запроса после установки");
Иначе
Ключ = Коннектор.InitQuery(ТекстЗапроса, ФорсироватьРезультат, Ложь);
@@ -1488,29 +1600,22 @@
Функция УстановитьПараметрыЗапроса(Знач Коннектор, Знач КлючЗапроса, Знач Параметры)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() И ЗначениеЗаполнено(Параметры) Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
Попытка
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ИВФ, , Ложь);
ЗаписатьJSON(ЗаписьJSON, Параметры);
ЗаписьJSON.Закрыть();
OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Параметры);
Исключение
ООп = ОписаниеОшибки();
ООп = ОписаниеОшибки();
ВызватьИсключение СтрШаблон("Ошибка валидации JSON массива параметров: %1", ООп);
КонецПопытки;
ЗаписьJSON = Неопределено;
Добавление = Коннектор.SetParamsFromFile(КлючЗапроса, ИВФ);
Попытка
УдалитьФайлы(ИВФ);
Исключение
//@skip-check use-non-recommended-method
Сообщить("Не удалось удалить файл параметров запроса после установки");
КонецПопытки;
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл параметров запроса после установки");
Иначе
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры);
@@ -1540,6 +1645,7 @@
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
Результат = Коннектор.GetResultAsFile(КлючЗапроса, ИВФ);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
@@ -1548,12 +1654,8 @@
Результат = OPI_Инструменты.ПрочитатьJSONФайл(ИВФ, Истина);
КонецЕсли;
Попытка
УдалитьФайлы(ИВФ);
Исключение
//@skip-check use-non-recommended-method
Сообщить("Не удалось удалить файл результата запроса после установки");
КонецПопытки;
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл результата запроса после установки");
Иначе
Результат = Коннектор.GetResultAsString(КлючЗапроса);
@@ -274,6 +274,15 @@
КонецФункции
Процедура ЗаписатьJSONФайл(Знач Путь, Знач Данные) Экспорт
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(Путь, , Ложь);
ЗаписатьJSON(ЗаписьJSON, Данные);
ЗаписьJSON.Закрыть();
КонецПроцедуры
#КонецОбласти
#Область XML
@@ -837,6 +846,17 @@
КонецПроцедуры
Процедура УдалитьФайлВПопытке(Знач Путь, Знач ТекстСообщения) Экспорт
Попытка
УдалитьФайлы(Путь);
Исключение
//@skip-check use-non-recommended-method
Сообщить(ТекстСообщения);
КонецПопытки;
КонецПроцедуры
Функция ЧислоВСтроку(Знач Значение) Экспорт
Если ТипЗнч(Значение) = Тип("Число") Тогда
@@ -1185,6 +1205,10 @@ Function ReadJSONFile(Val Path, Val ToMap = False) Export
Return ПрочитатьJSONФайл(Path, ToMap);
EndFunction
Procedure WriteJSONFile(Val Path, Val Data) Export
ЗаписатьJSONФайл(Path, Data);
EndProcedure
Function ProcessXML(XML) Export
Return ОбработатьXML(XML);
EndFunction
@@ -1261,6 +1285,10 @@ Procedure StreamToStart(CurrentStream) Export
ПотокВНачало(CurrentStream);
EndProcedure
Procedure RemoveFileWithTry(Val Path, Val MessageText) Export
УдалитьФайлВПопытке(Path, MessageText);
EndProcedure
Function NumberToString(Val Value) Export
Return ЧислоВСтроку(Value);
EndFunction
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
// MIT License
@@ -356,7 +356,7 @@
Функция ВыполнитьЗапросСОбработкой(Коннектор, Знач ТекстЗапроса, Знач ФорсироватьРезультат, Знач Параметры) Экспорт
КлючЗапроса = ИнициализироватьЗапрос(Коннектор, ТекстЗапроса, ФорсироватьРезультат);
Если Не КлючЗапроса["result"] Тогда
Возврат КлючЗапроса;
Иначе
@@ -982,17 +982,17 @@
Функция ОбработатьЗаписи(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
Результат = ДобавитьЗаписиПакетом(Модуль, Таблица, МассивДанных, Транзакция, Соединение);
Результат = ДобавитьЗаписиПакетом(Модуль, Таблица, МассивДанных, Транзакция, Соединение);
Иначе
Результат = ДобавитьЗаписиРаздельно(Модуль, Таблица, МассивДанных, Транзакция, Соединение);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ДобавитьЗаписиРаздельно(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
МассивОшибок = Новый Массив;
Счетчик = 0;
СчетчикУспешных = 0;
@@ -1014,33 +1014,33 @@
Если Результат["result"] Тогда
СчетчикУспешных = СчетчикУспешных + 1;
Иначе
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
Если Транзакция Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, СчетчикУспешных);
Возврат Результат;
КонецФункции
Функция ДобавитьЗаписиПакетом(Знач Модуль, Знач Таблица, Знач МассивДанных, Знач Транзакция, Знач Соединение)
МассивЗаготовок = Новый Массив;
МассивОшибок = Новый Массив;
//@skip-check missing-temporary-file-deletion
ПутьЗаготовок = ПолучитьИмяВременногоФайла();
//@skip-check missing-temporary-file-deletion
ПутьКлючей = ПолучитьИмяВременногоФайла();
Счетчик = 0;
СчетчикУспешных = 0;
@@ -1058,74 +1058,74 @@
Результат = ДобавитьЗапись(Модуль, Таблица, Запись, Соединение, Ложь);
МассивЗаготовок.Добавить(Результат);
КонецЦикла;
Попытка
OPI_Инструменты.ЗаписатьJSONФайл(ПутьЗаготовок, МассивЗаготовок);
Инициализация = Соединение.BatchQuery(ПутьЗаготовок, ПутьКлючей);
Инициализация = OPI_Инструменты.JsonВСтруктуру(Инициализация);
OPI_Инструменты.УдалитьФайлВПопытке(ПутьЗаготовок, "Не удалось удалить файл пакета запросов после установки");
Если Не Инициализация["result"] Тогда
ВызватьИсключение Инициализация["error"];
КонецЕсли;
Ключи = OPI_Инструменты.ПрочитатьJSONФайл(ПутьКлючей, Истина);
OPI_Инструменты.УдалитьФайлВПопытке(ПутьКлючей, "Не удалось удалить файл ключей после инициализации");
Исключение
Ошибка = СтрШаблон("Batch query error: %1", ОписаниеОшибки());
МассивОшибок.Добавить(Новый Структура("row,error", -1, Ошибка));
Возврат Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, 0);
КонецПопытки;
Для Каждого Ключ Из Ключи Цикл
Результат = Соединение.Execute(Ключ);
Результат = ОбработатьРезультатЗапроса(Соединение, Ключ, Результат);
Результат = ОбработатьРезультатЗапроса(Соединение, Ключ, Результат);
Если Результат["result"] Тогда
СчетчикУспешных = СчетчикУспешных + 1;
Иначе
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"]));
Если Транзакция Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат = Новый Структура("МассивОшибок,СчетчикУспешных", МассивОшибок, СчетчикУспешных);
Возврат Результат;
КонецФункции
Функция ПроверитьКорректностьЗаписи(Запись, МассивОшибок, Знач Счетчик)
ОшибкаКоллекции = "Invalid data";
Корректна = Истина;
Попытка
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ОшибкаКоллекции);
Исключение
МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, ОшибкаКоллекции));
Корректна = Ложь;
КонецПопытки;
Возврат Корректна;
КонецФункции
Функция ДобавитьЗапись(Знач Модуль, Знач Таблица, Знач Запись, Знач Соединение, Знач ВыполнятьСразу = Истина)
@@ -1146,17 +1146,17 @@
Если ВыполнятьСразу Тогда
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, МассивЗначений, , Соединение);
Иначе
Параметры = ОбработатьПараметры(МассивЗначений, Модуль.ПолучитьСтруктуруТипов());
Иначе
Параметры = ОбработатьПараметры(МассивЗначений, Модуль.ПолучитьСтруктуруТипов());
Результат = Новый Соответствие;
Результат.Вставить("text", Запрос);
Результат.Вставить("params", Параметры);
Результат.Вставить("text" , Запрос);
Результат.Вставить("params" , Параметры);
Результат.Вставить("force_result", Ложь);
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -1577,95 +1577,95 @@
Функция ИнициализироватьЗапрос(Знач Коннектор, Знач ТекстЗапроса, Знач ФорсироватьРезультат)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() И СтрДлина(ТекстЗапроса) > 1000 Тогда
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() И СтрДлина(ТекстЗапроса) > 1000 Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
ТекстДД = ПолучитьДвоичныеДанныеИзСтроки(ТекстЗапроса);
ТекстДД.Записать(ИВФ);
Ключ = Коннектор.InitQuery(ИВФ, ФорсироватьРезультат, Истина);
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл запроса после установки");
Иначе
Ключ = Коннектор.InitQuery(ТекстЗапроса, ФорсироватьРезультат, Ложь);
КонецЕсли;
Ключ = OPI_Инструменты.JSONВСтруктуру(Ключ);
Возврат Ключ;
Возврат Ключ;
КонецФункции
Функция УстановитьПараметрыЗапроса(Знач Коннектор, Знач КлючЗапроса, Знач Параметры)
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() И ЗначениеЗаполнено(Параметры) Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
Попытка
Попытка
OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Параметры);
Исключение
ООп = ОписаниеОшибки();
ВызватьИсключение СтрШаблон("Ошибка валидации JSON массива параметров: %1", ООп);
КонецПопытки;
ЗаписьJSON = Неопределено;
Исключение
ООп = ОписаниеОшибки();
ВызватьИсключение СтрШаблон("Ошибка валидации JSON массива параметров: %1", ООп);
КонецПопытки;
ЗаписьJSON = Неопределено;
Добавление = Коннектор.SetParamsFromFile(КлючЗапроса, ИВФ);
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл параметров запроса после установки");
Иначе
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры);
Добавление = Коннектор.SetParamsFromString(КлючЗапроса, Параметры_);
КонецЕсли;
Добавление = OPI_Инструменты.JsonВСтруктуру(Добавление);
Возврат Добавление;
Добавление = OPI_Инструменты.JsonВСтруктуру(Добавление);
Возврат Добавление;
КонецФункции
Функция ОбработатьРезультатЗапроса(Знач Коннектор, Знач КлючЗапроса, Знач РезультатВыполнения)
РезультатВыполнения = OPI_Инструменты.JsonВСтруктуру(РезультатВыполнения);
Если Не РезультатВыполнения["result"] Тогда
Возврат РезультатВыполнения;
ИначеЕсли РезультатВыполнения["data"] = Ложь Тогда
РезультатВыполнения.Удалить("data");
Возврат РезультатВыполнения;
Иначе
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
Результат = Коннектор.GetResultAsFile(КлючЗапроса, ИВФ);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Если Результат["result"] Тогда
Результат = OPI_Инструменты.ПрочитатьJSONФайл(ИВФ, Истина);
КонецЕсли;
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл результата запроса после установки");
РезультатВыполнения = OPI_Инструменты.JsonВСтруктуру(РезультатВыполнения);
Иначе
Результат = Коннектор.GetResultAsString(КлючЗапроса);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
КонецЕсли;
Если Не РезультатВыполнения["result"] Тогда
Возврат РезультатВыполнения;
ИначеЕсли РезультатВыполнения["data"] = Ложь Тогда
РезультатВыполнения.Удалить("data");
Возврат РезультатВыполнения;
Иначе
Если OPI_Компоненты.ТребуетсяПередачаЧерезФайл() Тогда
//@skip-check missing-temporary-file-deletion
ИВФ = ПолучитьИмяВременногоФайла();
Результат = Коннектор.GetResultAsFile(КлючЗапроса, ИВФ);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Если Результат["result"] Тогда
Результат = OPI_Инструменты.ПрочитатьJSONФайл(ИВФ, Истина);
КонецЕсли;
OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить файл результата запроса после установки");
Иначе
Результат = Коннектор.GetResultAsString(КлючЗапроса);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
КонецЕсли;
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецФункции
Функция ОбработатьПараметр(ТекущийПараметр, СтруктураТипов, КакОбъект = Истина)
@@ -275,12 +275,12 @@
КонецФункции
Процедура ЗаписатьJSONФайл(Знач Путь, Знач Данные) Экспорт
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(Путь, , Ложь);
ЗаписатьJSON(ЗаписьJSON, Данные);
ЗаписьJSON.Закрыть();
ЗаписьJSON.Закрыть();
КонецПроцедуры
#КонецОбласти
@@ -854,7 +854,7 @@
//@skip-check use-non-recommended-method
Сообщить(ТекстСообщения);
КонецПопытки;
КонецПроцедуры
Функция ЧислоВСтроку(Знач Значение) Экспорт