1
0
mirror of https://github.com/firstBitSportivnaya/PSSL.git synced 2024-11-21 17:56:47 +02:00

Feature/predefined id unique check 92 (#118)

* Рефакторинг и доработка подсистемы предопределенных значений
This commit is contained in:
Denis Ushakov 2024-10-18 14:58:24 +03:00 committed by GitHub
parent 28793f1281
commit a3223f600f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
40 changed files with 2315 additions and 326 deletions

View File

@ -3,7 +3,21 @@
## Описание подсистемы
По стандартам разработки поиск ссылочных объектов в программном коде по наименованию, коду, гуиду и т.д. не рекомендуется. Для возможности получения ссылок из программного кода предлагается использовать элементы плана видов характеристик. Чтобы избежать необходимости реструктуризации при добавлении новых элементов в ПВХ, формирование иерархии и элементов делается программно и обновляется в пользовательском режиме. Получение элементов стандартизируется через общий модуль с возможностью кэширования.
При коментировании или удалении из кода предопределенных элементов и последующем перезаполнении, элемент будет помечен на удаление, включая все его подчиненные элементы.
При коментировании или удалении из кода предопределенных элементов и последующем перезаполнении, элемент будет помечен на удаление, включая все его подчиненные элементы.
## Первоначальное заполнение
Для того чтобы автоматизировать процесс первоначального заполнения предопределенных элементов, необходимо модифицировать/добавить в расширение общий модуль **ПодсистемыКонфигурацииПереопределяемый**.
В процедуре ``ПриДобавленииПодсистем`` прописать вызов процедуры библиотеки ``пбп_ОбновлениеИнформационнойБазыПБП.ПриДобавленииПодсистем``. Затем выполнить первый запуск - будет выполнен обработчик первоначального заполнения предопределенных элементов.
```BSL
&После("ПриДобавленииПодсистем")
Процедура пбп_ПриДобавленииПодсистем(МодулиПодсистем)
пбп_ОбновлениеИнформационнойБазыПБП.ПриДобавленииПодсистем(МодулиПодсистем);
КонецПроцедуры
```
## Добавление новых элементов
@ -14,7 +28,7 @@
Пример добавления нового элемента в модуле пбп_ПредопределенныеЗначенияПереопределяемый:
```1C (BSL)
```BSL
Функция ПредопределенныеЗначения() Экспорт
Результат = ТаблицаПредопределенных();
@ -36,7 +50,7 @@
Пример добавления новой группы в модуле пбп_ПредопределенныеЗначенияПереопределяемый:
```1C (BSL)
```BSL
Функция ПредопределенныеЗначения() Экспорт
Результат = ТаблицаПредопределенных();
@ -84,7 +98,7 @@
Пример получения множественного результата:
```1C (BSL)
```BSL
Функция ПолучитьДанныеАвторизации()
ДанныеАвторизации = Новый Структура("Логин, Пароль");
@ -103,7 +117,7 @@
Пример получения единичного результата:
```1C (BSL)
```BSL
Функция ЗаписыватьДанныеСтандартнымСпособом(ПроверяемаяДата)
Результат = пбп_ОбщегоНазначенияСервер.ПолучитьПредопределенноеЗначение("ДатаНачалаЗаписиВРегистры", Истина);

View File

@ -62,6 +62,20 @@
КонецЕсли;
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти // ОбработчикиСобытий

View File

@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>

View File

@ -20,19 +20,23 @@
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ИнтеграционныеПотоки);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)
ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);
Элементы.Список.Обновить();

View File

@ -0,0 +1,29 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>

View File

@ -20,19 +20,23 @@
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ИнтегрируемыеСистемы);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)
ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);
Элементы.Список.Обновить();

View File

@ -114,6 +114,20 @@
ИмяОбъекта = Неопределено;
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти // ОбработчикиСобытий

View File

@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>

View File

@ -20,19 +20,23 @@
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_НастройкиИнтеграции);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)
ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);
Элементы.Список.Обновить();

View File

@ -0,0 +1,30 @@

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -9,6 +9,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>

View File

@ -20,19 +20,23 @@
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ТипСоответствияОбъектовИБ);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)
ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);
Элементы.Список.Обновить();

View File

@ -1 +1,30 @@


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -18,6 +18,7 @@
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>

View File

@ -8,27 +8,26 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(
ПланыВидовХарактеристик.пбп_ПредопределенныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)
ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);
Элементы.Список.Обновить();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonForm uuid="166e97da-eea9-43e5-a47a-ee07fab3fd9c">
<Properties>
<Name>пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Разрешение конфликтов предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>true</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<UseStandardCommands>false</UseStandardCommands>
<ExtendedPresentation/>
<Explanation/>
</Properties>
</CommonForm>
</MetaDataObject>

View File

@ -0,0 +1,302 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
<VerticalScroll>useIfNecessary</VerticalScroll>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<ChildItems>
<Button name="ФормаОбработатьЭлементы" id="24">
<Type>CommandBarButton</Type>
<DefaultButton>true</DefaultButton>
<CommandName>Form.Command.ОбработатьЭлементы</CommandName>
<ToolTipRepresentation>Button</ToolTipRepresentation>
<ExtendedTooltip name="ФормаОбработатьЭлементыРасширеннаяПодсказка" id="25"/>
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
<Event name="OnClose">ПриЗакрытии</Event>
</Events>
<ChildItems>
<LabelDecoration name="Информация" id="33">
<TextColor>style:TableFooterTextColor</TextColor>
<Title formatted="false">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Справочная информация</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Для элемента установлен флаг обновления: Элемент будет обновлен данными из программного кода, а также обновится хеш элемента в регистре.
Для элемента не установлен флаг обновления: Элемент не будет обновлен. В записи регистра будет установлен флаг "Ручное изменение", указывающий на то, что элемент был изменен вручную и не подлежит автоматическому обновлению.
</v8:content>
</v8:item>
</ToolTip>
<ToolTipRepresentation>Button</ToolTipRepresentation>
<ContextMenu name="ИнформацияКонтекстноеМеню" id="34"/>
<ExtendedTooltip name="ИнформацияРасширеннаяПодсказка" id="35"/>
</LabelDecoration>
<Table name="ТаблицаКонфликтов" id="1">
<Representation>List</Representation>
<ChangeRowSet>false</ChangeRowSet>
<ChangeRowOrder>false</ChangeRowOrder>
<AutoInsertNewRow>true</AutoInsertNewRow>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>ТаблицаКонфликтов</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ТаблицаКонфликтовКонтекстноеМеню" id="2"/>
<AutoCommandBar name="ТаблицаКонфликтовКоманднаяПанель" id="3">
<Autofill>false</Autofill>
<ChildItems>
<Button name="ТаблицаКонфликтовОтметитьВсе" id="29">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ОтметитьВсе</CommandName>
<Picture>
<xr:Ref>StdPicture.CheckAll</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<ExtendedTooltip name="ТаблицаКонфликтовОтметитьВсеРасширеннаяПодсказка" id="30"/>
</Button>
<Button name="ТаблицаКонфликтовСнятьОтметку" id="31">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.СнятьОтметку</CommandName>
<Picture>
<xr:Ref>StdPicture.UncheckAll</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<ExtendedTooltip name="ТаблицаКонфликтовСнятьОтметкуРасширеннаяПодсказка" id="32"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ТаблицаКонфликтовРасширеннаяПодсказка" id="4"/>
<SearchStringAddition name="ТаблицаКонфликтовСтрокаПоиска" id="5">
<AdditionSource>
<Item>ТаблицаКонфликтов</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТаблицаКонфликтовСтрокаПоискаКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="ТаблицаКонфликтовСтрокаПоискаРасширеннаяПодсказка" id="7"/>
</SearchStringAddition>
<ViewStatusAddition name="ТаблицаКонфликтовСостояниеПросмотра" id="8">
<AdditionSource>
<Item>ТаблицаКонфликтов</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТаблицаКонфликтовСостояниеПросмотраКонтекстноеМеню" id="9"/>
<ExtendedTooltip name="ТаблицаКонфликтовСостояниеПросмотраРасширеннаяПодсказка" id="10"/>
</ViewStatusAddition>
<SearchControlAddition name="ТаблицаКонфликтовУправлениеПоиском" id="11">
<AdditionSource>
<Item>ТаблицаКонфликтов</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ТаблицаКонфликтовУправлениеПоискомКонтекстноеМеню" id="12"/>
<ExtendedTooltip name="ТаблицаКонфликтовУправлениеПоискомРасширеннаяПодсказка" id="13"/>
</SearchControlAddition>
<ChildItems>
<CheckBoxField name="ТаблицаКонфликтовЗаменитьЭлементомИзКода" id="26">
<DataPath>ТаблицаКонфликтов.ЗаменитьЭлементомИзКода</DataPath>
<TitleLocation>None</TitleLocation>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить элемент данными из кода</v8:content>
</v8:item>
</ToolTip>
<EditMode>EnterOnInput</EditMode>
<HeaderPicture>
<xr:Ref>StdPicture.Change</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</HeaderPicture>
<CheckBoxType>Auto</CheckBoxType>
<ContextMenu name="ТаблицаКонфликтовЗаменитьЭлементомИзКодаКонтекстноеМеню" id="27"/>
<ExtendedTooltip name="ТаблицаКонфликтовЗаменитьЭлементомИзКодаРасширеннаяПодсказка" id="28"/>
</CheckBoxField>
<ColumnGroup name="ГруппаЭлементВБазе" id="19">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Элемент в базе</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа элемент в базе</v8:content>
</v8:item>
</ToolTip>
<Group>Horizontal</Group>
<ShowInHeader>true</ShowInHeader>
<ExtendedTooltip name="ГруппаЭлементВБазеРасширеннаяПодсказка" id="20"/>
</ColumnGroup>
<ColumnGroup name="ГруппаЭлементВКоде" id="17">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Элемент в коде</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Группа элемент в коде</v8:content>
</v8:item>
</ToolTip>
<Group>Horizontal</Group>
<ShowInHeader>true</ShowInHeader>
<ExtendedTooltip name="ГруппаЭлементВКодеРасширеннаяПодсказка" id="18"/>
</ColumnGroup>
</ChildItems>
</Table>
</ChildItems>
<Attributes>
<Attribute name="ТаблицаКонфликтов" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Таблица конфликтов</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueTable</v8:Type>
</Type>
<Columns>
<Column name="ЗаменитьЭлементомИзКода" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Заменить элементом из кода</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Column>
</Columns>
</Attribute>
<Attribute name="ОбработатьЭлементы" id="4">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обработать элементы</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
</Attribute>
<Attribute name="АдресТаблицы" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Адрес таблицы</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
<Attribute name="ИмяФормыВладельца" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Имя формы владельца</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
<Attribute name="ПрефиксБаза" id="5">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Префикс база</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
<Attribute name="ПрефиксКод" id="6">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Префикс код</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
</Attributes>
<Commands>
<Command name="ОбработатьЭлементы" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обработать элементы</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обработать элементы</v8:content>
</v8:item>
</ToolTip>
<Action>ОбработатьЭлементы</Action>
</Command>
<Command name="ОтметитьВсе" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметить все</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отметить все</v8:content>
</v8:item>
</ToolTip>
<Action>ОтметитьВсе</Action>
<CurrentRowUse>DontUse</CurrentRowUse>
</Command>
<Command name="СнятьОтметку" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Снять отметку</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Снять отметку</v8:content>
</v8:item>
</ToolTip>
<Action>СнятьОтметку</Action>
<CurrentRowUse>DontUse</CurrentRowUse>
</Command>
</Commands>
</Form>

View File

@ -0,0 +1,202 @@

#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПрефиксБаза = "база_";
ПрефиксКод = "код_";
Параметры.Свойство("ИмяФормыВладельца", ИмяФормыВладельца);
Если Параметры.Свойство("АдресТаблицы", АдресТаблицы)
И ЗначениеЗаполнено(АдресТаблицы) Тогда
ОбработатьКонфликтныеЭлементы(АдресТаблицы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если ОбработатьЭлементы Тогда
ОбработатьПредопределенныеЭлементы();
Оповестить("ОбновитьСписокПредопределенных");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОбработатьЭлементы(Команда)
ОбработатьЭлементы = Истина;
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьВсе(Команда)
ЗаполнитьОтметки(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметку(Команда)
ЗаполнитьОтметки(Ложь);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбработатьКонфликтныеЭлементы(АдресТаблицы)
ИсходнаяТаблица = ПолучитьИзВременногоХранилища(АдресТаблицы);
Поля = СоздатьПоляТаблицыКонфликтов(ИсходнаяТаблица);
ЗаполнитьТаблицуКонфликтов(ИсходнаяТаблица, Поля);
КонецПроцедуры
&НаСервере
Функция СоздатьПоляТаблицыКонфликтов(Таблица)
Поля = Новый СписокЗначений;
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаЭлемент();
ДобавляемыеРеквизиты = Новый Структура;
Для Каждого Колонка Из Таблица.Колонки Цикл
Если ИсключаемыеПоля.Свойство(Колонка.Имя)
Или СтрНачинаетсяС(Колонка.Имя, "Служеб_") Тогда
Продолжить;
КонецЕсли;
ДобавляемыеРеквизиты.Вставить(ПрефиксКод + Колонка.Имя, Колонка.ТипЗначения);
ДобавляемыеРеквизиты.Вставить(ПрефиксБаза + Колонка.Имя, Колонка.ТипЗначения);
Поля.Добавить(Колонка.Имя, Колонка.Имя);
КонецЦикла;
пбп_РаботаСФормами.СоздатьРеквизитыТаблицы(ЭтотОбъект, "ТаблицаКонфликтов", ДобавляемыеРеквизиты);
ШиринаКолонки = 5;
Синонимы = Новый Структура;
Для Каждого Реквизит Из ДобавляемыеРеквизиты Цикл
Родитель = Элементы.ГруппаЭлементВКоде;
Имя = СтрЗаменить(Реквизит.Ключ, ПрефиксКод, "");
Если СтрНачинаетсяС(Реквизит.Ключ, ПрефиксБаза) Тогда
Родитель = Элементы.ГруппаЭлементВБазе;
Имя = СтрЗаменить(Имя, ПрефиксБаза, "");
КонецЕсли;
Синоним = "";
Если Не Синонимы.Свойство(Имя, Синоним) Тогда
Синоним = пбп_СтроковыеФункцииКлиентСервер.СинонимСтроки(Имя);
Синонимы.Вставить(Имя, Синоним);
КонецЕсли;
Свойства = Новый Структура;
Свойства.Вставить("Ширина", ШиринаКолонки);
Свойства.Вставить("ТолькоПросмотр", Истина);
пбп_РаботаСФормами.СоздатьПоле(ЭтотОбъект, Реквизит.Ключ, Родитель, Синоним, 1,
"ТаблицаКонфликтов." + Реквизит.Ключ, Свойства);
КонецЦикла;
Возврат Поля;
КонецФункции
&НаСервере
Процедура ЗаполнитьТаблицуКонфликтов(Таблица, Поля)
Если ПустаяСтрока(ИмяФормыВладельца) Тогда
Возврат;
КонецЕсли;
МенеджерОбъекта = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца);
СписокПредопределенных = Таблица.ВыгрузитьКолонку("Служеб_ПредопределенныйЭлемент");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
|ГДЕ
| пбп_ПредопределенныеЗначения.Ссылка В(&СписокПредопределенных)";
ПолноеИмя = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).ПолноеИмя();
Запрос.Текст = СтрШаблон(Запрос.Текст, ПолноеИмя);
Запрос.УстановитьПараметр("СписокПредопределенных", СписокПредопределенных);
Запрос = пбп_СхемыЗапросов.ДобавитьПоляВыборкиВЗапрос(Запрос, Поля);
Выборка = Запрос.Выполнить().Выбрать();
ОбщиеПоля = СтрСоединить(Поля.ВыгрузитьЗначения(), ",");
БазоваяСтруктура = Новый Структура(ОбщиеПоля);
Для Каждого Строка Из Таблица Цикл
нСтрока = ТаблицаКонфликтов.Добавить();
ЗаполнитьЗначенияСвойств(БазоваяСтруктура, Строка);
Для Каждого КлючЗначение Из БазоваяСтруктура Цикл
нСтрока[ПрефиксКод + КлючЗначение.Ключ] = КлючЗначение.Значение;
КонецЦикла;
Выборка.НайтиСледующий(Строка.Служеб_ПредопределенныйЭлемент, "Ссылка");
ЗаполнитьЗначенияСвойств(БазоваяСтруктура, Выборка);
Для Каждого КлючЗначение Из БазоваяСтруктура Цикл
нСтрока[ПрефиксБаза + КлючЗначение.Ключ] = КлючЗначение.Значение;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработатьПредопределенныеЭлементы()
Если ПустаяСтрока(ИмяФормыВладельца) Тогда
Возврат;
КонецЕсли;
ИдентификаторНастройки = "ИдентификаторНастройки";
Таблица = ПолучитьИзВременногоХранилища(АдресТаблицы);
Если Не ЗначениеЗаполнено(Таблица) Тогда
Возврат;
КонецЕсли;
УдалитьИзВременногоХранилища(АдресТаблицы);
Таблица.Индексы.Добавить(ИдентификаторНастройки);
Для Каждого Строка Из ТаблицаКонфликтов Цикл
Стр = Таблица.Найти(Строка[ПрефиксКод + ИдентификаторНастройки], ИдентификаторНастройки);
Если Строка.ЗаменитьЭлементомИзКода Тогда
Стр.Служеб_ОбновитьЭлемент = Истина;
Иначе
Стр.Служеб_УстановитьФлагРучноеИзменение = Истина;
КонецЕсли;
КонецЦикла;
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца);
ДопПараметры = пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов(
Таблица, Менеджер);
пбп_ПредопределенныеЗначения.СоздатьОбновитьПредопределенныеЗначения(Таблица, ДопПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьОтметки(ЗначениеОтметки)
Модифицированность = Истина;
Для Каждого Строка Из ТаблицаКонфликтов Цикл
Строка.ЗаменитьЭлементомИзКода = ЗначениеОтметки;
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.2.7";
Описание.Версия = "1.0.3.8";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
@ -85,7 +85,12 @@
// Обработчики обновления информационной базы.
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "пбп_ОбновлениеИнформационнойБазыПБП.НачальноеЗаполнениеПредопределенныхЭлементов";
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.РежимВыполнения = "Монопольно";
КонецПроцедуры
Процедура ПередОбновлениемИнформационнойБазы() Экспорт
@ -116,3 +121,20 @@
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура НачальноеЗаполнениеПредопределенныхЭлементов() Экспорт
Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
Для Каждого Тип Из Типы Цикл
ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@ -932,6 +932,51 @@
КонецПроцедуры
// Аналог метода БСП. Вычисляет переданное выражение, предварительно устанавливая безопасный режим выполнения кода
// и безопасный режим разделения данных для всех разделителей, присутствующих в составе конфигурации.
//
// Параметры:
// Выражение - Строка - выражение на встроенном языке 1С:Предприятия.
// Параметры - Произвольный - контекст, который требуется для вычисления выражения.
// В тексте выражения обращение к контексту должно происходить по имени "Параметры".
// Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям
// "Значение1" и "Значение2" переданные в Параметры, как свойства.
//
// Возвращаемое значение:
// Произвольный - результат вычисления выражения.
//
// Пример:
//
// // Пример 1
// Параметры = Новый Структура;
// Параметры.Вставить("Значение1", 1);
// Параметры.Вставить("Значение2", 10);
// Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме("Параметры.Значение1 = Параметры.Значение2", Параметры);
//
// // Пример 2
// Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме("СтандартныеПодсистемыСервер.ВерсияБиблиотеки()");
//
Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт
УстановитьБезопасныйРежим(Истина);
Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса");
МассивРазделителей = МодульРаботаВМоделиСервиса.РазделителиКонфигурации();
Иначе
МассивРазделителей = Новый Массив;
КонецЕсли;
Для Каждого ИмяРазделителя Из МассивРазделителей Цикл
УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина);
КонецЦикла;
Возврат Вычислить(Выражение);
КонецФункции
// Аналог метода БСП. Записывает конфиденциальные данные в безопасное хранилище.
// Вызывающий код должен самостоятельно устанавливать привилегированный режим.
//
@ -2008,6 +2053,92 @@
КонецФункции
// Аналог метода БСП. Возвращает менеджер объекта по ссылке на объект.
// Ограничение: не обрабатываются точки маршрутов бизнес-процессов.
// См. также ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени.
//
// Параметры:
// Ссылка - ЛюбаяСсылка - объект, менеджер которого требуется получить.
//
// Возвращаемое значение:
// СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта.
//
// Пример:
// МенеджерСправочника = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОрганизацию);
// ПустаяСсылка = МенеджерСправочника.ПустаяСсылка();
//
Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт
ИмяОбъекта = Ссылка.Метаданные().Имя;
ТипСсылки = ТипЗнч(Ссылка);
Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат Справочники[ИмяОбъекта];
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат Документы[ИмяОбъекта];
ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат БизнесПроцессы[ИмяОбъекта];
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат ПланыВидовХарактеристик[ИмяОбъекта];
ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат ПланыСчетов[ИмяОбъекта];
ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат ПланыВидовРасчета[ИмяОбъекта];
ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат Задачи[ИмяОбъекта];
ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат ПланыОбмена[ИмяОбъекта];
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
Возврат Перечисления[ИмяОбъекта];
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#Область Данные
// Аналог метода БСП. Вычисляет контрольную сумму для произвольных данных по указанному алгоритму.
//
// Параметры:
// Данные - Произвольный - любое сериализуемое значение.
// Алгоритм - ХешФункция - алгоритм расчета контрольной суммы. По умолчанию, MD5.
//
// Возвращаемое значение:
// Строка - контрольная сумма строкой без пробелов (например 32 символа).
//
Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт
Если Алгоритм = Неопределено Тогда
Алгоритм = ХешФункция.MD5;
КонецЕсли;
ХешированиеДанных = Новый ХешированиеДанных(Алгоритм);
Если ТипЗнч(Данные) <> Тип("Строка") И ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
Данные = ЗначениеВСтрокуXML(Данные);
КонецЕсли;
ХешированиеДанных.Добавить(Данные);
Если ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("ДвоичныеДанные") Тогда
Результат = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
ИначеЕсли ТипЗнч(ХешированиеДанных.ХешСумма) = Тип("Число") Тогда
Результат = Формат(ХешированиеДанных.ХешСумма, "ЧГ=");
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ТекущееОкружение
// Аналог метода БСП. Возвращает Истина, если текущий сеанс выполняется на сервере, работающем под управлением ОС Windows.
@ -2135,6 +2266,18 @@
#КонецОбласти
// Выполняет действия при записи предопределенного элемента.
//
// Параметры:
// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект - предопределенный элемент
// из подсистемы предопределенных элементов
//
Процедура ОбработатьСуществующийПредопределенныйЭлемент(Объект) Экспорт
пбп_ПредопределенныеЗначения.ОбновитьХешЭлемента(Объект);
КонецПроцедуры
#КонецОбласти // ПрограммныйИнтерфейс
#Область СлужебныеПроцедурыИФункции

View File

@ -33,6 +33,15 @@
КонецПроцедуры
// См. пбп_ОбщегоНазначенияСервер.ВычислитьВБезопасномРежиме.
//
Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт
Модуль = ПолучитьМодуль();
Возврат Модуль.ВычислитьВБезопасномРежиме(Выражение, Параметры);
КонецФункции
// См. пбп_ОбщегоНазначенияСервер.ЗаписатьДанныеВБезопасноеХранилище.
Процедура ЗаписатьДанныеВБезопасноеХранилище(Владелец, Данные, Ключ = "Пароль") Экспорт
@ -184,6 +193,27 @@
КонецФункции
// См. пбп_ОбщегоНазначенияСервер.МенеджерОбъектаПоСсылке.
//
Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт
Модуль = ПолучитьМодуль();
Возврат Модуль.МенеджерОбъектаПоСсылке(Ссылка);
КонецФункции
#Область Данные
// См. пбп_ОбщегоНазначенияСервер.КонтрольнаяСуммаСтрокой.
Функция КонтрольнаяСуммаСтрокой(Знач Данные, Знач Алгоритм = Неопределено) Экспорт
Модуль = ПолучитьМодуль();
Возврат Модуль.КонтрольнаяСуммаСтрокой(Данные, Алгоритм);
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецОбласти

View File

@ -23,105 +23,62 @@
// Инициализирует предопределенные значения из таблицы.
//
// Параметры:
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с конфликтными элементами
//
Процедура ИнициализироватьПредопределенныеЗначения(МенеджерОбъекта) Экспорт
Функция ИнициализироватьПредопределенныеЗначения(МенеджерОбъекта) Экспорт
ТипЗначения = ТипЗнч(МенеджерОбъекта);
Если ТипЗначения = Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения") Тогда
ТЗПредопределенныхЗначений = пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначения();
ИначеЕсли ТипЗначения = Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы") Тогда
ТЗПредопределенныхЗначений =
пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияИнтегрируемыеСистемы();
ИначеЕсли ТипЗначения = Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки") Тогда
ТЗПредопределенныхЗначений = пбп_ПредопределенныеЗначенияПереопределяемый
.ПредопределенныеЗначенияИнтеграционныеПотоки();
ИначеЕсли ТипЗначения = Тип("СправочникМенеджер.пбп_НастройкиИнтеграции") Тогда
ТЗПредопределенныхЗначений =
пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияНастройкиИнтеграции();
ИначеЕсли ТипЗначения = Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ") Тогда
ТЗПредопределенныхЗначений =
пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияТипСоответствияОбъектовИБ();
Иначе
Возврат;
ТЗПредопределенныхЗначений = пбп_ПредопределенныеЗначенияПереопределяемый
.ТаблицаПредопределенныхЭлементов(МенеджерОбъекта);
Если ТЗПредопределенныхЗначений = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ОбработатьПредопределенныеЗначения(ТЗПредопределенныхЗначений, МенеджерОбъекта);
ТаблицаКонфликтныхЭлементов = ОбработатьПредопределенныеЗначения(ТЗПредопределенныхЗначений, МенеджерОбъекта);
КонецПроцедуры
Возврат ТаблицаКонфликтныхЭлементов;
КонецФункции
// Создание предопределенных значений на основании заполненной таблицы
// Обрабатывает таблицу предопределенных элементов. Операции включают в себя: установка пометок удаления
// на неиспользуемые элементы, отбор предопределенных значений, создание предопределенных элементов.
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемыйТаблицаПредопределенных,
// пбп_ТипСоответствияОбъектовИБПереопределяемый.ТаблицаПредопределенных
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
// ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных.
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с конфликтными элементами
//
Процедура СоздатьОбновитьПредопределенныеЗначения(ТаблицаПредопределенных, МенеджерОбъекта, ПолноеИмяОбъекта = "") Экспорт
Функция ОбработатьПредопределенныеЗначения(ТаблицаПредопределенных, МенеджерОбъекта) Экспорт
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат;
КонецЕсли;
Параметры = ДопПараметрыОбработкиПредопределенныхЭлементов(ТаблицаПредопределенных, МенеджерОбъекта);
Если ПустаяСтрока(ПолноеИмяОбъекта) Тогда
ПолноеИмяОбъекта = ПолноеИмяОбъектаПоУмолчанию();
КонецЕсли;
ОбработатьНеиспользуемыеЭлементы(ТаблицаПредопределенных, Параметры.ПолноеИмя);
Группы = Новый Соответствие;
КолонкаСуществует = ТаблицаПредопределенных.Колонки.Найти("ЭтоГруппа") <> Неопределено;
ЗаполнитьРодителейЭлементов(ТаблицаПредопределенных, Параметры);
ЗаполнитьКонтрольныеСуммыТаблицы(ТаблицаПредопределенных, Параметры);
Если КолонкаСуществует Тогда
// Сначала создаются группы, затем элементы
ТаблицаПредопределенных.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");
ТекстЗапроса =
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
|ГДЕ
| пбп_ПредопределенныеЗначения.ЭтоГруппа";
Запрос = Новый Запрос;
Запрос.Текст = СтрШаблон(ТекстЗапроса, ПолноеИмяОбъекта);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Группы.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторНастройки, ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
КонецЕсли;
ТаблицаКонфликтныхЭлементов = УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, Параметры.ПолноеИмя);
СоздатьОбновитьПредопределенныеЗначения(ТаблицаПредопределенных, Параметры);
Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл
Если СтрокаТаблицы.Служеб_ОбновитьРасположениеЭлемента Тогда
ОбновитьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Группы);
Иначе
Если КолонкаСуществует И СтрокаТаблицы.ЭтоГруппа Тогда
СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, Группы);
Иначе
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Группы, КолонкаСуществует);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаКонфликтныхЭлементов;
КонецПроцедуры
КонецФункции
// Получает все предопределенные элементы объекта, помечает на удаление те, которые удалены из кода.
// При установке пометки удаления для групп, также устанавливается для всех подчиенных элементов.
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемыйТаблицаПредопределенных,
// пбп_ТипСоответствияОбъектовИБПереопределяемый.ТаблицаПредопределенных.
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
// ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных.
//
Процедура ОбработатьНеиспользуемыеЭлементы(ТаблицаПредопределенных, ПолноеИмяОбъекта = "") Экспорт
Если ПустаяСтрока(ПолноеИмяОбъекта) Тогда
ПолноеИмяОбъекта = ПолноеИмяОбъектаПоУмолчанию();
КонецЕсли;
ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ПолноеИмяОбъекта);
ТаблицаПредопределенных.Индексы.Добавить("ИдентификаторНастройки");
@ -156,57 +113,25 @@
КонецПроцедуры
// Подготавливает параметры необходимые для обработки предопределенных элементов
// После удаления уже существующих элементов, остаются только актуальные значения
// для создания предопределенных элементов.
//
// Параметры:
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
// ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных.
//
// Возвращаемое значение:
// Структура - Данные Менеджера объекта
// * Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
// * ПолноеИмя - Строка - Полное имя объекта метаданных.
// ТаблицаЗначений - Таблица с конфликтными элементами
//
Функция ПараметрыМенеджераОбъекта(МенеджерОбъекта) Экспорт
Параметры = Новый Структура;
Параметры.Вставить("Менеджер", МенеджерОбъекта);
Параметры.Вставить("ПолноеИмя", Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).ПолноеИмя());
Функция УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, ПолноеИмяОбъекта = "") Экспорт
Возврат Параметры;
КонецФункции
// Обрабатывает таблицу предопределенных элементов. Операции включают в себя: установка пометок удаления
// на неиспользуемые элементы, отбор предопределенных значений, создание предопределенных элементов.
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемыйТаблицаПредопределенных,
// пбп_ТипСоответствияОбъектовИБПереопределяемый.ТаблицаПредопределенных.
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
Процедура ОбработатьПредопределенныеЗначения(ТаблицаПредопределенных, МенеджерОбъекта) Экспорт
Параметры = ПараметрыМенеджераОбъекта(МенеджерОбъекта);
ОбработатьНеиспользуемыеЭлементы(ТаблицаПредопределенных, Параметры.ПолноеИмя);
УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, Параметры.ПолноеИмя);
СоздатьОбновитьПредопределенныеЗначения(ТаблицаПредопределенных, Параметры.Менеджер, Параметры.ПолноеИмя);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, ПолноеИмяОбъекта = "") Экспорт
ТаблицаКонфликтныхЭлементов = ТаблицаПредопределенных.СкопироватьКолонки();
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат;
Возврат ТаблицаКонфликтныхЭлементов;
КонецЕсли;
Если ПустаяСтрока(ПолноеИмяОбъекта) Тогда
ПолноеИмяОбъекта = ПолноеИмяОбъектаПоУмолчанию();
КонецЕсли;
ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ПолноеИмяОбъекта);
ИдентификаторыНастроек = ТаблицаПредопределенных.ВыгрузитьКолонку("ИдентификаторНастройки");
@ -215,11 +140,14 @@
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки,
| ЕСТЬNULL(Родители.ИдентификаторНастройки, """") КАК ИдентификаторНастройкиРодитель
| пбп_СостоянияПредопределенныхЭлементов.ХешСумма КАК ХешСумма,
| ЕСТЬNULL(пбп_СостоянияПредопределенныхЭлементов.РучноеИзменение, ЛОЖЬ) КАК РучноеИзменение,
| пбп_ПредопределенныеЗначения.ПометкаУдаления КАК ПометкаУдаления,
| пбп_СостоянияПредопределенныхЭлементов.ХешСумма ЕСТЬ NULL КАК ХешОтсутствует
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
| ЛЕВОЕ СОЕДИНЕНИЕ %1 КАК Родители
| ПО пбп_ПредопределенныеЗначения.Родитель = Родители.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пбп_СостоянияПредопределенныхЭлементов КАК пбп_СостоянияПредопределенныхЭлементов
| ПО пбп_ПредопределенныеЗначения.Ссылка = пбп_СостоянияПредопределенныхЭлементов.Объект
|ГДЕ
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки В(&СписокИдентификаторов)";
@ -233,11 +161,10 @@
Для Каждого Строка Из ТаблицаПредопределенных Цикл
ВыборкаДетальныеЗаписи.Сбросить();
Если ВыборкаДетальныеЗаписи.НайтиСледующий(Строка.ИдентификаторНастройки, "ИдентификаторНастройки") Тогда
Если ВыборкаДетальныеЗаписи.ИдентификаторНастройкиРодитель = Строка.Родитель Тогда
Если ВыборкаДетальныеЗаписи.РучноеИзменение Или ВыборкаДетальныеЗаписи.ХешСумма = Строка.ХешСумма Тогда
СтрокиДляУдаления.Добавить(Строка);
Иначе
Строка.Служеб_СсылкаНаПредопределенныйЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
Строка.Служеб_ОбновитьРасположениеЭлемента = Истина;
ОбработатьСтроку(Строка, ВыборкаДетальныеЗаписи, ТаблицаКонфликтныхЭлементов, СтрокиДляУдаления);
КонецЕсли;
КонецЕсли;
КонецЦикла;
@ -246,19 +173,204 @@
ТаблицаПредопределенных.Удалить(Строка);
КонецЦикла;
Возврат ТаблицаКонфликтныхЭлементов;
КонецФункции
// Создание предопределенных значений на основании заполненной таблицы
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
//
Процедура СоздатьОбновитьПредопределенныеЗначения(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат;
КонецЕсли;
ПолноеИмяОбъекта = ДополнительныеПараметры.ПолноеИмя;
МенеджерОбъекта = ДополнительныеПараметры.Менеджер;
ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ПолноеИмяОбъекта);
Группы = Новый Соответствие;
КолонкаСуществует = ТаблицаПредопределенных.Колонки.Найти("ЭтоГруппа") <> Неопределено;
Если КолонкаСуществует Тогда
// Сначала создаются группы, затем элементы
ТаблицаПредопределенных.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");
ТекстЗапроса =
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
|ГДЕ
| пбп_ПредопределенныеЗначения.ЭтоГруппа";
Запрос = Новый Запрос;
Запрос.Текст = СтрШаблон(ТекстЗапроса, ПолноеИмяОбъекта);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Группы.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторНастройки, ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
КонецЕсли;
Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл
ЭтоГруппа = КолонкаСуществует И СтрокаТаблицы.ЭтоГруппа;
КлючиХеша = ?(ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
Если СтрокаТаблицы.Служеб_ОбновитьЭлемент Тогда
ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Группы, КолонкаСуществует);
ИначеЕсли СтрокаТаблицы.Служеб_УстановитьФлагРучноеИзменение Тогда
УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент);
ИначеЕсли СтрокаТаблицы.Служеб_СоздатьЗаписьРегистра Тогда
СоздатьЗаписьСостоянияПредопределенногоЭлемента(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша);
Иначе
СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Группы, КолонкаСуществует);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, Группы)
// Подготавливает параметры необходимые для обработки предопределенных элементов
//
// Параметры:
// Таблица - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных.
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
// Возвращаемое значение:
// Структура - Данные Менеджера объекта
// * Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
// * ПолноеИмя - Строка - Полное имя объекта метаданных.
//
Функция ДопПараметрыОбработкиПредопределенныхЭлементов(Таблица, МенеджерОбъекта) Экспорт
Параметры = Новый Структура;
Параметры.Вставить("Менеджер", МенеджерОбъекта);
Параметры.Вставить("ПолноеИмя", Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).ПолноеИмя());
мКолонки = Новый Массив;
Для Каждого Колонка Из Таблица.Колонки Цикл
мКолонки.Добавить(Колонка.Имя);
КонецЦикла;
Параметры.Вставить("КлючиХешаЭлемент", КлючиХешаПредопределенногоЭлемента(мКолонки, Ложь));
Параметры.Вставить("КлючиХешаГруппа", КлючиХешаПредопределенногоЭлемента(мКолонки, Истина));
Возврат Параметры;
КонецФункции
// Заполняет хеш предопределенных элементов
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
//
Процедура ЗаполнитьКонтрольныеСуммыТаблицы(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат;
КонецЕсли;
Для Каждого Строка Из ТаблицаПредопределенных Цикл
КлючиХеша = ?(Строка.ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
ЗаполнитьЗначенияСвойств(КлючиХеша, Строка);
Строка.ХешСумма = пбп_ОбщегоНазначенияСлужебный.КонтрольнаяСуммаСтрокой(КлючиХеша, ХешФункция.MD5);
КонецЦикла;
КонецПроцедуры
// Возвращает ключи хеша на основании массива полей элемента
//
// Параметры:
// Поля - Массив - Поля для формирования ключей хеша
// ЭтоГруппа - Булево - От этого признака зависят исключаемые поля
//
// Возвращаемое значение:
// Структура - Ключи хеша
//
Функция КлючиХешаПредопределенногоЭлемента(Поля, ЭтоГруппа = Ложь) Экспорт
мКлючи = Новый Массив;
Если ЭтоГруппа Тогда
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаГруппа();
Иначе
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаЭлемент();
КонецЕсли;
Для Каждого Поле Из Поля Цикл
Если ИсключаемыеПоля.Свойство(Поле)
Или СтрНачинаетсяС(Поле, "Служеб_") Тогда
Продолжить;
КонецЕсли;
мКлючи.Добавить(Поле);
КонецЦикла;
Возврат Новый Структура(СтрСоединить(мКлючи, ","));
КонецФункции
// Обновляет хеш элемента в регистре, устанавливая при этом ручное изменение.
//
// Параметры:
// Объект - СправочникОбъект, ПланВидовХарактеристикОбъект - предопределенный элемент.
//
Процедура ОбновитьХешЭлемента(Объект) Экспорт
Флаг = пбп_ОбщегоНазначенияСлужебныйКлиентСервер
.СвойствоСтруктуры(Объект.ДополнительныеСвойства, "РучноеИзменение", Истина);
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(Объект.Ссылка, Объект.ЭтоГруппа, Флаг);
КонецПроцедуры
// Создает запись регистра с заданными параметрами.
//
// Параметры:
// Объект - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на предопределенный элемент.
// ЭтоГруппа - Булево - - Признак того что элемент является группой.
// КлючиХеша - Структура, Неопределено - Если ключи хеша не переданы, то они будут сформированы заново.
//
Процедура СоздатьЗаписьСостоянияПредопределенногоЭлемента(Объект, ЭтоГруппа, КлючиХеша = Неопределено) Экспорт
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.СоздатьЗаписьРегистра(Объект, ЭтоГруппа, КлючиХеша);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
Если СтрокаТаблицы.ЭтоГруппа Тогда
СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
Иначе
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя);
КонецЕсли;
КонецПроцедуры
Процедура СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Группы)
НоваяГруппа = МенеджерОбъекта.СоздатьГруппу();
ЗаполнитьЗначенияСвойств(НоваяГруппа, СтрокаТаблицы, "Наименование,ИдентификаторНастройки");
Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда
Родитель = Группы.Получить(СтрокаТаблицы.Родитель);
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НоваяГруппа);
Если ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
Родитель = Группы.Получить(СтрокаТаблицы.ИдентификаторРодитель);
НоваяГруппа.Родитель = Родитель;
КонецЕсли;
Попытка
НоваяГруппа.Записать();
ЗаписатьЭлементИСвязанныеДанные(НоваяГруппа, КлючиХеша);
Исключение
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
@ -267,47 +379,85 @@
КонецПроцедуры
Процедура СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Родители, ЗаполнитьРодителя = Ложь)
Процедура СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы);
Если ЗаполнитьРодителя И ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда
Родитель = Родители.Получить(СтрокаТаблицы.Родитель);
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент);
Если ЗаполнитьРодителя И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
Родитель = Родители.Получить(СтрокаТаблицы.ИдентификаторРодитель);
НовыйЭлемент.Родитель = Родитель;
КонецЕсли;
// инициализация значения по умолчанию
ПроверяемыйТип = ТипЗнч(МенеджерОбъекта);
Если ПроверяемыйТип = Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения") Тогда
НовыйЭлемент.Значение = СтрокаТаблицы.ТипЗначения.ПривестиЗначение();
КонецЕсли;
Попытка
НовыйЭлемент.Записать();
ЗаписатьЭлементИСвязанныеДанные(НовыйЭлемент, КлючиХеша);
Исключение
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ОбновитьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Родители)
Процедура ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служеб_СсылкаНаПредопределенныйЭлемент) Тогда
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент) Тогда
Возврат;
КонецЕсли;
Элемент = СтрокаТаблицы.Служеб_СсылкаНаПредопределенныйЭлемент.ПолучитьОбъект();
Элемент.Родитель = Родители[СтрокаТаблицы.Родитель];
Элемент = СтрокаТаблицы.Служеб_ПредопределенныйЭлемент.ПолучитьОбъект();
Если Элемент.ПометкаУдаления Тогда
Элемент.УстановитьПометкуУдаления(Ложь, Ложь);
КонецЕсли;
РодительОтличается = Ложь;
Если ЗаполнитьРодителя Тогда
Если Не ПустаяСтрока(СтрокаТаблицы.ИдентификаторРодитель) Или ЗначениеЗаполнено(Элемент.Родитель) Тогда
НовыйРодитель = Родители[СтрокаТаблицы.ИдентификаторРодитель];
РодительОтличается = Элемент.Родитель <> НовыйРодитель;
Если РодительОтличается Тогда
Элемент.Родитель = НовыйРодитель;
КонецЕсли;
КонецЕсли;
КонецЕсли;
СписокСвойств = "";
ИсключаяСвойства = "";
Если Элемент.ЭтоГруппа Тогда
СписокСвойств = "Наименование,ИдентификаторНастройки";
Иначе
ИсключаяСвойства = "Родитель";
КонецЕсли;
ЗаполнитьЗначенияСвойств(Элемент, СтрокаТаблицы, СписокСвойств, ИсключаяСвойства);
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент);
Попытка
Элемент.Записать();
СообщитьОбИзмененииРасположенияЭлемента(Элемент);
ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Истина);
СообщитьОбИзмененииЭлемента(Элемент);
Если РодительОтличается Тогда
СообщитьОбИзмененииРасположенияЭлемента(Элемент);
КонецЕсли;
Исключение
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент)
ПроверяемыйТип = ТипЗнч(МенеджерОбъекта);
Если ПроверяемыйТип = Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения")
И Не Элемент.ЭтоГруппа Тогда
Элемент.Значение = Элемент.ТипЗначения.ПривестиЗначение();
КонецЕсли;
КонецПроцедуры
Процедура УстановитьФлагРучноеИзменение(Элемент)
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьФлагРучногоИзменения(Элемент, Истина);
КонецПроцедуры
Процедура ПометитьНаУдалениеВсеВложения(ИерархическаяВыборка, ТаблицаАктуальныхЭлементов)
Пока ИерархическаяВыборка.Следующий() Цикл
@ -338,6 +488,8 @@
Возврат "ПланВидовХарактеристик.пбп_ПредопределенныеЗначения";
КонецФункции
#Область СообщенияОСобытии
Процедура СообщитьОПомеченномНаУдалениеЭлементе(Элемент)
ТекстСообщения = НСтр("ru = 'Элемент ''%1'' помечен на удаление';
@ -366,4 +518,83 @@
КонецПроцедуры
Процедура СообщитьОбИзмененииЭлемента(Элемент)
ТекстСообщения = НСтр("ru = 'Элемент ''%1'' успешно обновлен!';
|en = 'Item ''%1'' was successfully updated!'");
ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстСообщения,
Элемент.Ссылка);
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ТекстСообщения, Элемент);
КонецПроцедуры
#КонецОбласти
Процедура ЗаполнитьРодителейЭлементов(Таблица, Параметры)
Идентификаторы = Таблица.ВыгрузитьКолонку("ИдентификаторРодитель");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
|ГДЕ
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки В(&ИдентификаторыРодитель)";
Запрос.Текст = СтрШаблон(Запрос.Текст, Параметры.ПолноеИмя);
Запрос.УстановитьПараметр("ИдентификаторыРодитель", Идентификаторы);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Для Каждого Строка Из Таблица Цикл
ВыборкаДетальныеЗаписи.Сбросить();
Если ВыборкаДетальныеЗаписи.НайтиСледующий(Строка.ИдентификаторРодитель, "ИдентификаторНастройки") Тогда
Строка.Родитель = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Обновление = Ложь)
Элемент.ДополнительныеСвойства.Вставить("РучноеИзменение", Ложь);
Элемент.Записать();
Если Обновление Тогда
Возврат;
КонецЕсли;
СоздатьЗаписьСостоянияПредопределенногоЭлемента(Элемент.Ссылка, Элемент.ЭтоГруппа, КлючиХеша);
КонецПроцедуры
Функция ИмяОбъектаМетаданных(ПолноеИмяОбъекта)
Если ПустаяСтрока(ПолноеИмяОбъекта) Тогда
Возврат ПолноеИмяОбъектаПоУмолчанию();
КонецЕсли;
Возврат ПолноеИмяОбъекта;
КонецФункции
Процедура ОбработатьСтроку(Строка, Выборка, ТаблицаКонфликтныхЭлементов, СтрокиДляУдаления)
Строка.Служеб_ПредопределенныйЭлемент = Выборка.Ссылка;
Если Выборка.ХешОтсутствует Тогда
Строка.Служеб_СоздатьЗаписьРегистра = Истина;
ИначеЕсли Выборка.ПометкаУдаления Тогда
Строка.Служеб_ОбновитьЭлемент = Истина;
Иначе
СтрокиДляУдаления.Добавить(Строка);
СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаКонфликт, Строка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="3fbd8525-640c-4b8b-bbdd-a21eabd65ce4">
<Properties>
<Name>пбп_ПредопределенныеЗначенияВызовСервера</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Предопределенные значения вызов сервера</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,43 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
//
#Область СлужебныйПрограммныйИнтерфейс
Функция ИнициализироватьПредопределенныеЗначения(ИмяФормы) Экспорт
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормы);
ТаблицаКонфликтныхЭлементов = пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);
АдресТаблицы = "";
ЕстьСтроки = Ложь;
Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
АдресТаблицы = ПоместитьВоВременноеХранилище(ТаблицаКонфликтныхЭлементов, Новый УникальныйИдентификатор);
ЕстьСтроки = Истина;
КонецЕсли;
РезультатОбработки = Новый Структура;
РезультатОбработки.Вставить("АдресТаблицы", АдресТаблицы);
РезультатОбработки.Вставить("ЕстьСтроки", ЕстьСтроки);
Возврат Новый ФиксированнаяСтруктура(РезультатОбработки);
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="c6e8f51e-b8c9-4b8b-9f6e-4d216d76bad3">
<Properties>
<Name>пбп_ПредопределенныеЗначенияКлиент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Предопределенные значения клиент</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Working with dialogues server</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>true</ClientManagedApplication>
<Server>false</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,49 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
//
////////////////////////////////////////////////////////////////////////////////
// Работа с диалогами (сервер): для серверных методов работы с диалогами.
#Область ПрограммныйИнтерфейс
// Создание предопределенных значений на основании заполненной таблицы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма из которой запущена обработка обновление предопределенных элементов
//
Процедура СоздатьОбновитьПредопределенныеЗначения(Форма) Экспорт
// Возвращаем адрес временного хранилища на таблицу и есть ли конфликты
РезультатОбработки =
пбп_ПредопределенныеЗначенияВызовСервера.ИнициализироватьПредопределенныеЗначения(Форма.ИмяФормы);
Если РезультатОбработки.ЕстьСтроки = Ложь Тогда
Возврат;
КонецЕсли;
Параметры = Новый Структура;
Параметры.Вставить("АдресТаблицы", РезультатОбработки.АдресТаблицы);
Параметры.Вставить("ИмяФормыВладельца", Форма.ИмяФормы);
ОткрытьФорму("ОбщаяФорма.пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов", Параметры, Форма);
КонецПроцедуры
#КонецОбласти

View File

@ -1,152 +1,169 @@

#Область ПрограммныйИнтерфейс
// Возвращает таблицу предопределенных элементов справочника
// ПланыВидовХарактеристикСсылка.пбп_ПредопределенныеЗначения.
// Инициализирует предопределенные значения из таблицы.
//
// Параметры:
// Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица заполненная предопределенными элементами.
// ТаблицаЗначений - Таблица предопределенных элементов.
//
Функция ПредопределенныеЗначения() Экспорт
Функция ТаблицаПредопределенныхЭлементов(Менеджер) Экспорт
Результат = ТаблицаПредопределенных();
Колонки = КолонкиПредопределенныхЭлементов(Менеджер);
Выражение = пбп_ПредопределенныеЗначенияПовтИсп.ФункцииСозданияТаблицПредопределенныхЭлементов()
.Получить(ТипЗнч(Менеджер));
Если Не ЗначениеЗаполнено(Выражение) Тогда
Возврат Неопределено;
КонецЕсли;
Таблица = Новый ТаблицаЗначений;
СоздатьКолонкиТаблицыПредопределенныхЭлементов(Колонки, Таблица);
Параметры = Новый Массив;
Параметры.Добавить(Таблица);
пбп_ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации(Выражение, Параметры);
Возврат Параметры[0];
КонецФункции
// Заполняет таблицу предопределенных элементов справочника
// ПланыВидовХарактеристикСсылка.пбп_ПредопределенныеЗначения.
//
// Параметры:
// Таблица - ТаблицаЗначений - Таблица предопределенных элементов.
//
Процедура ПредопределенныеЗначения(Таблица) Экспорт
ОписаниеЧисло = Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10,0));
// Добавление
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Интеграции";
НоваяНастройка.ИдентификаторНастройки = "Интеграции";
НоваяНастройка.ЭтоГруппа = Истина;
НоваяНастройка.УровеньИерархии = 0;
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Интеграции локал";
НоваяНастройка.ИдентификаторНастройки = "Интеграции_локал";
НоваяНастройка.ЭтоГруппа = Истина;
НоваяНастройка.Родитель = "Интеграции";
НоваяНастройка.ИдентификаторРодитель = "Интеграции";
НоваяНастройка.УровеньИерархии = 1;
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Тестовая";
НоваяНастройка.ИдентификаторНастройки = "Тестовая";
НоваяНастройка.ЭтоГруппа = Истина;
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Количество дней хранения истории интеграции";
НоваяНастройка.ИдентификаторНастройки = "КолДнейХраненияИсторииИнтеграции";
НоваяНастройка.Пароль = Ложь;
НоваяНастройка.СписокЗначений = Ложь;
НоваяНастройка.ТипЗначения = ОписаниеЧисло;
НоваяНастройка.Родитель = "Интеграции";
НоваяНастройка.ИдентификаторРодитель = "Интеграции";
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Количество дней хранения ошибок истории интеграции";
НоваяНастройка.ИдентификаторНастройки = "КолДнейХраненияОшибокИсторииИнтеграции";
НоваяНастройка.Пароль = Ложь;
НоваяНастройка.СписокЗначений = Ложь;
НоваяНастройка.ТипЗначения = ОписаниеЧисло;
НоваяНастройка.Родитель = "Интеграции";
НоваяНастройка.ИдентификаторРодитель = "Интеграции";
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Тест_бул";
НоваяНастройка.ИдентификаторНастройки = "Тест_бул";
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Тест булево";
НоваяНастройка.ИдентификаторНастройки = "Тест_булево";
НоваяНастройка.Пароль = Ложь;
НоваяНастройка.СписокЗначений = Ложь;
НоваяНастройка.ТипЗначения = Новый ОписаниеТипов("Булево");
НоваяНастройка.Родитель = "Тестовая";
НоваяНастройка.ИдентификаторРодитель = "Тестовая";
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Тест_список";
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Тест список";
НоваяНастройка.ИдентификаторНастройки = "Тест_список";
НоваяНастройка.Пароль = Ложь;
НоваяНастройка.СписокЗначений = Истина;
НоваяНастройка.ТипЗначения = Новый ОписаниеТипов("Строка");
// КонецДобавления
Возврат Результат;
КонецФункции
КонецПроцедуры
// Возвращает таблицу предопределенных элементов справочника СправочникСсылка.пбп_ИнтегрируемыеСистемы.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица заполненная предопределенными элементами.
// Заполняет таблицу предопределенных элементов справочника СправочникСсылка.пбп_ИнтегрируемыеСистемы.
//
Функция ПредопределенныеЗначенияИнтегрируемыеСистемы() Экспорт
Результат = ТаблицаПредопределенныхИнтегрируемыеСистемы();
// Параметры:
// Таблица - ТаблицаЗначений - Таблица предопределенных элементов.
//
Процедура ПредопределенныеЗначенияИнтегрируемыеСистемы(Таблица) Экспорт
// Добавление
НоваяСистема = Результат.Добавить();
НоваяСистема = Таблица.Добавить();
НоваяСистема.Наименование = "Система N";
НоваяСистема.ИдентификаторНастройки = "СистемаN";
НоваяСистема = Результат.Добавить();
НоваяСистема = Таблица.Добавить();
НоваяСистема.Наименование = "Rabbit Mq";
НоваяСистема.ИдентификаторНастройки = "RabbitMq";
НоваяСистема = Результат.Добавить();
НоваяСистема = Таблица.Добавить();
НоваяСистема.Наименование = "Kafka";
НоваяСистема.ИдентификаторНастройки = "Kafka";
НоваяСистема = Результат.Добавить();
НоваяСистема = Таблица.Добавить();
НоваяСистема.Наименование = "Active directory";
НоваяСистема.ИдентификаторНастройки = "ActiveDirectory";
// КонецДобавления
Возврат Результат;
КонецФункции
КонецПроцедуры
// Возвращает таблицу предопределенных элементов справочника СправочникСсылка.пбп_МетодыИнтеграции.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица заполненная предопределенными элементами.
// Заполняет таблицу предопределенных элементов справочника СправочникСсылка.пбп_МетодыИнтеграции.
//
Функция ПредопределенныеЗначенияИнтеграционныеПотоки() Экспорт
Результат = ТаблицаПредопределенныхИнтеграционныеПотоки();
// Параметры:
// Таблица - ТаблицаЗначений - Таблица предопределенных элементов.
//
Процедура ПредопределенныеЗначенияИнтеграционныеПотоки(Таблица) Экспорт
// Добавление
НовыйМетод = Результат.Добавить();
НовыйМетод = Таблица.Добавить();
НовыйМетод.Наименование = "Интеграционный поток системы N";
НовыйМетод.ИдентификаторНастройки = "ИнтеграционныйПотокСистемыN";
// КонецДобавления
Возврат Результат;
КонецФункции
КонецПроцедуры
// Возвращает таблицу предопределенных элементов справочника СправочникСсылка.пбп_НастройкиИнтеграции.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица заполненная предопределенными элементами.
// Заполняет таблицу предопределенных элементов справочника СправочникСсылка.пбп_НастройкиИнтеграции.
//
Функция ПредопределенныеЗначенияНастройкиИнтеграции() Экспорт
Результат = ТаблицаПредопределенныхНастройкиИнтеграции();
// Параметры:
// Таблица - ТаблицаЗначений - Таблица предопределенных элементов.
//
Процедура ПредопределенныеЗначенияНастройкиИнтеграции(Таблица) Экспорт
// Добавление
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Интеграция с системой N";
НоваяНастройка.ИдентификаторНастройки = "ИнтеграцияССистемойN";
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Rabbit Mq";
НоваяНастройка.ИдентификаторНастройки = "RabbitMq";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("RabbitMq");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.RabbitMq;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Simple Kafka";
НоваяНастройка.ИдентификаторНастройки = "SimpleKafka";
НоваяНастройка.ИнтегрируемаяСистема = пбп_ИнтеграцииСлужебный.ИнтегрируемаяСистема("Kafka");
НоваяНастройка.ТипИнтеграции = Справочники.пбп_ТипыИнтеграций.Kafka;
НоваяНастройка.ТипАвторизации = Перечисления.пбп_ТипыАвторизации.Базовая;
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Active directory";
НоваяНастройка.ИдентификаторНастройки = "ActiveDirectory";
НоваяНастройка.СтрокаПодключения = "Provider=""ADsDSOObject""";
@ -156,114 +173,227 @@
НоваяНастройка.ИмяОбъекта = "ADODB.Connection";
// КонецДобавления
Возврат Результат;
КонецФункции
КонецПроцедуры
// Возвращает таблицу предопределенных элементов справочника СправочникСсылка.пбп_ТипСоответствияОбъектовИБ.
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица заполненная предопределенными элементами.
// Заполняет таблицу предопределенных элементов справочника СправочникСсылка.пбп_ТипСоответствияОбъектовИБ.
//
Функция ПредопределенныеЗначенияТипСоответствияОбъектовИБ() Экспорт
Результат = ТаблицаПредопределенныхТипСоответствияОбъектовИБ();
// Параметры:
// Таблица - ТаблицаЗначений - Таблица предопределенных элементов.
//
Процедура ПредопределенныеЗначенияТипСоответствияОбъектовИБ(Таблица) Экспорт
// Добавление
НоваяНастройка = Результат.Добавить();
НоваяНастройка = Таблица.Добавить();
НоваяНастройка.Наименование = "Тест";
НоваяНастройка.ИдентификаторНастройки = "Тест";
// КонецДобавления
Возврат Результат;
КонецПроцедуры
// Возвращает колонки таблицы предопределенных элементов.
//
// Параметры:
// Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
Функция КолонкиПредопределенныхЭлементов(Менеджер) Экспорт
Выражение = пбп_ПредопределенныеЗначенияПовтИсп.ФункцииПолученияКолонокПредопределенныхЭлементов()
.Получить(ТипЗнч(Менеджер));
Если Не ЗначениеЗаполнено(Выражение) Тогда
Возврат Неопределено;
КонецЕсли;
Колонки = ОбщиеКолонки(Менеджер);
Параметры = Новый Массив;
Параметры.Добавить(Менеджер);
ДопКолонки = пбп_ОбщегоНазначенияСлужебный.ВычислитьВБезопасномРежиме(Выражение);
пбп_ОбщегоНазначенияСлужебныйКлиентСервер.ДополнитьСтруктуру(Колонки, ДопКолонки);
Возврат Колонки;
КонецФункции
// Добавляет общие колонки таблицы предопределенных значений.
#Область СтруктурыКолонокТаблиц
// Возвращает колонки предопределенные значения
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
// Параметры:
// Таблица - ТаблицаЗначений - Таблица для заполнения предопределенными.
//
Процедура ОбщиеКолонкиТаблицыПредопределенныхЗначений(Таблица) Экспорт
Функция КолонкиПредопределенныеЗначения() Экспорт
Колонки = Новый Структура;
ОписаниеСтрока = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));
ОписаниеБулево = Новый ОписаниеТипов("Булево");
Таблица.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтрока);
Таблица.Колонки.Добавить("Наименование", ОписаниеСтрока);
Таблица.Колонки.Добавить("ЭтоГруппа", ОписаниеБулево);
Таблица.Колонки.Добавить("Родитель", ОписаниеСтрока);
Таблица.Колонки.Добавить("УровеньИерархии", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(2,0)));
// Служебные колонки
Таблица.Колонки.Добавить("Служеб_ОбновитьРасположениеЭлемента", ОписаниеБулево);
Таблица.Колонки.Добавить("Служеб_СсылкаНаПредопределенныйЭлемент", Неопределено);
// Добавление
Колонки.Вставить("Пароль", ОписаниеБулево);
Колонки.Вставить("СписокЗначений", ОписаниеБулево);
Колонки.Вставить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов"));
// КонецДобавления
КонецПроцедуры
Возврат Колонки;
КонецФункции
// Возвращает колонки интегрируемые системы
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
Функция КолонкиИнтегрируемыеСистемы() Экспорт
Колонки = Новый Структура;
// Добавление
// КонецДобавления
Возврат Колонки;
КонецФункции
// Возвращает колонки интеграционные потоки
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
Функция КолонкиИнтеграционныеПотоки() Экспорт
Колонки = Новый Структура;
// Добавление
// КонецДобавления
Возврат Колонки;
КонецФункции
// Возвращает колонки настройки интеграции
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
Функция КолонкиНастройкиИнтеграции() Экспорт
Колонки = Новый Структура;
// Добавление
Колонки.Вставить("ИнтегрируемаяСистема" , Новый ОписаниеТипов("СправочникСсылка.пбп_ИнтегрируемыеСистемы"));
Колонки.Вставить("ТипИнтеграции" , Новый ОписаниеТипов("СправочникСсылка.пбп_ТипыИнтеграций"));
Колонки.Вставить("СтрокаПодключения" , пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(200));
Колонки.Вставить("ТипАвторизации" , Новый ОписаниеТипов("ПеречислениеСсылка.пбп_ТипыАвторизации"));
Колонки.Вставить("ИмяОбъекта" , пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(100));
// КонецДобавления
Возврат Колонки;
КонецФункции
// Возвращает колонки тип соответствия объектов ИБ
//
// Возвращаемое значение:
// Структура - Где ключ имя колонки, значение описание типов колонки
//
Функция КолонкиТипСоответствияОбъектовИБ() Экспорт
Колонки = Новый Структура;
// Добавление
// КонецДобавления
Возврат Колонки;
КонецФункции
#КонецОбласти
// Возвращает исключаемые поля для расчета хеша элемент
//
// Возвращаемое значение:
// Массив - Исключаемые поля
//
Функция ИсключаемыеПоляДляРасчетаХешаЭлемент() Экспорт
Поля = Новый Структура;
Поля.Вставить("ХешСумма");
Поля.Вставить("УровеньИерархии");
Поля.Вставить("ИдентификаторРодитель");
Возврат Поля;
КонецФункции
// Возвращает исключаемые поля для расчета хеша группа
//
// Возвращаемое значение:
// Массив - Исключаемые поля
//
Функция ИсключаемыеПоляДляРасчетаХешаГруппа() Экспорт
Поля = Новый Структура;
Поля.Вставить("ХешСумма");
Поля.Вставить("УровеньИерархии");
Поля.Вставить("ИдентификаторРодитель");
Поля.Вставить("Пароль");
Поля.Вставить("СписокЗначений");
Возврат Поля;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ТаблицаПредопределенных()
Функция ОбщиеКолонки(Менеджер)
массив = Новый Массив;
массив.Добавить(ТипЗнч(Менеджер.ПустаяСсылка()));
ОписаниеТиповЭлемента = Новый ОписаниеТипов(массив);
Колонки = Новый Структура;
ОписаниеСтрока = Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(150));
ОписаниеБулево = Новый ОписаниеТипов("Булево");
Результат = Новый ТаблицаЗначений;
Колонки.Вставить("ИдентификаторНастройки", ОписаниеСтрока);
Колонки.Вставить("Наименование", ОписаниеСтрока);
Колонки.Вставить("ЭтоГруппа", ОписаниеБулево);
Колонки.Вставить("Родитель", ОписаниеТиповЭлемента);
ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);
Колонки.Вставить("УровеньИерархии", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(2,0)));
Колонки.Вставить("ИдентификаторРодитель", ОписаниеСтрока);
Колонки.Вставить("ХешСумма", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(32)));
Результат.Колонки.Добавить("Пароль", ОписаниеБулево);
Результат.Колонки.Добавить("СписокЗначений", ОписаниеБулево);
Результат.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов"));
Колонки.Вставить("Служеб_ОбновитьЭлемент", ОписаниеБулево);
Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
Возврат Результат;
Возврат Колонки;
КонецФункции
Функция ТаблицаПредопределенныхИнтегрируемыеСистемы()
Процедура СоздатьКолонкиТаблицыПредопределенныхЭлементов(СтруктураСКолонками, Таблица)
Результат = Новый ТаблицаЗначений;
Для Каждого КлючЗначение Из СтруктураСКолонками Цикл
Если Таблица.Колонки.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Таблица.Колонки.Добавить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);
Возврат Результат;
КонецФункции
КонецПроцедуры
Функция ТаблицаПредопределенныхИнтеграционныеПотоки()
Результат = Новый ТаблицаЗначений;
ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);
Возврат Результат;
КонецФункции
Функция ТаблицаПредопределенныхНастройкиИнтеграции()
Результат = Новый ТаблицаЗначений;
ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);
Результат.Колонки.Добавить("ИнтегрируемаяСистема" , Новый ОписаниеТипов("СправочникСсылка.пбп_ИнтегрируемыеСистемы"));
Результат.Колонки.Добавить("ТипИнтеграции" , Новый ОписаниеТипов("СправочникСсылка.пбп_ТипыИнтеграций"));
Результат.Колонки.Добавить("СтрокаПодключения" , пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(200));
Результат.Колонки.Добавить("ТипАвторизации" , Новый ОписаниеТипов("ПеречислениеСсылка.пбп_ТипыАвторизации"));
Результат.Колонки.Добавить("ИмяОбъекта" , пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(100));
Возврат Результат;
КонецФункции
Функция ТаблицаПредопределенныхТипСоответствияОбъектовИБ()
Результат = Новый ТаблицаЗначений;
ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="6054e0d2-4fd6-4a4c-b946-01009f30e5ee">
<Properties>
<Name>пбп_ПредопределенныеЗначенияПовтИсп</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Предопределенные значения повт исп</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DuringSession</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,93 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
//
#Область СлужебныйПрограммныйИнтерфейс
// Возвращает соответствие типа с функцией для получения таблицы предопределенных элементов.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - ПланВидовХарактеристикМенеджер, СправочникМенеджер
// * Значение - Строка
//
Функция ФункцииСозданияТаблицПредопределенныхЭлементов() Экспорт
Соответствие = Новый Соответствие;
// Добавление
Соответствие.Вставить(Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения"),
"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначения");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы"),
"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияИнтегрируемыеСистемы");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки"),
"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияИнтеграционныеПотоки");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_НастройкиИнтеграции"),
"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияНастройкиИнтеграции");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ"),
"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияТипСоответствияОбъектовИБ");
// КонецДобавления
Возврат Соответствие;
КонецФункции
// Возвращает соответствие типа с функцией для получения колонок таблицы предопределенных элементов.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - ПланВидовХарактеристикМенеджер, СправочникМенеджер
// * Значение - Строка
//
Функция ФункцииПолученияКолонокПредопределенныхЭлементов() Экспорт
Соответствие = Новый Соответствие;
// Добавление
Соответствие.Вставить(Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения"),
"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиПредопределенныеЗначения");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы"),
"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиИнтегрируемыеСистемы");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки"),
"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиИнтеграционныеПотоки");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_НастройкиИнтеграции"),
"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиНастройкиИнтеграции");
Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ"),
"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиТипСоответствияОбъектовИБ");
// КонецДобавления
ОбработатьСоответствиеФункцийКолонок(Соответствие);
Возврат Соответствие;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ОбработатьСоответствиеФункцийКолонок(Соответствие)
Для Каждого КлючЗначение Из Соответствие Цикл
Соответствие[КлючЗначение.Ключ] = КлючЗначение.Значение + "()";
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@ -263,8 +263,58 @@
#КонецОбласти
#КонецОбласти // ПрограммныйИнтерфейс
// Превращает строку camelCase в синоним
//
// Параметры:
// ИсходнаяСтрока - Строка - Строка типа ИдентификаторНастройки
//
// Возвращаемое значение:
// Строка - Синоним
//
Функция СинонимСтроки(ИсходнаяСтрока) Экспорт
Результат = пбп_СтроковыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока);
Если Результат.Количество() > 1 Тогда
Возврат "";
КонецЕсли;
ДлинаСтроки = СтрДлина(ИсходнаяСтрока) + 1;
Старт = 1;
Конец = 0;
Части = Новый Массив;
Для Конец = 2 По ДлинаСтроки Цикл
КодСимвола = КодСимвола(Сред(ИсходнаяСтрока, Конец, 1));
Если СимволВерхнегоРегистра(КодСимвола) Или Конец = ДлинаСтроки Тогда
КолСимволов = Конец - Старт;
Части.Добавить(Сред(ИсходнаяСтрока, Старт, ?(КолСимволов = 0, ДлинаСтроки - Старт, КолСимволов)));
Старт = Конец;
КонецЕсли;
КонецЦикла;
Синоним = НРег(СтрСоединить(Части, " "));
Синоним = ВРег(Лев(Синоним, 1)) + Сред(Синоним,2);
Возврат Синоним;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти // СлужебныеПроцедурыИФункции
Функция СимволВерхнегоРегистра(КодСимвола)
минКирилица = 1040;
максКирилица = 1070;
минЛатиница = 65;
максЛатиница = 90;
Если (КодСимвола >= минКирилица И КодСимвола <= максКирилица)
Или (КодСимвола >= минЛатиница И КодСимвола <= максЛатиница) Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
#КонецОбласти

View File

@ -57,7 +57,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
</DefaultRoles>
<Vendor>Первый БИТ</Vendor>
<Version>1.0.2.7</Version>
<Version>1.0.3.8</Version>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
@ -260,11 +260,13 @@
<Role>пбп_РедактированиеПланаВидовХарактеристикПредопределенныеЗначения</Role>
<Role>пбп_РедактированиеПользовательскихФункций</Role>
<Role>пбп_РедактированиеРегистраСведенийСоответствияОбъектовИБ</Role>
<Role>пбп_РедактированиеСостоянийПредопределенныхЭлементов</Role>
<Role>пбп_РедактированиеТиповСоответствияОбъектовИБ</Role>
<Role>пбп_ЧтениеКонстантыИспользоватьПользовательскиеФункции</Role>
<Role>пбп_ЧтениеНастроекОтборовОбъектов</Role>
<Role>пбп_ЧтениеПланаВидовХарактеристикПредопределенныеЗначения</Role>
<Role>пбп_ЧтениеРегистраСведенийСоответствияОбъектовИБ</Role>
<Role>пбп_ЧтениеСостоянийПредопределенныхЭлементов</Role>
<Role>пбп_ЧтениеТиповСоответствияОбъектовИБ</Role>
<Role>пбп_ПросмотрИсторииИнтеграции</Role>
<Role>ПолныеПрава</Role>
@ -306,7 +308,10 @@
<CommonModule>пбп_ПользователиКлиентСервер</CommonModule>
<CommonModule>пбп_ПользователиСлужебный</CommonModule>
<CommonModule>пбп_ПредопределенныеЗначения</CommonModule>
<CommonModule>пбп_ПредопределенныеЗначенияВызовСервера</CommonModule>
<CommonModule>пбп_ПредопределенныеЗначенияКлиент</CommonModule>
<CommonModule>пбп_ПредопределенныеЗначенияПереопределяемый</CommonModule>
<CommonModule>пбп_ПредопределенныеЗначенияПовтИсп</CommonModule>
<CommonModule>пбп_РаботаСДиалогамиКлиент</CommonModule>
<CommonModule>пбп_РаботаСДиалогамиСервер</CommonModule>
<CommonModule>пбп_РаботаСКоллекциямиКлиентСервер</CommonModule>
@ -343,8 +348,10 @@
<DefinedType>пбп_Пользователи</DefinedType>
<DefinedType>пбп_ТипыОбъектовСоответствийИБ</DefinedType>
<DefinedType>пбп_УчетныеЗаписиЭлектроннойПочты</DefinedType>
<DefinedType>пбп_ПредопределенныеВсеСсылкиПереопределяемый</DefinedType>
<Constant>пбп_ИспользоватьПользовательскиеФункции</Constant>
<CommonForm>пбп_ФормаВыбораПоля</CommonForm>
<CommonForm>пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов</CommonForm>
<Catalog>пбп_ИнтеграционныеПотоки</Catalog>
<Catalog>пбп_ИнтегрируемыеСистемы</Catalog>
<Catalog>пбп_ИсторияИнтеграции</Catalog>
@ -362,7 +369,8 @@
<Enum>пбп_ТипыАвторизации</Enum>
<Enum>пбп_ФорматыИнтеграций</Enum>
<InformationRegister>пбп_СоответствияОбъектовИБ</InformationRegister>
<InformationRegister>пбп_СостоянияПредопределенныхЭлементов</InformationRegister>
<ChartOfCharacteristicTypes>пбп_ПредопределенныеЗначения</ChartOfCharacteristicTypes>
</ChildObjects>
</Configuration>
</MetaDataObject>
</MetaDataObject>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<DefinedType uuid="07b32f1c-1f29-4f24-b80e-d46a632a69eb">
<InternalInfo>
<xr:GeneratedType name="DefinedType.пбп_ПредопределенныеВсеСсылкиПереопределяемый" category="DefinedType">
<xr:TypeId>d2f123f9-0596-4050-bfda-f4a2168d11cb</xr:TypeId>
<xr:ValueId>6c3a68be-33c5-43c4-b2d7-af577a6cc81d</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>пбп_ПредопределенныеВсеСсылкиПереопределяемый</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ссылки на все объекты с предопределенными элементами</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.пбп_НастройкиИнтеграции</v8:Type>
<v8:Type>cfg:CatalogRef.пбп_ТипСоответствияОбъектовИБ</v8:Type>
<v8:Type>cfg:CatalogRef.пбп_ИнтегрируемыеСистемы</v8:Type>
<v8:Type>cfg:ChartOfCharacteristicTypesRef.пбп_ПредопределенныеЗначения</v8:Type>
<v8:Type>cfg:CatalogRef.пбп_ИнтеграционныеПотоки</v8:Type>
</Type>
</Properties>
</DefinedType>
</MetaDataObject>

View File

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<InformationRegister uuid="36dd52bc-2eb7-423a-bd64-659eb2958ca4">
<InternalInfo>
<xr:GeneratedType name="InformationRegisterRecord.пбп_СостоянияПредопределенныхЭлементов" category="Record">
<xr:TypeId>87e4b2aa-c7c3-423d-8526-7a930c8e6236</xr:TypeId>
<xr:ValueId>2b2ddb36-6d49-4502-8462-d4df0bf54617</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterManager.пбп_СостоянияПредопределенныхЭлементов" category="Manager">
<xr:TypeId>9976aae0-db4e-4d30-ac29-ee3442971415</xr:TypeId>
<xr:ValueId>49fcecb9-b3b5-4825-b372-9ed7d303ad34</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterSelection.пбп_СостоянияПредопределенныхЭлементов" category="Selection">
<xr:TypeId>b5e0545f-6bbf-4c4d-8950-84cad50f3a94</xr:TypeId>
<xr:ValueId>a90d8d30-a853-4000-b3c1-26a79fd2cf03</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterList.пбп_СостоянияПредопределенныхЭлементов" category="List">
<xr:TypeId>2b66ac27-c6b3-40fa-bb05-86b0ee788e33</xr:TypeId>
<xr:ValueId>fd092390-5e4e-4a32-87a6-519d261a7f9b</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordSet.пбп_СостоянияПредопределенныхЭлементов" category="RecordSet">
<xr:TypeId>198d833e-02cc-41c9-93f1-99ad4627c9cf</xr:TypeId>
<xr:ValueId>44a41502-ba04-4276-826e-5d2759d88c62</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordKey.пбп_СостоянияПредопределенныхЭлементов" category="RecordKey">
<xr:TypeId>8e26a08c-2f5b-4eb1-ac9e-324cdae4d186</xr:TypeId>
<xr:ValueId>ca4050ea-1fe5-48e8-9356-6180e6033dc8</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordManager.пбп_СостоянияПредопределенныхЭлементов" category="RecordManager">
<xr:TypeId>83b857ea-c5f2-4d10-893c-5b7b6631c9cd</xr:TypeId>
<xr:ValueId>c025c68e-c8da-4803-8f8a-86ad8e18030c</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>пбп_СостоянияПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Состояния предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<UseStandardCommands>true</UseStandardCommands>
<EditType>InDialog</EditType>
<DefaultRecordForm/>
<DefaultListForm/>
<AuxiliaryRecordForm/>
<AuxiliaryListForm/>
<InformationRegisterPeriodicity>Nonperiodical</InformationRegisterPeriodicity>
<WriteMode>Independent</WriteMode>
<MainFilterOnPeriod>false</MainFilterOnPeriod>
<IncludeHelpInContents>false</IncludeHelpInContents>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>DontUse</FullTextSearch>
<EnableTotalsSliceFirst>false</EnableTotalsSliceFirst>
<EnableTotalsSliceLast>false</EnableTotalsSliceLast>
<RecordPresentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Состояние преопределенного элемента</v8:content>
</v8:item>
</RecordPresentation>
<ExtendedRecordPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<DataHistory>DontUse</DataHistory>
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties>
<ChildObjects>
<Resource uuid="46110608-a270-4baf-90d0-c2f18e5b18e7">
<Properties>
<Name>ХешСумма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Хеш сумма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>32</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="8a764f84-cde4-4073-942c-e21ae4331de6">
<Properties>
<Name>РучноеИзменение</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ручное изменение</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Dimension uuid="5b60de34-97e9-4c6c-a698-bccd2e7e5f80">
<Properties>
<Name>Объект</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Объект</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:TypeSet>cfg:DefinedType.пбп_ПредопределенныеВсеСсылкиПереопределяемый</v8:TypeSet>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>true</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>FoldersAndItems</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Master>true</Master>
<MainFilter>true</MainFilter>
<DenyIncompleteValues>true</DenyIncompleteValues>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Dimension>
</ChildObjects>
</InformationRegister>
</MetaDataObject>

View File

@ -0,0 +1,131 @@

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Создает запись регистра с заданными параметрами.
//
// Параметры:
// Объект - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на предопределенный элемент.
// ЭтоГруппа - Булево - Признак того что элемент является группой.
// КлючиХеша - Структура, Неопределено - Если ключи хеша не переданы, то они будут сформированы заново.
//
Процедура СоздатьЗаписьРегистра(Объект, ЭтоГруппа = Ложь, КлючиХеша = Неопределено) Экспорт
Если КлючиХеша = Неопределено Тогда
КлючиХеша = КлючиХешаОбъект(Объект, ЭтоГруппа);
КонецЕсли;
Если Не ЗначениеЗаполнено(КлючиХеша) Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(КлючиХеша, Объект);
Набор = РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.СоздатьНаборЗаписей();
Набор.Отбор.Объект.Установить(Объект);
Запись = Набор.Добавить();
Запись.Объект = Объект;
Запись.ХешСумма = пбп_ОбщегоНазначенияСлужебный.КонтрольнаяСуммаСтрокой(КлючиХеша, ХешФункция.MD5);
Набор.Записать();
КонецПроцедуры
// Обновляет хеш элемента в регистре, устанавливая при этом ручное изменение.
// Если хеш не был изменен по ключевым реквизитам, обновления не произойдет.
//
// Параметры:
// Объект - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на предопределенный элемент
// ЭтоГруппа - Булево - Признак того что элемент является группой
// Флаг - Булево - Признак ручного изменения элемента.
//
Процедура ОбновитьХешЭлемента(Объект, ЭтоГруппа = Ложь, Флаг = Ложь) Экспорт
КлючиХеша = КлючиХешаОбъект(Объект, ЭтоГруппа);
Если Не ЗначениеЗаполнено(КлючиХеша) Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(КлючиХеша, Объект);
НовыйХешЭлемента = пбп_ОбщегоНазначенияСлужебный.КонтрольнаяСуммаСтрокой(КлючиХеша, ХешФункция.MD5);
Набор = СоздатьНаборЗаписей();
Набор.Отбор.Объект.Установить(Объект);
Набор.Прочитать();
Если Не ЗначениеЗаполнено(Набор) Тогда
СообщитьОбОтсутствииЗаписи(Объект);
Возврат;
КонецЕсли;
Запись = Набор[0];
Если НовыйХешЭлемента = Запись.ХешСумма Тогда
Возврат;
КонецЕсли;
Запись.ХешСумма = НовыйХешЭлемента;
Запись.РучноеИзменение = Флаг;
Набор.Записать();
КонецПроцедуры
// Обновляет флаг ручного изменения элемента
//
// Параметры:
// Объект - СправочникСсылка, ПланВидовХарактеристикСсылка - Ссылка на предопределенный элемент
// Флаг - Булево - Устанавливается если были изменены ключевые поля пользователем.
//
Процедура ОбновитьФлагРучногоИзменения(Объект, Флаг) Экспорт
Набор = СоздатьНаборЗаписей();
Набор.Отбор.Объект.Установить(Объект);
Набор.Прочитать();
Если Не ЗначениеЗаполнено(Набор) Тогда
СообщитьОбОтсутствииЗаписи(Объект);
Возврат;
КонецЕсли;
Набор[0].РучноеИзменение = Флаг;
Набор.Записать();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура СообщитьОбОтсутствииЗаписи(Элемент)
ТекстСообщения = НСтр("ru = 'При обновлении не найдена запись состояния по объекту ''%1'' не найдена!';
|en = 'No status record found during update for object ''%1'' not found!'");
ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстСообщения,
Элемент.Ссылка);
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ТекстСообщения, Элемент);
КонецПроцедуры
Функция КлючиХешаОбъект(Объект, ЭтоГруппа)
МенеджерОбъекта = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоСсылке(Объект);
КлючевыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиПредопределенныхЭлементов(МенеджерОбъекта);
Если Не ЗначениеЗаполнено(КлючевыеПоля) Тогда
Возврат Новый Структура;
КонецЕсли;
мПоля = Новый Массив;
Для Каждого КлючЗначение Из КлючевыеПоля Цикл
мПоля.Добавить(КлючЗначение.Ключ);
КонецЦикла;
Возврат пбп_ПредопределенныеЗначения.КлючиХешаПредопределенногоЭлемента(мПоля, ЭтоГруппа);
КонецФункции
#КонецОбласти
#КонецЕсли

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<Role uuid="b9628b68-f165-4c1c-8d64-9e4b64e3609c">
<Properties>
<Name>пбп_РедактированиеСостоянийПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Редактирование состояний предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</Role>
</MetaDataObject>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.16">
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>InformationRegister.пбп_СостоянияПредопределенныхЭлементов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
</Rights>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<Role uuid="0cc5fef1-a0c7-4876-a781-f32b11e7fbff">
<Properties>
<Name>пбп_ЧтениеСостоянийПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Чтение состояний предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</Role>
</MetaDataObject>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.16">
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>InformationRegister.пбп_СостоянияПредопределенныхЭлементов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
</Rights>

View File

@ -27,6 +27,8 @@
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ПредопределенныеЗначенияПереопределяемый</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ОбщегоНазначенияПовтИсп</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ОбщегоНазначенияСервер</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonForm.пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">InformationRegister.пбп_СостоянияПредопределенныхЭлементов</xr:Item>
</Content>
</Properties>
<ChildObjects/>