Доработки по замене json на sqlite

This commit is contained in:
Anton Titovets
2026-06-14 19:41:22 +03:00
parent d6492bfa22
commit 3ac57e41d9
3 changed files with 80 additions and 32 deletions
@@ -1,3 +1,5 @@
#Использовать oint/api/sqlite
Перем ДанныеКонфигурации;
Перем НаборФайловФорматирования;
Перем СопоставлениеФайлов;
@@ -242,6 +244,25 @@
ВызватьИсключение "Cant find decrypted file";
КонецЕсли;
СекретныеДанные = Инструменты.ПрочитатьФайлJSON(РасшифрованныйФайл.ПолноеИмя);
ПутьRO = СтрШаблон("file:%1?mode=ro", РасшифрованныйФайл.Путь);
Таблица = "test_params";
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , , , , ПутьRO);
Если Не Результат["result"] = Истина Тогда
ВызватьИсключение Результат["error"];
КонецЕсли;
Данные = Результат["data"];
СекретныеДанные = Новый Соответствие;
Для Каждого СтрокаДанных Из Данные Цикл
СекретныеДанные.Вставить(СтрокаДанных["key"]
, ?(СтрокаДанных["type"] = "Number", Число(СтрокаДанных["value"]), СтрокаДанных["value"]));
КонецЦикла;
КонецПроцедуры
@@ -64,6 +64,7 @@
// #Использовать "../../../../tools/http"
// #Использовать "../../../../api/openai"
// #Использовать "../../../../api/rportal"
// #Использовать "../../../../api/sqlite"
// #Использовать asserts
#Если Не ВебКлиент Тогда // !OPI
@@ -9217,7 +9218,7 @@
Функция Проверка_SQLite_ГарантироватьЗаписи(Знач Результат, Знач Вариант)
Если Вариант = "Вставка" Или Вариант = "Обновление" Тогда
Если Не ЗначениеЗаполнено(Вариант) Или Вариант = "Обновление" Тогда
ОжидаетЧто(Результат["result"]).Равно(Истина);
@@ -17297,14 +17298,40 @@
Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
ПутьRO = СтрШаблон("file:%1?mode=ro", Путь);
Фильтр = Новый Структура();
Фильтр.Вставить("field", "key");
Фильтр.Вставить("type" , "=");
Фильтр.Вставить("value", Параметр);
Таблица = "test_params";
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , Фильтр, , , ПутьRO);
Если Не Результат["result"] = Истина Тогда
ВызватьИсключение Результат["error"];
КонецЕсли;
Данные = Результат["data"];
Если Данные.Количество() > 0 Тогда
Значение = Данные[0]["value"];
ТипЗначения = Данные[0]["type"];
Значение = ?(ТипЗначения = "Number", Число(Значение), Строка(Значение));
Иначе
Значение = "";
КонецЕсли;
Возврат Значение;
КонецФункции
Функция ПутьКФайлуДанных()
Путь = "";
ВозможныеПути = Новый Массив;
ВозможныеПути.Добавить("./data.sqlite");
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.sqlite");
@@ -17315,13 +17342,12 @@
ФайлРепозитория = Новый Файл(ВозможныйПуть);
Если ФайлРепозитория.Существует() Тогда
Путь = ВозможныйПуть;
Прервать;
Возврат ВозможныйПуть;
КонецЕсли;
КонецЦикла;
Возврат Путь;
ВызватьИсключение "data.sqlite not found!";
КонецФункции
@@ -17945,34 +17971,35 @@
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
Попытки = 10;
Попытки = 20;
Для Н = 1 По Попытки Цикл
Попытка
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
Значения.Вставить(Параметр, Значение);
// BSLLS:ExternalAppStarting-off
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, Значения);
Запись.Закрыть();
// BSLLS:ExternalAppStarting-on
Исключение
Если Н < Попытки Тогда
OPI_Инструменты.Пауза(Н);
Иначе
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
Данные = Новый Структура("key,value,type"
, Параметр
, OPI_Инструменты.ЧислоВСтроку(Значение)
, ?(ТипЗнч(Значение) = Тип("Число"), "Number", "String"));
Результат = OPI_SQLite.ГарантироватьЗаписи("test_params", Данные, "key", , Путь);
Если Результат["result"] Тогда
Возврат;
Иначе
Ошибка = Результат["errors"][0]["error"];
Если Ошибка = "database is locked" Тогда
OPI_Инструменты.Пауза(Н);
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ВызватьИсключение Ошибка;
КонецПроцедуры
+1 -1
View File
@@ -614,7 +614,7 @@
// END
OPI_ПолучениеДанныхТестов.Обработать(Результат, "SQLite", "ГарантироватьЗаписи", "Вставка");
OPI_ПолучениеДанныхТестов.Обработать(Результат, "SQLite", "ГарантироватьЗаписи");
Проверка = OPI_SQLite.ПолучитьЗаписи(Таблица, "*", , , , База);
OPI_ПолучениеДанныхТестов.Обработать(Проверка, "SQLite", "ГарантироватьЗаписи", "Проверка вставки");