Первая версия

This commit is contained in:
tsvetkoff
2026-07-28 09:31:42 +05:00
commit e6058577c9
13 changed files with 572 additions and 0 deletions
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>НастройкиПериодическиеЗначения</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.5.1
Base-Project: 101_ЦМСЧ_ЗиКГУ
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ChartOfCharacteristicTypes xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bc9d543b-f32f-4e0e-a00f-a10c805e196a">
<producedTypes>
<objectType typeId="0c7df7a5-6e0f-4c2c-8b08-5cf3fa0ce4c6" valueTypeId="d00693ca-c10d-49b3-935f-52b009817d36"/>
<refType typeId="f2914413-bb29-4125-ad6d-65a8a74a2612" valueTypeId="c0c65ada-2dbd-4a70-9299-f9f230aed495"/>
<selectionType typeId="e2ed4e1e-5c0f-40f7-a12a-0dee85f8380d" valueTypeId="75d828c8-2c4f-417d-a2a8-caaacd3372e2"/>
<listType typeId="d883011c-2969-4f0b-9837-5d8275cf739d" valueTypeId="73b0b021-b3ee-47c4-9f3c-fffa5bdc2809"/>
<managerType typeId="4559afb3-6468-4fba-91f0-78061a5e5512" valueTypeId="02b6af5c-d897-4938-9bc5-88cb3edd5b70"/>
<containerType typeId="c55acf1b-052c-4685-b019-eb93225e93d6" valueTypeId="772d6216-adce-4d3b-9ccd-45c6b86e1ea6"/>
</producedTypes>
<name>ПС_ВидыНастроек</name>
<synonym>
<key>ru</key>
<value>П с виды настроек</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<type>
<types>Boolean</types>
<types>Number</types>
<types>String</types>
<types>Date</types>
<numberQualifiers>
<nonNegative>true</nonNegative>
</numberQualifiers>
<stringQualifiers>
<length>500</length>
</stringQualifiers>
<dateQualifiers/>
</type>
<codeLength>10</codeLength>
<descriptionLength>100</descriptionLength>
<attributes uuid="25e5dc0d-bedd-482c-a5c0-23d75b1803f5">
<name>Описание</name>
<synonym>
<key>ru</key>
<value>Описание</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>500</length>
</stringQualifiers>
</type>
</attributes>
</mdclass:ChartOfCharacteristicTypes>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ce89c246-153d-4ce6-8352-f2b7cb77b49e">
<name>ПС_НастройкиСлужбаИнтеграцииСлой</name>
<synonym>
<key>ru</key>
<value>П с настройки служба интеграции слой</value>
</synonym>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<serverCall>true</serverCall>
<privileged>true</privileged>
</mdclass:CommonModule>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="582abc12-a562-47e4-8460-944d35aece3c">
<name>ПС_НастройкиСлужбаРаботаСДанными</name>
<synonym>
<key>ru</key>
<value>П с настройки служба работа с данными</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
<privileged>true</privileged>
</mdclass:CommonModule>
@@ -0,0 +1,366 @@
#Region СлужебныеПроцедурыИФункции
#Область ПрограммныйИнтерфейс
// Возвращает признак допустимости значения для вида настройки
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Значение - Произвольный - проверяемое значение
//
// Возвращаемое значение:
// Булево - Истина, если значение соответствует типу вида настройки
//
Функция ЗначениеДопустимо(ВидНастройки, Значение) Экспорт
Если ВидНастройки.Пустая() Тогда
Возврат Ложь;
КонецЕсли;
ТипЗначенияНастройки = ВидНастройки.ТипЗначенияХарактеристики;
Если ТипЗнч(Значение) = Тип("ХранилищеЗначение") Тогда
Значение = Значение.Получить();
КонецЕсли;
Возврат ТипЗнч(Значение) <> Тип("Неопределено") И ТипЗнч(Значение) <> Тип("NULL")
И (ТипЗначенияНастройки.СодержитТип(ТипЗнч(Значение)) ИЛИ Значение = Null);
КонецФункции
// Проверяет пересечение периодов настроек
//
// Параметры:
// ВидНастройки - СправочникСсылка.ПС_ВидыНастроек - вид настройки
// ДатаНачала - Дата - начало периода
// ДатаОкончания - Дата - окончание периода
// ИсключаемаяЗапись - Неопределено или Массив - запись, исключаемая из проверки (при редактировании)
//
// Возвращаемое значение:
// Булево - Истина, если есть пересечение с существующими записями
//
Функция ЕстьПересечениеПериодов(ВидНастройки, ДатаНачала, ДатаОкончания, ИсключаемаяЗапись = Неопределено) Экспорт
Если ДатаОкончания < ДатаНачала Тогда
Возврат Ложь;
КонецЕсли;
НаборЗаписей = РегистрыСведений.ПС_ПериодическиеНастройки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидНастройки.Установить(ВидНастройки);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Если ИсключаемаяЗапись <> Неопределено И ТипЗнч(ИсключаемаяЗапись) = Тип("Массив") Тогда
Если ИсключаемаяЗапись.Найти(Запись.ДатаНастройки) <> Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ДатаНачалаСуществ = Запись.ДатаНастройки;
ДатаОкончанияСуществ = Запись.ДатаНастройки; // Периодичность по дням
Если (ДатаНачала <= ДатаОкончанияСуществ) И (ДатаОкончания >= ДатаНачалаСуществ) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
#КонецОбласти
#Область ВнутренниеПроцедурыИФункции
// Валидирует значение настройки перед сохранением
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Значение - Произвольный - проверяемое значение
//
// Возвращаемое значение:
// Массив - массив сообщений об ошибках
//
Функция ВалидироватьЗначение(ВидНастройки, Значение)
Ошибки = Новый Массив;
Если ВидНастройки.Пустая() Тогда
Ошибки.Добавить("Не указан вид настройки");
Возврат Ошибки;
КонецЕсли;
Если НЕ ЗначениеДопустимо(ВидНастройки, Значение) Тогда
ТипЗначенияНастройки = ВидНастройки.ТипЗначенияХарактеристики;
Ошибки.Добавить(СтрШаблон("Значение '%1' не соответствует типу вида настройки '%2'",
Значение, ТипЗначенияНастройки));
КонецЕсли;
Возврат Ошибки;
КонецФункции
// Валидирует период настройки перед сохранением
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Период - Дата - период настройки
//
// Возвращаемое значение:
// Массив - массив сообщений об ошибках
//
Функция ВалидироватьПериод(ВидНастройки, Период)
Ошибки = Новый Массив;
Если Период = '00010101' Тогда
Ошибки.Добавить("Не указан период настройки");
КонецЕсли;
Если ВидНастройки.Пустая() Тогда
Ошибки.Добавить("Не указан вид настройки");
КонецЕсли;
Возврат Ошибки;
КонецФункции
// Валидирует настройку перед сохранением
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Период - Дата - период настройки
// Значение - Произвольный - значение настройки
//
// Возвращаемое значение:
// Массив - массив сообщений об ошибках
//
Функция ВалидироватьНастройку(ВидНастройки, Период, Значение)
Ошибки = Новый Массив;
Ошибки.Добавить(ВалидироватьЗначение(ВидНастройки, Значение));
Ошибки.Добавить(ВалидироватьПериод(ВидНастройки, Период));
Возврат Ошибки;
КонецФункции
#КонецОбласти
#EndRegion
#Region ПубликуемыеПроцедурыИФункции
#Область ПрограммныйИнтерфейс
// Сохраняет настройку с валидацией
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Период - Дата - период настройки
// Значение - Произвольный - значение настройки
//
// Возвращаемое значение:
// Булево - Истина, если настройка успешно сохранена
//
Функция СохранитьНастройку(ВидНастройки, Период, Значение) Экспорт
Ошибки = ВалидироватьНастройку(ВидНастройки, Период, Значение);
Для Каждого Ошибка Из Ошибки Цикл
Если ТипЗнч(Ошибка) = Тип("Массив") И Ошибка.Количество() > 0 Тогда
ВызватьИсключение СтрСоединить(Ошибка, Символы.ПС);
КонецЕсли;
КонецЦикла;
НаборЗаписей = РегистрыСведений.ПС_ПериодическиеНастройки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидНастройки.Установить(ВидНастройки);
НаборЗаписей.Отбор.Период.Установить(Период);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НоваяЗапись = НаборЗаписей.Добавить();
Иначе
НоваяЗапись = НаборЗаписей[0];
КонецЕсли;
НоваяЗапись.ВидНастройки = ВидНастройки;
НоваяЗапись.Период = Период;
НоваяЗапись.Значение = Новый ХранилищеЗначения(Значение);
Попытка
НаборЗаписей.Записать(Истина);
Исключение
ВызватьИсключение СтрШаблон("Ошибка при сохранении настройки: %1", ОписаниеОшибки());
КонецПопытки;
Возврат Истина;
КонецФункции
// Удаляет настройку
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// Период - Дата - период настройки
//
// Возвращаемое значение:
// Булево - Истина, если настройка успешно удалена
//
Функция УдалитьНастройку(ВидНастройки, Период) Экспорт
НаборЗаписей = РегистрыСведений.ПС_ПериодическиеНастройки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ВидНастройки.Установить(ВидНастройки);
НаборЗаписей.Отбор.Период.Установить(Период);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Попытка
НаборЗаписей.Удалить(НаборЗаписей[0]);
НаборЗаписей.Записать(Истина);
Возврат Истина;
Исключение
ВызватьИсключение СтрШаблон("Ошибка при удалении настройки: %1", ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Получает актуальное значение настройки на дату
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// ДатаЗначения - Дата - дата, на которую нужно получить значение (по умолчанию - текущая)
//
// Возвращаемое значение:
// Произвольный - значение настройки или Неопределено
//
Функция ПолучитьАктуальноеЗначение(ВидНастройки, ДатаЗначения = Неопределено) Экспорт
Если ВидНастройки.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;
Если ДатаЗначения = Неопределено Тогда
ДатаЗначения = ТекущаяДатаСеанса();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодическиеНастройки.Значение КАК Значение
|ИЗ
| РегистрСведений.ПС_ПериодическиеНастройки КАК ПериодическиеНастройки
|ГДЕ
| ПериодическиеНастройки.ВидНастройки = &ВидНастройки
| И ПериодическиеНастройки.Период <= &ДатаЗначения
|
|УПОРЯДОЧИТЬ ПО
| ПериодическиеНастройки.Период УБЫВ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| NULL КАК Значение";
Запрос.УстановитьПараметр("ВидНастройки", ВидНастройки);
Запрос.УстановитьПараметр("ДатаЗначения", ДатаЗначения);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Значение = Выборка.Значение;
Если Значение <> Null Тогда
Возврат Значение.Получить();
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Получает историю изменений настройки
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// ДатаНачала - Дата - начало периода истории (по умолчанию - начало года)
// ДатаОкончания - Дата - окончание периода истории (по умолчанию - текущая дата)
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица с колонками: Период, Значение
//
Функция ПолучитьИсториюНастройки(ВидНастройки, ДатаНачала = Неопределено, ДатаОкончания = Неопределено) Экспорт
Если ВидНастройки.Пустая() Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
Если ДатаНачала = Неопределено Тогда
ДатаНачала = НачалоГода(ТекущаяДатаСеанса());
КонецЕсли;
Если ДатаОкончания = Неопределено Тогда
ДатаОкончания = ТекущаяДатаСеанса();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодическиеНастройки.Период КАК Период,
| ПериодическиеНастройки.Значение КАК Значение
|ИЗ
| РегистрСведений.ПС_ПериодическиеНастройки КАК ПериодическиеНастройки
|ГДЕ
| ПериодическиеНастройки.ВидНастройки = &ВидНастройки
| И ПериодическиеНастройки.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|
|УПОРЯДОЧИТЬ ПО
| ПериодическиеНастройки.Период";
Запрос.УстановитьПараметр("ВидНастройки", ВидНастройки);
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
РезультатЗапроса = Запрос.Выполнить();
Результат = РезультатЗапроса.Выгрузить();
Для Каждого Строка Из Результат Цикл
Значение = Строка.Значение;
Если Значение <> Null Тогда
Строка.Значение = Значение.Получить();
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Проверяет наличие настройки
//
// Параметры:
// ВидНастройки - ПланВидовХарактеристикСсылка.ПС_ВидыНастроек - вид настройки
// ДатаЗначения - Дата - дата проверки (по умолчанию - текущая)
//
// Возвращаемое значение:
// Булево - Истина, если настройка существует
//
Функция НастройкаСуществует(ВидНастройки, ДатаЗначения = Неопределено) Экспорт
Возврат ПолучитьАктуальноеЗначение(ВидНастройки, ДатаЗначения) <> Неопределено;
КонецФункции
#КонецОбласти
#EndRegion
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b5557ce7-da1c-4593-ad2b-a0340ef27e98">
<name>ПС_НастройкиСлужбаСлойМодели</name>
<synonym>
<key>ru</key>
<value>П с настройки служба слой модели</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
<privileged>true</privileged>
</mdclass:CommonModule>
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="fb6cd21e-9a26-4422-8666-2e81755eed47">
<name>ПС_ПериодическиеНастройки</name>
<synonym>
<key>ru</key>
<value>Периодические настройки</value>
</synonym>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:ConfigurationExtension">
<defaultRunMode>Checked</defaultRunMode>
<usePurposes>Checked</usePurposes>
<defaultLanguage>Checked</defaultLanguage>
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
<compatibilityMode>Notify</compatibilityMode>
<logo>Extended</logo>
<defaultRoles>Extended</defaultRoles>
</extension>
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
<namePrefix></namePrefix>
<configurationExtensionCompatibilityMode>8.3.24</configurationExtensionCompatibilityMode>
<configurationExtensionPurpose>AddOn</configurationExtensionPurpose>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<vendor>1С</vendor>
<version>1.0.0.1</version>
<defaultLanguage>Language.Русский</defaultLanguage>
<briefInformation>
<key>ru</key>
<value>Универсальная библиотека для работы с периодическими настройками</value>
</briefInformation>
<detailedInformation>
<key>ru</key>
<value>Универсальная библиотека для работы с периодическими настройками и значениями</value>
</detailedInformation>
<logo/>
<interfaceCompatibilityMode>TaxiEnableVersion8_2</interfaceCompatibilityMode>
<compatibilityMode>8.3.24</compatibilityMode>
<languages uuid="2901b12e-0549-48ac-b1b1-d40c9f3cd299" extendedConfigurationObject="35d4deef-5b93-4c11-ac42-07beb390c332">
<name>Русский</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:LanguageExtension">
<extendedConfigurationObject>Checked</extendedConfigurationObject>
<languageCode>Checked</languageCode>
</extension>
<languageCode>ru</languageCode>
</languages>
<subsystems>Subsystem.ПС_НастройкиПериодическиеЗначения</subsystems>
<commonModules>CommonModule.ПС_НастройкиСлужбаСлойМодели</commonModules>
<commonModules>CommonModule.ПС_НастройкиСлужбаРаботаСДанными</commonModules>
<commonModules>CommonModule.ПС_НастройкиСлужбаИнтеграцииСлой</commonModules>
<informationRegisters>InformationRegister.ПС_ПериодическиеНастройки</informationRegisters>
<chartsOfCharacteristicTypes>ChartOfCharacteristicTypes.ПС_ВидыНастроек</chartsOfCharacteristicTypes>
</mdclass:Configuration>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:InformationRegister xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="17a7bc41-9f2c-4ca0-9209-93cb22dbe10a">
<producedTypes>
<selectionType typeId="576f0a30-67de-4b34-a438-c85532ee06c1" valueTypeId="c0420a9a-22bb-4e51-a75a-7f9fbe76eac3"/>
<listType typeId="873a4efa-8e0b-4997-b34b-2d857273adc6" valueTypeId="7d108dd1-bef4-475c-94ab-ade712eca66b"/>
<managerType typeId="01d41f0f-0e9b-4f9b-a8c4-851ba9dc055c" valueTypeId="74b4ec97-ae72-48cf-9aa6-9a6ad900cb15"/>
<recordSetType typeId="efb7c0a6-5052-467b-8dde-4f8d65c858ac" valueTypeId="6b89a2a9-cdf6-4bdb-82d8-16d6c8b4d20e"/>
<recordKeyType typeId="da4e647d-d18d-4fac-9a32-329c2df33ace" valueTypeId="38946f1b-0081-4f26-bcea-bf99b4ff8227"/>
<recordType typeId="bd8fd070-26bb-4f50-8751-f0d71d769199" valueTypeId="75cb20a4-28b4-4dce-aa3f-d18aee7c9767"/>
<recordManagerType typeId="e9d2e1c6-0233-4e37-bad3-0d6168b90599" valueTypeId="9d6f8bbc-5225-4b3e-bd68-f7dbc61dfaa3"/>
</producedTypes>
<name>ПС_ПериодическиеНастройки</name>
<synonym>
<key>ru</key>
<value>П с периодические настройки</value>
</synonym>
<informationRegisterPeriodicity>Day</informationRegisterPeriodicity>
<resources uuid="38226a1d-58a6-435f-9fbc-109927a2704d">
<name>Значение</name>
<synonym>
<key>ru</key>
<value>Значение</value>
</synonym>
<type>
<types>ValueStorage</types>
</type>
</resources>
<dimensions uuid="aa6f6b60-e4b0-4875-b486-bac32691f76c">
<name>ВидНастройки</name>
<synonym>
<key>ru</key>
<value>Вид настройки</value>
</synonym>
<type>
<types>ChartOfCharacteristicTypesRef.ПС_ВидыНастроек</types>
</type>
</dimensions>
</mdclass:InformationRegister>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6b610bab-6a4f-4c2c-86cb-b49b35960fda">
<name>ПС_НастройкиПериодическиеЗначения</name>
<synonym>
<key>ru</key>
<value>П с настройки периодические значения</value>
</synonym>
<content>InformationRegister.ПС_ПериодическиеНастройки</content>
<content>CommonModule.ПС_НастройкиСлужбаСлойМодели</content>
<content>CommonModule.ПС_НастройкиСлужбаРаботаСДанными</content>
<content>CommonModule.ПС_НастройкиСлужбаИнтеграцииСлой</content>
</mdclass:Subsystem>