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
+2015 -644

No files matched your search

@@ -12,13 +12,19 @@
| Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета | Справочник.ПравилаПроверкиУчета КАК ПравилаПроверкиУчета
|ГДЕ |ГДЕ
| ПравилаПроверкиУчета.Использование | ПравилаПроверкиУчета.Использование
| И ПравилаПроверкиУчета.Идентификатор В(&МассивИдентификаторов)"); | И ПравилаПроверкиУчета.Идентификатор В(&ИдентификаторыПроверок)");
МассивИдентификаторов = Новый Массив; ПроверкиВеденияУчета = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета().Проверки;
МассивИдентификаторов.Добавить("СтандартныеПодсистемы.ПроверкаНезаполненныхОбязательныхРеквизитов"); ПараметрыОтбора = Новый Структура;
МассивИдентификаторов.Добавить("СтандартныеПодсистемы.ПроверкаСсылочнойЦелостности"); ПараметрыОтбора.Вставить("Отключена", Истина);
ОтключенныеПроверки = ПроверкиВеденияУчета.НайтиСтроки(ПараметрыОтбора);
Запрос.УстановитьПараметр("МассивИдентификаторов", МассивИдентификаторов); ИдентификаторыПроверок = Новый Массив;
Для Каждого ОтключеннаяПроверка Из ОтключенныеПроверки Цикл
ИдентификаторыПроверок.Добавить(ОтключеннаяПроверка.Идентификатор);
КонецЦикла;
Запрос.УстановитьПараметр("ИдентификаторыПроверок", ИдентификаторыПроверок);
Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
@@ -9,7 +9,7 @@
КонецЕсли; КонецЕсли;
Если Объект.Предопределенный Тогда Если Объект.Предопределенный Тогда
ТолькоПросмотр = Истина; Элементы.ГруппаНаименование.ТолькоПросмотр = Истина;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -67,7 +67,7 @@
ИмяПоляСПолнымПутем = "ПолныйПутьLinux"; ИмяПоляСПолнымПутем = "ПолныйПутьLinux";
КонецЕсли; КонецЕсли;
ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа\"; ИмяКаталогаТестовое = ПолныйПутьТома + "ПроверкаДоступа" + ПолучитьРазделительПути();
Попытка Попытка
СоздатьКаталог(ИмяКаталогаТестовое); СоздатьКаталог(ИмяКаталогаТестовое);
@@ -3,24 +3,16 @@
&НаКлиенте &НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Количество() = 1 Тогда ПараметрыВопроса = ЗащитаПерсональныхДанныхВызовСервера.ПараметрыВопросаПодтвержденияСкрытия(ПараметрКоманды);
ТекстВопроса = НСтр("ru = 'Персональные данные субъекта «%1» будут скрыты. Субъекты = ПараметрыВопроса.Субъекты;
| Если Субъекты.Количество() > 0 Тогда
|Продолжить?'");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПараметрКоманды[0]);
Иначе Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, Субъекты);
ПоказатьВопрос(Оповещение, ПараметрыВопроса.ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
ТекстВопроса = НСтр("ru = 'Персональные данные субъектов будут скрыты.
|
|Продолжить?'");
КонецЕсли; КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, ПараметрКоманды);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -32,56 +24,12 @@
Если Результат = КодВозвратаДиалога.Да Тогда Если Результат = КодВозвратаДиалога.Да Тогда
СкрытьПерсональныеДанныеСубъектов(Субъекты); ЗащитаПерсональныхДанныхВызовСервера.СкрытьПерсональныеДанныеСубъектов(Субъекты, Истина);
Оповестить("СкрытыПерсональныеДанные"); Оповестить("СкрытыПерсональныеДанные");
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаСервере
Процедура СкрытьПерсональныеДанныеСубъектов(Субъекты)
ОтбираемыеСубъекты = Новый Массив;
НастройкиСубъектов = ЗащитаПерсональныхДанных.ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Если ЗначениеЗаполнено(НастройкиСубъектов) Тогда
Для Каждого НастройкиСкрытия Из НастройкиСубъектов Цикл
Субъект = НастройкиСкрытия.Ключ;
Настройки = НастройкиСкрытия.Значение;
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено Тогда
ТекстПричины = НСтр("ru = 'Скрытие ранее отменено по причине: %1.'");
ТекстПричины = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПричины, Настройки.ПричинаОтменыСкрытия);
Иначе
ТекстПричины = НСтр("ru = 'Скрытие уже выполнено.'");
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Персональные данные субъекта «%1» не могут быть скрыты.
|%2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
КонецЕсли;
ОтбираемыеСубъекты.Добавить(Субъект);
КонецЦикла;
Иначе
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтбираемыеСубъекты, Субъекты);
КонецЕсли;
ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(ОтбираемыеСубъекты, Истина);
КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -3126,6 +3126,10 @@
<items xsi:type="form:FormField"> <items xsi:type="form:FormField">
<name>СписокСостоянияУзловИмяПланаОбмена</name> <name>СписокСостоянияУзловИмяПланаОбмена</name>
<id>89</id> <id>89</id>
<title>
<key>ru</key>
<value>Вид обмена</value>
</title>
<visible>true</visible> <visible>true</visible>
<enabled>true</enabled> <enabled>true</enabled>
<userVisible> <userVisible>
@@ -3165,19 +3169,19 @@
</extInfo> </extInfo>
</items> </items>
<items xsi:type="form:FormField"> <items xsi:type="form:FormField">
<name>СписокСостоянияУзловУзелИнформационнойБазы</name> <name>СписокСостоянияУзловНаименованиеКорреспондента</name>
<id>10</id> <id>558</id>
<visible>true</visible> <visible>true</visible>
<enabled>true</enabled> <enabled>true</enabled>
<userVisible> <userVisible>
<common>true</common> <common>true</common>
</userVisible> </userVisible>
<dataPath xsi:type="form:DataPath"> <dataPath xsi:type="form:DataPath">
<segments>СписокСостоянияУзлов.УзелИнформационнойБазы</segments> <segments>СписокСостоянияУзлов.НаименованиеКорреспондента</segments>
</dataPath> </dataPath>
<extendedTooltip> <extendedTooltip>
<name>СписокСостоянияУзловУзелИнформационнойБазыExtendedTooltip</name> <name>СписокСостоянияУзловНаименованиеКорреспондентаРасширеннаяПодсказка</name>
<id>502</id> <id>560</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
@@ -3186,8 +3190,8 @@
</extInfo> </extInfo>
</extendedTooltip> </extendedTooltip>
<contextMenu> <contextMenu>
<name>СписокСостоянияУзловУзелИнформационнойБазыКонтекстноеМеню</name> <name>СписокСостоянияУзловНаименованиеКорреспондентаКонтекстноеМеню</name>
<id>11</id> <id>559</id>
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>InputField</type> <type>InputField</type>
@@ -4558,6 +4562,24 @@
<common>true</common> <common>true</common>
</edit> </edit>
</columns> </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>
<attributes> <attributes>
<name>НастраиваемыеСинхронизации</name> <name>НастраиваемыеСинхронизации</name>
@@ -4462,8 +4462,10 @@
ЗаписиДомов = РезультатЗапроса.Выгрузить(); ЗаписиДомов = РезультатЗапроса.Выгрузить();
КорректныеЗаписи = Новый Массив; КорректныеЗаписи = Новый Массив;
УлицаНайдена = Ложь; УлицаНайдена = Ложь;
ВариантАдреса = Новый Структура; ВариантАдреса = Новый Структура;
ПроверитьИсторию = Ложь;
Для Каждого Запись Из ЗаписиДомов Цикл; Для Каждого Запись Из ЗаписиДомов Цикл;
ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись);
@@ -4492,6 +4494,8 @@
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт", ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "НаселПункт",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Населенный пункт ""%1"" отсутствует в адресном классификаторе'"),
НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение)); НаселенныйПункт.Наименование + " " + НаселенныйПункт.Сокращение));
ИначеЕсли ПроверятьНаселенныйПункт И Запись.НаселенныйПунктНайден <> Истина Тогда
ПроверитьИсторию = Истина;
КонецЕсли; КонецЕсли;
Если ПроверятьУлицу И Запись.УлицаНайден И Запись.УлицаАктуален = Истина Тогда Если ПроверятьУлицу И Запись.УлицаНайден И Запись.УлицаАктуален = Истина Тогда
@@ -4502,6 +4506,8 @@
ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный", ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Дополнительный",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дополнительная территория ""%1""отсутствует в адресном классификаторе'"),
Дополнительный.Наименование + " " + Дополнительный.Сокращение)); Дополнительный.Наименование + " " + Дополнительный.Сокращение));
ИначеЕсли ПроверятьДополнительный И Запись.ДополнительныйНайден <> Истина Тогда
ПроверитьИсторию = Истина;
КонецЕсли; КонецЕсли;
Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден И Запись.ПодчиненныйАктуален = Истина Тогда Если ПроверятьПодчиненный И Не Запись.ПодчиненныйНайден И Запись.ПодчиненныйАктуален = Истина Тогда
@@ -4529,6 +4535,17 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ПроверитьИсторию Тогда
НовыйАдрес = АнализИсторииОдногоАдресаПоКлассификатору(Адрес, Уровни);
Если НовыйАдрес <> Неопределено Тогда
Результат.Вставить("Исторический", Истина);
Результат.Варианты.Добавить(НовыйАдрес);
Возврат Результат;
КонецЕсли;
КонецЕсли;
Если КорректныеЗаписи.Количество() = 0 Тогда Если КорректныеЗаписи.Количество() = 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; ДнейДоСкрытияПДн = 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'); Запрос.УстановитьПараметр("ПустаяДата", '00010101');
Запрос.УстановитьПараметр("РасчетнаяДата", ТекущаяДата + ДнейДоСкрытия * 86400); Запрос.УстановитьПараметр("РасчетнаяДата", ТекущаяДата + ДнейДоСкрытия * 86400);
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
СтрокаСписка = Строки[Выборка.Субъект]; СтрокаСписка = Строки[Выборка.Субъект];
СтрокаСписка.Данные["ОтсутствуетСогласие"] = 1; СтрокаСписка.Данные["ОтсутствуетСогласие"] = 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; ДатаСкрытия = НачалоДня(ТекущаяДатаСеанса()) + ДнейДоСкрытия * 86400;
НастройкиСкрытия = Новый Структура; НастройкиСкрытия = Новый Структура;
@@ -1571,7 +1714,7 @@
КонецЕсли; КонецЕсли;
Если ДнейДоСкрытия = Неопределено Тогда Если ДнейДоСкрытия = Неопределено Тогда
ДнейДоСкрытия = Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить(); ДнейДоСкрытия = ДнейДоСкрытияПерсональныхДанныхСубъектов();
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияСогласия) Тогда Если ЗначениеЗаполнено(СрокДействияСогласия) Тогда
@@ -1586,18 +1729,56 @@
КонецПроцедуры КонецПроцедуры
Процедура РассчитатьДатуСкрытияПерсональныхДанныхСубъекта(Субъект) Экспорт Процедура РассчитатьДатуСкрытияПерсональныхДанныхПоОснованиям(Основания) Экспорт
НастройкиСубъектов = ПрочитатьНастройкиСкрытияСубъектов(Субъект); Если ТипЗнч(Основания) <> Тип("Массив") Тогда
НастройкиСкрытия = НастройкиСубъектов.Получить(Субъект); Основания = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Основания);
Если ЗначениеЗаполнено(НастройкиСкрытия)
И (НастройкиСкрытия.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или НастройкиСкрытия.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено) Тогда
Возврат;
КонецЕсли; КонецЕсли;
ОбновитьНастройкиСкрытияСубъекта(Субъект); ПрежниеСубъекты = Новый Массив;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Основания", Основания);
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| СубъектыДляСкрытияПерсональныхДанных.Субъект КАК Субъект
|ИЗ
| РегистрСведений.СубъектыДляСкрытияПерсональныхДанных КАК СубъектыДляСкрытияПерсональныхДанных
|ГДЕ
| СубъектыДляСкрытияПерсональныхДанных.Основание В (&Основания)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбновитьНастройкиСкрытияСубъекта(Выборка.Субъект);
ПрежниеСубъекты.Добавить(Выборка.Субъект);
КонецЦикла;
СубъектыОснований = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Основания, "Субъект");
ТекущиеСубъекты = ОбщегоНазначения.ВыгрузитьКолонку(СубъектыОснований, "Значение", Истина);
ОставшиесяСубъекты = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ТекущиеСубъекты, ПрежниеСубъекты);
НастройкиСубъектов = ПрочитатьНастройкиСкрытияСубъектов(ОставшиесяСубъекты);
Для Каждого СубъектИНастройки Из НастройкиСубъектов Цикл
Субъект = СубъектИНастройки.Ключ;
НастройкиСубъекта = СубъектИНастройки.Значение;
Если НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или НастройкиСубъекта.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Продолжить;
Иначе
ОбновитьНастройкиСкрытияСубъекта(Субъект);
КонецЕсли;
КонецЦикла;
КонецПроцедуры КонецПроцедуры
@@ -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) Добавление проверки // 1) Добавление проверки
@@ -29,7 +29,7 @@
|по значению одноименного ресурса предыдущей версии.'"); |по значению одноименного ресурса предыдущей версии.'");
Обработчик = Обработчики.Добавить(); Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.6.91"; Обработчик.Версия = "2.4.6.113";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("fcd45d27-8e5d-45dd-9648-deff60825ae1"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("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"".'"), НСтр("ru='У объекта ""%1"" в реквизите ""%2"" указан несуществующий элемент: ""%3"".'"),
СсылкаНаОбъект, СсылочныйРеквизит.Ключ, ТекущаяСсылка); СсылкаНаОбъект, СсылочныйРеквизит.Ключ, ТекущаяСсылка);
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -1594,6 +1613,11 @@
НСтр("ru = 'У объекта ""%1"" в реквизите ""%2"" табличной части ""%3"" (строка № %4) указан несуществующий элемент: ""%5"".'"), НСтр("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"".'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра накопления ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -2227,6 +2262,7 @@
Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Процедура НайтиБитыеСсылкиВРегистрахБухгалтерии(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
Измерения = ОбъектМетаданных.Измерения; Измерения = ОбъектМетаданных.Измерения;
Реквизиты = ОбъектМетаданных.Реквизиты; Реквизиты = ОбъектМетаданных.Реквизиты;
СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты; СтандартныеРеквизиты = ОбъектМетаданных.СтандартныеРеквизиты;
@@ -2419,6 +2455,10 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
@@ -2430,14 +2470,17 @@
Иначе Иначе
Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра бухгалтерии ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -2474,6 +2517,7 @@
Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок) Процедура НайтиБитыеСсылкиВРегистрахРасчета(ОбъектМетаданных, ПараметрыПроверки, КэшБитыхСсылок)
РазмерКэшаПроверенныхСсылок = РазмерКэшаПроверенныхСсылок();
ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Измерения = ОбъектМетаданных.Измерения; Измерения = ОбъектМетаданных.Измерения;
Реквизиты = ОбъектМетаданных.Реквизиты; Реквизиты = ОбъектМетаданных.Реквизиты;
@@ -2563,6 +2607,10 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Если ПараметрыПроверки.КэшСсылок[ТекущаяСсылка] <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда Если КэшБитыхСсылок.Получить(ТекущаяСсылка) <> Неопределено Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
@@ -2574,14 +2622,17 @@
Иначе Иначе
Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда Если Не ОбщегоНазначения.СсылкаСуществует(ТекущаяСсылка) Тогда
УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "") УточнениеПроблемы = УточнениеПроблемы + ?(ЗначениеЗаполнено(УточнениеПроблемы), Символы.ПС, "")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='У регистра расчета ""%1"" в %2, записи №%3 по регистратору ""%4"" указан несуществующий элемент: ""%5"".'"),
ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже, ОбъектМетаданных.Представление(), ПодчиненныйОбъект.ТипМетаданныхВТворительномПадеже,
Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"], Формат(СтрокаРезультата.НомерСтроки, "ЧГ=0"), СтрокаРезультата["РегистраторРеквизитПредставление"],
СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]); СтрокаРезультата[ПодчиненныйОбъект.ИмяМетаданных + ПодчиненныйОбъект.ТипМетаданныхВИменительномПадеже + "Представление"]);
КэшБитыхСсылок.Вставить(ТекущаяСсылка, ""); КэшБитыхСсылок.Вставить(ТекущаяСсылка, "");
Иначе
Если ПараметрыПроверки.КэшСсылок.Количество() = РазмерКэшаПроверенныхСсылок Тогда
ПараметрыПроверки.КэшСсылок.Очистить();
КонецЕсли;
ПараметрыПроверки.КэшСсылок.Вставить(ТекущаяСсылка, "");
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -2622,6 +2673,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки) Процедура НайтиНезаполненныеОбязательныеРеквизиты(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Реквизиты = ОбъектМетаданных.Реквизиты; Реквизиты = ОбъектМетаданных.Реквизиты;
@@ -2642,13 +2698,19 @@
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки; ОбщееКоличествоДанных = 0;
ОграничениеПоДате = ПараметрыПроверки.ДатаНачалаПроверки;
Пока Истина Цикл Пока Истина Цикл
Если Результат.Количество() = 0 Тогда Если Результат.Количество() = 0 Тогда
Прервать; Прервать;
КонецЕсли; КонецЕсли;
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл Для Каждого СтрокаРезультата Из Результат Цикл
СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект;
@@ -2688,6 +2750,12 @@
КонецЦикла; КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект);
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
@@ -2729,6 +2797,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхПериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки) Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхПериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Если ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда Если ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных) Тогда
@@ -2797,11 +2870,16 @@
КонецЕсли; КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
ОбщееКоличествоДанных = 0;
Пока Результат.Количество() > 0 Цикл Пока Результат.Количество() > 0 Цикл
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл Для Каждого СтрокаРезультата Из Результат Цикл
ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
@@ -2828,6 +2906,12 @@
КонецЦикла; КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период); Запрос.УстановитьПараметр("ДатаНачалаПроверки", СтрокаРезультата.Период);
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
@@ -2837,6 +2921,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхНепериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки) Процедура НайтиНезаполненныеОбязательныеРеквизитыВПодчиненныхНепериодическихРегистрах(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Запрос = Новый Запрос( Запрос = Новый Запрос(
@@ -2857,11 +2946,16 @@
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОбъектМетаданных", ПолноеИмя);
Запрос.УстановитьПараметр("Регистратор", ""); Запрос.УстановитьПараметр("Регистратор", "");
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
ОбщееКоличествоДанных = 0;
Пока Результат.Количество() > 0 Цикл Пока Результат.Количество() > 0 Цикл
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл Для Каждого СтрокаРезультата Из Результат Цикл
ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); ТекущийНаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей();
@@ -2887,6 +2981,12 @@
КонецЦикла; КонецЦикла;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); Запрос.УстановитьПараметр("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка);
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
@@ -2896,6 +2996,11 @@
Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхНепериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки) Процедура НайтиНезаполненныеОбязательныеРеквизитыВНезависимыхНепериодическихРегистрахСведений(ОбъектМетаданных, ПараметрыПроверки)
МодульОценкаПроизводительности = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
КонецЕсли;
ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Условие = ""; Условие = "";
@@ -2922,6 +3027,8 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ОбъектМетаданных.ПолноеИмя());
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ПоляВыборки);
ОбщееКоличествоДанных = 0;
Запрос = Новый Запрос(ТекстЗапроса); Запрос = Новый Запрос(ТекстЗапроса);
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
@@ -2933,6 +3040,10 @@
Прервать; Прервать;
КонецЕсли; КонецЕсли;
Если МодульОценкаПроизводительности <> Неопределено Тогда
ОписаниеЗамера = МодульОценкаПроизводительности.НачатьЗамерДлительнойОперации(ПараметрыПроверки.Идентификатор + "." + ПолноеИмя);
КонецЕсли;
Для Каждого СтрокаРезультата Из Результат Цикл Для Каждого СтрокаРезультата Из Результат Цикл
Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 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)));
КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256))); КолонкиПроверок.Добавить("Комментарий", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(256)));
КолонкиПроверок.Добавить("Отключена", Новый ОписаниеТипов("Булево"));
Возврат Проверки; Возврат Проверки;
@@ -1027,13 +1027,39 @@
// Выполнение ПКС для ТЧ // Выполнение ПКС для ТЧ
Если СтекВыгрузки.Количество() = 1 Тогда Если СтекВыгрузки.Количество() = 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"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -71,6 +71,14 @@
Обработчик.Приоритет = 80; Обработчик.Приоритет = 80;
Обработчик.МонопольныйРежим = Истина; Обработчик.МонопольныйРежим = Истина;
Если РаботаВМоделиСервиса.РазделениеВключено() Тогда
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.6.105";
Обработчик.Процедура = "ОчередьЗаданийСлужебный.ЗапланироватьНеАктивныеЗадания";
Обработчик.ОбщиеДанные = Истина;
Обработчик.РежимВыполнения = "Оперативно";
КонецЕсли;
КонецПроцедуры КонецПроцедуры
// См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных. // См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных.
@@ -699,6 +707,7 @@
КонецЕсли; КонецЕсли;
ИсходнаяДатаДляПроверки = ДатаДляПроверки; ИсходнаяДатаДляПроверки = ДатаДляПроверки;
ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска));
// Границы по датам // Границы по датам
Если ЗначениеЗаполнено(Расписание.ДатаКонца) Если ЗначениеЗаполнено(Расписание.ДатаКонца)
@@ -863,15 +872,17 @@
КонецЕсли; КонецЕсли;
// Учет времени // Учет времени
ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки));
Если Расписание.ДетальныеРасписанияДня.Количество() = 0 Тогда Если Расписание.ДетальныеРасписанияДня.Количество() = 0 Тогда
ДетальныеРасписания = Новый Массив; ДетальныеРасписания = Новый Массив;
ДетальныеРасписания.Добавить(Расписание); ДетальныеРасписания.Добавить(Расписание);
ВремяДляПроверки = ДатаДляПроверки;
ВремяНачалаПоследнегоЗапуска = ДатаНачалаПоследнегоЗапуска;
Иначе Иначе
ДетальныеРасписания = Расписание.ДетальныеРасписанияДня; ДетальныеРасписания = Расписание.ДетальныеРасписанияДня;
ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки));
ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска));
КонецЕсли; КонецЕсли;
// Если у нас есть промежутки, с переходом через полночь, то разбиваем их на два промежутка. // Если у нас есть промежутки, с переходом через полночь, то разбиваем их на два промежутка.
@@ -1482,25 +1493,14 @@
Иначе Иначе
Расписание = Выборка.Расписание.Получить(); Расписание = Выборка.Расписание.Получить();
Если Расписание <> Неопределено Тогда
Задание.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания( Если Расписание = Неопределено Или (Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено
Расписание, ЧасовойПояс, Задание.ДатаНачалаПоследнегоЗапуска, Задание.ДатаЗавершенияПоследнегоЗапуска); И Расписание.ПериодПовтораДней = 0 И Расписание.ПериодПовтораВТечениеДня = 0) Тогда
Задание.НомерПопытки = 0;
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеАктивно;
КонецЕсли;
Задание.ИсполняющееФоновоеЗадание = Неопределено;
РаботаВМоделиСервиса.ЗаписатьВспомогательныеДанные(Задание);
Иначе // Нет расписания
Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных( Если РаботаВМоделиСервисаПовтИсп.ЭтоРазделеннаяКонфигурация() И РаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(
Задание.Метаданные().ПолноеИмя(), Задание.Метаданные().ПолноеИмя(),
РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда РаботаВМоделиСервиса.РазделительВспомогательныхДанных()) Тогда
Если ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания. Если Расписание = Неопределено И ЗначениеЗаполнено(Задание.Шаблон) Тогда // Задание по шаблону без расписания.
ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'"); ШаблонСообщения = НСтр("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)); ?(ПротоколПочты = "IMAP", ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.SMTP));
Если СоздаватьСоединение Тогда
Соединение.Отключиться();
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения); ПараметрыОтправки.Вставить("ИдентификаторСообщения", Письмо.ИдентификаторСообщения);
ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели); ПараметрыОтправки.Вставить("ОшибочныеПолучатели", ОшибочныеПолучатели);
КонецПроцедуры КонецПроцедуры
Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, Функция ЗагрузитьСообщения(Знач УчетнаяЗапись, Знач ПараметрыЗагрузки = Неопределено) Экспорт
Знач ПараметрыЗагрузки = Неопределено) Экспорт
// Используется для проверки возможности входа на почтовый ящик. // Используется для проверки возможности входа на почтовый ящик.
Перем РежимТестирования; Перем РежимТестирования;
@@ -559,7 +565,9 @@
ПолучениеЗаголовков = Ложь; ПолучениеЗаголовков = Ложь;
КонецЕсли; КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина); Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина);
УстановитьОтключениеБезопасногоРежима(Ложь);
Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда Если ПараметрыЗагрузки.Свойство("ЗаголовкиИдентификаторы") Тогда
ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы; ЗаголовкиИдентификаторы = ПараметрыЗагрузки.ЗаголовкиИдентификаторы;
@@ -569,13 +577,13 @@
НаборСообщенийДляУдаления = Новый Массив; НаборСообщенийДляУдаления = Новый Массив;
Соединение = Новый ИнтернетПочта;
Протокол = ПротоколИнтернетПочты.POP3; Протокол = ПротоколИнтернетПочты.POP3;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда
Протокол = ПротоколИнтернетПочты.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,16 +401,10 @@
КонецЕсли; КонецЕсли;
СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, Ложь); СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, Ложь);
Если СтруктураСклонения = Неопределено Тогда Если СтруктураСклонения = Неопределено Тогда
УстановитьДоступностьСервисаСклонения(Ложь);
Возврат Представление; Возврат Представление;
КонецЕсли; КонецЕсли;
УстановитьДоступностьСервисаСклонения(Истина);
// Запись в регистр СклоненияПредставленийОбъектов успешного склонения. // Запись в регистр СклоненияПредставленийОбъектов успешного склонения.
Если ЗначениеЗаполнено(Объект) Тогда Если ЗначениеЗаполнено(Объект) Тогда
ЗаписатьВРегистрСклонения(Представление, Объект, СтруктураСклонения); ЗаписатьВРегистрСклонения(Представление, Объект, СтруктураСклонения);
@@ -470,8 +456,10 @@
Ответ = ВыполнитьЗапросСервисуСклонений(Соединение, Запрос); Ответ = ВыполнитьЗапросСервисуСклонений(Соединение, Запрос);
Исключение Исключение
ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке(), ПоказыватьСообщения); ЗарегистрироватьОшибкуСервисаСклонений(ИнформацияОбОшибке(), ПоказыватьСообщения);
УстановитьДоступностьСервисаСклонения(Ложь);
Возврат Неопределено; Возврат Неопределено;
КонецПопытки; КонецПопытки;
УстановитьДоступностьСервисаСклонения(Истина);
УстановитьОтключениеБезопасногоРежима(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь);
СтруктураОтвета = СтруктураОтветаСервисаСклонений(Ответ); СтруктураОтвета = СтруктураОтветаСервисаСклонений(Ответ);
@@ -1409,6 +1409,7 @@
| ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки,
| 0 КАК ИдентификаторСтрокиТабличнойЧасти, | 0 КАК ИдентификаторСтрокиТабличнойЧасти,
| ВЫРАЗИТЬ("""" КАК СТРОКА(200)) КАК ИмяРеквизита, | ВЫРАЗИТЬ("""" КАК СТРОКА(200)) КАК ИмяРеквизита,
| ВидыКонтактнойИнформации.ПометкаУдаления КАК ПометкаУдаления,
| ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий
|ИЗ |ИЗ
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
@@ -1417,8 +1418,7 @@
|ПО |ПО
| ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид
|ГДЕ |ГДЕ
| НЕ ВидыКонтактнойИнформации.ПометкаУдаления | ВидыКонтактнойИнформации.Используется
| И ВидыКонтактнойИнформации.Используется
| И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА) | И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА)
| И ( | И (
| ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
@@ -1469,6 +1469,10 @@
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Если СтрокаКИ.ПометкаУдаления И ПустаяСтрока(СтрокаКИ.ЗначенияПолей) Тогда
Продолжить;
КонецЕсли;
ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид); ИндексЭлемента = СозданныеЭлементы.Найти(СтрокаКИ.Вид);
СтатическийЭлемент = ИндексЭлемента <> Неопределено; СтатическийЭлемент = ИндексЭлемента <> Неопределено;
ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид); ЭтоНовыйВидКИ = (СтрокаКИ.Вид <> ПредыдущийВид);
@@ -1688,10 +1692,10 @@
Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита]; Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита];
Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита; Поле = "Объект." + ИмяТабличнойЧасти + "[" + (СтрокаТабличнойЧастиФормы.НомерСтроки - 1) + "]." + ИмяРеквизита;
Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) Тогда Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле);
ТекущийУровеньОшибок = 2; ТекущийУровеньОшибок = 2;
Иначе Иначе
@@ -1713,24 +1717,26 @@
Иначе Иначе
ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита); ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита);
Если ЭлементФормы = Неопределено Тогда Если ЭлементФормы = Неопределено Или ВидИнформации.ПометкаУдаления Тогда
Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация. Продолжить; // Элемент не был создан. Не была вызвана отложенная инициализация.
КонецЕсли; КонецЕсли;
Представление = Форма[ИмяРеквизита]; Представление = Форма[ИмяРеквизита];
Если ВидИнформации <> ПредыдущийВид И ОбязательноеЗаполнение И ПустаяСтрока(Представление) Если ВидИнформации <> ПредыдущийВид
И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда И ОбязательноеЗаполнение
И ПустаяСтрока(Представление)
И Не ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Форма, СтрокаТаблицы, ВидИнформации) Тогда
// И нет других строк с данными для видов КИ с множественными значениями. // И нет других строк с данными для видов КИ с множественными значениями.
ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита);
ТекущийУровеньОшибок = 2; ТекущийУровеньОшибок = 2;
Иначе Иначе
ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.ЗначенияПолей, ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.ЗначенияПолей,
ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий); ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий);
КонецЕсли; КонецЕсли;
@@ -3551,7 +3557,7 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяРеквизита, 2, Ложь); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяРеквизита, 2, Ложь);
// Устанавливаем свойства поля ввода. // Устанавливаем свойства поля ввода.
Если ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда Если ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
// Ввод комментария через контекстное меню. // Ввод комментария через контекстное меню.
ИмяКоманды = "КонтекстноеМеню" + ИмяРеквизита; ИмяКоманды = "КонтекстноеМеню" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
@@ -3567,7 +3573,7 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
КонецЕсли; КонецЕсли;
Если ИнформацияОВидеКИ.ХранитьИсториюИзменений Тогда Если ИнформацияОВидеКИ.ХранитьИсториюИзменений И Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
// Вывод истории контактной информации через контекстное меню. // Вывод истории контактной информации через контекстное меню.
ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита; ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
@@ -3614,11 +3620,13 @@
ГруппКнопокРазделитель = Форма.Элементы.Добавить("ПодменюРазделительКарты" + ИмяРеквизита, Тип("ГруппаФормы"), Элемент.КонтекстноеМеню); ГруппКнопокРазделитель = Форма.Элементы.Добавить("ПодменюРазделительКарты" + ИмяРеквизита, Тип("ГруппаФормы"), Элемент.КонтекстноеМеню);
ГруппКнопокРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок; ГруппКнопокРазделитель.Вид = ВидГруппыФормы.ГруппаКнопок;
// Заполнить Если Не ИнформацияОВидеКИ.ПометкаУдаления Тогда
ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель); // Заполнить
ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю; ГруппаПодменюАдреса = Форма.Элементы.Добавить("КонтекстноеПодменюКопироватьАдреса" + ИмяРеквизита, Тип("ГруппаФормы"), ГруппКнопокРазделитель);
ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст; ГруппаПодменюАдреса.Вид = ВидГруппыФормы.Подменю;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'"); ГруппаПодменюАдреса.Отображение = ОтображениеКнопки.Текст;
ГруппаПодменюАдреса.Заголовок = НСтр("ru='Заполнить'");
КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -3630,7 +3638,7 @@
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип)
И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
Элемент.КнопкаВыбора = Истина; Элемент.КнопкаВыбора = Не ИнформацияОВидеКИ.ПометкаУдаления;
Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
Элемент.РедактированиеТекста = Ложь; Элемент.РедактированиеТекста = Ложь;
Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет;
@@ -3640,6 +3648,18 @@
КонецЕсли; КонецЕсли;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
Если ИнформацияОВидеКИ.ПометкаУдаления Тогда
Элемент.ШрифтЗаголовка = Новый Шрифт(,,,,, Истина);
Если Не ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда
Элемент.КнопкаОчистки = Истина;
Элемент.РедактированиеТекста = Ложь;
Иначе
Элемент.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЕсли;
Возврат Элемент; Возврат Элемент;
КонецФункции КонецФункции
@@ -3853,7 +3873,7 @@
ДанныеВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид]; ДанныеВидаКонтактнойИнформации = ДанныеВидовКонтактнойИнформации[СтрокаКонтактнойИнформации.Вид];
ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид); ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид);
Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти Тогда Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда
ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения);
ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Наименование); ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, СтрокаКонтактнойИнформации.Наименование);
КонецЕсли; КонецЕсли;
@@ -4037,7 +4057,7 @@
Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита; Элемент.ПутьКДанным = "Объект." + ИмяТабличнойЧасти + "." + СтрокаТабличнойЧасти.ИмяРеквизита;
Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаТабличнойЧасти.Тип) Тогда
Элемент.КнопкаВыбора = Истина; Элемент.КнопкаВыбора = Не СтрокаТабличнойЧасти.ПометкаУдаления;
Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда Если ВидКонтактнойИнформацииТЧ.РедактированиеТолькоВДиалоге Тогда
Элемент.РедактированиеТекста = Ложь; Элемент.РедактированиеТекста = Ложь;
КонецЕсли; КонецЕсли;
@@ -4046,8 +4066,13 @@
КонецЕсли; КонецЕсли;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
Если СтрокаТабличнойЧасти.ПометкаУдаления Тогда
Элемент.Шрифт = Новый Шрифт(,,,,, Истина);
Элемент.РедактированиеТекста = Ложь;
КонецЕсли;
Если ВидКонтактнойИнформацииТЧ.ОбязательноеЗаполнение Тогда Если ВидКонтактнойИнформацииТЧ.ОбязательноеЗаполнение Тогда
Элемент.АвтоОтметкаНезаполненного = Истина; Элемент.АвтоОтметкаНезаполненного = Не СтрокаТабличнойЧасти.ПометкаУдаления;
КонецЕсли; КонецЕсли;
Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита, Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита,
@@ -4643,6 +4668,7 @@
Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Если Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
// Ввод комментария через контекстное меню. // Ввод комментария через контекстное меню.
ИмяКоманды = "КонтекстноеМенюПодменю" + ИмяРеквизита; ИмяКоманды = "КонтекстноеМенюПодменю" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю); Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаПодменю);
@@ -4656,9 +4682,10 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
КонецЕсли;
// История изменений // История изменений
Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И Не ВидКонтактнойИнформации.ПометкаУдаления Тогда
ИмяКоманды = "КонтекстноеМенюПодменюИстория" + ИмяРеквизита; ИмяКоманды = "КонтекстноеМенюПодменюИстория" + ИмяРеквизита;
Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодменю); Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодменю);
@@ -4702,13 +4729,17 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 1);
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 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"?> <?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> <name>БиблиотекаСтандартныхПодсистем</name>
<synonym> <synonym>
<key>ru</key> <key>ru</key>
<value>Библиотека стандартных подсистем, редакция 2.4</value> <value>Библиотека стандартных подсистем, редакция 2.4</value>
</synonym> </synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="e2ccf507-dafe-4601-a8f9-7e47a297f3f0"/> <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="52656da1-07d5-4859-84b8-e37dc9db3e22"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="a435d3b9-729f-48ee-a864-ab4297fd9377"/> <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f08da7bb-aa99-4f49-bc50-04bc605d5277"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="19461ada-30af-4fbf-98f7-53bc65622373"/> <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="8454ebab-86f8-413b-ac2a-ae58cc3e2fae"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="ed1bd08c-173e-4e0c-bf51-f196476cc0d2"/> <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="e639cfd6-02d2-4f12-960c-9fe4e3d88736"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="bfc4cee5-c9dd-4f38-9d24-71e1798d67f5"/> <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="75a97959-9271-4fca-a76c-21f81f03585b"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="ee62e349-0512-4776-9031-78966ec4955a"/> <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="d7968f25-7a7b-4b32-949d-88e7e136ebd0"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="d8512fc9-88f7-4cac-a8ba-14645de9f922"/> <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="894a8fb4-f462-4e0a-8476-3ce8f88a26c4"/>
<defaultRunMode>ManagedApplication</defaultRunMode> <defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes> <usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant> <scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles> <defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles> <defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor> <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> <updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents> <includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities> <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 @@
Результат = Контекст.РезультатПослеВызоваПолучитьОткрытыйКлюч; Результат = Контекст.РезультатПослеВызоваПолучитьОткрытыйКлюч;
Контекст.Вставить("ТекущаяОткрытаяЧастьКлючаЭП", Результат); Контекст.Вставить("ТекущаяОткрытаяЧастьКлючаЭП", Результат);
Контекст.Вставить("ТекущийИКС", ИдентификаторКлючаСубъектаHexСтрокой(Результат));
Криптография.НачатьВызовВычислитьИдентификаторКлючаСубъекта(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъекта", ЭтотОбъект, Контекст,
"СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта", ЭтотОбъект),
Контекст.ИмяФайлаЗапроса);
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
Криптография = Неопределено;
СоздатьКлючИЗапросНаСертификатЗавершение(Контекст, ИнформацияОбОшибке,
НСтр("ru = 'Не удалось вычислить идентификатор ключа субъекта по причине:'"));
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъекта(Результат, ПараметрыВызова, Контекст) Экспорт
Контекст.Вставить("РезультатПослеВызоваВычислитьИдентификаторКлючаСубъекта", Результат);
Криптография.НачатьПолучениеСписокОшибок(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъектаПослеПолученияСписокОшибок", ЭтотОбъект, Контекст));
КонецПроцедуры
// Продолжение процедуры СоздатьКлючИЗапросНаСертификат.
&НаКлиенте
Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваВычислитьИдентификаторКлючаСубъектаПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт
Если ЗначениеЗаполнено(СписокОшибок) Тогда
СоздатьКлючИЗапросНаСертификатПослеОшибкиВызоваВычислитьИдентификаторКлючаСубъекта(СписокОшибок, Ложь, Контекст);
Возврат;
КонецЕсли;
Результат = Контекст.РезультатПослеВызоваВычислитьИдентификаторКлючаСубъекта;
Контекст.Вставить("ТекущийИКС", Результат);
НачатьПомещениеФайлов(Новый ОписаниеОповещения( НачатьПомещениеФайлов(Новый ОписаниеОповещения(
"СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст, "СоздатьКлючИЗапросНаСертификатПослеПомещенияФайлов", ЭтотОбъект, Контекст,
@@ -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,7 +773,7 @@
// Вспомогательные служебные процедуры и функции. // Вспомогательные служебные процедуры и функции.
Процедура ВыполнитьДействияПоНастройкеОбменаДанными( Процедура ВыполнитьДействияПоНастройкеОбменаДанными(
Отказ, СтатусЗавершения,
НастройкаОтборовНаУзле, НастройкаОтборовНаУзле,
ЗначенияПоУмолчаниюНаУзле, ЗначенияПоУмолчаниюНаУзле,
КодЭтогоУзла, КодЭтогоУзла,
@@ -787,6 +781,10 @@
РегистрироватьДанныеДляВыгрузки = Истина, РегистрироватьДанныеДляВыгрузки = Истина,
ИспользоватьНастройкиТранспорта = Истина) ИспользоватьНастройкиТранспорта = Истина)
СтатусЗавершения = Новый Структура;
СтатусЗавершения.Вставить("Отказ", Ложь);
СтатусЗавершения.Вставить("СообщениеОбОшибке", "");
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
НачатьТранзакцию(); НачатьТранзакцию();
@@ -825,7 +823,10 @@
ЗафиксироватьТранзакцию(); ЗафиксироватьТранзакцию();
Исключение Исключение
ОтменитьТранзакцию(); ОтменитьТранзакцию();
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ);
Инфо = ИнформацияОбОшибке();
СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо);
СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
@@ -838,12 +839,14 @@
И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда И Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда
// Выполняем регистрацию изменений на узле плана обмена. // Выполняем регистрацию изменений на узле плана обмена.
ЗарегистрироватьИзмененияДляОбмена(Отказ); ЗарегистрироватьИзмененияДляОбмена(СтатусЗавершения.Отказ);
КонецЕсли; КонецЕсли;
Исключение Исключение
СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); Инфо = ИнформацияОбОшибке();
СтатусЗавершения.СообщениеОбОшибке = КраткоеПредставлениеОшибки(Инфо);
СообщитьИнформациюОбОшибке(Инфо, СтатусЗавершения.Отказ);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
@@ -894,8 +897,15 @@
НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); НовыйУзел = МенеджерПланаОбмена.СоздатьУзел();
НовыйУзел.Код = КодНовогоУзла; НовыйУзел.Код = КодНовогоУзла;
Иначе Иначе
ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально. Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда
|В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Значение префикса программы ""%1"" не уникально (""%2""). Уже существует настройка синхронизации с таким же префиксом.
|Для продолжения необходимо назначить в программе ""%1"" уникальный префикс информационной базы, отличный от текущего.'"),
НаименованиеВторойБазы, КодНовогоУзлаВторойБазы);
Иначе
ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально.
|В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'");
КонецЕсли;
КонецЕсли; КонецЕсли;
НовыйУзел.Наименование = НаименованиеВторойБазы; НовыйУзел.Наименование = НаименованиеВторойБазы;
@@ -5027,7 +5027,6 @@
<name>ОчиститьАдрес</name> <name>ОчиститьАдрес</name>
</handler> </handler>
</action> </action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>DontUse</currentRowUse> <currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse> <selectedRowsUse>Auto</selectedRowsUse>
</formCommands> </formCommands>
@@ -1008,6 +1008,7 @@
Процедура ОчиститьАдрес(Команда) Процедура ОчиститьАдрес(Команда)
ОчиститьАдресКлиент(); ОчиститьАдресКлиент();
Модифицированность = Истина;
КонецПроцедуры КонецПроцедуры
@@ -2699,9 +2700,11 @@
Если КоличествоОшибок = 1 Тогда Если КоличествоОшибок = 1 Тогда
МестоОшибки = СписокОшибок[0].Значение; МестоОшибки = СписокОшибок[0].Значение;
Если СписокОшибок[0].Пометка = Ложь И НЕ ЭтоВебСервис Тогда Если СписокОшибок[0].Пометка = Ложь И НЕ ЭтоВебСервис Тогда
ТекстВопроса = НСтр("ru = 'Адрес не может быть проверен.'") + Символы.ПС + СписокОшибок[0].Представление + Символы.ПС + НСтр("ru = 'Загрузить классификатор для проверки адреса?'"); ТекстВопроса = НСтр("ru = 'Адрес не может быть проверен.'") + Символы.ПС + СписокОшибок[0].Представление + Символы.ПС + НСтр("ru = 'Загрузить классификатор для проверки адреса?'");
ПредложениеЗагрузкиКлассификатора(ТекстВопроса); ПредложениеЗагрузкиКлассификатора(ТекстВопроса);
Возврат; Возврат;
ИначеЕсли ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда ИначеЕсли ПустаяСтрока(МестоОшибки) Или МестоОшибки = "/" Тогда
// Одна ошибка на весь адрес, не привязанная к полю. // Одна ошибка на весь адрес, не привязанная к полю.
ПоказатьПредупреждение(, СписокОшибок[0].Представление); ПоказатьПредупреждение(, СписокОшибок[0].Представление);
@@ -1699,7 +1699,11 @@
Если XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда Если XDTOТип = ФабрикаXDTO.Тип(РаботаСАдресами.ПространствоИмен(), "АдресРФ") Тогда
АдресРФ = 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"); 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> <value>true</value>
</right> </right>
</object> </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> <object>
<name>Constant.ВыполнятьЗамерыПроизводительности</name> <name>Constant.ВыполнятьЗамерыПроизводительности</name>
<right> <right>
@@ -805,93 +892,6 @@
<value>true</value> <value>true</value>
</right> </right>
</object> </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> <object>
<name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name> <name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name>
<right> <right>
@@ -1113,6 +1113,45 @@
<value>false</value> <value>false</value>
</right> </right>
</object> </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> <object>
<name>Constant.ВыполнятьЗамерыПроизводительности</name> <name>Constant.ВыполнятьЗамерыПроизводительности</name>
<right> <right>
@@ -1519,45 +1558,6 @@
<value>false</value> <value>false</value>
</right> </right>
</object> </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> <object>
<name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name> <name>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</name>
<right> <right>
@@ -125,17 +125,25 @@
ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"));
// Выполняем создание настройки обмена. // Выполняем создание настройки обмена.
СообщениеОбОшибке = "";
ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(
Отказ, Отказ,
СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO), СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO),
СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO)); СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO),
СообщениеОбОшибке);
Если Отказ Тогда Если Отказ Тогда
Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); Сообщение = НСтр("ru = 'При сохранении настройки обмена в программе ""%1"" возникла ошибка: %2'");
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); Если ПустаяСтрока(СообщениеОбОшибке) Тогда
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение,
ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке());
Иначе
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение,
ПомощникСозданияОбменаДанными.НаименованиеЭтойБазы, СообщениеОбОшибке);
КонецЕсли;
ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(),
УровеньЖурналаРегистрации.Ошибка, , , Сообщение); УровеньЖурналаРегистрации.Ошибка, , , ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке());
ВызватьИсключение Сообщение; ВызватьИсключение Сообщение;
КонецЕсли; КонецЕсли;