3_1_8_302

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

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>
<handlers>
<event>OnChange</event>
<name>ТелефонCДобавочнымНомеромПриИзменении</name>
<name>ТелефонСДобавочнымНомеромПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ТелефонCДобавочнымНомеромРасширеннаяПодсказка</name>
@@ -319,7 +319,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ТелефонCДобавочнымНомеромПриИзменении(Элемент)
Процедура ТелефонСДобавочнымНомеромПриИзменении(Элемент)
ОбновитьДоступностьЭлементовТелефонаФакса(ЭтотОбъект);
@@ -600,14 +600,13 @@
КонецЕсли;
Если Не ВидКонтактнойИнформации.ЭтоГруппа И ПустаяСтрока(ВидКонтактнойИнформации.ВидРедактирования) Тогда
Если ВидКонтактнойИнформации.УдалитьРедактированиеТолькоВДиалоге Тогда
Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница
Или ВидКонтактнойИнформации.УдалитьРедактированиеТолькоВДиалоге Тогда
ВидКонтактнойИнформации.ВидРедактирования = "Диалог";
ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты
Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Skype
Или ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
ВидКонтактнойИнформации.ВидРедактирования = "ПолеВвода";
ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
ВидКонтактнойИнформации.ВидРедактирования = "Диалог";
Иначе
ВидКонтактнойИнформации.ВидРедактирования = "ПолеВводаИДиалог";
КонецЕсли;
@@ -2227,7 +2227,7 @@
</userVisible>
<toolTip>
<key>ru</key>
<value>Не включен вход в программу, нет прав или
<value>Не включен вход в программу, нет прав для входа или
нет ни одного права запуска (тонкий клиент, веб-клиент)</value>
</toolTip>
<extendedTooltip>
@@ -594,8 +594,8 @@
</userVisible>
<toolTip>
<key>ru</key>
<value>У пользователя нет ни одного права запуска (тонкий клиент, веб-клиент,
толстый клиент, automation, внешнее соединение)</value>
<value>У пользователя нет ни одного права запуска
(например, тонкий клиент, веб-клиент)</value>
</toolTip>
<extendedTooltip>
<name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name>
@@ -646,6 +646,110 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</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">
<name>ГруппаИзменитьОграничение</name>
<id>346</id>
@@ -1821,10 +1821,14 @@
Если Форма.ВходВПрограммуРазрешен Тогда
Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав
И Форма.НаличиеПрав.НедостаточноПравДляЗапуска;
Элементы.ГруппаНетПравНаВход.Видимость = Не Форма.НаличиеПрав.НетПрав
И Не Форма.НаличиеПрав.НедостаточноПравДляЗапуска
И Форма.НаличиеПрав.НедостаточноПравДляВхода;
Иначе
Элементы.ГруппаНетПрав.Видимость = Ложь;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь;
Элементы.ГруппаНетПравНаВход.Видимость = Ложь;
КонецЕсли;
// Настройка возможности изменения.
@@ -1704,6 +1704,10 @@
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnLoadDataFromSettingsAtServer</event>
<name>ПриЗагрузкеДанныхИзНастроекНаСервере</name>
</handlers>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
@@ -494,8 +494,9 @@
// Проверка имен действий в форме.
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда
ДействияВФорме.Роли = "";
ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "";
ИначеЕсли ДействияВФорме.Роли = "Редактирование"
И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда
ДействияВФорме.СвойстваПользователяИБ = "";
@@ -883,7 +883,7 @@
<userVisible/>
</cmiFragmentRecord>
<cmiFragmentRecord>
<command>CommonCommand.СкрытьПерсональныеДанныеСубъектов</command>
<command>0</command>
<userVisible/>
</cmiFragmentRecord>
</commandBar>
@@ -2159,66 +2159,42 @@
// ПолноеИмя - Строка
//
// Возвращаемое значение:
// Тип
// Строка
// - Тип
// - Строка
//
Функция КлючОбъектаМетаданных(ПолноеИмя)
ПозицияТочки = СтрНайти(ПолноеИмя, ".");
КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1);
ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1);
КлассОбъектаМетаданных = ВРег(Лев( ПолноеИмя, ПозицияТочки - 1));
ИмяОбъектаМетаданных = Сред(ПолноеИмя, ПозицияТочки + 1);
Если ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
Если КлассОбъектаМетаданных = ВРег("ПланОбмена")
Или КлассОбъектаМетаданных = ВРег("Справочник")
Или КлассОбъектаМетаданных = ВРег("Документ")
Или КлассОбъектаМетаданных = ВРег("ПланВидовХарактеристик")
Или КлассОбъектаМетаданных = ВРег("ПланСчетов")
Или КлассОбъектаМетаданных = ВРег("ПланВидовРасчета")
Или КлассОбъектаМетаданных = ВРег("БизнесПроцесс")
Или КлассОбъектаМетаданных = ВРег("Задача") Тогда
Возврат Тип(КлассОбъектаМетаданных + "Ссылка." + ИмяОбъектаМетаданных);
ИначеЕсли ВРег(КлассОМ) = ВРег("Роль") Тогда
Возврат КлючРоли(Метаданные.Роли[ИмяОМ]);
ИначеЕсли КлассОбъектаМетаданных = ВРег("Роль") Тогда
Возврат КлючРоли(Метаданные.Роли[ИмяОбъектаМетаданных]);
ИначеЕсли ВРег(КлассОМ) = ВРег("Константа") Тогда
ИначеЕсли КлассОбъектаМетаданных = ВРег("Константа")
Или КлассОбъектаМетаданных = ВРег("ЖурналДокументов") Тогда
Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя));
ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли КлассОбъектаМетаданных = ВРег("Отчет")
Или КлассОбъектаМетаданных = ВРег("Обработка") Тогда
Возврат Тип(КлассОбъектаМетаданных + "Объект." + ИмяОбъектаМетаданных);
ИначеЕсли ВРег(КлассОМ) = ВРег("Документ") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ЖурналДокументов") Тогда
Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя));
ИначеЕсли ВРег(КлассОМ) = ВРег("Отчет") Тогда
Возврат Тип(КлассОМ + "Объект." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("Обработка") Тогда
Возврат Тип(КлассОМ + "Объект." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовХарактеристик") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланСчетов") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовРасчета") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрСведений") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрНакопления") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрБухгалтерии") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрРасчета") Тогда
Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("БизнесПроцесс") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("Задача") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли КлассОбъектаМетаданных = ВРег("РегистрСведений")
Или КлассОбъектаМетаданных = ВРег("РегистрНакопления")
Или КлассОбъектаМетаданных = ВРег("РегистрБухгалтерии")
Или КлассОбъектаМетаданных = ВРег("РегистрРасчета") Тогда
Возврат Тип(КлассОбъектаМетаданных + "КлючЗаписи." + ИмяОбъектаМетаданных);
Иначе
// Без ключа объекта метаданных.
Возврат Тип("Неопределено");
@@ -3637,11 +3613,9 @@
УстановленныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.БазаДанных);
ОтключенныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансОтключенные);
АктивныеРасширения = РасширенияКонфигурации.Получить(Отбор, ИсточникРасширенийКонфигурации.СеансАктивные);
Если АктивныеРасширения.Количество() > 0 Тогда
ИмяРасширения = УстановленныеРасширения[0].Имя;
ИначеЕсли ОтключенныеРасширения.Количество() > 0 Тогда
ИмяРасширения = УстановленныеРасширения[0].Имя;
ИначеЕсли УстановленныеРасширения.Количество() > 0 Тогда
Если АктивныеРасширения.Количество() > 0
Или ОтключенныеРасширения.Количество() > 0
Или УстановленныеРасширения.Количество() > 0 Тогда
ИмяРасширения = УстановленныеРасширения[0].Имя;
КонецЕсли;
КонецЕсли;
@@ -3326,7 +3326,7 @@
</userVisible>
<toolTip>
<key>ru</key>
<value>Не включен вход в программу, нет прав или
<value>Не включен вход в программу, нет прав для входа или
нет ни одного права запуска (тонкий клиент, веб-клиент,
толстый клиент, automation, внешнее соединение)</value>
</toolTip>
@@ -987,7 +987,8 @@
</userVisible>
<toolTip>
<key>ru</key>
<value>У пользователя нет ни одного права запуска (тонкий клиент, веб-клиент)</value>
<value>У пользователя нет ни одного права запуска
(например, тонкий клиент, веб-клиент)</value>
</toolTip>
<extendedTooltip>
<name>НетПравНаЗапускНадписьРасширеннаяПодсказка</name>
@@ -1038,6 +1039,110 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</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">
<name>ГруппаИзменитьОграничение</name>
<id>331</id>
@@ -3217,6 +3322,7 @@
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ФормаОчиститьФотографию</name>
@@ -965,6 +965,7 @@
Возврат;
КонецЕсли;
#Если Не ВебКлиент Тогда
Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение));
Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением.'"));
@@ -975,6 +976,7 @@
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением меньше 2 Мб.'"));
Возврат;
КонецЕсли;
#КонецЕсли
Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда
УдалитьИзВременногоХранилища(АдресФотографии);
@@ -2535,10 +2537,14 @@
Если Форма.ВходВПрограммуРазрешен Тогда
Элементы.ГруппаНетПрав.Видимость = Форма.НаличиеПрав.НетПрав;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Не Форма.НаличиеПрав.НетПрав
И Форма.НаличиеПрав.НедостаточноПравДляЗапуска;
Элементы.ГруппаНетПравНаВход.Видимость = Не Форма.НаличиеПрав.НетПрав
И Не Форма.НаличиеПрав.НедостаточноПравДляЗапуска
И Форма.НаличиеПрав.НедостаточноПравДляВхода;
Иначе
Элементы.ГруппаНетПрав.Видимость = Ложь;
Элементы.ГруппаНетПравНаЗапуск.Видимость = Ложь;
Элементы.ГруппаНетПравНаВход.Видимость = Ложь;
КонецЕсли;
// Настройка возможности изменения.
@@ -671,6 +671,10 @@
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа расписание</value>
</title>
<extendedTooltip>
<name>ГруппаРасписаниеРасширеннаяПодсказка</name>
<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 = Истина;
Настройка.НетВ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;
ИначеЕсли Вариант = 3 Тогда // "Каждый четвертый день"
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
Расписание.ПериодПовтораДней = 4;
ИначеЕсли Вариант = 4 Тогда // "По будням"
@@ -3220,10 +3222,6 @@
ИначеЕсли Вариант = 12 Тогда // "Другое..."
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное;
Иначе
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
КонецЕсли;
// по дням недели
@@ -3802,6 +3800,9 @@
Элемент.Ширина = 70;
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_СертификатДляШифрованияПриИзменении");
Элемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Элемент.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'При рассылке отчетов по электронной почте необходимо учитывать,
|что некоторые почтовые сервера могут не принимать зашифрованные файлы.'");
КонецПроцедуры
@@ -248,7 +248,7 @@
ПолучателиМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторОбъектаМетаданных, Ложь);
Если ПолучателиМетаданные = Неопределено Тогда
Если ПолучателиМетаданные = Неопределено Или ПолучателиМетаданные = Null Тогда
Возврат КоличествоПолучателей;
КонецЕсли;
@@ -250,7 +250,7 @@
</dataPath>
<toolTip>
<key>ru</key>
<value>Используется с объектами адресации</value>
<value>Используется без объектов адресации</value>
</toolTip>
<extendedTooltip>
<name>ИспользуетсяБезОбъектовАдресацииExtendedTooltip</name>
@@ -159,11 +159,8 @@
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Проверка", "", "");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
ИначеЕсли ЭтоВстроенныйКриптопровайдер Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь;
ИначеЕсли Не СтандартныеПроверки
И Не ВводитьПароль Тогда
ИначеЕсли ЭтоВстроенныйКриптопровайдер
Или (Не СтандартныеПроверки И Не ВводитьПароль) Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь;
КонецЕсли;
@@ -837,7 +837,7 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_2_23</name>
<name>КомпонентаExtraCryptoAPI_3_0_2_24</name>
<synonym>
<key>ru</key>
<value>Компонента ExtraCryptoAPI</value>
@@ -38,16 +38,9 @@
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Не СтандартнаяОбработка Тогда
// Обрабатывается в другом месте.
Возврат;
ИначеЕсли Не Параметры.Свойство("РазрешитьДанныеКлассификатора") Тогда
// Поведение по умолчанию, подбор только справочника.
Возврат;
ИначеЕсли Истина <> Параметры.РазрешитьДанныеКлассификатора Тогда
// Подбор классификатора отключен, поведение по умолчанию.
Если Не СтандартнаяОбработка
Или Не Параметры.Свойство("РазрешитьДанныеКлассификатора")
Или Не Параметры.РазрешитьДанныеКлассификатора Тогда
Возврат;
КонецЕсли;
@@ -84,11 +84,7 @@
ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда
СтандартнаяОбработка = Ложь;
Если Параметры.Свойство("Ключ") Тогда
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
Иначе
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
КонецЕсли;
ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
СтандартнаяОбработка = Ложь;
@@ -384,27 +384,16 @@
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда
Элементы.КнопкаВперед.Доступность = ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПустаяСсылка");
Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаСоставной;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтроках;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВКолонках;
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтрокахИКолонках;
Иначе
Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаПустая;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВопросы Тогда
@@ -415,27 +404,16 @@
КонецЕсли;
Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 0);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках")
Или ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1);
ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда
Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() = 3);
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда
Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка);
КонецЕсли;
КонецПроцедуры
@@ -168,9 +168,8 @@
СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка);
СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Вопрос") Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Корень") Тогда
Если (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Вопрос")
Или (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Корень") Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Раздел") Тогда
Если СтрокаПеретаскивание.ВопросШаблона = СтрокаНазначение.ВопросШаблона Тогда
@@ -182,9 +181,8 @@
Если Родитель = СтрокаПеретаскивание Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
Иначе
Родитель = Родитель.ПолучитьРодителя();
КонецЕсли;
Родитель = Родитель.ПолучитьРодителя();
КонецЦикла;
КонецЕсли;
@@ -276,7 +276,6 @@
КонецПроцедуры
// Управляет видимостью страниц и элементов формы.
&НаКлиенте
Процедура УправлениеВидимостью()
@@ -291,42 +290,25 @@
ДоступностьНеобходимостьПояснениеКомментария();
Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Строка") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаСтрока;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаЧисло;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")
ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.ВариантыОтветов;
ДоступностьТаблицыВариантыОтветов(ЭтотОбъект);
Иначе
Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая;
КонецЕсли;
Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяОтображать;
ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево") Тогда
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидОтображенияБулевоОтображать;
Иначе
Элементы.ГруппаВидПереключателя.ТекущаяСтраница = Элементы.ГруппаВидПереключателяНеОтображать;
КонецЕсли;
КонецПроцедуры
@@ -83,45 +83,17 @@
// Устанавливает тип значения ПВХ в зависимости от типа ответа.
Процедура УстановкаТипаПВХ()
ТипыОтветовНаВопрос = Перечисления.ТипыОтветовНаВопрос;
// Квалификаторы
КЧ = Новый КвалификаторыЧисла(?(Длина = 0,15,Длина),Точность);
КС = Новый КвалификаторыСтроки(Длина);
КД = Новый КвалификаторыДаты(ЧастиДаты.Дата);
// Описание типов
ОписаниеТиповЧисло = Новый ОписаниеТипов("Число",,КЧ);
ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка", , КС);
ОписаниеТиповДата = Новый ОписаниеТипов("Дата",КД , , );
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
ОписаниеТиповВО = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет");
Если ТипОтвета = ТипыОтветовНаВопрос.Строка Тогда
ТипЗначения = ОписаниеТиповСтрока;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Текст Тогда
ТипЗначения = ОписаниеТиповСтрока;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Число Тогда
ТипЗначения = ОписаниеТиповЧисло;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Дата Тогда
ТипЗначения = ОписаниеТиповДата;
ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Булево Тогда
ТипЗначения = ОписаниеТиповБулево;
ИначеЕсли ТипОтвета =ТипыОтветовНаВопрос.ОдинВариантИз
ИЛИ ТипОтвета = ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ТипЗначения = ОписаниеТиповВО;
Если ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Или ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ТипЗначения = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(Длина));
ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Число Тогда
ТипЗначения = Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(?(Длина = 0, 15, Длина), Точность));
ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Дата Тогда
ТипЗначения = Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата));
ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда
ТипЗначения = Новый ОписаниеТипов("Булево");
ИначеЕсли ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз
ИЛИ ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет");
КонецЕсли;
КонецПроцедуры
@@ -1977,16 +1977,7 @@
Элементы.УточнениеНаборовКомментарий.Гиперссылка = Истина;
Элементы.УточнениеНаборовИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка);
Если СписокНаборов.Количество() < 2 Тогда
Элементы.УточнениеНаборовИзменить.Видимость = Ложь;
ИначеЕсли ЗначениеЗаполнено(ТекущийНаборСвойств) Тогда
Элементы.УточнениеНаборовИзменить.Видимость = Истина;
Иначе
Элементы.УточнениеНаборовИзменить.Видимость = Ложь;
КонецЕсли;
Элементы.УточнениеНаборовИзменить.Видимость = СписокНаборов.Количество() >= 2 И ЗначениеЗаполнено(ТекущийНаборСвойств);
Если СписокНаборов.Количество() = 0 Тогда
Элементы.УточнениеНаборовКомментарий.Гиперссылка = Ложь;
@@ -2177,9 +2168,15 @@
|Список значений этого сведения будет общим с исходным сведением.
|С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных сведений.
|При этом можно отредактировать наименование и ряд других свойств сведения.'");
Если РеквизитСоСпискомДополнительныхЗначений Тогда
СоздатьКопированием = НСтр("ru = 'Сделать копию сведения
|
|Будет создана копия сведения%1'");
|Будет создана копия сведения и всех его значений.'")
Иначе
СоздатьКопированием = НСтр("ru = 'Сделать копию сведения
|
|Будет создана копия сведения.'");
КонецЕсли;
Иначе
ДобавитьОбщий = НСтр("ru = 'Добавить реквизит как есть (рекомендуется)
|
@@ -2189,21 +2186,20 @@
|Список значений этого реквизита будет общим с исходным реквизитом.
|С помощью этого варианта удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов.
|При этом можно отредактировать наименование и ряд других свойств реквизита.'");
Если РеквизитСоСпискомДополнительныхЗначений Тогда
СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита
|
|Будет создана копия реквизита%1'");
|Будет создана копия реквизита и всех его значений.'");
Иначе
СоздатьКопированием = НСтр("ru = 'Сделать копию реквизита
|
|Будет создана копия реквизита.'");
КонецЕсли;
КонецЕсли;
СписокВыбора = Элементы.РежимДобавленияРеквизита.СписокВыбора;
СписокВыбора.Очистить();
Если РеквизитСоСпискомДополнительныхЗначений Тогда
ШаблонВставки = " " + НСтр("ru = 'и всех его значений.'");
Иначе
ШаблонВставки = ".";
КонецЕсли;
СоздатьКопированием = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СоздатьКопированием, ШаблонВставки);
СписокВыбора.Добавить("ДобавитьОбщийРеквизитВНабор", ДобавитьОбщий);
Если РеквизитСоСпискомДополнительныхЗначений Тогда
СписокВыбора.Добавить("СоздатьПоОбразцу", СделатьПоОбразцу);
@@ -82,10 +82,6 @@
<metadata>InformationRegister.ЗамерыВремени</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ПолучениеСубъектовДляСкрытияПерсональныхДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.НастройкаПроксиСервера</metadata>
<use>DontUse</use>
@@ -178,10 +174,6 @@
<metadata>Constant.АдресДляВосстановленияПароляУчетнойЗаписи</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.СкрытиеПерсональныхДанныхСубъектов</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Catalog.ИдентификаторыОбъектовМетаданных</metadata>
<use>DontUse</use>
@@ -614,6 +606,10 @@
<metadata>ScheduledJob.ЗагрузкаКурсовВалют</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.РасчетСроковХраненияПерсональныхДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>InformationRegister.БуферОперацийСтатистики</metadata>
<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];
КонецЕсли;
КонецЕсли;
@@ -188,7 +188,7 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2];
Иначе
ИначеЕсли Параметры.Объект <> Неопределено Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2];
КонецЕсли;
КонецЕсли;
@@ -234,9 +234,9 @@
Для каждого Язык Из Языки Цикл
Если СтрСравнить(Язык.КодЯзыка, ТекущийКодЯзыка) = 0 Тогда
Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]);
ИначеЕсли СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) = 0 И Не Результат.Свойство("СтрокаНаТекущемЯзыке") Тогда
Если СтрСравнить(Язык.КодЯзыка, ТекущийКодЯзыка) = 0
Или (СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) = 0
И Не Результат.Свойство("СтрокаНаТекущемЯзыке")) Тогда
Результат.Вставить("СтрокаНаТекущемЯзыке", ЭтотОбъект[Язык.Имя]);
КонецЕсли;
@@ -5,11 +5,11 @@
<value>Регистрация событий доступа к персональным данным</value>
</title>
<items xsi:type="form:Table">
<name>ОбластиПерсональныхДанных</name>
<name>КатегорииПерсональныхДанных</name>
<id>7</id>
<title>
<key>ru</key>
<value>Области персональных данных</value>
<value>Категории персональных данных</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
@@ -17,20 +17,20 @@
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОбластиПерсональныхДанных</segments>
<segments>КатегорииПерсональныхДанных</segments>
</dataPath>
<titleLocation>None</titleLocation>
<autoCommandBar>
<name>ОбластиПерсональныхДанныхКоманднаяПанель</name>
<name>КатегорииПерсональныхДанныхКоманднаяПанель</name>
<id>9</id>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<searchStringAddition>
<name>ОбластиПерсональныхДанныхSearchString</name>
<name>КатегорииПерсональныхДанныхСтрокаПоиска</name>
<id>13</id>
<extendedTooltip>
<name>ОбластиПерсональныхДанныхSearchStringExtendedTooltip</name>
<name>КатегорииПерсональныхДанныхСтрокаПоискаРасширеннаяПодсказка</name>
<id>15</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -40,20 +40,20 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОбластиПерсональныхДанныхSearchStringContextMenu</name>
<name>КатегорииПерсональныхДанныхСтрокаПоискаКонтекстноеМеню</name>
<id>14</id>
<autoFill>true</autoFill>
</contextMenu>
<source>ОбластиПерсональныхДанных</source>
<source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<name>ОбластиПерсональныхДанныхViewStatus</name>
<name>КатегорииПерсональныхДанныхСостояниеПросмотра</name>
<id>16</id>
<extendedTooltip>
<name>ОбластиПерсональныхДанныхViewStatusExtendedTooltip</name>
<name>КатегорииПерсональныхДанныхСостояниеПросмотраРасширеннаяПодсказка</name>
<id>18</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -63,21 +63,21 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОбластиПерсональныхДанныхViewStatusContextMenu</name>
<name>КатегорииПерсональныхДанныхСостояниеПросмотраКонтекстноеМеню</name>
<id>17</id>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>ОбластиПерсональныхДанных</source>
<source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<name>ОбластиПерсональныхДанныхSearchControl</name>
<name>КатегорииПерсональныхДанныхУправлениеПоиском</name>
<id>19</id>
<extendedTooltip>
<name>ОбластиПерсональныхДанныхSearchControlExtendedTooltip</name>
<name>КатегорииПерсональныхДанныхУправлениеПоискомРасширеннаяПодсказка</name>
<id>21</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -87,18 +87,18 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОбластиПерсональныхДанныхSearchControlContextMenu</name>
<name>КатегорииПерсональныхДанныхУправлениеПоискомКонтекстноеМеню</name>
<id>20</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>ОбластиПерсональныхДанных</source>
<source>КатегорииПерсональныхДанных</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>ОбластиПерсональныхДанныхExtendedTooltip</name>
<name>КатегорииПерсональныхДанныхРасширеннаяПодсказка</name>
<id>11</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -108,7 +108,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОбластиПерсональныхДанныхКонтекстноеМеню</name>
<name>КатегорииПерсональныхДанныхКонтекстноеМеню</name>
<id>8</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -223,10 +223,10 @@
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>ОбластиПерсональныхДанных</name>
<name>КатегорииПерсональныхДанных</name>
<title>
<key>ru</key>
<value>Области персональных данных</value>
<value>Категории персональных данных</value>
</title>
<id>1</id>
<valueType>
@@ -29,6 +29,25 @@
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыКатегорииПерсональныхДанных
&НаКлиенте
Процедура Подключаемый_ПриИзмененииКатегорииПерсональныхДанныхИспользование(Элемент)
ДанныеТекущейСтроки = ЭтотОбъект.КатегорииПерсональныхДанных.НайтиПоИдентификатору(
Элементы.КатегорииПерсональныхДанных.ТекущаяСтрока);
ПодчиненныеСтроки = ДанныеТекущейСтроки.ПолучитьЭлементы();
Если ПодчиненныеСтроки.Количество() > 0 Тогда
Для Каждого СтрокаДерева Из ПодчиненныеСтроки Цикл
СтрокаДерева.Использование = ДанныеТекущейСтроки.Использование;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
@@ -1112,12 +1112,9 @@
ОбновитьЗначение(ОписаниеПрограммы.УстановленаНаСервере, "");
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
Возврат;
ИначеЕсли ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(ОписаниеПрограммы.Установлена, Истина);
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
Возврат;
ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ОписаниеПрограммы.ТипРазмещения) = "ОблачнаяПодпись" Тогда
ИначеЕсли ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер
Или ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ОписаниеПрограммы.ТипРазмещения) = "ОблачнаяПодпись" Тогда
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(ОписаниеПрограммы.Установлена, Истина);
ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст);
@@ -1491,10 +1488,7 @@
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(СтрокаВыборки.ТипРазмещения) = "ОблачнаяПодпись"
И Не Строка.ПометкаУдаления Тогда
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли СтрокаВыборки.ТипРазмещения = 5 Тогда
И Не Строка.ПометкаУдаления Или СтрокаВыборки.ТипРазмещения = 5 Тогда
ОбновитьЗначение(Строка.РезультатПроверки, НСтр("ru = 'Доступен.'"));
ОбновитьЗначение(Строка.Установлена, Истина);
ИначеЕсли Строка.ТипРазмещения = 1 И (Настройки.ПроверятьЭлектронныеПодписиНаСервере Или Настройки.СоздаватьЭлектронныеПодписиНаСервере) Тогда
@@ -94,13 +94,9 @@
НСтр("ru = 'Не выполнены дополнительные процедуры обработки данных'");
КонецЕсли;
Если Не ЗначениеЗаполнено(ВремяНачалаОбновления) И Не ЗначениеЗаполнено(ВремяОкончанияОбновления) Тогда
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Ложь;
ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() И Не ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Истина;
Иначе
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Ложь;
КонецЕсли;
Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость =
(Пользователи.ЭтоПолноправныйПользователь() И Не ОбщегоНазначения.РазделениеВключено())
И (ЗначениеЗаполнено(ВремяНачалаОбновления) Или ЗначениеЗаполнено(ВремяОкончанияОбновления));
КлиентСервернаяБаза = Не ОбщегоНазначения.ИнформационнаяБазаФайловая();
@@ -852,10 +852,6 @@
<key>ru</key>
<value>Страница сообщение не отправлено</value>
</title>
<toolTip>
<key>ru</key>
<value>Страница сообщение отправлено</value>
</toolTip>
<extendedTooltip>
<name>СтраницаСообщениеНеОтправленоРасширеннаяПодсказка</name>
<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,20 +749,18 @@
ВыбранноеЗначение.Свойство("ВариантСохранения", ВариантСохранения);
СписокВложений = Неопределено;
Если ОбъединитьДокументы И ВариантСохранения <> "Присоединить" Тогда
Вложение = Новый Структура("АдресВоВременномХранилище, Название, Печать, Представление, ОбъектПечати");
Вложение = ОписаниеФайла(СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы);
Вложение.АдресВоВременномХранилище = СтруктураЕдиногоДокумента.АдресПечатнойФормы;
Вложение.Название = СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы;
Вложение.Печать = Истина;
Вложение.Представление = СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы;
Вложение.ОбъектПечати = ВыбранноеЗначение.ОбъектПечати;
СписокВложений = Новый Массив;
СписокВложений.Добавить(Вложение);
КонецЕсли;
ВыбранноеЗначение.Вставить("СписокВложений", СписокВложений);
Если ВыбранноеЗначение.Подписать Тогда
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение,,Истина);
Если ВыбранноеЗначение.Подписать Тогда
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда
Если ВыбранноеЗначение.ВариантСохранения = "Присоединить" Тогда
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
@@ -777,6 +774,8 @@
ПодписатьФайлы(ФайлыВоВременномХранилище, ПараметрыВыбора);
Иначе
ПараметрыВыбора.ВыбранноеЗначение.Вставить("СписокВложений",
ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение));
ЗавершениеОбработкиВыбора(Истина, ПараметрыВыбора);
КонецЕсли;
@@ -830,9 +829,8 @@
&НаКлиенте
Процедура ЗавершениеОбработкиВыбора(Результат, ПараметрыВыбора) Экспорт
Если Результат = Ложь Тогда
Возврат;
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Успех") И Не Результат.Успех Тогда
Если Результат = Ложь
Или (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Успех") И Не Результат.Успех) Тогда
Возврат;
КонецЕсли;
@@ -848,8 +846,7 @@
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
Иначе
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение);
СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
СохранитьПечатныеФормыВКаталог(ВыбранноеЗначение.СписокВложений, ВыбранноеЗначение.ПапкаДляСохранения);
КонецЕсли;
Иначе
@@ -1288,9 +1285,7 @@
ЗаписьZipФайла.Записать();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("Представление", АрхивОбъекта.Значение.Представление);
ОписаниеФайла = ОписаниеФайла(АрхивОбъекта.Значение.Представление);
ОписаниеФайла.Вставить("ОбъектПечати", АрхивОбъекта.Ключ);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
Результат.Добавить(ОписаниеФайла);
@@ -1358,10 +1353,8 @@
ДвоичныеДанные.Записать(ПолноеИмяФайла);
ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
Иначе
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("Представление", ИмяФайла);
ОписаниеФайла = ОписаниеФайла(ИмяФайла);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ФайлОфисногоДокумента.Ключ);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
ОписаниеФайла.Вставить("ОбъектПечати", ОбъектПечати);
Результат.Добавить(ОписаниеФайла);
КонецЕсли;
@@ -1387,10 +1380,8 @@
ДвоичныеДанные.Записать(ПолноеИмяФайла);
ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
Иначе
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("Представление", ИмяФайла);
ОписаниеФайла = ОписаниеФайла(ИмяФайла);
ОписаниеФайла.Вставить("АдресВоВременномХранилище", НастройкаПечатнойФормы.АдресВоВременномХранилище);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
ОписаниеФайла.Вставить("ОбъектПечати", НастройкаПечатнойФормы.ОбъектПечати);
Результат.Добавить(ОписаниеФайла);
КонецЕсли;
@@ -1403,8 +1394,7 @@
ЗаписьZipФайла.Записать();
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("Представление", ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр));
ОписаниеФайла = ОписаниеФайла(ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр));
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
Если ПереданныеНастройки.Свойство("ОбъектПечати") Тогда
ОписаниеФайла.Вставить("ОбъектПечати", ПереданныеНастройки.ОбъектПечати);
@@ -1565,6 +1555,17 @@
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания());
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОписаниеФайла(НаименованиеФайла = "")
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("АдресВоВременномХранилище", "");
ОписаниеФайла.Вставить("Название", НаименованиеФайла);
ОписаниеФайла.Вставить("Печать", Истина);
ОписаниеФайла.Вставить("Представление", НаименованиеФайла);
ОписаниеФайла.Вставить("ОбъектПечати", Неопределено);
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
Возврат ОписаниеФайла;
КонецФункции
#КонецОбласти
@@ -30,9 +30,6 @@
Элементы.ДекорацияДобавлениеМетокВремени.Видимость = Истина;
Элементы.ДекорацияДобавлениеМетокВремени.Заголовок = НСтр("ru='В подписи будут добавлены архивные метки времени'");
Элементы.ТипПодписи.Видимость = Ложь;
ИначеЕсли Параметры.РежимПродления = "НеобработанныеПодписи" Тогда
Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Истина;
Элементы.ТипПодписи.Видимость = Истина;
Иначе
Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Истина;
Элементы.ТипПодписи.Видимость = Истина;
@@ -4493,12 +4493,10 @@
КонецЕсли;
Если СледующийУровень Тогда
Если Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен Тогда
ПараметрыВыполнения.Оборачивать = Ложь;
ИначеЕсли Строка.ПолучитьЭлементы().Количество() > 1 Тогда
ПараметрыВыполнения.Оборачивать = Ложь;
ИначеЕсли Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Подтип = "ТаблицаКолонки" Тогда
Если (Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен)
Или Строка.ПолучитьЭлементы().Количество() > 1
Или (Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Подтип = "ТаблицаКолонки") Тогда
ПараметрыВыполнения.Оборачивать = Ложь;
КонецЕсли;
КонецЕсли;
@@ -3351,7 +3351,9 @@
КонецФункции
Функция НаименованиеЗемельногоУчастка() Экспорт
// АПК: 1036-выкл Данные адресного классификатора, не локализуются
Возврат "Зем. участок";
// АПК: 1036-вкл
КонецФункции
Функция ПредставлениеУровняАдреса(Адрес, ИмяУровня) Экспорт
@@ -574,63 +574,43 @@
ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(СтрокаДерева.КлючСтроки);
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка");
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Формулировка",ОписаниеТипаСтроки));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса + "_Формулировка", ОписаниеТипаСтроки));
Если СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда
ДобавитьРеквизитыТабличныйВопрос(СтрокаДерева,ДобавляемыеРеквизиты,Форма);
ИначеЕсли СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Комплексный Тогда
ДобавитьРеквизитыКомплексныйВопрос(СтрокаДерева, ДобавляемыеРеквизиты, Форма);
Иначе
Если СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда
Если СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка
Или СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(СтрокаДерева.Длина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаСтроки,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Текст Тогда
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(СтрокаДерева.Длина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаСтроки,,СтрокаДерева.Формулировка));
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(СтрокаДерева.Длина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса, ОписаниеТипаСтроки,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда
ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаБулево,,СтрокаДерева.Формулировка));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаБулево,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Дата Тогда
ОписаниеТипаДата = Новый ОписаниеТипов("Дата",Новый КвалификаторыДаты(ЧастиДаты.Дата));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаДата,,СтрокаДерева.Формулировка));
ОписаниеТипаДата = Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты(ЧастиДаты.Дата));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаДата,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Число Тогда
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(СтрокаДерева.Длина,СтрокаДерева.Точность));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаЧисло,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,,СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз Тогда
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,,СтрокаДерева.Формулировка));
ОписаниеТипаЧисло = Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(СтрокаДерева.Длина, СтрокаДерева.Точность));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,ОписаниеТипаЧисло,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы
Или СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз Тогда
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяВопроса,СтрокаДерева.ТипЗначения,, СтрокаДерева.Формулировка));
ИначеЕсли СтрокаДерева.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда
ВариантыОтветовНаВопрос = ВариантыОтветовНаВопрос(СтрокаДерева.ЭлементарныйВопрос,Форма);
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150));
ОписаниеТипаСтроки = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150));
ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
Счетчик = 0;
Для каждого ВариантОтвета Из ВариантыОтветовНаВопрос Цикл
Счетчик = Счетчик + 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 @@
// * СообщенияПользователю - ФиксированныйМассив
// * Получатели - ТаблицаЗначений:
// ** Представление - Строка
// ** АдресВоВременномХранилище - Строка
// ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * ПолучателиОтвета
// ** Представление - Строка
// ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * ПолучателиСкрытыхКопий
// ** Представление - Строка
// ** Адрес - Строка - адрес во временном хранилище
// ** ИсточникКонтактнойИнформации - ОпределяемыеТип.ВладелецКонтактнойИнформации
// * Вложения - ТаблицаЗначений:
// ** Представление - Строка
@@ -804,6 +822,20 @@
Сообщение.Вставить("Получатели", Получатели);
ПолучателиОтвета = Новый ТаблицаЗначений;
ПолучателиОтвета.Колонки.Добавить("Адрес", ТипСтрока);
ПолучателиОтвета.Колонки.Добавить("Представление", ТипСтрока);
ПолучателиОтвета.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип);
Сообщение.Вставить("ПолучателиОтвета", ПолучателиОтвета);
ПолучателиСкрытыхКопий = Новый ТаблицаЗначений;
ПолучателиСкрытыхКопий.Колонки.Добавить("Адрес", ТипСтрока);
ПолучателиСкрытыхКопий.Колонки.Добавить("Представление", ТипСтрока);
ПолучателиСкрытыхКопий.Колонки.Добавить("ИсточникКонтактнойИнформации", Метаданные.ОпределяемыеТипы.ВладелецКонтактнойИнформации.Тип);
Сообщение.Вставить("ПолучателиСкрытыхКопий", ПолучателиСкрытыхКопий);
Вложения = Новый ТаблицаЗначений;
Вложения.Колонки.Добавить("Представление", ТипСтрока);
Вложения.Колонки.Добавить("АдресВоВременномХранилище", ТипСтрока);
@@ -1307,7 +1339,7 @@
// ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль.
// НеобработанныеЗначенияОригиналов - Массив из Структура:
// * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта.
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам.
// * ИспользуемыеСвязи - см. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам.
// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита.
//
Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт
@@ -1329,15 +1361,11 @@
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка())
,УровеньЖурналаРегистрации.Ошибка
,НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные
,,ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(НСтр("ru='Поиск и замена ссылок'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
НеобработанныйДубль.ЗаменяемоеЗначение.Метаданные,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
@@ -1413,7 +1441,7 @@
Иначе
Адрес = Параметры.Адрес;
ДоменныйАдрес = ПолучитьДоменныйАдресДляПоиска(Параметры.Адрес);
ВариантыПоискаПоСтроке = ПолучитьВариантыПоискаПоСтроке(Параметры.Представление, Параметры.Адрес);
ВариантыПоискаПоСтроке = ВариантыПоискаПоСтроке(Параметры.Представление, Параметры.Адрес);
Представление = Параметры.Представление;
КонецЕсли;
@@ -1536,7 +1564,7 @@
// Возвращаемое значение:
// СписокЗначений
//
Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес)
Функция ВариантыПоискаПоСтроке(Представление, Адрес)
Если ПустаяСтрока(Представление) Тогда
Возврат Адрес;
@@ -2748,9 +2776,8 @@
//
Процедура ДозаполнитьПоляКонтактов(Контакт, Представление, Адрес, ТипКонтактнойИнформации = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Контакт) Тогда
Возврат;
ИначеЕсли Не ПустаяСтрока(Представление) И Не ПустаяСтрока(Адрес) Тогда
Если Не ЗначениеЗаполнено(Контакт)
Или (Не ПустаяСтрока(Представление) И Не ПустаяСтрока(Адрес)) Тогда
Возврат;
КонецЕсли;
@@ -1914,16 +1914,10 @@
ДополнительныеПараметрыОтправки.Заменить = Истина;
ДополнительныеПараметрыОтправки.ОтсрочкаДоставки = 3;
ДополнительныеПараметрыОтправки.СобытиеЖурналаПриОтсрочкеДоставки =
НСтр("ru = 'Длительные операция.Отложенная доставка прогресса'",
НСтр("ru = 'Длительные операции.Отложенная доставка прогресса'",
ОбщегоНазначения.КодОсновногоЯзыка());
Попытка
ВызватьИсключение НСтр("ru = 'Стек вызовов:'");
Исключение
СтекВызовов = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ДополнительныеПараметрыОтправки.КомментарийЖурналаПриОтсрочкеДоставки =
НСтр("ru = 'Отправка прогресса чаще одного раза в 3 сек.'")
+ Символы.ПС + СтекВызовов;
НСтр("ru = 'Отправка прогресса чаще одного раза в 3 сек.'");
КонецЕсли;
СерверныеОповещения.ОтправитьСерверноеОповещениеСИдентификаторомГруппы(ИмяОповещения(),
@@ -1964,7 +1958,10 @@
ПоследнийИдентификатор = ПоследнийИдентификатор(ИдентификаторЗадания);
ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ПоследнийИдентификатор);
Если ФоновоеЗадание <> Неопределено Тогда
Если ФоновоеЗадание <> Неопределено
И Не МонопольныйРежимВФоновомЗадании(ФоновоеЗадание) Тогда
Сообщения = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина);
Для Каждого Сообщение Из Сообщения Цикл
// @skip-check query-in-loop - ветка с запросом вызывается только при первом вызове в сеансе
@@ -1974,6 +1971,31 @@
КонецПроцедуры
// Параметры:
// ФоновоеЗадание - ФоновоеЗадание - задание, активность которого нужно учесть.
//
// Возвращаемое значение:
// Булево - если Истина, значит в сеансе установлен монопольный режим и
// хотя бы одно фоновое задание активно (то есть запись в сеансе недоступна).
//
Функция МонопольныйРежимВФоновомЗадании(ФоновоеЗадание = Неопределено)
Если Не МонопольныйРежим() Тогда
Возврат Ложь;
КонецЕсли;
Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Возврат Истина;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
Возврат ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество() > 0;
КонецФункции
Функция ЕстьФоновыеЗаданияВФайловойИБ()
ЗапущеноЗаданийВФайловойИБ = 0;
File diff suppressed because it is too large. Load diff
@@ -8,23 +8,24 @@
#Область СлужебныйПрограммныйИнтерфейс
// Запускает изменение настроек скрытия персональных данных субъектов в соответствии с измененными
// Запускает изменение настроек уничтожения персональных данных субъектов в соответствии с измененными
// настройками системы.
//
// Параметры:
// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы.
// ПараметрыМетода - см. НастройкиСкрытияПерсональныхДанныхСистемы
// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы.
// ПараметрыМетода - см. НастройкиУничтоженияПерсональныхДанныхСистемы
//
// Возвращаемое значение:
// см. ДлительныеОперации.ВыполнитьВФоне.
//
Функция ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт
Функция ЗапуститьДлительнуюОперациюИзменениеНастроекУничтоженияПДн(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Изменение настроек скрытия персональных данных'");
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Изменение настроек уничтожения персональных данных'");
ПараметрыВыполнения.ОжидатьЗавершение = 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];
ОткрытьФорму("Документ.СогласиеНаОбработкуПерсональныхДанных.ФормаОбъекта", Новый Структура("Субъект", Субъект), ПараметрыПечати.Форма);
ОткрытьФорму("Документ.СогласиеНаОбработкуПерсональныхДанных.ФормаОбъекта", Новый Структура("Субъект", Субъект),
ПараметрыПечати.Форма);
Возврат Неопределено;
КонецФункции
@@ -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,7 +63,11 @@
// переданных в качестве параметров, субъектов.
//
// Параметры:
// СубъектыПерсональныхДанных - ДанныеФормыКоллекция - содержит сведения о субъектах.
// СубъектыПерсональныхДанных - Массив из Структура - содержит сведения о субъектах:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных
// * ФИО - Строка
// * Адрес - Строка
// * ПаспортныеДанные - Строка
// ДатаАктуальности - Дата - дата, на которую нужно заполнить сведения.
//
Процедура ДополнитьДанныеСубъектовПерсональныхДанных(СубъектыПерсональныхДанных, ДатаАктуальности) Экспорт
@@ -98,17 +102,139 @@
КонецПроцедуры
// Позволяет проверить возможность скрытия персональных данных и задать состав исключений для записи в данных.
// Возвращает организацию по умолчанию.
//
// Возвращаемое значение:
// ОпределяемыйТип.Организация
//
Функция ОрганизацияПоУмолчанию() Экспорт
КонецФункции
#Область УничтожениеПерсональныхДанных
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Уничтожение персональных данных (ПДн) выполняется при проведении документа "Акт об уничтожении персональных данных".
// При этом выполняется поиск объектов информационной базы, в которых содержатся ПДн субъектов.
// Состав таких объектов и их полей описывается в методе ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных.
// В найденных объектах значения реквизитов, содержащих ПДн, очищаются или заменяются случайными значениями.
// Запись объекта с уничтоженными ПДн выполняется в режиме загрузки. В случае необходимости выполнения дополнительных
// действий, при уничтожении ПДн перед записью и после записи объекта можно использовать обработчики
// ПередУничтожениемПерсональныхДанных и ПослеУничтоженияПерсональныхДанных соответственно.
// Заполняет таблицу значений с описанием объектов метаданных и их полей, в которых содержатся персональные данные
// субъектов, подлежащие уничтожению.
//
// Например, персональные данные физического лицо могут храниться в самом справочнике ФизическиеЛица,
// в регистре сведений ФИОФизическихЛиц, в документе ВедомостьНаВыплатуЗарплатыВБанк и т.д.
//
// Параметры:
// Субъекты - Массив - ссылки на объекты данных, чьи персональные данные будут скрыты.
// ТаблицаИсключений - ТаблицаЗначений - таблица, в которую добавляются субъекты и причины отказа их скрытия.
// Состав полей см. в функции ЗащитаПерсональныхДанных.НоваяТаблицаИсключений.
// ТаблицаСведений - ТаблицаЗначений:
// * Объект - Строка - полное имя объекта метаданных, в котором содержатся персональные данные субъекта.
// Например, "Справочник.ФизическиеЛица".
// * ПолеСубъект - Строка - имя поля объекта, в котором содержится ссылка на субъекта.
// Для стандартных реквизитов используется имя реквизита, например "Ссылка".
// Для остальных полей используется полное имя объекта метаданных реквизита, например
// "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.ФизическоеЛицо"
// * Поля - Массив из Строка, Строка - имена полей объекта, в которых содержатся персональные данные субъекта
// Для стандартных реквизитов используется имя реквизита, например "Наименование".
// Для остальных полей используется полное имя объекта метаданных реквизита, например
// "Справочник.ФизическиеЛица.Реквизит.ФИО"
// * КатегорияДанных - Строка - категория, к которой относятся персональные данные.
//
// Пример:
//
// НовыеСведения = ТаблицаСведений.Добавить();
// НовыеСведения.Объект = "Справочник.ФизическиеЛица";
// НовыеСведения.ПолеСубъект = "Ссылка";
// НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Наименование");
// НовыеСведения.КатегорияДанных = "ФИО";
//
// НовыеСведения = ТаблицаСведений.Добавить();
// НовыеСведения.Объект = "Документ.ВедомостьНаВыплатуЗарплатыВБанк";
// НовыеСведения.ПолеСубъект = "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.ФизическоеЛицо";
// НовыеСведения.Поля = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(
// "Документ.ВедомостьНаВыплатуЗарплатыВБанк.ТабличнаяЧасть.Состав.Реквизит.СНИЛС");
// НовыеСведения.КатегорияДанных = "СНИЛС";
//
Процедура ПриЗаполненииСведенийОбУничтожаемыхПерсональныхДанных(ТаблицаСведений) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия перед уничтожением персональных данных субъектов. В том числе, отказаться
// от уничтожения персональных данных, добавив субъекта в таблицу исключений с указанием причины отказа от уничтожения.
// Или же добавить в массив субъектов других субъектов, данные которых тоже должны быть уничтожены. Например, если при
// уничтожении данных физического лица должны быть уничтожены данные связанных с ним кандидатов.
//
// Параметры:
// Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных - ссылки на объекты данных, чьи персональные данные
// будут уничтожены.
// ТаблицаИсключений - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных
// * ПричинаОтменыУничтожения - Строка
// - ТаблицаЗначений - в которую добавляются субъекты и причины отказа уничтожения их данных
// ОтказОтСкрытия - Булево - (по умолчанию Истина) признак отказа от скрытия. Если определены причины отказа
// от скрытия, то параметру необходимо установить значение Ложь.
//
Процедура ПередСкрытиемПерсональныхДанныхСубъектов(Субъекты, ТаблицаИсключений, ОтказОтСкрытия) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия при уничтожении персональных данных перед записью объекта,
// а также отказаться от записи объекта.
//
// Параметры:
// Объект - СправочникОбъект,ДокументОбъект
// Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных
// ВыполнитьЗаписьОбъекта - Булево - если Ложь, то запись объекта не выполняется.
//
Процедура ПередУничтожениемПерсональныхДанных(Объект, Субъекты, ВыполнитьЗаписьОбъекта) Экспорт
КонецПроцедуры
// Позволяет выполнить дополнительные действия при уничтожении персональных данных после записи объекта.
//
// Параметры:
// Объект - СправочникОбъект,ДокументОбъект
// Субъекты - Массив из ОпределяемыйТип.СубъектПерсональныхДанных
//
Процедура ПослеУничтоженияПерсональныхДанных(Объект, Субъекты) Экспорт
КонецПроцедуры
#КонецОбласти
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Срок хранения ПДн - это дата после которой необходимо уничтожить ПДн субъекта. Ранее этой даты уничтожить ПДн нельзя.
// Сроки хранения ПДн рассчитываются автоматически регламентным заданием РасчетСроковХраненияПерсональныхДанных.
// При наступлении события, которое влияет на срок хранения ПДн, необходимо с помощью метода
// ЗащитаПерсональныхДанных.ДобавитьСубъектыДляРасчетаСроковХранения зарегистрировать субъекта для расчета срока хранения.
// Такими событиями могут быть, например, создание нового физического лица, ввод согласия на обработку ПДн или
// прием сотрудника на работу.
// При расчете сроков хранения ПДн, в процедуре ПриРасчетеСроковХраненияПерсональныхДанных заполняется таблица значений,
// в которую различные подсистемы добавляют рассчитанные сроки хранения. Датой, при наступлении которой данные подлежат
// уничтожению, будет определена самая поздняя из всех заполненных для этого субъекта.
// Позволяет добавить в таблицу значений информацию о сроках хранения персональных данных.
//
// Параметры:
// ДанныеСубъектов - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка на субъекта.
// * ДатаСобытия - Дата - дата события, которое потребовало обновления срока хранения персональных данных.
// СрокиХранения - ТаблицаЗначений:
// * Субъект - ОпределяемыйТип.СубъектПерсональныхДанных - ссылка на субъекта
// * СрокХранения - Дата - дата, до которой должны храниться персональные данные субъекта и при наступлении которой,
// они должны быть уничтожены.
// * Организация - ОпределяемыйТип.Организация - ссылка на организацию субъекта (если организацию определить
// невозможно, не заполняется)
// * Комментарий - Строка - произвольная строка с пояснением к рассчитанному сроку хранения.
//
Процедура ПриРасчетеСроковХраненияПерсональныхДанных(ДанныеСубъектов, СрокиХранения) Экспорт
КонецПроцедуры
@@ -8,247 +8,80 @@
#Область СлужебныеПроцедурыИФункции
// Функция формирует структуру, необходимую для установки индекса картинки
// в таблице событий журнала регистрации.
//
// См. ЗащитаПерсональныхДанныхСлужебный.НомераКартинокСобытий152ФЗ
Функция НомераКартинокСобытий152ФЗ() Экспорт
НомераКартинок = Новый Соответствие;
НомераКартинок.Вставить("_$Session$_.Authentication", 1);
НомераКартинок.Вставить("_$Session$_.AuthenticationError", 2);
НомераКартинок.Вставить("_$Session$_.Start", 3);
НомераКартинок.Вставить("_$Session$_.Finish", 4);
НомераКартинок.Вставить("_$Access$_.Access", 5);
НомераКартинок.Вставить("_$Access$_.AccessDenied", 6);
Возврат Новый ФиксированноеСоответствие(НомераКартинок);
Возврат ЗащитаПерсональныхДанныхСлужебный.НомераКартинокСобытий152ФЗ();
КонецФункции
// Возвращает полные имена объектов метаданных содержащих персональные данные.
//
// Параметры:
// Нет
//
// Возвращаемое значение
// Массив - массив строк. Например: "РегистрСведений.ДокументыФизическихЛиц".
//
// См. ЗащитаПерсональныхДанныхСлужебный.ИменаИсточниковПерсональныхДанных
Функция ИменаИсточниковПерсональныхДанных() Экспорт
ТаблицаСведений = ЗащитаПерсональныхДанныхПовтИсп.СведенияОПерсональныхДанных();
ТаблицаСведений.Сортировать("Объект");
ИменаИсточников = ТаблицаСведений.ВыгрузитьКолонку("Объект");
ИменаИсточников = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИменаИсточников);
Возврат Новый ФиксированныйМассив(ИменаИсточников);
Возврат ЗащитаПерсональныхДанныхСлужебный.ИменаИсточниковПерсональныхДанных();
КонецФункции
// Возвращает полные имена реквизитов объекта метаданных содержащего персональные данные по его полному имени.
//
// Параметры:
// ИмяИсточника - Строка - полное имя источника метаданных. Например: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение
// Массив - массив строк. Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
//
// См. ЗащитаПерсональныхДанныхСлужебный.ИменаРеквизитовИсточникаСодержащихСубъект
Функция ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника) Экспорт
ИменаРеквизитовСодержащихСубъект = Новый Массив;
МетаданныеПоТипамСубъекта = ЗащитаПерсональныхДанныхПовтИсп.МетаданныеПоТипамСубъекта();
МетаданныеИсточника = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяИсточника); // ОбъектМетаданныхСправочник
ИсточникЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(МетаданныеИсточника);
ТипыСсылкиИсточника = ?(ИсточникЭтоРегистр, Новый Массив, МетаданныеИсточника.СтандартныеРеквизиты.Ссылка.Тип.Типы());
ИсточникИмеетВладельца = ОбщегоНазначения.ЭтоСправочник(МетаданныеИсточника) И МетаданныеИсточника.Владельцы.Количество() > 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";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1425,7 +1425,7 @@
ЭтоСлужебныеДанные = СлужебныеСвязиДанных[МестоИспользования] <> Неопределено;
ЭтоВспомогательныеДанные = ЭтоСлужебныеДанные;
Если МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда
Если ТипДанных = Неопределено Или МетаданныеДокументов.Содержит(МестоИспользования.Метаданные) Тогда
Представление = Строка(МестоИспользования.Данные);
ИначеЕсли МетаданныеКонстант.Содержит(МестоИспользования.Метаданные) Тогда
@@ -1434,9 +1434,6 @@
ИначеЕсли МетаданныеПоследовательностей.Содержит(МестоИспользования.Метаданные) Тогда
Представление = МестоИспользования.Метаданные.Представление() + " (" + НСтр("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,6 +51,7 @@
// Вызывается в форме отчета и в форме настройки отчета перед выводом настройки
// для указания дополнительных параметров выбора.
// Это устаревшее событие, вместо него рекомендуется применять событие ПослеЗагрузкиНастроекВКомпоновщик модуля отчета.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
@@ -558,26 +558,10 @@
#Область ЗаменаДублейВКлючахАналитики
// Возвращает связи подчиненных объектов с указанием типа поля связи.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Ключ - Строка
// * ТипРеквизита - Тип
// * ИмяРеквизита - Строка
// * Используется - Булево
// * Метаданные - ОбъектМетаданных
//
// См. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам.
Функция СвязиПодчиненныхОбъектовПоТипам() Экспорт
СвязиПодчиненныхОбъектовПоТипам = Новый ТаблицаЗначений;
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ТипРеквизита", Новый ОписаниеТипов("Тип"));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("ИмяРеквизита", ОбщегоНазначения.ОписаниеТипаСтрока(0));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Ключ", ОбщегоНазначения.ОписаниеТипаСтрока(0));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
СвязиПодчиненныхОбъектовПоТипам.Колонки.Добавить("Метаданные");
Возврат СвязиПодчиненныхОбъектовПоТипам;
Возврат ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам();
КонецФункции
@@ -288,12 +288,15 @@
//
// Параметры:
// ПользовательИБ - ПользовательИнформационнойБазы
// Интерактивно - Булево - когда Истина, тогда не учитываются права, например, ВнешнееСоединение, 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ОбработчикОжидания", 1, Истина);
ОповещениеНажатия = Новый ОписаниеОповещения("ЗадатьВопросПроОтключениеOpenIDConnect", ЭтотОбъект);
ЗаголовокСообщения = НСтр("ru = 'Предупреждение безопасности'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отключите аутентификацию %1, если не используется.'"), "OpenID-Connect");
ПоказатьОповещениеПользователя(ЗаголовокСообщения, ОповещениеНажатия,
ТекстСообщения, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное);
КонецЕсли;
КонецПроцедуры
@@ -233,7 +238,7 @@
КонецПроцедуры
// Предлагает отключить аутентификацию OpenID-Connect после запуска.
Процедура ЗадатьВопросПроОтключениеOpenIDConnect() Экспорт
Процедура ЗадатьВопросПроОтключениеOpenIDConnect(Контекст) Экспорт
ОбработкаЗавершения = Новый ОписаниеОповещения(
"ЗадатьВопросПроОтключениеOpenIDConnectЗавершение", ЭтотОбъект);
@@ -249,8 +254,7 @@
Кнопки.Добавить("НапомнитьПозже", НСтр("ru = 'Напомнить позже'"));
ДополнительныеПараметры = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ДополнительныеПараметры.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Аутентификация по протоколу %1'"), "OpenID-Connect");
ДополнительныеПараметры.Заголовок = НСтр("ru = 'Предупреждение безопасности'");
ДополнительныеПараметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработкаЗавершения,
@@ -231,9 +231,7 @@
Процедура ПроверитьНомерОбъектаПоДате(Объект)
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
@@ -264,9 +262,7 @@
Процедура ПроверитьНомерОбъектаПоДатеИОрганизации(Объект)
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
@@ -281,11 +277,7 @@
Процедура ПроверитьКодОбъектаПоОрганизации(Объект)
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
ИначеЕсли Объект.ЭтоНовый() Тогда
Возврат;
ИначеЕсли Не РеквизитОрганизацияДоступен(Объект) Тогда
Если Объект.ОбменДанными.Загрузка Или Объект.ЭтоНовый() Или Не РеквизитОрганизацияДоступен(Объект) Тогда
Возврат;
КонецЕсли;
@@ -539,7 +539,7 @@
Уровни.Вставить("TERRITORY", 7);
Уровни.Вставить("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);
@@ -734,19 +714,21 @@
#Область СлужебныеПроцедурыИФункции
// Возвращает соответствие томов и суммарных размеров всех файлов в томе в байтах.
// Возвращает размеры всех файлов в каждом указанном томе в байтах.
//
// Параметры:
// Тома - Массив из СправочникСсылка.ТомаХраненияФайлов - том, размер которого необходимо посчитать.
// Тома - Массив из СправочникСсылка.ТомаХраненияФайлов
//
// Возвращаемое значение:
// Соответствие - размер томов .
// Соответствие из КлючЗначение:
// * Ключ - СправочникСсылка.ТомаХраненияФайлов
// * Значение - Число
//
Функция ОбъемыТомов(Тома)
Результат = Новый Соответствие;
Для Каждого Том Из Тома Цикл
Результат.Вставить(Том, 0);
Результат[Том] = 0;
КонецЦикла;
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
@@ -754,8 +736,9 @@
КонецЕсли;
ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();
ТекстыЗапросов = Новый Массив;
ТекстЗапросаПрисоединенныхФайлов =
ТекстЗапроса =
"ВЫБРАТЬ
| Версии.Том КАК Том,
| ЕСТЬ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 - Разовый вызов
ОбъемыТомов = ОбъемыТомов(МассивТомов);
КонецЕсли;
ОбъемТома = ОбъемыТомов[ВыборкаТомов.Ссылка];
Если ОбъемТома + РазмерФайла <= ВыборкаТомов.МаксимальныйРазмер * 1024 * 1024 Тогда
Возврат ВыборкаТомов.Ссылка;
ОбъемыТомов = ОбъемыТомов(ТомаХраненияФайлов.ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
ОбъемТома = ОбъемыТомов[ТомХраненияФайлов.Ссылка];
Если ОбъемТома + ПрисоединенныйФайл.Размер <= ТомХраненияФайлов.МаксимальныйРазмер * 1024 * 1024 Тогда
Возврат ТомХраненияФайлов.Ссылка;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл ""%1"",
|т.к. в томах хранения файлов недостаточно места.
|Обратитесь к администратору.'"),
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение);
ВызватьИсключение ТекстОшибки;
КонецФункции
@@ -8877,14 +8877,7 @@
ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'");
ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации.УчетнаяЗапись);
ДеревоФайловСервера = Новый ДеревоЗначений;
ДеревоФайловСервера.Колонки.Добавить("Href");
ДеревоФайловСервера.Колонки.Добавить("UID1C");
ДеревоФайловСервера.Колонки.Добавить("Etag");
ДеревоФайловСервера.Колонки.Добавить("ИмяФайла");
ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка");
ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации");
ДеревоФайловСервера.Колонки.Добавить("Длина");
ДеревоФайловСервера = СформироватьСтруктуруДереваФайловСервера();
Попытка
@@ -656,8 +656,7 @@
// *** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
// *** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
// *** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.
// ** АдресОтвета - Соответствие
// - Строка - см. описание поля Кому.
// ** АдресОтвета - Строка - E-mail адрес, на который будут приходить ответы на рассылку.
// ** ИдентификаторыОснований - Строка - идентификаторы оснований данного письма.
// ** ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке.
// ** УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке.
@@ -1561,6 +1560,12 @@
ТаблицаПолучателей = Рассылка.Получатели.Выгрузить();
КонецЕсли;
МассивПолучателей = Новый Массив;
Если ПолучателиМетаданные = Неопределено Или ПолучателиМетаданные = Null Тогда
Возврат МассивПолучателей;
КонецЕсли;
Запрос = Новый Запрос;
Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда
@@ -1646,9 +1651,6 @@
ТекстСообщенияОбОшибкеДляЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по причине:'"), Строка(ТипПолучателей));
МассивПолучателей = Новый Массив;
// Механизм расширения
СписокПолучателей = Новый Соответствие;
Попытка
@@ -1818,9 +1820,8 @@
// Определить, что отчет реализован на базе системы компоновки данных.
Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
ПараметрыОтчета.СКД = Истина;
ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ТаблицаЗначений") Тогда
ПараметрыОтчета.СКД = Ложь;
ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("Структура") Тогда
ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ТаблицаЗначений")
Или ТипЗнч(ПараметрыОтчета.Настройки) = Тип("Структура") Тогда
ПараметрыОтчета.СКД = Ложь;
Иначе
ПараметрыОтчета.СКД = (ПараметрыОтчета.Объект.СхемаКомпоновкиДанных <> Неопределено);
@@ -3094,8 +3095,13 @@
КонецЕсли;
Если ПараметрыДоставки.Получатель <> Неопределено Тогда
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому);
Если ПараметрыДоставки.СкрытыеКопии Тогда
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии);
Иначе
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому);
КонецЕсли;
Для Каждого Кому Из АдресаПолучателя Цикл
ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель) + " (" + Кому.Адрес + ")";
@@ -3207,19 +3213,35 @@
Если ЗначениеЗаполнено(ПараметрыДоставки.Получатель) Тогда
ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель);
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому);
Если ПараметрыДоставки.СкрытыеКопии Тогда
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии);
ИмяТаблицыПолучателей = "ПолучателиСкрытыхКопий";
Иначе
АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому);
ИмяТаблицыПолучателей = "Получатели";
КонецЕсли;
Для Каждого Кому Из АдресаПолучателя Цикл
НоваяСтрока = Сообщение.Получатели.Добавить();
НоваяСтрока = Сообщение[ИмяТаблицыПолучателей].Добавить();
НоваяСтрока.Адрес = Кому.Адрес;
НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")";
НоваяСтрока.ИсточникКонтактнойИнформации = ПараметрыДоставки.Получатель;
КонецЦикла;
Иначе
Если ПараметрыДоставки.СкрытыеКопии Тогда
ИмяТаблицыПолучателей = "ПолучателиСкрытыхКопий";
Иначе
ИмяТаблицыПолучателей = "Получатели";
КонецЕсли;
Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл
ПредставлениеПолучателя = Строка(Получатель.Ключ);
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение);
Для Каждого Кому Из АдресаПолучателя Цикл
НоваяСтрока = Сообщение.Получатели.Добавить();
НоваяСтрока = Сообщение[ИмяТаблицыПолучателей].Добавить();
НоваяСтрока.Адрес = Кому.Адрес;
НоваяСтрока.Представление = ПредставлениеПолучателя + " (" + Кому.Адрес + ")";
НоваяСтрока.ИсточникКонтактнойИнформации = Получатель.Ключ;
@@ -3227,6 +3249,12 @@
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыПисьма.АдресОтвета) Тогда
НоваяСтрока = Сообщение.ПолучателиОтвета.Добавить();
НоваяСтрока.Адрес = ПараметрыПисьма.АдресОтвета;
НоваяСтрока.Представление = ПараметрыПисьма.АдресОтвета;
КонецЕсли;
Для Каждого Картинка Из ПараметрыДоставки.Картинки Цикл
СтрокаВложение = Сообщение.Вложения.Добавить();
ФайлКартинка = Картинка.Значение.ПолучитьДвоичныеДанные();
@@ -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;
КонецЕсли;
ПодключитьОбработчикОжидания("ОбработчикПроверкиПолученияСерверныхОповещений", Интервал, Истина);
ПодключитьОбработчикОжидания("ОбработчикПроверкиПолученияСерверныхОповещений", Интервал);
КонецПроцедуры
@@ -219,6 +219,7 @@
Интервал = СостояниеПолучения.МинимальныйПериод;
ОбсужденияАктивны = СостояниеПолучения.СистемаВзаимодействийПодключена
И СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен
И СостояниеПолучения.ПериодическаяОтправкаДанныхРазрешена
И СостояниеПолучения.ДатаПоследнегоПолученияСообщения + 60 > ТекущаяДатаСеанса;
МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
@@ -535,7 +536,7 @@
КонецФункции
// См. НовоеСостояниеПолучения
Функция СостояниеПолучения() Экспорт
Функция СостояниеПолучения()
ИмяПараметраПриложения = "СтандартныеПодсистемы.БазоваяФункциональность.СерверныеОповещения";
СостояниеПолучения = ПараметрыПриложения.Получить(ИмяПараметраПриложения);
@@ -572,7 +573,6 @@
// * СеансАдминистратораСервиса - Булево
// * ПериодическаяОтправкаДанныхРазрешена - Булево - устанавливается Истина в процедуре ПослеНачалаРаботыСистемы.
// * МинимальныйИнтервалПериодическойОтправкиДанных - см. СерверныеОповещения.МинимальныйИнтервалПериодическойОтправкиДанных
// * ПроверкаВыполняется - Булево
// * КлючСеанса - см. СерверныеОповещения.КлючСеанса
// * ИдентификаторПользователяИБ - УникальныйИдентификатор
// * ДатаОбновленияСостояния - Дата
@@ -595,8 +595,6 @@
// обсуждения "СерверныеОповещения".
// * ОбработчикНовыхЛичныхСообщенийПодключен - Булево
// * ОбработчикНовыхОбщихСообщенийПодключен - Булево
// * НачатоПодключениеОбработчикаНовыхЛичныхСообщений - Булево
// * НачатоПодключениеОбработчикаНовыхОбщихСообщений - Булево
// * ДатаПоследнегоСерверногоВызова - Дата
// * ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания - Дата
// * ЧислоСекундВыравниванияДатыСчетчиковОжидания - Число
@@ -612,7 +610,6 @@
Состояние.Вставить("СеансАдминистратораСервиса", Ложь);
Состояние.Вставить("ПериодическаяОтправкаДанныхРазрешена", Ложь);
Состояние.Вставить("МинимальныйИнтервалПериодическойОтправкиДанных", 1);
Состояние.Вставить("ПроверкаВыполняется", Ложь);
Состояние.Вставить("КлючСеанса", "");
Состояние.Вставить("ИдентификаторПользователяИБ",
ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор());
@@ -627,8 +624,6 @@
Состояние.Вставить("ИдентификаторОбщегоОбсуждения", Неопределено);
Состояние.Вставить("ОбработчикНовыхЛичныхСообщенийПодключен", Ложь);
Состояние.Вставить("ОбработчикНовыхОбщихСообщенийПодключен", Ложь);
Состояние.Вставить("НачатоПодключениеОбработчикаНовыхЛичныхСообщений", Ложь);
Состояние.Вставить("НачатоПодключениеОбработчикаНовыхОбщихСообщений", Ложь);
Состояние.Вставить("ДатаПоследнегоСерверногоВызова", '00010101');
Состояние.Вставить("ТекущаяДатаСеансаДляПроверкиСчетчиковОжидания", '00010101');
Состояние.Вставить("ЧислоСекундВыравниванияДатыСчетчиковОжидания", 0);
@@ -641,8 +636,7 @@
Процедура ПодключитьОбработчикНовыхСообщений(СостояниеПолучения)
Если СостояниеПолучения.ИдентификаторЛичногоОбсуждения <> Неопределено
И Не СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен
И Не СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений Тогда
И Не СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен Тогда
Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения);
Попытка
@@ -659,8 +653,7 @@
КонецЕсли;
Если СостояниеПолучения.ИдентификаторОбщегоОбсуждения <> Неопределено
И Не СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен
И Не СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений Тогда
И Не СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен Тогда
Контекст = Новый Структура("СостояниеПолучения", СостояниеПолучения);
Попытка
@@ -680,7 +673,6 @@
Процедура ПослеПодключенияОбработчикаНовыхЛичныхСообщений(Контекст) Экспорт
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений = Ложь;
Контекст.СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен = Истина;
КонецПроцедуры
@@ -689,8 +681,6 @@
СтандартнаяОбработка = Ложь;
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхЛичныхСообщений = Ложь;
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых личных сообщений'",
ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
@@ -719,7 +709,6 @@
Процедура ПослеПодключенияОбработчикаНовыхОбщихСообщений(Контекст) Экспорт
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений = Ложь;
Контекст.СостояниеПолучения.ОбработчикНовыхОбщихСообщенийПодключен = Истина;
КонецПроцедуры
@@ -728,8 +717,6 @@
СтандартнаяОбработка = Ложь;
Контекст.СостояниеПолучения.НачатоПодключениеОбработчикаНовыхОбщихСообщений = Ложь;
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Серверные оповещения.Ошибка подключения обработчика новых общих сообщений'",
ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
@@ -42,16 +42,6 @@
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности();
КонецПроцедуры
// Вызывается после запуска конфигурации, открывает окно предупреждения безопасности.
Процедура ЗадатьВопросПроОтключениеOpenIDConnectОбработчикОжидания() Экспорт
// АПК:277-выкл Используется модуль СтандартныеПодсистемыГлобальный,
// чтобы не создавать ПользователиГлобальный из-за одной процедуры.
ПользователиСлужебныйКлиент.ЗадатьВопросПроОтключениеOpenIDConnect();
// АПК:277-вкл
КонецПроцедуры
// Показывает сообщение пользователю о недостаточном объеме оперативной памяти.
Процедура ПоказатьРекомендациюПоОбъемуОперативнойПамяти() Экспорт
СтандартныеПодсистемыКлиент.ОповеститьОНехваткеПамяти();
@@ -1921,10 +1921,7 @@
// Только для внутреннего использования. Продолжение процедуры ПроверитьНеобходимостьВосстановленияСвязиСГлавнымУзлом.
Процедура ПослеЗакрытияФормыВосстановленияСвязиСГлавнымУзлом(Результат, Параметры) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура") Тогда
Параметры.Отказ = Истина;
ИначеЕсли Результат.Отказ Тогда
Если ТипЗнч(Результат) <> Тип("Структура") Или Результат.Отказ Тогда
Параметры.Отказ = Истина;
Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ВосстановитьСвязьСГлавнымУзлом");
@@ -1937,10 +1934,7 @@
// Только для внутреннего использования. Продолжение процедуры ПередНачаломРаботыСистемы4.
Процедура ПослеЗакрытияФормыВыбораНачальныхРегиональныхНастроекИБ(Результат, Параметры) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура") Тогда
Параметры.Отказ = Истина;
ИначеЕсли Результат.Отказ Тогда
Если ТипЗнч(Результат) <> Тип("Структура") Или Результат.Отказ Тогда
Параметры.Отказ = Истина;
Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ВыбратьНачальныеРегиональныеНастройкиИБ");
@@ -1634,7 +1634,8 @@
ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента");
Для Каждого КлючИЗначение Из Ключи Цикл
ТекущиеКлючи = Новый Соответствие(Новый ФиксированноеСоответствие(Ключи));
Для Каждого КлючИЗначение Из ТекущиеКлючи Цикл
ТекущийДень = КлючИЗначение.Ключ;
Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда
Ключи = Неопределено;
@@ -2153,7 +2154,9 @@
// Фоновое обновление поставляемых профилей и параметров работы расширений.
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ВключитьЗаполнениеПараметровРаботыРасширений(Ложь, Истина);
Если ОбщегоНазначения.РазделениеВключено() Тогда
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ЗапуститьЗаполнениеПараметровРаботыРасширений(Истина);
РегистрыСведений.ПараметрыРаботыВерсийРасширений.ЗапуститьЗаполнениеПараметровРаботыРасширений(
НСтр("ru = 'Запуск с ожиданием после загрузки данных области'"),
Истина);
КонецЕсли;
КонецПроцедуры
@@ -14358,8 +14358,9 @@
Контекст.ЕстьДлительноеЗаданиеПолученияПорцийЭлементовДанных = Ложь;
ЗадержкаЗапроса = Контекст.МаксимальноеКоличествоСекундБыстрогоПолученияПорцийЭлементовДанных;
Если ЗадержкаЗапроса > 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ВСтруктуру(Значение);
НеОбрабатываемыеПоля = Новый Массив;
НеОбрабатываемыеПоля.Добавить("type");
НеОбрабатываемыеПоля.Добавить("apartments");
НеОбрабатываемыеПоля.Добавить("buildings");
Если ПоляКонтактнойИнформации.Количество() > 0 Тогда
Для Каждого ПолеКонтактнойИнформации Из ПоляКонтактнойИнформации Цикл
Если СтрСравнить(ПолеКонтактнойИнформации.Ключ, "type") <> 0 И ЗначениеЗаполнено(ПолеКонтактнойИнформации.Значение) Тогда
ПоляКонтактнойИнформации[ПолеКонтактнойИнформации.Ключ] = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
Если НеОбрабатываемыеПоля.Найти(ПолеКонтактнойИнформации.Ключ) = Неопределено
И ЗначениеЗаполнено(ПолеКонтактнойИнформации.Значение) Тогда
ПоляКонтактнойИнформации[ПолеКонтактнойИнформации.Ключ] =
СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
КонецЕсли;
КонецЦикла;
@@ -4820,83 +4832,6 @@
КонецПроцедуры
Процедура УстановитьДействияДляСтатическихЭлементов(Форма, СтрокаКИ, ИмяЭлементаДляРазмещения)
Элемент = Форма.Элементы[СтрокаКИ.ИмяРеквизита];
Тип = СтрокаКи.Тип;
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации,
ИмяЭлементаДляРазмещения);
ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки;
Если СтрокаКИ.ВидРедактирования = "Диалог" И СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес
И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если НЕ ЗначениеЗаполнено(Элемент.ПолучитьДействие("Нажатие")) Тогда
Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаНавигационнойСсылки")) Тогда
Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки");
КонецЕсли;
ИначеЕсли Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Очистка")) Тогда
Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка");
КонецЕсли;
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Автоподбор")) Тогда
Элемент.УстановитьДействие("Автоподбор", "Подключаемый_КонтактнаяИнформацияАвтоподбор");
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаВыбора")) Тогда
Элемент.УстановитьДействие("ОбработкаВыбора", "Подключаемый_КонтактнаяИнформацияОбработкаВыбора");
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Редактирование в диалоге
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) И Элемент.Вид = ВидПоляФормы.ПолеВвода
И Не СтрокаКИ.ВидРедактирования = "ПолеВвода" Тогда
ДоступенВыбор = Не СтрокаКИ.ПометкаУдаления И СтрокаКИ.ВидРедактирования <> "ПолеВвода";
Если ДоступенВыбор И Не Форма.ТолькоПросмотр Тогда
Элемент.КнопкаВыбора = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("НачалоВыбора")) Тогда
Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
КонецЕсли;
Иначе
Элемент.КнопкаВыбора = Ложь;
Если ЗначениеЗаполнено(Форма[СтрокаКИ.ИмяРеквизита]) Тогда
Элемент.КнопкаОткрытия = Истина;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("Открытие")) Тогда
Элемент.УстановитьДействие("Открытие", "Подключаемый_КонтактнаяИнформацияПриНажатии");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ПриИзменении")) Тогда
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
Если ДляТипаКонтактнойИнформацииЕстьПолеКомментарий(Тип, ОбработкаНавигационнойСсылки) Тогда
ИмяЭлементаКомментарий = "Комментарий" + СтрокаКИ.ИмяРеквизита;
Если Форма.Элементы.Найти(ИмяЭлементаКомментарий) <> Неопределено Тогда
Если Не ЗначениеЗаполнено(Форма.Элементы[ИмяЭлементаКомментарий].ПолучитьДействие("ПриИзменении")) Тогда
Форма.Элементы[ИмяЭлементаКомментарий].УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПунктКонтекстногоМенюПеремещения(ПредыдущийЭлемент, Форма, Направление, ИмяЭлементаДляРазмещения)
Если Направление > 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.Тип(ПространствоИмен, "НомерТелефона"));
Иначе
ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс'");
ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс.'");
КонецЕсли;
Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация"));
@@ -458,18 +452,12 @@
ПространствоИмен = ПространствоИмен();
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
Если ОжидаемыйТип = Неопределено Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"));
ИначеЕсли ОжидаемыйТип = Неопределено Тогда
// Считаем телефоном
Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
Иначе
ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс'");
ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс.'");
КонецЕсли;
Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация"));
@@ -606,14 +594,13 @@
Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт
ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид);
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты
Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница
Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype
Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
@@ -621,16 +608,10 @@
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
Возврат ДесериализацияФакса("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт
@@ -1009,10 +990,8 @@
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Факс Тогда
Результат.ДанныеXML = XSLT_СтруктураВФакс(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое Тогда
Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Skype Тогда
ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое
Или ТипКонтактнойИнформации = ВсеТипы.Skype Тогда
Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий);
Иначе
@@ -2410,10 +2410,8 @@
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКонтактнойИнформации, Объект);
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект);
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон
Или ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКонтактнойИнформации, Объект);
ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
@@ -1064,9 +1064,10 @@
// * ПриОпределенииПолучателей - Булево - при установке значения Истина будет вызвана процедура модуля менеджера
// объекта ПриОпределенииПолучателей,
// где определяются получатели для отправки печатной формы.
// * ПриДобавленииКомандПечати - Булево, Неопределено - при установке значения Истина будет вызвана процедура модуля
// менеджера объекта ДобавитьКомандыПечати,
// где добавляются команды печати. Неопределено - объект не подключен к подсистеме печати.
// По умолчанию, значение Ложь.
// * ПриДобавленииКомандПечати - Булево - при установке значения Истина будет вызвана процедура модуля
// менеджера объекта ДобавитьКомандыПечати, где добавляются команды печати.
// По умолчанию, значение Ложь.
//
Функция НастройкиПечатиОбъекта(МенеджерОбъекта) Экспорт
@@ -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], ИмяТегаУсловие()+" ", ""));
КонецЕсли;
КонецЦикла;
@@ -2100,11 +2107,11 @@
КонецФункции
Функция СтрокаСодержитНачалоОбласти(Знач Текст, ИменаТабличныхЧастей)
Результат = СтрНайти(Текст, "{"+ИмяТегаУсловие()+" ") ИЛИ СтрНайти(Текст, "{/"+ИмяТегаУсловие());
СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат);
Возврат Результат;
КонецФункции
Функция СтрокаСодержитНачалоТабличнойЧасти(Текст, ИменаТабличныхЧастей, Результат)
@@ -2552,7 +2559,7 @@
КонецПроцедуры
Процедура ДобавитьОбластьСУсловием(Области, Область)
УзелСледующейОбласти = НайтиГраницуСледующейОбласти(Область, Области);
УзелСледующейОбласти = ГраницаСледующейОбласти(Область, Области);
Если УзелСледующейОбласти = Неопределено Тогда
Возврат;
@@ -2566,7 +2573,7 @@
НайденнаяОбласть.Индекс = НайденнаяОбласть.УзелДереваДокумента.Индекс;
КонецЕсли;
НайденнаяОбласть.УсловиеОбласти = ПолучитьУсловиеОбласти(Область);
НайденнаяОбласть.УсловиеОбласти = УсловиеОбласти(Область);
КонецПроцедуры
#КонецОбласти
@@ -2578,7 +2585,7 @@
Исключение
УдалитьФайлы(ПолноеИмяФайла);
ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файла шаблона по причине:'") + Символы.ПС
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файл шаблона по причине:'") + Символы.ПС
+ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
@@ -5353,7 +5360,7 @@
Исключение
УдалитьФайлы(ИмяВременногоФайла);
ЗаписатьСобытияВЖурналРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файла шаблона по причине:'") + Символы.ПС
ВызватьИсключение(НСтр("ru = 'Не удалось открыть файл шаблона по причине:'") + Символы.ПС
+ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
@@ -464,7 +464,7 @@
// ПарыЗамен - Соответствие - содержит пары значений оригинал и дубль.
// НеобработанныеЗначенияОригиналов - Массив из Структура:
// * ЗаменяемоеЗначение - ЛюбаяСсылка - оригинальное значение заменяемого объекта.
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам.
// * ИспользуемыеСвязи - см. ОбщегоНазначения.СвязиПодчиненныхОбъектовПоТипам.
// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита.
//
Процедура ПриПоискеЗаменыСсылок(ПарыЗамен, НеобработанныеЗначенияОригиналов) Экспорт
Loaded 100 of 270 files, more files were not shown because too many files have changed in this diff. Show more