2_4_6_117

This commit is contained in:
Компания 1С committed 2018-07-10 14:32:00 +03:00
1 parent 728456a160
commit a641368f32
39 files changed
+2029 -658

No files matched your search

@@ -12,13 +12,19 @@
| Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета
|ГДЕ
| ПравилаПроверкиУчета.Использование
| И ПравилаПроверкиУчета.Идентификатор В(&МассивИдентификаторов)");
| И ПравилаПроверкиУчета.Идентификатор В(&ИдентификаторыПроверок)");
МассивИдентификаторов = Новый Массив;
МассивИдентификаторов.Добавить("СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов");
МассивИдентификаторов.Добавить("СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности");
ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета().Проверки;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Отключена", Истина);
ОтключенныеПроверки = ПроверкиВеденияУчета.НайтиСтроки(ПараметрыОтбора);
Запрос.УстановитьПараметр("МассивИдентификаторов", МассивИдентификаторов);
ИдентификаторыПроверок = Новый Массив;
Для Каждого ОтключеннаяПроверка Из ОтключенныеПроверки Цикл
ИдентификаторыПроверок.Добавить(ОтключеннаяПроверка.Идентификатор);
КонецЦикла;
Запрос.УстановитьПараметр("ИдентификаторыПроверок", ИдентификаторыПроверок);
Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
@@ -9,7 +9,7 @@
КонецЕсли;
Если Объект.Предопределенный Тогда
ТолькоПросмотр = Истина;
Элементы.ГруппаНаименование.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
@@ -67,7 +67,7 @@
ИмяПоляСПолнымПутем = "ПолныйПутьLinux";
КонецЕсли;
ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа\";
ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа" + ПолучитьРазделительПути();
Попытка
СоздатьКаталог(ИмяКаталогаТестовое);
@@ -3,24 +3,16 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Количество() = 1 Тогда
ПараметрыВопроса = ЗащитаПерсональныхДанныхВызовСервера.ПараметрыВопросаПодтвержденияСкрытия(ПараметрКоманды);
Субъекты = ПараметрыВопроса.Субъекты;
Если Субъекты.Количество() > 0 Тогда
ТекстВопроса = НСтр("ru = 'Персональные данные субъекта «%1» будут скрыты.
|
|Продолжить?'");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПараметрКоманды[0]);
Иначе
ТекстВопроса = НСтр("ru = 'Персональные данные субъектов будут скрыты.
|
|Продолжить?'");
Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, Субъекты);
ПоказатьВопрос(Оповещение, ПараметрыВопроса.ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, ПараметрКоманды);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
#КонецОбласти
@@ -32,56 +24,12 @@
Если Результат = КодВозвратаДиалога.Да Тогда
СкрытьПерсональныеДанныеСубъектов(Субъекты);
ЗащитаПерсональныхДанныхВызовСервера.СкрытьПерсональныеДанныеСубъектов(Субъекты, Истина);
Оповестить("СкрытыПерсональныеДанные");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СкрытьПерсональныеДанныеСубъектов(Субъекты)
ОтбираемыеСубъекты = Новый Массив;
НастройкиСубъектов = ЗащитаПерсональныхДанных.ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Если ЗначениеЗаполнено(НастройкиСубъектов) Тогда
Для Каждого НастройкиСкрытия Из НастройкиСубъектов Цикл
Субъект = НастройкиСкрытия.Ключ;
Настройки = НастройкиСкрытия.Значение;
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено Тогда
ТекстПричины = НСтр("ru = 'Скрытие ранее отменено по причине: %1.'");
ТекстПричины = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПричины, Настройки.ПричинаОтменыСкрытия);
Иначе
ТекстПричины = НСтр("ru = 'Скрытие уже выполнено.'");
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Персональные данные субъекта «%1» не могут быть скрыты.
|%2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
КонецЕсли;
ОтбираемыеСубъекты.Добавить(Субъект);
КонецЦикла;
Иначе
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтбираемыеСубъекты, Субъекты);
КонецЕсли;
ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(ОтбираемыеСубъекты, Истина);
КонецПроцедуры
#КонецОбласти
@@ -3126,6 +3126,10 @@
<items xsi:type="form:FormField">
<name>СписокСостоянияУзловИмяПланаОбмена</name>
<id>89</id>
<title>
<key>ru</key>
<value>Вид обмена</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -3165,19 +3169,19 @@
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>СписокСостоянияУзловУзелИнформационнойБазы</name>
<id>10</id>
<name>СписокСостоянияУзловНаименованиеКорреспондента</name>
<id>558</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СписокСостоянияУзлов.УзелИнформационнойБазы</segments>
<segments>СписокСостоянияУзлов.НаименованиеКорреспондента</segments>
</dataPath>
<extendedTooltip>
<name>СписокСостоянияУзловУзелИнформационнойБазыExtendedTooltip</name>
<id>502</id>
<name>СписокСостоянияУзловНаименованиеКорреспондентаРасширеннаяПодсказка</name>
<id>560</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -3186,8 +3190,8 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокСостоянияУзловУзелИнформационнойБазыКонтекстноеМеню</name>
<id>11</id>
<name>СписокСостоянияУзловНаименованиеКорреспондентаКонтекстноеМеню</name>
<id>559</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
@@ -4558,6 +4562,24 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>НаименованиеКорреспондента</name>
<title>
<key>ru</key>
<value>Информационная база</value>
</title>
<id>16</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>НастраиваемыеСинхронизации</name>
@@ -4462,8 +4462,10 @@
ЗаписиДомов = РезультатЗапроса.Выгрузить();
КорректныеЗаписи = Новый Массив;
УлицаНайдена = Ложь;
ВариантАдреса = Новый Структура;
УлицаНайдена = Ложь;
ВариантАдреса = Новый Структура;
ПроверитьИсторию = Ложь;
Для Каждого Запись Из ЗаписиДомов Цикл;
ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись);
@@ -4492,6 +4494,8 @@
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"),
НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение));
ИначеЕсли ПроверятьНаселенныйПункт И Запись.НаселенныйПунктНайден <> Истина Тогда
ПроверитьИсторию = Истина;
КонецЕсли;
Если ПроверятьУлицу И Запись.УлицаНайден И Запись.УлицаАктуален = Истина Тогда
@@ -4502,6 +4506,8 @@
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"),
Дополнительный.Наименование + " " + Дополнительный.Сокращение));
ИначеЕсли ПроверятьДополнительный И Запись.ДополнительныйНайден <> Истина Тогда
ПроверитьИсторию = Истина;
КонецЕсли;
Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден И Запись.ПодчиненныйАктуален = Истина Тогда
@@ -4529,6 +4535,17 @@
КонецЕсли;
КонецЕсли;
Если ПроверитьИсторию Тогда
НовыйАдрес = АнализИсторииОдногоАдресаПоКлассификатору(Адрес, Уровни);
Если НовыйАдрес <> Неопределено Тогда
Результат.Вставить("Исторический", Истина);
Результат.Варианты.Добавить(НовыйАдрес);
Возврат Результат;
КонецЕсли;
КонецЕсли;
Если КорректныеЗаписи.Количество() = 0 Тогда
// Нет смысла искать дома и выдавать варианты, надо посмотреть в историю.
Возврат Результат;
@@ -4636,6 +4653,8 @@
КонецПроцедуры
// История
Функция ИсторияАдресногоОбъекта(Наименование, Сокращение, Запись)
Результат = Новый СписокЗначений;
@@ -4707,6 +4726,550 @@
КонецФункции
Процедура ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстЗапроса, Флаг, ИмяПоля)
Если Флаг Тогда
ТекстЗапроса = ТекстЗапроса + ", " + Символы.ПС + ИмяПоля + ".ОкончаниеДействияЗаписи УБЫВ";
КонецЕсли;
КонецПроцедуры
Функция ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ФлагПроверки, ИмяПоля)
Если ФлагПроверки Тогда
Вариант = "
| ВЫБОР КОГДА [Поле].Идентификатор ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК [Поле]Найден,
| [Поле].АдресныйОбъект КАК [Поле]АдресныйОбъект,
| [Поле].Идентификатор КАК [Поле]Идентификатор,
| [Поле].ПочтовыйИндекс КАК [Поле]ПочтовыйИндекс,
| [Поле].КодКЛАДР КАК [Поле]КодКЛАДР,
| [Поле].Дополнительно КАК [Поле]Дополнительно,
|";
Иначе
Вариант = "
| NULL КАК [Поле]Найден,
| NULL КАК [Поле]Идентификатор,
| NULL КАК [Поле]ПочтовыйИндекс,
| NULL КАК [Поле]КодКЛАДР,
| NULL КАК [Поле]Дополнительно,
|";
КонецЕсли;
Возврат СтрЗаменить(Вариант, "[Поле]", ИмяПоля);
КонецФункции
// Локальная проверка одного адреса.
//
Функция АнализИсторииОдногоАдресаПоКлассификатору(Адрес, Уровни)
Результат = Новый Структура("Ошибки, Варианты, АдресПроверен", Новый Массив, Новый Массив, Истина);
ОшибкиПроверки = Результат.Ошибки;
ВариантыАдреса = Результат.Варианты;
Если ТипЗнч(Адрес) <> Тип("ОбъектXDTO") Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Адрес", НСтр("ru = 'Невозможно проверить адрес из-за некорректных сведений. Проверьте правильность заполнения адреса.'"));
Возврат Результат;
КонецЕсли;
//// Субъект должен быть всегда
СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.СубъектРФ);
Если ПустаяСтрока(СубъектРФ.Наименование) Тогда
// Нет субъекта
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Не указан субъект РФ адреса'") );
Возврат Результат;
ИначеЕсли Уровни.Найти(1) = Неопределено Тогда
// В уровнях должно быть указано всегда.
ВызватьИсключение НСтр("ru = 'В уровнях для проверки адреса не указан уровень субъекта РФ.'");
КонецЕсли;
КодСубъектРФ = АдресныйКлассификатор.КодРегионаПоНаименованию(Адрес.СубъектРФ);
РегионЗагруженВАдресныеСведения = СведенияОРегионе(Адрес.СубъектРФ).Загружен;
Если РегионЗагруженВАдресныеСведения = Неопределено Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регион ""%1"" не существует'"), Адрес.СубъектРФ));
Результат.АдресПроверен = Истина;
Возврат Результат;
ИначеЕсли НЕ РегионЗагруженВАдресныеСведения Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ", НСтр("ru = 'Отсутствуют адресные сведения по региону'") + ": " + Адрес.СубъектРФ + ".");
Результат.АдресПроверен = Ложь;
Возврат Результат;
КонецЕсли;
// Расшифровка свойств адреса
Запрос = Новый Запрос("ВЫБРАТЬ
| Значение
|ИЗ
| РегистрСведений.СлужебныеАдресныеСведения
|ГДЕ
| Тип = ""ТипАдрЭл"" И Ключ = ""ПочтовыйИндекс""
|;//////////////////////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Ключ КАК Сокращение,
| Идентификатор КАК Идентификатор,
| Значение КАК Значение
|ИЗ
| РегистрСведений.СлужебныеАдресныеСведения
|ГДЕ
| Тип = ""ТипАдрЭл""
| И (
| Идентификатор = 91 ИЛИ Идентификатор = 90
| )
|;//////////////////////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Расшифровка.Ключ КАК Значение,
| Расшифровка.Значение КАК ТипАдрЭл,
|
| ВЫБОР
| КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL ТОГДА ТипыВладения.Идентификатор
| КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL ТОГДА ТипыСтроения.Идентификатор
| ИНАЧЕ 0
| КОНЕЦ КАК Идентификатор
|
|ИЗ
| РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения
|ПО
| ТипыВладения.Тип = ""ESTSTAT""
| И ТипыВладения.Значение = Расшифровка.Ключ
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения
|ПО
| ТипыСтроения.Тип = ""STRSTAT""
| И ТипыСтроения.Значение = Расшифровка.Ключ
|
|ГДЕ
| Расшифровка.Тип = ""ДопАдрЭлНомер""");
НаборРезультатов = Запрос.ВыполнитьПакет();
Таблица = НаборРезультатов[0].Выгрузить();
Если Таблица.Количество() = 0 Тогда
ТипАдрЭлПочтовыйИндекс = "";
Иначе
ТипАдрЭлПочтовыйИндекс = Таблица[0].Значение;
КонецЕсли;
ТаблицаСокращенийДополнительных = НаборРезультатов[1].Выгрузить();
ТаблицаСокращенийДополнительных.Индексы.Добавить("Сокращение, Значение");
ТаблицаСокращенийЗданий = НаборРезультатов[2].Выгрузить();
ТаблицаСокращенийЗданий.Индексы.Добавить("ТипАдрЭл");
Дополнительный = Новый Структура("Наименование, Сокращение");
Подчиненный = Новый Структура("Наименование, Сокращение");
ЗданияИПомещения = Новый Соответствие;
Для Каждого ДополнительныйЭлемент Из Адрес.ПолучитьСписок("ДопАдрЭл") Цикл
ТипАдресногоЭлемента = СокрЛП(ДополнительныйЭлемент.ТипАдрЭл);
// Здание или помещение, почтовый индекс?
Если ТипАдресногоЭлемента = "" Тогда
ЗначениеНомера = ДополнительныйЭлемент.Номер;
СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл");
Если СтрокаЗдания <> Неопределено Тогда
ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение);
КонецЕсли;
Продолжить;
ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда
Продолжить;
КонецЕсли;
// Дополнительный или подчиненный?
Вариант = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ДополнительныйЭлемент.Значение);
// У ФИАС некоторые сокращения ошибочно содержат в конце точку. Для поиска вариантов эту точку необходимо убрать.
СокращениеВарианта = ?( СтрЗаканчиваетсяНа(Вариант.Сокращение, "."), Лев(Вариант.Сокращение, СтрДлина(Вариант.Сокращение) - 1), Вариант.Сокращение);
// У ФИАС необходимо учитывать кв-л
ДополнитьТаблицуСокращений(ТаблицаСокращенийДополнительных);
СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 90));
Если СтрокиВариантов.Количество() > 0 Тогда
Код = СтрокиВариантов[0].Идентификатор;
Дополнительный = Вариант;
Иначе
СтрокиВариантов = ТаблицаСокращенийДополнительных.НайтиСтроки(Новый Структура("Сокращение, Значение, Идентификатор", СокращениеВарианта, ТипАдресногоЭлемента, 91));
Если СтрокиВариантов.Количество() > 0 Тогда
Подчиненный = Вариант;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Округ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Округ);
Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ПолучитьXDTOРеквизитОбъекта(Адрес, "СвРайМО/Район"));
Город = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Город);
ВнутригородскойРайон = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.ВнутригРайон);
НаселенныйПункт = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.НаселПункт);
Улица = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(Адрес.Улица);
ИндексЭлемент = ПолучитьXDTOРеквизитОбъекта(Адрес, "ДопАдрЭл[ТипАдрЭл='10100000']");
Индекс = ?(ИндексЭлемент <> Неопределено, ИндексЭлемент.Значение, "");
ПроверятьОкруг = Не ПустаяСтрока(Округ.Наименование);
ПроверятьРайон = Не ПустаяСтрока(Район.Наименование);
ПроверятьГород = Не ПустаяСтрока(Город.Наименование);
ПроверятьВнутригородскойРайон = Не ПустаяСтрока(ВнутригородскойРайон.Наименование);
ПроверятьНаселенныйПункт = Не ПустаяСтрока(НаселенныйПункт.Наименование);
ПроверятьУлицу = Не ПустаяСтрока(Улица.Наименование);
ПроверятьДополнительный = Не ПустаяСтрока(Дополнительный.Наименование);
ПроверятьПодчиненный = Не ПустаяСтрока(Подчиненный.Наименование);
ПолеАдресныйОбъектИдентификатор = ?(ПроверятьПодчиненный, "Подчиненный.Идентификатор",
?(ПроверятьДополнительный, "Дополнительный.Идентификатор",
?(ПроверятьУлицу, "Улица.Идентификатор",
?(ПроверятьНаселенныйПункт, "НаселенныйПункт.Идентификатор",
?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.Идентификатор",
?(ПроверятьГород, "Город.Идентификатор",
?(ПроверятьРайон, "Район.Идентификатор",
?(ПроверятьОкруг, "Округ.Идентификатор", "СубъектРФ.Идентификатор"))))))));
ТекстУпорядочить = "УПОРЯДОЧИТЬ ПО СубъектРФ.ОкончаниеДействияЗаписи УБЫВ";
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьОкруг, "Округ");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьРайон, "Район");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьГород, "Город");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьВнутригородскойРайон, "ВнутригородскойРайон");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьНаселенныйПункт, "НаселенныйПункт");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьУлицу, "Улица");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьДополнительный, "Дополнительный");
ТекстОпциональныхПолейУпорядочиванияЗапросаПроверкиАдресаИстория(ТекстУпорядочить, ПроверятьПодчиненный, "Подчиненный");
Запрос.Текст = "ВЫБРАТЬ
| ИСТИНА КАК СубъектРФНайден,
| СубъектРФ.Идентификатор КАК СубъектРФИдентификатор,
| СубъектРФ.ПочтовыйИндекс КАК СубъектРФПочтовыйИндекс,
| СубъектРФ.КодСубъектаРФ КАК СубъектРФКод,
| СубъектРФ.КодКЛАДР КАК СубъектРФКодКЛАДР,
| СубъектРФ.Дополнительно КАК СубъектРФДополнительно,
|
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьОкруг, "Округ") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьРайон, "Район") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьГород, "Город") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьНаселенныйПункт, "НаселенныйПункт") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьУлицу, "Улица") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьДополнительный, "Дополнительный") + "
| " + ТекстОпциональныхПолейЗапросаПроверкиАдресаИстория(ПроверятьПодчиненный, "Подчиненный") + "
|
| NULL КАК ДомаКодКЛАДР
|
|ИЗ
| // Иерархия подчиненности
| РегистрСведений.ИсторияАдресныхОбъектов КАК СубъектРФ
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК СубъектРФДополнительно
|ПО
| СубъектРФДополнительно.Идентификатор = СубъектРФ.Дополнительно
|
|" + ?(ПроверятьОкруг, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.АдресныеОбъекты КАК Округ
|ПО
| Округ.Наименование = &ОкругНаименование
| И Округ.Сокращение = &ОкругСокращение
| И Округ.Уровень = 2
| И Округ.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Округ.КодРайона = 0
| И Округ.КодГорода = 0
| И Округ.КодВнутригородскогоРайона = 0
| И Округ.КодНаселенногоПункта = 0
| И Округ.КодУлицы = 0
| И Округ.КодДополнительногоЭлемента = 0
| И Округ.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК ОкругДополнительно
|ПО
| ОкругДополнительно.Идентификатор = Округ.Дополнительно
|", "") + "
|
|" + ?(ПроверятьРайон, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК Район
|ПО
| Район.Наименование = &РайонНаименование
| И Район.Сокращение = &РайонСокращение
| И Район.Уровень = 3
| И Район.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Район.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И Район.КодГорода = 0
| И Район.КодВнутригородскогоРайона = 0
| И Район.КодНаселенногоПункта = 0
| И Район.КодУлицы = 0
| И Район.КодДополнительногоЭлемента = 0
| И Район.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК РайонДополнительно
|ПО
| РайонДополнительно.Идентификатор = Район.Дополнительно
|", "") + "
|
|" + ?(ПроверятьГород, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК Город
|ПО
| Город.Наименование = &ГородНаименование
| И Город.Сокращение = &ГородСокращение
| И Город.Уровень = 4
| И Город.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Город.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И Город.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И Город.КодВнутригородскогоРайона = 0
| И Город.КодНаселенногоПункта = 0
| И Город.КодУлицы = 0
| И Город.КодДополнительногоЭлемента = 0
| И Город.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК ГородДополнительно
|ПО
| ГородДополнительно.Идентификатор = Город.Дополнительно
|", "") + "
|
|" + ?(ПроверятьВнутригородскойРайон, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК ВнутригородскойРайон
|ПО
| ВнутригородскойРайон.Наименование = &ВнутригородскойРайонНаименование
| И ВнутригородскойРайон.Сокращение = &ВнутригородскойРайонСокращение
| И ВнутригородскойРайон.Уровень = 5
| И ВнутригородскойРайон.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И ВнутригородскойРайон.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И ВнутригородскойРайон.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И ВнутригородскойРайон.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + "
| И ВнутригородскойРайон.КодНаселенногоПункта = 0
| И ВнутригородскойРайон.КодУлицы = 0
| И ВнутригородскойРайон.КодДополнительногоЭлемента = 0
| И ВнутригородскойРайон.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК ВнутригородскойРайонДополнительно
|ПО
| ВнутригородскойРайонДополнительно.Идентификатор = ВнутригородскойРайон.Дополнительно
|", "") + "
|
|" + ?(ПроверятьНаселенныйПункт, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК НаселенныйПункт
|ПО
| НаселенныйПункт.Наименование = &НаселенныйПунктНаименование
| И НаселенныйПункт.Сокращение = &НаселенныйПунктСокращение
| И НаселенныйПункт.Уровень = 6
| И НаселенныйПункт.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И НаселенныйПункт.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И НаселенныйПункт.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И НаселенныйПункт.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + "
| И НаселенныйПункт.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + "
| И НаселенныйПункт.КодУлицы = 0
| И НаселенныйПункт.КодДополнительногоЭлемента = 0
| И НаселенныйПункт.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК НаселенныйПунктДополнительно
|ПО
| НаселенныйПунктДополнительно.Идентификатор = НаселенныйПункт.Дополнительно
|", "") + "
|
|" + ?(ПроверятьУлицу, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК Улица
|ПО
| Улица.Наименование = &УлицаНаименование
| И Улица.Сокращение = &УлицаСокращение
| И Улица.Уровень = 7
| И Улица.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Улица.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И Улица.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И Улица.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + "
| И Улица.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + "
| И Улица.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + "
| И Улица.КодДополнительногоЭлемента = 0
| И Улица.КодПодчиненногоЭлемента = 0
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК УлицаДополнительно
|ПО
| УлицаДополнительно.Идентификатор = Улица.Дополнительно
|", "") + "
|
|" + ?(ПроверятьДополнительный, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК Дополнительный
|ПО
| Дополнительный.Наименование = &ДополнительныйНаименование
| И Дополнительный.Сокращение = &ДополнительныйСокращение
| И Дополнительный.Уровень = 65
| И Дополнительный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Дополнительный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И Дополнительный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И Дополнительный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + "
| И Дополнительный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + "
| И Дополнительный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + "
| И Дополнительный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + "
| И Дополнительный.КодПодчиненногоЭлемента = 0
|", "") + "
|
|" + ?(ПроверятьПодчиненный, "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ИсторияАдресныхОбъектов КАК Подчиненный
|ПО
| Подчиненный.Наименование = &ПодчиненныйНаименование
| И Подчиненный.Сокращение = &ПодчиненныйСокращение
| И Подчиненный.Уровень = 7
| И Подчиненный.КодСубъектаРФ = СубъектРФ.КодСубъектаРФ
| И Подчиненный.КодОкруга = " + ?(ПроверятьОкруг, "Округ.КодОкруга", "0") + "
| И Подчиненный.КодРайона = " + ?(ПроверятьРайон, "Район.КодРайона", "0") + "
| И Подчиненный.КодГорода = " + ?(ПроверятьГород, "Город.КодГорода", "0") + "
| И Подчиненный.КодВнутригородскогоРайона = " + ?(ПроверятьВнутригородскойРайон, "ВнутригородскойРайон.КодВнутригородскогоРайона", "0") + "
| И Подчиненный.КодНаселенногоПункта = " + ?(ПроверятьНаселенныйПункт, "НаселенныйПункт.КодНаселенногоПункта", "0") + "
| И Подчиненный.КодУлицы = " + ?(ПроверятьУлицу, "Улица.КодУлицы", "0") + "
| И Подчиненный.КодДополнительногоЭлемента = " + ?(ПроверятьДополнительный, "Дополнительный.КодДополнительногоЭлемента", "0") + "
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ДополнительныеАдресныеСведения КАК ПодчиненныйДополнительно
|ПО
| ПодчиненныйДополнительно.Идентификатор = Подчиненный.Дополнительно
|", "") + "
|
|// Условие на регион, который есть всегда
|ГДЕ
| СубъектРФ.КодСубъектаРФ = &КодСубъектРФ
| И СубъектРФ.КодОкруга = 0
| И СубъектРФ.КодРайона = 0
| И СубъектРФ.КодГорода = 0
| И СубъектРФ.КодВнутригородскогоРайона = 0
| И СубъектРФ.КодНаселенногоПункта = 0
| И СубъектРФ.КодУлицы = 0
| И СубъектРФ.КодДополнительногоЭлемента = 0
| И СубъектРФ.КодПодчиненногоЭлемента = 0
| " + ТекстУпорядочить;
Запрос.УстановитьПараметр("КодСубъектРФ", КодСубъектРФ);
Запрос.УстановитьПараметр("ОкругНаименование", Округ.Наименование);
Запрос.УстановитьПараметр("ОкругСокращение", Округ.Сокращение);
Запрос.УстановитьПараметр("РайонНаименование", Район.Наименование);
Запрос.УстановитьПараметр("РайонСокращение", Район.Сокращение);
Запрос.УстановитьПараметр("ГородНаименование", Город.Наименование);
Запрос.УстановитьПараметр("ГородСокращение", Город.Сокращение);
Запрос.УстановитьПараметр("ВнутригородскойРайонНаименование", ВнутригородскойРайон.Наименование);
Запрос.УстановитьПараметр("ВнутригородскойРайонСокращение", ВнутригородскойРайон.Сокращение);
Запрос.УстановитьПараметр("НаселенныйПунктНаименование", НаселенныйПункт.Наименование);
Запрос.УстановитьПараметр("НаселенныйПунктСокращение", НаселенныйПункт.Сокращение);
Запрос.УстановитьПараметр("УлицаНаименование", Улица.Наименование);
Запрос.УстановитьПараметр("УлицаСокращение", Улица.Сокращение);
Запрос.УстановитьПараметр("ДополнительныйНаименование", Дополнительный.Наименование);
Запрос.УстановитьПараметр("ДополнительныйСокращение", Дополнительный.Сокращение);
Запрос.УстановитьПараметр("ПодчиненныйНаименование", Подчиненный.Наименование);
Запрос.УстановитьПараметр("ПодчиненныйСокращение", Подчиненный.Сокращение);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
// Нет региона
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СубъектРФ",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Субъект РФ (регион) ""%1"" не найден в адресном классификаторе'"), СубъектРФ.Наименование + " " + СубъектРФ.Сокращение));
Возврат Результат;
КонецЕсли;
// Оставляем только записи со всеми корректными данными.
ЗаписиДомов = РезультатЗапроса.Выгрузить();
КорректныеЗаписи = Новый Массив;
УлицаНайдена = Ложь;
ВариантАдреса = Новый Структура;
История = Новый Соответствие;
Для Каждого Запись Из ЗаписиДомов Цикл;
ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись, Ложь);
Если ПроверятьОкруг И Не Запись.ОкругНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Округ",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Округ ""%1"" отсутствует в адресном классификаторе'"), Округ.Наименование + " " + Округ.Сокращение));
КонецЕсли;
Если ПроверятьРайон И Не Запись.РайонНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "СвРайМО/Район",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Район ""%1"" отсутствует в адресном классификаторе'"), Район.Наименование + " " + Район.Сокращение));
КонецЕсли;
Если ПроверятьГород И Не Запись.ГородНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Город",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Город ""%1"" отсутствует в адресном классификаторе'"), Город.Наименование + " " + Город.Сокращение));
КонецЕсли;
Если ПроверятьВнутригородскойРайон И Не Запись.ВнутригородскойРайонНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "ВнутригРайон",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внутригородской район ""%1"" отсутствует в адресном классификаторе'"),
ВнутригородскойРайон.Наименование + " " + ВнутригородскойРайон.Сокращение));
КонецЕсли;
Если ПроверятьНаселенныйПункт И Не Запись.НаселенныйПунктНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"),
НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение));
КонецЕсли;
Если ПроверятьУлицу И Не Запись.УлицаНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1""отсутствует в адресном классификаторе'"),
Улица.Наименование + " " + Улица.Сокращение));
КонецЕсли;
Если ПроверятьДополнительный И Не Запись.ДополнительныйНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"),
Дополнительный.Наименование + " " + Дополнительный.Сокращение));
КонецЕсли;
Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден Тогда
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент дополнительной территории ""%1"" отсутствует в адресном классификаторе'"),
Подчиненный.Наименование + " " + Подчиненный.Сокращение));
КонецЕсли;
Если ОшибкиПроверки.Количество() = 0 Тогда
Если ПроверятьДополнительный Тогда
АдресНовый = АктуальныеАдресныеСведения(Запись.ДополнительныйАдресныйОбъект);
Возврат АдресНовый;
КонецЕсли;
Если ПроверятьУлицу И Запись.УлицаНайден Тогда
УлицаНайдена = Истина;
АдресНовый = АктуальныеАдресныеСведения(Запись.УлицаАдресныйОбъект);
Возврат АдресНовый;
КонецЕсли;
// Вся запись правильная
КорректныеЗаписи.Добавить(АдресНовый);
КонецЕсли;
КонецЦикла;
Если ПроверятьУлицу И НЕ УлицаНайдена Тогда
ИсторияОбъекта = ИсторияАдресногоОбъекта(Улица.Наименование, Улица.Сокращение, Запись);
Если ИсторияОбъекта.Количество() > 0 Тогда
Для каждого СтрокаОбъект Из ИсторияОбъекта Цикл
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" была переименована в ""%2""'"), СтрокаОбъект.Значение, СтрокаОбъект.Представление));
КонецЦикла;
Иначе
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Улица",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Улица ""%1"" отсутствует в адресном классификаторе'"), Улица.Наименование + " " + Улица.Сокращение));
КонецЕсли;
КонецЕсли;
Если КорректныеЗаписи.Количество() = 0 Тогда
// Нет смысла искать дома и выдавать варианты, надо посмотреть в историю.
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
// Функция - Сформировать описание здания.
//
// Параметры:
@@ -5312,10 +5875,10 @@
КонецПроцедуры
Процедура ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(Вариант, ЗаписьИсточника)
Процедура ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(Вариант, ЗаписьИсточника, ПроверятьДома = Истина)
УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "Индекс", ЗаписьИсточника, "ПочтовыйИндекс");
УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодКЛАДР", ЗаписьИсточника, "КодКЛАДР");
УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "Индекс", ЗаписьИсточника, "ПочтовыйИндекс", ПроверятьДома);
УстановитьРеквизитЗаписиФИАСИерархически(Вариант, "КодКЛАДР", ЗаписьИсточника, "КодКЛАДР", ПроверятьДома);
КонецПроцедуры
@@ -5330,10 +5893,10 @@
КонецПроцедуры
Процедура УстановитьРеквизитЗаписиФИАСИерархически(Приемник, ИмяПоляПриемника, Источник, ИмяПоляИсточника)
Процедура УстановитьРеквизитЗаписиФИАСИерархически(Приемник, ИмяПоляПриемника, Источник, ИмяПоляИсточника, ПроверятьДома = Истина)
Варианты = Новый Массив;
Если ИмяПоляИсточника <> "Идентификатор" Тогда
Если ПроверятьДома И ИмяПоляИсточника <> "Идентификатор" Тогда
Варианты.Добавить("Дома");
КонецЕсли;
Варианты.Добавить("Подчиненный");
@@ -300,7 +300,6 @@
КонецФункции
// Скрывает персональные данные субъектов. Состав персональных данных определяется программно.
// См. ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных.
//
// Параметры:
// Субъекты - Массив, ОпределяемыйТип.СубъектПерсональныхДанных - ссылка или массив ссылок одного типа на субъекты.
@@ -430,6 +429,8 @@
Попытка
ПересчитанаДатаСкрытияПДнСубъектов = Ложь;
Если Не ЗначениеЗаполнено(ДнейДоСкрытияПДн) Тогда
ДнейДоСкрытияПДн = 7;
КонецЕсли;
@@ -441,14 +442,22 @@
ОчиститьСрокСкрытияПерсональныхДанныхСубъектов();
РассчитатьДатуСкрытияПДнСубъектовДавшихСогласие(ДнейДоСкрытияПДн);
ПересчитанаДатаСкрытияПДнСубъектов = Истина;
КонецЕсли;
Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Установить(ДнейДоСкрытияПДн);
ИначеЕсли ТекущееЗначениеИспользоватьСкрытиеПДн <> ИспользоватьСкрытиеПДн Тогда
КонецЕсли;
Если ТекущееЗначениеИспользоватьСкрытиеПДн <> ИспользоватьСкрытиеПДн Тогда
Если ИспользоватьСкрытиеПДн Тогда
РассчитатьДатуСкрытияПДнСубъектовДавшихСогласие(ДнейДоСкрытияПДн);
Если Не ПересчитанаДатаСкрытияПДнСубъектов Тогда
РассчитатьДатуСкрытияПДнСубъектовДавшихСогласие(ДнейДоСкрытияПДн);
КонецЕсли;
Иначе
ОчиститьСрокСкрытияПерсональныхДанныхСубъектов();
КонецЕсли;
@@ -472,6 +481,115 @@
КонецПроцедуры
// Определяет наличие скрытых персональных данных в объекте. В качестве объекта может быть передан и сам субъект.
//
// Параметры:
// Объект - СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей - проверяемый объект. Также
// в качестве значения параметра могут быть указаны наборы записей других регистров
// или значения типа СправочникСсылка, ДокументСсылка.
//
// Возвращаемое значение:
// Булево - признак наличия скрытых персональных данных.
//
Функция ЭтоОбъектСоСкрытымиПерсональнымиДанными(Знач Объект) Экспорт
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат Ложь;
КонецЕсли;
ТипЗначенияОбъекта = ТипЗнч(Объект);
ТипыСубъектов = ЗащитаПерсональныхДанныхПовтИсп.ТипыСубъектов();
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗначенияОбъекта)
ИЛИ Документы.ТипВсеСсылки().СодержитТип(ТипЗначенияОбъекта) Тогда
Если ТипыСубъектов.Найти(ТипЗначенияОбъекта) <> Неопределено Тогда
Возврат ЕстьСубъектыСоСкрытымиПерсональнымиДанными(Объект);
Иначе
Объект = Объект.ПолучитьОбъект();
КонецЕсли;
ИначеЕсли Объект.ДополнительныеСвойства.Свойство("СкрытиеКонфиденциальнойИнформации") Тогда
Возврат Истина;
КонецЕсли;
ОбъектМетаданных = Объект.Метаданные();
ПолноеИмяИсточника = ОбъектМетаданных.ПолноеИмя();
ИменаИсточников = ЗащитаПерсональныхДанныхПовтИсп.ИменаИсточниковПерсональныхДанных();
Если ИменаИсточников.Найти(ПолноеИмяИсточника) <> Неопределено Тогда
ПолныеИменаРеквизитов = ЗащитаПерсональныхДанныхПовтИсп.ИменаРеквизитовИсточникаСодержащихСубъект(ПолноеИмяИсточника);
Если ЗначениеЗаполнено(ПолныеИменаРеквизитов) Тогда
Если ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда
Субъекты = Новый Массив;
РежимЗаписиНезависимый = (ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый);
Если РежимЗаписиНезависимый Тогда
Субъект = Объект.Отбор[ПолныеИменаРеквизитов[0]].Значение;
Если ЗначениеЗаполнено(Субъект) Тогда
Субъекты.Добавить(Субъект);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Субъекты) Тогда
Субъекты = Объект.ВыгрузитьКолонку(ПолныеИменаРеквизитов[0]);
КонецЕсли;
Возврат ЕстьСубъектыСоСкрытымиПерсональнымиДанными(Субъекты);
ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных)
Или ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда
Субъекты = Объект.ВыгрузитьКолонку(ПолныеИменаРеквизитов[0]);
Возврат ЕстьСубъектыСоСкрытымиПерсональнымиДанными(Субъекты);
Иначе
Возврат ЕстьСкрытыеПерсональныеДанные(Объект, ПолныеИменаРеквизитов);
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
#Область ОбменДанными
// Пересчитывает даты скрытия персональных данных субъектов по основаниям, полученным в ходе обмена
// из записей регистра сведений СогласияНаОбработкуПерсональныхДанных.
//
// Параметры:
// Объект - ПланОбменаОбъект - узел плана обмена, для которого выполнялось получение данных.
//
Процедура ПослеЗагрузкиДанных(Объект) Экспорт
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат;
КонецЕсли;
Если Не Объект.ДополнительныеСвойства.Свойство("ОснованияСкрытияПерсональныхДанных") Тогда
Возврат;
КонецЕсли;
Если Объект.ДополнительныеСвойства.ОснованияСкрытияПерсональныхДанных.Количество() > 0 Тогда
РассчитатьДатуСкрытияПерсональныхДанныхПоОснованиям(Объект.ДополнительныеСвойства.ОснованияСкрытияПерсональныхДанных);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации.
@@ -495,7 +613,7 @@
Список = Форма[СписокФормы.ПутьКДанным];
ИмяСпискаФормы = СписокФормы.Имя;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", Ложь);
Возврат;
КонецЕсли;
@@ -550,9 +668,7 @@
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ДнейДоСкрытия = Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить();
ДнейДоСкрытия = ДнейДоСкрытияПерсональныхДанныхСубъектов();
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаСубъектыДляСкрытияПерсональныхДанных(Истина) + "
@@ -563,11 +679,8 @@
| Субъекты.Субъект КАК Субъект
|ИЗ
| ВТСубъектыДляСкрытия КАК Субъекты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СубъектыДляСкрытияПерсональныхДанных КАК СубъектыДляСкрытияПДн
| ПО СубъектыДляСкрытияПДн.Субъект = Субъекты.Субъект
|ГДЕ
| Субъекты.Субъект В(&Субъекты)
| И СубъектыДляСкрытияПДн.Субъект ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
@@ -585,7 +698,10 @@
Запрос.УстановитьПараметр("ПустаяДата", '00010101');
Запрос.УстановитьПараметр("РасчетнаяДата", ТекущаяДата + ДнейДоСкрытия * 86400);
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока Выборка.Следующий() Цикл
СтрокаСписка = Строки[Выборка.Субъект];
СтрокаСписка.Данные["ОтсутствуетСогласие"] = 1;
@@ -719,6 +835,86 @@
КонецПроцедуры
// См. ОбменДаннымиСобытия.ПриОтправкеДанных.
Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Получатель, Знач СозданиеНачальногоОбраза) Экспорт
Если Не СозданиеНачальногоОбраза
Или Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат;
КонецЕсли;
УзлыРИБ = СтандартныеПодсистемыПовтИсп.УзлыРИБ();
Если УзлыРИБ.НайтиПоЗначению(Получатель) <> Неопределено Тогда
Возврат;
КонецЕсли;
Если ЭтоОбъектСоСкрытымиПерсональнымиДанными(ЭлементДанных) Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецЕсли;
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного.
Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт
// Стандартная обработка не переопределяется.
Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда
Возврат;
КонецЕсли;
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.СубъектыДляСкрытияПерсональныхДанных") Тогда
Если ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, ЭлементДанных)
И ЕстьСубъектыСоСкрытымиПерсональнымиДанными(ЭлементДанных.Отбор.Субъект.Значение) Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
КонецЕсли;
Иначе
ПроверитьВозможностьПолученияЭлементаДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
КонецЕсли;
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного.
Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт
// Стандартная обработка не переопределяется.
Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда
Возврат;
КонецЕсли;
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.СубъектыДляСкрытияПерсональныхДанных") Тогда
Если ЭлементДанных.Количество() > 0 И ЭлементДанных[0].Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять;
КонецЕсли;
ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.СогласияНаОбработкуПерсональныхДанных") Тогда
Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
Если Не Отправитель.ДополнительныеСвойства.Свойство("ОснованияСкрытияПерсональныхДанных") Тогда
Отправитель.ДополнительныеСвойства.Вставить("ОснованияСкрытияПерсональныхДанных", Новый Массив);
КонецЕсли;
Если Отправитель.ДополнительныеСвойства.ОснованияСкрытияПерсональныхДанных.Найти(Регистратор) = Неопределено Тогда
Отправитель.ДополнительныеСвойства.ОснованияСкрытияПерсональныхДанных.Добавить(Регистратор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.
Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт
@@ -737,7 +933,7 @@
//
Функция ПропуститьРегистрациюОбъекта(ИмяПланаОбмена, Объект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Если Не ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Возврат Ложь;
КонецЕсли;
@@ -754,31 +950,6 @@
КонецФункции
// См. ОбменДаннымиСобытия.ПриОтправкеДанных.
Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Получатель, Знач СозданиеНачальногоОбраза) Экспорт
Если Не СозданиеНачальногоОбраза
Или Не ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп");
ИмяПланаОбмена = ЗащитаПерсональныхДанныхПовтИсп.ПолучитьИмяПланаОбмена(Получатель);
Если МодульОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если ЭтоОбъектСоСкрытымиПерсональнымиДанными(ЭлементДанных) Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -840,6 +1011,82 @@
#КонецОбласти
#Область ОбработчикиПодписокНаСобытия
Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// ОбменДанными.Загрузка проверяется внутри вызова.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения");
МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник,
Отказ, РежимЗаписи, РежимПроведения);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ) Экспорт
// ОбменДанными.Загрузка проверяется внутри вызова.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения");
МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Функция ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Экспорт
Возврат ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов");
КонецФункции
Функция ДнейДоСкрытияПерсональныхДанныхСубъектов() Экспорт
УстановитьПривилегированныйРежим(Истина);
Возврат Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить();
КонецФункции
Процедура ПроверитьВозможностьПолученияЭлементаДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель)
УзлыРИБ = СтандартныеПодсистемыПовтИсп.УзлыРИБ();
ЭтоУзелРИБ = УзлыРИБ.НайтиПоЗначению(Отправитель.Ссылка) <> Неопределено;
Если ЭтоУзелРИБ И Не ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, ЭлементДанных) Тогда
Возврат;
КонецЕсли;
Если ЭтоОбъектСоСкрытымиПерсональнымиДанными(ЭлементДанных) Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
Если ЭтоУзелРИБ Тогда
ОтправкаНазад = Истина;
Иначе
ОписаниеОшибки = НСтр("ru = 'Загрузка данных по субъекту (%1) со скрытыми персональными данными.'");
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, Строка(ЭлементДанных));
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Защита персональных данных.Изменение скрытых персональных данных'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
ОписаниеОшибки,
РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ТекстЗапросаСубъектыДляСкрытияПерсональныхДанных(ВоВременнуюТаблицу = Ложь)
ТекстЗапроса = "";
@@ -873,29 +1120,6 @@
КонецФункции
Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// ОбменДанными.Загрузка проверяется внутри вызова.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения");
МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник,
Отказ, РежимЗаписи, РежимПроведения);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ) Экспорт
// ОбменДанными.Загрузка проверяется внутри вызова.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения");
МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ);
КонецЕсли;
КонецПроцедуры
Функция СведенияОПерсональныхДанных() Экспорт
// Таблица сведений о персональных данных.
@@ -1258,71 +1482,6 @@
КонецФункции
// Определяет наличие скрытых персональных данных в объекте.
//
// Параметры:
// Объект - СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей и т.п. - проверяемый объект.
//
// Возвращаемое значение:
// Булево - признак наличия скрытых персональных данных.
//
Функция ЭтоОбъектСоСкрытымиПерсональнымиДанными(Объект)
Если Объект.ДополнительныеСвойства.Свойство("СкрытиеКонфиденциальнойИнформации") Тогда
Возврат Истина;
КонецЕсли;
ОбъектМетаданных = Объект.Метаданные();
ПолноеИмяИсточника = ОбъектМетаданных.ПолноеИмя();
ИменаИсточников = ЗащитаПерсональныхДанныхПовтИсп.ИменаИсточниковПерсональныхДанных();
Если ИменаИсточников.Найти(ПолноеИмяИсточника) <> Неопределено Тогда
ПолныеИменаРеквизитов = ЗащитаПерсональныхДанныхПовтИсп.ИменаРеквизитовИсточникаСодержащихСубъект(ПолноеИмяИсточника);
Если ЗначениеЗаполнено(ПолныеИменаРеквизитов) Тогда
Если ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда
Субъекты = Новый Массив;
РежимЗаписиНезависимый = (ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый);
Если РежимЗаписиНезависимый Тогда
Субъект = Объект.Отбор[ПолныеИменаРеквизитов[0]].Значение;
Если ЗначениеЗаполнено(Субъект) Тогда
Субъекты.Добавить(Субъект);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Субъекты) Тогда
Субъекты = Объект.ВыгрузитьКолонку(ПолныеИменаРеквизитов[0]);
КонецЕсли;
Возврат ЕстьСубъектыСоСкрытымиПерсональнымиДанными(Субъекты);
ИначеЕсли ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных)
Или ОбщегоНазначения.ЭтоРегистрНакопления(ОбъектМетаданных) Тогда
Субъекты = Объект.ВыгрузитьКолонку(ПолныеИменаРеквизитов[0]);
Возврат ЕстьСубъектыСоСкрытымиПерсональнымиДанными(Субъекты);
Иначе
Возврат ЕстьСкрытыеПерсональныеДанные(Объект, ПолныеИменаРеквизитов);
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
// Определяет факт наличия среди переданных в параметре субъектов тех, по которым выполнялось скрытие персональных данных.
//
// Параметры:
@@ -1335,8 +1494,7 @@
ЕстьСкрытые = Ложь;
Если Не ЗначениеЗаполнено(Субъекты)
Или Не ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Если Не ЗначениеЗаполнено(Субъекты) Тогда
Возврат ЕстьСкрытые;
КонецЕсли;
@@ -1344,28 +1502,19 @@
Субъекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Субъекты);
КонецЕсли;
ТипыСубъектов = ЗащитаПерсональныхДанныхПовтИсп.ТипыСубъектов();
Если ТипыСубъектов.Найти(ТипЗнч(Субъекты[0])) = Неопределено Тогда
Возврат ЕстьСкрытые;
КонецЕсли;
НастройкиСубъектов = ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Если ЗначениеЗаполнено(НастройкиСубъектов) Тогда
Для Каждого СубъектИНастройки Из НастройкиСубъектов Цикл
Для Каждого СубъектИНастройки Из НастройкиСубъектов Цикл
НастройкиСубъекта = СубъектИНастройки.Значение;
Если НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
НастройкиСубъекта = СубъектИНастройки.Значение;
Если НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
ЕстьСкрытые = Истина;
Прервать;
КонецЕсли;
ЕстьСкрытые = Истина;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ЕстьСкрытые;
@@ -1386,11 +1535,6 @@
Функция ЕстьСкрытыеПерсональныеДанные(Объект, ПолныеИменаРеквизитов)
ЕстьСкрытые = Ложь;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Возврат ЕстьСкрытые;
КонецЕсли;
ЧастиИменРеквизитов = Новый Массив;
Для Каждого ПолноеИмяРеквизита Из ПолныеИменаРеквизитов Цикл
@@ -1448,16 +1592,15 @@
//
Функция ПрочитатьНастройкиСкрытияСубъектов(Знач Субъекты) Экспорт
НастройкиСубъектов = Новый Соответствие;
Если Не ЗначениеЗаполнено(Субъекты) Тогда
Возврат Неопределено;
Возврат НастройкиСубъектов;
КонецЕсли;
Если ТипЗнч(Субъекты) <> Тип("Массив") Тогда
Субъекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Субъекты);
КонецЕсли;
НастройкиСубъектов = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Субъекты", Субъекты);
@@ -1472,19 +1615,21 @@
|ГДЕ
| СубъектыДляСкрытияПерсональныхДанных.Субъект В(&Субъекты)";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Запрос.Выполнить().Выбрать();
НастройкиСкрытия = НастройкиСкрытияСубъектовПоУмолчанию();
Для Каждого Субъект Из Субъекты Цикл
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НастройкиСкрытия = НастройкиСкрытияСубъектовПоУмолчанию();
ЗаполнитьЗначенияСвойств(НастройкиСкрытия, Выборка);
НастройкиСубъектов.Вставить(Выборка.Субъект, НастройкиСкрытия);
КонецЦикла;
НастройкиСкрытияСубъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(НастройкиСкрытия);
КонецЕсли;
Выборка.Сбросить();
Если Выборка.НайтиСледующий(Новый Структура("Субъект", Субъект)) Тогда
ЗаполнитьЗначенияСвойств(НастройкиСкрытияСубъекта, Выборка);
КонецЕсли;
НастройкиСубъектов.Вставить(Субъект, НастройкиСкрытияСубъекта);
КонецЦикла;
Возврат НастройкиСубъектов;
@@ -1539,9 +1684,7 @@
//
Функция НастройкиСкрытияСубъектовПоУмолчанию()
УстановитьПривилегированныйРежим(Истина);
ДнейДоСкрытия = Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить();
ДнейДоСкрытия = ДнейДоСкрытияПерсональныхДанныхСубъектов();
ДатаСкрытия = НачалоДня(ТекущаяДатаСеанса()) + ДнейДоСкрытия * 86400;
НастройкиСкрытия = Новый Структура;
@@ -1571,7 +1714,7 @@
КонецЕсли;
Если ДнейДоСкрытия = Неопределено Тогда
ДнейДоСкрытия = Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить();
ДнейДоСкрытия = ДнейДоСкрытияПерсональныхДанныхСубъектов();
КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияСогласия) Тогда
@@ -1586,18 +1729,56 @@
КонецПроцедуры
Процедура РассчитатьДатуСкрытияПерсональныхДанныхСубъекта(Субъект) Экспорт
Процедура РассчитатьДатуСкрытияПерсональныхДанныхПоОснованиям(Основания) Экспорт
НастройкиСубъектов = ПрочитатьНастройкиСкрытияСубъектов(Субъект);
НастройкиСкрытия = НастройкиСубъектов.Получить(Субъект);
Если ЗначениеЗаполнено(НастройкиСкрытия)
И (НастройкиСкрытия.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или НастройкиСкрытия.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено) Тогда
Возврат;
Если ТипЗнч(Основания) <> Тип("Массив") Тогда
Основания = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Основания);
КонецЕсли;
ОбновитьНастройкиСкрытияСубъекта(Субъект);
ПрежниеСубъекты = Новый Массив;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Основания", Основания);
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| СубъектыДляСкрытияПерсональныхДанных.Субъект КАК Субъект
|ИЗ
| РегистрСведений.СубъектыДляСкрытияПерсональныхДанных КАК СубъектыДляСкрытияПерсональныхДанных
|ГДЕ
| СубъектыДляСкрытияПерсональныхДанных.Основание В (&Основания)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбновитьНастройкиСкрытияСубъекта(Выборка.Субъект);
ПрежниеСубъекты.Добавить(Выборка.Субъект);
КонецЦикла;
СубъектыОснований = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Основания, "Субъект");
ТекущиеСубъекты = ОбщегоНазначения.ВыгрузитьКолонку(СубъектыОснований, "Значение", Истина);
ОставшиесяСубъекты = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ТекущиеСубъекты, ПрежниеСубъекты);
НастройкиСубъектов = ПрочитатьНастройкиСкрытияСубъектов(ОставшиесяСубъекты);
Для Каждого СубъектИНастройки Из НастройкиСубъектов Цикл
Субъект = СубъектИНастройки.Ключ;
НастройкиСубъекта = СубъектИНастройки.Значение;
Если НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Продолжить;
Иначе
ОбновитьНастройкиСкрытияСубъекта(Субъект);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -1945,4 +2126,4 @@
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -38,3 +38,109 @@
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПараметрыВопросаПодтвержденияСкрытия(Субъекты) Экспорт
ТекстВопроса = "";
ПараметрыВопроса = Новый Структура;
СкрываемыеСубъекты = Новый Массив;
СкрываемыеСубъектыБезСогласия = Новый Массив;
СкрываемыеСубъектыССогласием = Новый Массив;
ДатаСеанса = НачалоДня(ТекущаяДатаСеанса());
ПустаяДата = Дата(1, 1, 1);
ДнейДоСкрытия = ЗащитаПерсональныхДанных.ДнейДоСкрытияПерсональныхДанныхСубъектов();
НастройкиСубъектов = ЗащитаПерсональныхДанных.ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Для Каждого НастройкиСкрытия Из НастройкиСубъектов Цикл
Субъект = НастройкиСкрытия.Ключ;
Настройки = НастройкиСкрытия.Значение;
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено Тогда
ТекстПричины = НСтр("ru = 'Скрытие ранее отменено по причине: %1.'");
ТекстПричины = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПричины, Настройки.ПричинаОтменыСкрытия);
Иначе
ТекстПричины = НСтр("ru = 'Скрытие уже выполнено.'");
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Персональные данные субъекта «%1» не могут быть скрыты.
|%2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
ИначеЕсли ЗначениеЗаполнено(Настройки.Основание)
И (Настройки.ДатаСкрытия = ПустаяДата Или Настройки.ДатаСкрытия - ДнейДоСкрытия * 86400 > ДатаСеанса) Тогда
СкрываемыеСубъектыССогласием.Добавить(Субъект);
Иначе
СкрываемыеСубъектыБезСогласия.Добавить(Субъект);
КонецЕсли;
СкрываемыеСубъекты.Добавить(Субъект);
КонецЦикла;
Если ЗначениеЗаполнено(СкрываемыеСубъектыБезСогласия) Тогда
Заголовок = НСтр("ru = 'Будут скрыты персональные данные субъектов:'");
ТекстВопроса = ПредставлениеСпискаСубъектов(Заголовок, СкрываемыеСубъектыБезСогласия);
КонецЕсли;
Если ЗначениеЗаполнено(СкрываемыеСубъектыССогласием) Тогда
Заголовок = НСтр("ru = 'Несмотря на полученное согласие на обработку ПДн, будут скрыты персональные данные субъектов:'");
ТекстВопроса = ?(ЗначениеЗаполнено(ТекстВопроса), ТекстВопроса + Символы.ПС, "") + ПредставлениеСпискаСубъектов(Заголовок, СкрываемыеСубъектыССогласием);
КонецЕсли;
Если ЗначениеЗаполнено(ТекстВопроса) Тогда
ТекстВопроса = ТекстВопроса + Символы.ПС + НСтр("ru = 'Восстановление данных будет невозможно. Продолжить?'");
КонецЕсли;
ПараметрыВопроса.Вставить("Субъекты", СкрываемыеСубъекты);
ПараметрыВопроса.Вставить("ТекстВопроса", ТекстВопроса);
Возврат ПараметрыВопроса;
КонецФункции
Функция ПредставлениеСпискаСубъектов(Заголовок, Субъекты)
ПредставлениеСписка = "";
ПредставлениеСписка = Заголовок + Символы.ПС;
Если Субъекты.Количество() = 1 Тогда
ПредставлениеСписка = СтрЗаменить(ПредставлениеСписка, НСтр("ru = 'субъектов'"), НСтр("ru = 'субъекта'"));
КонецЕсли;
Номер = 1;
Для Каждого Субъект Из Субъекты Цикл
ПредставлениеСписка = ПредставлениеСписка + ?(Номер <> 1, ", ", "");
ПредставлениеСписка = ПредставлениеСписка + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1'"), Субъект);
Номер = Номер + 1;
КонецЦикла;
Возврат ПредставлениеСписка + "." + Символы.ПС;
КонецФункции
Процедура СкрытьПерсональныеДанныеСубъектов(Субъекты, СообщатьОбИсключениях = Ложь) Экспорт
ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(Субъекты, СообщатьОбИсключениях);
КонецПроцедуры
#КонецОбласти
@@ -238,10 +238,4 @@
КонецФункции
Функция ПолучитьИмяПланаОбмена(УзелПланаОбмена) Экспорт
Возврат УзелПланаОбмена.Метаданные().Имя;
КонецФункции
#КонецОбласти
@@ -293,6 +293,11 @@
МодульДополнительныеОтчетыИОбработки.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда
МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
МодульЗащитаПерсональныхДанных.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
КонецЕсли;
ПользователиСлужебный.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
@@ -337,6 +342,11 @@
МодульДополнительныеОтчетыИОбработки.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда
МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
МодульЗащитаПерсональныхДанных.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
КонецЕсли;
ПользователиСлужебный.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
@@ -72,6 +72,7 @@
// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного
// использования.
// * Комментарий - Строка - комментарий к проверке.
// * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию.
//
// Пример:
// 1) Добавление проверки
@@ -226,6 +227,6 @@
#КонецОбласти
#КонецОбласти
@@ -29,7 +29,7 @@
|по значению одноименного ресурса предыдущей версии.'");
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.6.91";
Обработчик.Версия = "2.4.6.113";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("fcd45d27-8e5d-45dd-9648-deff60825ae1");
Обработчик.Процедура = "Справочники.ПравилаПроверкиУчета.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.РежимВыполнения = "Отложенно";
@@ -40,8 +40,7 @@
Обработчик.БлокируемыеОбъекты = "Справочник.ПравилаПроверкиУчета";
Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Комментарий = НСтр("ru = 'Отключение автоматического запуска проверок ссылочной целостности и
|заполненности обязательных реквизитов в подсистеме контроля ведения учета.'");
Обработчик.Комментарий = НСтр("ru = 'Отключение автоматического запуска системных проверок в подсистеме контроля ведения учета.'");
КонецПроцедуры
@@ -195,6 +194,7 @@
КонецЕсли;
КэшБитыхСсылок = Новый Соответствие;
ПараметрыПроверки.Вставить("КэшСсылок", Новый Соответствие);
Для Каждого ВидМетаданных Из СсылочныеВидыОбъектовМетаданных() Цикл
Для Каждого ОбъектМетаданных Из ВидМетаданных Цикл
@@ -207,6 +207,7 @@
НайтиБитыеСсылкиВРегистрах(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок);
КонецЦикла;
КонецЦикла;
ПараметрыПроверки.Удалить("КэшСсылок");
КонецПроцедуры
@@ -573,11 +574,22 @@
ОчиститьРезультатыПредыдущихПроверок(ВыполняемаяПроверка, ПараметрыПроверки.ПараметрыВыполненияПроверки);
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор);
КонецЕсли;
ПараметрыОбработчика = Новый Массив;
ПараметрыОбработчика.Добавить(ВыполняемаяПроверка);
ПараметрыОбработчика.Добавить(ПараметрыПроверки);
ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика);
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, 0);
КонецЕсли;
КонецПроцедуры
// Обработчик регламентного задания "ПроверкаВеденияУчета". Предназначен для обработки
@@ -1297,11 +1309,7 @@
ПроверкаОбъект.КонтекстПроверокВеденияУчета = Проверка.КонтекстПроверокВеденияУчета;
КонецЕсли;
Если Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности" Или Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов" Тогда
ПроверкаОбъект.Использование = Ложь;
Иначе
ПроверкаОбъект.Использование = Истина;
КонецЕсли;
ПроверкаОбъект.Использование = Не Проверка.Отключена;
Если ЗначениеЗаполнено(Проверка.ЛимитПроблем) Тогда
ПроверкаОбъект.ЛимитПроблем = Проверка.ЛимитПроблем;
@@ -1503,6 +1511,8 @@
Процедура НайтиБитыеСсылки(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
Реквизиты = ОбъектМетаданных.Реквизиты;
РеквизитыОбъекта = СсылочныеРеквизитыОбъекта(ОбъектМетаданных);
РеквизитыТабличныхЧастейОбъекта = СсылочныеРеквизитыТабличныхЧастейОбъекта(ОбъектМетаданных);
@@ -1548,6 +1558,10 @@
Продолжить;
КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбнаруженаБитаяСсылка = КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено;
Если Не ОбнаруженаБитаяСсылка И Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
@@ -1559,6 +1573,11 @@
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"),
СсылкаНаОбъект, СсылочныйРеквизит.Ключ, ТекущаяСсылка);
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли;
КонецЦикла;
@@ -1594,6 +1613,11 @@
НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указан несуществующий элемент: ""%5"".'"),
СсылкаНаОбъект, ИмяРеквизитаТЧ, СтрЗаменить(РезультатЗапросаПоРеквизитамТЧ.Ключ, ИмяРеквизитаТЧ, ""),
ТекущийНомерСтроки, ТекущаяСсылка);
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли;
КонецЦикла;
@@ -1671,6 +1695,9 @@
Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл
Для Каждого РеквизитТабличнойЧасти Из ТабличнаяЧасть.Реквизиты Цикл
Если СодержитСсылочныйТип(РеквизитТабличнойЧасти) Тогда
Если РеквизитТабличнойЧасти.Имя = "ТочкаМаршрута" Тогда
Продолжить;
КонецЕсли;
Результат.Добавить(ТабличнаяЧасть.Имя + "." + РеквизитТабличнойЧасти.Имя);
КонецЕсли;
КонецЦикла;
@@ -1717,6 +1744,7 @@
Процедура НайтиБитыеСсылкиВРегистрахНакопления(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Измерения = ОбъектМетаданных.Измерения;
Реквизиты = ОбъектМетаданных.Реквизиты;
@@ -1789,6 +1817,10 @@
Продолжить;
КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
@@ -1800,14 +1832,17 @@
Иначе
Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли;
КонецЕсли;
@@ -2227,6 +2262,7 @@
Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
Измерения = ОбъектМетаданных.Измерения;
Реквизиты = ОбъектМетаданных.Реквизиты;
СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты;
@@ -2419,6 +2455,10 @@
Продолжить;
КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
@@ -2430,14 +2470,17 @@
Иначе
Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли;
КонецЕсли;
@@ -2474,6 +2517,7 @@
Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Измерения = ОбъектМетаданных.Измерения;
Реквизиты = ОбъектМетаданных.Реквизиты;
@@ -2563,6 +2607,10 @@
Продолжить;
КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
@@ -2574,14 +2622,17 @@
Иначе
Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли;
КонецЕсли;
@@ -2622,6 +2673,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Реквизиты = ОбъектМетаданных.Реквизиты;
@@ -2642,13 +2698,19 @@
Результат = Запрос.Выполнить().Выгрузить();
ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки;
ОбщееКоличествоДанных = 0;
ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки;
Пока Истина Цикл
Если Результат.Количество() = 0 Тогда
Прервать;
КонецЕсли;
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл
СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект;
@@ -2688,6 +2750,12 @@
КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект);
Результат = Запрос.Выполнить().Выгрузить();
@@ -2729,6 +2797,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхПериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Если ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда
@@ -2797,11 +2870,16 @@
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
ОбщееКоличествоДанных = 0;
Пока Результат.Количество() > 0 Цикл
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл
ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
@@ -2828,6 +2906,12 @@
КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период);
Результат = Запрос.Выполнить().Выгрузить();
@@ -2837,6 +2921,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхНепериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Запрос = Новый Запрос(
@@ -2857,11 +2946,16 @@
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя);
Запрос.УстановитьПараметр("Регистратор", "");
Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
ОбщееКоличествоДанных = 0;
Пока Результат.Количество() > 0 Цикл
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл
ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
@@ -2887,6 +2981,12 @@
КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка);
Результат = Запрос.Выполнить().Выгрузить();
@@ -2896,6 +2996,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхНепериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Условие = "";
@@ -2922,6 +3027,8 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя());
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки);
ОбщееКоличествоДанных = 0;
Запрос = Новый Запрос(ТекстЗапроса);
Результат = Запрос.Выполнить().Выгрузить();
@@ -2933,6 +3040,10 @@
Прервать;
КонецЕсли;
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл
Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда
@@ -2980,6 +3091,12 @@
КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Если ЭтоПервыйПроход Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, УсловиеПервогоПрохода, "Где " + Условие);
КонецЕсли;
@@ -2996,6 +3113,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхПериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
УсловиеПоИзмерениям = "";
@@ -3029,6 +3151,8 @@
Запрос = Новый Запрос(ТекстПервогоЗапроса);
Запрос.УстановитьПараметр("Период", ПараметрыПроверки.ДатаНачалаПроверки);
ОбщееКоличествоДанных = 0;
Результат = Запрос.Выполнить().Выгрузить();
ЭтоПервыйПроход = Истина;
@@ -3039,6 +3163,10 @@
Прервать;
КонецЕсли;
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл
ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
@@ -3090,6 +3218,12 @@
КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Если ЭтоПервыйПроход Тогда
ЭтоПервыйПроход = Ложь;
Запрос.Текст = ТекстЗапросаСУсловием;
@@ -3166,6 +3300,11 @@
КонецФункции
Функция РазмерКэшаПроверенныхСсылок()
Возврат 100000;
КонецФункции
#КонецОбласти
@@ -81,6 +81,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов";
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНезаполненныеОбязательныеРеквизиты";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Проверка = Проверки.Добавить();
Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор;
@@ -99,6 +100,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности";
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьСсылочнуюЦелостность";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Проверка = Проверки.Добавить();
Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор;
@@ -116,6 +118,7 @@
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьЦиклическиеСсылки";
Проверка.ОбработчикПереходаКИсправлению = "Отчет.РезультатыПроверкиУчета.Форма.ИсправлениеЦиклическихСсылок";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Проверка = Проверки.Добавить();
Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор;
@@ -127,6 +130,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствующихПредопределенныхЭлементов";
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьОтсутствующиеПредопределенныеЭлементы";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Проверка = Проверки.Добавить();
Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор;
@@ -138,6 +142,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаДублированияПредопределенныхЭлементов";
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьДублированиеПредопределенныхЭлементов";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Проверка = Проверки.Добавить();
Проверка.ИдентификаторГруппы = ГруппаПроверок.Идентификатор;
@@ -155,6 +160,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаОтсутствияПредопределенныхУзловПлановОбмена";
Проверка.ОбработчикПроверки = "КонтрольВеденияУчетаСлужебный.ПроверитьНаличиеПредопределенныхУзловПлановОбмена";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
@@ -168,6 +174,7 @@
Проверка.Идентификатор = "СтандартныеПодсистемы.ПроверкаСсылокНаНесуществующиеФайлыВТоме";
Проверка.ОбработчикПроверки = "РаботаСФайламиСлужебный.ПроверкаСсылокНаНесуществующиеФайлыВТоме";
Проверка.КонтекстПроверокВеденияУчета = "СистемныеПроверки";
Проверка.Отключена = Истина;
КонецЕсли;
@@ -240,6 +247,7 @@
// * ДополнительныеПараметры - ХранилищеЗначений - Дополнительная информация о проверке для программного
// использования.
// * Комментарий - Строка - комментарий к проверке.
// * Отключена - Булево - если Истина, то проверка не будет выполняться в фоне по расписанию.
//
Функция НоваяТаблицаПроверок()
@@ -261,6 +269,7 @@
КолонкиПроверок.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("ХранилищеЗначения"));
КолонкиПроверок.Добавить("ИдентификаторРодителя", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256)));
КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256)));
КолонкиПроверок.Добавить("Отключена", Новый ОписаниеТипов("Булево"));
Возврат Проверки;
@@ -1027,13 +1027,39 @@
// Выполнение ПКС для ТЧ
Если СтекВыгрузки.Количество() = 1 Тогда
// Формируем структуру новых табличных частей по ПКС.
СвойстваТЧПриемника = Новый Структура;
Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
Если НЕ ТЧИСвойства.ИспользуетсяАлгоритмКонвертации Тогда
ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
Если ПустаяСтрока(ИмяТЧПриемника) Тогда
Продолжить;
КонецЕсли;
Если Не СвойстваТЧПриемника.Свойство(ИмяТЧПриемника) Тогда
ТаблицаПКС = Новый ТаблицаЗначений;
ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка"));
СвойстваТЧПриемника.Вставить(ИмяТЧПриемника, ТаблицаПКС);
КонецЕсли;
Для Каждого ПКС Из ТЧИСвойства.Свойства Цикл
СтрокаСвойство = СвойстваТЧПриемника[ИмяТЧПриемника].Добавить();
СтрокаСвойство.СвойствоФормата = ПКС.СвойствоФормата;
КонецЦикла;
КонецЦикла;
Для Каждого ТЧИСвойства Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл
Если Не ТЧИСвойства.ИспользуетсяАлгоритмКонвертации Тогда
Продолжить;
КонецЕсли;
ПКСДляТЧ = ТЧИСвойства.Свойства;
ИмяТЧПриемника = ТЧИСвойства.ТЧФормата;
ТЧПриемника = Неопределено;
Если Не ЗначениеЗаполнено(ИмяТЧПриемника)
Или Не Приемник.Свойство(ИмяТЧПриемника, ТЧПриемника) Тогда
@@ -1041,7 +1067,7 @@
КонецЕсли;
// Создаем новую ТЗ, в которой нет ограничений типа для колонок.
НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(ПКСДляТЧ);
НоваяТЧПриемника = СоздатьТЧПриемникаПоПКС(СвойстваТЧПриемника[ИмяТЧПриемника]);
// Убираем лишние колонки, которые могли добавить в приемнике.
УдаляемыеКолонки = Новый Массив;
@@ -2456,12 +2482,6 @@
Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения");
СведенияОВерсииОбъекта = Новый Структура;
СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина);
СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем");
СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелКорреспондента);
Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта);
// Выполняем попытку проведения документа.
Объект.Записать(РежимЗаписиДокумента.Проведение);
@@ -4469,12 +4489,6 @@
ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения();
Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения");
СведенияОВерсииОбъекта = Новый Структура;
СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина);
СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем");
СведенияОВерсииОбъекта.Вставить("АвторВерсии", КомпонентыОбмена.УзелКорреспондента);
Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта);
// Выполняем попытку записи объекта.
Объект.Записать();
@@ -2319,6 +2319,7 @@
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПланыОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы,
| ПланыОбмена.Наименование КАК НаименованиеКорреспондента,
|
| [ДополнительныеСвойстваПланаОбмена]
|
@@ -1158,6 +1158,11 @@
Иначе // реквизиты ТЧ объекта
// Проверка, что это ТЧ объекта, а не таблица регистра.
Если Объект.Метаданные().ТабличныеЧасти.Найти(СтрокаТаблицыРеквизитовРегистрации.ИмяТабличнойЧасти) = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ТаблицаРеквизитовРегистрацииВерсияОбъектаДоИзменения = РеквизитыРегистрацииТабличнойЧастиДоИзменения(Объект, СтрокаТаблицыРеквизитовРегистрации);
ТаблицаРеквизитовРегистрацииВерсияОбъектаПослеИзменения = РеквизитыРегистрацииТабличнойЧастиПослеИзменения(Объект, СтрокаТаблицыРеквизитовРегистрации);
@@ -32,7 +32,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "2.4.6.97";
Описание.Версия = "2.4.6.117";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -71,6 +71,14 @@
Обработчик.Приоритет = 80;
Обработчик.МонопольныйРежим = Истина;
Если РаботаВМоделиСервиса.РазделениеВключено() Тогда
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.6.105";
Обработчик.Процедура = "ОчередьЗаданийСлужебный.ЗапланироватьНеАктивныеЗадания";
Обработчик.ОбщиеДанные = Истина;
Обработчик.РежимВыполнения = "Оперативно";
КонецЕсли;
КонецПроцедуры
// См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных.
@@ -699,6 +707,7 @@
КонецЕсли;
ИсходнаяДатаДляПроверки = ДатаДляПроверки;
ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска));
// Границы по датам
Если ЗначениеЗаполнено(Расписание.ДатаКонца)
@@ -863,15 +872,17 @@
КонецЕсли;
// Учет времени
ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки));
Если Расписание.ДетальныеРасписанияДня.Количество() = 0 Тогда
ДетальныеРасписания = Новый Массив;
ДетальныеРасписания.Добавить(Расписание);
ВремяДляПроверки = ДатаДляПроверки;
ВремяНачалаПоследнегоЗапуска = ДатаНачалаПоследнегоЗапуска;
Иначе
ДетальныеРасписания = Расписание.ДетальныеРасписанияДня;
ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки));
ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска));
КонецЕсли;
// Если у нас есть промежутки, с переходом через полночь, то разбиваем их на два промежутка.
@@ -1482,25 +1493,14 @@
Иначе
Расписание = Выборка.Расписание.Получить();
Если Расписание <> Неопределено Тогда
Задание.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания(
Расписание, ЧасовойПояс, Задание.ДатаНачалаПоследнегоЗапуска, Задание.ДатаЗавершенияПоследнегоЗапуска);
Задание.НомерПопытки = 0;
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеАктивно;
КонецЕсли;
Задание.ИсполняющееФоновоеЗадание = Неопределено;
РаботаВМоделиСервиса.ЗаписатьВспомогательныеДанные(Задание);
Иначе // Нет расписания
Если Расписание = Неопределено Или (Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено
И Расписание.ПериодПовтораДней = 0 И Расписание.ПериодПовтораВТечениеДня = 0) Тогда
Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(
Задание.Метаданные().ПолноеИмя(),
РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
Если ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания.
Если Расписание = Неопределено И ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания.
ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон);
@@ -1522,6 +1522,19 @@
Задание.ОбменДанными.Загрузка = Истина;
Задание.Удалить();
Иначе
Задание.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания(
Расписание, ЧасовойПояс, Задание.ДатаНачалаПоследнегоЗапуска, Задание.ДатаЗавершенияПоследнегоЗапуска);
Задание.НомерПопытки = 0;
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеАктивно;
КонецЕсли;
Задание.ИсполняющееФоновоеЗадание = Неопределено;
РаботаВМоделиСервиса.ЗаписатьВспомогательныеДанные(Задание);
КонецЕсли;
КонецЕсли;
@@ -1817,4 +1830,146 @@
КонецПроцедуры
Процедура ЗапланироватьНеАктивныеЗадания() Экспорт
Запрос = Новый Запрос;
СправочникиЗаданий = ОчередьЗаданийСлужебныйПовтИсп.ПолучитьСправочникиЗаданий();
ТекстЗапроса = "";
Для Каждого СправочникЗаданий Из СправочникиЗаданий Цикл
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ОБЪЕДИНИТЬ ВСЕ
|"
КонецЕсли;
Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫБРАТЬ
| Очередь.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
| Очередь.Ссылка КАК Идентификатор,
| ЕСТЬNULL(Очередь.Шаблон, НЕОПРЕДЕЛЕНО) КАК Шаблон,
| ЕСТЬNULL(ЧасовыеПояса.Значение, """") КАК ЧасовойПояс,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.Расписание
| ИНАЧЕ Очередь.Шаблон.Расписание
| КОНЕЦ КАК Расписание,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.КоличествоПовторовПриАварийномЗавершении
| ИНАЧЕ Очередь.Шаблон.КоличествоПовторовПриАварийномЗавершении
| КОНЕЦ КАК КоличествоПовторовПриАварийномЗавершении,
| ВЫБОР
| КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка)
| ТОГДА Очередь.ИнтервалПовтораПриАварийномЗавершении
| ИНАЧЕ Очередь.Шаблон.ИнтервалПовтораПриАварийномЗавершении
| КОНЕЦ КАК ИнтервалПовтораПриАварийномЗавершении
|ИЗ
| %1 КАК Очередь
| ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса
| ПО Очередь.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные
|ГДЕ
| Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеАктивно)
| И Очередь.Использование"
, СправочникЗаданий.ПустаяСсылка().Метаданные().ПолноеИмя());
Иначе
ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫБРАТЬ
| -1 КАК ОбластьДанных,
| Очередь.Ссылка КАК Идентификатор,
| НЕОПРЕДЕЛЕНО КАК Шаблон,
| """" КАК ЧасовойПояс,
| Очередь.Расписание КАК Расписание,
| Очередь.КоличествоПовторовПриАварийномЗавершении КАК КоличествоПовторовПриАварийномЗавершении,
| Очередь.ИнтервалПовтораПриАварийномЗавершении КАК ИнтервалПовтораПриАварийномЗавершении
|ИЗ
| %1 КАК Очередь
|ГДЕ
| Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеАктивно)
| И Очередь.Использование"
, СправочникЗаданий.ПустаяСсылка().Метаданные().ПолноеИмя());
КонецЕсли;
КонецЦикла;
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.ЧасовойПояс) Тогда
ЧасовойПояс = Выборка.ЧасовойПояс;
Иначе
ЧасовойПояс = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.Шаблон) Тогда
ИмяМетода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Шаблон, "ИмяМетода");
Иначе
ИмяМетода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Выборка.Идентификатор, "ИмяМетода");
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(Выборка.Идентификатор.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Идентификатор);
Блокировка.Заблокировать();
Задание = Выборка.Идентификатор.ПолучитьОбъект();
Расписание = Выборка.Расписание.Получить();
// Если это задания периодические (не одноразовые)
Если (Расписание <> Неопределено И (Расписание.ПериодПовтораДней <> 0 Или Расписание.ПериодПовтораВТечениеДня <> 0)) Тогда
Задание.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания(
Расписание, ЧасовойПояс, Задание.ДатаНачалаПоследнегоЗапуска, Задание.ДатаЗавершенияПоследнегоЗапуска);
Задание.НомерПопытки = 0;
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеАктивно;
КонецЕсли;
Задание.ИсполняющееФоновоеЗадание = Неопределено;
Задание.ОбменДанными.Загрузка = Истина;
Задание.Записать();
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Задание не удалось обновить
|ОбластьДанных: %1
|Имя метода: %2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Строка(Выборка.ОбластьДанных), ИмяМетода);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Обновление очереди заданий'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
@@ -518,7 +518,9 @@
Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты);
КонецЕсли;
Если ТипЗнч(Соединение) <> Тип("ИнтернетПочта") Тогда
СоздаватьСоединение = ТипЗнч(Соединение) <> Тип("ИнтернетПочта");
Если СоздаватьСоединение Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись);
Соединение = Новый ИнтернетПочта;
Соединение.Подключиться(Профиль);
@@ -527,13 +529,17 @@
ОшибочныеПолучатели = Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения,
?(ПротоколПочты = "IMAP", ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.SMTP));
Если СоздаватьСоединение Тогда
Соединение.Отключиться();
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения);
ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели);
КонецПроцедуры
Функция ЗагрузитьСообщения(Знач УчетнаяЗапись,
Знач ПараметрыЗагрузки = Неопределено) Экспорт
Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт
// Используется для проверки возможности входа на почтовый ящик.
Перем РежимТестирования;
@@ -559,7 +565,9 @@
ПолучениеЗаголовков = Ложь;
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина);
УстановитьОтключениеБезопасногоРежима(Ложь);
Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда
ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы;
@@ -569,13 +577,13 @@
НаборСообщенийДляУдаления = Новый Массив;
Соединение = Новый ИнтернетПочта;
Протокол = ПротоколИнтернетПочты.POP3;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда
Протокол = ПротоколИнтернетПочты.IMAP;
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
Соединение = Новый ИнтернетПочта;
Соединение.Подключиться(Профиль, Протокол);
Если ПолучениеЗаголовков Тогда
@@ -612,6 +620,7 @@
КонецЕсли;
Соединение.Отключиться();
УстановитьОтключениеБезопасногоРежима(Ложь);
Если РежимТестирования Тогда
Возврат Истина;
@@ -877,6 +886,7 @@
Процедура ПроверитьВозможностьПодключенияКПочтовомуСерверу(Знач УчетнаяЗапись, ВходящаяПочта)
УстановитьОтключениеБезопасногоРежима(Истина);
Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ВходящаяПочта);
Соединение = Новый ИнтернетПочта;
@@ -1445,6 +1445,11 @@
Возврат;
КонецЕсли;
ДоступныеТома = ДоступныеТома(ПараметрыПроверки);
Если ДоступныеТома.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета");
МодульРаботаВМоделиСервиса = Неопределено;
@@ -1468,7 +1473,7 @@
Если Не ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Тогда
Продолжить;
КонецЕсли;
ПоискСсылокНаНесуществующиеФайлыВТоме(ОбъектМетаданных, ПараметрыПроверки);
ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома);
КонецЦикла;
КонецЦикла;
@@ -7897,7 +7902,10 @@
КонецФункции
Процедура ПоискСсылокНаНесуществующиеФайлыВТоме(ОбъектМетаданных, ПараметрыПроверки)
////////////////////////////////////////////////////////////////////////////////
// Контроль ведения учета.
Процедура ПоискСсылокНаНесуществующиеФайлыВТомах(ОбъектМетаданных, ПараметрыПроверки, ДоступныеТома)
МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета");
@@ -7919,6 +7927,7 @@
|ГДЕ
| ОбъектМетаданных.Ссылка > &Ссылка
| И ОбъектМетаданных.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)
| И ОбъектМетаданных.Том В(&ДоступныеТома)
|
|УПОРЯДОЧИТЬ ПО
| ОбъектМетаданных.Ссылка";
@@ -7932,7 +7941,8 @@
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Ссылка", "");
Запрос.УстановитьПараметр("Ссылка", Справочники.ТомаХраненияФайлов.ПустаяСсылка());
Запрос.УстановитьПараметр("ДоступныеТома", ДоступныеТома);
Результат = Запрос.Выполнить().Выгрузить();
@@ -8003,4 +8013,84 @@
КонецФункции
Функция ДоступныеТома(ПараметрыПроверки)
ДоступныеТома = Новый Массив;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТомаХраненияФайлов.Ссылка КАК СсылкаНаТом,
| ТомаХраненияФайлов.Наименование КАК ПредставлениеТома,
| ВЫБОР
| КОГДА &ЭтоLinuxСервер
| ТОГДА ТомаХраненияФайлов.ПолныйПутьLinux
| ИНАЧЕ ТомаХраненияФайлов.ПолныйПутьWindows
| КОНЕЦ КАК ПолныйПуть
|ИЗ
| Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов");
Запрос.УстановитьПараметр("ЭтоLinuxСервер", ОбщегоНазначения.ЭтоLinuxСервер());
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если Не ТомДоступен(Результат.СсылкаНаТом, Результат.ПредставлениеТома, Результат.ПолныйПуть, ПараметрыПроверки) Тогда
Продолжить;
КонецЕсли;
ДоступныеТома.Добавить(Результат.СсылкаНаТом);
КонецЦикла;
Возврат ДоступныеТома;
КонецФункции
Функция ТомДоступен(Том, ПредставлениеТома, Путь, ПараметрыПроверки)
Если ПустаяСтрока(Путь) Тогда
УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У тома хранения файлов ""%1"" не задан путь к сетевому каталогу. Сохранение файлов в него невозможно.'"),
ПредставлениеТома);
ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки);
Возврат Ложь;
КонецЕсли;
ИмяКаталогаТестовое = Путь + "ПроверкаДоступа" + ПолучитьРазделительПути();
Попытка
СоздатьКаталог(ИмяКаталогаТестовое);
УдалитьФайлы(ИмяКаталогаТестовое);
Исключение
УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Том хранения файлов ""%1"" недоступен по причине:
|%2
|
|Указанный сетевой каталог мог быть отключен или к нему отсутствуют права доступа.
|Невозможна работа со всеми файлами, хранящимися в этом томе.'"),
Путь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
УточнениеПроблемы = УточнениеПроблемы + Символы.ПС;
ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки);
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Процедура ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки)
МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета");
Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(Том, ПараметрыПроверки);
Проблема.УточнениеПроблемы = УточнениеПроблемы;
МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки);
КонецПроцедуры
#КонецОбласти
@@ -111,13 +111,9 @@
УстановитьПривилегированныйРежим(Истина);
ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере);
ТекущиеПараметры.Вставить("ДоступенСервисСклонения", Доступность);
ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
// Склоняет переданную фразу.
@@ -278,12 +274,8 @@
Если Не ЭтоФИО И ИспользоватьСервисСклонения Тогда
СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения);
Если СтруктураСклонения <> Неопределено Тогда
УстановитьДоступностьСервисаСклонения(Истина);
Возврат СтруктураСклонения;
Иначе
УстановитьДоступностьСервисаСклонения(Ложь);
КонецЕсли;
КонецЕсли;
@@ -409,15 +401,9 @@
КонецЕсли;
СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, Ложь);
Если СтруктураСклонения = Неопределено Тогда
УстановитьДоступностьСервисаСклонения(Ложь);
Возврат Представление;
КонецЕсли;
УстановитьДоступностьСервисаСклонения(Истина);
// Запись в регистр СклоненияПредставленийОбъектов успешного склонения.
Если ЗначениеЗаполнено(Объект) Тогда
@@ -470,8 +456,10 @@
Ответ = ВыполнитьЗапросСервисуСклонений(Соединение, Запрос);
Исключение
ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке(), ПоказыватьСообщения);
УстановитьДоступностьСервисаСклонения(Ложь);
Возврат Неопределено;
КонецПопытки;
УстановитьДоступностьСервисаСклонения(Истина);
УстановитьОтключениеБезопасногоРежима(Ложь);
СтруктураОтвета = СтруктураОтветаСервисаСклонений(Ответ);
@@ -1409,16 +1409,16 @@
| ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки,
| 0 КАК ИдентификаторСтрокиТабличнойЧасти,
| ВЫРАЗИТЬ("""" КАК СТРОКА(200)) КАК ИмяРеквизита,
| ВидыКонтактнойИнформации.ПометкаУдаления КАК ПометкаУдаления,
| ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий
|ИЗ
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|ЛЕВОЕ СОЕДИНЕНИЕ
| КонтактнаяИнформация КАК КонтактнаяИнформация
|ПО
|ПО
| ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид
|ГДЕ
| НЕ ВидыКонтактнойИнформации.ПометкаУдаления
| И ВидыКонтактнойИнформации.Используется
| ВидыКонтактнойИнформации.Используется
| И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА)
| И (
| ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
@@ -1469,6 +1469,10 @@
Продолжить;
КонецЕсли;
Если СтрокаКИ.ПометкаУдаления И ПустаяСтрока(СтрокаКИ.ЗначенияПолей) Тогда
Продолжить;
КонецЕсли;
ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид);
СтатическийЭлемент = ИндексЭлемента <> Неопределено;
ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид);
@@ -1688,10 +1692,10 @@
Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита];
Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита;
Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) Тогда
Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле);
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле);
ТекущийУровеньОшибок = 2;
Иначе
@@ -1713,24 +1717,26 @@
Иначе
ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита);
Если ЭлементФормы = Неопределено Тогда
Если ЭлементФормы = Неопределено Или ВидИнформации.ПометкаУдаления Тогда
Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация.
КонецЕсли;
Представление = Форма[ИмяРеквизита];
Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление)
И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда
Если ВидИнформации <> ПредыдущийВид
И ОбязательноеЗаполнение
И ПустаяСтрока(Представление)
И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда
// И нет других строк с данными для видов КИ с множественными значениями.
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита);
ТекущийУровеньОшибок = 2;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита);
ТекущийУровеньОшибок = 2;
Иначе
ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.ЗначенияПолей,
ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий);
ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий);
КонецЕсли;
@@ -1762,7 +1768,7 @@
МетаданныеОбъекта = Объект.Ссылка.Метаданные();
ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя;
ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя();
ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя();
ГруппаВидовКонтактнойИнформации = ГруппаВидовКонтактнойИнформацииОбъекта(ПолноеИмяОбъектаМетаданных);
ИменаТабличныхЧастейПоВидамКИ = Неопределено;
@@ -3551,7 +3557,7 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяРеквизита, 2, Ложь);
// Устанавливаем свойства поля ввода.
Если ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Если ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
// Ввод комментария через контекстное меню.
ИмяКоманды = "КонтекстноеМеню" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
@@ -3567,7 +3573,7 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
КонецЕсли;
Если ИнформацияОВидеКИ.ХранитьИсториюИзменений Тогда
Если ИнформацияОВидеКИ.ХранитьИсториюИзменений И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
// Вывод истории контактной информации через контекстное меню.
ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
@@ -3614,11 +3620,13 @@
ГруппКнопокРазделитель = Форма.Элементы.Добавить("ПодменюРазделительКарты" + ИмяРеквизита, Тип("ГруппаФормы"), Элемент.КонтекстноеМеню);
ГруппКнопокРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
// Заполнить
ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель);
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
Если Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
// Заполнить
ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель);
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
КонецЕсли;
КонецЕсли;
@@ -3627,10 +3635,10 @@
КонецЕсли;
// Редактирование в диалоге
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип)
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип)
И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Элемент.КнопкаВыбора = Истина;
Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления;
Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
Элемент.РедактированиеТекста = Ложь;
Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет;
@@ -3640,6 +3648,18 @@
КонецЕсли;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
Если ИнформацияОВидеКИ.ПометкаУдаления Тогда
Элемент.ШрифтЗаголовка = Новый Шрифт(,,,,, Истина);
Если Не ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
Элемент.КнопкаОчистки = Истина;
Элемент.РедактированиеТекста = Ложь;
Иначе
Элемент.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЕсли;
Возврат Элемент;
КонецФункции
@@ -3853,7 +3873,7 @@
ДанныеВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид];
ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид);
Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти Тогда
Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Наименование);
КонецЕсли;
@@ -4016,7 +4036,7 @@
ВидыКонтактнойИнформацииТЧ = Новый Массив;
Для Каждого СтрокаТабличнойЧасти Из СтрокаКонтактнойИнформации.Строки Цикл
ВидыКонтактнойИнформацииТЧ.Добавить(СтрокаТабличнойЧасти.Вид);
КонецЦикла;
КонецЦикла;
ДанныеВидовКонтактнойИнформацииТЧ = УправлениеКонтактнойИнформациейСлужебный.ДанныеВидовКонтактнойИнформации(
ВидыКонтактнойИнформацииТЧ);
@@ -4037,7 +4057,7 @@
Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита;
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда
Элемент.КнопкаВыбора = Истина;
Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления;
Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда
Элемент.РедактированиеТекста = Ложь;
КонецЕсли;
@@ -4046,8 +4066,13 @@
КонецЕсли;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
Если СтрокаТабличнойЧасти.ПометкаУдаления Тогда
Элемент.Шрифт = Новый Шрифт(,,,,, Истина);
Элемент.РедактированиеТекста = Ложь;
КонецЕсли;
Если ВидКонтактнойИнформацииТЧ.ОбязательноеЗаполнение Тогда
Элемент.АвтоОтметкаНезаполненного = Истина;
Элемент.АвтоОтметкаНезаполненного = Не СтрокаТабличнойЧасти.ПометкаУдаления;
КонецЕсли;
Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита,
@@ -4643,6 +4668,7 @@
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
// Ввод комментария через контекстное меню.
ИмяКоманды = "КонтекстноеМенюПодменю" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю);
@@ -4656,9 +4682,10 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
КонецЕсли;
// История изменений
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
ИмяКоманды = "КонтекстноеМенюПодменюИстория" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодменю);
@@ -4702,13 +4729,17 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
ГруппаРазделитель = Форма.Элементы.Добавить("ПодменюРазделитель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
ГруппаРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
ГруппаПодменюАдреса = Форма.Элементы.Добавить("ПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
ГруппаРазделитель = Форма.Элементы.Добавить("ПодменюРазделитель" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
ГруппаРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
ГруппаПодменюАдреса = Форма.Элементы.Добавить("ПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппаРазделитель);
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
КонецЕсли;
ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
@@ -63,7 +63,7 @@
ПараметрыОткрытияФормы.Вставить("ВидКонтактнойИнформации", ДанныеСтроки.Вид);
ПараметрыОткрытияФормы.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей);
ПараметрыОткрытияФормы.Вставить("Представление", ТекстРедактирования);
ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр);
ПараметрыОткрытияФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр);
ПараметрыОткрытияФормы.Вставить("ТипПомещения", ПараметрыКонтактнойИнформации.ПараметрыАдреса.ТипПомещения);
ПараметрыОткрытияФормы.Вставить("Страна", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Страна);
ПараметрыОткрытияФормы.Вставить("Индекс", ПараметрыКонтактнойИнформации.ПараметрыАдреса.Индекс);
@@ -1296,7 +1296,7 @@
Функция ДанныеВидовКонтактнойИнформации(Знач ВидыКонтактнойИнформации) Экспорт
МетаданныеРеквизитов = Метаданные.Справочники.ВидыКонтактнойИнформации.Реквизиты;
Реквизиты = "Наименование, ИмяПредопределенныхДанных";
Реквизиты = "Наименование, ИмяПредопределенныхДанных, ПометкаУдаления";
Для Каждого МетаданныеРеквизита Из МетаданныеРеквизитов Цикл
Реквизиты = Реквизиты + "," + МетаданныеРеквизита.Имя;
КонецЦикла;
+9 -9
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="35709757-3655-468e-a03a-420dd21928a9">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="236c7c81-784e-42cd-a959-5a6a9352cef1">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 2.4</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="e2ccf507-dafe-4601-a8f9-7e47a297f3f0"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="a435d3b9-729f-48ee-a864-ab4297fd9377"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="19461ada-30af-4fbf-98f7-53bc65622373"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="ed1bd08c-173e-4e0c-bf51-f196476cc0d2"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="bfc4cee5-c9dd-4f38-9d24-71e1798d67f5"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="ee62e349-0512-4776-9031-78966ec4955a"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="d8512fc9-88f7-4cac-a8ba-14645de9f922"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="52656da1-07d5-4859-84b8-e37dc9db3e22"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f08da7bb-aa99-4f49-bc50-04bc605d5277"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="8454ebab-86f8-413b-ac2a-ae58cc3e2fae"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="e639cfd6-02d2-4f12-960c-9fe4e3d88736"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="75a97959-9271-4fca-a76c-21f81f03585b"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="d7968f25-7a7b-4b32-949d-88e7e136ebd0"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="894a8fb4-f462-4e0a-8476-3ce8f88a26c4"/>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>2.4.6.97</version>
<version>2.4.6.117</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1 +1 @@
{6,1,1,21ab78ce-4595-4055-9e1b-fc28a338d63f,1,4478f36b-9d5a-4e7b-8b24-061723d0e2f0,"2.4.6.97","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5576,1,0,35709757-3655-468e-a03a-420dd21928a9,35709757-3655-468e-a03a-420dd21928a9,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-Line truncated
{6,1,1,b4c1e8c7-a731-42f3-bb3d-818b687ff04e,1,c9a77dc8-373b-4430-89bc-5ccb8a7139ee,"2.4.6.117","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5576,1,0,236c7c81-784e-42cd-a959-5a6a9352cef1,236c7c81-784e-42cd-a959-5a6a9352cef1,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82Line truncated
@@ -808,12 +808,14 @@
КонецЕсли;
КонецЕсли;
Страна = "РФ";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
Страна = МодульРаботаСАдресами.ОсновнаяСтрана();
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Страна = "РФ";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
Страна = МодульРаботаСАдресами.ОсновнаяСтрана();
КонецЕсли;
ОбновитьЗначениеРеквизита(КлассификаторБанковОбъект, "Страна", Страна);
КонецЕсли;
ОбновитьЗначениеРеквизита(КлассификаторБанковОбъект, "Страна", Страна);
Если КлассификаторБанковОбъект.Модифицированность() Тогда
ФлагОбновленный = Истина;
@@ -4781,49 +4781,7 @@
Результат = Контекст.РезультатПослеВызоваПолучитьОткрытыйКлюч;
Контекст.Вставить("ТекущаяОткрытаяЧастьКлючаЭП", Результат);
Криптография.НачатьВызовВычислитьИдентификаторКлючаСубъекта(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъекта", ЭтотОбъект, Контекст,
"СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта", ЭтотОбъект),
Контекст.ИмяФайлаЗапроса);
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
Криптография = Неопределено;
СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке,
НСтр("ru = 'Не удалось вычислить идентификатор ключа субъекта по причине:'"));
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъекта(Результат, ПараметрыВызова, Контекст) Экспорт
Контекст.Вставить("РезультатПослеВызоваВычислитьИдентификаторКлючаСубъекта", Результат);
Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъектаПослеПолученияСписокОшибок", ЭтотОбъект, Контекст));
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъектаПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт
Если ЗначениеЗаполнено(СписокОшибок) Тогда
СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта(СписокОшибок, Ложь, Контекст);
Возврат;
КонецЕсли;
Результат = Контекст.РезультатПослеВызоваВычислитьИдентификаторКлючаСубъекта;
Контекст.Вставить("ТекущийИКС", Результат);
Контекст.Вставить("ТекущийИКС", ИдентификаторКлючаСубъектаHexСтрокой(Результат));
НачатьПомещениеФайлов(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст,
@@ -4832,6 +4790,17 @@
КонецПроцедуры
// Для продолжения процедуры СоздатьКлючИЗапросНаСертификат.
&НаСервереБезКонтекста
Функция ИдентификаторКлючаСубъектаHexСтрокой(ОткрытаяЧастьКлючаHexСтрокой)
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1);
ХешированиеДанных.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки(ОткрытаяЧастьКлючаHexСтрокой));
Возврат ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма);
КонецФункции
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиПомещенияФайлов(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
@@ -16348,12 +16348,6 @@
ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения();
Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения");
СведенияОВерсииОбъекта = Новый Структура;
СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина);
СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем");
СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных);
Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта);
// Выполняем попытку проведения документа.
Объект.Записать(РежимЗаписиДокумента.Проведение);
@@ -16433,12 +16427,6 @@
ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения();
Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения");
СведенияОВерсииОбъекта = Новый Структура;
СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина);
СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем");
СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных);
Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта);
// Выполняем попытку записи объекта.
Объект.Записать();
@@ -23,10 +23,11 @@
// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры.
//
Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ,
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
РегистрироватьДанныеДляВыгрузки = Истина,
ИспользоватьНастройкиТранспорта = Истина) Экспорт
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
РегистрироватьДанныеДляВыгрузки = Истина,
ИспользоватьНастройкиТранспорта = Истина,
СообщениеОбОшибке = "") Экспорт
КодЭтогоУзла = ?(ИспользоватьПрефиксыДляНастройкиОбмена,
ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника),
@@ -39,7 +40,12 @@
КодНовогоУзла = ИдентификаторИнформационнойБазыПриемника;
КонецЕсли;
ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки, ИспользоватьНастройкиТранспорта);
СтатусЗавершения = Неопределено;
ВыполнитьДействияПоНастройкеОбменаДанными(СтатусЗавершения,
НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки, ИспользоватьНастройкиТранспорта);
Отказ = СтатусЗавершения.Отказ;
СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке;
КонецПроцедуры
@@ -540,7 +546,8 @@
// Выполняет действия при создании нового обмена данными через веб-сервис.
// Подробное описание см. в процедуре ВыполнитьДействияПоНастройкеНовогоОбменаДанными.
//
Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) Экспорт
Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ,
НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, СообщениеОбОшибке = "") Экспорт
НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле);
ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле);
@@ -553,7 +560,9 @@
Попытка
ПланыОбмена[ИмяПланаОбмена].ПриПолученииДанныхОтправителя(НастройкаОтборовНаУзле, Ложь);
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Инфо = ИнформацияОбОшибке();
СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо);
СообщитьИнформациюОбОшибке(Инфо, Отказ);
Возврат;
КонецПопытки;
КонецЕсли;
@@ -563,23 +572,8 @@
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
Ложь,
Ложь);
Если Отказ Тогда
УдалитьНастройкуОбменаДанными();
КонецЕсли;
КонецПроцедуры
Процедура УдалитьНастройкуОбменаДанными()
УстановитьПривилегированныйРежим(Истина);
МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена];
УдаляемыйУзел = МенеджерПланаОбмена.НайтиПоКоду(КодНовогоУзлаВторойБазы);
Если Не УдаляемыйУзел.Пустая() Тогда
УдаляемыйУзелОбъект = УдаляемыйУзел.ПолучитьОбъект();
УдаляемыйУзелОбъект.Удалить();
КонецЕсли;
Ложь,
СообщениеОбОшибке);
КонецПроцедуры
@@ -779,13 +773,17 @@
// Вспомогательные служебные процедуры и функции.
Процедура ВыполнитьДействияПоНастройкеОбменаДанными(
Отказ,
СтатусЗавершения,
НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле,
КодЭтогоУзла,
КодНовогоУзла,
РегистрироватьДанныеДляВыгрузки = Истина,
ИспользоватьНастройкиТранспорта = Истина)
СтатусЗавершения = Новый Структура;
СтатусЗавершения.Вставить("Отказ", Ложь);
СтатусЗавершения.Вставить("СообщениеОбОшибке", "");
УстановитьПривилегированныйРежим(Истина);
@@ -825,7 +823,10 @@
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Инфо = ИнформацияОбОшибке();
СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо);
СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ);
Возврат;
КонецПопытки;
@@ -838,12 +839,14 @@
И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда
// Выполняем регистрацию изменений на узле плана обмена.
ЗарегистрироватьИзмененияДляОбмена(Отказ);
ЗарегистрироватьИзмененияДляОбмена(СтатусЗавершения.Отказ);
КонецЕсли;
Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Инфо = ИнформацияОбОшибке();
СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо);
СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ);
Возврат;
КонецПопытки;
@@ -894,8 +897,15 @@
НовыйУзел = МенеджерПланаОбмена.СоздатьУзел();
НовыйУзел.Код = КодНовогоУзла;
Иначе
ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально.
|В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'");
Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Значение префикса программы ""%1"" не уникально (""%2""). Уже существует настройка синхронизации с таким же префиксом.
|Для продолжения необходимо назначить в программе ""%1"" уникальный префикс информационной базы, отличный от текущего.'"),
НаименованиеВторойБазы, КодНовогоУзлаВторойБазы);
Иначе
ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально.
|В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'");
КонецЕсли;
КонецЕсли;
НовыйУзел.Наименование = НаименованиеВторойБазы;
@@ -5027,7 +5027,6 @@
<name>ОчиститьАдрес</name>
</handler>
</action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
@@ -1008,6 +1008,7 @@
Процедура ОчиститьАдрес(Команда)
ОчиститьАдресКлиент();
Модифицированность = Истина;
КонецПроцедуры
@@ -2699,9 +2700,11 @@
Если КоличествоОшибок = 1 Тогда
МестоОшибки = СписокОшибок[0].Значение;
Если СписокОшибок[0].Пометка = Ложь И НЕ ЭтоВебСервис Тогда
ТекстВопроса = НСтр("ru = 'Адрес не может быть проверен.'") + Символы.ПС + СписокОшибок[0].Представление + Символы.ПС + НСтр("ru = 'Загрузить классификатор для проверки адреса?'");
ПредложениеЗагрузкиКлассификатора(ТекстВопроса);
Возврат;
ИначеЕсли ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда
// Одна ошибка на весь адрес, не привязанная к полю.
ПоказатьПредупреждение(, СписокОшибок[0].Представление);
@@ -1699,7 +1699,11 @@
Если XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда
АдресРФ = XDTOАдрес;
Иначе
АдресРФ = XDTOАдрес.Состав;
Если XDTOАдрес.Свойства().Получить("Состав") <> Неопределено Тогда
АдресРФ = XDTOАдрес.Состав;
Иначе
АдресРФ = XDTOАдрес;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда
@@ -2787,14 +2791,33 @@
// Только уникальные ошибки - мы могли проверить адрес два раза.
Обработанные = Новый Соответствие;
Для Каждого РезультатПроверки Из РезультатыАнализа.Данные Цикл
Для Каждого ОшибкаАдреса Из РезультатПроверки.Ошибки Цикл
Ключ = ОшибкаАдреса.Ключ;
Если Обработанные[Ключ] = Неопределено Тогда
Результат.Добавить(Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", Ключ,, РезультатПроверки.АдресПроверен),
СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка));
Обработанные[Ключ] = Истина;
КонецЕсли;
КонецЦикла;
Если РезультатПроверки.Свойство("Исторический") И РезультатПроверки.Исторический Тогда
Если РезультатПроверки.Варианты.Количество() > 0 Тогда
ПредставлениеАдреса = ПредставлениеАдреса(Новый Структура("ФорматАдреса", "ФИАС"), РезультатПроверки.Варианты[0].Данные, "Россия");
ОписаниеОшибки = Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", "Представление", "", РезультатПроверки.АдресПроверен);
ШаблонОшибки = НСтр("ru='Адрес некорректный, т.к. он устарел
|Актуальный: %1'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеАдреса);
Результат.Добавить(ОписаниеОшибки, ТекстОшибки);
КонецЕсли;
Продолжить;
КонецЕсли;
Для Каждого ОшибкаАдреса Из РезультатПроверки.Ошибки Цикл
Ключ = ОшибкаАдреса.Ключ;
Если Обработанные[Ключ] = Неопределено Тогда
Результат.Добавить(Новый Структура("ПутьXPath, СущностьПоля, АдресПроверен", Ключ,, РезультатПроверки.АдресПроверен),
СокрЛП(ОшибкаАдреса.Текст + Символы.ПС + ОшибкаАдреса.Подсказка));
Обработанные[Ключ] = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
@@ -26,6 +26,10 @@ var taskNameScheduleService = [ИмяЗадачиПланировщикаЗад
#КонецОбласти
#Область ОбластьОбновленияКонфигурации
if (useComConnector) {
var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов
}
// Инициализация
var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject");
@@ -8,12 +8,10 @@
Возврат;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Если ЗащитаПерсональныхДанных.ИспользоватьСкрытиеПерсональныхДанныхСубъектов() Тогда
Регистратор = Отбор.Регистратор.Значение;
Субъект = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Регистратор, "Субъект");
ЗащитаПерсональныхДанных.РассчитатьДатуСкрытияПерсональныхДанныхСубъекта(Субъект);
ЗащитаПерсональныхДанных.РассчитатьДатуСкрытияПерсональныхДанныхПоОснованиям(Регистратор);
КонецЕсли;
@@ -61,6 +61,11 @@
|{ГДЕ
| (Дата МЕЖДУ &НачалоПериода И &КонецПериода)}";
КонецЕсли;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений"
И МетаданныеИсточника.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
ОтборИсточника = "
|{ГДЕ
| (Период МЕЖДУ &НачалоПериода И &КонецПериода)}";
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления"
Или ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда
ОтборИсточника = "
@@ -172,11 +177,7 @@
КонецЕсли;
Если ПустаяСтрока(ИмяОбъектаМетаданных) Тогда
Если ЗначениеЗаполнено(ПараметрИсточникДанных.Значение) Тогда
ИмяОбъектаМетаданных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрИсточникДанных.Значение, "Имя");
Иначе
ИмяОбъектаМетаданных = ПараметрИмяОбъектаМетаданных.Значение;
КонецЕсли;
ИмяОбъектаМетаданных = ПараметрИмяОбъектаМетаданных.Значение;
КонецЕсли;
Если (НЕ ЗначениеЗаполнено(ТипОбъектаМетаданных)
@@ -798,63 +799,156 @@
Функция ПараметрыОтчета(Настройки, ПользовательскиеНастройки) Экспорт
ПараметрыОтчета = Новый Структура(
"ОчиститьСтруктуру, Период, ИсточникДанных, ТипОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы", Ложь);
"Период, ИсточникДанных, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы");
ПараметрыОтчета.Вставить("ОчиститьСтруктуру", Ложь);
Если Настройки.ДополнительныеСвойства.Свойство("ОтчетИнициализирован")
И ТипЗнч(ПользовательскиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
Для Каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(Элемент) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ИмяПараметра = Строка(Элемент.Параметр);
Если ПараметрыОтчета.Свойство(ИмяПараметра) Тогда
ПараметрыОтчета[ИмяПараметра] = Элемент.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПолучитьПараметрыИзПользовательскихНастроек(ПараметрыОтчета, ПользовательскиеНастройки);
ПолучитьПараметрыИзНастроек(ПараметрыОтчета, Настройки);
// Если в настройках варианта хранится параметр с неактуальным именем - выполнится его актуализация.
ПараметрыОтчета.Удалить("ПолноеИмяОбъектаМетаданных");
ПараметрыДанных = Настройки.ПараметрыДанных.Элементы;
Для Каждого Параметр Из ПараметрыОтчета Цикл
Если ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
НайденныйПараметр = ПараметрыДанных.Найти(Параметр.Ключ);
Если НайденныйПараметр <> Неопределено Тогда
ПараметрыОтчета[Параметр.Ключ] = НайденныйПараметр.Значение;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ПараметрыОтчета.ИсточникДанных) Тогда
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ПараметрыОтчета.ИсточникДанных);
ПараметрыОтчета.ТипОбъектаМетаданных = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных);
ПараметрыОтчета.ИмяОбъектаМетаданных = ОбъектМетаданных.Имя;
НеактуальныйПараметр = ПараметрыДанных.Найти("ПолноеИмяОбъектаМетаданных");
Если НеактуальныйПараметр <> Неопределено Тогда
ПараметрыДанных.Удалить(НеактуальныйПараметр);
КонецЕсли;
ПараметрыОтчета.ОчиститьСтруктуру = (ПараметрыОтчета.ИмяТаблицы <> ПараметрыДанных.Найти("ИмяТаблицы").Значение);
ПривестиКИсточникуДанных(ПараметрыОтчета, Настройки);
// Заполнение значениями по умолчанию.
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ТипОбъектаМетаданных) Тогда
ПараметрыОтчета.ТипОбъектаМетаданных = ТипОбъектаМетаданныхПоУмолчанию();
ПараметрыОтчета.ОчиститьСтруктуру = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИмяОбъектаМетаданных) Тогда
ПараметрыОтчета.ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПоУмолчанию(
Настройки, ПараметрыОтчета.ТипОбъектаМетаданных);
ПараметрыОтчета.ОчиститьСтруктуру = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИмяТаблицы) Тогда
Если ПараметрыОтчета.ОчиститьСтруктуру Тогда
ПривестиКИсточникуДанных(ПараметрыОтчета, Настройки);
КонецЕсли;
ДоступныеТаблицы = ДоступныеТаблицы(
Настройки, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
Если ПараметрыОтчета.ИмяТаблицы = Неопределено
Или ДоступныеТаблицы.НайтиПоЗначению(ПараметрыОтчета.ИмяТаблицы) = Неопределено Тогда
ПараметрыОтчета.ИмяТаблицы = ИмяТаблицыПоУмолчанию(
Настройки, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИсточникДанных) Тогда
ПараметрыОтчета.ИсточникДанных = ИсточникДанных(ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
ПараметрыОтчета.ОчиститьСтруктуру = Истина;
КонецЕсли;
Возврат ПараметрыОтчета;
КонецФункции
// Получает параметры, влияющие на построение запроса набора данных СКД из пользовательских настроек.
//
// Параметры:
// Параметры - Структура - см. ПараметрыОтчета()
// Настройки - ПользовательскиеНастройкиКомпоновкиДанных - текущие пользовательские настройки компоновки данных.
//
Процедура ПолучитьПараметрыИзПользовательскихНастроек(Параметры, Настройки)
Если ТипЗнч(Настройки) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных")
Или Настройки.Элементы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого ЭлементНастройки Из Настройки.Элементы Цикл
Если ТипЗнч(ЭлементНастройки) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ИмяПараметра = Строка(ЭлементНастройки.Параметр);
Если Параметры.Свойство(ИмяПараметра)
И Параметры[ИмяПараметра] = Неопределено Тогда
Параметры[ИмяПараметра] = ЭлементНастройки.Значение;
КонецЕсли;
КонецЦикла;
// Если в настройках варианта хранится параметр с неактуальным именем - выполнится его актуализация.
Если ЗначениеЗаполнено(Параметры.ПолноеИмяОбъектаМетаданных)
И Не ЗначениеЗаполнено(Параметры.ИмяОбъектаМетаданных) Тогда
Параметры.ИмяОбъектаМетаданных = Параметры.ПолноеИмяОбъектаМетаданных;
КонецЕсли;
КонецПроцедуры
// Получает параметры, влияющие на построение запроса набора данных СКД из настроек.
//
// Параметры:
// Параметры - Структура - см. ПараметрыОтчета()
// Настройки - НастройкиКомпоновкиДанных - текущие настройки компоновки данных.
//
Процедура ПолучитьПараметрыИзНастроек(Параметры, Настройки)
ПараметрыДанных = Настройки.ПараметрыДанных.Элементы;
Для Каждого Параметр Из Параметры Цикл
ЭлементНастройки = ПараметрыДанных.Найти(Параметр.Ключ);
Если ЭлементНастройки = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Параметр.Значение = Неопределено Тогда
Параметры[Параметр.Ключ] = ЭлементНастройки.Значение;
ИначеЕсли ЭлементНастройки.Значение <> Параметр.Значение Тогда
ЭлементНастройки.Значение = Параметр.Значение;
Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь);
КонецЕсли;
КонецЦикла;
// Если в настройках варианта хранится параметр с неактуальным именем - выполнится его актуализация.
Если ЗначениеЗаполнено(Параметры.ПолноеИмяОбъектаМетаданных)
И Не ЗначениеЗаполнено(Параметры.ИмяОбъектаМетаданных) Тогда
Параметры.ИмяОбъектаМетаданных = Параметры.ПолноеИмяОбъектаМетаданных;
КонецЕсли;
КонецПроцедуры
// Устанавливает соответствие параметров ТипОбъектаМетаданных, ИмяОбъектаМетаданных
// с параметром ИсточникДанных.
//
// Параметры:
// Параметры - Структура - см. ПараметрыОтчета()
// Настройки - НастройкиКомпоновкиДанных - текущие настройки компоновки данных.
//
Процедура ПривестиКИсточникуДанных(Параметры, Настройки)
Если Не ЗначениеЗаполнено(Параметры.ТипОбъектаМетаданных)
Или Не ЗначениеЗаполнено(Параметры.ИмяОбъектаМетаданных) Тогда
Возврат;
КонецЕсли;
ОбъектМетаданныхСуществует = ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(
Метаданные[Параметры.ТипОбъектаМетаданных], Параметры.ИмяОбъектаМетаданных);
Если ОбъектМетаданныхСуществует Тогда
Параметры.ИсточникДанных = ИсточникДанных(Параметры.ТипОбъектаМетаданных, Параметры.ИмяОбъектаМетаданных);
ИначеЕсли ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Параметры.ИсточникДанных);
Параметры.ТипОбъектаМетаданных = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных);
Параметры.ИмяОбъектаМетаданных = ОбъектМетаданных.Имя;
Параметры.ИмяТаблицы = Неопределено;
Иначе
Параметры.ТипОбъектаМетаданных = Неопределено;
Параметры.ИмяОбъектаМетаданных = Неопределено;
Параметры.ИмяТаблицы = Неопределено;
КонецЕсли;
// Согласование со значением параметра данных.
ПараметрыДанных = Настройки.ПараметрыДанных;
ЭлементНастройки = ПараметрыДанных.Элементы.Найти("ИсточникДанных");
Если ЭлементНастройки = Неопределено Тогда
ЭлементНастройки = ПараметрыДанных.Элементы.Добавить();
ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("ИсточникДанных");
ЭлементНастройки.Значение = Параметры.ИсточникДанных;
ЭлементНастройки.Использование = Истина;
Иначе
ПараметрыДанных.УстановитьЗначениеПараметра("ИсточникДанных", Параметры.ИсточникДанных);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьТиповуюСхему(ПараметрыОтчета, НастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
@@ -535,6 +535,93 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ВыполнятьЗамерыПроизводительности</name>
<right>
@@ -805,93 +892,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name>
<right>
@@ -1113,6 +1113,45 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>Constant.ВыполнятьЗамерыПроизводительности</name>
<right>
@@ -1519,45 +1558,6 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name>
<right>
@@ -125,17 +125,25 @@
ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"));
// Выполняем создание настройки обмена.
СообщениеОбОшибке = "";
ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(
Отказ,
СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO),
СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO));
СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO),
СообщениеОбОшибке);
Если Отказ Тогда
Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'");
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке());
Сообщение = НСтр("ru = 'При сохранении настройки обмена в программе ""%1"" возникла ошибка: %2'");
Если ПустаяСтрока(СообщениеОбОшибке) Тогда
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение,
ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке());
Иначе
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение,
ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, СообщениеОбОшибке);
КонецЕсли;
ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(),
УровеньЖурналаРегистрации.Ошибка, , , Сообщение);
УровеньЖурналаРегистрации.Ошибка, , , ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке());
ВызватьИсключение Сообщение;
КонецЕсли;