Files
SSL/SSL/src/InformationRegisters/ОперацииСтатистики/ManagerModule.bsl
T
2022-07-14 10:40:00 +03:00

136 lines
7.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьСсылку(Наименование) Экспорт
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1);
ХешированиеДанных.Добавить(Наименование);
ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", "");
Ссылка = НайтиПоХешу(ХешНаименования);
Если Ссылка = Неопределено Тогда
Ссылка = СоздатьНовый(Наименование, ХешНаименования);
КонецЕсли;
Возврат Ссылка;
КонецФункции
Функция НайтиПоХешу(Хеш)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| ОперацииСтатистики.ИдентификаторОперации
|ИЗ
| РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики
|ГДЕ
| ОперацииСтатистики.ХешНаименования = &ХешНаименования
|";
Запрос.УстановитьПараметр("ХешНаименования", Хеш);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Если Результат.Пустой() Тогда
Ссылка = Неопределено;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Ссылка = Выборка.ИдентификаторОперации;
КонецЕсли;
Возврат Ссылка;
КонецФункции
Функция СоздатьНовый(Наименование, ХешНаименования)
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОперацииСтатистики");
ЭлементБлокировки.УстановитьЗначение("ХешНаименования", ХешНаименования);
Блокировка.Заблокировать();
Ссылка = НайтиПоХешу(ХешНаименования);
Если Ссылка = Неопределено Тогда
Ссылка = Новый УникальныйИдентификатор();
НаборЗаписей = СоздатьНаборЗаписей();
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.ХешНаименования = ХешНаименования;
НовЗапись.ИдентификаторОперации = Ссылка;
НовЗапись.Наименование = Наименование;
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей.Записать(Ложь);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Возврат Ссылка;
КонецФункции
Функция МожноНовыйКомментарий(СсылкаОперация) Экспорт
КоличествоУникальныхМаксимум = 100;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОперацииСтатистики.КоличествоУникальныхКомментариев КАК КоличествоУникальных
|ИЗ
| РегистрСведений.ОперацииСтатистики КАК ОперацииСтатистики
|ГДЕ
| ОперацииСтатистики.ИдентификаторОперации = &ИдентификаторОперации";
Запрос.УстановитьПараметр("ИдентификаторОперации", СсылкаОперация);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
КоличествоУникальных = ВыборкаДетальныеЗаписи.КоличествоУникальных;
Если КоличествоУникальных = Неопределено Тогда
Возврат Истина;
КонецЕсли;
Если КоличествоУникальных < КоличествоУникальныхМаксимум Тогда
МожноНовыйКомментарий = Истина;
Иначе
МожноНовыйКомментарий = Ложь;
КонецЕсли;
Возврат МожноНовыйКомментарий;
КонецФункции
Процедура УвеличитьКоличествоУникальныхКомментариев(СсылкаОперация, СсылкаКомментарий) Экспорт
НаборЗаписей = СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИдентификаторОперации.Установить(СсылкаОперация);
НаборЗаписей.Прочитать();
Для Каждого ТекЗапись Из НаборЗаписей Цикл
ТекЗапись.КоличествоУникальныхКомментариев = ТекЗапись.КоличествоУникальныхКомментариев + 1;
КонецЦикла;
НаборЗаписей.Записать(Истина);
РегистрыСведений.КомментарииОперацииСтатистики.СоздатьНовуюЗапись(СсылкаОперация, СсылкаКомментарий);
КонецПроцедуры
#КонецОбласти
#КонецЕсли