3_1_8_302

This commit is contained in:
Компания 1С committed 2023-05-04 14:42:00 +03:00
1 parent bf143472d7
commit 3efc44c50b
271 files changed
+17523 -6311

No files matched your search

@@ -62,7 +62,8 @@
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
ПредставлениеФормулы = МодульКонструкторФормул.ПредставлениеФормулы(ПараметрыФормулы()); ПредставлениеФормулы = МодульКонструкторФормул.ПредставлениеФормулы(ПараметрыФормулы(
Объект.ФормулаРасчетаКурса, УникальныйИдентификатор));
Иначе Иначе
Элементы.ФормулаРасчетаКурса.КнопкаВыбора = Ложь; Элементы.ФормулаРасчетаКурса.КнопкаВыбора = Ложь;
КонецЕсли; КонецЕсли;
@@ -307,19 +308,19 @@
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииРедактированияФормулы", ЭтотОбъект); ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииРедактированияФормулы", ЭтотОбъект);
МодульКонструкторФормулКлиент.НачатьРедактированиеФормулы(ПараметрыФормулы(), ОписаниеОповещения); МодульКонструкторФормулКлиент.НачатьРедактированиеФормулы(ПараметрыФормулы(Объект.ФормулаРасчетаКурса, УникальныйИдентификатор), ОписаниеОповещения);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаСервере &НаСервереБезКонтекста
Функция ПараметрыФормулы() Функция ПараметрыФормулы(ФормулаРасчетаКурса, УникальныйИдентификатор)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
ПараметрыФормулы = МодульКонструкторФормул.ПараметрыРедактированияФормулы(); ПараметрыФормулы = МодульКонструкторФормул.ПараметрыРедактированияФормулы();
ПараметрыФормулы.Формула = Объект.ФормулаРасчетаКурса; ПараметрыФормулы.Формула = ФормулаРасчетаКурса;
ПараметрыФормулы.СкобкиОперандов = Ложь; ПараметрыФормулы.СкобкиОперандов = Ложь;
ПараметрыФормулы.Операнды = ОперандыФормулыРасчетаКурса(УникальныйИдентификатор); ПараметрыФормулы.Операнды = ОперандыФормулыРасчетаКурса(УникальныйИдентификатор);
ПараметрыФормулы.Операторы = ОператорыФормулыРасчетаКурса(УникальныйИдентификатор); ПараметрыФормулы.Операторы = ОператорыФормулыРасчетаКурса(УникальныйИдентификатор);
@@ -29,9 +29,9 @@
Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда
Отказ = Истина; Отказ = Истина;
ОбщегоНазначения.СообщитьПользователю( ОбщегоНазначения.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, укажите другое наименование.'"), Наименование), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
, НСтр("ru = '""%1"" занято, укажите другое наименование.'"), Наименование),
"Наименование"); ,"Наименование");
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -341,21 +341,19 @@
Если ПометкаУдаления Или Не Предопределенный Тогда Если ПометкаУдаления Или Не Предопределенный Тогда
Возврат; Возврат;
ИначеЕсли Не ЗначениеЗаполнено(Отчет) Тогда
ТекстОшибки = НеЗаполненоПоле("Отчет");
ИначеЕсли Не ЗначениеЗаполнено(ТипОтчета) Тогда
ТекстОшибки = НеЗаполненоПоле("ТипОтчета");
ИначеЕсли ТипОтчета <> ВариантыОтчетов.ТипОтчета(Отчет) Тогда
ТекстОшибки = НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ТипОтчета", "Отчет");
ИначеЕсли Не ЗначениеЗаполнено(ПредопределенныйВариант)
И (ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или ТипОтчета = Перечисления.ТипыОтчетов.Расширение) Тогда
ТекстОшибки = НеЗаполненоПоле("ПредопределенныйВариант");
Иначе
Возврат;
КонецЕсли; КонецЕсли;
ВызватьИсключение ТекстОшибки; Если Не ЗначениеЗаполнено(Отчет) Тогда
ВызватьИсключение НеЗаполненоПоле("Отчет");
ИначеЕсли Не ЗначениеЗаполнено(ТипОтчета) Тогда
ВызватьИсключение НеЗаполненоПоле("ТипОтчета");
ИначеЕсли ТипОтчета <> ВариантыОтчетов.ТипОтчета(Отчет) Тогда
ТекстОшибки = НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ТипОтчета", "Отчет");
ИначеЕсли Не ЗначениеЗаполнено(ПредопределенныйВариант)
И (ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или ТипОтчета = Перечисления.ТипыОтчетов.Расширение) Тогда
ВызватьИсключение НеЗаполненоПоле("ПредопределенныйВариант");
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -752,7 +752,7 @@
<titleLocation>Right</titleLocation> <titleLocation>Right</titleLocation>
<handlers> <handlers>
<event>OnChange</event> <event>OnChange</event>
<name>ТелефонCДобавочнымНомеромПриИзменении</name> <name>ТелефонСДобавочнымНомеромПриИзменении</name>
</handlers> </handlers>
<extendedTooltip> <extendedTooltip>
<name>ТелефонCДобавочнымНомеромРасширеннаяПодсказка</name> <name>ТелефонCДобавочнымНомеромРасширеннаяПодсказка</name>
@@ -319,14 +319,14 @@
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура ТелефонCДобавочнымНомеромПриИзменении(Элемент) Процедура ТелефонСДобавочнымНомеромПриИзменении(Элемент)
ОбновитьДоступностьЭлементовТелефонаФакса(ЭтотОбъект); ОбновитьДоступностьЭлементовТелефонаФакса(ЭтотОбъект);
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура МаскаПриВводеНомераТелефонаПриИзменении(Элемент) Процедура МаскаПриВводеНомераТелефонаПриИзменении(Элемент)
ОбновитьДоступностьЭлементовТелефонаФакса(ЭтотОбъект); ОбновитьДоступностьЭлементовТелефонаФакса(ЭтотОбъект);
@@ -600,14 +600,13 @@
КонецЕсли; КонецЕсли;
Если Не ВидКонтактнойИнформации.ЭтоГруппа И ПустаяСтрока(ВидКонтактнойИнформации.ВидРедактирования) Тогда Если Не ВидКонтактнойИнформации.ЭтоГруппа И ПустаяСтрока(ВидКонтактнойИнформации.ВидРедактирования) Тогда
Если ВидКонтактнойИнформации.УдалитьРедактированиеТолькоВДиалоге Тогда Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница
Или ВидКонтактнойИнформации.УдалитьРедактированиеТолькоВДиалоге Тогда
ВидКонтактнойИнформации.ВидРедактирования = "Диалог"; ВидКонтактнойИнформации.ВидРедактирования = "Диалог";
ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты
Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Skype Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Skype
Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
ВидКонтактнойИнформации.ВидРедактирования = "ПолеВвода"; ВидКонтактнойИнформации.ВидРедактирования = "ПолеВвода";
ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
ВидКонтактнойИнформации.ВидРедактирования = "Диалог";
Иначе Иначе
ВидКонтактнойИнформации.ВидРедактирования = "ПолеВводаИДиалог"; ВидКонтактнойИнформации.ВидРедактирования = "ПолеВводаИДиалог";
КонецЕсли; КонецЕсли;
@@ -2227,7 +2227,7 @@
</userVisible> </userVisible>
<toolTip> <toolTip>
<key>ru</key> <key>ru</key>
<value>Не включен вход в программу, нет прав или <value>Не включен вход в программу, нет прав для входа или
нет ни одного права запуска (тонкий клиент, веб-клиент)</value> нет ни одного права запуска (тонкий клиент, веб-клиент)</value>
</toolTip> </toolTip>
<extendedTooltip> <extendedTooltip>
@@ -594,8 +594,8 @@
</userVisible> </userVisible>
<toolTip> <toolTip>
<key>ru</key> <key>ru</key>
<value>У пользователя нет ни одного права запуска (тонкий клиент, веб-клиент, <value>У пользователя нет ни одного права запуска
толстый клиент, automation, внешнее соединение)</value> (например, тонкий клиент, веб-клиент)</value>
</toolTip> </toolTip>
<extendedTooltip> <extendedTooltip>
<name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name> <name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name>
@@ -646,6 +646,110 @@
<currentRowUse>Auto</currentRowUse> <currentRowUse>Auto</currentRowUse>
</extInfo> </extInfo>
</items> </items>
<items xsi:type="form:FormGroup">
<name>ГруппаНетПравНаВход</name>
<id>397</id>
<items xsi:type="form:Decoration">
<name>НетПравНаВходКартинка</name>
<id>399</id>
<title>
<key>ru</key>
<value>Нет прав на вход картинка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НетПравНаВходКартинкаРасширеннаяПодсказка</name>
<id>401</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НетПравНаВходКартинкаКонтекстноеМеню</name>
<id>400</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Предупреждение</picture>
</picture>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>НетПравНаВходНадпись</name>
<id>402</id>
<title>
<key>ru</key>
<value>Нет прав для входа</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<toolTip>
<key>ru</key>
<value>Пользователю не назначены минимальные права для работы в программе</value>
</toolTip>
<extendedTooltip>
<name>НетПравНаВходНадписьРасширеннаяПодсказка</name>
<id>404</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НетПравНаВходНадписьКонтекстноеМеню</name>
<id>403</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Нет прав на вход</value>
</title>
<extendedTooltip>
<name>ГруппаНетПравНаВходРасширеннаяПодсказка</name>
<id>398</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup"> <items xsi:type="form:FormGroup">
<name>ГруппаИзменитьОграничение</name> <name>ГруппаИзменитьОграничение</name>
<id>346</id> <id>346</id>
@@ -1821,10 +1821,14 @@
Если Форма.ВходВПрограммуРазрешен Тогда Если Форма.ВходВПрограммуРазрешен Тогда
Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав; Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав
И Форма.НаличиеПрав.НедостаточноПравДляЗапуска;
Элементы.ГруппаНетПравНаВход.Видимость = Не Форма.НаличиеПрав.НетПрав
И Не Форма.НаличиеПрав.НедостаточноПравДляЗапуска
И Форма.НаличиеПрав.НедостаточноПравДляВхода; И Форма.НаличиеПрав.НедостаточноПравДляВхода;
Иначе Иначе
Элементы.ГруппаНетПрав.Видимость = Ложь; Элементы.ГруппаНетПрав.Видимость = Ложь;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь; Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь;
Элементы.ГруппаНетПравНаВход.Видимость = Ложь;
КонецЕсли; КонецЕсли;
// Настройка возможности изменения. // Настройка возможности изменения.
@@ -1704,6 +1704,10 @@
<horizontalAlign>Left</horizontalAlign> <horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</autoCommandBar> </autoCommandBar>
<handlers>
<event>OnLoadDataFromSettingsAtServer</event>
<name>ПриЗагрузкеДанныхИзНастроекНаСервере</name>
</handlers>
<handlers> <handlers>
<event>OnCreateAtServer</event> <event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name> <name>ПриСозданииНаСервере</name>
@@ -494,8 +494,9 @@
// Проверка имен действий в форме. // Проверка имен действий в форме.
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда
ДействияВФорме.Роли = ""; ДействияВФорме.Роли = "";
ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда ИначеЕсли ДействияВФорме.Роли = "Редактирование"
ДействияВФорме.Роли = ""; И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли; КонецЕсли;
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда
ДействияВФорме.СвойстваПользователяИБ = ""; ДействияВФорме.СвойстваПользователяИБ = "";
@@ -883,7 +883,7 @@
<userVisible/> <userVisible/>
</cmiFragmentRecord> </cmiFragmentRecord>
<cmiFragmentRecord> <cmiFragmentRecord>
<command>CommonCommand.СкрытьПерсональныеДанныеСубъектов</command> <command>0</command>
<userVisible/> <userVisible/>
</cmiFragmentRecord> </cmiFragmentRecord>
</commandBar> </commandBar>
@@ -2159,66 +2159,42 @@
// ПолноеИмя - Строка // ПолноеИмя - Строка
// //
// Возвращаемое значение: // Возвращаемое значение:
// Тип // - Тип
// Строка // - Строка
// //
Функция КлючОбъектаМетаданных(ПолноеИмя) Функция КлючОбъектаМетаданных(ПолноеИмя)
ПозицияТочки = СтрНайти(ПолноеИмя, "."); ПозицияТочки = СтрНайти(ПолноеИмя, ".");
КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1); КлассОбъектаМетаданных = ВРег(Лев( ПолноеИмя, ПозицияТочки - 1));
ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1); ИмяОбъектаМетаданных = Сред(ПолноеИмя, ПозицияТочки + 1);
Если ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда Если КлассОбъектаМетаданных = ВРег("ПланОбмена")
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); Или КлассОбъектаМетаданных = ВРег("Справочник")
Или КлассОбъектаМетаданных = ВРег("Документ")
Или КлассОбъектаМетаданных = ВРег("ПланВидовХарактеристик")
Или КлассОбъектаМетаданных = ВРег("ПланСчетов")
Или КлассОбъектаМетаданных = ВРег("ПланВидовРасчета")
Или КлассОбъектаМетаданных = ВРег("БизнесПроцесс")
Или КлассОбъектаМетаданных = ВРег("Задача") Тогда
Возврат Тип(КлассОбъектаМетаданных + "Ссылка." + ИмяОбъектаМетаданных);
ИначеЕсли ВРег(КлассОМ) = ВРег("Роль") Тогда ИначеЕсли КлассОбъектаМетаданных = ВРег("Роль") Тогда
Возврат КлючРоли(Метаданные.Роли[ИмяОМ]); Возврат КлючРоли(Метаданные.Роли[ИмяОбъектаМетаданных]);
ИначеЕсли ВРег(КлассОМ) = ВРег("Константа") Тогда ИначеЕсли КлассОбъектаМетаданных = ВРег("Константа")
Или КлассОбъектаМетаданных = ВРег("ЖурналДокументов") Тогда
Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя)); Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя));
ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда ИначеЕсли КлассОбъектаМетаданных = ВРег("Отчет")
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); Или КлассОбъектаМетаданных = ВРег("Обработка") Тогда
Возврат Тип(КлассОбъектаМетаданных + "Объект." + ИмяОбъектаМетаданных);
ИначеЕсли ВРег(КлассОМ) = ВРег("Документ") Тогда ИначеЕсли КлассОбъектаМетаданных = ВРег("РегистрСведений")
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); Или КлассОбъектаМетаданных = ВРег("РегистрНакопления")
Или КлассОбъектаМетаданных = ВРег("РегистрБухгалтерии")
ИначеЕсли ВРег(КлассОМ) = ВРег("ЖурналДокументов") Тогда Или КлассОбъектаМетаданных = ВРег("РегистрРасчета") Тогда
Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя)); Возврат Тип(КлассОбъектаМетаданных + "КлючЗаписи." + ИмяОбъектаМетаданных);
ИначеЕсли ВРег(КлассОМ) = ВРег("Отчет") Тогда
Возврат Тип(КлассОМ + "Объект." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("Обработка") Тогда
Возврат Тип(КлассОМ + "Объект." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовХарактеристик") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланСчетов") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовРасчета") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрСведений") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрНакопления") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрБухгалтерии") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрРасчета") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("БизнесПроцесс") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("Задача") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
Иначе Иначе
// Без ключа объекта метаданных. // Без ключа объекта метаданных.
Возврат Тип("Неопределено"); Возврат Тип("Неопределено");
@@ -3637,11 +3613,9 @@
УстановленныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.БазаДанных); УстановленныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.БазаДанных);
ОтключенныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансОтключенные); ОтключенныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансОтключенные);
АктивныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансАктивные); АктивныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансАктивные);
Если АктивныеРасширения.Количество() > 0 Тогда Если АктивныеРасширения.Количество() > 0
ИмяРасширения = УстановленныеРасширения[0].Имя; Или ОтключенныеРасширения.Количество() > 0
ИначеЕсли ОтключенныеРасширения.Количество() > 0 Тогда Или УстановленныеРасширения.Количество() > 0 Тогда
ИмяРасширения = УстановленныеРасширения[0].Имя;
ИначеЕсли УстановленныеРасширения.Количество() > 0 Тогда
ИмяРасширения = УстановленныеРасширения[0].Имя; ИмяРасширения = УстановленныеРасширения[0].Имя;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -3326,7 +3326,7 @@
</userVisible> </userVisible>
<toolTip> <toolTip>
<key>ru</key> <key>ru</key>
<value>Не включен вход в программу, нет прав или <value>Не включен вход в программу, нет прав для входа или
нет ни одного права запуска (тонкий клиент, веб-клиент, нет ни одного права запуска (тонкий клиент, веб-клиент,
толстый клиент, automation, внешнее соединение)</value> толстый клиент, automation, внешнее соединение)</value>
</toolTip> </toolTip>
@@ -987,7 +987,8 @@
</userVisible> </userVisible>
<toolTip> <toolTip>
<key>ru</key> <key>ru</key>
<value>У пользователя нет ни одного права запуска (тонкий клиент, веб-клиент)</value> <value>У пользователя нет ни одного права запуска
(например, тонкий клиент, веб-клиент)</value>
</toolTip> </toolTip>
<extendedTooltip> <extendedTooltip>
<name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name> <name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name>
@@ -1038,6 +1039,110 @@
<currentRowUse>Auto</currentRowUse> <currentRowUse>Auto</currentRowUse>
</extInfo> </extInfo>
</items> </items>
<items xsi:type="form:FormGroup">
<name>ГруппаНетПравНаВход</name>
<id>440</id>
<items xsi:type="form:Decoration">
<name>НетПравНаВходКартинка</name>
<id>442</id>
<title>
<key>ru</key>
<value>Нет прав на вход картинка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НетПравНаВходКартинкаРасширеннаяПодсказка</name>
<id>444</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НетПравНаВходКартинкаКонтекстноеМеню</name>
<id>443</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Предупреждение</picture>
</picture>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>НетПравНаВходНадпись</name>
<id>445</id>
<title>
<key>ru</key>
<value>Нет прав для входа</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<toolTip>
<key>ru</key>
<value>Пользователю не назначены минимальные права для работы в программе</value>
</toolTip>
<extendedTooltip>
<name>НетПравНаВходНадписьРасширеннаяПодсказка</name>
<id>447</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НетПравНаВходНадписьКонтекстноеМеню</name>
<id>446</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Нет прав на вход</value>
</title>
<extendedTooltip>
<name>ГруппаНетПравНаВходРасширеннаяПодсказка</name>
<id>441</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup"> <items xsi:type="form:FormGroup">
<name>ГруппаИзменитьОграничение</name> <name>ГруппаИзменитьОграничение</name>
<id>331</id> <id>331</id>
@@ -3217,6 +3322,7 @@
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea> <placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu> <representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items> </items>
<items xsi:type="form:Button"> <items xsi:type="form:Button">
<name>ФормаОчиститьФотографию</name> <name>ФормаОчиститьФотографию</name>
@@ -965,17 +965,19 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение)); #Если Не ВебКлиент Тогда
Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение));
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением.'")); Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда
Возврат; ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением.'"));
КонецЕсли; Возврат;
КонецЕсли;
Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением меньше 2 Мб.'"));
Возврат;
КонецЕсли;
#КонецЕсли
Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением меньше 2 Мб.'"));
Возврат;
КонецЕсли;
Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда
УдалитьИзВременногоХранилища(АдресФотографии); УдалитьИзВременногоХранилища(АдресФотографии);
КонецЕсли; КонецЕсли;
@@ -2535,10 +2537,14 @@
Если Форма.ВходВПрограммуРазрешен Тогда Если Форма.ВходВПрограммуРазрешен Тогда
Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав; Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав
И Форма.НаличиеПрав.НедостаточноПравДляЗапуска;
Элементы.ГруппаНетПравНаВход.Видимость = Не Форма.НаличиеПрав.НетПрав
И Не Форма.НаличиеПрав.НедостаточноПравДляЗапуска
И Форма.НаличиеПрав.НедостаточноПравДляВхода; И Форма.НаличиеПрав.НедостаточноПравДляВхода;
Иначе Иначе
Элементы.ГруппаНетПрав.Видимость = Ложь; Элементы.ГруппаНетПрав.Видимость = Ложь;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь; Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь;
Элементы.ГруппаНетПравНаВход.Видимость = Ложь;
КонецЕсли; КонецЕсли;
// Настройка возможности изменения. // Настройка возможности изменения.
@@ -671,6 +671,10 @@
<userVisible> <userVisible>
<common>true</common> <common>true</common>
</userVisible> </userVisible>
<title>
<key>ru</key>
<value>Группа расписание</value>
</title>
<extendedTooltip> <extendedTooltip>
<name>ГруппаРасписаниеРасширеннаяПодсказка</name> <name>ГруппаРасписаниеРасширеннаяПодсказка</name>
<id>157</id> <id>157</id>
@@ -14,7 +14,9 @@
УстановитьУсловноеОформление(); УстановитьУсловноеОформление();
РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета); РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета);
Элементы.ФормаВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Ложь);
Элементы.ФормаВыполнитьПроверку.Видимость = ЭтоПолноправныйПользователь;
Элементы.ФормаВыполнитьВсеПроверки.Видимость = ЭтоПолноправныйПользователь;
Элементы.СписокКонтекстноеМенюВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; Элементы.СписокКонтекстноеМенюВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета;
Элементы.ФормаВосстановитьПоНачальномуЗаполнению.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; Элементы.ФормаВосстановитьПоНачальномуЗаполнению.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета;
@@ -24,7 +24,7 @@
УстановитьПутьДоПроцедурыОбработчика(ЭтотОбъект, МетаданныеТекущейПроверки); УстановитьПутьДоПроцедурыОбработчика(ЭтотОбъект, МетаданныеТекущейПроверки);
РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета); РазрешеноНастраиватьПравилаПроверкиУчета = ПравоДоступа("Изменение", Метаданные.Справочники.ПравилаПроверкиУчета);
Элементы.ФормаВыполнитьПроверку.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; Элементы.ФормаВыполнитьПроверку.Видимость = Пользователи.ЭтоПолноправныйПользователь(, Ложь);
Элементы.ФормаУстановитьСтандартныеНастройки.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета; Элементы.ФормаУстановитьСтандартныеНастройки.Видимость = РазрешеноНастраиватьПравилаПроверкиУчета;
УстановитьНачальныеНастройкиРасписания(); УстановитьНачальныеНастройкиРасписания();
@@ -32,7 +32,7 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ВызватьИсключение НСтр("ru = 'Не заполнено поле ""Отчет""'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1"".'"), "Отчет");
КонецПроцедуры КонецПроцедуры
@@ -26,10 +26,9 @@
Процедура ПроверитьЗаполнениеПредопределенного(Отказ) Процедура ПроверитьЗаполнениеПредопределенного(Отказ)
Если ПометкаУдаления Тогда Если ПометкаУдаления Тогда
Возврат; Возврат;
ИначеЕсли Не ЗначениеЗаполнено(Отчет) Тогда КонецЕсли;
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), "Отчет"); Если Не ЗначениеЗаполнено(Отчет) Тогда
Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1"".'"), "Отчет");
Возврат;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -127,28 +127,6 @@
Настройка.НетВLinux = Истина; Настройка.НетВLinux = Истина;
Настройка.НетВMacOS = Истина; Настройка.НетВMacOS = Истина;
// Microsoft Strong Cryptographic Provider
Настройка = Настройки.Добавить();
Настройка.Представление = НСтр("ru = 'Microsoft Strong CSP'");
Настройка.ИмяПрограммы = "Microsoft Strong Cryptographic Provider";
Настройка.ТипПрограммы = 1;
Настройка.АлгоритмПодписи = "RSA_SIGN"; // Один вариант.
Настройка.АлгоритмХеширования = "MD5"; // Варианты: SHA-1, MD2, MD4, MD5.
Настройка.АлгоритмШифрования = "RC2"; // Варианты: RC2, RC4, DES, 3DES.
Настройка.Идентификатор = "MicrosoftStrong";
Настройка.АлгоритмыПодписи.Добавить("RSA_SIGN");
Настройка.АлгоритмыХеширования.Добавить("SHA-1");
Настройка.АлгоритмыХеширования.Добавить("MD2");
Настройка.АлгоритмыХеширования.Добавить("MD4");
Настройка.АлгоритмыХеширования.Добавить("MD5");
Настройка.АлгоритмыШифрования.Добавить("RC2");
Настройка.АлгоритмыШифрования.Добавить("RC4");
Настройка.АлгоритмыШифрования.Добавить("DES");
Настройка.АлгоритмыШифрования.Добавить("3DES");
Настройка.НетВLinux = Истина;
Настройка.НетВMacOS = Истина;
КонецПроцедуры КонецПроцедуры
Функция ПоставляемыеПутиКМодулямПрограмм() Экспорт Функция ПоставляемыеПутиКМодулямПрограмм() Экспорт
@@ -2816,6 +2816,10 @@
КонецЕсли; КонецЕсли;
Элементы.ПаролиШифрование.Видимость = Истина; Элементы.ПаролиШифрование.Видимость = Истина;
Элементы.ГруппаПарольАрхива.Видимость = Ложь; Элементы.ГруппаПарольАрхива.Видимость = Ложь;
Элементы.ПаролиШифрование.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Элементы.ПаролиШифрование.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Установка и настройка паролей и шифрования.
|При рассылке отчетов по электронной почте необходимо учитывать,
|что некоторые почтовые сервера могут не принимать зашифрованные файлы.'");
Иначе Иначе
Элементы["ГруппаСертификатДляШифрования"].Видимость = ?(Форма.Объект.Личная, Истина, Ложь); Элементы["ГруппаСертификатДляШифрования"].Видимость = ?(Форма.Объект.Личная, Истина, Ложь);
Элементы.ГруппаПарольАрхива.Видимость = Истина; Элементы.ГруппаПарольАрхива.Видимость = Истина;
@@ -2827,6 +2831,8 @@
Элементы.ПаролиШифрование.Видимость = Истина; Элементы.ПаролиШифрование.Видимость = Истина;
Элементы.ГруппаПарольАрхива.Видимость = Ложь; Элементы.ГруппаПарольАрхива.Видимость = Ложь;
Элементы.ПаролиШифрование.Доступность = Объект.Архивировать; Элементы.ПаролиШифрование.Доступность = Объект.Архивировать;
Элементы.ПаролиШифрование.ОтображениеПодсказки = ОтображениеПодсказки.Авто;
Элементы.ПаролиШифрование.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Установка и настройка паролей.'");
Иначе Иначе
Элементы.ГруппаПарольАрхива.Видимость = Истина; Элементы.ГруппаПарольАрхива.Видимость = Истина;
Элементы.ПаролиШифрование.Видимость = Ложь; Элементы.ПаролиШифрование.Видимость = Ложь;
@@ -3162,15 +3168,11 @@
КонецЦикла; КонецЦикла;
Расписание.Месяцы = ВсеМесяцы; Расписание.Месяцы = ВсеМесяцы;
Если Вариант = 1 Тогда // "Каждый день" Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; // "Каждый день"
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; Если Вариант = 2 Тогда // "Каждый второй день"
ИначеЕсли Вариант = 2 Тогда // "Каждый второй день"
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
Расписание.ПериодПовтораДней = 2; Расписание.ПериодПовтораДней = 2;
ИначеЕсли Вариант = 3 Тогда // "Каждый четвертый день" ИначеЕсли Вариант = 3 Тогда // "Каждый четвертый день"
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
Расписание.ПериодПовтораДней = 4; Расписание.ПериодПовтораДней = 4;
ИначеЕсли Вариант = 4 Тогда // "По будням" ИначеЕсли Вариант = 4 Тогда // "По будням"
@@ -3220,10 +3222,6 @@
ИначеЕсли Вариант = 12 Тогда // "Другое..." ИначеЕсли Вариант = 12 Тогда // "Другое..."
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное; Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное;
Иначе
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
КонецЕсли; КонецЕсли;
// по дням недели // по дням недели
@@ -3802,6 +3800,9 @@
Элемент.Ширина = 70; Элемент.Ширина = 70;
Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_СертификатДляШифрованияПриИзменении"); Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_СертификатДляШифрованияПриИзменении");
Элемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Элемент.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'При рассылке отчетов по электронной почте необходимо учитывать,
|что некоторые почтовые сервера могут не принимать зашифрованные файлы.'");
КонецПроцедуры КонецПроцедуры
@@ -248,7 +248,7 @@
ПолучателиМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторОбъектаМетаданных, Ложь); ПолучателиМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторОбъектаМетаданных, Ложь);
Если ПолучателиМетаданные = Неопределено Тогда Если ПолучателиМетаданные = Неопределено Или ПолучателиМетаданные = Null Тогда
Возврат КоличествоПолучателей; Возврат КоличествоПолучателей;
КонецЕсли; КонецЕсли;
@@ -250,7 +250,7 @@
</dataPath> </dataPath>
<toolTip> <toolTip>
<key>ru</key> <key>ru</key>
<value>Используется с объектами адресации</value> <value>Используется без объектов адресации</value>
</toolTip> </toolTip>
<extendedTooltip> <extendedTooltip>
<name>ИспользуетсяБезОбъектовАдресацииExtendedTooltip</name> <name>ИспользуетсяБезОбъектовАдресацииExtendedTooltip</name>
@@ -159,11 +159,8 @@
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Проверка", "", ""); МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Проверка", "", "");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат); МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
ИначеЕсли ЭтоВстроенныйКриптопровайдер Тогда ИначеЕсли ЭтоВстроенныйКриптопровайдер
Элементы.ГруппаВводаПароля.Видимость = Ложь; Или (Не СтандартныеПроверки И Не ВводитьПароль) Тогда
ИначеЕсли Не СтандартныеПроверки
И Не ВводитьПароль Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь; Элементы.ГруппаВводаПароля.Видимость = Ложь;
КонецЕсли; КонецЕсли;
@@ -837,7 +837,7 @@
<usePurposes>MobileDevice</usePurposes> <usePurposes>MobileDevice</usePurposes>
</forms> </forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9"> <templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_2_23</name> <name>КомпонентаExtraCryptoAPI_3_0_2_24</name>
<synonym> <synonym>
<key>ru</key> <key>ru</key>
<value>Компонента ExtraCryptoAPI</value> <value>Компонента ExtraCryptoAPI</value>
@@ -38,16 +38,9 @@
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Не СтандартнаяОбработка Тогда Если Не СтандартнаяОбработка
// Обрабатывается в другом месте. Или Не Параметры.Свойство("РазрешитьДанныеКлассификатора")
Возврат; Или Не Параметры.РазрешитьДанныеКлассификатора Тогда
ИначеЕсли Не Параметры.Свойство("РазрешитьДанныеКлассификатора") Тогда
// Поведение по умолчанию, подбор только справочника.
Возврат;
ИначеЕсли Истина <> Параметры.РазрешитьДанныеКлассификатора Тогда
// Подбор классификатора отключен, поведение по умолчанию.
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -84,11 +84,7 @@
ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
Если Параметры.Свойство("Ключ") Тогда ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
Иначе
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
КонецЕсли;
ИначеЕсли ВидФормы = "ФормаВыбора" Тогда ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
@@ -383,28 +383,17 @@
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда
Элементы.КнопкаВперед.Доступность = ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПустаяСсылка"); Элементы.КнопкаВперед.Доступность = ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПустаяСсылка");
Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаСоставной; Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаСоставной;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтроках; Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтроках;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВКолонках; Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВКолонках;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтрокахИКолонках; Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтрокахИКолонках;
Иначе Иначе
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаПустая; Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаПустая;
КонецЕсли; КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВопросы Тогда ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВопросы Тогда
@@ -415,27 +404,16 @@
КонецЕсли; КонецЕсли;
Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 0); Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 0);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках")
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда Или ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1); Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() = 3); Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() = 3);
КонецЕсли; КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда
Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка); Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -168,23 +168,21 @@
СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка); СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка);
СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Вопрос") Тогда Если (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Вопрос")
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Или (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Корень") Тогда
ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Корень") Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Раздел") Тогда ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Раздел") Тогда
Если СтрокаПеретаскивание.ВопросШаблона = СтрокаНазначение.ВопросШаблона Тогда Если СтрокаПеретаскивание.ВопросШаблона = СтрокаНазначение.ВопросШаблона Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Родитель = СтрокаНазначение.ПолучитьРодителя(); Родитель = СтрокаНазначение.ПолучитьРодителя();
Пока Родитель.ТипСтроки <> "Корень" Цикл Пока Родитель.ТипСтроки <> "Корень" Цикл
Если Родитель = СтрокаПеретаскивание Тогда Если Родитель = СтрокаПеретаскивание Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат; Возврат;
Иначе КонецЕсли;
Родитель = Родитель.ПолучитьРодителя(); Родитель = Родитель.ПолучитьРодителя();
КонецЕсли;
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
@@ -276,7 +276,6 @@
КонецПроцедуры КонецПроцедуры
// Управляет видимостью страниц и элементов формы.
&НаКлиенте &НаКлиенте
Процедура УправлениеВидимостью() Процедура УправлениеВидимостью()
@@ -291,42 +290,25 @@
ДоступностьНеобходимостьПояснениеКомментария(); ДоступностьНеобходимостьПояснениеКомментария();
Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Строка") Тогда Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Строка") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаСтрока; Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаСтрока;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаЧисло; Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаЧисло;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы") Тогда ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")
ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.ВариантыОтветов; Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.ВариантыОтветов;
ДоступностьТаблицыВариантыОтветов(ЭтотОбъект); ДоступностьТаблицыВариантыОтветов(ЭтотОбъект);
Иначе Иначе
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая;
КонецЕсли; КонецЕсли;
Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяОтображать; Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяОтображать;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево") Тогда ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево") Тогда
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидОтображенияБулевоОтображать; Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидОтображенияБулевоОтображать;
Иначе Иначе
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяНеОтображать; Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяНеОтображать;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -83,45 +83,17 @@
// Устанавливает тип значения ПВХ в зависимости от типа ответа. // Устанавливает тип значения ПВХ в зависимости от типа ответа.
Процедура УстановкаТипаПВХ() Процедура УстановкаТипаПВХ()
ТипыОтветовНаВопрос = Перечисления.ТипыОтветовНаВопрос; Если ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Или ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ТипЗначения = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(Длина));
// Квалификаторы ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Число Тогда
КЧ = Новый КвалификаторыЧисла(?(Длина = 0,15,Длина),Точность); ТипЗначения = Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(?(Длина = 0, 15, Длина), Точность));
КС = Новый КвалификаторыСтроки(Длина); ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Дата Тогда
КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); ТипЗначения = Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата));
ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда
// Описание типов ТипЗначения = Новый ОписаниеТипов("Булево");
ОписаниеТиповЧисло = Новый ОписаниеТипов("Число",,КЧ); ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз
ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка", , КС); ИЛИ ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ОписаниеТиповДата = Новый ОписаниеТипов("Дата",КД , , ); ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет");
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
ОписаниеТиповВО = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет");
Если ТипОтвета = ТипыОтветовНаВопрос.Строка Тогда
ТипЗначения = ОписаниеТиповСтрока;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Текст Тогда
ТипЗначения = ОписаниеТиповСтрока;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Число Тогда
ТипЗначения = ОписаниеТиповЧисло;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Дата Тогда
ТипЗначения = ОписаниеТиповДата;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Булево Тогда
ТипЗначения = ОписаниеТиповБулево;
ИначеЕсли ТипОтвета =ТипыОтветовНаВопрос.ОдинВариантИз
ИЛИ ТипОтвета = ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ТипЗначения = ОписаниеТиповВО;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -1977,17 +1977,8 @@
Элементы.УточнениеНаборовКомментарий.Гиперссылка = Истина; Элементы.УточнениеНаборовКомментарий.Гиперссылка = Истина;
Элементы.УточнениеНаборовИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка); Элементы.УточнениеНаборовИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка);
Элементы.УточнениеНаборовИзменить.Видимость = СписокНаборов.Количество() >= 2 И ЗначениеЗаполнено(ТекущийНаборСвойств);
Если СписокНаборов.Количество() < 2 Тогда
Элементы.УточнениеНаборовИзменить.Видимость = Ложь;
ИначеЕсли ЗначениеЗаполнено(ТекущийНаборСвойств) Тогда
Элементы.УточнениеНаборовИзменить.Видимость = Истина;
Иначе
Элементы.УточнениеНаборовИзменить.Видимость = Ложь;
КонецЕсли;
Если СписокНаборов.Количество() = 0 Тогда Если СписокНаборов.Количество() = 0 Тогда
Элементы.УточнениеНаборовКомментарий.Гиперссылка = Ложь; Элементы.УточнениеНаборовКомментарий.Гиперссылка = Ложь;
Элементы.УточнениеНаборовИзменить.Видимость = Ложь; Элементы.УточнениеНаборовИзменить.Видимость = Ложь;
@@ -2177,9 +2168,15 @@
|Список значений этого сведения будет общим с исходным сведением. |Список значений этого сведения будет общим с исходным сведением.
|С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений. |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений.
|При этом можно отредактировать наименование и ряд других свойств сведения.'"); |При этом можно отредактировать наименование и ряд других свойств сведения.'");
СоздатьКопированием = НСтр("ru = 'Сделать копию сведения Если РеквизитСоСпискомДополнительныхЗначений Тогда
| СоздатьКопированием = НСтр("ru = 'Сделать копию сведения
|Будет создана копия сведения%1'"); |
|Будет создана копия сведения и всех его значений.'")
Иначе
СоздатьКопированием = НСтр("ru = 'Сделать копию сведения
|
|Будет создана копия сведения.'");
КонецЕсли;
Иначе Иначе
ДобавитьОбщий = НСтр("ru = 'Добавить реквизит как есть (рекомендуется) ДобавитьОбщий = НСтр("ru = 'Добавить реквизит как есть (рекомендуется)
| |
@@ -2189,21 +2186,20 @@
|Список значений этого реквизита будет общим с исходным реквизитом. |Список значений этого реквизита будет общим с исходным реквизитом.
|С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. |С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов.
|При этом можно отредактировать наименование и ряд других свойств реквизита.'"); |При этом можно отредактировать наименование и ряд других свойств реквизита.'");
СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита Если РеквизитСоСпискомДополнительныхЗначений Тогда
| СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита
|Будет создана копия реквизита%1'"); |
|Будет создана копия реквизита и всех его значений.'");
Иначе
СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита
|
|Будет создана копия реквизита.'");
КонецЕсли;
КонецЕсли; КонецЕсли;
СписокВыбора = Элементы.РежимДобавленияРеквизита.СписокВыбора; СписокВыбора = Элементы.РежимДобавленияРеквизита.СписокВыбора;
СписокВыбора.Очистить(); СписокВыбора.Очистить();
Если РеквизитСоСпискомДополнительныхЗначений Тогда
ШаблонВставки = " " + НСтр("ru = 'и всех его значений.'");
Иначе
ШаблонВставки = ".";
КонецЕсли;
СоздатьКопированием = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СоздатьКопированием, ШаблонВставки);
СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий); СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий);
Если РеквизитСоСпискомДополнительныхЗначений Тогда Если РеквизитСоСпискомДополнительныхЗначений Тогда
СписокВыбора.Добавить("СоздатьПоОбразцу", СделатьПоОбразцу); СписокВыбора.Добавить("СоздатьПоОбразцу", СделатьПоОбразцу);
@@ -82,10 +82,6 @@
<metadata>InformationRegister.ЗамерыВремени</metadata> <metadata>InformationRegister.ЗамерыВремени</metadata>
<use>DontUse</use> <use>DontUse</use>
</content> </content>
<content>
<metadata>ScheduledJob.ПолучениеСубъектовДляСкрытияПерсональныхДанных</metadata>
<use>DontUse</use>
</content>
<content> <content>
<metadata>Constant.НастройкаПроксиСервера</metadata> <metadata>Constant.НастройкаПроксиСервера</metadata>
<use>DontUse</use> <use>DontUse</use>
@@ -178,10 +174,6 @@
<metadata>Constant.АдресДляВосстановленияПароляУчетнойЗаписи</metadata> <metadata>Constant.АдресДляВосстановленияПароляУчетнойЗаписи</metadata>
<use>DontUse</use> <use>DontUse</use>
</content> </content>
<content>
<metadata>ScheduledJob.СкрытиеПерсональныхДанныхСубъектов</metadata>
<use>DontUse</use>
</content>
<content> <content>
<metadata>Catalog.ИдентификаторыОбъектовМетаданных</metadata> <metadata>Catalog.ИдентификаторыОбъектовМетаданных</metadata>
<use>DontUse</use> <use>DontUse</use>
@@ -614,6 +606,10 @@
<metadata>ScheduledJob.ЗагрузкаКурсовВалют</metadata> <metadata>ScheduledJob.ЗагрузкаКурсовВалют</metadata>
<use>DontUse</use> <use>DontUse</use>
</content> </content>
<content>
<metadata>ScheduledJob.РасчетСроковХраненияПерсональныхДанных</metadata>
<use>DontUse</use>
</content>
<content> <content>
<metadata>InformationRegister.БуферОперацийСтатистики</metadata> <metadata>InformationRegister.БуферОперацийСтатистики</metadata>
<use>DontUse</use> <use>DontUse</use>
@@ -1,43 +0,0 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыВопроса = ЗащитаПерсональныхДанныхВызовСервера.ПараметрыВопросаПодтвержденияСкрытия(ПараметрКоманды);
Субъекты = ПараметрыВопроса.Субъекты;
Если Субъекты.Количество() > 0 Тогда
Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, Субъекты);
ПоказатьВопрос(Оповещение, ПараметрыВопроса.ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОбработкаКомандыЗавершение(Результат, Субъекты) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ЗащитаПерсональныхДанныхВызовСервера.СкрытьПерсональныеДанныеСубъектов(Субъекты, Истина);
Оповестить("СкрытыПерсональныеДанные");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonCommand xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6c66ff27-19af-4728-95a8-463fd1c4dcd3">
<name>СкрытьПерсональныеДанныеСубъектов</name>
<synonym>
<key>ru</key>
<value>Скрыть ПДн</value>
</synonym>
<group>FormCommandBarImportant</group>
<commandParameterType>
<types>DefinedType.СубъектПерсональныхДанных</types>
</commandParameterType>
<parameterUseMode>Multiple</parameterUseMode>
<representation>Auto</representation>
<toolTip>
<key>ru</key>
<value>Скрыть персональные данные субъектов</value>
</toolTip>
</mdclass:CommonCommand>
@@ -150,7 +150,7 @@
Если ЛокализуемыеРеквизитыВШапке[Параметры.ИмяРеквизита] <> Неопределено Тогда Если ЛокализуемыеРеквизитыВШапке[Параметры.ИмяРеквизита] <> Неопределено Тогда
ОписаниеЯзыка = ОписаниеЯзыка(ОсновнойЯзык); ОписаниеЯзыка = ОписаниеЯзыка(ОсновнойЯзык);
Если ЗначениеЗаполнено(СуффиксОсновногоЯзыка) Тогда Если ЗначениеЗаполнено(СуффиксОсновногоЯзыка) И Параметры.Объект <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка];
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -167,7 +167,7 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка];
Иначе ИначеЕсли Параметры.Объект <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка];
КонецЕсли; КонецЕсли;
@@ -177,7 +177,7 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1];
Иначе ИначеЕсли Параметры.Объект <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1];
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -188,7 +188,7 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2];
Иначе ИначеЕсли Параметры.Объект <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2]; ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2];
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -234,9 +234,9 @@
Для каждого Язык Из Языки Цикл Для каждого Язык Из Языки Цикл
Если СтрСравнить(Язык.КодЯзыка, ТекущийКодЯзыка) = 0 Тогда Если СтрСравнить(Язык.КодЯзыка, ТекущийКодЯзыка) = 0
Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]); Или (СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) = 0
ИначеЕсли СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) = 0 И Не Результат.Свойство("СтрокаНаТекущемЯзыке") Тогда И Не Результат.Свойство("СтрокаНаТекущемЯзыке")) Тогда
Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]); Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]);
КонецЕсли; КонецЕсли;
@@ -5,11 +5,11 @@
<value>Регистрация событий доступа к персональным данным</value> <value>Регистрация событий доступа к персональным данным</value>
</title> </title>
<items xsi:type="form:Table"> <items xsi:type="form:Table">
<name>ОбластиПерсональныхДанных</name> <name>КатегорииПерсональныхДанных</name>
<id>7</id> <id>7</id>
<title> <title>
<key>ru</key> <key>ru</key>
<value>Области персональных данных</value> <value>Категории персональных данных</value>
</title> </title>
<visible>true</visible> <visible>true</visible>
<enabled>true</enabled> <enabled>true</enabled>
@@ -17,20 +17,20 @@
<common>true</common> <common>true</common>
</userVisible> </userVisible>
<dataPath xsi:type="form:DataPath"> <dataPath xsi:type="form:DataPath">
<segments>ОбластиПерсональныхДанных</segments> <segments>КатегорииПерсональныхДанных</segments>
</dataPath> </dataPath>
<titleLocation>None</titleLocation> <titleLocation>None</titleLocation>
<autoCommandBar> <autoCommandBar>
<name>ОбластиПерсональныхДанныхКоманднаяПанель</name> <name>КатегорииПерсональныхДанныхКоманднаяПанель</name>
<id>9</id> <id>9</id>
<horizontalAlign>Left</horizontalAlign> <horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</autoCommandBar> </autoCommandBar>
<searchStringAddition> <searchStringAddition>
<name>ОбластиПерсональныхДанныхSearchString</name> <name>КатегорииПерсональныхДанныхСтрокаПоиска</name>
<id>13</id> <id>13</id>
<extendedTooltip> <extendedTooltip>
<name>ОбластиПерсональныхДанныхSearchStringExtendedTooltip</name> <name>КатегорииПерсональныхДанныхСтрокаПоискаРасширеннаяПодсказка</name>
<id>15</id> <id>15</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
@@ -40,20 +40,20 @@
</extInfo> </extInfo>
</extendedTooltip> </extendedTooltip>
<contextMenu> <contextMenu>
<name>ОбластиПерсональныхДанныхSearchStringContextMenu</name> <name>КатегорииПерсональныхДанныхСтрокаПоискаКонтекстноеМеню</name>
<id>14</id> <id>14</id>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<source>ОбластиПерсональныхДанных</source> <source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo"> <extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
</extInfo> </extInfo>
</searchStringAddition> </searchStringAddition>
<viewStatusAddition> <viewStatusAddition>
<name>ОбластиПерсональныхДанныхViewStatus</name> <name>КатегорииПерсональныхДанныхСостояниеПросмотра</name>
<id>16</id> <id>16</id>
<extendedTooltip> <extendedTooltip>
<name>ОбластиПерсональныхДанныхViewStatusExtendedTooltip</name> <name>КатегорииПерсональныхДанныхСостояниеПросмотраРасширеннаяПодсказка</name>
<id>18</id> <id>18</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
@@ -63,21 +63,21 @@
</extInfo> </extInfo>
</extendedTooltip> </extendedTooltip>
<contextMenu> <contextMenu>
<name>ОбластиПерсональныхДанныхViewStatusContextMenu</name> <name>КатегорииПерсональныхДанныхСостояниеПросмотраКонтекстноеМеню</name>
<id>17</id> <id>17</id>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>ViewStatusAddition</type> <type>ViewStatusAddition</type>
<source>ОбластиПерсональныхДанных</source> <source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo"> <extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
</extInfo> </extInfo>
</viewStatusAddition> </viewStatusAddition>
<searchControlAddition> <searchControlAddition>
<name>ОбластиПерсональныхДанныхSearchControl</name> <name>КатегорииПерсональныхДанныхУправлениеПоиском</name>
<id>19</id> <id>19</id>
<extendedTooltip> <extendedTooltip>
<name>ОбластиПерсональныхДанныхSearchControlExtendedTooltip</name> <name>КатегорииПерсональныхДанныхУправлениеПоискомРасширеннаяПодсказка</name>
<id>21</id> <id>21</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
@@ -87,18 +87,18 @@
</extInfo> </extInfo>
</extendedTooltip> </extendedTooltip>
<contextMenu> <contextMenu>
<name>ОбластиПерсональныхДанныхSearchControlContextMenu</name> <name>КатегорииПерсональныхДанныхУправлениеПоискомКонтекстноеМеню</name>
<id>20</id> <id>20</id>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>SearchControlAddition</type> <type>SearchControlAddition</type>
<source>ОбластиПерсональныхДанных</source> <source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo"> <extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
</extInfo> </extInfo>
</searchControlAddition> </searchControlAddition>
<extendedTooltip> <extendedTooltip>
<name>ОбластиПерсональныхДанныхExtendedTooltip</name> <name>КатегорииПерсональныхДанныхРасширеннаяПодсказка</name>
<id>11</id> <id>11</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
@@ -108,7 +108,7 @@
</extInfo> </extInfo>
</extendedTooltip> </extendedTooltip>
<contextMenu> <contextMenu>
<name>ОбластиПерсональныхДанныхКонтекстноеМеню</name> <name>КатегорииПерсональныхДанныхКонтекстноеМеню</name>
<id>8</id> <id>8</id>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
@@ -223,10 +223,10 @@
<showTitle>auto</showTitle> <showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton> <showCloseButton>true</showCloseButton>
<attributes> <attributes>
<name>ОбластиПерсональныхДанных</name> <name>КатегорииПерсональныхДанных</name>
<title> <title>
<key>ru</key> <key>ru</key>
<value>Области персональных данных</value> <value>Категории персональных данных</value>
</title> </title>
<id>1</id> <id>1</id>
<valueType> <valueType>
@@ -29,6 +29,25 @@
#КонецОбласти #КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыКатегорииПерсональныхДанных
&НаКлиенте
Процедура Подключаемый_ПриИзмененииКатегорииПерсональныхДанныхИспользование(Элемент)
ДанныеТекущейСтроки = ЭтотОбъект.КатегорииПерсональныхДанных.НайтиПоИдентификатору(
Элементы.КатегорииПерсональныхДанных.ТекущаяСтрока);
ПодчиненныеСтроки = ДанныеТекущейСтроки.ПолучитьЭлементы();
Если ПодчиненныеСтроки.Количество() > 0 Тогда
Для Каждого СтрокаДерева Из ПодчиненныеСтроки Цикл
СтрокаДерева.Использование = ДанныеТекущейСтроки.Использование;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы #Область ОбработчикиКомандФормы
&НаКлиенте &НаКлиенте
@@ -1112,12 +1112,9 @@
ОбновитьЗначение(ОписаниеПрограммы.УстановленаНаСервере, ""); ОбновитьЗначение(ОписаниеПрограммы.УстановленаНаСервере, "");
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст); ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
Возврат; Возврат;
ИначеЕсли ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда ИначеЕсли ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Доступен.'")); Или ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ОписаниеПрограммы.ТипРазмещения) = "ОблачнаяПодпись" Тогда
ОбновитьЗначение(ОписаниеПрограммы.Установлена, Истина);
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
Возврат;
ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ОписаниеПрограммы.ТипРазмещения) = "ОблачнаяПодпись" Тогда
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Доступен.'")); ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(ОписаниеПрограммы.Установлена, Истина); ОбновитьЗначение(ОписаниеПрограммы.Установлена, Истина);
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст); ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
@@ -1491,10 +1488,7 @@
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'")); ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина); ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(СтрокаВыборки.ТипРазмещения) = "ОблачнаяПодпись" ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(СтрокаВыборки.ТипРазмещения) = "ОблачнаяПодпись"
И Не Строка.ПометкаУдаления Тогда И Не Строка.ПометкаУдаления Или СтрокаВыборки.ТипРазмещения = 5 Тогда
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли СтрокаВыборки.ТипРазмещения = 5 Тогда
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'")); ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина); ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли Строка.ТипРазмещения = 1 И (Настройки.ПроверятьЭлектронныеПодписиНаСервере Или Настройки.СоздаватьЭлектронныеПодписиНаСервере) Тогда ИначеЕсли Строка.ТипРазмещения = 1 И (Настройки.ПроверятьЭлектронныеПодписиНаСервере Или Настройки.СоздаватьЭлектронныеПодписиНаСервере) Тогда
@@ -94,13 +94,9 @@
НСтр("ru = 'Не выполнены дополнительные процедуры обработки данных'"); НСтр("ru = 'Не выполнены дополнительные процедуры обработки данных'");
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(ВремяНачалаОбновления) И Не ЗначениеЗаполнено(ВремяОкончанияОбновления) Тогда Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость =
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Ложь; (Пользователи.ЭтоПолноправныйПользователь() И Не ОбщегоНазначения.РазделениеВключено())
ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() И Не ОбщегоНазначения.РазделениеВключено() Тогда И (ЗначениеЗаполнено(ВремяНачалаОбновления) Или ЗначениеЗаполнено(ВремяОкончанияОбновления));
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Истина;
Иначе
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Ложь;
КонецЕсли;
КлиентСервернаяБаза = Не ОбщегоНазначения.ИнформационнаяБазаФайловая(); КлиентСервернаяБаза = Не ОбщегоНазначения.ИнформационнаяБазаФайловая();
@@ -852,10 +852,6 @@
<key>ru</key> <key>ru</key>
<value>Страница сообщение не отправлено</value> <value>Страница сообщение не отправлено</value>
</title> </title>
<toolTip>
<key>ru</key>
<value>Страница сообщение отправлено</value>
</toolTip>
<extendedTooltip> <extendedTooltip>
<name>СтраницаСообщениеНеОтправленоРасширеннаяПодсказка</name> <name>СтраницаСообщениеНеОтправленоРасширеннаяПодсказка</name>
<id>102</id> <id>102</id>
@@ -347,9 +347,9 @@
НаименованиеВложения = Элемент.ТекущиеДанные[Элемент.ТекущийЭлемент.Имя]; НаименованиеВложения = Элемент.ТекущиеДанные[Элемент.ТекущийЭлемент.Имя];
Для Каждого Вложение Из Вложения Цикл Для Позиция = -Вложения.Количество() + 1 По 0 Цикл
Если Вложение.Представление = НаименованиеВложения Тогда Если Вложения.Получить(-Позиция).Представление = НаименованиеВложения Тогда
Вложения.Удалить(Вложение); Вложения.Удалить(-Позиция);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -428,10 +428,11 @@
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
СохранитьАдресОтвета(АдресОтвета, Ложь); СохранитьАдресОтвета(АдресОтвета, Ложь);
Для Каждого ЭлементаАдресОтвета Из Элементы.АдресОтвета.СписокВыбора Цикл Для Позиция = -Элементы.АдресОтвета.СписокВыбора.Количество() + 1 По 0 Цикл
ЭлементаАдресОтвета = Элементы.АдресОтвета.СписокВыбора.Получить(-Позиция);
Если ЭлементаАдресОтвета.Значение = АдресОтвета Если ЭлементаАдресОтвета.Значение = АдресОтвета
И ЭлементаАдресОтвета.Представление = АдресОтвета Тогда И ЭлементаАдресОтвета.Представление = АдресОтвета Тогда
Элементы.АдресОтвета.СписокВыбора.Удалить(ЭлементаАдресОтвета); Элементы.АдресОтвета.СписокВыбора.Удалить(-Позиция);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -866,10 +867,11 @@
СписокАдресовОтвета = Новый СписокЗначений(); СписокАдресовОтвета = Новый СписокЗначений();
КонецЕсли; КонецЕсли;
Для Каждого ЭлементАдресОтвета Из СписокАдресовОтвета Цикл Для Позиция = -СписокАдресовОтвета.Количество() + 1 По 0 Цикл
ЭлементАдресОтвета = СписокАдресовОтвета.Получить(-Позиция);
Если ЭлементАдресОтвета.Значение = АдресОтвета Если ЭлементАдресОтвета.Значение = АдресОтвета
И ЭлементАдресОтвета.Представление = АдресОтвета Тогда И ЭлементАдресОтвета.Представление = АдресОтвета Тогда
СписокАдресовОтвета.Удалить(ЭлементАдресОтвета); СписокАдресовОтвета.Удалить(-Позиция);
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -395,21 +395,19 @@
НастройкаПечатнойФормы = НастройкаТекущейПечатнойФормы(); НастройкаПечатнойФормы = НастройкаТекущейПечатнойФормы();
Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" Если (ИмяСобытия = "Запись_ПользовательскиеМакетыПечати"
И Источник.ВладелецФормы = ЭтотОбъект И Источник.ВладелецФормы = ЭтотОбъект
И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету Тогда И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету)
ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму",0.1, Истина); Или (ИмяСобытия = "Запись_ТабличныйДокумент"
ИначеЕсли (ИмяСобытия = "ОтказОтИзмененияМакета" И Источник.ВладелецФормы = ЭтотОбъект
Или ИмяСобытия = "ОтменаРедактированияТабличногоДокумента" И ЗначениеЗаполнено(Параметр.ИмяОбъектаМетаданныхМакета)
И СтрЗаканчиваетсяНа(НастройкаПечатнойФормы.ПутьКМакету, Параметр.ИмяОбъектаМетаданныхМакета)) Тогда
ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму", 0.1, Истина);
ИначеЕсли (ИмяСобытия = "ОтказОтИзмененияМакета" Или ИмяСобытия = "ОтменаРедактированияТабличногоДокумента"
И Источник.ВладелецФормы = ЭтотОбъект И Источник.ВладелецФормы = ЭтотОбъект
И ЗначениеЗаполнено(Параметр.ИмяОбъектаМетаданныхМакета) И ЗначениеЗаполнено(Параметр.ИмяОбъектаМетаданныхМакета)
И СтрЗаканчиваетсяНа(НастройкаПечатнойФормы.ПутьКМакету, Параметр.ИмяОбъектаМетаданныхМакета)) Тогда И СтрЗаканчиваетсяНа(НастройкаПечатнойФормы.ПутьКМакету, Параметр.ИмяОбъектаМетаданныхМакета)) Тогда
ОтобразитьСостояниеТекущейПечатнойФормы(); ОтобразитьСостояниеТекущейПечатнойФормы();
ИначеЕсли ИмяСобытия = "Запись_ТабличныйДокумент"
И Источник.ВладелецФормы = ЭтотОбъект
И ЗначениеЗаполнено(Параметр.ИмяОбъектаМетаданныхМакета)
И СтрЗаканчиваетсяНа(НастройкаПечатнойФормы.ПутьКМакету, Параметр.ИмяОбъектаМетаданныхМакета) Тогда
ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму",0.1, Истина);
КонецЕсли; КонецЕсли;
УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник); УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
@@ -737,6 +735,9 @@
Для каждого Параметр Из СтруктураПараметров Цикл Для каждого Параметр Из СтруктураПараметров Цикл
СтруктураПараметров.Вставить(Параметр.Ключ, ОбщегоНазначения.СкопироватьРекурсивно(Параметры[Параметр.Ключ])); СтруктураПараметров.Вставить(Параметр.Ключ, ОбщегоНазначения.СкопироватьРекурсивно(Параметры[Параметр.Ключ]));
КонецЦикла; КонецЦикла;
СтруктураПараметров.ПараметрыПечати.ДополнительныеПараметры.Вставить("ПодписьИПечать",
ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", "ПодписьИПечать", Ложь));
СтруктураПараметров.Вставить("ИменаМакетов", ИменаМакетов); СтруктураПараметров.Вставить("ИменаМакетов", ИменаМакетов);
@@ -180,13 +180,12 @@
ОповещениеПродолжениеВыбора = Новый ОписаниеОповещения("ОбработкаВыбораПродолжение", ЭтотОбъект, ПараметрыВыбора); ОповещениеПродолжениеВыбора = Новый ОписаниеОповещения("ОбработкаВыбораПродолжение", ЭтотОбъект, ПараметрыВыбора);
Оповещение = Новый ОписаниеОповещения("ПриЗавершенииФормированияПечатныхФорм", ЭтотОбъект, ОповещениеПродолжениеВыбора); Оповещение = Новый ОписаниеОповещения("ПриЗавершенииФормированияПечатныхФорм", ЭтотОбъект, ОповещениеПродолжениеВыбора);
Если ВыбранноеЗначение.Свойство("Присоединить") И ВыбранноеЗначение.ВариантСохранения = "Присоединить" И ВыбранноеЗначение.Подписать Тогда Если ТребуетсяПереформирование Тогда
ВыполнитьОбработкуОповещения(ОповещениеПродолжениеВыбора); НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение);
ИначеЕсли ТребуетсяПереформирование Тогда
НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение)
Иначе Иначе
ВыполнитьОбработкуОповещения(ОповещениеПродолжениеВыбора); ВыполнитьОбработкуОповещения(ОповещениеПродолжениеВыбора);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
@@ -750,19 +749,17 @@
ВыбранноеЗначение.Свойство("ВариантСохранения", ВариантСохранения); ВыбранноеЗначение.Свойство("ВариантСохранения", ВариантСохранения);
СписокВложений = Неопределено; СписокВложений = Неопределено;
Если ОбъединитьДокументы И ВариантСохранения <> "Присоединить" Тогда Если ОбъединитьДокументы И ВариантСохранения <> "Присоединить" Тогда
Вложение = Новый Структура("АдресВоВременномХранилище, Название, Печать, Представление, ОбъектПечати"); Вложение = ОписаниеФайла(СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы);
Вложение.АдресВоВременномХранилище = СтруктураЕдиногоДокумента.АдресПечатнойФормы; Вложение.АдресВоВременномХранилище = СтруктураЕдиногоДокумента.АдресПечатнойФормы;
Вложение.Название = СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы; Вложение.ОбъектПечати = ВыбранноеЗначение.ОбъектПечати;
Вложение.Печать = Истина;
Вложение.Представление = СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы;
Вложение.ОбъектПечати = ВыбранноеЗначение.ОбъектПечати;
СписокВложений = Новый Массив; СписокВложений = Новый Массив;
СписокВложений.Добавить(Вложение); СписокВложений.Добавить(Вложение);
КонецЕсли; КонецЕсли;
ВыбранноеЗначение.Вставить("СписокВложений", СписокВложений); ВыбранноеЗначение.Вставить("СписокВложений", СписокВложений);
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение,,Истина);
Если ВыбранноеЗначение.Подписать Тогда Если ВыбранноеЗначение.Подписать Тогда
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение,,Истина);
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда
Если ВыбранноеЗначение.ВариантСохранения = "Присоединить" Тогда Если ВыбранноеЗначение.ВариантСохранения = "Присоединить" Тогда
@@ -777,6 +774,8 @@
ПодписатьФайлы(ФайлыВоВременномХранилище, ПараметрыВыбора); ПодписатьФайлы(ФайлыВоВременномХранилище, ПараметрыВыбора);
Иначе Иначе
ПараметрыВыбора.ВыбранноеЗначение.Вставить("СписокВложений",
ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение));
ЗавершениеОбработкиВыбора(Истина, ПараметрыВыбора); ЗавершениеОбработкиВыбора(Истина, ПараметрыВыбора);
КонецЕсли; КонецЕсли;
@@ -830,9 +829,8 @@
&НаКлиенте &НаКлиенте
Процедура ЗавершениеОбработкиВыбора(Результат, ПараметрыВыбора) Экспорт Процедура ЗавершениеОбработкиВыбора(Результат, ПараметрыВыбора) Экспорт
Если Результат = Ложь Тогда Если Результат = Ложь
Возврат; Или (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Успех") И Не Результат.Успех) Тогда
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Успех") И Не Результат.Успех Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -848,8 +846,7 @@
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение); ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения); СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
Иначе Иначе
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение); СохранитьПечатныеФормыВКаталог(ВыбранноеЗначение.СписокВложений, ВыбранноеЗначение.ПапкаДляСохранения);
СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
КонецЕсли; КонецЕсли;
Иначе Иначе
@@ -1288,9 +1285,7 @@
ЗаписьZipФайла.Записать(); ЗаписьZipФайла.Записать();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
ОписаниеФайла = Новый Структура; ОписаниеФайла = ОписаниеФайла(АрхивОбъекта.Значение.Представление);
ОписаниеФайла.Вставить("Представление", АрхивОбъекта.Значение.Представление);
ОписаниеФайла.Вставить("ОбъектПечати", АрхивОбъекта.Ключ); ОписаниеФайла.Вставить("ОбъектПечати", АрхивОбъекта.Ключ);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
Результат.Добавить(ОписаниеФайла); Результат.Добавить(ОписаниеФайла);
@@ -1358,10 +1353,8 @@
ДвоичныеДанные.Записать(ПолноеИмяФайла); ДвоичныеДанные.Записать(ПолноеИмяФайла);
ЗаписьZipФайла.Добавить(ПолноеИмяФайла); ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
Иначе Иначе
ОписаниеФайла = Новый Структура; ОписаниеФайла = ОписаниеФайла(ИмяФайла);
ОписаниеФайла.Вставить("Представление", ИмяФайла);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ФайлОфисногоДокумента.Ключ); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ФайлОфисногоДокумента.Ключ);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
ОписаниеФайла.Вставить("ОбъектПечати", ОбъектПечати); ОписаниеФайла.Вставить("ОбъектПечати", ОбъектПечати);
Результат.Добавить(ОписаниеФайла); Результат.Добавить(ОписаниеФайла);
КонецЕсли; КонецЕсли;
@@ -1387,10 +1380,8 @@
ДвоичныеДанные.Записать(ПолноеИмяФайла); ДвоичныеДанные.Записать(ПолноеИмяФайла);
ЗаписьZipФайла.Добавить(ПолноеИмяФайла); ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
Иначе Иначе
ОписаниеФайла = Новый Структура; ОписаниеФайла = ОписаниеФайла(ИмяФайла);
ОписаниеФайла.Вставить("Представление", ИмяФайла);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", НастройкаПечатнойФормы.АдресВоВременномХранилище); ОписаниеФайла.Вставить("АдресВоВременномХранилище", НастройкаПечатнойФормы.АдресВоВременномХранилище);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
ОписаниеФайла.Вставить("ОбъектПечати", НастройкаПечатнойФормы.ОбъектПечати); ОписаниеФайла.Вставить("ОбъектПечати", НастройкаПечатнойФормы.ОбъектПечати);
Результат.Добавить(ОписаниеФайла); Результат.Добавить(ОписаниеФайла);
КонецЕсли; КонецЕсли;
@@ -1403,8 +1394,7 @@
ЗаписьZipФайла.Записать(); ЗаписьZipФайла.Записать();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
ОписаниеФайла = Новый Структура; ОписаниеФайла = ОписаниеФайла(ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр));
ОписаниеФайла.Вставить("Представление", ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр));
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
Если ПереданныеНастройки.Свойство("ОбъектПечати") Тогда Если ПереданныеНастройки.Свойство("ОбъектПечати") Тогда
ОписаниеФайла.Вставить("ОбъектПечати", ПереданныеНастройки.ОбъектПечати); ОписаниеФайла.Вставить("ОбъектПечати", ПереданныеНастройки.ОбъектПечати);
@@ -1565,6 +1555,17 @@
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания()); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания());
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста
Функция ОписаниеФайла(НаименованиеФайла = "")
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("АдресВоВременномХранилище", "");
ОписаниеФайла.Вставить("Название", НаименованиеФайла);
ОписаниеФайла.Вставить("Печать", Истина);
ОписаниеФайла.Вставить("Представление", НаименованиеФайла);
ОписаниеФайла.Вставить("ОбъектПечати", Неопределено);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
Возврат ОписаниеФайла;
КонецФункции
#КонецОбласти #КонецОбласти
@@ -30,9 +30,6 @@
Элементы.ДекорацияДобавлениеМетокВремени.Видимость = Истина; Элементы.ДекорацияДобавлениеМетокВремени.Видимость = Истина;
Элементы.ДекорацияДобавлениеМетокВремени.Заголовок = НСтр("ru='В подписи будут добавлены архивные метки времени'"); Элементы.ДекорацияДобавлениеМетокВремени.Заголовок = НСтр("ru='В подписи будут добавлены архивные метки времени'");
Элементы.ТипПодписи.Видимость = Ложь; Элементы.ТипПодписи.Видимость = Ложь;
ИначеЕсли Параметры.РежимПродления = "НеобработанныеПодписи" Тогда
Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Истина;
Элементы.ТипПодписи.Видимость = Истина;
Иначе Иначе
Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Истина; Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Истина;
Элементы.ТипПодписи.Видимость = Истина; Элементы.ТипПодписи.Видимость = Истина;
@@ -4493,12 +4493,10 @@
КонецЕсли; КонецЕсли;
Если СледующийУровень Тогда Если СледующийУровень Тогда
Если Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен Тогда Если (Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен)
ПараметрыВыполнения.Оборачивать = Ложь; Или Строка.ПолучитьЭлементы().Количество() > 1
ИначеЕсли Строка.ПолучитьЭлементы().Количество() > 1 Тогда Или (Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
ПараметрыВыполнения.Оборачивать = Ложь; И Строка.Подтип = "ТаблицаКолонки") Тогда
ИначеЕсли Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Подтип = "ТаблицаКолонки" Тогда
ПараметрыВыполнения.Оборачивать = Ложь; ПараметрыВыполнения.Оборачивать = Ложь;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -3351,7 +3351,9 @@
КонецФункции КонецФункции
Функция НаименованиеЗемельногоУчастка() Экспорт Функция НаименованиеЗемельногоУчастка() Экспорт
// АПК: 1036-выкл Данные адресного классификатора, не локализуются
Возврат "Зем. участок"; Возврат "Зем. участок";
// АПК: 1036-вкл
КонецФункции КонецФункции
Функция ПредставлениеУровняАдреса(Адрес, ИмяУровня) Экспорт Функция ПредставлениеУровняАдреса(Адрес, ИмяУровня) Экспорт
@@ -574,63 +574,43 @@
ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(СтрокаДерева.КлючСтроки); ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(СтрокаДерева.КлючСтроки);
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка"); ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка");
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Формулировка",ОписаниеТипаСтроки)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Формулировка", ОписаниеТипаСтроки));
Если СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда Если СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда
ДобавитьРеквизитыТабличныйВопрос(СтрокаДерева,ДобавляемыеРеквизиты,Форма); ДобавитьРеквизитыТабличныйВопрос(СтрокаДерева,ДобавляемыеРеквизиты,Форма);
ИначеЕсли СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Комплексный Тогда ИначеЕсли СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Комплексный Тогда
ДобавитьРеквизитыКомплексныйВопрос(СтрокаДерева, ДобавляемыеРеквизиты, Форма); ДобавитьРеквизитыКомплексныйВопрос(СтрокаДерева, ДобавляемыеРеквизиты, Форма);
Иначе Иначе
Если СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда Если СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка
Или СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(СтрокаДерева.Длина)); ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(СтрокаДерева.Длина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаСтроки,,СтрокаДерева.Формулировка)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса, ОписаниеТипаСтроки,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(СтрокаДерева.Длина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаСтроки,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда
ОписаниеТипаБулево = Новый ОписаниеТипов("Булево"); ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаБулево,,СтрокаДерева.Формулировка)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаБулево,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Дата Тогда ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Дата Тогда
ОписаниеТипаДата = Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата));
ОписаниеТипаДата = Новый ОписаниеТипов("Дата",Новый КвалификаторыДаты(ЧастиДаты.Дата)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаДата,, СтрокаДерева.Формулировка));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаДата,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Число Тогда ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Число Тогда
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(СтрокаДерева.Длина, СтрокаДерева.Точность));
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(СтрокаДерева.Длина,СтрокаДерева.Точность)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаЧисло,, СтрокаДерева.Формулировка));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаЧисло,,СтрокаДерева.Формулировка)); ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы
Или СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз Тогда
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,, СтрокаДерева.Формулировка));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз Тогда
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ВариантыОтветовНаВопрос = ВариантыОтветовНаВопрос(СтрокаДерева.ЭлементарныйВопрос,Форма); ВариантыОтветовНаВопрос = ВариантыОтветовНаВопрос(СтрокаДерева.ЭлементарныйВопрос,Форма);
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150));
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150));
ОписаниеТипаБулево = Новый ОписаниеТипов("Булево"); ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
Счетчик = 0; Счетчик = 0;
Для каждого ВариантОтвета Из ВариантыОтветовНаВопрос Цикл Для каждого ВариантОтвета Из ВариантыОтветовНаВопрос Цикл
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Реквизит_" + Счетчик,ОписаниеТипаБулево,,ВариантОтвета.Представление)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(
ИмяВопроса + "_Реквизит_" + Счетчик, ОписаниеТипаБулево,, ВариантОтвета.Представление));
Если ВариантОтвета.ТребуетОткрытогоОтвета Тогда Если ВариантОтвета.ТребуетОткрытогоОтвета Тогда
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Комментарий_" + Счетчик,ОписаниеТипаСтроки)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Комментарий_" + Счетчик,ОписаниеТипаСтроки));
КонецЕсли; КонецЕсли;
@@ -639,10 +619,9 @@
КонецЕсли; КонецЕсли;
Если (СтрокаДерева.ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз) И (СтрокаДерева.ТребуетсяКомментарий) Тогда Если (СтрокаДерева.ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз) И (СтрокаДерева.ТребуетсяКомментарий) Тогда
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150));
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Комментарий",ОписаниеТипаСтроки,,СтрокаДерева.ПояснениеКомментария)); ИмяВопроса + "_Комментарий", ОписаниеТипаСтроки,, СтрокаДерева.ПояснениеКомментария));
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -947,7 +926,7 @@
Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда
Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"),ЭлементГруппаВопросКомментарий); Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"), ЭлементГруппаВопросКомментарий);
Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.АвтоОтметкаНезаполненного = СтрокаТаблицы.Обязательный; Элемент.АвтоОтметкаНезаполненного = СтрокаТаблицы.Обязательный;
@@ -957,7 +936,7 @@
ИначеЕсли СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда ИначеЕсли СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"),ЭлементГруппаВопросКомментарий); Элемент = Форма.Элементы.Добавить(ИмяВопроса,Тип("ПолеФормы"), ЭлементГруппаВопросКомментарий);
Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элемент.АвтоОтметкаНезаполненного = СтрокаТаблицы.Обязательный; Элемент.АвтоОтметкаНезаполненного = СтрокаТаблицы.Обязательный;
@@ -459,10 +459,11 @@
ПараметрыБлокировки = СохраненныеПараметрыБлокировки(); ПараметрыБлокировки = СохраненныеПараметрыБлокировки();
Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено Тогда // Установлен признак необходимости принятия решения о блокировке
Возврат Истина; // Установлен признак необходимости принятия решения о блокировке. // или блокировка работы с внешними ресурсами подтверждена администратором.
ИначеЕсли ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено
Возврат Истина; // Блокировка работы с внешними ресурсами подтверждена администратором. Или ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда
Возврат Истина;
КонецЕсли; КонецЕсли;
РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
@@ -3744,6 +3744,11 @@
КонецЕсли; КонецЕсли;
ВыражениеДетальныхЗаписей = Формула.ПолучитьВыражениеДетальныхЗаписей(); ВыражениеДетальныхЗаписей = Формула.ПолучитьВыражениеДетальныхЗаписей();
Если ПустаяСтрока(ВыражениеДетальныхЗаписей) Тогда
Возврат;
КонецЕсли;
Если ВыражениеСодержитАгрегатнуюФункцию(ВыражениеДетальныхЗаписей) Тогда Если ВыражениеСодержитАгрегатнуюФункцию(ВыражениеДетальныхЗаписей) Тогда
ВыражениеИтоговыхЗаписей = ВыражениеДетальныхЗаписей; ВыражениеИтоговыхЗаписей = ВыражениеДетальныхЗаписей;
Иначе Иначе
@@ -99,18 +99,14 @@
Контакты = Неопределено; Контакты = Неопределено;
// На основании контакта
Если ЯвляетсяКонтактом(ДанныеЗаполнения) И Не ДанныеЗаполнения.ЭтоГруппа Тогда Если ЯвляетсяКонтактом(ДанныеЗаполнения) И Не ДанныеЗаполнения.ЭтоГруппа Тогда
// На основании контакта
Контакты = Новый Массив; Контакты = Новый Массив;
Контакты.Добавить(ДанныеЗаполнения); Контакты.Добавить(ДанныеЗаполнения);
ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ДанныеЗаполнения) Тогда // На основании предмета или взаимодействия
// На основании предмета ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ДанныеЗаполнения)
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); Или ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеЗаполнения) Тогда
Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения);
ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеЗаполнения) Тогда
// На основании взаимодействия.
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения);
Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения); Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения);
@@ -611,6 +607,20 @@
НоваяСтрока.Контакт = ПолучательПисьма.ИсточникКонтактнойИнформации; НоваяСтрока.Контакт = ПолучательПисьма.ИсточникКонтактнойИнформации;
КонецЦикла; КонецЦикла;
Для Каждого ПолучательОтвета Из Сообщение.ПолучателиОтвета Цикл
НоваяСтрока = Письмо["ПолучателиОтвета"].Добавить();
НоваяСтрока.Адрес = ПолучательОтвета.Адрес;
НоваяСтрока.Представление = ПолучательОтвета.Представление;
НоваяСтрока.Контакт = ПолучательОтвета.ИсточникКонтактнойИнформации;
КонецЦикла;
Для Каждого ПолучательСкрытыхКопий Из Сообщение.ПолучателиСкрытыхКопий Цикл
НоваяСтрока = Письмо["ПолучателиСкрытыхКопий"].Добавить();
НоваяСтрока.Адрес = ПолучательСкрытыхКопий.Адрес;
НоваяСтрока.Представление = ПолучательСкрытыхКопий.Представление;
НоваяСтрока.Контакт = ПолучательСкрытыхКопий.ИсточникКонтактнойИнформации;
КонецЦикла;
Письмо.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Письмо.ПолучателиПисьма, Ложь); Письмо.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Письмо.ПолучателиПисьма, Ложь);
Письмо.СтатусПисьма = ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), Письмо.СтатусПисьма = ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(),
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик, Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик,
@@ -774,7 +784,15 @@
// * СообщенияПользователю - ФиксированныйМассив // * СообщенияПользователю - ФиксированныйМассив
// * Получатели - ТаблицаЗначений: // * Получатели - ТаблицаЗначений:
// ** Представление - Строка // ** Представление - Строка
// ** АдресВоВременномХранилище - Строка // ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * ПолучателиОтвета
// ** Представление - Строка
// ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * ПолучателиСкрытыхКопий
// ** Представление - Строка
// ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации // ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * Вложения - ТаблицаЗначений: // * Вложения - ТаблицаЗначений:
// ** Представление - Строка // ** Представление - Строка
@@ -803,6 +821,20 @@
Получатели.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип); Получатели.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип);
Сообщение.Вставить("Получатели", Получатели); Сообщение.Вставить("Получатели", Получатели);
ПолучателиОтвета = Новый ТаблицаЗначений;
ПолучателиОтвета.Колонки.Добавить("Адрес", ТипСтрока);
ПолучателиОтвета.Колонки.Добавить("Представление", ТипСтрока);
ПолучателиОтвета.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип);
Сообщение.Вставить("ПолучателиОтвета", ПолучателиОтвета);
ПолучателиСкрытыхКопий = Новый ТаблицаЗначений;
ПолучателиСкрытыхКопий.Колонки.Добавить("Адрес", ТипСтрока);
ПолучателиСкрытыхКопий.Колонки.Добавить("Представление", ТипСтрока);
ПолучателиСкрытыхКопий.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип);
Сообщение.Вставить("ПолучателиСкрытыхКопий", ПолучателиСкрытыхКопий);
Вложения = Новый ТаблицаЗначений; Вложения = Новый ТаблицаЗначений;
Вложения.Колонки.Добавить("Представление", ТипСтрока); Вложения.Колонки.Добавить("Представление", ТипСтрока);
@@ -1307,7 +1339,7 @@
// ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль. // ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль.
// НеобработанныеЗначенияОригиналов - Массив из Структура: // НеобработанныеЗначенияОригиналов - Массив из Структура:
// * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта. // * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта.
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам. // * ИспользуемыеСвязи - см. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам.
// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита. // * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита.
// //
Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт
@@ -1329,15 +1361,11 @@
ЗафиксироватьТранзакцию(); ЗафиксироватьТранзакцию();
Исключение Исключение
ОтменитьТранзакцию();
Если ТранзакцияАктивна() Тогда ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка()),
ОтменитьТранзакцию(); УровеньЖурналаРегистрации.Ошибка,
КонецЕсли; НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные,,
ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка()) ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
,УровеньЖурналаРегистрации.Ошибка
,НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные
,,ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки; КонецПопытки;
КонецЦикла; КонецЦикла;
@@ -1413,7 +1441,7 @@
Иначе Иначе
Адрес = Параметры.Адрес; Адрес = Параметры.Адрес;
ДоменныйАдрес = ПолучитьДоменныйАдресДляПоиска(Параметры.Адрес); ДоменныйАдрес = ПолучитьДоменныйАдресДляПоиска(Параметры.Адрес);
ВариантыПоискаПоСтроке = ПолучитьВариантыПоискаПоСтроке(Параметры.Представление, Параметры.Адрес); ВариантыПоискаПоСтроке = ВариантыПоискаПоСтроке(Параметры.Представление, Параметры.Адрес);
Представление = Параметры.Представление; Представление = Параметры.Представление;
КонецЕсли; КонецЕсли;
@@ -1536,11 +1564,11 @@
// Возвращаемое значение: // Возвращаемое значение:
// СписокЗначений // СписокЗначений
// //
Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес) Функция ВариантыПоискаПоСтроке(Представление, Адрес)
Если ПустаяСтрока(Представление) Тогда Если ПустаяСтрока(Представление) Тогда
Возврат Адрес; Возврат Адрес;
ИначеЕсли ПустаяСтрока(Адрес) Тогда ИначеЕсли ПустаяСтрока(Адрес) Тогда
Возврат Представление; Возврат Представление;
ИначеЕсли СокрЛП(Представление) = СокрЛП(Адрес) Тогда ИначеЕсли СокрЛП(Представление) = СокрЛП(Адрес) Тогда
Возврат Адрес; Возврат Адрес;
@@ -2748,9 +2776,8 @@
// //
Процедура ДозаполнитьПоляКонтактов(Контакт, Представление, Адрес, ТипКонтактнойИнформации = Неопределено) Экспорт Процедура ДозаполнитьПоляКонтактов(Контакт, Представление, Адрес, ТипКонтактнойИнформации = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Контакт) Тогда Если Не ЗначениеЗаполнено(Контакт)
Возврат; Или (Не ПустаяСтрока(Представление) И Не ПустаяСтрока(Адрес)) Тогда
ИначеЕсли Не ПустаяСтрока(Представление) И Не ПустаяСтрока(Адрес) Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -1914,16 +1914,10 @@
ДополнительныеПараметрыОтправки.Заменить = Истина; ДополнительныеПараметрыОтправки.Заменить = Истина;
ДополнительныеПараметрыОтправки.ОтсрочкаДоставки = 3; ДополнительныеПараметрыОтправки.ОтсрочкаДоставки = 3;
ДополнительныеПараметрыОтправки.СобытиеЖурналаПриОтсрочкеДоставки = ДополнительныеПараметрыОтправки.СобытиеЖурналаПриОтсрочкеДоставки =
НСтр("ru = 'Длительные операция.Отложенная доставка прогресса'", НСтр("ru = 'Длительные операции.Отложенная доставка прогресса'",
ОбщегоНазначения.КодОсновногоЯзыка()); ОбщегоНазначения.КодОсновногоЯзыка());
Попытка
ВызватьИсключение НСтр("ru = 'Стек вызовов:'");
Исключение
СтекВызовов = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ДополнительныеПараметрыОтправки.КомментарийЖурналаПриОтсрочкеДоставки = ДополнительныеПараметрыОтправки.КомментарийЖурналаПриОтсрочкеДоставки =
НСтр("ru = 'Отправка прогресса чаще одного раза в 3 сек.'") НСтр("ru = 'Отправка прогресса чаще одного раза в 3 сек.'");
+ Символы.ПС + СтекВызовов;
КонецЕсли; КонецЕсли;
СерверныеОповещения.ОтправитьСерверноеОповещениеСИдентификаторомГруппы(ИмяОповещения(), СерверныеОповещения.ОтправитьСерверноеОповещениеСИдентификаторомГруппы(ИмяОповещения(),
@@ -1964,7 +1958,10 @@
ПоследнийИдентификатор = ПоследнийИдентификатор(ИдентификаторЗадания); ПоследнийИдентификатор = ПоследнийИдентификатор(ИдентификаторЗадания);
ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ПоследнийИдентификатор); ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ПоследнийИдентификатор);
Если ФоновоеЗадание <> Неопределено Тогда
Если ФоновоеЗадание <> Неопределено
И Не МонопольныйРежимВФоновомЗадании(ФоновоеЗадание) Тогда
Сообщения = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина); Сообщения = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина);
Для Каждого Сообщение Из Сообщения Цикл Для Каждого Сообщение Из Сообщения Цикл
// @skip-check query-in-loop - ветка с запросом вызывается только при первом вызове в сеансе // @skip-check query-in-loop - ветка с запросом вызывается только при первом вызове в сеансе
@@ -1974,6 +1971,31 @@
КонецПроцедуры КонецПроцедуры
// Параметры:
// ФоновоеЗадание - ФоновоеЗадание - задание, активность которого нужно учесть.
//
// Возвращаемое значение:
// Булево - если Истина, значит в сеансе установлен монопольный режим и
// хотя бы одно фоновое задание активно (то есть запись в сеансе недоступна).
//
Функция МонопольныйРежимВФоновомЗадании(ФоновоеЗадание = Неопределено)
Если Не МонопольныйРежим() Тогда
Возврат Ложь;
КонецЕсли;
Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Возврат Истина;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
Возврат ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество() > 0;
КонецФункции
Функция ЕстьФоновыеЗаданияВФайловойИБ() Функция ЕстьФоновыеЗаданияВФайловойИБ()
ЗапущеноЗаданийВФайловойИБ = 0; ЗапущеноЗаданийВФайловойИБ = 0;
File diff suppressed because it is too large. Load diff
@@ -8,23 +8,24 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
// Запускает изменение настроек скрытия персональных данных субъектов в соответствии с измененными // Запускает изменение настроек уничтожения персональных данных субъектов в соответствии с измененными
// настройками системы. // настройками системы.
// //
// Параметры: // Параметры:
// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы.
// ПараметрыМетода - см. НастройкиСкрытияПерсональныхДанныхСистемы // ПараметрыМетода - см. НастройкиУничтоженияПерсональныхДанныхСистемы
// //
// Возвращаемое значение: // Возвращаемое значение:
// см. ДлительныеОперации.ВыполнитьВФоне. // см. ДлительныеОперации.ВыполнитьВФоне.
// //
Функция ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт Функция ЗапуститьДлительнуюОперациюИзменениеНастроекУничтоженияПДн(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Изменение настроек скрытия персональных данных'"); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Изменение настроек уничтожения персональных данных'");
ПараметрыВыполнения.ОжидатьЗавершение = 0; ПараметрыВыполнения.ОжидатьЗавершение = 0;
Возврат ДлительныеОперации.ВыполнитьВФоне("ЗащитаПерсональныхДанных.ИзменитьНастройкиСкрытияПерсональныхДанных", ПараметрыМетода, ПараметрыВыполнения); Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения,
"ЗащитаПерсональныхДанных.ИзменитьНастройкиУничтоженияПерсональныхДанных", ПараметрыМетода);
КонецФункции КонецФункции
@@ -32,16 +33,16 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура: // Структура:
// * ИспользоватьСкрытиеПерсональныхДанных - Булево - признак использования скрытия персональных данных субъектов. // * ИспользоватьУничтожениеПерсональныхДанных - Булево - признак использования уничтожения персональных данных
// * ДнейДоСкрытияПерсональныхДанных - Число - дней до скрытия персональных данных субъектов. // субъектов.
// //
Функция НастройкиСкрытияПерсональныхДанныхСистемы() Экспорт Функция НастройкиУничтоженияПерсональныхДанныхСистемы() Экспорт
НастройкиСкрытия = Новый Структура; НастройкиУничтожения = Новый Структура;
НастройкиСкрытия.Вставить("ИспользоватьСкрытиеПерсональныхДанных", Константы.ИспользоватьСкрытиеПерсональныхДанныхСубъектов.Получить()); НастройкиУничтожения.Вставить("ИспользоватьУничтожениеПерсональныхДанных",
НастройкиСкрытия.Вставить("ДнейДоСкрытияПерсональныхДанных", Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить()); Константы.ИспользоватьСкрытиеПерсональныхДанныхСубъектов.Получить());
Возврат НастройкиСкрытия; Возврат НастройкиУничтожения;
КонецФункции КонецФункции
@@ -49,110 +50,17 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
Функция ПараметрыВопросаПодтвержденияСкрытия(Субъекты) Экспорт
ТекстВопроса = "";
ПараметрыВопроса = Новый Структура;
СкрываемыеСубъекты = Новый Массив;
СкрываемыеСубъектыБезСогласия = Новый Массив;
СкрываемыеСубъектыССогласием = Новый Массив;
ДатаСеанса = НачалоДня(ТекущаяДатаСеанса());
ПустаяДата = Дата(1, 1, 1);
ДнейДоСкрытия = ЗащитаПерсональныхДанных.ДнейДоСкрытияПерсональныхДанныхСубъектов();
НастройкиСубъектов = ЗащитаПерсональныхДанных.ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Для Каждого НастройкиСкрытия Из НастройкиСубъектов Цикл
Субъект = НастройкиСкрытия.Ключ;
Настройки = НастройкиСкрытия.Значение;
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено Тогда
ТекстПричины = НСтр("ru = 'Скрытие ранее отменено по причине: %1.'");
ТекстПричины = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПричины, Настройки.ПричинаОтменыСкрытия);
Иначе
ТекстПричины = НСтр("ru = 'Скрытие уже выполнено.'");
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Персональные данные субъекта ""%1"" не могут быть скрыты.
|%2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Продолжить;
ИначеЕсли ЗначениеЗаполнено(Настройки.Основание)
И (Настройки.ДатаСкрытия = ПустаяДата Или Настройки.ДатаСкрытия - ДнейДоСкрытия * 86400 > ДатаСеанса) Тогда
СкрываемыеСубъектыССогласием.Добавить(Субъект);
Иначе
СкрываемыеСубъектыБезСогласия.Добавить(Субъект);
КонецЕсли;
СкрываемыеСубъекты.Добавить(Субъект);
КонецЦикла;
Если ЗначениеЗаполнено(СкрываемыеСубъектыБезСогласия) Тогда
Заголовок = НСтр("ru = 'Будут скрыты персональные данные субъектов:'");
ТекстВопроса = ПредставлениеСпискаСубъектов(Заголовок, СкрываемыеСубъектыБезСогласия);
КонецЕсли;
Если ЗначениеЗаполнено(СкрываемыеСубъектыССогласием) Тогда
Заголовок = НСтр("ru = 'Несмотря на полученное согласие на обработку ПДн, будут скрыты персональные данные субъектов:'");
ТекстВопроса = ?(ЗначениеЗаполнено(ТекстВопроса), ТекстВопроса + Символы.ПС, "") + ПредставлениеСпискаСубъектов(Заголовок, СкрываемыеСубъектыССогласием);
КонецЕсли;
Если ЗначениеЗаполнено(ТекстВопроса) Тогда
ТекстВопроса = ТекстВопроса + Символы.ПС + НСтр("ru = 'Восстановление данных будет невозможно. Продолжить?'");
КонецЕсли;
ПараметрыВопроса.Вставить("Субъекты", СкрываемыеСубъекты);
ПараметрыВопроса.Вставить("ТекстВопроса", ТекстВопроса);
Возврат ПараметрыВопроса;
КонецФункции
Функция ПредставлениеСпискаСубъектов(Заголовок, Субъекты)
ПредставлениеСписка = "";
ПредставлениеСписка = Заголовок + Символы.ПС;
Если Субъекты.Количество() = 1 Тогда
ПредставлениеСписка = СтрЗаменить(ПредставлениеСписка, НСтр("ru = 'субъектов'"), НСтр("ru = 'субъекта'"));
КонецЕсли;
Номер = 1;
Для Каждого Субъект Из Субъекты Цикл
ПредставлениеСписка = ПредставлениеСписка + ?(Номер <> 1, ", ", "");
ПредставлениеСписка = ПредставлениеСписка + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1'"), Субъект);
Номер = Номер + 1;
КонецЦикла;
Возврат ПредставлениеСписка + "." + Символы.ПС;
КонецФункции
Процедура СкрытьПерсональныеДанныеСубъектов(Субъекты, СообщатьОбИсключениях = Ложь) Экспорт
ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(Субъекты, СообщатьОбИсключениях);
КонецПроцедуры
Процедура СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн(ИмяФормы, ПоложениеОтбора) Экспорт Процедура СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн(ИмяФормы, ПоложениеОтбора) Экспорт
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "ПоказыватьСоСкрытымиПДн", ПоложениеОтбора); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "ПоказыватьСоСкрытымиПДн", ПоложениеОтбора);
КонецПроцедуры КонецПроцедуры
// См. ЗащитаПерсональныхДанныхПовтИсп.ТипыСубъектов
Функция ТипыСубъектов() Экспорт
Возврат ЗащитаПерсональныхДанных.ТипыСубъектов();
КонецФункции
#КонецОбласти #КонецОбласти
@@ -26,7 +26,8 @@
КонецЕсли; КонецЕсли;
Субъект = ПараметрыПечати.ОбъектыПечати[0]; Субъект = ПараметрыПечати.ОбъектыПечати[0];
ОткрытьФорму("Документ.СогласиеНаОбработкуПерсональныхДанных.ФормаОбъекта", Новый Структура("Субъект", Субъект), ПараметрыПечати.Форма); ОткрытьФорму("Документ.СогласиеНаОбработкуПерсональныхДанных.ФормаОбъекта", Новый Структура("Субъект", Субъект),
ПараметрыПечати.Форма);
Возврат Неопределено; Возврат Неопределено;
КонецФункции КонецФункции
@@ -34,7 +35,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. // Процедуры и функции для встраивания подсистемы в формы объектов конфигурации.
// Определяет, что указанное событие - это событие о скрытии персональных данных субъектов // Определяет, что указанное событие - это событие об уничтожении персональных данных субъектов
// и обновляет объект управляемой формы. // и обновляет объект управляемой формы.
// //
// Параметры: // Параметры:
@@ -43,13 +44,13 @@
// //
Процедура ОбработкаОповещенияФормы(Форма, ИмяСобытия) Экспорт Процедура ОбработкаОповещенияФормы(Форма, ИмяСобытия) Экспорт
Если ИмяСобытия = "ИзмененаДатаСкрытияПерсональныхДанных" Или ИмяСобытия = "СкрытыПерсональныеДанные" Тогда Если ИмяСобытия = "ИзмененаДатаУничтоженияПерсональныхДанных" Или ИмяСобытия = "УничтоженыПерсональныеДанные" Тогда
Форма.Прочитать(); Форма.Прочитать();
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
// Определяет, что указанное событие - это событие о скрытии персональных данных субъектов // Определяет, что указанное событие - это событие об уничтожении персональных данных субъектов
// и обновляет данные в таблице субъектов. // и обновляет данные в таблице субъектов.
// //
// Параметры: // Параметры:
@@ -58,7 +59,7 @@
// //
Процедура ОбработкаОповещенияФормыСписка(СписокФормы, ИмяСобытия) Экспорт Процедура ОбработкаОповещенияФормыСписка(СписокФормы, ИмяСобытия) Экспорт
Если ИмяСобытия = "ИзмененаДатаСкрытияПерсональныхДанных" Или ИмяСобытия = "СкрытыПерсональныеДанные" Тогда Если ИмяСобытия = "ИзмененаДатаУничтоженияПерсональныхДанных" Или ИмяСобытия = "УничтоженыПерсональныеДанные" Тогда
СписокФормы.Обновить(); СписокФормы.Обновить();
КонецЕсли; КонецЕсли;
@@ -82,8 +83,8 @@
Кнопка.Пометка = ПоказыватьСоСкрытымиПДн; Кнопка.Пометка = ПоказыватьСоСкрытымиПДн;
Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн); Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн);
ЗащитаПерсональныхДанныхВызовСервера.СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн( ЗащитаПерсональныхДанныхВызовСервера.СохранитьПоложениеОтбораПоказыватьСоСкрытымиПДн(Форма.ИмяФормы,
Форма.ИмяФормы, ПоказыватьСоСкрытымиПДн); ПоказыватьСоСкрытымиПДн);
КонецПроцедуры КонецПроцедуры
@@ -92,43 +93,41 @@
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
// Настраивает элементы формы НастройкиПользователейИПрав обработки ПанельАдминистрированияБСП. // Настраивает элементы формы НастройкиПользователейИПрав обработки ПанельАдминистрированияБСП.
// Запускает фоновое изменение настроек скрытия персональных данных. // Запускает фоновое изменение настроек уничтожения персональных данных.
// //
// Параметры: // Параметры:
// Форма - ФормаКлиентскогоПриложения - настраиваемая форма. // Форма - ФормаКлиентскогоПриложения - настраиваемая форма.
// //
Процедура НастройкиСкрытияПерсональныхДанныхПриИзменении(Форма) Экспорт Процедура НастройкиУничтоженияПерсональныхДанныхПриИзменении(Форма) Экспорт
Элементы = Форма.Элементы; Элементы = Форма.Элементы;
НаборКонстант = Форма.НаборКонстант; НаборКонстант = Форма.НаборКонстант;
ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения = ЗащитаПерсональныхДанныхВызовСервера.НастройкиУничтоженияПерсональныхДанныхСистемы();
ПараметрыВыполнения.Вставить("ДнейДоСкрытияПерсональныхДанных", НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов); ПараметрыВыполнения.ИспользоватьУничтожениеПерсональныхДанных =
ПараметрыВыполнения.Вставить("ИспользоватьСкрытиеПерсональныхДанных", НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов); НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов;
ФоновоеЗадание = ЗащитаПерсональныхДанныхВызовСервера.ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Форма.УникальныйИдентификатор, ПараметрыВыполнения); ДлительнаяОперация = ЗащитаПерсональныхДанныхВызовСервера.ЗапуститьДлительнуюОперациюИзменениеНастроекУничтоженияПДн(
Форма.УникальныйИдентификатор, ПараметрыВыполнения);
ДоступностьЭлементов = Новый Соответствие; ДоступностьЭлементов = Новый Соответствие;
ДоступностьЭлементов.Вставить(Элементы.ИспользоватьСкрытиеПерсональныхДанных.Имя, Элементы.ИспользоватьСкрытиеПерсональныхДанных.Доступность); ДоступностьЭлементов.Вставить(Элементы.ИспользоватьУничтожениеПерсональныхДанных.Имя,
ДоступностьЭлементов.Вставить(Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Имя, Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Доступность); Элементы.ИспользоватьУничтожениеПерсональныхДанных.Доступность);
Если ФоновоеЗадание <> Неопределено Если ДлительнаяОперация <> Неопределено И ДлительнаяОперация.Статус = "Выполняется" Тогда
И ФоновоеЗадание.Статус = "Выполняется" Тогда Элементы.ИспользоватьУничтожениеПерсональныхДанных.Доступность = Ложь;
Элементы.ДекорацияОжиданиеИзмененияИспользованияУничтоженияПДн.Видимость = Истина;
Элементы.ИспользоватьСкрытиеПерсональныхДанных.Доступность = Ложь;
Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Доступность = Ложь;
Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость = Истина;
КонецЕсли; КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыИзмененияНастроекСкрытияПерсональныхДанных(Форма, ДоступностьЭлементов); ДополнительныеПараметры = ДополнительныеПараметрыИзмененияНастроекУничтоженияПерсональныхДанных(Форма,
ДоступностьЭлементов);
НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма); НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма);
НастройкиОжидания.ВыводитьОкноОжидания = Ложь; НастройкиОжидания.ВыводитьОкноОжидания = Ложь;
Обработчик = Новый ОписаниеОповещения("ПослеИзмененияНастроекСкрытияПерсональныхДанных", ЭтотОбъект, ДополнительныеПараметры); Обработчик = Новый ОписаниеОповещения("ПослеИзмененияНастроекУничтоженияПерсональныхДанных", ЭтотОбъект,
ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); ДополнительныеПараметры);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Обработчик, НастройкиОжидания);
КонецПроцедуры КонецПроцедуры
@@ -137,10 +136,10 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Параметры: // Параметры:
// ФоновоеЗадание // ФоновоеЗадание - ФоновоеЗадание
// ДополнительныеПараметры - см. ДополнительныеПараметрыИзмененияНастроекСкрытияПерсональныхДанных // ДополнительныеПараметры - см. ДополнительныеПараметрыИзмененияНастроекУничтоженияПерсональныхДанных
// //
Процедура ПослеИзмененияНастроекСкрытияПерсональныхДанных(ФоновоеЗадание, ДополнительныеПараметры) Экспорт Процедура ПослеИзмененияНастроекУничтоженияПерсональныхДанных(ФоновоеЗадание, ДополнительныеПараметры) Экспорт
Форма = ДополнительныеПараметры.Форма; Форма = ДополнительныеПараметры.Форма;
ДоступностьЭлементов = ДополнительныеПараметры.ДоступностьЭлементов; ДоступностьЭлементов = ДополнительныеПараметры.ДоступностьЭлементов;
@@ -160,25 +159,25 @@
КонецЦикла; КонецЦикла;
Если Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость Тогда Если Элементы.ДекорацияОжиданиеИзмененияИспользованияУничтоженияПДн.Видимость Тогда
Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость = Ложь; Элементы.ДекорацияОжиданиеИзмененияИспользованияУничтоженияПДн.Видимость = Ложь;
КонецЕсли; КонецЕсли;
Если ФоновоеЗадание <> Неопределено Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.Статус = "Выполнено" Тогда И ФоновоеЗадание.Статус = "Выполнено" Тогда
Оповестить("Запись_НаборКонстант", Новый Структура, "ИспользоватьСкрытиеПерсональныхДанныхСубъектов"); Оповестить("Запись_НаборКонстант", Новый Структура, "ИспользоватьСкрытиеПерсональныхДанныхСубъектов");
ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки скрытия персональных данных изменены.'")); ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки уничтожения персональных данных изменены.'"));
Иначе Иначе
СтарыеНастройкиСистемы = ЗащитаПерсональныхДанныхВызовСервера.НастройкиСкрытияПерсональныхДанныхСистемы(); СтарыеНастройкиСистемы = ЗащитаПерсональныхДанныхВызовСервера.НастройкиУничтоженияПерсональныхДанныхСистемы();
НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов = СтарыеНастройкиСистемы.ИспользоватьСкрытиеПерсональныхДанных; НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов =
НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов = СтарыеНастройкиСистемы.ДнейДоСкрытияПерсональныхДанных; СтарыеНастройкиСистемы.ИспользоватьУничтожениеПерсональныхДанных;
Если ФоновоеЗадание <> Неопределено Тогда Если ФоновоеЗадание <> Неопределено Тогда
ТекстОшибки = НСтр("ru = 'Не удалось изменить настройки скрытия персональных данных. ТекстОшибки = НСтр("ru = 'Не удалось изменить настройки уничтожения персональных данных.
|См. подробности в журнале регистрации.'"); |См. подробности в журнале регистрации.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки);
КонецЕсли; КонецЕсли;
@@ -187,16 +186,27 @@
КонецПроцедуры КонецПроцедуры
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ДоступностьЭлементов - Соответствие из КлючИЗначение:
// * Ключ - Строка
// * Значение - Булево
//
// Возвращаемое значение: // Возвращаемое значение:
// Структура: // Структура -дополнительные параметры изменения настроек уничтожения персональных данных:
// * ДоступностьЭлементов - Соответствие
// * Форма - ФормаКлиентскогоПриложения // * Форма - ФормаКлиентскогоПриложения
// * ДоступностьЭлементов - Соответствие из КлючИЗначение:
// * Ключ - Строка
// * Значение - Булево
// //
Функция ДополнительныеПараметрыИзмененияНастроекСкрытияПерсональныхДанных(Форма, ДоступностьЭлементов) Функция ДополнительныеПараметрыИзмененияНастроекУничтоженияПерсональныхДанных(Форма, ДоступностьЭлементов)
ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Форма", Форма); ДополнительныеПараметры.Вставить("Форма", Форма);
ДополнительныеПараметры.Вставить("ДоступностьЭлементов", ДоступностьЭлементов); ДополнительныеПараметры.Вставить("ДоступностьЭлементов", ДоступностьЭлементов);
Возврат ДополнительныеПараметры
Возврат ДополнительныеПараметры;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -24,14 +24,14 @@
// альтернативные - символом "|"; // альтернативные - символом "|";
// * ПоляДоступа - Строка - имена полей доступа через запятую. Обращение (попытка доступа) к этим полям // * ПоляДоступа - Строка - имена полей доступа через запятую. Обращение (попытка доступа) к этим полям
// приводит к записи журнала; // приводит к записи журнала;
// * ОбластьДанных - Строка - идентификатор области данных, если их несколько. Необязательно для заполнения. // * ОбластьДанных - Строка - идентификатор категории данных.
// //
// Пример: // Пример:
// Сведения = ТаблицаСведений.Добавить(); // Сведения = ТаблицаСведений.Добавить();
// Сведения.Объект = "Справочник.ФизическиеЛица"; // Сведения.Объект = "Справочник.ФизическиеЛица";
// Сведения.ПоляРегистрации = "Ссылка"; // Сведения.ПоляРегистрации = "Ссылка";
// Сведения.ПоляДоступа = "Наименование,ДатаРождения"; // Сведения.ПоляДоступа = "Наименование";
// Сведения.ОбластьДанных = "ЛичныеДанные"; // Сведения.ОбластьДанных = "ФИО";
// //
// Сведения = ТаблицаСведений.Добавить(); // Сведения = ТаблицаСведений.Добавить();
// Сведения.Объект = "Справочник.ФизическиеЛица"; // Сведения.Объект = "Справочник.ФизическиеЛица";
@@ -48,12 +48,12 @@
// Обеспечивает составление коллекции областей персональных данных. // Обеспечивает составление коллекции областей персональных данных.
// //
// Параметры: // Параметры:
// ОбластиПерсональныхДанных - ТаблицаЗначений: // КатегорииПерсональныхДанных - ТаблицаЗначений:
// * Имя - Строка - идентификатор области данных. // * Имя - Строка - идентификатор категории данных.
// * Представление - Строка - пользовательское представление области данных. // * Представление - Строка - пользовательское представление категории данных.
// * Родитель - Строка - идентификатор родительской области данных. // * Родитель - Строка - идентификатор родительской категории данных.
// //
Процедура ЗаполнитьОбластиПерсональныхДанных(ОбластиПерсональныхДанных) Экспорт Процедура ЗаполнитьОбластиПерсональныхДанных(КатегорииПерсональныхДанных) Экспорт
@@ -63,8 +63,12 @@
// переданных в качестве параметров, субъектов. // переданных в качестве параметров, субъектов.
// //
// Параметры: // Параметры:
// СубъектыПерсональныхДанных - ДанныеФормыКоллекция - содержит сведения о субъектах. // СубъектыПерсональныхДанных - Массив из Структура - содержит сведения о субъектах:
// ДатаАктуальности - Дата - дата, на которую нужно заполнить сведения. // * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных
// * ФИО - Строка
// * Адрес - Строка
// * ПаспортныеДанные - Строка
// ДатаАктуальности - Дата - дата, на которую нужно заполнить сведения.
// //
Процедура ДополнитьДанныеСубъектовПерсональныхДанных(СубъектыПерсональныхДанных, ДатаАктуальности) Экспорт Процедура ДополнитьДанныеСубъектовПерсональныхДанных(СубъектыПерсональныхДанных, ДатаАктуальности) Экспорт
@@ -75,7 +79,7 @@
// Вызывается при заполнении формы "Согласие на обработку персональных данных" данными организации. // Вызывается при заполнении формы "Согласие на обработку персональных данных" данными организации.
// //
// Параметры: // Параметры:
// Организация - ОпределяемыйТип.Организация - оператор персональных данных. // Организация - ОпределяемыйТип.Организация - оператор персональных данных.
// ДанныеОрганизации - Структура - данные об организации (адрес, ФИО ответственного и т.д.). // ДанныеОрганизации - Структура - данные об организации (адрес, ФИО ответственного и т.д.).
// ДатаАктуальности - Дата - дата, на которую нужно заполнить сведения. // ДатаАктуальности - Дата - дата, на которую нужно заполнить сведения.
// //
@@ -98,17 +102,139 @@
КонецПроцедуры КонецПроцедуры
// Позволяет проверить возможность скрытия персональных данных и задать состав исключений для записи в данных. // Возвращает организацию по умолчанию.
//
// Возвращаемое значение:
// ОпределяемыйТип.Организация
//
Функция ОрганизацияПоУмолчанию() Экспорт
КонецФункции
#Область УничтожениеПерсональныхДанных
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Уничтожение персональных данных (ПДн) выполняется при проведении документа "Акт об уничтожении персональных данных".
// При этом выполняется поиск объектов информационной базы, в которых содержатся ПДн субъектов.
// Состав таких объектов и их полей описывается в методе ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных.
// В найденных объектах значения реквизитов, содержащих ПДн, очищаются или заменяются случайными значениями.
// Запись объекта с уничтоженными ПДн выполняется в режиме загрузки. В случае необходимости выполнения дополнительных
// действий, при уничтожении ПДн перед записью и после записи объекта можно использовать обработчики
// ПередУничтожениемПерсональныхДанных и ПослеУничтоженияПерсональныхДанных соответственно.
// Заполняет таблицу значений с описанием объектов метаданных и их полей, в которых содержатся персональные данные
// субъектов, подлежащие уничтожению.
//
// Например, персональные данные физического лицо могут храниться в самом справочнике ФизическиеЛица,
// в регистре сведений ФИОФизическихЛиц, в документе ВедомостьНаВыплатуЗарплатыВБанк и т.д.
//
// Параметры:
// ТаблицаСведений - ТаблицаЗначений:
// * Объект - Строка - полное имя объекта метаданных, в котором содержатся персональные данные субъекта.
// Например, "Справочник.ФизическиеЛица".
// * ПолеСубъект - Строка - имя поля объекта, в котором содержится ссылка на субъекта.
// Для стандартных реквизитов используется имя реквизита, например "Ссылка".
// Для остальных полей используется полное имя объекта метаданных реквизита, например
// "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.ФизическоеЛицо"
// * Поля - Массив из Строка, Строка - имена полей объекта, в которых содержатся персональные данные субъекта
// Для стандартных реквизитов используется имя реквизита, например "Наименование".
// Для остальных полей используется полное имя объекта метаданных реквизита, например
// "Справочник.ФизическиеЛица.Реквизит.ФИО"
// * КатегорияДанных - Строка - категория, к которой относятся персональные данные.
//
// Пример:
//
// НовыеСведения = ТаблицаСведений.Добавить();
// НовыеСведения.Объект = "Справочник.ФизическиеЛица";
// НовыеСведения.ПолеСубъект = "Ссылка";
// НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Наименование");
// НовыеСведения.КатегорияДанных = "ФИО";
//
// НовыеСведения = ТаблицаСведений.Добавить();
// НовыеСведения.Объект = "Документ.ВедомостьНаВыплатуЗарплатыВБанк";
// НовыеСведения.ПолеСубъект = "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.ФизическоеЛицо";
// НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
// "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.СНИЛС");
// НовыеСведения.КатегорияДанных = "СНИЛС";
//
Процедура ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных(ТаблицаСведений) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия перед уничтожением персональных данных субъектов. В том числе, отказаться
// от уничтожения персональных данных, добавив субъекта в таблицу исключений с указанием причины отказа от уничтожения.
// Или же добавить в массив субъектов других субъектов, данные которых тоже должны быть уничтожены. Например, если при
// уничтожении данных физического лица должны быть уничтожены данные связанных с ним кандидатов.
// //
// Параметры: // Параметры:
// Субъекты - Массив - ссылки на объекты данных, чьи персональные данные будут скрыты. // Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных - ссылки на объекты данных, чьи персональные данные
// ТаблицаИсключений - ТаблицаЗначений - таблица, в которую добавляются субъекты и причины отказа их скрытия. // будут уничтожены.
// Состав полей см. в функции ЗащитаПерсональныхДанных.НоваяТаблицаИсключений. // ТаблицаИсключений - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных
// * ПричинаОтменыУничтожения - Строка
// - ТаблицаЗначений - в которую добавляются субъекты и причины отказа уничтожения их данных
// ОтказОтСкрытия - Булево - (по умолчанию Истина) признак отказа от скрытия. Если определены причины отказа // ОтказОтСкрытия - Булево - (по умолчанию Истина) признак отказа от скрытия. Если определены причины отказа
// от скрытия, то параметру необходимо установить значение Ложь. // от скрытия, то параметру необходимо установить значение Ложь.
// //
Процедура ПередСкрытиемПерсональныхДанныхСубъектов(Субъекты, ТаблицаИсключений, ОтказОтСкрытия) Экспорт Процедура ПередСкрытиемПерсональныхДанныхСубъектов(Субъекты, ТаблицаИсключений, ОтказОтСкрытия) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия при уничтожении персональных данных перед записью объекта,
// а также отказаться от записи объекта.
//
// Параметры:
// Объект - СправочникОбъект,ДокументОбъект
// Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных
// ВыполнитьЗаписьОбъекта - Булево - если Ложь, то запись объекта не выполняется.
//
Процедура ПередУничтожениемПерсональныхДанных(Объект, Субъекты, ВыполнитьЗаписьОбъекта) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия при уничтожении персональных данных после записи объекта.
//
// Параметры:
// Объект - СправочникОбъект,ДокументОбъект
// Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных
//
Процедура ПослеУничтоженияПерсональныхДанных(Объект, Субъекты) Экспорт
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Срок хранения ПДн - это дата после которой необходимо уничтожить ПДн субъекта. Ранее этой даты уничтожить ПДн нельзя.
// Сроки хранения ПДн рассчитываются автоматически регламентным заданием РасчетСроковХраненияПерсональныхДанных.
// При наступлении события, которое влияет на срок хранения ПДн, необходимо с помощью метода
// ЗащитаПерсональныхДанных.ДобавитьСубъектыДляРасчетаСроковХранения зарегистрировать субъекта для расчета срока хранения.
// Такими событиями могут быть, например, создание нового физического лица, ввод согласия на обработку ПДн или
// прием сотрудника на работу.
// При расчете сроков хранения ПДн, в процедуре ПриРасчетеСроковХраненияПерсональныхДанных заполняется таблица значений,
// в которую различные подсистемы добавляют рассчитанные сроки хранения. Датой, при наступлении которой данные подлежат
// уничтожению, будет определена самая поздняя из всех заполненных для этого субъекта.
// Позволяет добавить в таблицу значений информацию о сроках хранения персональных данных.
//
// Параметры:
// ДанныеСубъектов - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка на субъекта.
// * ДатаСобытия - Дата - дата события, которое потребовало обновления срока хранения персональных данных.
// СрокиХранения - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка на субъекта
// * СрокХранения - Дата - дата, до которой должны храниться персональные данные субъекта и при наступлении которой,
// они должны быть уничтожены.
// * Организация - ОпределяемыйТип.Организация - ссылка на организацию субъекта (если организацию определить
// невозможно, не заполняется)
// * Комментарий - Строка - произвольная строка с пояснением к рассчитанному сроку хранения.
//
Процедура ПриРасчетеСроковХраненияПерсональныхДанных(ДанныеСубъектов, СрокиХранения) Экспорт
КонецПроцедуры КонецПроцедуры
@@ -8,247 +8,80 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Функция формирует структуру, необходимую для установки индекса картинки // См. ЗащитаПерсональныхДанныхСлужебный.НомераКартинокСобытий152ФЗ
// в таблице событий журнала регистрации.
//
Функция НомераКартинокСобытий152ФЗ() Экспорт Функция НомераКартинокСобытий152ФЗ() Экспорт
НомераКартинок = Новый Соответствие; Возврат ЗащитаПерсональныхДанныхСлужебный.НомераКартинокСобытий152ФЗ();
НомераКартинок.Вставить("_$Session$_.Authentication", 1);
НомераКартинок.Вставить("_$Session$_.AuthenticationError", 2);
НомераКартинок.Вставить("_$Session$_.Start", 3);
НомераКартинок.Вставить("_$Session$_.Finish", 4);
НомераКартинок.Вставить("_$Access$_.Access", 5);
НомераКартинок.Вставить("_$Access$_.AccessDenied", 6);
Возврат Новый ФиксированноеСоответствие(НомераКартинок);
КонецФункции КонецФункции
// Возвращает полные имена объектов метаданных содержащих персональные данные. // См. ЗащитаПерсональныхДанныхСлужебный.ИменаИсточниковПерсональныхДанных
//
// Параметры:
// Нет
//
// Возвращаемое значение
// Массив - массив строк. Например: "РегистрСведений.ДокументыФизическихЛиц".
//
Функция ИменаИсточниковПерсональныхДанных() Экспорт Функция ИменаИсточниковПерсональныхДанных() Экспорт
ТаблицаСведений = ЗащитаПерсональныхДанныхПовтИсп.СведенияОПерсональныхДанных(); Возврат ЗащитаПерсональныхДанныхСлужебный.ИменаИсточниковПерсональныхДанных();
ТаблицаСведений.Сортировать("Объект");
ИменаИсточников = ТаблицаСведений.ВыгрузитьКолонку("Объект");
ИменаИсточников = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИменаИсточников);
Возврат Новый ФиксированныйМассив(ИменаИсточников);
КонецФункции КонецФункции
// Возвращает полные имена реквизитов объекта метаданных содержащего персональные данные по его полному имени. // См. ЗащитаПерсональныхДанныхСлужебный.ИменаРеквизитовИсточникаСодержащихСубъект
//
// Параметры:
// ИмяИсточника - Строка - полное имя источника метаданных. Например: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение
// Массив - массив строк. Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
//
Функция ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника) Экспорт Функция ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника) Экспорт
ИменаРеквизитовСодержащихСубъект = Новый Массив; Возврат ЗащитаПерсональныхДанныхСлужебный.ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника);
МетаданныеПоТипамСубъекта = ЗащитаПерсональныхДанныхПовтИсп.МетаданныеПоТипамСубъекта();
МетаданныеИсточника = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяИсточника); // ОбъектМетаданныхСправочник
ИсточникЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(МетаданныеИсточника);
ТипыСсылкиИсточника = ?(ИсточникЭтоРегистр, Новый Массив, МетаданныеИсточника.СтандартныеРеквизиты.Ссылка.Тип.Типы());
ИсточникИмеетВладельца = ОбщегоНазначения.ЭтоСправочник(МетаданныеИсточника) И МетаданныеИсточника.Владельцы.Количество() > 0;
ПоляСведений = ИменаПолейСведенийОПерсональныхДанныхОбъекта(ИмяИсточника);
ПоляДоступа = ПоляСведений.ПоляДоступа;
ПоляРегистрации = ПоляСведений.ПоляРегистрации;
ИменаТЧСодержащихСведения = Новый Массив;
Если Не ИсточникЭтоРегистр Тогда
ИменаТабличныхЧастей = Новый Массив;
ТабличныеЧасти = МетаданныеИсточника.ТабличныеЧасти;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
ИменаТабличныхЧастей.Добавить(ТабличнаяЧасть.Имя);
КонецЦикла;
ИменаТЧСодержащихСведения = ИменаТЧОбъектаСодержащихСведенияОПерсональныхДанных(ИменаТабличныхЧастей, ПоляДоступа);
КонецЕсли;
Для Каждого ТипСубъектаИМетаданные Из МетаданныеПоТипамСубъекта Цикл
ТипСубъекта = ТипСубъектаИМетаданные.Ключ;
МетаданныеСубъекта = ТипСубъектаИМетаданные.Значение;
ИменаРеквизитовИсточника = Новый Массив;
ИменаРеквизитовТЧИсточника = Новый Соответствие;
Если ИсточникЭтоРегистр Тогда
ИменаИзмеренийТипа = ЗащитаПерсональныхДанных.ИменаИзмеренийРегистраПоТипу(МетаданныеИсточника, ТипСубъекта);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаИзмеренийТипа);
Иначе
Если ТипыСсылкиИсточника.Найти(ТипСубъекта) <> Неопределено Тогда
ИменаРеквизитовИсточника.Добавить("Ссылка");
Иначе
Если ИсточникИмеетВладельца Тогда
Если МетаданныеИсточника.Владельцы.Содержит(МетаданныеСубъекта) Тогда
ИменаРеквизитовИсточника.Добавить("Владелец");
КонецЕсли;
КонецЕсли;
Если ИменаРеквизитовИсточника.Количество() = 0 Тогда
ИменаРеквизитовТипа = ЗащитаПерсональныхДанных.ИменаРеквизитовПоТипу(МетаданныеИсточника, ТипСубъекта);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаРеквизитовТипа);
КонецЕсли;
КонецЕсли;
Для Каждого ИмяТабличнойЧасти Из ИменаТЧСодержащихСведения Цикл
ИменаРеквизитовТЧТипа = ЗащитаПерсональныхДанных.ИменаРеквизитовТЧОбъектаПоТипу(МетаданныеИсточника, ИмяТабличнойЧасти, ТипСубъекта, Истина);
Если ИменаРеквизитовТЧТипа.Количество() > 0 Тогда
ИменаРеквизитовТЧИсточника.Вставить(ИмяТабличнойЧасти, ИменаРеквизитовТЧТипа);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для Каждого ИмяРеквизита Из ИменаРеквизитовИсточника Цикл
Если ПоляРегистрации.Найти(ИмяРеквизита) <> Неопределено Тогда
ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
КонецЕсли;
КонецЦикла;
Для Каждого ТЧИРеквизиты Из ИменаРеквизитовТЧИсточника Цикл
ИменаРеквизитовТЧ = ТЧИРеквизиты.Значение;
Для Каждого ИмяРеквизита Из ИменаРеквизитовТЧ Цикл
Если ПоляРегистрации.Найти(ИмяРеквизита) <> Неопределено Тогда
ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ИменаРеквизитовСодержащихСубъект.Количество() > 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Новый ФиксированныйМассив(ИменаРеквизитовСодержащихСубъект);
КонецФункции КонецФункции
// Возвращает имена полей регистрации и полей доступа сведений о персональных данных объекта по его полному имени. // См. ЗащитаПерсональныхДанныхСлужебный.КраткоеИмяПоля
// Функция КраткоеИмяПоля(ПолноеИмяПоля, ПолноеИмяОбъекта) Экспорт
// Параметры:
// ИмяОбъекта - Строка - полное имя объекта метаданных. Например: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение
// Структура:
/// ПоляРегистрации - Массив - массив строк. Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
/// ПоляДоступа - Массив - массив строк. Например: "ИНН" или "ФизическиеЛица.ИНН".
//
Функция ИменаПолейСведенийОПерсональныхДанныхОбъекта(ИмяОбъекта)
ИменаПолейРегистрации = Новый Массив; Возврат ЗащитаПерсональныхДанныхСлужебный.КраткоеИмяПоля(ПолноеИмяПоля, ПолноеИмяОбъекта);
ИменаПолейДоступа = Новый Массив;
ТаблицаСведений = ЗащитаПерсональныхДанныхПовтИсп.СведенияОПерсональныхДанных();
СтрокиСведений = ТаблицаСведений.НайтиСтроки(Новый Структура("Объект", ИмяОбъекта));
Для Каждого СтрокаСведений Из СтрокиСведений Цикл
ПоляДоступа = СтрРазделить(СтрокаСведений.ПоляДоступа, ",");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаПолейДоступа, ПоляДоступа, Истина);
ПоляРегистрации = СтрРазделить(СтрокаСведений.ПоляРегистрации, ",|");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаПолейРегистрации, ПоляРегистрации, Истина);
КонецЦикла;
Возврат Новый Структура("ПоляДоступа,ПоляРегистрации", ИменаПолейДоступа, ИменаПолейРегистрации);
КонецФункции
Функция ИменаТЧОбъектаСодержащихСведенияОПерсональныхДанных(ИменаТЧОбъекта, ИменаРеквизитов)
ИменаТЧСодержащихСведения = Новый Массив;
Для Каждого ИмяТЧОбъекта Из ИменаТЧОбъекта Цикл
ПодстрокаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.", ИмяТЧОбъекта);
Для Каждого ИмяРеквизита Из ИменаРеквизитов Цикл
Если СтрНайти(ИмяРеквизита, ПодстрокаПоиска) <> 0 Тогда
ИменаТЧСодержащихСведения.Добавить(ИмяТЧОбъекта);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ИменаТЧСодержащихСведения;
КонецФункции КонецФункции
// См. ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных
Функция СведенияОПерсональныхДанных() Экспорт Функция СведенияОПерсональныхДанных() Экспорт
Возврат ЗащитаПерсональныхДанных.СведенияОПерсональныхДанных(); Возврат ЗащитаПерсональныхДанныхСлужебный.СведенияОПерсональныхДанных();
КонецФункции КонецФункции
// Возвращаемое значение: // См. ЗащитаПерсональныхДанныхСлужебный.УничтожаемыеПерсональныеДанные
// ФиксированноеСоответствие из КлючИЗначение: Функция УничтожаемыеПерсональныеДанные() Экспорт
// * Ключ - Тип
// * Значение - ОбъектМетаданных Возврат ЗащитаПерсональныхДанныхСлужебный.УничтожаемыеПерсональныеДанные();
//
КонецФункции
// См. ЗащитаПерсональныхДанныхСлужебный.КатегорииПерсональныхДанных
Функция КатегорииПерсональныхДанных() Экспорт
Возврат ЗащитаПерсональныхДанныхСлужебный.КатегорииПерсональныхДанных();
КонецФункции
// см. ЗащитаПерсональныхДанныхСлужебный.КатегорииПерсональныхДанных
Функция МетаданныеПоТипамСубъекта() Экспорт Функция МетаданныеПоТипамСубъекта() Экспорт
ТипыСубъектов = ЗащитаПерсональныхДанныхПовтИсп.ТипыСубъектов(); Возврат ЗащитаПерсональныхДанныхСлужебный.МетаданныеПоТипамСубъекта();
МетаданныеПоТипуСубъектов = Новый Соответствие;
Для Каждого ТипСубъекта Из ТипыСубъектов Цикл
МетаданныеПоТипуСубъектов.Вставить(ТипСубъекта, Метаданные.НайтиПоТипу(ТипСубъекта));
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(МетаданныеПоТипуСубъектов);
КонецФункции КонецФункции
// Возвращаемое значение: // см. ЗащитаПерсональныхДанныхСлужебный.ТипыСубъектов
// ФиксированныйМассив - типы субъектов персональных данных.
//
Функция ТипыСубъектов() Экспорт Функция ТипыСубъектов() Экспорт
ТипыСубъектов = Метаданные.ОпределяемыеТипы.СубъектПерсональныхДанных.Тип.Типы(); Возврат ЗащитаПерсональныхДанныхСлужебный.ТипыСубъектов();
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ТипыСубъектов, Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
Возврат Новый ФиксированныйМассив(ТипыСубъектов); КонецФункции
// см. ЗащитаПерсональныхДанныхСлужебный.ИменаМетаданныхПоТипамСубъекта
Функция ИменаМетаданныхПоТипамСубъекта() Экспорт
Возврат ЗащитаПерсональныхДанныхСлужебный.ИменаМетаданныхПоТипамСубъекта();
КонецФункции
// См. ЗащитаПерсональныхДанныхСлужебный.ПредставлениеКатегорииПерсональныхДанных
Функция ПредставлениеКатегорииПерсональныхДанных(ИмяКатегории) Экспорт
Возврат ЗащитаПерсональныхДанныхСлужебный.ПредставлениеКатегорииПерсональныхДанных(ИмяКатегории);
КонецФункции КонецФункции
@@ -0,0 +1,522 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
// Функция формирует структуру, необходимую для установки индекса картинки в таблице событий журнала регистрации.
//
// Возвращаемое значение:
// ФиксированноеСоответствие из КлючИЗначение:
// * Ключ - Строка
// * Значение - Число
//
Функция НомераКартинокСобытий152ФЗ() Экспорт
НомераКартинок = Новый Соответствие;
НомераКартинок.Вставить("_$Session$_.Authentication", 1);
НомераКартинок.Вставить("_$Session$_.AuthenticationError", 2);
НомераКартинок.Вставить("_$Session$_.Start", 3);
НомераКартинок.Вставить("_$Session$_.Finish", 4);
НомераКартинок.Вставить("_$Access$_.Access", 5);
НомераКартинок.Вставить("_$Access$_.AccessDenied", 6);
Возврат Новый ФиксированноеСоответствие(НомераКартинок);
КонецФункции
// Возвращаемое значение:
// ТаблицаЗначений:
// * Объект - Строка
// * ПоляРегистрации - Строка
// * ПоляДоступа - Строка
// * ОбластьДанных - Строка
//
Функция СведенияОПерсональныхДанных() Экспорт
// Таблица сведений о персональных данных.
ТаблицаСведений = Новый ТаблицаЗначений;
ТаблицаСведений.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Колонки.Добавить("ПоляРегистрации", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Колонки.Добавить("ПоляДоступа", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Строка"));
// Сведения о персональных данных в самой подсистеме.
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.СогласиеНаОбработкуПерсональныхДанных";
НовыеСведения.ПоляРегистрации = "Субъект,ФИОСубъекта";
НовыеСведения.ПоляДоступа = "ФИОСубъекта,АдресСубъекта,ПаспортныеДанные,СрокДействия";
НовыеСведения.ОбластьДанных = "ОбработкаПерсональныхДанных";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "РегистрСведений.СогласияНаОбработкуПерсональныхДанных";
НовыеСведения.ПоляРегистрации = "Субъект";
НовыеСведения.ПоляДоступа = "СрокДействия";
НовыеСведения.ОбластьДанных = "ОбработкаПерсональныхДанных";
// Заполнение таблицы сведений потребителями.
ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений);
Возврат ТаблицаСведений;
КонецФункции
// Возвращаемое значение:
// ТаблицаЗначений:
// * Имя - Строка
// * Представление - Строка
// * Родитель - Строка
//
Функция КатегорииПерсональныхДанных() Экспорт
// Соответствие идентификаторов категорий и их пользовательских представлений.
КатегорииДанных = Новый ТаблицаЗначений;
КатегорииДанных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
КатегорииДанных.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
КатегорииДанных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("Строка"));
НоваяКатегория = КатегорииДанных.Добавить();
НоваяКатегория.Имя = "ОбработкаПерсональныхДанных";
НоваяКатегория.Представление = НСтр("ru = 'Обработка ПДн'");
// Заполнение категорий потребителями.
ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьОбластиПерсональныхДанных(КатегорииДанных);
Возврат КатегорииДанных;
КонецФункции
// Возвращает полные имена объектов метаданных, содержащих персональные данные.
//
// Возвращаемое значение:
// Массив из Строка - например: "РегистрСведений.ДокументыФизическихЛиц".
//
Функция ИменаИсточниковПерсональныхДанных() Экспорт
ТаблицаСведений = ЗащитаПерсональныхДанных.СведенияОПерсональныхДанных();
ТаблицаСведений.Сортировать("Объект");
ИменаИсточников = ТаблицаСведений.ВыгрузитьКолонку("Объект");
ИменаИсточников = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИменаИсточников);
Возврат Новый ФиксированныйМассив(ИменаИсточников);
КонецФункции
// Возвращает таблицу значений с описанием полей объектов для уничтожения персональных данных.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Объект - Строка - полное имя объекта метаданных
// * ПолеСубъект - Строка - полное имя поля Объекта со ссылкой на Субъект
// * Поля - Массив из Строка, Строка - имена полей Объекта, в которых находятся персональные данные Субъекта
// * КатегорияДанных - Строка - категория персональных данных
//
Функция УничтожаемыеПерсональныеДанные() Экспорт
// Таблица сведений о персональных данных.
ТаблицаСведений = Новый ТаблицаЗначений;
ТаблицаСведений.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Колонки.Добавить("ПолеСубъект", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Колонки.Добавить("Поля", Новый ОписаниеТипов("Массив,Строка"));
ТаблицаСведений.Колонки.Добавить("КатегорияДанных", Новый ОписаниеТипов("Строка"));
ТаблицаСведений.Индексы.Добавить("Объект");
// Сведения о персональных данных в самой подсистеме.
ЗаполнитьСведенияОбУничтожаемыхПерсональныхДанных(ТаблицаСведений);
// Заполнение таблицы сведений потребителями.
ЗащитаПерсональныхДанныхПереопределяемый.ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных(ТаблицаСведений);
Возврат ТаблицаСведений;
КонецФункции
Процедура ЗаполнитьСведенияОбУничтожаемыхПерсональныхДанных(ТаблицаСведений)
МетаданныеДокумента = Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных;
ИмяОбъекта = МетаданныеДокумента.ПолноеИмя();
ИмяПоляСубъект = МетаданныеДокумента.Реквизиты.Субъект.ПолноеИмя();
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = ИмяОбъекта;
НовыеСведения.ПолеСубъект = ИмяПоляСубъект;
НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
МетаданныеДокумента.Реквизиты.ФИОСубъекта.ПолноеИмя());
НовыеСведения.КатегорияДанных = "ФИО";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = ИмяОбъекта;
НовыеСведения.ПолеСубъект = ИмяПоляСубъект;
НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
МетаданныеДокумента.Реквизиты.АдресСубъекта.ПолноеИмя());
НовыеСведения.КатегорияДанных = "МестоРегистрацииПроживания";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = ИмяОбъекта;
НовыеСведения.ПолеСубъект = ИмяПоляСубъект;
НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
МетаданныеДокумента.Реквизиты.ПаспортныеДанные.ПолноеИмя());
НовыеСведения.КатегорияДанных = "ПаспортныеДанные";
КонецПроцедуры
// Возвращает представление категории персональных данных по имени.
//
// Параметры:
// ИмяКатегории - Строка
//
// Возвращаемое значение:
// Строка - представление категории персональных данных
//
Функция ПредставлениеКатегорииПерсональныхДанных(ИмяКатегории) Экспорт
ПредставлениеКатегории = "";
КатегорииПерсональныхДанных = ЗащитаПерсональныхДанных.КатегорииПерсональныхДанных();
НайденнаяСтрока = КатегорииПерсональныхДанных.Найти(ИмяКатегории, "Имя");
Если НайденнаяСтрока <> Неопределено Тогда
ПредставлениеКатегории = НайденнаяСтрока.Представление;
КонецЕсли;
Возврат ПредставлениеКатегории;
КонецФункции
// Возвращает полные имена реквизитов объекта метаданных содержащего персональные данные по его полному имени.
//
// Параметры:
// ИмяИсточника - Строка - полное имя источника метаданных. Например: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение:
// Массив из Строка - пример: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
//
Функция ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника) Экспорт
ПоляСведений = ИменаПолейСведенийОПерсональныхДанныхОбъекта(ИмяИсточника);
ПоляСодержащиеСубъект = ПоляСведений.ПоляСодержащиеСубъект;
ПоляПерсональныхДанных = ПоляСведений.ПоляПерсональныхДанных;
ИменаРеквизитовСодержащихСубъект = Новый Массив; // Массив из Строка
МетаданныеПоТипамСубъекта = ЗащитаПерсональныхДанных.МетаданныеПоТипамСубъекта();
МетаданныеИсточника = Метаданные.НайтиПоПолномуИмени(ИмяИсточника); // ОбъектМетаданныхДокумент, ОбъектМетаданныхСправочник, ОбъектМетаданныхРегистрСведений
ИсточникЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(МетаданныеИсточника);
ТипыСсылкиИсточника = ?(ИсточникЭтоРегистр, Новый Массив, МетаданныеИсточника.СтандартныеРеквизиты.Ссылка.Тип.Типы());
ИсточникИмеетВладельца = ОбщегоНазначения.ЭтоСправочник(МетаданныеИсточника)
И МетаданныеИсточника.Владельцы.Количество() > 0;
ИменаТЧСодержащихСведения = Новый Массив; // Массив из Строка
Если Не ИсточникЭтоРегистр Тогда
ИменаТабличныхЧастей = Новый Массив; // Массив из Строка
ТабличныеЧасти = МетаданныеИсточника.ТабличныеЧасти;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
ИменаТабличныхЧастей.Добавить(ТабличнаяЧасть.Имя);
КонецЦикла;
ИменаТЧСодержащихСведения = ИменаТЧОбъектаСодержащихСведенияОПерсональныхДанных(ИменаТабличныхЧастей,
ПоляПерсональныхДанных, ПоляСодержащиеСубъект);
КонецЕсли;
Для Каждого ТипСубъектаИМетаданные Из МетаданныеПоТипамСубъекта Цикл
ТипСубъекта = ТипСубъектаИМетаданные.Ключ; // Тип
МетаданныеСубъекта = ТипСубъектаИМетаданные.Значение;
ИменаРеквизитовИсточника = Новый Массив; // Массив из Строка
ИменаРеквизитовТЧИсточника = Новый Соответствие;
Если ИсточникЭтоРегистр Тогда
ИменаИзмеренийТипа = ИменаИзмеренийРегистраПоТипу(МетаданныеИсточника, ТипСубъекта);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаИзмеренийТипа);
Иначе
Если ТипыСсылкиИсточника.Найти(ТипСубъекта) <> Неопределено Тогда
ИменаРеквизитовИсточника.Добавить("Ссылка");
Иначе
Если ИсточникИмеетВладельца Тогда
Если МетаданныеИсточника.Владельцы.Содержит(МетаданныеСубъекта) Тогда
ИменаРеквизитовИсточника.Добавить("Владелец");
КонецЕсли;
КонецЕсли;
Если ИменаРеквизитовИсточника.Количество() = 0 Тогда
ИменаРеквизитовТипа = ИменаРеквизитовПоТипу(МетаданныеИсточника, ТипСубъекта);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаРеквизитовТипа);
КонецЕсли;
КонецЕсли;
Для Каждого ИмяТабличнойЧасти Из ИменаТЧСодержащихСведения Цикл
ИменаРеквизитовТЧТипа = ИменаРеквизитовТЧОбъектаПоТипу(МетаданныеИсточника, ИмяТабличнойЧасти,
ТипСубъекта);
Если ИменаРеквизитовТЧТипа.Количество() > 0 Тогда
ИменаРеквизитовТЧИсточника.Вставить(ИмяТабличнойЧасти, ИменаРеквизитовТЧТипа);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для Каждого ИмяРеквизита Из ИменаРеквизитовИсточника Цикл
Если ПоляСодержащиеСубъект.Найти(ИмяРеквизита) <> Неопределено Тогда
ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
КонецЕсли;
КонецЦикла;
Для Каждого ТЧИРеквизиты Из ИменаРеквизитовТЧИсточника Цикл
ИменаРеквизитовТЧ = ТЧИРеквизиты.Значение; // Массив из Строка
Для Каждого ИмяРеквизита Из ИменаРеквизитовТЧ Цикл
Если ПоляСодержащиеСубъект.Найти(ИмяРеквизита) <> Неопределено Тогда
ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ИменаРеквизитовСодержащихСубъект.Количество() > 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Новый ФиксированныйМассив(ИменаРеквизитовСодержащихСубъект);
КонецФункции
// Возвращает по полному имени объекта имена полей, содержащих уничтожаемые персональные данные субъекта,
// и имена полей, содержащих ссылку на субъекта.
//
// Параметры:
// ИмяОбъекта - Строка - полное имя объекта метаданных. Пример: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение:
// Структура - имена полей скрываемых персональных данных объекта:
// * ПоляПерсональныхДанных - Массив из Строка - например: "ИНН" или "ФизическиеЛица.ИНН".
// * ПоляСодержащиеСубъект - Массив из Строка - например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
//
Функция ИменаПолейСведенийОПерсональныхДанныхОбъекта(ИмяОбъекта)
ИменаПолейСодержащихСубъект = Новый Массив; // Массив из Строка
ИменаСкрываемыхПолей = Новый Массив; // Массив из Строка
ТаблицаСведений = ЗащитаПерсональныхДанных.УничтожаемыеПерсональныеДанные();
СтрокиСведений = ТаблицаСведений.НайтиСтроки(Новый Структура("Объект", ИмяОбъекта));
Для Каждого СтрокаСведений Из СтрокиСведений Цикл
Если ТипЗнч(СтрокаСведений.Поля) = Тип("Строка") Тогда
СкрываемыеПоля = СтрРазделить(СтрокаСведений.Поля, ",");
Иначе
СкрываемыеПоля = СтрокаСведений.Поля;
КонецЕсли;
Для Каждого ИмяПоля Из СкрываемыеПоля Цикл
ИменаСкрываемыхПолей.Добавить(КраткоеИмяПоля(ИмяПоля, ИмяОбъекта));
КонецЦикла;
ПоляСодержащиеСубъект = СтрРазделить(СтрокаСведений.ПолеСубъект, ",|");
Для Каждого ИмяПоля Из ПоляСодержащиеСубъект Цикл
ИменаПолейСодержащихСубъект.Добавить(КраткоеИмяПоля(ИмяПоля, ИмяОбъекта));
КонецЦикла;
КонецЦикла;
Возврат Новый Структура("ПоляПерсональныхДанных,ПоляСодержащиеСубъект",
ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИменаСкрываемыхПолей),
ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИменаПолейСодержащихСубъект));
КонецФункции
Функция ИменаТЧОбъектаСодержащихСведенияОПерсональныхДанных(ИменаТЧОбъекта, Знач ИменаРеквизитов,
Знач ПоляСодержащиеСубъект)
ИменаТЧСодержащихСведения = Новый Массив; // Массив из Строка
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитов, ПоляСодержащиеСубъект);
Для Каждого ИмяТЧОбъекта Из ИменаТЧОбъекта Цикл
ПодстрокаПоиска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1.", ИмяТЧОбъекта);
Для Каждого ИмяРеквизита Из ИменаРеквизитов Цикл
Если СтрНайти(ИмяРеквизита, ПодстрокаПоиска) <> 0 Тогда
ИменаТЧСодержащихСведения.Добавить(ИмяТЧОбъекта);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ИменаТЧСодержащихСведения;
КонецФункции
// Преобразует полное имя поля в краткую форму.
// Например, "Документ.АктОбУничтоженииПерсональныхДанных.ТабличнаяЧасть.КатегорииДанных.Реквизит.ИмяОбъекта"
// преобразуется в "КатегорииДанных.ИмяОбъекта".
//
// Параметры:
// ПолноеИмяПоля - Строка, Произвольный - полное имя поля
// ПолноеИмяОбъекта - Строка - полное имя объекта
//
// Возвращаемое значение:
// Строка - краткое имя поля
//
Функция КраткоеИмяПоля(ПолноеИмяПоля, ПолноеИмяОбъекта) Экспорт
ИмяПоля = СтрЗаменить(СокрЛП(ПолноеИмяПоля), ПолноеИмяОбъекта, "");
Если СтрНайти(ИмяПоля, ".ТабличнаяЧасть.") > 0 Тогда
ИмяПоля = СтрЗаменить(СтрЗаменить(ИмяПоля, ".Реквизит.", "."), ".ТабличнаяЧасть.", "");
Иначе
ИмяПоля = СтрЗаменить(ИмяПоля, ".Реквизит.", "");
ИмяПоля = СтрЗаменить(ИмяПоля, ".Измерение.", "");
ИмяПоля = СтрЗаменить(ИмяПоля, ".Ресурс.", "");
КонецЕсли;
Возврат ИмяПоля;
КонецФункции
// Возвращаемое значение:
// ФиксированноеСоответствие из КлючИЗначение:
// * Ключ - Тип
// * Значение - ОбъектМетаданных
//
Функция МетаданныеПоТипамСубъекта() Экспорт
ТипыСубъектов = ЗащитаПерсональныхДанных.ТипыСубъектов();
МетаданныеПоТипуСубъектов = Новый Соответствие;
Для Каждого ТипСубъекта Из ТипыСубъектов Цикл
МетаданныеПоТипуСубъектов.Вставить(ТипСубъекта, Метаданные.НайтиПоТипу(ТипСубъекта));
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(МетаданныеПоТипуСубъектов);
КонецФункции
// Возвращаемое значение:
// ФиксированныйМассив из Тип - типы субъектов персональных данных.
//
Функция ТипыСубъектов() Экспорт
ТипыСубъектов = Метаданные.ОпределяемыеТипы.СубъектПерсональныхДанных.Тип.Типы();
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ТипыСубъектов,
Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
Возврат Новый ФиксированныйМассив(ТипыСубъектов);
КонецФункции
// Возвращаемое значение:
// ФиксированныйМассив из Строка - полные имена объектов метаданных
//
Функция ИменаМетаданныхПоТипамСубъекта() Экспорт
ТипыСубъектов = ЗащитаПерсональныхДанных.ТипыСубъектов();
ИменаМетаданных = Новый Массив; // Массив из Строка
Для Каждого ТипСубъекта Из ТипыСубъектов Цикл
ИменаМетаданных.Добавить(Метаданные.НайтиПоТипу(ТипСубъекта).ПолноеИмя());
КонецЦикла;
Возврат Новый ФиксированныйМассив(ИменаМетаданных);
КонецФункции
// Параметры:
// МетаданныеОбъекта - ОбъектМетаданныхДокумент, ОбъектМетаданныхСправочник
// Тип - Тип
//
// Возвращаемое значение:
// Массив из Строка
//
Функция ИменаРеквизитовПоТипу(МетаданныеОбъекта, Тип)
ИменаРеквизитов = Новый Массив; // Массив из Строка
Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип) Тогда
ИменаРеквизитов.Добавить(Реквизит.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаРеквизитов;
КонецФункции
// Параметры:
// МетаданныеОбъекта - ОбъектМетаданныхДокумент, ОбъектМетаданныхСправочник
// ИмяТабличнойЧасти - Строка
// Тип - Тип
//
// Возвращаемое значение:
// Массив из Строка
//
Функция ИменаРеквизитовТЧОбъектаПоТипу(МетаданныеОбъекта, ИмяТабличнойЧасти, Тип)
ИменаРеквизитов = Новый Массив; // Массив из Строка
МетаданныеТЧ = МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТабличнойЧасти);
Если МетаданныеТЧ <> Неопределено Тогда
Для Каждого Реквизит Из МетаданныеТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип) Тогда
ИменаРеквизитов.Добавить(ИмяТабличнойЧасти + "." + Реквизит.Имя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ИменаРеквизитов;
КонецФункции
// Параметры:
// МетаданныеРегистра - ОбъектМетаданныхРегистрСведений
// Тип - Тип
//
// Возвращаемое значение:
// Массив из Строка
//
Функция ИменаИзмеренийРегистраПоТипу(МетаданныеРегистра, Тип)
ИменаИзмерений = Новый Массив; // Массив из Строка
Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл
Если Измерение.Тип.СодержитТип(Тип) Тогда
ИменаИзмерений.Добавить(Измерение.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаИзмерений;
КонецФункции
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3e453cca-aac3-4ff3-bb15-32c09f43e7b2">
<name>ЗащитаПерсональныхДанныхСлужебный</name>
<synonym>
<key>ru</key>
<value>Защита персональных данных служебный</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -0,0 +1,35 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// @strict-types
#Область СлужебныеПроцедурыИФункции
// См. Обработки.СкрытиеКонфиденциальнойИнформации.ДеревоОбрабатываемыхОбъектов
Функция ДеревоОбрабатываемыхОбъектов() Экспорт
Возврат Обработки.СкрытиеКонфиденциальнойИнформации.ДеревоОбрабатываемыхОбъектов();
КонецФункции
// См. Обработки.СкрытиеКонфиденциальнойИнформации.ДеревоОбрабатываемыхОбъектовБезНастроек
Функция ДеревоОбрабатываемыхОбъектовБезНастроек() Экспорт
Возврат Обработки.СкрытиеКонфиденциальнойИнформации.ДеревоОбрабатываемыхОбъектовБезНастроек();
КонецФункции
// См. Обработки.СкрытиеКонфиденциальнойИнформации.ЭлементИмениПоТипуМетаданных
Функция ЭлементИмениПоТипуМетаданных(ТипМетаданных) Экспорт
Возврат Обработки.СкрытиеКонфиденциальнойИнформации.ЭлементИмениПоТипуМетаданных(ТипМетаданных);
КонецФункции
#КонецОбласти
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="49bcd9e6-f312-4bb6-959a-242b73907591">
<name>ЗащитаПерсональныхДанныхУничтожениеПовтИсп</name>
<synonym>
<key>ru</key>
<value>Защита персональных данных уничтожение повт исп</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<returnValuesReuse>DuringSession</returnValuesReuse>
</mdclass:CommonModule>
@@ -3460,6 +3460,11 @@
МодульИнтеграцияПодсистемБИП.ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати); МодульИнтеграцияПодсистемБИП.ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати);
КонецЕсли; КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда
МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
МодульЗащитаПерсональныхДанных.ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати);
КонецЕсли;
КонецПроцедуры КонецПроцедуры
// См. УправлениеПечатьюПереопределяемый.ПриПодготовкеДанныхПечати // См. УправлениеПечатьюПереопределяемый.ПриПодготовкеДанныхПечати
@@ -149,15 +149,12 @@
Настройки = Новый Структура; Настройки = Новый Структура;
Настройки.Вставить("Показывать", Истина); Настройки.Вставить("Показывать", Истина);
Если Метаданные.Обработки.ИнформацияПриЗапуске.Макеты.Количество() = 0 Тогда // Отключение информации в версии ПРОФ, если пользователь отключил флажок.
Настройки.Показывать = Ложь; Настройки.Показывать = (Метаданные.Обработки.ИнформацияПриЗапуске.Макеты.Количество() > 0)
ИначеЕсли Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() И Не ПоказыватьПриНачалеРаботы() Тогда И (СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Или ПоказыватьПриНачалеРаботы());
// Отключение информации в ПРОФ версии если пользователь отключил флажок.
Настройки.Показывать = Ложь;
КонецЕсли;
Если Настройки.Показывать Тогда Если Настройки.Показывать Тогда
// Отключение информации если будет выведено описание изменений. // Отключение информации, если будет выведено описание изменений.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеВерсииИБ") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеВерсииИБ") Тогда
МодульОбновлениеИнформационнойБазыСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебный"); МодульОбновлениеИнформационнойБазыСлужебный = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебный");
Если МодульОбновлениеИнформационнойБазыСлужебный.ПоказатьОписаниеИзмененийСистемы() Тогда Если МодульОбновлениеИнформационнойБазыСлужебный.ПоказатьОписаниеИзмененийСистемы() Тогда
@@ -167,7 +164,7 @@
КонецЕсли; КонецЕсли;
Если Настройки.Показывать Тогда Если Настройки.Показывать Тогда
// Отключение информации если будет показан помощник завершения настройки подчиненного узла РИБ. // Отключение информации, если будет показан помощник завершения настройки подчиненного узла РИБ.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
Если МодульОбменДаннымиСервер.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Тогда Если МодульОбменДаннымиСервер.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Тогда
@@ -192,7 +189,6 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
// Переопределение.
ИнформацияПриЗапускеПереопределяемый.ОпределитьНастройки(Настройки); ИнформацияПриЗапускеПереопределяемый.ОпределитьНастройки(Настройки);
Возврат Настройки; Возврат Настройки;
@@ -196,6 +196,10 @@
// //
Функция ПредставлениеФормулы(ПараметрыФормулы) Экспорт Функция ПредставлениеФормулы(ПараметрыФормулы) Экспорт
Если Не ЗначениеЗаполнено(ПараметрыФормулы.Формула) Тогда
Возврат ПараметрыФормулы.Формула;
КонецЕсли;
ОписаниеСписковПолей = КонструкторФормулСлужебный.ОписаниеСписковПолей(); ОписаниеСписковПолей = КонструкторФормулСлужебный.ОписаниеСписковПолей();
ИсточникиДоступныхПолей = КонструкторФормулСлужебный.КоллекцияИсточниковДоступныхПолей(); ИсточникиДоступныхПолей = КонструкторФормулСлужебный.КоллекцияИсточниковДоступныхПолей();
@@ -6599,7 +6599,7 @@
Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда
Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена
И ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, КомпонентыОбмена.УзелКорреспондентаОбъект) Тогда И ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, КомпонентыОбмена.УзелКорреспондентаОбъект) Тогда
Возврат; Продолжить;
КонецЕсли; КонецЕсли;
МетаданныеОбъекта = Объект.Метаданные(); МетаданныеОбъекта = Объект.Метаданные();
Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
@@ -461,13 +461,10 @@
Набор.Отбор[ЭлементОтбора.Имя].Использование = ЭлементОтбора.Использование; Набор.Отбор[ЭлементОтбора.Имя].Использование = ЭлементОтбора.Использование;
КонецЦикла; КонецЦикла;
УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные.Отбор); УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные.Отбор);
ИначеЕсли ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) ИначеЕсли (ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта)
И Не ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОбъекта) И Не ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОбъекта)
И Данные.ЭтоНовый() Тогда И Данные.ЭтоНовый())
Или ОбщегоНазначения.ЭтоКонстанта(МетаданныеОбъекта) Тогда
Возврат;
ИначеЕсли ОбщегоНазначения.ЭтоКонстанта(МетаданныеОбъекта) Тогда
Возврат; Возврат;
Иначе Иначе
Набор = Данные; Набор = Данные;
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы"; Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.8.276"; Описание.Версия = "3.1.8.302";
Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1425,7 +1425,7 @@
ЭтоСлужебныеДанные = СлужебныеСвязиДанных[МестоИспользования] <> Неопределено; ЭтоСлужебныеДанные = СлужебныеСвязиДанных[МестоИспользования] <> Неопределено;
ЭтоВспомогательныеДанные = ЭтоСлужебныеДанные; ЭтоВспомогательныеДанные = ЭтоСлужебныеДанные;
Если МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда Если ТипДанных = Неопределено Или МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда
Представление = Строка(МестоИспользования.Данные); Представление = Строка(МестоИспользования.Данные);
ИначеЕсли МетаданныеКонстант.Содержит(МестоИспользования.Метаданные) Тогда ИначеЕсли МетаданныеКонстант.Содержит(МестоИспользования.Метаданные) Тогда
@@ -1434,9 +1434,6 @@
ИначеЕсли МетаданныеПоследовательностей.Содержит(МестоИспользования.Метаданные) Тогда ИначеЕсли МетаданныеПоследовательностей.Содержит(МестоИспользования.Метаданные) Тогда
Представление = МестоИспользования.Метаданные.Представление() + " (" + НСтр("ru = 'последовательность'") + ")"; Представление = МестоИспользования.Метаданные.Представление() + " (" + НСтр("ru = 'последовательность'") + ")";
ИначеЕсли ТипДанных = Неопределено Тогда
Представление = Строка(МестоИспользования.Данные);
ИначеЕсли ТипВсеСсылки.СодержитТип(ТипДанных) Тогда ИначеЕсли ТипВсеСсылки.СодержитТип(ТипДанных) Тогда
МетаПредставлениеОбъекта = Новый Структура("ПредставлениеОбъекта"); МетаПредставлениеОбъекта = Новый Структура("ПредставлениеОбъекта");
ЗаполнитьЗначенияСвойств(МетаПредставлениеОбъекта, МестоИспользования.Метаданные); ЗаполнитьЗначенияСвойств(МетаПредставлениеОбъекта, МестоИспользования.Метаданные);
@@ -1593,8 +1590,8 @@
// ПриПоискеЗаменыСсылок с параметрами: // ПриПоискеЗаменыСсылок с параметрами:
// ПарыЗамен - Соответствие - содержит пары значение оригинал/дубль. // ПарыЗамен - Соответствие - содержит пары значение оригинал/дубль.
// НеобработанныеЗначенияОригиналов - Массив из Структура - дополнительная информация об обрабатываемых объектах: // НеобработанныеЗначенияОригиналов - Массив из Структура - дополнительная информация об обрабатываемых объектах:
// * ЗаменяемоеЗначение - ПроизвольнаяСсылка - оригинальное значение заменяемого объекта // * ЗаменяемоеЗначение - ПроизвольнаяСсылка - оригинальное значение заменяемого объекта.
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам // * ИспользуемыеСвязи - см. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам
// * ЗначениеКлючевыхРеквизитов - Структура - где Ключ - имя реквизита, значение - значение реквизита. // * ЗначениеКлючевыхРеквизитов - Структура - где Ключ - имя реквизита, значение - значение реквизита.
// //
// Возвращаемое значение: // Возвращаемое значение:
@@ -1644,6 +1641,29 @@
КонецФункции КонецФункции
// Возвращает связи подчиненных объектов с указанием типа поля связи.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Ключ - Строка
// * ТипРеквизита - Тип
// * ИмяРеквизита - Строка
// * Используется - Булево
// * Метаданные - ОбъектМетаданных
//
Функция СвязиПодчиненныхОбъектовПоТипам() Экспорт
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("ТипРеквизита", Новый ОписаниеТипов("Тип"));
Результат.Колонки.Добавить("ИмяРеквизита", ОписаниеТипаСтрока(0));
Результат.Колонки.Добавить("Ключ", ОписаниеТипаСтрока(0));
Результат.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
Результат.Колонки.Добавить("Метаданные");
Возврат Результат;
КонецФункции
#КонецОбласти #КонецОбласти
#Область УсловныеВызовы #Область УсловныеВызовы
@@ -181,6 +181,19 @@
// * Ключ - Строка - имя параметра, передаваемого на сервер. // * Ключ - Строка - имя параметра, передаваемого на сервер.
// * Значение - Произвольный - значение параметра, передаваемого на сервер. // * Значение - Произвольный - значение параметра, передаваемого на сервер.
// //
// Пример:
// МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Попытка
// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
// МодульЦентрМониторингаКлиентСлужебный = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦентрМониторингаКлиентСлужебный");
// МодульЦентрМониторингаКлиентСлужебный.ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры);
// КонецЕсли;
// Исключение
// СерверныеОповещенияКлиент.ОбработатьОшибку(ИнформацияОбОшибке());
// КонецПопытки;
// СерверныеОповещенияКлиент.ДобавитьПоказатель(МоментНачала,
// "ЦентрМониторингаКлиентСлужебный.ПередПериодическойОтправкойДанныхКлиентаНаСервер");
//
Процедура ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры) Экспорт Процедура ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры) Экспорт
КонецПроцедуры КонецПроцедуры
@@ -198,6 +211,19 @@
// * Ключ - Строка - имя параметра, возвращенного с сервера. // * Ключ - Строка - имя параметра, возвращенного с сервера.
// * Значение - Произвольный - значение параметра, возвращенного с сервера. // * Значение - Произвольный - значение параметра, возвращенного с сервера.
// //
// Пример:
// МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Попытка
// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
// МодульЦентрМониторингаКлиентСлужебный = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦентрМониторингаКлиентСлужебный");
// МодульЦентрМониторингаКлиентСлужебный.ПослеПериодическогоПолученияДанныхКлиентаНаСервере(Результаты);
// КонецЕсли;
// Исключение
// СерверныеОповещенияКлиент.ОбработатьОшибку(ИнформацияОбОшибке());
// КонецПопытки;
// СерверныеОповещенияКлиент.ДобавитьПоказатель(МоментНачала,
// "ЦентрМониторингаКлиентСлужебный.ПослеПериодическогоПолученияДанныхКлиентаНаСервере");
//
Процедура ПослеПериодическогоПолученияДанныхКлиентаНаСервере(Результаты) Экспорт Процедура ПослеПериодическогоПолученияДанныхКлиентаНаСервере(Результаты) Экспорт
КонецПроцедуры КонецПроцедуры
@@ -194,9 +194,9 @@
КонецПроцедуры КонецПроцедуры
// Позволяет задать список подчиненных объектов и их связи с основными объектами // Позволяет задать список подчиненных объектов и их связи с основными объектами.
// Подчиненные объекты рекомендуется использовать, если в процессе замены ссылок // Подчиненные объекты рекомендуется использовать, если в процессе замены ссылок
// нужно создавать часть объектов или подбирать замену из существующих объектов // нужно создавать часть объектов или подбирать замену из существующих объектов.
// //
// Параметры: // Параметры:
// ПодчиненныеОбъекты - см. ОбщегоНазначения.ПодчиненныеОбъекты // ПодчиненныеОбъекты - см. ОбщегоНазначения.ПодчиненныеОбъекты
@@ -379,6 +379,19 @@
// * Ключ - Строка - имя параметра, возвращаемого на клиент. // * Ключ - Строка - имя параметра, возвращаемого на клиент.
// * Значение - Произвольный - значение параметра, возвращаемого на клиент. // * Значение - Произвольный - значение параметра, возвращаемого на клиент.
// //
// Пример:
// МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
// Попытка
// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
// МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный");
// МодульЦентрМониторингаСлужебный.ПриПериодическомПолученииДанныхКлиентаНаСервере(Параметры, Результаты);
// КонецЕсли;
// Исключение
// СерверныеОповещения.ОбработатьОшибку(ИнформацияОбОшибке());
// КонецПопытки;
// СерверныеОповещения.ДобавитьПоказатель(Результаты, МоментНачала,
// "ЦентрМониторингаСлужебный.ПриПериодическомПолученииДанныхКлиентаНаСервере");
//
Процедура ПриПериодическомПолученииДанныхКлиентаНаСервере(Параметры, Результаты) Экспорт Процедура ПриПериодическомПолученииДанныхКлиентаНаСервере(Параметры, Результаты) Экспорт
КонецПроцедуры КонецПроцедуры
@@ -112,260 +112,128 @@
// ** ПриСозданииНаСервере - Булево - если Истина, то в модуле объекта отчета // ** ПриСозданииНаСервере - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. // // См. ОтчетыПереопределяемый.ПриСозданииНаСервере.
// //
// // Параметры:
// // Форма - ФормаКлиентскогоПриложения - форма отчета.
// // Отказ - Булево - признак отказа от создания формы.
// // См. описание одноименного параметра "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
// // СтандартнаяОбработка - Булево - признак выполнения стандартной (системной) обработки события.
// // См. описание одноименного параметра "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
// //
// // См. также:
// // Процедура для вывода добавленных команд в форму: ОтчетыСервер.ВывестиКоманду().
// // Глобальный обработчик этого события: ОтчетыПереопределяемый.ПриСозданииНаСервере().
// //
// // Пример добавления команды:
// // Команда = Форма.Команды.Добавить("<ИмяКоманды>");
// // Команда.Действие = "Подключаемый_Команда";
// // Команда.Заголовок = НСтр("ru = '<Представление команды...>'");
// // ОтчетыСервер.ВывестиКоманду(Форма, Команда, "<ВидГруппы>");
// // Обработчик команды пишется в процедуре ОтчетыКлиентПереопределяемый.ОбработчикКоманды.
// //
// Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт // Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПередЗагрузкойНастроекВКомпоновщик - Булево - если Истина, то в модуле объекта отчета // ** ПередЗагрузкойНастроекВКомпоновщик - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки.
// // Например, если схема отчета зависит от ключа варианта или параметров отчета.
// // Чтобы изменения схемы вступили в силу следует вызывать метод ОтчетыСервер.ПодключитьСхему().
// // В ДополнительныеСвойства параметра НовыеНастройкиКД и свойство Настройки компоновщика настроек
// // объекта включены свойства КлючВарианта, КлючПредопределенногоВарианта, КонтекстВарианта
// // и ФормаПараметрыОтбор.
// //
// // Параметры: // // Параметры:
// // Контекст - Произвольный - // // Контекст - Произвольный
// // Параметры контекста, в котором используется отчет. // // КлючСхемы - Строка
// // Используется для передачи в параметрах метода ОтчетыСервер.ПодключитьСхему(). // // КлючВарианта - Строка, Неопределено
// // КлючСхемы - Строка - // // НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено
// // Идентификатор текущей схемы компоновщика настроек. // // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено
// // По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы).
// // Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже.
// // Может не использоваться если переинициализация выполняется безусловно.
// // КлючВарианта - Строка, Неопределено -
// // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета.
// // Неопределено когда вызов для варианта расшифровки или без контекста.
// // НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено -
// // Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации.
// // Неопределено когда настройки варианта не надо загружать (уже загружены ранее).
// // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено -
// // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации.
// // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее).
// //
// // Примеры:
// // 1. Компоновщик отчета инициализируется на основании схемы из общих макетов:
// // Если КлючСхемы <> "1" Тогда
// // КлючСхемы = "1";
// // СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки");
// // ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы);
// // КонецЕсли;
// //
// // 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета:
// // Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
// // ПолноеИмяОбъектаМетаданных = "";
// // Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл
// // Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
// // ИмяПараметра = Строка(ЭлементКД.Параметр);
// // Если ИмяПараметра = "ОбъектМетаданных" Тогда
// // ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение;
// // КонецЕсли;
// // КонецЕсли;
// // КонецЦикла;
// // Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда
// // КлючСхемы = ПолноеИмяОбъектаМетаданных;
// // СхемаКД = Новый СхемаКомпоновкиДанных;
// // // Наполнение схемы...
// // ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы);
// // КонецЕсли;
// // КонецЕсли;
// // // //
// Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт // Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПослеЗагрузкиНастроекВКомпоновщик - Булево - если Истина, то в модуле объекта отчета // ** ПослеЗагрузкиНастроекВКомпоновщик - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается после загрузки всех настроек в компоновщик.
// // Используется для уточнения, например параметров выбора,
// // зависимых от значений загруженных фиксированных отборов.
// // Структура ДополнительныеСвойства объекта Настройки компоновщика настроек объекта отчета
// // содержит свойства КлючВарианта, КлючПредопределенногоВарианта, КонтекстВарианта,
// // ФормаПараметрыОтбор, заполненные ПередЗагрузкойНастроекВКомпоновщик, а также свойство
// // ВариантНаименование, которое можно изменить для предопределенного варианта отчета.
// //
// // Параметры: // // Параметры:
// // ДополнительныеПараметры - Структура - резерв // // ДополнительныеПараметры - Структура
// // // //
// Процедура ПослеЗагрузкиНастроекВКомпоновщик(ДополнительныеПараметры) Экспорт // Процедура ПослеЗагрузкиНастроекВКомпоновщик(ДополнительныеПараметры) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПередЗагрузкойВариантаНаСервере - Булево - если Истина, то в модуле объекта отчета // ** ПередЗагрузкойВариантаНаСервере - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. // // См. ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере.
// //
// // Параметры:
// // Форма - ФормаКлиентскогоПриложения - Форма отчета.
// // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек.
// //
// // См. ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере().
// //
// Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПриЗагрузкеВариантаНаСервере - Булево - если Истина, то в модуле объекта отчета // ** ПриЗагрузкеВариантаНаСервере - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
// //
// // Параметры: // // Параметры:
// // Форма - ФормаКлиентскогоПриложения - форма отчета. // // Форма - ФормаКлиентскогоПриложения
// // НовыеНастройкиКД - НастройкиКомпоновкиДанных - настройки для загрузки в компоновщик настроек. // // - РасширениеУправляемойФормыДляОтчета:
// // // // * Отчет - ДанныеФормыСтруктура
// // См. синтакс-помощник "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. // // - ОтчетОбъект
// // НовыеНастройкиКД - НастройкиКомпоновкиДанных
// // // //
// Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт // Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПриЗагрузкеПользовательскихНастроекНаСервере - Булево - если Истина, то в модуле объекта отчета // ** ПриЗагрузкеПользовательскихНастроекНаСервере - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
// //
// // Параметры: // // Параметры:
// // Форма - ФормаКлиентскогоПриложения - форма отчета. // // Форма - ФормаКлиентскогоПриложения
// // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - // // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных
// // Пользовательские настройки для загрузки в компоновщик настроек.
// //
// // См. синтакс-помощник "Расширение управляемой формы для отчета.ПриЗагрузкеПользовательскихНастроекНаСервере"
// // в синтакс-помощнике.
// // // //
// Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт // Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПередЗаполнениемПанелиБыстрыхНастроек - Булево - если Истина, то в модуле объекта отчета // ** ПередЗаполнениемПанелиБыстрыхНастроек - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается до перезаполнения панели настроек формы отчета.
// //
// // Параметры: // // Параметры:
// // Форма - ФормаКлиентскогоПриложения - форма отчета. // // Форма - ФормаКлиентскогоПриложения
// // ПараметрыЗаполнения - Структура - параметры, которые будут загружены в отчет. // // ПараметрыЗаполнения - Структура
// // // //
// Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт // Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПослеЗаполненияПанелиБыстрыхНастроек - Булево - если Истина, то в модуле объекта отчета // ** ПослеЗаполненияПанелиБыстрыхНастроек - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Вызывается после перезаполнения панели настроек формы отчета.
// //
// // Параметры: // // Параметры:
// // Форма - ФормаКлиентскогоПриложения - Форма отчета. // // Форма - ФормаКлиентскогоПриложения
// // ПараметрыЗаполнения - Структура - параметры, которые будут загружены в отчет. // // ПараметрыЗаполнения - Структура
// // // //
// Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт // Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПриОпределенииПараметровВыбора - Булево - если Истина, то в модуле объекта отчета // ** ПриОпределенииПараметровВыбора - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// Это устаревшее событие, вместо него рекомендуется применять // // См. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора.
// новое событие ПослеЗагрузкиНастроекВКомпоновщик.
//
// // Вызывается в форме отчета перед выводом настройки.
// //
// // Параметры:
// // Форма - ФормаКлиентскогоПриложения, Неопределено - форма отчета.
// // СвойстваНастройки - Структура - описание настройки отчета, которая будет выведена в форме отчета.
// // * ОписаниеТипов - ОписаниеТипов - тип настройки.
// // * ЗначенияДляВыбора - СписокЗначений - объекты, которые будут предложены пользователю в списке
// // выбора. Дополняет список объектов, уже выбранных пользователем ранее.
// // * ЗапросЗначенийВыбора - Запрос - возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора.
// // Первой колонкой (с 0м индексом) должен выбираться объект,
// // который следует добавить в ЗначенияДляВыбора.Значение.
// // Для отключения автозаполнения
// // в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку.
// // * ОграничиватьВыборУказаннымиЗначениями - Булево - когда Истина, то выбор пользователя будет
// // ограничен значениями, указанными в ЗначенияДляВыбора (его конечным состоянием).
// //
// // См. также:
// // ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора().
// //
// Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт // Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПриОпределенииИспользуемыхТаблиц - Булево - если Истина, то в модуле объекта отчета // ** ПриОпределенииИспользуемыхТаблиц - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Список регистров и других объектов метаданных, по которым формируется отчет.
// // Используется для проверки что отчет может содержать не обновленные данные.
// //
// // Параметры: // // Параметры:
// // КлючВарианта - Строка, Неопределено - // // КлючВарианта - Строка, Неопределено
// // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. // // ИспользуемыеТаблицы - Массив из Строка
// // Неопределено когда вызов для варианта расшифровки или без контекста.
// // ИспользуемыеТаблицы - Массив из Строка -
// // Полные имена объектов метаданных (регистров, документов и других таблиц),
// // данные которых выводятся в отчете.
// //
// // Пример:
// // ИспользуемыеТаблицы.Добавить(Метаданные.Документы.<ИмяДокумента>.ПолноеИмя());
// // // //
// Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт // Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПриОпределенииОсновныхПолей - Булево - если Истина, то в модуле объекта отчета // ** ПриОпределенииОсновныхПолей - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // См. ОтчетыПереопределяемый.ПриОпределенииОсновныхПолей. // // См. ОтчетыПереопределяемый.ПриОпределенииОсновныхПолей.
// //
// Процедура ПриОпределенииОсновныхПолей(Форма, ОсновныеПоля) Экспорт // Процедура ПриОпределенииОсновныхПолей(Форма, ОсновныеПоля) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
// ** ПередФормированиемОтчета - Булево - если Истина, то в модуле объекта отчета // ** ПередФормированиемОтчета - Булево - если Истина, то в модуле объекта отчета
// следует определить обработчик события по шаблону: // следует определить обработчик события по шаблону:
// //
// // Позволяет предупредить пользователя перед формированием отчета,
// // на основе сделанных настроек, например, что отчет будет очень
// // долго формироваться и потребует много памяти.
// // Также позволяет рекомендовать настройку отборов.
// //
// // Параметры: // // Параметры:
// // ФормаОтчета - ФормаКлиентскогоПриложения - форма отчета. // // ФормаОтчета - ФормаКлиентскогоПриложения
// // ДополнительныеПараметры - Структура: // // ДополнительныеПараметры - Структура:
// // * ТекстПредупреждения - Строка - возвращаемое значение, если указать непустую // // * ТекстПредупреждения - Строка
// // строку пользователю будет задан вопрос с указанным текстом и // // * ИмяПараметраХраненияОтказаОтПредупреждения - Строка
// // кнопками Продолжить / Отмена.
// // * ИмяПараметраХраненияОтказаОтПредупреждения - Строка - по умолчанию пусто,
// // если указать, пользователь сможет отказаться от предупреждения.
// // Для возобновления предупреждений нужно установить указанный параметр Ложь.
// // // //
// Процедура Процедура ПередФормированиемОтчета(ФормаОтчета, ДополнительныеПараметры) Экспорт // Процедура Процедура ПередФормированиемОтчета(ФормаОтчета, ДополнительныеПараметры) Экспорт
// // Обработка события. //
// КонецПроцедуры // КонецПроцедуры
// //
Функция НастройкиОтчетаПоУмолчанию() Экспорт Функция НастройкиОтчетаПоУмолчанию() Экспорт
@@ -51,7 +51,8 @@
// Вызывается в форме отчета и в форме настройки отчета перед выводом настройки // Вызывается в форме отчета и в форме настройки отчета перед выводом настройки
// для указания дополнительных параметров выбора. // для указания дополнительных параметров выбора.
// // Это устаревшее событие, вместо него рекомендуется применять событие ПослеЗагрузкиНастроекВКомпоновщик модуля отчета.
//
// Параметры: // Параметры:
// Форма - ФормаКлиентскогоПриложения // Форма - ФормаКлиентскогоПриложения
// - РасширениеУправляемойФормыДляОтчета // - РасширениеУправляемойФормыДляОтчета
@@ -41,9 +41,9 @@
// // В обработчике объекта отчета ПередЗагрузкойНастроекВКомпоновщик компоновщик настроек // // В обработчике объекта отчета ПередЗагрузкойНастроекВКомпоновщик компоновщик настроек
// // инициализируется на основании схемы из общих макетов: // // инициализируется на основании схемы из общих макетов:
// Если КлючСхемы <> "1" Тогда // Если КлючСхемы <> "1" Тогда
// КлючСхемы = "1"; // КлючСхемы = "1";
// Схема = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); // Схема = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки");
// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, Схема, КлючСхемы); // ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, Схема, КлючСхемы);
// КонецЕсли; // КонецЕсли;
// //
Процедура ПодключитьСхему(Отчет, Контекст, Схема, КлючСхемы) Экспорт Процедура ПодключитьСхему(Отчет, Контекст, Схема, КлючСхемы) Экспорт
@@ -558,26 +558,10 @@
#Область ЗаменаДублейВКлючахАналитики #Область ЗаменаДублейВКлючахАналитики
// Возвращает связи подчиненных объектов с указанием типа поля связи. // См. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Ключ - Строка
// * ТипРеквизита - Тип
// * ИмяРеквизита - Строка
// * Используется - Булево
// * Метаданные - ОбъектМетаданных
//
Функция СвязиПодчиненныхОбъектовПоТипам() Экспорт Функция СвязиПодчиненныхОбъектовПоТипам() Экспорт
СвязиПодчиненныхОбъектовПоТипам = Новый ТаблицаЗначений; Возврат ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам();
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ТипРеквизита", Новый ОписаниеТипов("Тип"));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ИмяРеквизита", ОбщегоНазначения.ОписаниеТипаСтрока(0));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Ключ", ОбщегоНазначения.ОписаниеТипаСтрока(0));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Метаданные");
Возврат СвязиПодчиненныхОбъектовПоТипам;
КонецФункции КонецФункции
@@ -287,13 +287,16 @@
// Поддерживается вызов из сеанса без установленных разделителей (без обращения к базе данных). // Поддерживается вызов из сеанса без установленных разделителей (без обращения к базе данных).
// //
// Параметры: // Параметры:
// ПользовательИБ - ПользовательИнформационнойБазы // ПользовательИБ - ПользовательИнформационнойБазы
// Интерактивно - Булево - когда Истина, тогда не учитываются права, например, ВнешнееСоединение, Automation. // Интерактивно - Булево - когда Истина, тогда не учитываются права,
// например, ВнешнееСоединение, Automation.
// ТолькоПраваНаЗапуск - Булево - если Истина, тогда проверяется только наличие прав на запуск,
// если Ложь, тогда проверяться еще и наличие минимальных прав для входа.
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево // Булево
// //
Функция ЕстьПраваДляВходаВПрограмму(ПользовательИБ, Интерактивно = Истина) Экспорт Функция ЕстьПраваДляВходаВПрограмму(ПользовательИБ, Интерактивно = Истина, ТолькоПраваНаЗапуск = Истина) Экспорт
Результат = Результат =
ПравоДоступа("ТонкийКлиент", Метаданные, ПользовательИБ) ПравоДоступа("ТонкийКлиент", Метаданные, ПользовательИБ)
@@ -307,6 +310,13 @@
Или ПравоДоступа("ВнешнееСоединение", Метаданные, ПользовательИБ); Или ПравоДоступа("ВнешнееСоединение", Метаданные, ПользовательИБ);
КонецЕсли; КонецЕсли;
Если Не ТолькоПраваНаЗапуск Тогда
// АПК:515-выкл - №737.4 проверка роли, так как это признак минимальных прав для входа.
Результат = Результат И РолиДоступны("БазовыеПраваБСП,
|БазовыеПраваВнешнихПользователейБСП", ПользовательИБ, Ложь);
// АПК:515-вкл
КонецЕсли;
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции
@@ -1473,7 +1473,7 @@
Обработчик.Процедура = "Константы.ИспользоватьГруппыВнешнихПользователей.Обновить"; Обработчик.Процедура = "Константы.ИспользоватьГруппыВнешнихПользователей.Обновить";
Обработчик = Обработчики.Добавить(); Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.8.31"; Обработчик.Версия = "3.1.8.289";
Обработчик.РежимВыполнения = "Оперативно"; Обработчик.РежимВыполнения = "Оперативно";
Обработчик.Процедура = "РегистрыСведений.СведенияОПользователях.ОбновитьСведенияОПользователяхИОтключитьАутентификацию"; Обработчик.Процедура = "РегистрыСведений.СведенияОПользователях.ОбновитьСведенияОПользователяхИОтключитьАутентификацию";
Обработчик.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Обработчик.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
@@ -163,7 +163,12 @@
КонецЕсли; КонецЕсли;
Если ПараметрыРаботыКлиента.Свойство("ЗадатьВопросПроОтключениеOpenIDConnect") Тогда Если ПараметрыРаботыКлиента.Свойство("ЗадатьВопросПроОтключениеOpenIDConnect") Тогда
ПодключитьОбработчикОжидания("ЗадатьВопросПроОтключениеOpenIDConnectОбработчикОжидания", 1, Истина); ОповещениеНажатия = Новый ОписаниеОповещения("ЗадатьВопросПроОтключениеOpenIDConnect", ЭтотОбъект);
ЗаголовокСообщения = НСтр("ru = 'Предупреждение безопасности'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отключите аутентификацию %1, если не используется.'"), "OpenID-Connect");
ПоказатьОповещениеПользователя(ЗаголовокСообщения, ОповещениеНажатия,
ТекстСообщения, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -233,7 +238,7 @@
КонецПроцедуры КонецПроцедуры
// Предлагает отключить аутентификацию OpenID-Connect после запуска. // Предлагает отключить аутентификацию OpenID-Connect после запуска.
Процедура ЗадатьВопросПроОтключениеOpenIDConnect() Экспорт Процедура ЗадатьВопросПроОтключениеOpenIDConnect(Контекст) Экспорт
ОбработкаЗавершения = Новый ОписаниеОповещения( ОбработкаЗавершения = Новый ОписаниеОповещения(
"ЗадатьВопросПроОтключениеOpenIDConnectЗавершение", ЭтотОбъект); "ЗадатьВопросПроОтключениеOpenIDConnectЗавершение", ЭтотОбъект);
@@ -249,8 +254,7 @@
Кнопки.Добавить("НапомнитьПозже", НСтр("ru = 'Напомнить позже'")); Кнопки.Добавить("НапомнитьПозже", НСтр("ru = 'Напомнить позже'"));
ДополнительныеПараметры = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); ДополнительныеПараметры = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ДополнительныеПараметры.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ДополнительныеПараметры.Заголовок = НСтр("ru = 'Предупреждение безопасности'");
НСтр("ru = 'Аутентификация по протоколу %1'"), "OpenID-Connect");
ДополнительныеПараметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; ДополнительныеПараметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработкаЗавершения, СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработкаЗавершения,
@@ -231,9 +231,7 @@
Процедура ПроверитьНомерОбъектаПоДате(Объект) Процедура ПроверитьНомерОбъектаПоДате(Объект)
Если Объект.ОбменДанными.Загрузка Тогда Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -264,9 +262,7 @@
Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект) Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)
Если Объект.ОбменДанными.Загрузка Тогда Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -281,11 +277,7 @@
Процедура ПроверитьКодОбъектаПоОрганизации(Объект) Процедура ПроверитьКодОбъектаПоОрганизации(Объект)
Если Объект.ОбменДанными.Загрузка Тогда Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Или Не РеквизитОрганизацияДоступен(Объект) Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Возврат;
ИначеЕсли Не РеквизитОрганизацияДоступен(Объект) Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -530,16 +530,16 @@
Уровни = Новый Соответствие; Уровни = Новый Соответствие;
Уровни.Вставить("AREA", 1); Уровни.Вставить("AREA", 1);
Уровни.Вставить("DISTRICT", 2); Уровни.Вставить("DISTRICT", 2);
Уровни.Вставить("MUNDISTRICT", 3); Уровни.Вставить("MUNDISTRICT", 3);
Уровни.Вставить("SETTLEMENT", 4); Уровни.Вставить("SETTLEMENT", 4);
Уровни.Вставить("CITY", 5); Уровни.Вставить("CITY", 5);
Уровни.Вставить("LOCALITY", 6); Уровни.Вставить("LOCALITY", 6);
Уровни.Вставить("TERRITORY", 7); Уровни.Вставить("TERRITORY", 7);
Уровни.Вставить("STREET", 8); Уровни.Вставить("STREET", 8);
Возврат Уровни[ИмяУровня]; Возврат Уровни[ВРег(ИмяУровня)];
КонецФункции КонецФункции
@@ -589,10 +589,10 @@
// //
Функция ОповещатьОНеобходимостиОбновленияКурсовВалют() Функция ОповещатьОНеобходимостиОбновленияКурсовВалют()
Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда // В модели сервиса обновляются автоматически.
Возврат Ложь; // В модели сервиса обновляются автоматически. Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто()
ИначеЕсли Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда Или Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда
Возврат Ложь; // Пользователь не может обновлять курсы валют. Возврат Ложь;
КонецЕсли; КонецЕсли;
ВключитьОповещение = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела"); ВключитьОповещение = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела");
@@ -189,6 +189,7 @@
РаботаСФайламиСлужебный.ЗанятьФайлДляРедактированияСервер(ФайлОбъект); РаботаСФайламиСлужебный.ЗанятьФайлДляРедактированияСервер(ФайлОбъект);
КонецЕсли; КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
СсылкаНаДвоичныеДанныеФайла = Неопределено; СсылкаНаДвоичныеДанныеФайла = Неопределено;
@@ -1815,7 +1816,7 @@
КонецЦикла; КонецЦикла;
Запрос = Новый Запрос(СтрСоединить(ТекстыЗапроса, "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС)); // @query-part Запрос = Новый Запрос(СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС)); // @query-part
Запрос.УстановитьПараметр("ВладелецФайла", Источник.Ссылка); Запрос.УстановитьПараметр("ВладелецФайла", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
@@ -100,21 +100,17 @@
// //
// Параметры: // Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// - Структура - элемент // - см. См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла - элемент справочника
// справочника присоединенных файлов, данные которого сохраняются // присоединенных файлов, данные которого сохраняются в том
// в том, или структура со свойствами, необходимыми для сохранения // или структура со свойствами, необходимыми для сохранения данных в том.
// данных в том.
// Свойства структуры: См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла.
// ДвоичныеДанныеИлиПуть - ДвоичныеДанные // ДвоичныеДанныеИлиПуть - ДвоичныеДанные
// - Строка - двоичные данные файла или полный путь // - Строка - двоичные данные файла или полный путь к файлу на диске.
// к файлу на диске.
// ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса. // ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса.
// ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные // ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные
// файла будут дополнительно помещены в служебный реквизит ФайлХранилище. // файла будут дополнительно помещены в служебный реквизит ФайлХранилище.
// ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов // ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов
// - Неопределено - если параметр // - Неопределено - если параметр заполнен, файлы будут принудительно помещаться в указанный том,
// заполнен, файлы будут принудительно помещаться в указанный том, // иначе том будет выбран автоматически.
// иначе - том будет выбран автоматически.
// //
Процедура ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть, Процедура ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть,
ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь, ТомДляРазмещения = Неопределено) Экспорт ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь, ТомДляРазмещения = Неопределено) Экспорт
@@ -137,21 +133,17 @@
// //
// Параметры: // Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// - Структура - элемент // - см. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла - элемент справочника
// справочника присоединенных файлов, данные которого сохраняются // присоединенных файлов, данные которого сохраняются
// в том, или структура со свойствами, необходимыми для сохранения // в том, или структура со свойствами, необходимыми для сохранения данных в том.
// данных в том.
// Свойства структуры: См. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла.
// ДвоичныеДанныеИлиПуть - ДвоичныеДанные // ДвоичныеДанныеИлиПуть - ДвоичныеДанные
// - Строка - двоичные данные файла или полный путь // - Строка - двоичные данные файла или полный путь к файлу на диске.
// к файлу на диске.
// ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса. // ДатаДляРазмещенияВТоме - Дата - если не указано, то используется текущее время сеанса.
// ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные // ЗаполнятьСлужебныйРеквизитХранилище - Булево - если параметр принимает значение Истина, двоичные данные
// файла будут дополнительно помещены в служебный реквизит ФайлХранилище. // файла будут дополнительно помещены в служебный реквизит ФайлХранилище.
// ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов // ТомДляРазмещения - СправочникСсылка.ТомаХраненияФайлов
// - Неопределено - если параметр // - Неопределено - если параметр заполнен, файлы будут принудительно помещаться в указанный том,
// заполнен, файлы будут принудительно помещаться в указанный том, // иначе том будет выбран автоматически.
// иначе - том будет выбран автоматически.
// //
Процедура ЗаполнитьСведенияОФайле(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть, Процедура ЗаполнитьСведенияОФайле(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть,
ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь) Экспорт ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь) Экспорт
@@ -196,7 +188,6 @@
ПрисоединенныйФайл.Расширение = СтрЗаменить(ПрисоединенныйФайл.Расширение, ".", ""); ПрисоединенныйФайл.Расширение = СтрЗаменить(ПрисоединенныйФайл.Расширение, ".", "");
КонецЕсли; КонецЕсли;
РазмерФайла = ПрисоединенныйФайл.Размер;
ТипХраненияФайла = ПрисоединенныйФайл.ТипХраненияФайла; ТипХраненияФайла = ПрисоединенныйФайл.ТипХраненияФайла;
Если НЕ ЗначениеЗаполнено(ТипХраненияФайла) Тогда Если НЕ ЗначениеЗаполнено(ТипХраненияФайла) Тогда
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Расширение); ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Расширение);
@@ -224,18 +215,7 @@
Иначе Иначе
ТомХранения = СвободныйТом(РазмерФайла); ПрисоединенныйФайл.Том = СвободныйТом(ПрисоединенныйФайл);
Если ТомХранения = Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. в томах недостаточно места.'"),
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ПрисоединенныйФайл.Том = ТомХранения;
ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
СвойстваФайла = СвойстваФайлаВТоме(); СвойстваФайла = СвойстваФайлаВТоме();
@@ -245,7 +225,7 @@
ПрисоединенныйФайл.Владелец, "ВладелецФайла"); ПрисоединенныйФайл.Владелец, "ВладелецФайла");
КонецЕсли; КонецЕсли;
ПутьКТому = ПолныйПутьТома(ТомХранения); ПутьКТому = ПолныйПутьТома(ПрисоединенныйФайл.Том);
ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла, ДатаДляРазмещенияВТоме); ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла, ДатаДляРазмещенияВТоме);
ПрисоединенныйФайл.ПутьКФайлу = Сред(ПутьКФайлу, СтрДлина(ПутьКТому) + 1); ПрисоединенныйФайл.ПутьКФайлу = Сред(ПутьКФайлу, СтрДлина(ПутьКТому) + 1);
@@ -734,19 +714,21 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Возвращает соответствие томов и суммарных размеров всех файлов в томе в байтах. // Возвращает размеры всех файлов в каждом указанном томе в байтах.
// //
// Параметры: // Параметры:
// Тома - Массив из СправочникСсылка.ТомаХраненияФайлов - том, размер которого необходимо посчитать. // Тома - Массив из СправочникСсылка.ТомаХраненияФайлов
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие - размер томов . // Соответствие из КлючЗначение:
// * Ключ - СправочникСсылка.ТомаХраненияФайлов
// * Значение - Число
// //
Функция ОбъемыТомов(Тома) Функция ОбъемыТомов(Тома)
Результат = Новый Соответствие; Результат = Новый Соответствие;
Для Каждого Том Из Тома Цикл Для Каждого Том Из Тома Цикл
Результат.Вставить(Том, 0); Результат[Том] = 0;
КонецЦикла; КонецЦикла;
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
@@ -754,8 +736,9 @@
КонецЕсли; КонецЕсли;
ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();
ТекстыЗапросов = Новый Массив;
ТекстЗапросаПрисоединенныхФайлов = ТекстЗапроса =
"ВЫБРАТЬ "ВЫБРАТЬ
| Версии.Том КАК Том, | Версии.Том КАК Том,
| ЕСТЬNULL(Версии.Размер, 0) КАК РазмерФайлов | ЕСТЬNULL(Версии.Размер, 0) КАК РазмерФайлов
@@ -763,6 +746,15 @@
| Справочник.ВерсииФайлов КАК Версии | Справочник.ВерсииФайлов КАК Версии
|ГДЕ |ГДЕ
| Версии.Том В (&Тома)"; | Версии.Том В (&Тома)";
ТекстыЗапросов.Добавить(ТекстЗапроса);
ШаблонаТекстаЗапроса = "ВЫБРАТЬ
| ПрисоединенныеФайлы.Том,
| ЕСТЬNULL(ПрисоединенныеФайлы.Размер, 0)
|ИЗ
| &ИмяСправочника КАК ПрисоединенныеФайлы
|ГДЕ
| ПрисоединенныеФайлы.Том В (&Тома)";
Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл
@@ -777,38 +769,26 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
ТекстЗапросаПоСправочнику = "ВЫБРАТЬ ТекстыЗапросов.Добавить(СтрЗаменить(ШаблонаТекстаЗапроса, "&ИмяСправочника",
| ПрисоединенныеФайлы.Том, Метаданные.НайтиПоТипу(Тип).ПолноеИмя()));
| ЕСТЬNULL(ПрисоединенныеФайлы.Размер, 0)
|ИЗ
| &ИмяСправочника КАК ПрисоединенныеФайлы
|ГДЕ
| ПрисоединенныеФайлы.Том В (&Тома)";
ТекстЗапросаПрисоединенныхФайлов = ТекстЗапросаПрисоединенныхФайлов + "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|" + СтрЗаменить(ТекстЗапросаПоСправочнику, "&ИмяСправочника",
Метаданные.НайтиПоТипу(Тип).ПолноеИмя());
КонецЦикла; КонецЦикла;
Запрос = Новый Запрос; ТекстЗапроса =
Запрос.Текст = "ВЫБРАТЬ "ВЫБРАТЬ
| ВложенныйЗапрос.Том, | ВложенныйЗапрос.Том,
| СУММА(ВложенныйЗапрос.РазмерФайлов) КАК РазмерФайлов | СУММА(ВложенныйЗапрос.РазмерФайлов) КАК РазмерФайлов
|ИЗ |ИЗ
| &ТекстЗапросаПрисоединенныхФайлов КАК ВложенныйЗапрос | &ТекстЗапросаПрисоединенныхФайлов КАК ВложенныйЗапрос
|СГРУППИРОВАТЬ ПО |СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Том"; | ВложенныйЗапрос.Том";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПрисоединенныхФайлов",
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТекстЗапросаПрисоединенныхФайлов", ТекстЗапросаПрисоединенныхФайлов); "(" + СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + ")"); // @query-part
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.Параметры.Вставить("Тома", Тома); Запрос.Параметры.Вставить("Тома", Тома);
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
Результат.Вставить(Выборка.Том, Выборка.РазмерФайлов); Результат[Выборка.Том] = Выборка.РазмерФайлов;
КонецЦикла; КонецЦикла;
Возврат Результат; Возврат Результат;
@@ -834,8 +814,7 @@
// Параметры: // Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// ДвоичныеДанныеИлиПуть - ДвоичныеДанные // ДвоичныеДанныеИлиПуть - ДвоичныеДанные
// - Строка - двоичные данные файла или полный путь // - Строка - двоичные данные файла или полный путь к файлу на диске.
// к файлу на диске.
// //
Процедура ЗаписатьДанныеФайлаВТом(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть) Процедура ЗаписатьДанныеФайлаВТом(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть)
@@ -1934,15 +1913,16 @@
КонецФункции КонецФункции
// Возвращает первый том по порядку заполнения, в который можно поместить файл указанного размера. // Возвращает первый том по порядку заполнения, в который можно поместить указанный файл.
// //
// Параметры: // Параметры:
// РазмерФайла - Число - размер помещаемого файла в байтах. // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// - см. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла
// //
// Возвращаемое значение: // Возвращаемое значение:
// СправочникСсылка.ТомаХраненияФайлов - том, в который можно поместить файл. // СправочникСсылка.ТомаХраненияФайлов
// //
Функция СвободныйТом(РазмерФайла) Функция СвободныйТом(ПрисоединенныйФайл)
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
@@ -1959,33 +1939,40 @@
|УПОРЯДОЧИТЬ ПО |УПОРЯДОЧИТЬ ПО
| ТомаХраненияФайлов.ПорядокЗаполнения"; | ТомаХраненияФайлов.ПорядокЗаполнения";
Результат = Запрос.Выполнить(); Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда Если Результат.Пустой() Тогда
ВызватьИсключение НСтр("ru = 'Нет ни одного тома для размещения файла.'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл ""%1"",
|т.к. не настроено ни одного тома для хранения файлов.
|Обратитесь к администратору.'"),
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение);
КонецЕсли; КонецЕсли;
МассивТомов = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); ТомаХраненияФайлов = Результат.Выгрузить();
ОбъемыТомов = Неопределено; ОбъемыТомов = Неопределено;
ВыборкаТомов = Результат.Выбрать(); Для каждого ТомХраненияФайлов Из ТомаХраненияФайлов Цикл
Пока ВыборкаТомов.Следующий() Цикл
Если ВыборкаТомов.МаксимальныйРазмер = 0 Тогда Если ТомХраненияФайлов.МаксимальныйРазмер = 0 Тогда
Возврат ВыборкаТомов.Ссылка; Возврат ТомХраненияФайлов.Ссылка;
Иначе КонецЕсли;
Если ОбъемыТомов = Неопределено Тогда
// @skip-check query-in-loop - Разовый вызов Если ОбъемыТомов = Неопределено Тогда
ОбъемыТомов = ОбъемыТомов(МассивТомов); // @skip-check query-in-loop - Разовый вызов
КонецЕсли; ОбъемыТомов = ОбъемыТомов(ТомаХраненияФайлов.ВыгрузитьКолонку("Ссылка"));
ОбъемТома = ОбъемыТомов[ВыборкаТомов.Ссылка]; КонецЕсли;
Если ОбъемТома + РазмерФайла <= ВыборкаТомов.МаксимальныйРазмер * 1024 * 1024 Тогда ОбъемТома = ОбъемыТомов[ТомХраненияФайлов.Ссылка];
Возврат ВыборкаТомов.Ссылка; Если ОбъемТома + ПрисоединенныйФайл.Размер <= ТомХраненияФайлов.МаксимальныйРазмер * 1024 * 1024 Тогда
КонецЕсли; Возврат ТомХраненияФайлов.Ссылка;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Возврат Неопределено; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл ""%1"",
|т.к. в томах хранения файлов недостаточно места.
|Обратитесь к администратору.'"),
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение);
ВызватьИсключение ТекстОшибки;
КонецФункции КонецФункции
@@ -8877,15 +8877,8 @@
ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'"); ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'");
ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись); ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись);
ДеревоФайловСервера = Новый ДеревоЗначений; ДеревоФайловСервера = СформироватьСтруктуруДереваФайловСервера();
ДеревоФайловСервера.Колонки.Добавить("Href");
ДеревоФайловСервера.Колонки.Добавить("UID1C");
ДеревоФайловСервера.Колонки.Добавить("Etag");
ДеревоФайловСервера.Колонки.Добавить("ИмяФайла");
ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка");
ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации");
ДеревоФайловСервера.Колонки.Добавить("Длина");
Попытка Попытка
Отказ = Ложь; Отказ = Ложь;
@@ -656,8 +656,7 @@
// *** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище. // *** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
// *** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). // *** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
// *** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. // *** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.
// ** АдресОтвета - Соответствие // ** АдресОтвета - Строка - E-mail адрес, на который будут приходить ответы на рассылку.
// - Строка - см. описание поля Кому.
// ** ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. // ** ИдентификаторыОснований - Строка - идентификаторы оснований данного письма.
// ** ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // ** ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке.
// ** УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. // ** УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке.
@@ -1560,6 +1559,12 @@
ТипПолучателей = Рассылка.ТипПолучателейРассылки.КлючОбъектаМетаданных.Получить(); ТипПолучателей = Рассылка.ТипПолучателейРассылки.КлючОбъектаМетаданных.Получить();
ТаблицаПолучателей = Рассылка.Получатели.Выгрузить(); ТаблицаПолучателей = Рассылка.Получатели.Выгрузить();
КонецЕсли; КонецЕсли;
МассивПолучателей = Новый Массив;
Если ПолучателиМетаданные = Неопределено Или ПолучателиМетаданные = Null Тогда
Возврат МассивПолучателей;
КонецЕсли;
Запрос = Новый Запрос; Запрос = Новый Запрос;
Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда
@@ -1646,9 +1651,6 @@
ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по причине:'"), Строка(ТипПолучателей)); НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по причине:'"), Строка(ТипПолучателей));
МассивПолучателей = Новый Массив;
// Механизм расширения // Механизм расширения
СписокПолучателей = Новый Соответствие; СписокПолучателей = Новый Соответствие;
Попытка Попытка
@@ -1818,9 +1820,8 @@
// Определить, что отчет реализован на базе системы компоновки данных. // Определить, что отчет реализован на базе системы компоновки данных.
Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
ПараметрыОтчета.СКД = Истина; ПараметрыОтчета.СКД = Истина;
ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ТаблицаЗначений") Тогда ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ТаблицаЗначений")
ПараметрыОтчета.СКД = Ложь; Или ТипЗнч(ПараметрыОтчета.Настройки) = Тип("Структура") Тогда
ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("Структура") Тогда
ПараметрыОтчета.СКД = Ложь; ПараметрыОтчета.СКД = Ложь;
Иначе Иначе
ПараметрыОтчета.СКД = (ПараметрыОтчета.Объект.СхемаКомпоновкиДанных <> Неопределено); ПараметрыОтчета.СКД = (ПараметрыОтчета.Объект.СхемаКомпоновкиДанных <> Неопределено);
@@ -3094,8 +3095,13 @@
КонецЕсли; КонецЕсли;
Если ПараметрыДоставки.Получатель <> Неопределено Тогда Если ПараметрыДоставки.Получатель <> Неопределено Тогда
Если ПараметрыДоставки.СкрытыеКопии Тогда
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии);
Иначе
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому);
КонецЕсли;
Для Каждого Кому Из АдресаПолучателя Цикл Для Каждого Кому Из АдресаПолучателя Цикл
ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель) + " (" + Кому.Адрес + ")"; ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель) + " (" + Кому.Адрес + ")";
@@ -3203,30 +3209,52 @@
Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст;
Иначе Иначе
Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыДоставки.Получатель) Тогда Если ЗначениеЗаполнено(ПараметрыДоставки.Получатель) Тогда
ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель); ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель);
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); Если ПараметрыДоставки.СкрытыеКопии Тогда
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии);
ИмяТаблицыПолучателей = "ПолучателиСкрытыхКопий";
Иначе
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому);
ИмяТаблицыПолучателей = "Получатели";
КонецЕсли;
Для Каждого Кому Из АдресаПолучателя Цикл Для Каждого Кому Из АдресаПолучателя Цикл
НоваяСтрока = Сообщение.Получатели.Добавить(); НоваяСтрока = Сообщение[ИмяТаблицыПолучателей].Добавить();
НоваяСтрока.Адрес = Кому.Адрес; НоваяСтрока.Адрес = Кому.Адрес;
НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")"; НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")";
НоваяСтрока.ИсточникКонтактнойИнформации = ПараметрыДоставки.Получатель; НоваяСтрока.ИсточникКонтактнойИнформации = ПараметрыДоставки.Получатель;
КонецЦикла; КонецЦикла;
Иначе
Иначе
Если ПараметрыДоставки.СкрытыеКопии Тогда
ИмяТаблицыПолучателей = "ПолучателиСкрытыхКопий";
Иначе
ИмяТаблицыПолучателей = "Получатели";
КонецЕсли;
Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл
ПредставлениеПолучателя = Строка(Получатель.Ключ); ПредставлениеПолучателя = Строка(Получатель.Ключ);
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение);
Для Каждого Кому Из АдресаПолучателя Цикл Для Каждого Кому Из АдресаПолучателя Цикл
НоваяСтрока = Сообщение.Получатели.Добавить(); НоваяСтрока = Сообщение[ИмяТаблицыПолучателей].Добавить();
НоваяСтрока.Адрес = Кому.Адрес; НоваяСтрока.Адрес = Кому.Адрес;
НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")"; НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")";
НоваяСтрока.ИсточникКонтактнойИнформации = Получатель.Ключ; НоваяСтрока.ИсточникКонтактнойИнформации = Получатель.Ключ;
КонецЦикла; КонецЦикла;
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыПисьма.АдресОтвета) Тогда
НоваяСтрока = Сообщение.ПолучателиОтвета.Добавить();
НоваяСтрока.Адрес = ПараметрыПисьма.АдресОтвета;
НоваяСтрока.Представление = ПараметрыПисьма.АдресОтвета;
КонецЕсли;
Для Каждого Картинка Из ПараметрыДоставки.Картинки Цикл Для Каждого Картинка Из ПараметрыДоставки.Картинки Цикл
СтрокаВложение = Сообщение.Вложения.Добавить(); СтрокаВложение = Сообщение.Вложения.Добавить();
ФайлКартинка = Картинка.Значение.ПолучитьДвоичныеДанные(); ФайлКартинка = Картинка.Значение.ПолучитьДвоичныеДанные();
@@ -381,8 +381,7 @@
// ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). // ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
// ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. // ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.
// //
// * АдресОтвета - Соответствие // * АдресОтвета - Строка - E-mail адрес, на который будут приходить ответы на рассылку.
// - Строка - см. описание поля Кому.
// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. // * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма.
// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. // * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке.
// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. // * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке.
@@ -355,11 +355,19 @@
НаборЗаписей.Записать(); НаборЗаписей.Записать();
Если ЗапуститьДоставкуСОтсрочкой Тогда Если ЗапуститьДоставкуСОтсрочкой Тогда
Если ЗначениеЗаполнено(ДополнительныеПараметры.СобытиеЖурналаПриОтсрочкеДоставки) Тогда Запущено = Ложь;
ЗапуститьДоставкуСерверныхОповещенийСОтсрочкой(Запущено);
Если Запущено И ЗначениеЗаполнено(ДополнительныеПараметры.СобытиеЖурналаПриОтсрочкеДоставки) Тогда
Попытка
ВызватьИсключение НСтр("ru = 'Стек вызовов:'");
Исключение
СтекВызовов = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Комментарий = ДополнительныеПараметры.КомментарийЖурналаПриОтсрочкеДоставки;
Комментарий = Комментарий + ?(ЗначениеЗаполнено(Комментарий), Символы.ПС, "") + СтекВызовов;
ЗаписьЖурналаРегистрации(ДополнительныеПараметры.СобытиеЖурналаПриОтсрочкеДоставки, ЗаписьЖурналаРегистрации(ДополнительныеПараметры.СобытиеЖурналаПриОтсрочкеДоставки,
УровеньЖурналаРегистрации.Информация,,, ДополнительныеПараметры.КомментарийЖурналаПриОтсрочкеДоставки); УровеньЖурналаРегистрации.Информация,,, Комментарий);
КонецЕсли; КонецЕсли;
ЗапуститьДоставкуСерверныхОповещенийСОтсрочкой();
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -1696,10 +1704,12 @@
КонецПроцедуры КонецПроцедуры
// Для процедуры ОтправитьСерверноеОповещениеСИдентификаторомГруппы. // Для процедуры ОтправитьСерверноеОповещениеСИдентификаторомГруппы.
Процедура ЗапуститьДоставкуСерверныхОповещенийСОтсрочкой() Процедура ЗапуститьДоставкуСерверныхОповещенийСОтсрочкой(Запущено = Ложь)
Если Не ТекущийПользовательЗарегистрированВСистемеВзаимодействия() Если Не ТекущийПользовательЗарегистрированВСистемеВзаимодействия()
Или ОбщегоНазначения.ИнформационнаяБазаФайловая() // Запуск не имеет смысла, так как новое задание будет ждать задание длительной операции. Или ОбщегоНазначения.ИнформационнаяБазаФайловая() // Запуск не имеет смысла, так как новое задание будет ждать задание длительной операции.
Или МонопольныйРежим() // Запуск недопустим, так изменения в сеансе будут заблокированы.
Или ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()
Или ДоставкаСерверныхОповещенийСОтсрочкойУжеВыполняется() Тогда Или ДоставкаСерверныхОповещенийСОтсрочкойУжеВыполняется() Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -1715,6 +1725,8 @@
ФоновыеЗадания.Выполнить(ИмяМетодаЗаданияДоставкиСерверныхОповещенийСОтсрочкой(),,, НаименованиеЗадания); ФоновыеЗадания.Выполнить(ИмяМетодаЗаданияДоставкиСерверныхОповещенийСОтсрочкой(),,, НаименованиеЗадания);
Запущено = Истина;
КонецПроцедуры КонецПроцедуры
// Обработчик фонового задания. // Обработчик фонового задания.
@@ -10,19 +10,7 @@
Процедура ОбработчикПроверкиПолученияСерверныхОповещений() Экспорт Процедура ОбработчикПроверкиПолученияСерверныхОповещений() Экспорт
СостояниеПолучения = СерверныеОповещенияКлиент.СостояниеПолучения(); СерверныеОповещенияКлиент.ПроверитьПолучитьСерверныеОповещения();
Если СостояниеПолучения.ПроверкаВыполняется Тогда
Возврат;
КонецЕсли;
СостояниеПолучения.ПроверкаВыполняется = Истина;
Попытка
СерверныеОповещенияКлиент.ПроверитьПолучитьСерверныеОповещения();
СостояниеПолучения.ПроверкаВыполняется = Ложь;
Исключение
СостояниеПолучения.ПроверкаВыполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры КонецПроцедуры
@@ -139,7 +139,7 @@
Интервал = 60; Интервал = 60;
КонецЕсли; КонецЕсли;
ПодключитьОбработчикОжидания("ОбработчикПроверкиПолученияСерверныхОповещений", Интервал, Истина); ПодключитьОбработчикОжидания("ОбработчикПроверкиПолученияСерверныхОповещений", Интервал);
КонецПроцедуры КонецПроцедуры
@@ -219,6 +219,7 @@
Интервал = СостояниеПолучения.МинимальныйПериод; Интервал = СостояниеПолучения.МинимальныйПериод;
ОбсужденияАктивны = СостояниеПолучения.СистемаВзаимодействийПодключена ОбсужденияАктивны = СостояниеПолучения.СистемаВзаимодействийПодключена
И СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен И СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен
И СостояниеПолучения.ПериодическаяОтправкаДанныхРазрешена
И СостояниеПолучения.ДатаПоследнегоПолученияСообщения + 60 > ТекущаяДатаСеанса; И СостояниеПолучения.ДатаПоследнегоПолученияСообщения + 60 > ТекущаяДатаСеанса;
МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
@@ -535,7 +536,7 @@
КонецФункции КонецФункции
// См. НовоеСостояниеПолучения // См. НовоеСостояниеПолучения
Функция СостояниеПолучения() Экспорт Функция СостояниеПолучения()
ИмяПараметраПриложения = "СтандартныеПодсистемы.БазоваяФункциональность.СерверныеОповещения"; ИмяПараметраПриложения = "СтандартныеПодсистемы.БазоваяФункциональность.СерверныеОповещения";
СостояниеПолучения = ПараметрыПриложения.Получить(ИмяПараметраПриложения); СостояниеПолучения = ПараметрыПриложения.Получить(ИмяПараметраПриложения);
@@ -572,7 +573,6 @@
// * СеансАдминистратораСервиса - Булево // * СеансАдминистратораСервиса - Булево
// * ПериодическаяОтправкаДанныхРазрешена - Булево - устанавливается Истина в процедуре ПослеНачалаРаботыСистемы. // * ПериодическаяОтправкаДанныхРазрешена - Булево - устанавливается Истина в процедуре ПослеНачалаРаботыСистемы.
// * МинимальныйИнтервалПериодическойОтправкиДанных - см. СерверныеОповещения.МинимальныйИнтервалПериодическойОтправкиДанных // * МинимальныйИнтервалПериодическойОтправкиДанных - см. СерверныеОповещения.МинимальныйИнтервалПериодическойОтправкиДанных
// * ПроверкаВыполняется - Булево
// * КлючСеанса - см. СерверныеОповещения.КлючСеанса // * КлючСеанса - см. СерверныеОповещения.КлючСеанса
// * ИдентификаторПользователяИБ - УникальныйИдентификатор // * ИдентификаторПользователяИБ - УникальныйИдентификатор
// * ДатаОбновленияСостояния - Дата // * ДатаОбновленияСостояния - Дата
@@ -595,8 +595,6 @@
// обсуждения "СерверныеОповещения". // обсуждения "СерверныеОповещения".
// * ОбработчикНовыхЛичныхСообщенийПодключен - Булево // * ОбработчикНовыхЛичныхСообщенийПодключен - Булево
// * ОбработчикНовыхОбщихСообщенийПодключен - Булево // * ОбработчикНовыхОбщихСообщенийПодключен - Булево
// * НачатоПодключениеОбработчикаНовыхЛичныхСообщений - Булево
// * НачатоПодключениеОбработчикаНовыхОбщихСообщений - Булево
// * ДатаПоследнегоСерверногоВызова - Дата // * ДатаПоследнегоСерверногоВызова - Дата
// * ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания - Дата // * ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания - Дата
// * ЧислоСекундВыравниванияДатыСчетчиковОжидания - Число // * ЧислоСекундВыравниванияДатыСчетчиковОжидания - Число
@@ -612,7 +610,6 @@
Состояние.Вставить("СеансАдминистратораСервиса", Ложь); Состояние.Вставить("СеансАдминистратораСервиса", Ложь);
Состояние.Вставить("ПериодическаяОтправкаДанныхРазрешена", Ложь); Состояние.Вставить("ПериодическаяОтправкаДанныхРазрешена", Ложь);
Состояние.Вставить("МинимальныйИнтервалПериодическойОтправкиДанных", 1); Состояние.Вставить("МинимальныйИнтервалПериодическойОтправкиДанных", 1);
Состояние.Вставить("ПроверкаВыполняется", Ложь);
Состояние.Вставить("КлючСеанса", ""); Состояние.Вставить("КлючСеанса", "");
Состояние.Вставить("ИдентификаторПользователяИБ", Состояние.Вставить("ИдентификаторПользователяИБ",
ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор());
@@ -627,8 +624,6 @@
Состояние.Вставить("ИдентификаторОбщегоОбсуждения", Неопределено); Состояние.Вставить("ИдентификаторОбщегоОбсуждения", Неопределено);
Состояние.Вставить("ОбработчикНовыхЛичныхСообщенийПодключен", Ложь); Состояние.Вставить("ОбработчикНовыхЛичныхСообщенийПодключен", Ложь);
Состояние.Вставить("ОбработчикНовыхОбщихСообщенийПодключен", Ложь); Состояние.Вставить("ОбработчикНовыхОбщихСообщенийПодключен", Ложь);
Состояние.Вставить("НачатоПодключениеОбработчикаНовыхЛичныхСообщений", Ложь);
Состояние.Вставить("НачатоПодключениеОбработчикаНовыхОбщихСообщений", Ложь);
Состояние.Вставить("ДатаПоследнегоСерверногоВызова", '00010101'); Состояние.Вставить("ДатаПоследнегоСерверногоВызова", '00010101');
Состояние.Вставить("ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания", '00010101'); Состояние.Вставить("ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания", '00010101');
Состояние.Вставить("ЧислоСекундВыравниванияДатыСчетчиковОжидания", 0); Состояние.Вставить("ЧислоСекундВыравниванияДатыСчетчиковОжидания", 0);
@@ -641,8 +636,7 @@
Процедура ПодключитьОбработчикНовыхСообщений(СостояниеПолучения) Процедура ПодключитьОбработчикНовыхСообщений(СостояниеПолучения)
Если СостояниеПолучения.ИдентификаторЛичногоОбсуждения <> Неопределено Если СостояниеПолучения.ИдентификаторЛичногоОбсуждения <> Неопределено
И Не СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен И Не СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен Тогда
И Не СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений Тогда
Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения); Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения);
Попытка Попытка
@@ -659,8 +653,7 @@
КонецЕсли; КонецЕсли;
Если СостояниеПолучения.ИдентификаторОбщегоОбсуждения <> Неопределено Если СостояниеПолучения.ИдентификаторОбщегоОбсуждения <> Неопределено
И Не СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен И Не СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен Тогда
И Не СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений Тогда
Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения); Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения);
Попытка Попытка
@@ -680,7 +673,6 @@
Процедура ПослеПодключенияОбработчикаНовыхЛичныхСообщений(Контекст) Экспорт Процедура ПослеПодключенияОбработчикаНовыхЛичныхСообщений(Контекст) Экспорт
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений = Ложь;
Контекст.СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен = Истина; Контекст.СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен = Истина;
КонецПроцедуры КонецПроцедуры
@@ -689,8 +681,6 @@
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений = Ложь;
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых личных сообщений'", НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых личных сообщений'",
ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
@@ -719,7 +709,6 @@
Процедура ПослеПодключенияОбработчикаНовыхОбщихСообщений(Контекст) Экспорт Процедура ПослеПодключенияОбработчикаНовыхОбщихСообщений(Контекст) Экспорт
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений = Ложь;
Контекст.СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен = Истина; Контекст.СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен = Истина;
КонецПроцедуры КонецПроцедуры
@@ -728,8 +717,6 @@
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений = Ложь;
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых общих сообщений'", НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых общих сообщений'",
ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
@@ -42,16 +42,6 @@
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(); ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности();
КонецПроцедуры КонецПроцедуры
// Вызывается после запуска конфигурации, открывает окно предупреждения безопасности.
Процедура ЗадатьВопросПроОтключениеOpenIDConnectОбработчикОжидания() Экспорт
// АПК:277-выкл Используется модуль СтандартныеПодсистемыГлобальный,
// чтобы не создавать ПользователиГлобальный из-за одной процедуры.
ПользователиСлужебныйКлиент.ЗадатьВопросПроОтключениеOpenIDConnect();
// АПК:277-вкл
КонецПроцедуры
// Показывает сообщение пользователю о недостаточном объеме оперативной памяти. // Показывает сообщение пользователю о недостаточном объеме оперативной памяти.
Процедура ПоказатьРекомендациюПоОбъемуОперативнойПамяти() Экспорт Процедура ПоказатьРекомендациюПоОбъемуОперативнойПамяти() Экспорт
СтандартныеПодсистемыКлиент.ОповеститьОНехваткеПамяти(); СтандартныеПодсистемыКлиент.ОповеститьОНехваткеПамяти();
@@ -1921,10 +1921,7 @@
// Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом. // Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом.
Процедура ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Результат, Параметры) Экспорт Процедура ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Результат, Параметры) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура") Тогда Если ТипЗнч(Результат) <> Тип("Структура") Или Результат.Отказ Тогда
Параметры.Отказ = Истина;
ИначеЕсли Результат.Отказ Тогда
Параметры.Отказ = Истина; Параметры.Отказ = Истина;
Иначе Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ВосстановитьСвязьСГлавнымУзлом"); Параметры.ПолученныеПараметрыКлиента.Вставить("ВосстановитьСвязьСГлавнымУзлом");
@@ -1937,10 +1934,7 @@
// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы4. // Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы4.
Процедура ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ(Результат, Параметры) Экспорт Процедура ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ(Результат, Параметры) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура") Тогда Если ТипЗнч(Результат) <> Тип("Структура") Или Результат.Отказ Тогда
Параметры.Отказ = Истина;
ИначеЕсли Результат.Отказ Тогда
Параметры.Отказ = Истина; Параметры.Отказ = Истина;
Иначе Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ВыбратьНачальныеРегиональныеНастройкиИБ"); Параметры.ПолученныеПараметрыКлиента.Вставить("ВыбратьНачальныеРегиональныеНастройкиИБ");
@@ -1634,7 +1634,8 @@
ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента"); ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента"); ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента"); ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента");
Для Каждого КлючИЗначение Из Ключи Цикл ТекущиеКлючи = Новый Соответствие(Новый ФиксированноеСоответствие(Ключи));
Для Каждого КлючИЗначение Из ТекущиеКлючи Цикл
ТекущийДень = КлючИЗначение.Ключ; ТекущийДень = КлючИЗначение.Ключ;
Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда
Ключи = Неопределено; Ключи = Неопределено;
@@ -2153,7 +2154,9 @@
// Фоновое обновление поставляемых профилей и параметров работы расширений. // Фоновое обновление поставляемых профилей и параметров работы расширений.
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ВключитьЗаполнениеПараметровРаботыРасширений(Ложь, Истина); РегистрыСведений.ПараметрыРаботыВерсийРасширений.ВключитьЗаполнениеПараметровРаботыРасширений(Ложь, Истина);
Если ОбщегоНазначения.РазделениеВключено() Тогда Если ОбщегоНазначения.РазделениеВключено() Тогда
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ЗапуститьЗаполнениеПараметровРаботыРасширений(Истина); РегистрыСведений.ПараметрыРаботыВерсийРасширений.ЗапуститьЗаполнениеПараметровРаботыРасширений(
НСтр("ru = 'Запуск с ожиданием после загрузки данных области'"),
Истина);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -14358,8 +14358,9 @@
Контекст.ЕстьДлительноеЗаданиеПолученияПорцийЭлементовДанных = Ложь; Контекст.ЕстьДлительноеЗаданиеПолученияПорцийЭлементовДанных = Ложь;
ЗадержкаЗапроса = Контекст.МаксимальноеКоличествоСекундБыстрогоПолученияПорцийЭлементовДанных; ЗадержкаЗапроса = Контекст.МаксимальноеКоличествоСекундБыстрогоПолученияПорцийЭлементовДанных;
Если ЗадержкаЗапроса > 0 Тогда Если ЗадержкаЗапроса > 0 Тогда
Для Каждого ОписаниеПотока Из Контекст.ЗанятыеПотоки Цикл ТекущиеЗанятыеПотоки = Новый Соответствие(Новый ФиксированноеСоответствие(Контекст.ЗанятыеПотоки));
Поток = ОписаниеПотока.Значение; Для Каждого ОписаниеПотока Из ТекущиеЗанятыеПотоки Цикл
Поток = ОписаниеПотока.Значение; // см. НовыйПоток
Если Поток.ПорцияИзНабора <> Неопределено Если Поток.ПорцияИзНабора <> Неопределено
Или Поток.Задание.ЭтоОбновлениеПрав Или Поток.Задание.ЭтоОбновлениеПрав
Или Поток.Задание.ЭтоОбработкаУстаревшихЭлементов Тогда Или Поток.Задание.ЭтоОбработкаУстаревшихЭлементов Тогда
@@ -2795,209 +2795,6 @@
КонецФункции КонецФункции
// Возвращает описание команд, разбитое по типам контактной информации.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - ПеречислениеСсылка.ТипыКонтактнойИнформации
// * Значение - см. КомандыТипаКонтактнойИнформации
//
Функция ОписаниеКоманд() Экспорт
ОписаниеКоманд = Новый Соответствие;
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Адрес, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Адрес));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Телефон, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Телефон));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты,
КомандыТипаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Skype, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Skype));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.ВебСтраница));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Факс, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Факс));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Другое, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Другое));
Возврат ОписаниеКоманд;
КонецФункции
// Возвращает описание команд, предназначенные для типа контактной информации, переданного в качестве параметра.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации
//
// Возвращаемое значение:
// Структура - состав полей зависит от типа контактной информации. Для типа Адрес: ВвестиКомментарийКАдресу,
// ПоказатьНаКартеЯндекс, ПоказатьНаКартеGoogle, ЗапланироватьВстречу, ПоказатьИсториюИзменений.
// Для типа Телефон: ПозвонитьПоТелефону, ОтправитьSMS, ПоказатьИсториюИзменений.
// Для типа Факс: ОтправитьФакс, ПоказатьИсториюИзменений.
// Для типа АдресЭлектронной почты: НаписатьЭлектронноеПисьмо.
// Для типа Skype: ПозвонитьSkype, НачатьЧатSkype.
// Для типа ВебСтраница: ОткрытьВебСтраницу.
// Для типа Другое: ОткрытьОкноДругое.
// Состав полей:
// * ВвестиКомментарийКАдресу - см. ОписаниеКомандыПоИмени
// * ПоказатьНаКартеЯндекс - см. ОписаниеКомандыПоИмени
// * ПоказатьНаКартеGoogle - см. ОписаниеКомандыПоИмени
// * ЗапланироватьВстречу - см. ОписаниеКомандыПоИмени
// * ПоказатьИсториюИзменений - см. ОписаниеКомандыПоИмени
// * ПозвонитьПоТелефону - см. ОписаниеКомандыПоИмени
// * ОтправитьSMS - см. ОписаниеКомандыПоИмени
// * ОтправитьФакс - см. ОписаниеКомандыПоИмени
// * НаписатьЭлектронноеПисьмо - см. ОписаниеКомандыПоИмени
// * ПозвонитьSkype - см. ОписаниеКомандыПоИмени
// * НачатьЧатSkype - см. ОписаниеКомандыПоИмени
// * ОткрытьВебСтраницу - см. ОписаниеКомандыПоИмени
// * ОткрытьОкноДругое - см. ОписаниеКомандыПоИмени
//
Функция КомандыТипаКонтактнойИнформации(Тип) Экспорт
Возврат УправлениеКонтактнойИнформациейСлужебныйПовтИсп.КомандыТипаКонтактнойИнформации(Тип);
КонецФункции
// Возвращает структуру с описанием команды контактной информации.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// ИмяКоманды - Строка - имя команды, описание которой нужно получить.
//
// Возвращаемое значение:
// см. СвойстваКоманды
//
Функция ОписаниеКомандыПоИмени(ИмяКоманды) Экспорт
// Команда для типа Адрес, Телефон, Факс
Если ИмяКоманды = "ПоказатьИсториюИзменений" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'История изменений...'"),
НСтр("ru = 'Показывает историю изменения контактной информации'"),
БиблиотекаКартинок.ИсторияИзменений,
"УправлениеКонтактнойИнформациейКлиент.ПередОткрытиемФормыИсторииИзменений",
Истина);
КонецЕсли;
// Команды для типа Адрес
Если ИмяКоманды = "ВвестиКомментарийКАдресу" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Ввести комментарий'"),
НСтр("ru = 'Ввести комментарий'"),
БиблиотекаКартинок.Комментарий,
"УправлениеКонтактнойИнформациейКлиент.ПередВводомКомментария",
Истина);
ИначеЕсли ИмяКоманды = "ПоказатьНаКартеЯндекс" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Адрес на Яндекс.Картах'"),
НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'"),
БиблиотекаКартинок.ЯндексКарты,
"УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеЯндекс");
ИначеЕсли ИмяКоманды = "ПоказатьНаКартеGoogle" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Адрес на Google Maps'"),
НСтр("ru = 'Показывает адрес на карте Google Maps'"),
БиблиотекаКартинок.GoogleMaps,
"УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеGoogle");
ИначеЕсли ИмяКоманды = "ЗапланироватьВстречу" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
// Команды для типа Телефон
Если ИмяКоманды = "ПозвонитьПоТелефону" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Позвонить'"),
НСтр("ru = 'Позвонить по телефону'"),
БиблиотекаКартинок.Позвонить,
"УправлениеКонтактнойИнформациейКлиент.ПередТелефоннымЗвонком");
ИначеЕсли ИмяКоманды = "ОтправитьSMS" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Отправить SMS'"),
НСтр("ru = 'Отправить SMS'"),
БиблиотекаКартинок.ОтправитьSMS,
"УправлениеКонтактнойИнформациейКлиент.ПередСозданиемSMS");
КонецЕсли;
// Команды для типа Факс
Если ИмяКоманды = "ОтправитьФакс" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
// Команды для типа АдресЭлектроннойПочты
Если ИмяКоманды = "НаписатьЭлектронноеПисьмо" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Написать письмо'"),
НСтр("ru = 'Написать письмо на указанный адрес'"),
БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо,
"УправлениеКонтактнойИнформациейКлиент.ПередСозданиемЭлектронногоПисьма");
КонецЕсли;
// Команды для типа Skype
Если ИмяКоманды = "ПозвонитьSkype" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Позвонить'"),
НСтр("ru = 'Позвонить на Skype'"),
БиблиотекаКартинок.Позвонить,
"УправлениеКонтактнойИнформациейКлиент.ПередЗвонкомНаSkype");
ИначеЕсли ИмяКоманды = "НачатьЧатSkype" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Начать чат'"),
НСтр("ru = 'Начать чат в Skype'"),
БиблиотекаКартинок.ОтправитьSMS,
"УправлениеКонтактнойИнформациейКлиент.ПередНачаломБеседыВSkype");
КонецЕсли;
// Команды для типа ВебСтраница
Если ИмяКоманды = "ОткрытьВебСтраницу" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Перейти'"),
НСтр("ru = 'Перейти по ссылке'"),
БиблиотекаКартинок.КонтактнаяИнформацияПерейтиПоСсылке,
"УправлениеКонтактнойИнформациейКлиент.ПередПереходомПоВебСсылке");
КонецЕсли;
// Команды типа Другое
Если ИмяКоманды = "ОткрытьОкноДругое" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
КонецФункции
// Возвращает структуру для описания команд контактной информации.
// Полученная структура используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// Заголовок - Строка - заголовок команды.
// Подсказка - Строка - подсказка команды.
// Картинка - Картинка - картинка команды.
// Действие - Строка - полный путь к процедуре, которую необходимо выполнить.
// Например, "_ДемоСтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// ИзменяетСохраняемыеДанные - Булево
//
// Возвращаемое значение:
// Структура:
// * Заголовок - Строка
// * Подсказка - Строка
// * Картинка - Картинка
// * Действие - Строка
// * ИзменяетСохраняемыеДанные - Булево
//
Функция СвойстваКоманды(Заголовок, Подсказка, Картинка = "", Действие = "", ИзменяетСохраняемыеДанные = Ложь) Экспорт
Свойства = Новый Структура;
Свойства.Вставить("Заголовок", Заголовок);
Свойства.Вставить("Подсказка", Подсказка);
Свойства.Вставить("Картинка", ?(Картинка="", Новый Картинка(), Картинка));
Свойства.Вставить("Действие", Действие);
Свойства.Вставить("ИзменяетСохраняемыеДанные", ИзменяетСохраняемыеДанные);
Возврат Свойства;
КонецФункции
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Проверка и сведения об адресе // Проверка и сведения об адресе
@@ -3716,6 +3513,209 @@
#КонецОбласти #КонецОбласти
// Возвращает описание команд, разбитое по типам контактной информации.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - ПеречислениеСсылка.ТипыКонтактнойИнформации
// * Значение - см. КомандыТипаКонтактнойИнформации
//
Функция ОписаниеКоманд() Экспорт
ОписаниеКоманд = Новый Соответствие;
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Адрес, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Адрес));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Телефон, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Телефон));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты,
КомандыТипаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Skype, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Skype));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.ВебСтраница, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.ВебСтраница));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Факс, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Факс));
ОписаниеКоманд.Вставить(Перечисления.ТипыКонтактнойИнформации.Другое, КомандыТипаКонтактнойИнформации(
Перечисления.ТипыКонтактнойИнформации.Другое));
Возврат ОписаниеКоманд;
КонецФункции
// Возвращает описание команд, предназначенные для типа контактной информации, переданного в качестве параметра.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации
//
// Возвращаемое значение:
// Структура - состав полей зависит от типа контактной информации. Для типа Адрес: ВвестиКомментарийКАдресу,
// ПоказатьНаКартеЯндекс, ПоказатьНаКартеGoogle, ЗапланироватьВстречу, ПоказатьИсториюИзменений.
// Для типа Телефон: ПозвонитьПоТелефону, ОтправитьSMS, ПоказатьИсториюИзменений.
// Для типа Факс: ОтправитьФакс, ПоказатьИсториюИзменений.
// Для типа АдресЭлектронной почты: НаписатьЭлектронноеПисьмо.
// Для типа Skype: ПозвонитьSkype, НачатьЧатSkype.
// Для типа ВебСтраница: ОткрытьВебСтраницу.
// Для типа Другое: ОткрытьОкноДругое.
// Состав полей:
// * ВвестиКомментарийКАдресу - см. ОписаниеКомандыПоИмени
// * ПоказатьНаКартеЯндекс - см. ОписаниеКомандыПоИмени
// * ПоказатьНаКартеGoogle - см. ОписаниеКомандыПоИмени
// * ЗапланироватьВстречу - см. ОписаниеКомандыПоИмени
// * ПоказатьИсториюИзменений - см. ОписаниеКомандыПоИмени
// * ПозвонитьПоТелефону - см. ОписаниеКомандыПоИмени
// * ОтправитьSMS - см. ОписаниеКомандыПоИмени
// * ОтправитьФакс - см. ОписаниеКомандыПоИмени
// * НаписатьЭлектронноеПисьмо - см. ОписаниеКомандыПоИмени
// * ПозвонитьSkype - см. ОписаниеКомандыПоИмени
// * НачатьЧатSkype - см. ОписаниеКомандыПоИмени
// * ОткрытьВебСтраницу - см. ОписаниеКомандыПоИмени
// * ОткрытьОкноДругое - см. ОписаниеКомандыПоИмени
//
Функция КомандыТипаКонтактнойИнформации(Тип) Экспорт
Возврат УправлениеКонтактнойИнформациейСлужебныйПовтИсп.КомандыТипаКонтактнойИнформации(Тип);
КонецФункции
// Возвращает структуру с описанием команды контактной информации.
// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// ИмяКоманды - Строка - имя команды, описание которой нужно получить.
//
// Возвращаемое значение:
// см. СвойстваКоманды
//
Функция ОписаниеКомандыПоИмени(ИмяКоманды) Экспорт
// Команда для типа Адрес, Телефон, Факс
Если ИмяКоманды = "ПоказатьИсториюИзменений" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'История изменений...'"),
НСтр("ru = 'Показывает историю изменения контактной информации'"),
БиблиотекаКартинок.ИсторияИзменений,
"УправлениеКонтактнойИнформациейКлиент.ПередОткрытиемФормыИсторииИзменений",
Истина);
КонецЕсли;
// Команды для типа Адрес
Если ИмяКоманды = "ВвестиКомментарийКАдресу" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Ввести комментарий'"),
НСтр("ru = 'Ввести комментарий'"),
БиблиотекаКартинок.Комментарий,
"УправлениеКонтактнойИнформациейКлиент.ПередВводомКомментария",
Истина);
ИначеЕсли ИмяКоманды = "ПоказатьНаКартеЯндекс" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Адрес на Яндекс.Картах'"),
НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'"),
БиблиотекаКартинок.ЯндексКарты,
"УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеЯндекс");
ИначеЕсли ИмяКоманды = "ПоказатьНаКартеGoogle" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Адрес на Google Maps'"),
НСтр("ru = 'Показывает адрес на карте Google Maps'"),
БиблиотекаКартинок.GoogleMaps,
"УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеGoogle");
ИначеЕсли ИмяКоманды = "ЗапланироватьВстречу" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
// Команды для типа Телефон
Если ИмяКоманды = "ПозвонитьПоТелефону" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Позвонить'"),
НСтр("ru = 'Позвонить по телефону'"),
БиблиотекаКартинок.Позвонить,
"УправлениеКонтактнойИнформациейКлиент.ПередТелефоннымЗвонком");
ИначеЕсли ИмяКоманды = "ОтправитьSMS" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Отправить SMS'"),
НСтр("ru = 'Отправить SMS'"),
БиблиотекаКартинок.ОтправитьSMS,
"УправлениеКонтактнойИнформациейКлиент.ПередСозданиемSMS");
КонецЕсли;
// Команды для типа Факс
Если ИмяКоманды = "ОтправитьФакс" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
// Команды для типа АдресЭлектроннойПочты
Если ИмяКоманды = "НаписатьЭлектронноеПисьмо" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Написать письмо'"),
НСтр("ru = 'Написать письмо на указанный адрес'"),
БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо,
"УправлениеКонтактнойИнформациейКлиент.ПередСозданиемЭлектронногоПисьма");
КонецЕсли;
// Команды для типа Skype
Если ИмяКоманды = "ПозвонитьSkype" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Позвонить'"),
НСтр("ru = 'Позвонить на Skype'"),
БиблиотекаКартинок.Позвонить,
"УправлениеКонтактнойИнформациейКлиент.ПередЗвонкомНаSkype");
ИначеЕсли ИмяКоманды = "НачатьЧатSkype" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Начать чат'"),
НСтр("ru = 'Начать чат в Skype'"),
БиблиотекаКартинок.ОтправитьSMS,
"УправлениеКонтактнойИнформациейКлиент.ПередНачаломБеседыВSkype");
КонецЕсли;
// Команды для типа ВебСтраница
Если ИмяКоманды = "ОткрытьВебСтраницу" Тогда
Возврат СвойстваКоманды(
НСтр("ru = 'Перейти'"),
НСтр("ru = 'Перейти по ссылке'"),
БиблиотекаКартинок.КонтактнаяИнформацияПерейтиПоСсылке,
"УправлениеКонтактнойИнформациейКлиент.ПередПереходомПоВебСсылке");
КонецЕсли;
// Команды типа Другое
Если ИмяКоманды = "ОткрытьОкноДругое" Тогда
Возврат СвойстваКоманды("", "");
КонецЕсли;
КонецФункции
// Возвращает структуру для описания команд контактной информации.
// Полученная структура используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек
//
// Параметры:
// Заголовок - Строка - заголовок команды.
// Подсказка - Строка - подсказка команды.
// Картинка - Картинка - картинка команды.
// Действие - Строка - полный путь к процедуре, которую необходимо выполнить.
// Например, "_ДемоСтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// ИзменяетСохраняемыеДанные - Булево
//
// Возвращаемое значение:
// Структура:
// * Заголовок - Строка
// * Подсказка - Строка
// * Картинка - Картинка
// * Действие - Строка
// * ИзменяетСохраняемыеДанные - Булево
//
Функция СвойстваКоманды(Заголовок, Подсказка, Картинка = "", Действие = "", ИзменяетСохраняемыеДанные = Ложь) Экспорт
Свойства = Новый Структура;
Свойства.Вставить("Заголовок", Заголовок);
Свойства.Вставить("Подсказка", Подсказка);
Свойства.Вставить("Картинка", ?(Картинка="", Новый Картинка(), Картинка));
Свойства.Вставить("Действие", Действие);
Свойства.Вставить("ИзменяетСохраняемыеДанные", ИзменяетСохраняемыеДанные);
Возврат Свойства;
КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс #Область СлужебныйПрограммныйИнтерфейс
@@ -3813,6 +3813,11 @@
Процедура ПриСкрытииЗначенияРеквизита(ПолноеИмя, Значение, СтандартнаяОбработка) Экспорт Процедура ПриСкрытииЗначенияРеквизита(ПолноеИмя, Значение, СтандартнаяОбработка) Экспорт
ИмяТабличнойЧасти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(".%1.", "КонтактнаяИнформация");
Если СтрНайти(ПолноеИмя, ИмяТабличнойЧасти) = 0 Тогда
Возврат;
КонецЕсли;
Если СтрЗаканчиваетсяНа(ПолноеИмя, "КонтактнаяИнформация.ЗначенияПолей") И ЗначениеЗаполнено(Значение) Тогда Если СтрЗаканчиваетсяНа(ПолноеИмя, "КонтактнаяИнформация.ЗначенияПолей") И ЗначениеЗаполнено(Значение) Тогда
СтандартнаяОбработка = Ложь; СтандартнаяОбработка = Ложь;
@@ -3823,11 +3828,18 @@
ПоляКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(Значение); ПоляКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтрокуJSONВСтруктуру(Значение);
НеОбрабатываемыеПоля = Новый Массив;
НеОбрабатываемыеПоля.Добавить("type");
НеОбрабатываемыеПоля.Добавить("apartments");
НеОбрабатываемыеПоля.Добавить("buildings");
Если ПоляКонтактнойИнформации.Количество() > 0 Тогда Если ПоляКонтактнойИнформации.Количество() > 0 Тогда
Для Каждого ПолеКонтактнойИнформации Из ПоляКонтактнойИнформации Цикл Для Каждого ПолеКонтактнойИнформации Из ПоляКонтактнойИнформации Цикл
Если СтрСравнить(ПолеКонтактнойИнформации.Ключ, "type") <> 0 И ЗначениеЗаполнено(ПолеКонтактнойИнформации.Значение) Тогда Если НеОбрабатываемыеПоля.Найти(ПолеКонтактнойИнформации.Ключ) = Неопределено
ПоляКонтактнойИнформации[ПолеКонтактнойИнформации.Ключ] = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""); И ЗначениеЗаполнено(ПолеКонтактнойИнформации.Значение) Тогда
ПоляКонтактнойИнформации[ПолеКонтактнойИнформации.Ключ] =
СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -4820,83 +4832,6 @@
КонецПроцедуры КонецПроцедуры
Процедура УстановитьДействияДляСтатическихЭлементов(Форма, СтрокаКИ, ИмяЭлементаДляРазмещения)
Элемент = Форма.Элементы[СтрокаКИ.ИмяРеквизита];
Тип = СтрокаКи.Тип;
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации,
ИмяЭлементаДляРазмещения);
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
Если СтрокаКИ.ВидРедактирования = "Диалог" И СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если НЕ ЗначениеЗаполнено(Элемент.ПолучитьДействие("Нажатие")) Тогда
Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаНавигационнойСсылки")) Тогда
Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки");
КонецЕсли;
ИначеЕсли Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Очистка")) Тогда
Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка");
КонецЕсли;
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Автоподбор")) Тогда
Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор");
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаВыбора")) Тогда
Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора");
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Редактирование в диалоге
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода
И Не СтрокаКИ.ВидРедактирования = "ПолеВвода" Тогда
ДоступенВыбор = Не СтрокаКИ.ПометкаУдаления И СтрокаКИ.ВидРедактирования <> "ПолеВвода";
Если ДоступенВыбор И Не Форма.ТолькоПросмотр Тогда
Элемент.КнопкаВыбора = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("НачалоВыбора")) Тогда
Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
КонецЕсли;
Иначе
Элемент.КнопкаВыбора = Ложь;
Если ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]) Тогда
Элемент.КнопкаОткрытия = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Открытие")) Тогда
Элемент.УстановитьДействие("Открытие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ПриИзменении")) Тогда
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
Если ДляТипаКонтактнойИнформацииЕстьПолеКомментарий(Тип, ОбработкаНавигационнойСсылки) Тогда
ИмяЭлементаКомментарий = "Комментарий" + СтрокаКИ.ИмяРеквизита;
Если Форма.Элементы.Найти(ИмяЭлементаКомментарий) <> Неопределено Тогда
Если Не ЗначениеЗаполнено(Форма.Элементы[ИмяЭлементаКомментарий].ПолучитьДействие("ПриИзменении")) Тогда
Форма.Элементы[ИмяЭлементаКомментарий].УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление, ИмяЭлементаДляРазмещения) Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление, ИмяЭлементаДляРазмещения)
Если Направление > 0 Тогда Если Направление > 0 Тогда
@@ -5146,25 +5081,19 @@
КонецПроцедуры КонецПроцедуры
// Возвращает доступно ли редактирование в диалоге по типу контактной информации. // Возвращает, доступно ли редактирование в диалоге для указанного типа контактной информации.
// //
// Параметры: // Параметры:
// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - доступно или нет редактирование в диалоге. // Булево
// //
Функция ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) Функция ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип)
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Возврат Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
Возврат Истина; Или Тип = Перечисления.ТипыКонтактнойИнформации.Телефон
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Или Тип = Перечисления.ТипыКонтактнойИнформации.Факс;
Возврат Истина;
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции КонецФункции
@@ -5511,15 +5440,13 @@
УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту);
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
УровеньОшибок = ОшибкиЗаполненияАдреса(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); УровеньОшибок = ОшибкиЗаполненияАдреса(Значение, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту);
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон
УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита); Или ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита); УровеньОшибок = ОшибкиЗаполненияТелефона(Значение, ВидИнформации, ИмяРеквизита);
ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
УровеньОшибок = ОшибкиЗаполненияВебСтраницы(Значение, ВидИнформации, ИмяРеквизита); УровеньОшибок = ОшибкиЗаполненияВебСтраницы(Значение, ВидИнформации, ИмяРеквизита);
Иначе Иначе
// Другое (прочее) не проверяем. УровеньОшибок = 0; // Другое не проверяем.
УровеньОшибок = 0;
КонецЕсли; КонецЕсли;
Возврат УровеньОшибок; Возврат УровеньОшибок;
@@ -5811,50 +5738,6 @@
КонецФункции КонецФункции
// Описание дополнительных параметров вывода контактной информации
//
// Параметры:
// ОписаниеКоманд - см. ОписаниеКоманд
// ОтображатьИконки - Булево
// РазмещеныНаФорме - Соответствие из КлючИЗначение:
// * Ключ - СправочникСсылка.ВидыКонтактнойИнформации
// * Значение - Булево
// - Неопределено
// РазрешитьДобавлениеПолей - Булево
// ИсключаемыеВиды - Массив
// - Неопределено
// СкрываемыеВиды - Массив
// - Неопределено
//
// Возвращаемое значение:
// Структура:
// * ОписаниеКоманд - см. ОписаниеКоманд
// * ОтображатьИконки - Булево
// * РазмещеныНаФорме - Соответствие из КлючИЗначение:
// ** Ключ - СправочникСсылка.ВидыКонтактнойИнформации
// ** Значение - Булево
// - Неопределено
// * РазрешитьДобавлениеПолей - Булево
// * ИсключаемыеВиды - Массив
// - Неопределено
// * СкрываемыеВиды - Массив
// - Неопределено
//
Функция ДополнительныеПараметрыВыводаКонтактнойИнформации(ОписаниеКоманд, ОтображатьИконки, РазмещеныНаФорме,
РазрешитьДобавлениеПолей, ИсключаемыеВиды, СкрываемыеВиды)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОписаниеКоманд", ОписаниеКоманд);
ДополнительныеПараметры.Вставить("ОтображатьИконки", ОтображатьИконки);
ДополнительныеПараметры.Вставить("РазмещеныНаФорме", РазмещеныНаФорме);
ДополнительныеПараметры.Вставить("РазрешитьДобавлениеПолей", РазрешитьДобавлениеПолей);
ДополнительныеПараметры.Вставить("ИсключаемыеВиды", ИсключаемыеВиды);
ДополнительныеПараметры.Вставить("СкрываемыеВиды", СкрываемыеВиды);
Возврат ДополнительныеПараметры;
КонецФункции
Функция ГруппаВидовКонтактнойИнформацииОбъекта(Знач ПолноеИмяОбъектаМетаданных) Функция ГруппаВидовКонтактнойИнформацииОбъекта(Знач ПолноеИмяОбъектаМетаданных)
Возврат ВидКонтактнойИнформацииПоИмени(СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", "")); Возврат ВидКонтактнойИнформацииПоИмени(СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""));
@@ -6765,6 +6648,127 @@
КонецФункции КонецФункции
Процедура УстановитьДействияДляСтатическихЭлементов(Форма, СтрокаКИ, ИмяЭлементаДляРазмещения)
Элемент = Форма.Элементы[СтрокаКИ.ИмяРеквизита];
Тип = СтрокаКи.Тип;
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации,
ИмяЭлементаДляРазмещения);
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
Если СтрокаКИ.ВидРедактирования = "Диалог" И СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если НЕ ЗначениеЗаполнено(Элемент.ПолучитьДействие("Нажатие")) Тогда
Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаНавигационнойСсылки")) Тогда
Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки");
КонецЕсли;
ИначеЕсли Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Очистка")) Тогда
Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка");
КонецЕсли;
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Автоподбор")) Тогда
Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор");
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаВыбора")) Тогда
Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора");
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Редактирование в диалоге
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода
И Не СтрокаКИ.ВидРедактирования = "ПолеВвода" Тогда
ДоступенВыбор = Не СтрокаКИ.ПометкаУдаления И СтрокаКИ.ВидРедактирования <> "ПолеВвода";
Если ДоступенВыбор И Не Форма.ТолькоПросмотр Тогда
Элемент.КнопкаВыбора = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("НачалоВыбора")) Тогда
Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
КонецЕсли;
Иначе
Элемент.КнопкаВыбора = Ложь;
Если ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]) Тогда
Элемент.КнопкаОткрытия = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Открытие")) Тогда
Элемент.УстановитьДействие("Открытие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ПриИзменении")) Тогда
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
Если ДляТипаКонтактнойИнформацииЕстьПолеКомментарий(Тип, ОбработкаНавигационнойСсылки) Тогда
ИмяЭлементаКомментарий = "Комментарий" + СтрокаКИ.ИмяРеквизита;
Если Форма.Элементы.Найти(ИмяЭлементаКомментарий) <> Неопределено Тогда
Если Не ЗначениеЗаполнено(Форма.Элементы[ИмяЭлементаКомментарий].ПолучитьДействие("ПриИзменении")) Тогда
Форма.Элементы[ИмяЭлементаКомментарий].УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Описание дополнительных параметров вывода контактной информации
//
// Параметры:
// ОписаниеКоманд - см. ОписаниеКоманд
// ОтображатьИконки - Булево
// РазмещеныНаФорме - Соответствие из КлючИЗначение:
// * Ключ - СправочникСсылка.ВидыКонтактнойИнформации
// * Значение - Булево
// - Неопределено
// РазрешитьДобавлениеПолей - Булево
// ИсключаемыеВиды - Массив
// - Неопределено
// СкрываемыеВиды - Массив
// - Неопределено
//
// Возвращаемое значение:
// Структура:
// * ОписаниеКоманд - см. ОписаниеКоманд
// * ОтображатьИконки - Булево
// * РазмещеныНаФорме - Соответствие из КлючИЗначение:
// ** Ключ - СправочникСсылка.ВидыКонтактнойИнформации
// ** Значение - Булево
// - Неопределено
// * РазрешитьДобавлениеПолей - Булево
// * ИсключаемыеВиды - Массив
// - Неопределено
// * СкрываемыеВиды - Массив
// - Неопределено
//
Функция ДополнительныеПараметрыВыводаКонтактнойИнформации(ОписаниеКоманд, ОтображатьИконки, РазмещеныНаФорме,
РазрешитьДобавлениеПолей, ИсключаемыеВиды, СкрываемыеВиды)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОписаниеКоманд", ОписаниеКоманд);
ДополнительныеПараметры.Вставить("ОтображатьИконки", ОтображатьИконки);
ДополнительныеПараметры.Вставить("РазмещеныНаФорме", РазмещеныНаФорме);
ДополнительныеПараметры.Вставить("РазрешитьДобавлениеПолей", РазрешитьДобавлениеПолей);
ДополнительныеПараметры.Вставить("ИсключаемыеВиды", ИсключаемыеВиды);
ДополнительныеПараметры.Вставить("СкрываемыеВиды", СкрываемыеВиды);
Возврат ДополнительныеПараметры;
КонецФункции
Функция НастройкиПодсистемы(ВладелецКонтактнойИнформации) Функция НастройкиПодсистемы(ВладелецКонтактнойИнформации)
Настройки = Новый Структура; Настройки = Новый Структура;
@@ -343,18 +343,12 @@
ПространствоИмен = ПространствоИмен(); ПространствоИмен = ПространствоИмен();
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Если ОжидаемыйТип = Неопределено Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"));
ИначеЕсли ОжидаемыйТип = Неопределено Тогда
// Считаем телефоном
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
Иначе Иначе
ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс'"); ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс.'");
КонецЕсли; КонецЕсли;
Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация"));
@@ -458,18 +452,12 @@
ПространствоИмен = ПространствоИмен(); ПространствоИмен = ПространствоИмен();
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Если ОжидаемыйТип = Неопределено Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"));
ИначеЕсли ОжидаемыйТип = Неопределено Тогда
// Считаем телефоном
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
Иначе Иначе
ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс'"); ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс.'");
КонецЕсли; КонецЕсли;
Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация"));
@@ -606,31 +594,24 @@
Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт
ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид);
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип); Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница
Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
Возврат ДесериализацияТелефона("", Текст, ОжидаемыйТип); Возврат ДесериализацияТелефона("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Возврат ДесериализацияФакса("", Текст, ОжидаемыйТип); Возврат ДесериализацияФакса("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
КонецЕсли; КонецЕсли;
Возврат Неопределено; Возврат Неопределено;
КонецФункции КонецФункции
Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт
@@ -1009,10 +990,8 @@
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Факс Тогда ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Факс Тогда
Результат.ДанныеXML = XSLT_СтруктураВФакс(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); Результат.ДанныеXML = XSLT_СтруктураВФакс(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое Тогда ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое
Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); Или ТипКонтактнойИнформации = ВсеТипы.Skype Тогда
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Skype Тогда
Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
Иначе Иначе
@@ -2410,10 +2410,8 @@
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект); ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект);
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); Или ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект); ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект);
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
@@ -1063,10 +1063,11 @@
// Структура: // Структура:
// * ПриОпределенииПолучателей - Булево - при установке значения Истина будет вызвана процедура модуля менеджера // * ПриОпределенииПолучателей - Булево - при установке значения Истина будет вызвана процедура модуля менеджера
// объекта ПриОпределенииПолучателей, // объекта ПриОпределенииПолучателей,
// где определяются получатели для отправки печатной формы. // где определяются получатели для отправки печатной формы.
// * ПриДобавленииКомандПечати - Булево, Неопределено - при установке значения Истина будет вызвана процедура модуля // По умолчанию, значение Ложь.
// менеджера объекта ДобавитьКомандыПечати, // * ПриДобавленииКомандПечати - Булево - при установке значения Истина будет вызвана процедура модуля
// где добавляются команды печати. Неопределено - объект не подключен к подсистеме печати. // менеджера объекта ДобавитьКомандыПечати, где добавляются команды печати.
// По умолчанию, значение Ложь.
// //
Функция НастройкиПечатиОбъекта(МенеджерОбъекта) Экспорт Функция НастройкиПечатиОбъекта(МенеджерОбъекта) Экспорт
@@ -1253,18 +1254,19 @@
Область = Неопределено; Область = Неопределено;
Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" Или ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул"
Или ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда
Область = УправлениеПечатьюСлужебный.ПолучитьОбластьВерхнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Область = УправлениеПечатьюСлужебный.ПолучитьОбластьВерхнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти);
ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" Или ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул"
Или ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда
Область = УправлениеПечатьюСлужебный.ПолучитьОбластьНижнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Область = УправлениеПечатьюСлужебный.ПолучитьОбластьНижнегоКолонтитула(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти);
ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Тогда ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая"
Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Или ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы"
ИначеЕсли ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда Или ОписаниеОбласти.ТипОбласти = "Список" Тогда
Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти);
ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" Тогда
Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти); Область = УправлениеПечатьюСлужебный.ПолучитьОбластьМакета(СсылкаНаМакет, ОписаниеОбласти.ИмяОбласти);
Иначе Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Тип области не указан или указан некорректно: %1.'"), ОписаниеОбласти.ТипОбласти); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Тип области не указан или указан некорректно: %1.'"), ОписаниеОбласти.ТипОбласти);
КонецЕсли; КонецЕсли;
Если Область <> Неопределено Тогда Если Область <> Неопределено Тогда
@@ -1292,16 +1294,16 @@
Попытка Попытка
ОписаниеОбласти = ОбластьМакета.ОписаниеОбласти; ОписаниеОбласти = ОбластьМакета.ОписаниеОбласти;
ВыведеннаяОбласть = Неопределено; ВыведеннаяОбласть = Неопределено;
Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда Если ОписаниеОбласти.ТипОбласти = "ВерхнийКолонтитул" Или ОписаниеОбласти.ТипОбласти = "ВерхнийЧетныйКолонтитул"
Или ОписаниеОбласти.ТипОбласти = "ВерхнийТитульныйКолонтитул" Тогда
ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьВерхнийКолонтитул(ПечатнаяФорма, ОбластьМакета); ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьВерхнийКолонтитул(ПечатнаяФорма, ОбластьМакета);
ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул" ИЛИ ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда ИначеЕсли ОписаниеОбласти.ТипОбласти = "НижнийКолонтитул" Или ОписаниеОбласти.ТипОбласти = "НижнийЧетныйКолонтитул"
Или ОписаниеОбласти.ТипОбласти = "НижнийТитульныйКолонтитул" Тогда
ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьНижнийКолонтитул(ПечатнаяФорма, ОбластьМакета); ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ДобавитьНижнийКолонтитул(ПечатнаяФорма, ОбластьМакета);
ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Тогда ИначеЕсли ОписаниеОбласти.ТипОбласти = "Общая" Или ОписаниеОбласти.ТипОбласти = "Список"
ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку); Или ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда
ИначеЕсли ОписаниеОбласти.ТипОбласти = "Список" ИЛИ ОписаниеОбласти.ТипОбласти = "СтрокаТаблицы" Тогда
ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку); ВыведеннаяОбласть = УправлениеПечатьюСлужебный.ПрисоединитьОбласть(ПечатнаяФорма, ОбластьМакета, ПереходНаСледующуюСтроку);
Иначе Иначе
ВызватьИсключение ТекстТипОбластиУказанНекорректно(); ВызватьИсключение ТекстТипОбластиУказанНекорректно();
@@ -1310,7 +1312,7 @@
ОписаниеОбласти.Вставить("Область", ВыведеннаяОбласть); ОписаниеОбласти.Вставить("Область", ВыведеннаяОбласть);
ОписаниеОбласти.Вставить("ПереходНаСледующуюСтроку", ПереходНаСледующуюСтроку); ОписаниеОбласти.Вставить("ПереходНаСледующуюСтроку", ПереходНаСледующуюСтроку);
// Содержит тип области, и границы области (если требуется). // Содержит тип и границы области (если требуется).
ПечатнаяФорма.ПоследняяВыведеннаяОбласть = ОписаниеОбласти; ПечатнаяФорма.ПоследняяВыведеннаяОбласть = ОписаниеОбласти;
Исключение Исключение
@@ -4478,18 +4480,20 @@
КонецФункции КонецФункции
Функция МакетыПечатныхФорм() Экспорт Функция МакетыПечатныхФорм(ТолькоОбработкиИОтчеты = Ложь) Экспорт
Результат = Новый Соответствие; Результат = Новый Соответствие;
КоллекцииОбъектовМетаданных = Новый Массив; // Массив из КоллекцияОбъектовМетаданных - КоллекцииОбъектовМетаданных = Новый Массив; // Массив из КоллекцияОбъектовМетаданных -
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Обработки); КоллекцииОбъектовМетаданных.Добавить(Метаданные.Обработки);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.ЖурналыДокументов);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Отчеты); КоллекцииОбъектовМетаданных.Добавить(Метаданные.Отчеты);
Если Не ТолькоОбработкиИОтчеты Тогда
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи);
КоллекцииОбъектовМетаданных.Добавить(Метаданные.ЖурналыДокументов);
КонецЕсли;
Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл
Для Каждого ОбъектМетаданныхКоллекции Из КоллекцияОбъектовМетаданных Цикл Для Каждого ОбъектМетаданныхКоллекции Из КоллекцияОбъектовМетаданных Цикл
@@ -291,7 +291,7 @@
КнопкаФормы.Заголовок = ПредставлениеЯзыка; КнопкаФормы.Заголовок = ПредставлениеЯзыка;
КнопкаФормы.ПоложениеВКоманднойПанели = ?(ЭтоМобильныйКлиент, КнопкаФормы.ПоложениеВКоманднойПанели = ?(ЭтоМобильныйКлиент,
ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю, ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели); ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю, ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели);
КнопкаФормы.Видимость = МакетНаТекущемЯзыке; КнопкаФормы.Видимость = МакетНаТекущемЯзыке Или Не ЭтоФормаРедактирования;
Если ЭтоФормаРедактирования Тогда Если ЭтоФормаРедактирования Тогда
Команда = Команды.Добавить("ДобавитьЯзык_" + КодЛокализации); Команда = Команды.Добавить("ДобавитьЯзык_" + КодЛокализации);
@@ -1411,48 +1411,55 @@
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
УсловиеОбласти = УсловиеОбласти(ОбластьНачала);
Если ОбластьОкончания = Неопределено Тогда Если ОбластьОкончания = Неопределено Тогда
ВызватьИсключение НСтр("ru='Не удалось найти окончание условной области'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='В макете документа нет окончания условной области ""%1"".'"), УсловиеОбласти);
КонецЕсли; КонецЕсли;
УсловиеОбласти = ПолучитьУсловиеОбласти(ОбластьНачала);
ОбластьКоллекции = Неопределено; ОбластьКоллекции = Неопределено;
ОкончанияУсловныхОбластей = Новый Массив; ОкончанияУсловныхОбластей = Новый Массив;
УдаляемыеОбласти = Новый Массив;
Для Каждого Область Из Области Цикл Для Каждого Область Из Области Цикл
Если Область.Индекс < ИндексНайденнойОбластиОкончание И ИндексНайденнойОбластиНачало < Область.Индекс Тогда Если Область.Индекс >= ИндексНайденнойОбластиОкончание Или ИндексНайденнойОбластиНачало >= Область.Индекс Тогда
Если ЗначениеЗаполнено(Область.Коллекция) Тогда Продолжить;
ОбластьКоллекции = Область; КонецЕсли;
КонецЕсли; Если ЗначениеЗаполнено(Область.Коллекция) Тогда
ЭтоРодительОкончанияУсловия = ОбластьКоллекции = Область;
Область.УзелДереваДокумента.Строки.Найти(ИндексНайденнойОбластиОкончание, "Индекс", Истина) <> Неопределено; КонецЕсли;
Если ЭтоРодительОкончанияУсловия Тогда ЭтоРодительОкончанияУсловия =
Если ОбластьКоллекции <> Неопределено Тогда Область.УзелДереваДокумента.Строки.Найти(ИндексНайденнойОбластиОкончание, "Индекс", Истина) <> Неопределено;
УзелСледующейОбласти = НайтиГраницуСледующейОбласти(ОбластьКоллекции.УзелДереваДокумента, Области); Если Не ЭтоРодительОкончанияУсловия Тогда
Если УзелСледующейОбласти <> Неопределено И УзелСледующейОбласти.Индекс < ИндексНайденнойОбластиОкончание Тогда Область.УсловиеОбласти = УсловиеОбласти;
СтруктураОкончания = Новый Структура("УзелДереваДокумента, УсловиеОбласти"); Продолжить;
СтруктураОкончания.УзелДереваДокумента = УзелСледующейОбласти; КонецЕсли;
СтруктураОкончания.УсловиеОбласти = УсловиеОбласти;
ОкончанияУсловныхОбластей.Добавить(СтруктураОкончания); Если ОбластьКоллекции <> Неопределено Тогда
КонецЕсли; УзелСледующейОбласти = ГраницаСледующейОбласти(ОбластьКоллекции.УзелДереваДокумента, Области);
КонецЕсли; Если УзелСледующейОбласти <> Неопределено И УзелСледующейОбласти.Индекс < ИндексНайденнойОбластиОкончание Тогда
СвойстваОбласти = Новый Структура("УзелДереваДокумента, УсловиеОбласти");
УзелСледующейОбласти = НайтиГраницуСледующейОбласти(ОбластьОкончания, Области); СвойстваОбласти.УзелДереваДокумента = УзелСледующейОбласти;
Если УзелСледующейОбласти = Неопределено Тогда СвойстваОбласти.УсловиеОбласти = УсловиеОбласти;
Области.Удалить(Область); ОкончанияУсловныхОбластей.Добавить(СвойстваОбласти);
Продолжить;
КонецЕсли;
Область.УзелДереваДокумента = УзелСледующейОбласти;
Область.Индекс = Область.УзелДереваДокумента.Индекс;
Иначе
Область.УсловиеОбласти = УсловиеОбласти;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
УзелСледующейОбласти = ГраницаСледующейОбласти(ОбластьОкончания, Области);
Если УзелСледующейОбласти = Неопределено Тогда
УдаляемыеОбласти.Добавить(Область);
Продолжить;
КонецЕсли;
Область.УзелДереваДокумента = УзелСледующейОбласти;
Область.Индекс = Область.УзелДереваДокумента.Индекс;
КонецЦикла; КонецЦикла;
Для Каждого СтруктураОкончания Из ОкончанияУсловныхОбластей Цикл Для каждого Область Из УдаляемыеОбласти Цикл
Области.Удалить(Область);
КонецЦикла;
Для Каждого СвойстваОбласти Из ОкончанияУсловныхОбластей Цикл
НоваяОбласть = Области.Добавить(); НоваяОбласть = Области.Добавить();
ЗаполнитьЗначенияСвойств(НоваяОбласть, СтруктураОкончания); ЗаполнитьЗначенияСвойств(НоваяОбласть, СвойстваОбласти);
НоваяОбласть.Индекс = НоваяОбласть.УзелДереваДокумента.Индекс; НоваяОбласть.Индекс = НоваяОбласть.УзелДереваДокумента.Индекс;
КонецЦикла; КонецЦикла;
@@ -1885,7 +1892,7 @@
КонецЕсли; КонецЕсли;
КонецФункции КонецФункции
Функция НайтиГраницуСледующейОбласти(Строка, Области) Функция ГраницаСледующейОбласти(Строка, Области)
Родитель = Строка.Родитель; Родитель = Строка.Родитель;
Если Родитель = Неопределено Тогда Если Родитель = Неопределено Тогда
Возврат Неопределено; Возврат Неопределено;
@@ -1906,7 +1913,7 @@
Если ПерейтиКРодителю Тогда Если ПерейтиКРодителю Тогда
Возврат НайтиГраницуСледующейОбласти(Родитель, Области); Возврат ГраницаСледующейОбласти(Родитель, Области);
Иначе Иначе
@@ -2088,11 +2095,11 @@
Возврат УправлениеПечатьюКлиентСервер.ИмяТегаУсловие(); Возврат УправлениеПечатьюКлиентСервер.ИмяТегаУсловие();
КонецФункции КонецФункции
Функция ПолучитьУсловиеОбласти(Область) Функция УсловиеОбласти(Область)
МассивУсловияНачало = СтрРазделить(Область.ПолныйТекст, "{", Ложь); МассивУсловияНачало = СтрРазделить(Область.ПолныйТекст, "{", Ложь);
Для к=0 По МассивУсловияНачало.ВГраница() Цикл Для Индекс = 0 По МассивУсловияНачало.ВГраница() Цикл
Если СтрНайти(МассивУсловияНачало[к], ИмяТегаУсловие()+" ") Тогда Если СтрНайти(МассивУсловияНачало[Индекс], ИмяТегаУсловие()+" ") Тогда
МассивУсловияОкончания = СтрРазделить(МассивУсловияНачало[к], "}", Ложь); МассивУсловияОкончания = СтрРазделить(МассивУсловияНачало[Индекс], "}", Ложь);
Возврат СокрЛП(СтрЗаменить(МассивУсловияОкончания[0], ИмяТегаУсловие()+" ", "")); Возврат СокрЛП(СтрЗаменить(МассивУсловияОкончания[0], ИмяТегаУсловие()+" ", ""));
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -2100,11 +2107,11 @@
КонецФункции КонецФункции
Функция СтрокаСодержитНачалоОбласти(Знач Текст, ИменаТабличныхЧастей) Функция СтрокаСодержитНачалоОбласти(Знач Текст, ИменаТабличныхЧастей)
Результат = СтрНайти(Текст, "{"+ИмяТегаУсловие()+" ") ИЛИ СтрНайти(Текст, "{/"+ИмяТегаУсловие());
Результат = СтрНайти(Текст, "{"+ИмяТегаУсловие()+" ") ИЛИ СтрНайти(Текст, "{/"+ИмяТегаУсловие());
СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат); СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат);
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции
Функция СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат) Функция СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат)
@@ -2552,7 +2559,7 @@
КонецПроцедуры КонецПроцедуры
Процедура ДобавитьОбластьСУсловием(Области, Область) Процедура ДобавитьОбластьСУсловием(Области, Область)
УзелСледующейОбласти = НайтиГраницуСледующейОбласти(Область, Области); УзелСледующейОбласти = ГраницаСледующейОбласти(Область, Области);
Если УзелСледующейОбласти = Неопределено Тогда Если УзелСледующейОбласти = Неопределено Тогда
Возврат; Возврат;
@@ -2566,7 +2573,7 @@
НайденнаяОбласть.Индекс = НайденнаяОбласть.УзелДереваДокумента.Индекс; НайденнаяОбласть.Индекс = НайденнаяОбласть.УзелДереваДокумента.Индекс;
КонецЕсли; КонецЕсли;
НайденнаяОбласть.УсловиеОбласти = ПолучитьУсловиеОбласти(Область); НайденнаяОбласть.УсловиеОбласти = УсловиеОбласти(Область);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -2578,7 +2585,7 @@
Исключение Исключение
УдалитьФайлы(ПолноеИмяФайла); УдалитьФайлы(ПолноеИмяФайла);
ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файла шаблона по причине:'") + Символы.ПС ВызватьИсключение(НСтр("ru = 'Не удалось открыть файл шаблона по причине:'") + Символы.ПС
+ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки; КонецПопытки;
@@ -5353,7 +5360,7 @@
Исключение Исключение
УдалитьФайлы(ИмяВременногоФайла); УдалитьФайлы(ИмяВременногоФайла);
ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файла шаблона по причине:'") + Символы.ПС ВызватьИсключение(НСтр("ru = 'Не удалось открыть файл шаблона по причине:'") + Символы.ПС
+ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки; КонецПопытки;
Loaded 100 of 271 files, more files were not shown because too many files have changed in this diff. Show more