7 Commits
Author SHA1 Message Date
Компания 1С 7032022f4e 3_1_6_310 2022-08-10 22:40:00 +03:00
Компания 1С 87df78bed4 3_1_6_297 2022-07-27 22:58:00 +03:00
Компания 1С 752ae958a8 3_1_6_283 2022-07-13 22:58:00 +03:00
Компания 1С 52bcc12ca3 3_1_6_271 2022-06-29 22:55:00 +03:00
Компания 1С 16b999090f 3_1_6_257 2022-06-15 22:56:00 +03:00
Компания 1С d01d5b4bec 3_1_6_245 2022-06-02 13:06:00 +03:00
Компания 1С 3b907f4106 3_1_6_227 2022-05-16 15:54:00 +03:00
251 changed files with 16574 additions and 3031 deletions

No files matched your search

@@ -49,7 +49,7 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущееЗначение;
КонецЕсли;
ОсновнойЯзык = Метаданные.ОсновнойЯзык.КодЯзыка;
ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка();
Для каждого Представление Из Параметры.Представления Цикл
@@ -54,8 +54,8 @@
// который требуется для анализа наличия расширений и контроля динамического обновления,
// а также из формы установки расширений конфигурации в режиме 1С:Предприятия.
//
// Для сеанса запущенного без разделителей возвращается только состав неразделенных (общих)
// расширений, независимо от установленных разделителей.
// Для сеанса запущенного без разделителей исключаются расширения, предназначенные
// только для неразделенного режима (инструменты администратора сервиса).
//
// Возвращаемое значение:
// ФиксированнаяСтруктура:
@@ -64,15 +64,6 @@
//
Функция УстановленныеРасширения(ПриЗапуске = Ложь) Экспорт
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
Неразделенные = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей();
Иначе
Неразделенные = Ложь;
КонецЕсли;
РасширенияБазыДанных = РасширенияКонфигурации.Получить();
Если ПриЗапуске Тогда
РасширенияПриЗапуске = Новый Соответствие;
@@ -121,11 +112,19 @@
МодульОбновлениеКонфигурации = Неопределено;
КонецЕсли;
// Исключить из контроля расширения только для неразделенных пользователей,
// так как они не подключаются в областях и не вносят изменений
// в код конфигурации (это инструменты администратора сервиса).
НеразделенныйРежим = ОбщегоНазначения.РазделениеВключено()
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных();
Для Каждого Расширение Из Расширения Цикл
Если Неразделенные И Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.РазделениеДанных Тогда
Если НеразделенныйРежим
И Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.РазделениеДанных Тогда
Продолжить;
КонецЕсли;
Если МодульОбновлениеКонфигурации <> Неопределено И МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда
Если МодульОбновлениеКонфигурации <> Неопределено
И МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда
Исправления.Добавить(Расширение);
Иначе
Основные.Добавить(Расширение);
@@ -613,6 +612,31 @@
КонецФункции
// Возвращаемое значение:
// Дата - оперативная отметка универсального времени, полученная
// при первом вызове этой функции в сеансе.
// Разные ПК имеют разное время, что влияет на результат.
//
Функция ОперативнаяОтметкаВремениСеанса() Экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Если Не ПараметрыСеанса.УстановленныеРасширения.Свойство("ОперативнаяОтметкаВремениСеанса") Тогда
УстановленныеРасширения = Новый Структура(ПараметрыСеанса.УстановленныеРасширения);
УстановленныеРасширения.Вставить("ОперативнаяОтметкаВремениСеанса",
ПолучитьТекущийСеансИнформационнойБазы().НачалоСеанса - СмещениеСтандартногоВремени());
ПараметрыСеанса.УстановленныеРасширения = Новый ФиксированнаяСтруктура(УстановленныеРасширения);
КонецЕсли;
ОтметкаВремени = ПараметрыСеанса.УстановленныеРасширения.ОперативнаяОтметкаВремениСеанса;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Возврат ОтметкаВремени;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1096,9 +1096,6 @@
<edit>
<common>true</common>
</edit>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Список.ИндексКартинкиТекущий</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Список.Владелец</segments>
</notDefaultUseAlwaysAttributes>
@@ -641,7 +641,7 @@
Представление = Наименования[Язык.КодЯзыка][ИмяВида];
Если ЗначениеЗаполнено(Представление) Тогда
Если Язык = Метаданные.ОсновнойЯзык Тогда
Если СтрСравнить(Язык.КодЯзыка, ОбщегоНазначения.КодОсновногоЯзыка()) = 0 Тогда
ВидКонтактнойИнформации.Наименование = Представление;
Иначе
@@ -94,6 +94,16 @@
Процедура ПередЗаписью(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после блокировки регистра.
// Блокировка всего регистра используется вместо установки разделяемой блокировки на справочник,
// которая приводит к взаимоблокировке при иерархическом обновлении составов групп пользователей,
// а также вместо последовательной исключительной блокировки регистра в разрезе групп,
// которая также приводит к взаимоблокировке в ряде случаев.
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Блокировка.Заблокировать();
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -174,7 +174,8 @@
Справочники.ГруппыДоступа.ОбновитьРолиПользователейИзмененныхПриЗагрузке();
Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда
ТипыИзмененныхУчастников = ТипыИзмененныхУчастников(Пользователи, СтарыеЗначения.Пользователи);
ТипыИзмененныхУчастников = ТипыИзмененныхУчастников(Пользователи, СтарыеЗначения.Пользователи,
ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления);
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеНаборовГруппДоступа(
"ГруппыДоступаПриИзмененииУчастников",
ТипыИзмененныхУчастников.Пользователи,
@@ -212,7 +213,7 @@
// * ВнешниеПользователи - Булево
// * Пользователи - Булево
//
Функция ТипыИзмененныхУчастников(НовыеУчастники, СтарыеУчастники)
Функция ТипыИзмененныхУчастников(НовыеУчастники, СтарыеУчастники, ИзмениласьПометкаУдаления)
ТипыИзмененныхУчастников = Новый Структура;
ТипыИзмененныхУчастников.Вставить("Пользователи", Ложь);
@@ -231,7 +232,8 @@
КонецЕсли;
ВсеУчастники.Свернуть("Пользователь", "ВидИзмененияСтроки");
Для Каждого Строка Из ВсеУчастники Цикл
Если Строка.ВидИзмененияСтроки = 0 Тогда
Если Строка.ВидИзмененияСтроки = 0
И Не ИзмениласьПометкаУдаления Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Строка.Пользователь) = Тип("СправочникСсылка.Пользователи")
@@ -75,6 +75,16 @@
// Блокирует недопустимые действия с предопределенной группой "Все пользователи".
Процедура ПередЗаписью(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после блокировки регистра.
// Блокировка всего регистра используется вместо установки разделяемой блокировки на справочник,
// которая приводит к взаимоблокировке при иерархическом обновлении составов групп пользователей,
// а также вместо последовательной исключительной блокировки регистра в разрезе групп,
// которая также приводит к взаимоблокировке в ряде случаев.
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Блокировка.Заблокировать();
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -610,7 +610,7 @@
ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь;
ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений;
МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, "\", Ложь);
МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, ПолучитьРазделительПути(), Ложь);
ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница());
РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3));
@@ -85,6 +85,30 @@
#Область СлужебныйПрограммныйИнтерфейс
// Параметры:
// ИмяПараметра - Строка
// УстановленныеПараметры - Массив из Строка
//
// Возвращаемое значение:
// Булево
//
Функция ВсеПараметрыСеансаУстановлены(ИменаПараметровСеанса, УстановленныеПараметры) Экспорт
Если ИменаПараметровСеанса.Найти("ОбновлениеСправочниковИдентификаторов") = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ИдентификаторыОбъектовМетаданных", Ложь);
Результат.Вставить("ИдентификаторыОбъектовРасширений", Ложь);
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(Результат);
УстановленныеПараметры.Добавить("ОбновлениеСправочниковИдентификаторов");
Возврат ИменаПараметровСеанса.Количество() = 1;
КонецФункции
// Только для внутреннего использования.
Процедура ПроверкаИспользования(ОбъектыРасширений = Ложь) Экспорт
@@ -591,6 +615,7 @@
ПроверкаИспользования(ОбъектыРасширений);
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ЕстьТекущиеИзменения = Ложь;
@@ -612,6 +637,16 @@
"СтандартныеПодсистемы.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных", Истина);
КонецЕсли;
Если Не ТолькоПроверка И Не ТранзакцияАктивна() Тогда
ВыполненоОбновление = Новый Структура(ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов);
Если ОбъектыРасширений Тогда
ВыполненоОбновление.ИдентификаторыОбъектовРасширений = Истина;
Иначе
ВыполненоОбновление.ИдентификаторыОбъектовМетаданных = Истина;
КонецЕсли;
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(ВыполненоОбновление);
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
@@ -1086,6 +1121,7 @@
Строка.Синоним = НСтр("ru = 'Константы'");
Строка.ИмяВЕдЧисле = "Константа";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Константа'");
Строка.ОбъектыРасширений = Истина;
// Подсистемы
Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить();
@@ -1279,6 +1315,20 @@
СтандартныеПодсистемыСервер.ЗарегистрироватьОбъектНаВсехУзлах(Объект, ПланОбмена, Ложь);
КонецЦикла;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ВыполненоОбновление = Новый Структура(ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов);
Если ОбъектыРасширений Тогда
ВыполненоОбновление.ИдентификаторыОбъектовРасширений = Ложь;
Иначе
ВыполненоОбновление.ИдентификаторыОбъектовМетаданных = Ложь;
КонецЕсли;
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(ВыполненоОбновление);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -1403,11 +1453,13 @@
Если ОбъектыРасширений Тогда
СвойстваРасширений = Новый Структура;
ИдентификаторыКлючейРасширений = ИдентификаторыКлючейРасширений();
РасширенияБазыДанных = Новый Массив;
ИдентификаторыКлючейРасширений = ИдентификаторыКлючейРасширений(РасширенияБазыДанных);
СвойстваРасширений.Вставить("ИменаПодключенныхРасширений",
ИменаРасширений(ИсточникРасширенийКонфигурации.СеансАктивные, ИдентификаторыКлючейРасширений));
СвойстваРасширений.Вставить("ИменаНеподключенныхРасширений",
ИменаРасширений(ИсточникРасширенийКонфигурации.СеансОтключенные, ИдентификаторыКлючейРасширений));
ДополнитьИменаНеподключенныхРасширенийВСеансеБезРазделителей(СвойстваРасширений, РасширенияБазыДанных);
КонецЕсли;
СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(ОбъектыРасширений,, ИдентификаторыКлючейРасширений);
@@ -1854,13 +1906,16 @@
КонецФункции
Функция ИдентификаторыКлючейРасширений()
Функция ИдентификаторыКлючейРасширений(РасширенияБазыДанных = Неопределено)
Расширения = РасширенияКонфигурации.Получить();
ИдентификаторыКлючейРасширений = Новый Соответствие;
Для Каждого Расширение Из Расширения Цикл
КлючРасширения = НРег(Расширение.Имя) + " " + Base64Строка(Расширение.ХешСумма);
ИдентификаторыКлючейРасширений.Вставить(КлючРасширения, НРег(Расширение.УникальныйИдентификатор));
Если ТипЗнч(РасширенияБазыДанных) = Тип("Массив") Тогда
РасширенияБазыДанных.Добавить(Расширение);
КонецЕсли;
КонецЦикла;
Возврат ИдентификаторыКлючейРасширений;
@@ -2975,6 +3030,31 @@
КонецФункции
// Для процедуры ОбновитьДанные.
Процедура ДополнитьИменаНеподключенныхРасширенийВСеансеБезРазделителей(СвойстваРасширений, РасширенияБазыДанных)
Если Не СтандартныеПодсистемыСервер.ЭтоРазделенныйРежимСеансаБезРазделителей() Тогда
Возврат;
КонецЕсли;
ИменаПодключенныхРасширений = СвойстваРасширений.ИменаПодключенныхРасширений;
ИменаНеподключенныхРасширений = СвойстваРасширений.ИменаНеподключенныхРасширений;
Для Каждого Расширение Из РасширенияБазыДанных Цикл
ИдентификаторРасширения = НРег(Расширение.УникальныйИдентификатор);
ИмяРасширенияДляПоиска = НРег(Расширение.Имя);
Если ИменаПодключенныхРасширений.Получить(ИдентификаторРасширения) <> Неопределено
Или ИменаПодключенныхРасширений.Получить(ИмяРасширенияДляПоиска) <> Неопределено
Или ИменаНеподключенныхРасширений.Получить(ИдентификаторРасширения) <> Неопределено
Или ИменаНеподключенныхРасширений.Получить(ИмяРасширенияДляПоиска) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ИменаНеподключенныхРасширений.Вставить(ИмяРасширенияДляПоиска, Расширение.Имя);
ИменаНеподключенныхРасширений.Вставить(НРег(ИдентификаторРасширения), Расширение.Имя);
КонецЦикла;
КонецПроцедуры
// Для функций ИдентификаторОбъектаМетаданныхПоПолномуИмени, ИдентификаторыОбъектовМетаданных.
Функция ИдентификаторыОбъектовМетаданныхСПопыткойПовтора(ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент)
@@ -2989,15 +3069,20 @@
КонецПопытки;
Если Идентификаторы = Неопределено Тогда
ВыполненоОбновление = ОбновлениеСправочниковИдентификаторов();
Если Не ОбщегоНазначения.РазделениеВключено()
Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ОбновитьДанныеСправочника();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовМетаданных Тогда
ОбновитьДанныеСправочника();
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовРасширений Тогда
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();
КонецЕсли;
КонецЕсли;
Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(
@@ -3292,6 +3377,23 @@
КонецФункции
// Для функций ИдентификаторыОбъектовМетаданныхСПопыткойПовтора,
// ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора.
//
Функция ОбновлениеСправочниковИдентификаторов()
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Результат = ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Возврат Результат;
КонецФункции
// Для функций ОбъектМетаданныхПоИдентификатору, ОбъектыМетаданныхПоИдентификаторам.
Функция ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, ВызыватьИсключение)
@@ -3374,7 +3476,10 @@
КонецЕсли;
Если ОбъектыМетаданных = Неопределено Тогда
ОбновитьДанныеСправочника();
ВыполненоОбновление = ОбновлениеСправочниковИдентификаторов();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовМетаданных Тогда
ОбновитьДанныеСправочника();
КонецЕсли;
ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы,
ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение);
КонецЕсли;
@@ -3509,7 +3614,7 @@
КонецЕсли;
Если Свойства.ОбъектРасширений Тогда
ОбъектРасширенияНеСуществует = Не Свойства.ПометкаУдаления;
ОбъектРасширенияНеСуществует = Свойства.ПометкаУдаления;
ИмяРасширения = "";
ИдентификаторРасширения = ?(СтрНачинаетсяС(Свойства.ИдентификаторРасширения, "? "),
Сред(Свойства.ИдентификаторРасширения, 3), Свойства.ИдентификаторРасширения);
@@ -59,7 +59,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<choiceButton>true</choiceButton>
<listChoiceMode>true</listChoiceMode>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
@@ -581,6 +581,10 @@
<event>OnReadAtServer</event>
<name>ПриЧтенииНаСервере</name>
</handlers>
<handlers>
<event>BeforeWrite</event>
<name>ПередЗаписью</name>
</handlers>
<handlers>
<event>BeforeWriteAtServer</event>
<name>ПередЗаписьюНаСервере</name>
@@ -67,6 +67,31 @@
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Для Каждого Условие Из УсловияВидимости Цикл
ИндексСтроки = УсловияВидимости.Индекс(Условие);
Если Не ЗначениеЗаполнено(Условие.ВидСравнения) Тогда
ТекстСообщения = НСтр("ru = 'Укажите вид сравнения'");
Поле = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("УсловияВидимости[%1].ПредставлениеВидаСравнения", Формат(ИндексСтроки, "ЧГ=0;"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , Поле, , Отказ);
КонецЕсли;
Если Не ЗначениеЗаполнено(Условие.Поле) Тогда
ТекстСообщения = НСтр("ru = 'Выберите поле'");
Поле = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("УсловияВидимости[%1].ПредставлениеПоля", Формат(ИндексСтроки, "ЧГ=0;"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , Поле, , Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУсловияВидимости
@@ -94,6 +119,7 @@
КонецПроцедуры
&НаКлиенте
Процедура УсловияВидимостиВидСравненияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
@@ -1857,9 +1857,6 @@
<edit>
<common>true</common>
</edit>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>НаборыСвойств.НаименованиеНаДругихЯзыках</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>НаборыСвойств.КоличествоРеквизитов</segments>
</notDefaultUseAlwaysAttributes>
@@ -635,26 +635,46 @@
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Наборы.Ссылка КАК Ссылка
| Наборы.Ссылка КАК Ссылка,
| Наборы.ПометкаУдаления КАК ПометкаУдаления,
| Наборы.Предопределенный КАК Предопределенный,
| Наборы.ЭтоГруппа КАК ЭтоГруппа,
| Наборы.Родитель КАК Родитель,
| Наборы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
| Наборы.ИмяПредопределенногоНабора КАК ИмяПредопределенногоНабора
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы
|ГДЕ
| Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка)";
Наборы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Наборы = Запрос.Выполнить().Выгрузить();
ДоступныеНаборы = Новый Массив;
ДоступныеНаборыСписок.Очистить();
Для каждого Ссылка Из Наборы Цикл
ВидыСвойствНабора = УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Ссылка, Ложь);
СвойстваНабора = Новый Структура;
СвойстваНабора.Вставить("ПометкаУдаления");
СвойстваНабора.Вставить("Предопределенный");
СвойстваНабора.Вставить("ЭтоГруппа");
СвойстваНабора.Вставить("Родитель");
СвойстваНабора.Вставить("ИмяПредопределенныхДанных");
СвойстваНабора.Вставить("ИмяПредопределенногоНабора");
Для Каждого Строка Из Наборы Цикл
Если СтрНачинаетсяС(Строка.ИмяПредопределенныхДанных, "Удалить") Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СвойстваНабора, Строка);
ВидыСвойствНабора = УправлениеСвойствамиСлужебный.ВидыСвойствНабора(СвойстваНабора, Ложь);
Если ЭтоНаборыДополнительныхСведений
И ВидыСвойствНабора.ДополнительныеСведения
ИЛИ НЕ ЭтоНаборыДополнительныхСведений
И ВидыСвойствНабора.ДополнительныеРеквизиты Тогда
ДоступныеНаборы.Добавить(Ссылка);
ДоступныеНаборыСписок.Добавить(Ссылка);
ДоступныеНаборы.Добавить(Строка.Ссылка);
ДоступныеНаборыСписок.Добавить(Строка.Ссылка);
КонецЕсли;
КонецЦикла;
@@ -670,7 +690,7 @@
ПриИзмененииТекущегоНабораНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииТекущегоНабора()
@@ -822,7 +842,7 @@
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Набор", ТекущийНабор);
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык());
Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
Если Не ПоказатьНеиспользуемыеРеквизиты Тогда
@@ -48,9 +48,16 @@
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда
Возврат;
КонецЕсли;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Если ОбщегоНазначения.ЭтоОсновнойЯзык() Тогда
Возврат;
КонецЕсли;
#Иначе
Если СтрСравнить(СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"), ОбщегоНазначенияКлиент.КодОсновногоЯзыка()) = 0 Тогда
Возврат;
КонецЕсли;
#КонецЕсли
Если ЗначениеЗаполнено(Данные.Родитель) Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
@@ -192,8 +192,9 @@
Кэш = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилейСеанса();
НовоеЗначение = Кэш.ХешСумма;
УжеИзменен = Ложь;
ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ОбновленныеПоставляемыеПрофили";
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина, УжеИзменен);
Если СтароеЗначение = НовоеЗначение Тогда
Возврат;
@@ -219,7 +220,7 @@
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтароеЗначение) Тогда
Если УжеИзменен Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
КонецЕсли;
@@ -236,14 +237,15 @@
Кэш = УправлениеДоступомСлужебныйПовтИсп.ОписаниеПоставляемыхПрофилейСеанса();
НовоеЗначение = Кэш.ХешСумма;
УжеИзменен = Ложь;
ИмяПараметра = "СтандартныеПодсистемы.УправлениеДоступом.ОбновленныеНепоставляемыеПрофили";
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина, УжеИзменен);
Если СтароеЗначение = НовоеЗначение Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(СтароеЗначение) Тогда
Если УжеИзменен Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
КонецЕсли;
@@ -795,6 +797,92 @@
КонецФункции
// Сравнивает часть объекта в базе данных с той же частью объекта в памяти.
//
// Параметры:
// Профиль - СправочникОбъект.ПрофилиГруппДоступа - объект в памяти.
//
// СтарыеЗначения - Структура:
// * Наименование - Строка
// * Родитель - СправочникСсылка.ПрофилиГруппДоступа
// * Роли - РезультатЗапроса
// * Назначение - РезультатЗапроса
// * ВидыДоступа - РезультатЗапроса
// * ЗначенияДоступа - РезультатЗапроса
//
Функция ПоставляемыеОбластиПрофиляИзменены(НовыйПрофиль, СтарыеЗначения) Экспорт
Если ВРег(НовыйПрофиль.Наименование) <> ВРег(СтарыеЗначения.Наименование) Тогда
Возврат Истина;
КонецЕсли;
Если НовыйПрофиль.Родитель <> СтарыеЗначения.Родитель Тогда
ОписанияПрофилей = УправлениеДоступомСлужебный.ПоставляемыеПрофили().ОписанияПрофилей;
СвойстваПрофиля = ОписанияПрофилей.Получить(Строка(НовыйПрофиль.ИдентификаторПоставляемыхДанных)); // См. СвойстваПоставляемогоПрофиля
Если СвойстваПрофиля <> Неопределено
И ЗначениеЗаполнено(СвойстваПрофиля.Родитель)
И ЗначениеЗаполнено(ПоставляемыйПрофильПоИдентификатору(СвойстваПрофиля.Родитель)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если НовыйПрофиль.ЭтоГруппа Тогда
Возврат Ложь;
КонецЕсли;
СтарыйПрофиль = Новый Структура;
СтарыйПрофиль.Вставить("Роли", СтарыеЗначения.Роли.Выгрузить());
СтарыйПрофиль.Вставить("Назначение", СтарыеЗначения.Назначение.Выгрузить());
СтарыйПрофиль.Вставить("ВидыДоступа", СтарыеЗначения.ВидыДоступа.Выгрузить());
СтарыйПрофиль.Вставить("ЗначенияДоступа", СтарыеЗначения.ЗначенияДоступа.Выгрузить());
Если НовыйПрофиль.Роли.Количество() <> СтарыйПрофиль.Роли.Количество()
Или НовыйПрофиль.ВидыДоступа.Количество() <> СтарыйПрофиль.ВидыДоступа.Количество()
Или НовыйПрофиль.ЗначенияДоступа.Количество() <> СтарыйПрофиль.ЗначенияДоступа.Количество()
Или НовыйПрофиль.Назначение.Количество() <> СтарыйПрофиль.Назначение.Количество() Тогда
Возврат Истина;
КонецЕсли;
Для Каждого Строка Из НовыйПрофиль.Роли Цикл
Если СтарыйПрофиль.Роли.Найти(Строка.Роль, "Роль") = Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из НовыйПрофиль.ВидыДоступа Цикл
Отбор = Новый Структура("ВидДоступа, Предустановленный, ВсеРазрешены",
Строка.ВидДоступа, Строка.Предустановленный, Строка.ВсеРазрешены);
Если СтарыйПрофиль.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из НовыйПрофиль.ВидыДоступа Цикл
Отбор = Новый Структура("ВидДоступа, Предустановленный, ВсеРазрешены",
Строка.ВидДоступа, Строка.Предустановленный, Строка.ВсеРазрешены);
Если СтарыйПрофиль.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из НовыйПрофиль.ЗначенияДоступа Цикл
Отбор = Новый Структура("ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие",
Строка.ВидДоступа, Строка.ЗначениеДоступа, Строка.ВключаяНижестоящие);
Если СтарыйПрофиль.ЗначенияДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из НовыйПрофиль.Назначение Цикл
Если СтарыйПрофиль.Назначение.Найти(Строка.ТипПользователей, "ТипПользователей") = Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
// Определяет наличие начального заполнения для профиля групп доступа в переопределяемом модуле.
//
// Параметры:
@@ -989,9 +1077,10 @@
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
УжеИзменен = Ложь;
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина, УжеИзменен);
Если СтароеЗначение <> НовоеЗначение Тогда
Если ЗначениеЗаполнено(СтароеЗначение) Тогда // Не первое обновление.
Если УжеИзменен Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
@@ -1355,9 +1444,10 @@
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
УжеИзменен = Ложь;
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина, УжеИзменен);
Если СтароеЗначение <> НовоеЗначение Тогда
Если ЗначениеЗаполнено(СтароеЗначение) Тогда // Не первое обновление.
Если УжеИзменен Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
@@ -63,8 +63,15 @@
Справочники.ПрофилиГруппДоступа.ЗаполнитьСтандартныеРолиРасширений(Роли);
Если Не ДополнительныеСвойства.Свойство("НеОбновлятьРеквизитПоставляемыйПрофильИзменен") Тогда
ПоставляемыйПрофильИзменен =
НовоеЗначениеПоставляемыйПрофильИзменен =
Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен(ЭтотОбъект);
Если ПоставляемыйПрофильИзменен <> НовоеЗначениеПоставляемыйПрофильИзменен
И (Не НовоеЗначениеПоставляемыйПрофильИзменен
Или Справочники.ПрофилиГруппДоступа.ПоставляемыеОбластиПрофиляИзменены(ЭтотОбъект, СтарыеЗначения)) Тогда
ПоставляемыйПрофильИзменен = НовоеЗначениеПоставляемыйПрофильИзменен;
КонецЕсли;
КонецЕсли;
// Обновление наименования у персональных групп доступа этого профиля (если есть).
@@ -441,6 +448,8 @@
// Возвращаемое значение:
// Структура:
// * Ссылка - СправочникСсылка.ПрофилиГруппДоступа
// * Наименование - Строка
// * Родитель - СправочникСсылка.ПрофилиГруппДоступа
// * ПометкаУдаления - Булево
// * Роли - РезультатЗапроса
// * Назначение - РезультатЗапроса
@@ -450,7 +459,7 @@
Функция СтарыеЗначения()
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка,
"Ссылка, ПометкаУдаления, Роли, Назначение, ВидыДоступа, ЗначенияДоступа");
"Ссылка, Наименование, Родитель, ПометкаУдаления, Роли, Назначение, ВидыДоступа, ЗначенияДоступа");
КонецФункции
@@ -567,33 +567,6 @@
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
</items>
<items xsi:type="form:Button">
<name>ОтчетыУдалить</name>
<id>1002</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОтчетыУдалитьРасширеннаяПодсказка</name>
<id>1003</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Отчеты.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:FormGroup">
<name>КомандыПеремещения</name>
<id>1004</id>
@@ -670,7 +643,9 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
<extInfo xsi:type="form:ButtonGroupExtInfo">
<representation>Compact</representation>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ОтчетыСформироватьОтчет</name>
@@ -698,6 +673,33 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ОтчетыУдалить</name>
<id>1002</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОтчетыУдалитьРасширеннаяПодсказка</name>
<id>1003</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Отчеты.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:FormGroup">
<name>КоманднаяПанельОтчеты</name>
<id>354</id>
@@ -1721,24 +1721,22 @@
&НаКлиенте
Процедура ПредпросмотрШаблона(Команда)
ДобавитьШаблон();
Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда
Шаблон = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
ИначеЕсли ТекущийЭлемент = Элементы.ТекстПисьма Тогда
Шаблон = Объект.ТекстПисьма;
ИначеЕсли ТекущийЭлемент = Элементы.ТемаПисьма Тогда
Шаблон = Объект.ТемаПисьма;
КонецЕсли;
Шаблон = Объект.ТемаПисьма + Символы.ПС + Символы.ПС + Шаблон;
СформированныеОтчеты = "";
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
СформированныеОтчеты = СформированныеОтчеты
+ Символы.ПС
+ СтрокаОтчет.Представление
+ " ("
+ ?(СтрокаОтчет.Форматы = ПредставлениеФорматовПоУмолчанию(), ФорматыПоУмолчанию, СтрокаОтчет.Форматы)
+ ")";
СформированныеОтчеты = СформированныеОтчеты + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)",
СтрокаОтчет.Представление,
?(СтрокаОтчет.Форматы = ПредставлениеФорматовПоУмолчанию(), ФорматыПоУмолчанию, СтрокаОтчет.Форматы));
КонецЦикла;
СформированныеОтчеты = СокрЛ(СформированныеОтчеты);
@@ -1757,11 +1755,10 @@
ПараметрыШаблона.Вставить("СформированныеОтчеты", СформированныеОтчеты);
ПараметрыШаблона.Вставить("СпособДоставки", СпособДоставки);
#Если НЕ МобильныйКлиент Тогда
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, ПараметрыШаблона));
ТекстовыйДокумент.Показать();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
@@ -220,7 +220,8 @@
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ОбновлениеИнформационнойБазы.ЗаполнитьЭлементыНачальнымиДанными(Параметры, Метаданные.Справочники.РолиИсполнителей, Истина);
НастройкиЗаполнения = ОбновлениеИнформационнойБазы.НастройкиЗаполнения();
ОбновлениеИнформационнойБазы.ЗаполнитьЭлементыНачальнымиДанными(Параметры, Метаданные.Справочники.РолиИсполнителей, НастройкиЗаполнения);
КонецПроцедуры
@@ -0,0 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Показывает сертификаты для подписания или расшифровки данных.
<div>
<div>По умолчанию показываются личные сертификаты. Если список пуст, то на компьютере нет подходящих личных сертификатов.</div>
<div>Включите флажок, для того чтобы <b>Показывать все сертификаты</b>.</div>
<div>Для подписания данных используются только личные сертификаты.</div>
<div>Если сертификаты найдены, выберите нужный, нажмите кнопку <b>Далее</b> для заполнения сведений о сертификате.</div>
<h3>Добавление (выбор) сертификата</h3>
<div>
<ul><li>Данные сертификата заполняются автоматически.</li>
<li>Заполните недостающие поля:</li>
<ul><li><b>Пользователь</b> - выберите из списка</li>
<li><b>Организация</b> - выберите из списка</li></ul><li>При добавлении сертификата для подписания или расшифровки данных необходимо ввести <b>Пароль</b>.</li>
<li>Для добавления (выбора) сертификата нажмите кнопку <b>Добавить</b> (<b>Выбрать)</b>.</li></ul><h3>См. также:</h3></div></div>
<div>
<ul><li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a>.</li></ul></div>
<div><br></div></body></html>
@@ -0,0 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Показывает сертификаты для шифрования.
<div>
<div>По умолчанию показываются личные сертификаты. Если список пуст, то на компьютере нет подходящих личных сертификатов.</div>
<div>Включите флажок, для того чтобы <b>Показывать все сертификаты</b>.</div>
<div>Для шифрования данных могут быть использованы любые сертификаты. </div>
<div>Если сертификаты найдены, выберите нужный, нажмите кнопку <b>Далее</b> для заполнения сведений о сертификате.</div>
<h3 style="font-size: 13.4399995803833px;">Добавление сертификата</h3>
<div>
<ul><li>Данные сертификата заполняются автоматически.</li>
<li>Заполните недостающие поля:</li>
<ul><li><b>Пользователь</b> - выберите из списка</li>
<li><b>Организация</b> - выберите из списка</li></ul><li>При добавлении сертификата только для шифрования данных ввод пароля не требуется, однако он будет нужен для расшифровки данных.</li></ul></div></div>
</body></html>
@@ -14,12 +14,17 @@
Сертификат = Параметры.Сертификат;
ЗаявлениеНаВыпускСертификатаДоступно = ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно;
// Локализация
Если ЗаявлениеНаВыпускСертификатаДоступно И ЗначениеЗаполнено(Сертификат) Тогда
ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(
"Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата");
ВыпущенныеСертификаты = ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ВыпущенныеСертификаты(
Сертификат);
КонецЕсли;
// Конец Локализация
ЕстьПеревыпущенные = ВыпущенныеСертификаты.Количество() > 0;
Элементы.ДекорацияПеревыпущен.Видимость = ЕстьПеревыпущенные;
@@ -235,6 +235,74 @@
<choiceHistoryOnInput>DontUse</choiceHistoryOnInput>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаДополнительныеСведения</name>
<id>488</id>
<items xsi:type="form:Decoration">
<name>ДекорацияДополнительныеСведения</name>
<id>493</id>
<title>
<key>ru</key>
<value>Неквалифицированный сертификат: выпущен удостоверяющим центром, не аккредитованным на момент выпуска сертификата.</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияДополнительныеСведенияРасширеннаяПодсказка</name>
<id>495</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияДополнительныеСведенияКонтекстноеМеню</name>
<id>494</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
<backColor xsi:type="core:ColorRef">
<color>Style.ToolTipBackColor</color>
</backColor>
</extInfo>
</items>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Дополнительные сведения</value>
</title>
<extendedTooltip>
<name>ГруппаДополнительныеСведенияРасширеннаяПодсказка</name>
<id>489</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаОтозван</name>
<id>483</id>
@@ -1381,6 +1449,17 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>РезультатПроверкиУдостоверяющегоЦентра</name>
<id>26</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Подписать</name>
<title>
@@ -60,6 +60,8 @@
Элементы.ТипПодписи.Видимость = Ложь;
КонецЕсли;
ОбновитьВидимостьПредупреждения();
КонецПроцедуры
&НаКлиенте
@@ -330,6 +332,13 @@
#Область СлужебныеПроцедурыИФункции
&НаСервереБезКонтекста
Функция ОшибкаСертификатПомеченКакОтозванный()
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаСертификатПомеченКакОтозванный()
КонецФункции
&НаКлиенте
Процедура ПродолжитьОткрытие(Оповещение, ОбщиеВнутренниеДанные, КлиентскиеПараметры) Экспорт
@@ -431,6 +440,20 @@
КонецПроцедуры
&НаСервере
Процедура ОбновитьВидимостьПредупреждения()
Элементы.ГруппаОтозван.Видимость = СертификатОтозван;
Если Не СертификатОтозван И ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра) Тогда
Элементы.ГруппаДополнительныеСведения.Видимость = ЗначениеЗаполнено(
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения);
Элементы.ДекорацияДополнительныеСведения.Заголовок =
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьПеременныеФормы()
@@ -505,12 +528,13 @@
КонецЕсли;
ЭлектроннаяПодписьСлужебный.СертификатПриИзмененииНаСервере(ЭтотОбъект, ОтпечаткиСертификатовНаКлиенте);
Элементы.ГруппаОтозван.Видимость = СертификатОтозван;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
КонецЕсли;
КонецЕсли;
ОбновитьВидимостьПредупреждения();
КонецПроцедуры
@@ -553,7 +577,17 @@
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки",
НСтр("ru = 'Сертификат помечен в программе как отозванный.
|Выберите другой сертификат.'"));
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере);
ДополнительныеДанныеОшибки = Новый Структура("ДополнительныеДанныеПроверокНаКлиенте", ОшибкаСертификатПомеченКакОтозванный());
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере,,ДополнительныеДанныеОшибки);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра)
И Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда
ПредупреждениеОбОшибке = РезультатПроверкиУдостоверяющегоЦентра.Предупреждение; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ПредупреждениеОбОшибке.ТекстОшибки);
ДополнительныеДанныеОшибки = Новый Структура("ДополнительныеДанныеПроверокНаКлиенте", ПредупреждениеОбОшибке);
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере,,ДополнительныеДанныеОшибки);
Возврат;
КонецЕсли;
@@ -748,7 +782,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере, НеподписанныеДанные = Неопределено)
Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере, НеподписанныеДанные = Неопределено, ДополнительныеДанные = Неопределено)
Если ОписаниеДанных.Свойство("ПрекратитьВыполнение") Тогда
@@ -772,6 +806,11 @@
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда
Для Каждого КлючИЗначение Из ДополнительныеДанные Цикл
ДополнительныеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КонецЕсли;
Если НеподписанныеДанные <> Неопределено Тогда
ДополнительныеПараметры.Вставить("НеподписанныеДанные", НеподписанныеДанные);
КонецЕсли;
@@ -840,4 +879,4 @@
// Конец Локализация
#КонецОбласти
#КонецОбласти
@@ -1402,7 +1402,7 @@
ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Истина, ОписаниеОшибки);
// Подписание.
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Если ПроверкиНаСервере.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
@@ -126,6 +126,12 @@
Возврат;
КонецЕсли;
Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "РазрешенныеНеаккредитованныеУЦ" Тогда
ОбновитьВидимостьПредупреждения();
КонецЕсли;
КонецПроцедуры
&НаСервере
@@ -574,8 +580,10 @@
Если РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует
И Не ЗначениеЗаполнено(ДанныеПредупреждения.ТекстОшибки) Тогда
Элементы.ПредупреждениеГруппа.Видимость = ЗначениеЗаполнено(ДанныеПредупреждения.ДополнительныеСведения);
Элементы.Предупреждение.Заголовок = ДанныеПредупреждения.ДополнительныеСведения;
Элементы.ПредупреждениеГруппа.Видимость = Ложь;
Иначе
Элементы.ПредупреждениеГруппа.Видимость = Истина;
МассивСтрок = Новый Массив;
@@ -181,12 +181,17 @@
НаборЗаписейОповещений.Отбор.Сертификат.Установить(Выборка.Ссылка);
Если СертификатОбъект.Пользователи.Количество() > 0 Тогда
Для Каждого СтрокаПользователь Из СертификатОбъект.Пользователи Цикл
ТаблицаПользователей = СертификатОбъект.Пользователи.Выгрузить();
ТаблицаПользователей.Свернуть("Пользователь");
Для Каждого СтрокаПользователь Из ТаблицаПользователей Цикл
ЗаписьНабораОповещений = НаборЗаписейОповещений.Добавить();
ЗаписьНабораОповещений.Сертификат = Выборка.Ссылка;
ЗаписьНабораОповещений.Пользователь = СтрокаПользователь.Пользователь;
ЗаписьНабораОповещений.Оповещен = Истина;
КонецЦикла;
ИначеЕсли ЗначениеЗаполнено(СертификатОбъект.Пользователь) Тогда
ЗаписьНабораОповещений = НаборЗаписейОповещений.Добавить();
ЗаписьНабораОповещений.Сертификат = Выборка.Ссылка;
@@ -681,6 +681,11 @@
<key>ru</key>
<value>Добавление сертификата для шифрования</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
@@ -713,6 +718,11 @@
<key>ru</key>
<value>Выбор сертификата для подписания или расшифровки</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
@@ -809,7 +819,7 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_1_27</name>
<name>КомпонентаExtraCryptoAPI_3_0_1_31</name>
<synonym>
<key>ru</key>
<value>Компонента ExtraCryptoAPI</value>
@@ -406,6 +406,9 @@
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>СписокСостоянийОригинала</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
@@ -431,6 +434,9 @@
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>СписокСостоянийОригинала</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
@@ -295,6 +295,7 @@
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>OnValueChange</editTextUpdate>
<textSize>Normal</textSize>
</extInfo>
</items>
@@ -467,6 +468,7 @@
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>OnValueChange</editTextUpdate>
<textSize>Normal</textSize>
</extInfo>
</items>
@@ -2286,10 +2288,10 @@
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ПриПроверкеОбнаруженыОшибки</name>
<name>ТехническиеПодробностиОшибки</name>
<id>275</id>
<items xsi:type="form:Decoration">
<name>КартинкаПриПроверкеОбнаруженыОшибки</name>
<name>КартинкаТехническиеПодробностиОшибки</name>
<id>279</id>
<title>
<key>ru</key>
@@ -2301,7 +2303,7 @@
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КартинкаПредупреждениеРасширеннаяПодсказка1</name>
<name>КартинкаТехническиеПодробностиОшибкиРасширеннаяПодсказка</name>
<id>281</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -2311,7 +2313,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КартинкаПредупреждениеКонтекстноеМеню1</name>
<name>КартинкаТехническиеПодробностиОшибкиКонтекстноеМеню</name>
<id>280</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -2324,10 +2326,10 @@
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаПриПроверкеОбнаруженыОшибки</name>
<name>ГруппаТехническиеПодробностиОшибки</name>
<id>282</id>
<items xsi:type="form:FormField">
<name>ТекстПриПроверкеОбнаруженыОшибки</name>
<name>ТекстТехническиеПодробностиОшибки</name>
<id>284</id>
<visible>true</visible>
<enabled>true</enabled>
@@ -2339,7 +2341,7 @@
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>СообщенияОбОшибкахРасширеннаяПодсказка1</name>
<name>ТекстТехническиеПодробностиОшибкиРасширеннаяПодсказка</name>
<id>286</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -2349,7 +2351,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СообщенияОбОшибкахКонтекстноеМеню1</name>
<name>ТекстТехническиеПодробностиОшибкиКонтекстноеМеню</name>
<id>285</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -2362,7 +2364,7 @@
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>Opening</event>
<name>ТекстПриПроверкеОбнаруженыОшибкиОткрытие</name>
<name>ТекстТехническиеПодробностиОшибкиОткрытие</name>
</handlers>
<height>7</height>
<horizontalStretch>true</horizontalStretch>
@@ -2383,7 +2385,7 @@
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>НужнаПомощьПриПроверкеОбнаруженыОшибки</name>
<name>НужнаПомощьТехническиеПодробностиОшибки</name>
<id>287</id>
<title>
<key>ru</key>
@@ -2395,7 +2397,7 @@
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НужнаПомощьРасширеннаяПодсказка1</name>
<name>НужнаПомощьТехническиеПодробностиОшибкиРасширеннаяПодсказка</name>
<id>289</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -2405,7 +2407,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НужнаПомощьКонтекстноеМеню1</name>
<name>НужнаПомощьТехническиеПодробностиОшибкиКонтекстноеМеню</name>
<id>288</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -2432,7 +2434,7 @@
<value>При проверке обнаружены ошибки</value>
</title>
<extendedTooltip>
<name>ГруппаСообщенияОбОшибкахРасширеннаяПодсказка1</name>
<name>ГруппаТехническиеПодробностиОшибкиРасширеннаяПодсказка</name>
<id>283</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -2458,10 +2460,10 @@
</userVisible>
<title>
<key>ru</key>
<value>При проверке обнаружены ошибки</value>
<value>Технические подробности ошибки</value>
</title>
<extendedTooltip>
<name>ПриПроверкеОбнаруженыОшибкиРасширеннаяПодсказка</name>
<name>ТехническиеПодробностиОшибкиРасширеннаяПодсказка</name>
<id>276</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -2648,6 +2650,367 @@ vasyapupkin@example.com завершена.</value>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ПриПроверкеОбнаруженыОшибки</name>
<id>393</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОписаниеОшибки</name>
<id>395</id>
<items xsi:type="form:Decoration">
<name>КартинкаПриПроверкеОбнаруженыОшибки</name>
<id>397</id>
<title>
<key>ru</key>
<value>Картинка при проверке обнаружены ошибки</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КартинкаПриПроверкеОбнаруженыОшибкиРасширеннаяПодсказка</name>
<id>399</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КартинкаПриПроверкеОбнаруженыОшибкиКонтекстноеМеню</name>
<id>398</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Предупреждение32</picture>
</picture>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ТекстСообщенияОбОшибках</name>
<id>402</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СообщенияОбОшибках</segments>
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>ТекстСообщенияОбОшибкахРасширеннаяПодсказка</name>
<id>404</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТекстСообщенияОбОшибкахКонтекстноеМеню</name>
<id>403</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<readOnly>true</readOnly>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>40</width>
<height>2</height>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>false</verticalStretch>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<backColor xsi:type="core:ColorRef">
<color>Style.FormBackColor</color>
</backColor>
<borderColor xsi:type="core:ColorRef">
<color>Style.FormBackColor</color>
</borderColor>
<textSize>Normal</textSize>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Описание ошибки</value>
</title>
<extendedTooltip>
<name>ГруппаОписаниеОшибкиРасширеннаяПодсказка</name>
<id>396</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаВозможныеПричины</name>
<id>405</id>
<items xsi:type="form:Decoration">
<name>ДекорацияВозможныеПричины</name>
<id>407</id>
<title>
<key>ru</key>
<value>Декорация возможные причины</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияВозможныеПричиныРасширеннаяПодсказка</name>
<id>409</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияВозможныеПричиныКонтекстноеМеню</name>
<id>408</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Возможные причины</value>
</title>
<extendedTooltip>
<name>ГруппаВозможныеПричиныРасширеннаяПодсказка</name>
<id>406</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<controlRepresentation>Button</controlRepresentation>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаСпособыУстранения</name>
<id>410</id>
<items xsi:type="form:Decoration">
<name>ДекорацияСпособыУстранения</name>
<id>412</id>
<title>
<key>ru</key>
<value>Декорация способы устранения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияСпособыУстраненияРасширеннаяПодсказка</name>
<id>414</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияСпособыУстраненияКонтекстноеМеню</name>
<id>413</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Способы устранения</value>
</title>
<extendedTooltip>
<name>ГруппаСпособыУстраненияРасширеннаяПодсказка</name>
<id>411</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<controlRepresentation>Button</controlRepresentation>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаДополнительныеСсылки</name>
<id>415</id>
<items xsi:type="form:Decoration">
<name>РекомендацииПоРешениюТиповыхПроблем</name>
<id>417</id>
<title>
<key>ru</key>
<value>Рекомендации по решению типовых проблем</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>РекомендацииПоРешениюТиповыхПроблемРасширеннаяПодсказка</name>
<id>419</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РекомендацииПоРешениюТиповыхПроблемКонтекстноеМеню</name>
<id>418</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<groupHorizontalAlign>Left</groupHorizontalAlign>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>Click</event>
<name>НужнаПомощьНажатие</name>
</handlers>
<hyperlink>true</hyperlink>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Дополнительные ссылки</value>
</title>
<verticalStretch>true</verticalStretch>
<extendedTooltip>
<name>ГруппаДополнительныеСсылкиРасширеннаяПодсказка</name>
<id>416</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<verticalAlign>Bottom</verticalAlign>
<behavior>Auto</behavior>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>При проверке обнаружены ошибки</value>
</title>
<extendedTooltip>
<name>ПриПроверкеОбнаруженыОшибкиРасширеннаяПодсказка</name>
<id>394</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -213,13 +213,13 @@
Процедура СообщенияОбОшибкахОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
Элементы.Страницы.ТекущаяСтраница = Элементы.ТехническиеПодробностиОшибки;
НастроитьЭлементыТекущейСтраницы();
КонецПроцедуры
&НаКлиенте
Процедура ТекстПриПроверкеОбнаруженыОшибкиОткрытие(Элемент, СтандартнаяОбработка)
Процедура ТекстТехническиеПодробностиОшибкиОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи;
@@ -252,8 +252,11 @@
ПредыдущаяСтраница = Неопределено;
Если ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда
ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи;
ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Или ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки Тогда
ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Или ТекущаяСтраница = Элементы.ТехническиеПодробностиОшибки Тогда
ПредыдущаяСтраница = Элементы.НастройкаУчетнойЗаписи;
ИначеЕсли ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки Тогда
ПредыдущаяСтраница = Элементы.НастройкиАвторизацииПриложения;
ПроверкаЗавершиласьСОшибками = Ложь;
КонецЕсли;
Если ПредыдущаяСтраница <> Неопределено Тогда
@@ -305,7 +308,7 @@
ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница;
СледующаяСтраница = Неопределено;
Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Или ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки Тогда
Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Или ТекущаяСтраница = Элементы.ТехническиеПодробностиОшибки Тогда
ПроверитьЗаполнениеНаСтраницеНастройкаУчетнойЗаписи(Отказ);
Если Не Отказ И Не НастройкиЗаполнены Тогда
ЗаполнитьНастройкиУчетнойЗаписи();
@@ -380,7 +383,7 @@
КонецЕсли;
Если ПроверкаЗавершиласьСОшибками Тогда
СледующаяСтраница = Элементы.НастройкаУчетнойЗаписи;
СледующаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
Иначе
Если СпособНастройки = "Автоматически" Тогда
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
@@ -583,7 +586,7 @@
КонецЕсли;
Иначе
Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи
И ПроверкаЗавершиласьСОшибками Или ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки Тогда
И ПроверкаЗавершиласьСОшибками Или ТекущаяСтраница = Элементы.ТехническиеПодробностиОшибки Тогда
ЗаголовокКнопкиДалее = НСтр("ru = 'Повторить'");
ИначеЕсли ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи
И СпособНастройки = "Автоматически" Тогда
@@ -603,7 +606,8 @@
Элементы.КнопкаДалее.КнопкаПоУмолчанию =ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи;
Элементы.КнопкаДалее.Доступность = Не (ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи И ПроверкаПропущена);
Элементы.КнопкаДалее.Видимость = Не (ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи И СпособНастройки = "Вручную")
И Не (ТекущаяСтраница = Элементы.Авторизация И Не ЭтоВебКлиент());
И Не (ТекущаяСтраница = Элементы.Авторизация И Не ЭтоВебКлиент())
И Не ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
// КнопкаНазад
Элементы.КнопкаНазад.Видимость = ТекущаяСтраница <> Элементы.НастройкаУчетнойЗаписи
@@ -644,6 +648,7 @@
Если ТекущаяСтраница = Элементы.Авторизация
И Элементы.ВариантыАвторизации.ТекущаяСтраница = Элементы.ВстроенныйБраузер Тогда
Активизировать();
ПодключитьОбработчикОжидания("ПроверитьРезультатАвторизации", 5, Истина );
КонецЕсли;
КонецПроцедуры
@@ -1106,20 +1111,49 @@
&НаКлиенте
Процедура ВебСтраницаДокументСформирован(Элемент)
ПроверитьРезультатАвторизации();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьРезультатАвторизации()
#Если Не ВебКлиент Тогда
ОтключитьОбработчикОжидания("ПроверитьРезультатАвторизации");
НастройкиАвторизации = НастройкиАвторизацииНаПочтовомСервере; // см. НастройкиАвторизацииНаПочтовомСервере
Если СтрНачинаетсяС(НРег(Элемент.Документ.URL), НРег(АдресПеренаправления)) Тогда
ПриПолученииОтветаПочтовогоСервера(Элемент.Документ.URL, НастройкиАвторизации.АдресПолученияКлюча);
ПерейтиНаСледующуюСтраницу();
АдресПолученияКлюча = НастройкиАвторизации.АдресПолученияКлюча;
ОтветСервера = "";
Если СтрНачинаетсяС(НРег(Элементы.ВебСтраница.Документ.URL), НРег(АдресПеренаправления)) Тогда
ОтветСервера = Элементы.ВебСтраница.Документ.URL;
ИначеЕсли СтрНачинаетсяС(ВебСтраница, "{") И СтрЗаканчиваетсяНа(ВебСтраница, "}") Тогда
ОтветСервера = ВебСтраница;
ИначеЕсли Элементы.ВебСтраница.Документ.contentType = "application/json" Тогда
ОтветСервера = Элементы.ВебСтраница.Документ.body.innerText;
Иначе
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Авторизация Тогда
ПодключитьОбработчикОжидания("ПроверитьРезультатАвторизации", 5, Истина);
КонецЕсли;
Возврат;
КонецЕсли;
ПриПолученииОтветаПочтовогоСервера(ОтветСервера, АдресПолученияКлюча);
ПерейтиНаСледующуюСтраницу();
#КонецЕсли
КонецПроцедуры
&НаСервере
Процедура ПриПолученииОтветаПочтовогоСервера(СтрокаURI, АдресПолученияКлюча)
Процедура ПриПолученииОтветаПочтовогоСервера(СтрокаПараметров, АдресПолученияКлюча)
Если СтрНачинаетсяС(СтрокаПараметров, "{") Тогда
Ответ = РаботаСПочтовымиСообщениямиСлужебный.JSONВЗначение(СтрокаПараметров);
Иначе
Ответ = ПараметрыИзСтрокиURI(СтрокаПараметров);
КонецЕсли;
Ответ = ПараметрыИзСтрокиURI(СтрокаURI);
КодАвторизации = Ответ["code"];
КодОшибки = Ответ["error"];
ТекстОшибки = Ответ["error_description"];
@@ -1128,21 +1162,18 @@
ТекстОшибки = РаскодироватьСтроку(ТекстОшибки, СпособКодированияСтроки.КодировкаURL);
КонецЕсли;
Если ИдентификаторЗапроса <> Ответ["state"] Тогда
СообщенияОбОшибках = НСтр("ru = 'Не удалось авторизоваться на сервере %1. Неверный идентификатор ответа.'");
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(КодОшибки) Тогда
СообщенияОбОшибках = ОписаниеОшибкиАвторизацииПочтовогоСервера(КодОшибки, ТекстОшибки);
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
ИначеЕсли ИдентификаторЗапроса <> Ответ["state"] Тогда
СообщенияОбОшибках = НСтр("ru = 'Не удалось авторизоваться на почтовом сервере. Неверный идентификатор ответа.'");
ПроверкаЗавершиласьСОшибками = Истина;
ИначеЕсли Не ПолучитьКлючиДоступаКПочтовомуСерверу(КодАвторизации, АдресПолученияКлюча) Тогда
ПроверкаЗавершиласьСОшибками = Истина;
КонецЕсли;
Если Не ПолучитьКлючиДоступаКПочтовомуСерверу(КодАвторизации, АдресПолученияКлюча) Тогда
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
Если ПроверкаЗавершиласьСОшибками Тогда
ЗаполнитьПояснения();
КонецЕсли;
КонецПроцедуры
@@ -1516,4 +1547,17 @@
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПояснения()
ПоясненияПоОшибке = РаботаСПочтовымиСообщениямиСлужебный.ПоясненияПоОшибке(СообщенияОбОшибках, , Истина);
ВозможныеПричины = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.ВозможныеПричины);
СпособыУстранения = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.СпособыУстранения);
Элементы.ДекорацияВозможныеПричины.Заголовок = ВозможныеПричины;
Элементы.ДекорацияСпособыУстранения.Заголовок = СпособыУстранения;
КонецПроцедуры
#КонецОбласти
@@ -4333,9 +4333,6 @@
<edit>
<common>true</common>
</edit>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Папки.ДатаСинхронизации</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Папки.Description</segments>
</notDefaultUseAlwaysAttributes>
@@ -4357,9 +4354,6 @@
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Папки.УчетнаяЗапись</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Папки.УчетнаяЗаписьDescription</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Папки.УчетнаяЗаписьСервис</segments>
</notDefaultUseAlwaysAttributes>
@@ -1472,13 +1472,10 @@
&НаКлиенте
Процедура СписокВыборПослеВыбораРежимаРедактирования(Результат, ПараметрыВыполнения) Экспорт
РезультатОткрыть = "Открыть";
РезультатРедактировать = "Редактировать";
Если Результат = РезультатРедактировать Тогда
Если Результат = "Редактировать" Тогда
Обработчик = Новый ОписаниеОповещения("СписокВыборПослеРедактированияФайла", ЭтотОбъект, ПараметрыВыполнения);
РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Обработчик, ПараметрыВыполнения.ДанныеФайла);
ИначеЕсли Результат = РезультатОткрыть Тогда
ИначеЕсли Результат = "Открыть" Тогда
РаботаСФайламиКлиент.ОткрытьФайл(ПараметрыВыполнения.ДанныеФайла, Ложь);
КонецЕсли;
КонецПроцедуры
@@ -3,64 +3,93 @@
<p>Открывается из <a href="DataProcessor.РаботаСФайлами.Form.ПрисоединенныеФайлы/Help">списка присоединенных файлов</a> с помощью команды <strong>Еще - Открыть карточку</strong> (клавиши <strong>F2</strong>).</p>
<h3>Сведения о файле</h3>
<ul><li><strong>Наименование</strong> - полное имя файла. Автоматически заполняется программой во время присоединения файла и создания карточки файла, можно изменить;
</li><li><strong>Описани</strong>е - напишите подробные сведения о файле;
</li><li><strong>Автор</strong> - пользователь, который добавил файл в базу;
</li><li><strong>Создан</strong> - дата добавления файла в базу;
</li><li><strong>Отредактировал</strong> - последний пользователь, который отредактировал файл;
</li><li><strong>Изменен</strong> - дата изменения данных файла (местное время);
</li><li>
</li>
<li><strong>Описани</strong>е - напишите подробные сведения о файле;
</li>
<li><strong>Автор</strong> - пользователь, который добавил файл в базу;
</li>
<li><strong>Создан</strong> - дата добавления файла в базу;
</li>
<li><strong>Отредактировал</strong> - последний пользователь, который отредактировал файл;
</li>
<li><strong>Изменен</strong> - дата изменения данных файла (местное время);
</li>
<li>
<div><strong>Размещение</strong> - наименование и дата документа, к которому присоединен файл. Можно просмотреть документ;</div>
</li><li>
</li>
<li>
<div>
<div><strong>Размер</strong> - размер данных файла;</div></div>
</li><li>
</li>
<li>
<div><strong>Расширение</strong> - расширение (формат) файла.</div></li></ul><h3>Редактирование присоединенного файла</h3>
<ul><li>
<div>
<div>В тонком клиенте <a href="CommonForm.РедактированиеТабличногоДокумента/Help">редактирование файлов табличных документов</a> (формата <strong>.mxl</strong>) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. <a href="InformationRegister.ПользовательскиеМакетыПечати/Help">здесь</a>. </div></div>
</li><li>
</li>
<li>
<div>
<div>Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.</div></div>
</li><li>С помощью кнопки <strong>Просмотреть</strong> можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования.
</li><li>
</li>
<li>С помощью кнопки <strong>Просмотреть</strong> можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования.
</li>
<li>
<div>
<div>Команда <strong>Еще -</strong> <strong>Редактировать</strong> открывает файл в режиме редактирования, а также производит захват файла в программе. Захваченный файл будет недоступен для редактирования другим пользователям программы и помечается в списке зеленым цветом.</div></div>
</li><li>
</li>
<li>
<div>Команда <strong>Еще -</strong> <strong>Закончить редактирование</strong> освобождает файл, сохраняет его в программе и снимает пометку занятости для редактирования. После окончания редактирования сохраните файл, закройте внешнее приложение.</div>
</li><li>
</li>
<li>
<div>
<div>
<div>Команда <strong>Еще -</strong> <strong>Отменить редактирование</strong> освобождает файл, не сохраняя произведенные в нем изменения в программе, и снимает пометку занятости для редактирования. Эта команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).</div></div></div></li></ul><h3>Сохранение файла</h3>
<ul><li>
<div>С помощью команды <strong>Еще - Сохранить как </strong>можно сохранить файл в указанный каталог на жестком или сетевом диске.</div>
</li><li>
</li>
<li>
<div>Соответствующей командой меню <strong>Еще</strong> можно <strong>Открыть каталог файла в Проводнике Windows</strong>;</div></li></ul><h3>Обновление файла</h3>
<ul><li>С помощью команды <strong>Еще - Обновить из файла на диске</strong> можно обновить файл из оригинального файла на диске (из которого изначально был создан файл в программе).</li></ul><h3>Электронная подпись и шифрование</h3>
<p>При использовании электронной подписи становится доступным выпадающее меню <strong>Еще - Электронная подпись и шифрование</strong>, которое содержит команды для работы с электронной подписью файлов:</p>
<ul><li>
<div><strong>Подписать</strong> - создает электронную подпись для файла. Перед созданием электронной подписи программа предлагает <a>выбрать сертификат электронной</a> подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек программы. Подписанный файл становится недоступным для редактирования и отображается в списках со значком <img src="CommonPicture.ПодписанЭП"></img>.</div>
</li><li>
</li>
<li>
<div><strong>Добавить электронную подпись из файла</strong> - <a href="CommonForm.ДобавлениеЭлектроннойПодписиИзФайла/Help">добавляет подпись</a> к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.</div>
</li><li>
</li>
<li>
<div><strong>Сохранить вместе с электронной подписью</strong> - <a href="CommonForm.СохранениеВместеСЭлектроннойПодписью/Help">сохраняет подпись</a> в файл на диске. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.</div>
</li><li>
</li>
<li>
<div><strong>Зашифровать</strong> - по команде происходит <a>шифрование файла</a>. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком <img src="CommonPicture.Зашифрован"></img>.</div>
</li><li>
</li>
<li>
<p><strong>Расшифровать</strong> - по команде происходит <a>расшифровка файла</a>. Для расшифровки нужно ввести пароль к закрытому ключу.</p></li></ul><p>При использовании электронной подписи и шифрования становятся доступными вкладки:</p>
<h3>Электронные подписи</h3>
<p>На вкладке размещаются сведения об электронной подписи файла:</p>
<ul><li><strong>Автор подписи</strong> - пользователь, который подписал файл;
</li><li><strong>Дата подписи</strong> - дата подписания файла;
</li><li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи;
</li><li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки.</li></ul><p>С помощью кнопок панели навигации можно:</p>
</li>
<li><strong>Дата подписи</strong> - дата подписания файла;
</li>
<li><b>Тип подписи</b> - существует несколько типов подписей в зависимости от срока действия;</li>
<li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи;
</li>
<li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки.</li></ul><p>С помощью кнопок панели навигации можно:</p>
<ul><li><strong>Подписать</strong> файл;
</li><li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
</li><li><strong>Проверить</strong>, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке <strong>Статус</strong> у такой электронной подписи будет указано <strong>Не верна</strong>.
</li><li><strong>Проверить все</strong> - проверить все подписи;
</li><li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на диск;
</li><li><strong>Удалить</strong> у файла электронную подпись.</li></ul><h3>Разрешено расшифровывать</h3>
</li>
<li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
</li>
<li><strong>Проверить</strong>, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке <strong>Статус</strong> у такой электронной подписи будет указано <strong>Не верна</strong>.
</li>
<li><strong>Проверить все</strong> - проверить все подписи;
</li>
<li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на диск;
</li>
<li><strong>Удалить</strong> у файла электронную подпись.</li>
<li><b>Продлить действие</b> - Если в программе применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Программа предлагает <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способы усовершенствования</a> подписи. Для этого выберите нужный тип подписи из списка.</li></ul><h3>Разрешено расшифровывать</h3>
<ul><li>
<div>На вкладке размещаются сведения о шифровании файла:</div>
</li><li>
</li>
<li>
<div>В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно <strong>Открыть сертификат</strong> электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.</div></li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -189,15 +189,7 @@
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
Если ПустаяСтрока(Объект.ЗаголовокЯзык1) Тогда
Объект.ЗаголовокЯзык1 = Объект.Заголовок;
КонецЕсли;
Если ПустаяСтрока(Объект.ЗаголовокЯзык2) Тогда
Объект.ЗаголовокЯзык2 = Объект.Заголовок;
КонецЕсли;
КонецЕсли;
ЗаполнитьМультиязычныеРеквизиты();
Если ПараметрыЗаписи.Свойство("ОбработкаПродолжения") Тогда
ОбработкаПродолженияПриОшибкеЗаписи = ПараметрыЗаписи.ОбработкаПродолжения;
@@ -674,6 +666,9 @@
Возврат;
КонецЕсли;
Если ИндексСтраницы = 2 Тогда
ЗаполнитьМультиязычныеРеквизиты();
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
@@ -983,7 +978,7 @@
НаборыСвойств, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), Истина);
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(
НаборыСвойств, "ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык, Истина);
НаборыСвойств, "ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык(), Истина);
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(
НаборыСвойств, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина);
@@ -1149,6 +1144,23 @@
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьМультиязычныеРеквизиты()
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(Объект.ЗаголовокЯзык1) Тогда
Объект.ЗаголовокЯзык1 = Объект.Заголовок;
КонецЕсли;
Если ПустаяСтрока(Объект.ЗаголовокЯзык2) Тогда
Объект.ЗаголовокЯзык2 = Объект.Заголовок;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораРеквизитовДляРазблокирования(РазблокируемыеРеквизиты, Контекст) Экспорт
@@ -2419,7 +2431,7 @@
"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения");
КонецЕсли;
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык());
Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
НачатьТранзакцию();
@@ -36,6 +36,24 @@
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
Позиция = ПроверяемыеРеквизиты.Найти("ЗаголовокЯзык1");
Если Позиция<> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(Позиция);
КонецЕсли;
Позиция = ПроверяемыеРеквизиты.Найти("ЗаголовокЯзык2");
Если Позиция<> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(Позиция);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
@@ -34,8 +34,8 @@
СуффиксДополнительногоЯзыка1 = "Язык1";
СуффиксДополнительногоЯзыка2 = "Язык2";
Если СтрСравнить(Константы.ОсновнойЯзык.Получить(), ТекущийЯзык().КодЯзыка) <> 0 Тогда
Если Не ОбщегоНазначения.ЭтоОсновнойЯзык() Тогда
СуффиксОсновногоЯзыка = МультиязычностьСервер.СуффиксТекущегоЯзыка();
Если СуффиксОсновногоЯзыка = "Язык1" Тогда
СуффиксДополнительногоЯзыка1 = "";
@@ -130,10 +130,10 @@
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
КонецЕсли;
ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка();
Если ХранениеВТабличнойЧасти Тогда
ОсновнойЯзык = Метаданные.ОсновнойЯзык.КодЯзыка;
Для каждого Представление Из Параметры.Представления Цикл
ОписаниеЯзыка = ОписаниеЯзыка(Представление.КодЯзыка);
@@ -151,9 +151,7 @@
И (ИспользуетсяПервыйДополнительныйЯзык
ИЛИ ИспользуетсяВторойДополнительныйЯзык) Тогда
ОсновнойЯзык = ОбщегоНазначения.КодОсновногоЯзыка();
ОписаниеЯзыка = ОписаниеЯзыка(Константы.ОсновнойЯзык.Получить());
ОписаниеЯзыка = ОписаниеЯзыка(ОсновнойЯзык);
Если ПустаяСтрока(СуффиксОсновногоЯзыка) Тогда
ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение;
Иначе
@@ -85,6 +85,8 @@
ОжиданиеСчетчик = ОжиданиеСчетчик + 1;
ПродолжитьОбратныйОтсчет();
КонецЕсли;
ТекущийЭлемент = Элементы.Колонки;
КонецПроцедуры
#КонецОбласти
@@ -165,7 +165,7 @@
&НаКлиенте
Процедура НаименованиеКонфигурации(Команда)
ВставитьПараметрВШаблон("&ConfigurationPresentation");
ВставитьПараметрВШаблон("&ApplicationPresentation");
КонецПроцедуры
@@ -531,7 +531,7 @@
|Если восстановление пароля не запрашивалось, сообщите об этом техническому специалисту.'");
ТекстСообщенияHTML = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияHTML,
"&UserPresentation", "&ConfigurationPresentation", "&VerificationCode");
"&UserPresentation", "&ApplicationPresentation", "&VerificationCode");
Возврат ТекстСообщенияHTML;
@@ -261,6 +261,7 @@
КонецЕсли;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Контекст.ДанныеПодписи);
ПараметрыСоздания.ПоказатьОшибку = Неопределено;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
@@ -274,7 +275,11 @@
Процедура ВыбратьФайлПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт
Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда
ПоказатьОшибку(МенеджерКриптографии, Контекст.ОшибкаНаСервере);
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ПоказатьОшибку = Неопределено;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ВыбратьФайлПослеСозданияЛюбогоМенеджераКриптографии", ЭтотОбъект, Контекст),
"", ПараметрыСоздания);
Возврат;
КонецЕсли;
@@ -294,6 +299,23 @@
КонецПроцедуры
// Продолжение процедуры ВыбратьФайл.
&НаКлиенте
Процедура ВыбратьФайлПослеСозданияЛюбогоМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт
Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда
ПоказатьОшибку(МенеджерКриптографии, Контекст.ОшибкаНаСервере);
Возврат;
КонецЕсли;
Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии);
Контекст.Вставить("ПараметрыПодписи", Неопределено);
МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
"ВыбратьФайлПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект), Контекст.ДанныеПодписи);
КонецПроцедуры
// Продолжение процедуры ВыбратьФайл.
&НаКлиенте
Процедура ВыбратьФайлПослеОшибкиПолученияКонтейнераПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
@@ -323,6 +345,10 @@
КонтейнерПодписи, ДобавкаВремени, ДатаСеанса);
Контекст.Вставить("ПараметрыПодписи", ПараметрыПодписи);
ДатаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаПодписиИзПараметровПодписи(ПараметрыПодписи);
Если ЗначениеЗаполнено(ДатаПодписи) Тогда
Контекст.Вставить("ДатаПодписи", ДатаПодписи);
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
@@ -432,10 +458,15 @@
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
СвойстваПодписи = ПолучитьИзВременногоХранилища(АдресСвойствПодписи);
Если Не ЗначениеЗаполнено(СвойстваПодписи.ДатаПодписи) Тогда
СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса;
ДатаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаПодписиИзПараметровПодписи(СвойстваПодписи);
Если Не ЗначениеЗаполнено(ДатаПодписи) Тогда
Если Не ЗначениеЗаполнено(СвойстваПодписи.ДатаПодписи) Тогда
СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса;
КонецЕсли;
Иначе
СвойстваПодписи.ДатаПодписи = ДатаПодписи;
КонецЕсли;
СвойстваПодписи.ДатаПроверкиПодписи = ТекущаяДатаСеанса;
СвойстваПодписи.ПодписьВерна = ПодписьВерна;
@@ -447,7 +478,41 @@
Функция ДобавитьСтрокуНаСервере(Адрес, ИмяФайла, ДобавитьНовуюСтроку, ОшибкаНаСервере,
ДанныеПодписи, ДатаПодписи, АдресСвойствПодписи)
ДанныеПодписи = ПолучитьИзВременногоХранилища(Адрес);
ДанныеПодписи = ПолучитьИзВременногоХранилища(Адрес); // ДвоичныеДанные
ПолноеИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДанныеПодписи.Записать(ПолноеИмяВременногоФайла);
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ПолноеИмяВременногоФайла);
Попытка
УдалитьФайлы(ПолноеИмяВременногоФайла);
Исключение
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Электронная подпись.Удаление временного файла'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если Текст.КоличествоСтрок() > 3 И Текст.ПолучитьСтроку(1) = "-----BEGIN CMS-----"
И Текст.ПолучитьСтроку(Текст.КоличествоСтрок()) = "-----END CMS-----" Тогда
Текст.УдалитьСтроку(1);
Текст.УдалитьСтроку(Текст.КоличествоСтрок());
СтрокаBase64 = Текст.ПолучитьТекст();
Попытка
ДанныеПодписи = Base64Значение(СтрокаBase64);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При получении данных подписи из файла подписи произошла ошибка:
|%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке)));
Возврат Ложь;
КонецПопытки;
КонецЕсли;
ДатаПодписи = ЭлектроннаяПодпись.ДатаПодписания(ДанныеПодписи);
Если Не ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере()
@@ -488,6 +553,11 @@
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(ДанныеПодписи);
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(КонтейнерПодписи,
ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
ДатаПодписиИзПараметровПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаПодписиИзПараметровПодписи(ПараметрыПодписи);
Если ЗначениеЗаполнено(ДатаПодписиИзПараметровПодписи) Тогда
ДатаПодписи = ДатаПодписиИзПараметровПодписи;
КонецЕсли;
КонецЕсли;
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификаты[0]);
@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p>
<p>Открывается по команде <strong>Программы и сертификаты электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p>
<p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p>
<p>Для электронной подписи и шифрования требуется установить специальную стороннюю программу (криптопровайдер).</p>
<p>Для того чтобы подписывать данные, нужно включить флажок <strong>Электронная подпись</strong>, а для шифрования нужно включить флажок <strong>Шифрование</strong> в разделе <strong>Администрирование - Общие настройки</strong>. После этого становятся доступными соответствующие команды в программе.</p>
<p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для установки подписи необходимо иметь сертификат ключа электронной подписи. Сертификат можно получить в удостоверяющем центре. Например, в удостоверяющем центре фирмы 1С <a href="http://ca.1c.ru/">http://ca.1c.ru/</a>. Только удостоверяющий центр может выдать юридически значимый (квалифицированный сертификат).</p>
@@ -12,9 +12,8 @@
</li>
<li>Предусмотрен отбор по полю <strong>Состояние заявления</strong> ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено").
</li>
<li><a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">Сертификат</a> можно <strong>Добавить</strong> из числа <strong>установленных на компьютере</strong>. Также это можно сделать в процессе подписания или шифрования данных.
</li>
<li>Также с помощью кнопки <strong>Добавить</strong> можно подготовить <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">Заявление на выпуск нового сертификата</a>.
<li><a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">Сертификат</a> можно <strong>Добавить</strong> из числа <strong>установленных на компьютере</strong>. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите <b>Добавить</b>.</li>
<ul><li>Сертификат <b>только для шифрования</b> можно <b>Добавить из файла</b>. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу на компьютере.</li></ul><li>Также с помощью кнопки <strong>Добавить</strong> можно подготовить <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">Заявление на выпуск нового сертификата</a>.
</li>
<li>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Программы</h3>
<ul><li>Содержит список программ, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ).
@@ -29,8 +28,8 @@
</li>
<li>В колонке <strong>Результат проверки</strong> отражаются сведения, по которым можно понять установлена ли программа на компьютере или нет или же установлена, но некорректно.<span lang="RU">
</span></li>
<li>Linux: <strong>Путь к программе (&lt;Имя программы, соответствующей выделенной строке в списке&gt;)</strong> - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.</li>
<ul><li>В записи о программе можно перейти к списку <strong>Пути к программе на серверах Linux</strong> - в котором нужно указать пути для тех компьютеров, на которых сервер 1С:Предприятия работает под управлением ОС Linux.</li></ul><li>В нижней части списка расположена ссылка <a href="http://its.1c.ru/db/metod81#content:5784:1">Инструкция по работе с программами электронной подписи и шифрования</a>. Перейдите по этой ссылке в соответствующий раздел 1С:ИТС, если имеются вопросы.</li></ul><h3>Дополнительно</h3>
<li>Linux: <strong>Путь к программе (&lt;Имя программы, соответствующей выделенной строке в списке&gt;)</strong> - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.</li>
<li>В нижней части списка расположена ссылка <a href="http://its.1c.ru/db/metod81#content:5784:1">Инструкция по работе с программами электронной подписи и шифрования</a>. Перейдите по этой ссылке в соответствующий раздел 1С:ИТС, если имеются вопросы.</li></ul><h3>Дополнительно</h3>
<ul><li>Задайте <strong>Расширение для зашифрованных файлов</strong> при отправке по почте, при выполнении команды <strong>Сохранить как</strong> и при экспорте папки (по умолчанию <strong>.p7m</strong>).
</li>
<li>
@@ -0,0 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Предназначена для продления сроков действия (усовершенствования) электронных подписей вручную.
<div>
<div>В программе предусмотрено использование электронных подписей для длительного хранения документов. Выбрать тип подписи можно <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ОбщиеНастройки/Help">в разделе</a> <b>Администрирование - Общие настройки - Электронная подпись</b>.</div>
<div>
<div>Продление сроков действия (усовершенствование) выполняется для выбранного файла или в списке - указывается подписанный объект (количество подписанных объектов).</div>
<div>
<div>Обычная электронная подпись (CAdES-BES) имеет ограниченный срок действия, он зависит от срока действия сертификата электронной подписи, который длится около года.</div>
<div>Для долговременного хранения в электронную подпись вносится метка доверенного времени (подпись CAdES-T) или архивная метка времени (подпись CAdES-A). </div></div></div>
<div>Если в программе применяются подписи с доверенной меткой времени, то можно продлить (усовершенствовать) выбранную подпись - добавить доверенную метку времени. </div>
<div>Программа предлагает выбрать способы усовершенствования подписи:</div>
<div>
<ul><li><b>Усовершенствовать до</b> - Выберите способ усовершенствования (тип подписи) из списка с помощью переключателя.</li>
<li><b>Не усовершенствовать</b>.</li>
<li><b>Добавить архивные метки времени к архивным подписям</b> - включите флажок для продления архивных подписей.</li></ul><div>Нажмите <b>Выполнить</b>.</div></div></div></body></html>
@@ -5,6 +5,11 @@
<key>ru</key>
<value>Продление срока действия электронных подписей</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
<useStandardCommands>true</useStandardCommands>
@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:Decoration">
<name>ДекорацияНадпись</name>
<id>6</id>
<title>
<key>ru</key>
<value>УЦ сертификата добавлен в список разрешенных УЦ</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияНадписьРасширеннаяПодсказка</name>
<id>8</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияНадписьКонтекстноеМеню</name>
<id>7</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
<backColor xsi:type="core:ColorRef">
<color>Style.ToolTipBackColor</color>
</backColor>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаРазрешенныеНеаккредитованныеУЦ</name>
<id>4</id>
<items xsi:type="form:FormField">
<name>РазрешенныеНеаккредитованныеУЦ</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>НаборКонстант.РазрешенныеНеаккредитованныеУЦ</segments>
</dataPath>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<extendedTooltip>
<name>РазрешенныеНеаккредитованныеУЦРасширеннаяПодсказка</name>
<id>3</id>
<title>
<key>ru</key>
<value>Список ОГРН (с новой строки или через запятую) удостоверяющих центров, потерявших аккредитацию, подписание сертификатами которых разрешено, подписи считаются верными.</value>
</title>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РазрешенныеНеаккредитованныеУЦКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>EditTextChange</event>
<name>РазрешенныеНеаккредитованныеУЦИзменениеТекстаРедактирования</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<height>5</height>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>OnValueChange</editTextUpdate>
<textSize>Normal</textSize>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа разрешенные неаккредитованные УЦ</value>
</title>
<extendedTooltip>
<name>ГруппаРазрешенныеНеаккредитованныеУЦРасширеннаяПодсказка</name>
<id>5</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>НаборКонстант</name>
<id>1</id>
<valueType>
<types>ConstantsSet</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
<savedData>true</savedData>
</attributes>
<attributes>
<name>ТекстПредупреждения</name>
<id>7</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<parameters>
<name>Сертификат</name>
<valueType/>
<keyParameter>true</keyParameter>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ConstantsFormExtInfo">
<handlers>
<event>AfterWrite</event>
<name>ПослеЗаписи</name>
</handlers>
</extInfo>
</form:Form>
@@ -0,0 +1,153 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДобавитьУдостоверяющийЦентрСертификатаВРазрешенные();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда
СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Истина);
ПодключитьОбработчикОжидания("ОбработчикОжиданияПоказатьВопросПользователю", 0.1, Истина);
Отказ = Истина;
Возврат;
КонецЕсли;
Модифицированность = Элементы.ДекорацияНадпись.Видимость;
ПодключитьОбработчикОжидания("ОбновитьКоличествоВЗаголовке", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ОбновитьПовторноИспользуемыеЗначения();
Оповестить("Запись_НаборКонстант", Новый Структура, "РазрешенныеНеаккредитованныеУЦ");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РазрешенныеНеаккредитованныеУЦИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
ПодключитьОбработчикОжидания("ОбновитьКоличествоВЗаголовке", 0.5, Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОбновитьКоличествоВЗаголовке()
Если ПустаяСтрока(Элементы.РазрешенныеНеаккредитованныеУЦ.ТекстРедактирования) Тогда
Элементы.РазрешенныеНеаккредитованныеУЦ.Заголовок = НСтр("ru ='Разрешенные неаккредитованные УЦ'");
Иначе
РазрешенныеУЦ = СтрРазделить(Элементы.РазрешенныеНеаккредитованныеУЦ.ТекстРедактирования, ",;" + Символы.ПС, Ложь);
Элементы.РазрешенныеНеаккредитованныеУЦ.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru ='Разрешенные неаккредитованные УЦ (%1)'"), РазрешенныеУЦ.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияПоказатьВопросПользователю()
СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Ложь);
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.Предупреждение32;
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыВопроса.Заголовок = НСтр("ru = 'Неаккредитованный удостоверяющий центр'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстПредупреждения, РежимДиалогаВопрос.ОК, ПараметрыВопроса);
КонецПроцедуры
&НаСервере
Процедура ДобавитьУдостоверяющийЦентрСертификатаВРазрешенные()
Элементы.ДекорацияНадпись.Видимость = Ложь;
Если Не ЗначениеЗаполнено(Параметры.Сертификат) Тогда
Возврат;
КонецЕсли;
МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначения.ОбщийМодуль(
"ЭлектроннаяПодписьКлиентСерверЛокализация");
Если МодульЭлектроннаяПодписьКлиентСерверЛокализация = Неопределено Тогда
Возврат;
КонецЕсли;
Сертификат = Параметры.Сертификат;
Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда
Сертификат = ПолучитьИзВременногоХранилища(Сертификат);
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
Сертификат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сертификат, "ДанныеСертификата").Получить();
КонецЕсли;
Если ТипЗнч(Сертификат) <> Тип("ДвоичныеДанные") Тогда
Возврат;
КонецЕсли;
Сертификат = Новый СертификатКриптографии(Сертификат);
ДанныеДляПроверкиУдостоверяющегоЦентра = МодульЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра(
Сертификат);
ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска;
Если ЗначенияПоиска = Неопределено Тогда
Возврат;
КонецЕсли;
МассивПолейПоиска = СтрРазделить(ЗначенияПоиска, ",");
ЗначениеДляДобавления = МассивПолейПоиска[0];
РазрешенныеУЦ = СтрРазделить(НаборКонстант.РазрешенныеНеаккредитованныеУЦ, ",;" + Символы.ПС);
Если РазрешенныеУЦ.Найти(ЗначениеДляДобавления) = Неопределено Тогда
ПредставлениеИздателя = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеИздателя(Сертификат);
Элементы.ДекорацияНадпись.Видимость = Истина;
ЕстьПраваНаИзменение = ПравоДоступа("Изменение", Метаданные.Константы.РазрешенныеНеаккредитованныеУЦ);
Если Не ЕстьПраваНаИзменение Тогда
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Обратитесь к администратору для добавления ОГРН %1 удостоверяющего центра ""%2"" в список разрешенных неаккредитованных УЦ.'"),
ЗначениеДляДобавления, ПредставлениеИздателя);
Возврат;
КонецЕсли;
РазрешенныеУЦ.Вставить(0, ЗначениеДляДобавления);
НаборКонстант.РазрешенныеНеаккредитованныеУЦ = СтрСоединить(РазрешенныеУЦ, Символы.ПС);
Элементы.ДекорацияНадпись.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Нажмите ""Записать и закрыть"", чтобы добавить ОГРН %1 удостоверяющего центра ""%2"" в список разрешенных.'"),
ЗначениеДляДобавления, ПредставлениеИздателя);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cb81fb9f-16a2-4265-92a9-b827ca2fd588">
<name>РазрешенныеНеаккредитованныеУЦ</name>
<synonym>
<key>ru</key>
<value>Разрешенные неаккредитованные УЦ</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
<useStandardCommands>true</useStandardCommands>
</mdclass:CommonForm>
@@ -401,6 +401,43 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ПредупреждениеОписание2</name>
<id>222</id>
<title>
<key>ru</key>
<value>Чтобы использовать расширения области данных, требуется запустить сеанс с разделителями.
Изменения расширений для пользователей области данных вступят в силу при их следующем входе в программу.</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПредупреждениеОписание2РасширеннаяПодсказка</name>
<id>224</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПредупреждениеОписание2КонтекстноеМеню</name>
<id>223</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>URLProcessing</event>
<name>ПредупреждениеОписаниеОбработкаНавигационнойСсылки</name>
</handlers>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -434,140 +471,6 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаИнформация</name>
<id>184</id>
<items xsi:type="form:Decoration">
<name>ИнформацияКартинка</name>
<id>186</id>
<title>
<key>ru</key>
<value>Информация картинка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ИнформацияКартинкаРасширеннаяПодсказка</name>
<id>188</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИнформацияКартинкаКонтекстноеМеню</name>
<id>187</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Информация32</picture>
</picture>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаИнформацияОписание</name>
<id>189</id>
<items xsi:type="form:Decoration">
<name>ИнформацияОписание</name>
<id>191</id>
<title>
<key>ru</key>
<value>Изменения расширений области данных, вступят в силу только для пользователей области данных и только при их следующем входе в программу.</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ИнформацияОписаниеРасширеннаяПодсказка</name>
<id>193</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИнформацияОписаниеКонтекстноеМеню</name>
<id>192</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
<verticalAlign>Center</verticalAlign>
<titleHeight>2</titleHeight>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Информация описание</value>
</title>
<extendedTooltip>
<name>ГруппаИнформацияОписаниеРасширеннаяПодсказка</name>
<id>190</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Информация</value>
</title>
<extendedTooltip>
<name>ГруппаИнформацияРасширеннаяПодсказка</name>
<id>185</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Table">
<name>СписокРасширений</name>
<id>19</id>
@@ -22,10 +22,6 @@
НавигационнаяСсылка = "e1cib/app/ОбщаяФорма.Расширения";
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. Обратитесь к администратору.'");
КонецЕсли;
Если Не ПравоДоступа("Администрирование", Метаданные) Тогда
Элементы.СписокРасширенийБезопасныйРежимФлаг.ТолькоПросмотр = Истина;
КонецЕсли;
@@ -369,7 +365,8 @@
// Обновление реквизита формы для условного форматирования.
ЭтоНеразделенныйПользовательВОбласти = ЭтоНеразделенныйПользовательВОбласти();
Элементы.ГруппаИнформация.Видимость = ЭтоНеразделенныйПользовательВОбласти;
Элементы.ПредупреждениеОписание.Видимость = Не ЭтоНеразделенныйПользовательВОбласти;
Элементы.ПредупреждениеОписание2.Видимость = ЭтоНеразделенныйПользовательВОбласти;
КонецПроцедуры
@@ -1543,19 +1540,7 @@
&НаСервереБезКонтекста
Функция ЭтоНеразделенныйПользовательВОбласти()
СеансЗапущенБезРазделителей = Истина;
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
СеансЗапущенБезРазделителей = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей();
КонецЕсли;
Возврат СеансЗапущенБезРазделителей
И ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных();
Возврат СтандартныеПодсистемыСервер.ЭтоРазделенныйРежимСеансаБезРазделителей();
КонецФункции
@@ -5383,6 +5383,11 @@
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОчиститьФормат</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
@@ -369,6 +369,8 @@
Процедура ТекстСлеваСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева = ТекстСлеваСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -376,6 +378,8 @@
Процедура ТекстВЦентреСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре = ТекстВЦентреСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -383,6 +387,8 @@
Процедура ТекстСправаСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа = ТекстСправаСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -390,6 +396,8 @@
Процедура ТекстСлеваСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстСлева = ТекстСлеваСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -397,6 +405,8 @@
Процедура ТекстВЦентреСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре = ТекстВЦентреСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -404,6 +414,8 @@
Процедура ТекстСправаСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстСправа = ТекстСправаСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
КонецПроцедуры
@@ -472,6 +484,12 @@
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВыводКолонтитула(Колонтитул)
Колонтитул.Выводить = Не ПустаяСтрока(Колонтитул.ТекстСлева) Или Не ПустаяСтрока(Колонтитул.ТекстСправа) Или Не ПустаяСтрока(Колонтитул.ТекстВЦентре);
Колонтитул.НачальнаяСтраница = 1;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьОтображениеТабличногоДокумента()
Элементы.ТабличныйДокумент.ОтображатьЗаголовки = Элементы.ТабличныйДокумент.Редактирование;
@@ -1259,6 +1277,21 @@
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФормат(Команда)
ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть;
ТекущаяОбласть.Шрифт = Неопределено;
ТекущаяОбласть.ЦветРамки = Новый Цвет();
ТекущаяОбласть.ЦветТекста = Новый Цвет();
ТекущаяОбласть.ЦветУзора = Новый Цвет();
ТекущаяОбласть.ЦветФона = Новый Цвет();
ТекущаяОбласть.ВертикальноеПоложение = Неопределено;
ТекущаяОбласть.ВертикальноеПоложениеКартинки = Неопределено;
ТекущаяОбласть.ГоризонтальноеПоложение = Неопределено;
ТекущаяОбласть.ГоризонтальноеПоложениеКартинки = Неопределено;
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура УстановитьПримерыЗначений(КоллекцияПолей = Неопределено, ДанныеПечати = Неопределено)
@@ -1267,6 +1300,9 @@
КонецЕсли;
Если ДанныеПечати = Неопределено Тогда
Если Не ЗначениеЗаполнено(Образец) Тогда
Возврат;
КонецЕсли;
Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец);
ОтображаемыеПоля = ЗаполнитьСписокОтображаемыхПолей(КоллекцияПолей);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
@@ -2102,6 +2138,7 @@
Смещение = 0;
Для Каждого ОписаниеПоля Из КоллекцияПолей Цикл
Если ОписаниеПоля.ПутьКДанным = "Ссылка" Тогда
ОписаниеПоля.ПолучитьЭлементы().Очистить();
ОписаниеПоля.Заголовок = НСтр("ru = 'Образец'");
Если Смещение <> 0 Тогда
Индекс = КоллекцияПолей.Индекс(ОписаниеПоля);
@@ -2292,6 +2329,12 @@
Если Элементы.ПосмотретьПечатнуюФорму.Пометка Тогда
Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаМакет;
Иначе
Если Не ЗначениеЗаполнено(Образец) Тогда
Элементы[ИмяСпискаПолей()].ТекущаяСтрока = ЭтотОбъект[ИмяСпискаПолей()].ПолучитьЭлементы()[0].ПолучитьИдентификатор();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Выберите образец, по данным которого будет формироваться печатная форма'"), , ИмяСпискаПолей() + "[0].Образец");
Возврат;
КонецЕсли;
СформироватьПечатнуюФорму();
Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразец;
КонецЕсли;
@@ -2326,6 +2369,10 @@
Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл
Если СтрНачинаетсяС(Область.Имя, "ШтампЭП") Тогда
Область.Имя = "";
#Если ВебКлиент Тогда
// Требуется для обновления отображения
Область.Защита = Область.Защита;
#КонецЕсли
КонецЕсли;
КонецЦикла;
@@ -1372,7 +1372,7 @@
Блокировка.Заблокировать();
ВыбранныйОбъект = Элемент.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(Элемент,, УникальныйИдентификатор);
ЗаблокироватьДанныеДляРедактирования(Элемент);
ВыбранныйОбъект.УстановитьПометкуУдаления(Пометка);
ЗафиксироватьТранзакцию();
@@ -1480,7 +1480,7 @@
ВыбранныйОбъект = Документ.ПолучитьОбъект(); // ДокументОбъект
Если ВыбранныйОбъект.ПроверитьЗаполнение() Тогда
ЗаблокироватьДанныеДляРедактирования(Документ,, УникальныйИдентификатор);
ЗаблокироватьДанныеДляРедактирования(Документ);
ВыбранныйОбъект.Записать(Режим);
КонецЕсли;
@@ -393,7 +393,7 @@
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.УдалитьИнформация</picture>
<picture>StdPicture.Information</picture>
</picture>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
@@ -406,6 +406,32 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>УстановленныеИсправленияЗакрыть</name>
<id>112</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>УстановленныеИсправленияЗакрытьРасширеннаяПодсказка</name>
<id>113</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Close</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>УстановленныеИсправленияСправка</name>
<id>72</id>
@@ -1267,13 +1293,18 @@
<attributes>
<name>Фильтр</name>
<id>3</id>
<valueType/>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:ValueListExtInfo">
<itemValueType/>
</extInfo>
</attributes>
<attributes>
<name>РазделениеВключено</name>
@@ -1301,6 +1332,19 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПриОбновлении</name>
<id>12</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>СохранитьКак</name>
<title>
@@ -1330,6 +1374,12 @@
<name>Исправления</name>
<valueType/>
</parameters>
<parameters>
<name>ПриОбновлении</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -25,11 +25,27 @@
Элементы.ИнформацияОписание.Заголовок = НСтр("ru = 'Состав исправлений настраивается администратором приложения.'");
ИначеЕсли ЭтоПодчиненныйУзелРИБ Тогда
Элементы.ИнформацияОписание.Заголовок = НСтр("ru = 'Управление составом исправлений выполняется в центральном узле.'");
ИначеЕсли Параметры.ПриОбновлении Тогда
Элементы.ИнформацияОписание.Заголовок = НСтр("ru = 'Установленные исправления вступят в силу после перезапуска программы.'");
ИначеЕсли Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда
Элементы.ГруппаИнформация.Видимость = Ложь;
КонецЕсли;
Если РазделениеВключено Или ЭтоПодчиненныйУзелРИБ Или Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда
Если ЗначениеЗаполнено(Параметры.Исправления) Тогда
Если ТипЗнч(Параметры.Исправления) = Тип("СписокЗначений") Тогда
Фильтр = Параметры.Исправления;
ИначеЕсли ТипЗнч(Параметры.Исправления) = Тип("Массив") Тогда
Фильтр.ЗагрузитьЗначения(Параметры.Исправления);
КонецЕсли;
КонецЕсли;
ПриОбновлении = Параметры.ПриОбновлении;
Элементы.УстановленныеИсправленияЗакрыть.Видимость = ПриОбновлении;
Если РазделениеВключено
Или ЭтоПодчиненныйУзелРИБ
Или Не ОбщегоНазначения.ЭтоWindowsКлиент()
Или Параметры.ПриОбновлении Тогда
Элементы.ФормаУстановитьИсправление.Видимость = Ложь;
Элементы.ФормаУдалитьИсправление.Видимость = Ложь;
Элементы.УстановленныеИсправленияКонтекстноеМенюДобавить.Видимость = Ложь;
@@ -123,13 +139,15 @@
Расширения = РасширенияКонфигурации.Получить();
УстановитьПривилегированныйРежим(Ложь);
ОписаниеИсправлений = ОписаниеУстановленныхИсправлений();
Для Каждого Расширение Из Расширения Цикл
Если Не ОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда
Продолжить;
КонецЕсли;
Если Фильтр <> Неопределено И Фильтр.НайтиПоЗначению(Расширение.Имя) = Неопределено Тогда
Если Фильтр.Количество() <> 0 И Фильтр.НайтиПоЗначению(Расширение.Имя) = Неопределено Тогда
Продолжить;
КонецЕсли;
@@ -147,12 +165,40 @@
НоваяСтрока.Описание = СвойстваИсправления.Description;
НоваяСтрока.ПрименимоДля = ИсправлениеПрименимоДля(СвойстваИсправления);
Иначе
Описание = ОписаниеИсправлений[Расширение.Имя];
НоваяСтрока.Статус = 1;
НоваяСтрока.Описание = Описание;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОписаниеУстановленныхИсправлений()
Если Не ПриОбновлении Тогда
Возврат Новый Соответствие;
КонецЕсли;
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(АдресХранилища);
ПараметрыМетода.Добавить(Фильтр.ВыгрузитьЗначения());
ПараметрыМетода.Добавить(Истина);
ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
"ОбновлениеКонфигурации.ОписанияНовыхПатчей",
ПараметрыМетода);
ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Неопределено);
ОписаниеНовыхПатчей = ПолучитьИзВременногоХранилища(АдресХранилища);
Если ТипЗнч(ОписаниеНовыхПатчей) <> Тип("Соответствие") Тогда
ОписаниеНовыхПатчей = Новый Соответствие;
КонецЕсли;
Возврат ОписаниеНовыхПатчей;
КонецФункции
&НаСервере
Функция ИсправлениеПрименимоДля(СвойстваИсправления)
@@ -311,4 +357,4 @@
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -166,6 +166,10 @@
ИмяСтраницы = СвязиСтраниц[Параметры.ИмяСтраницы];
НайденнаяСтраница = Элементы.Найти(ИмяСтраницы);
Если НайденнаяСтраница = Неопределено Тогда
НайденнаяСтраница = Элементы.Найти(Параметры.ИмяСтраницы);
КонецЕсли;
Если НайденнаяСтраница <> Неопределено Тогда
Элементы.СтраницыНастроек.ТекущаяСтраница = НайденнаяСтраница;
КонецЕсли;
@@ -1185,7 +1185,15 @@
Если Строка = Неопределено Или Не Строка.ЭтоФормула Тогда
Возврат;
КонецЕсли;
Формула = ВариантыОтчетовСлужебныйКлиентСервер.ФормулаПоПутиКДанным(Отчет.КомпоновщикНастроек.Настройки, Строка(Строка.Поле));
Если ТипЗнч(Формула) <> Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыНастроекДляТехническогоСпециалиста", ЭтотОбъект);
ОткрытьФормуНастроекДляТехническогоСпециалиста("СтраницаПользовательскихПолей", ОписаниеОповещения);
Возврат;
КонецЕсли;
ВариантыОтчетовСлужебныйКлиент.ИзменитьФормулу(
ЭтотОбъект, Отчет.КомпоновщикНастроек.Настройки, Строка(Строка.Поле));
@@ -1853,24 +1861,9 @@
&НаКлиенте
Процедура ПерейтиКНастройкамДляТехническогоСпециалиста(Команда)
ПараметрыФормы = Новый Структура;
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина);
ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта));
ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование);
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек);
ПараметрыФормы.Вставить("ИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя);
ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование);
ПараметрыФормы.Вставить("ВариантМодифицирован", ВариантИзменен);
ПараметрыФормы.Вставить("ПользовательскиеНастройкиМодифицированы",
ВариантИзменен Или ПользовательскиеНастройкиМодифицированы);
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы);
ОткрытьФормуНастроекДляТехническогоСпециалиста(Элементы.СтраницыНастроек.ТекущаяСтраница.Имя);
РезультатВыбораСформирован = Истина;
Закрыть();
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
@@ -2540,7 +2533,7 @@
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -2682,7 +2675,7 @@
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -2918,7 +2911,7 @@
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -3247,7 +3240,7 @@
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -7454,6 +7447,9 @@
Для Каждого Запись Из ПомеченныеНаУдаление Цикл
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, Запись.КлючСвойстваЭлементаСтруктуры, Запись.ИдентификаторЭлементаСтруктуры, РасширенныйРежим);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Запись.ИдентификаторЭлемента);
Если ЭлементНастройки = Неопределено Тогда
@@ -7671,4 +7667,43 @@
#КонецОбласти
&НаКлиенте
Процедура ОткрытьФормуНастроекДляТехническогоСпециалиста(ИмяСтраницы, ОбработчикЗавершения = Неопределено)
ПараметрыФормы = Новый Структура;
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина);
ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта));
ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование);
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек);
ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы);
ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование);
ПараметрыФормы.Вставить("ВариантМодифицирован", ВариантИзменен);
ПараметрыФормы.Вставить("ПользовательскиеНастройкиМодифицированы",
ВариантИзменен Или ПользовательскиеНастройкиМодифицированы);
Если ОбработчикЗавершения <> Неопределено Тогда
РежимОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
КонецЕсли;
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы, , , , ОбработчикЗавершения, РежимОкна);
Если ОбработчикЗавершения = Неопределено Тогда
РезультатВыбораСформирован = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыНастроекДляТехническогоСпециалиста(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
ОбновитьФорму(Результат);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -3070,6 +3070,38 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаДляПоказателей</name>
<id>1127</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Показатели</value>
</title>
<extendedTooltip>
<name>ГруппаДляПоказателейРасширеннаяПодсказка</name>
<id>1128</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ОтчетТабличныйДокумент</name>
<id>7</id>
@@ -743,12 +743,9 @@
ПараметрыЗаполнения.Вставить("СброситьНастройкиВарианта", Истина);
ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь);
КонецЕсли;
ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина);
ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
УточнитьПризнакАвтоформированияОтчета(ПараметрыЗаполнения);
ОтчетСформирован = Ложь;
СброситьВыбранныйУровеньГруппировок();
@@ -1434,12 +1431,9 @@
&НаКлиенте
Процедура ПослеФормирования(Результат, ПараметрыФормирования) Экспорт
Если ФоновоеЗаданиеИдентификатор <> ПараметрыФормирования.ИдентификаторЗадания Тогда
ПоказатьВыбранныйУровеньГруппировок();
ПереопределитьРезультатФормированияОтчета(Результат);
Возврат;
КонецЕсли;
Если Результат = Неопределено Тогда
@@ -1473,28 +1467,21 @@
МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(ИдентификаторЗамера);
КонецЕсли;
ПереопределитьРезультатФормированияОтчета(Результат);
СброситьТекущуюОбласть();
ПоказатьВыбранныйУровеньГруппировок();
КонецПроцедуры
&НаКлиенте
Процедура ПереопределитьРезультатФормированияОтчета(Результат)
ОтчетСформирован = ОтчетСформирован(Результат);
ОтчетСформирован = ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено");
ИнтеграцияПодсистемБСПКлиент.ПослеФормирования(ЭтотОбъект, ОтчетСформирован);
ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, ОтчетСформирован);
КонецПроцедуры
СброситьТекущуюОбласть();
ПоказатьВыбранныйУровеньГруппировок();
Обработчик = ОбработчикПослеФормированияНаКлиенте;
Если ТипЗнч(Обработчик) = Тип("ОписаниеОповещения") Тогда
ВыполнитьОбработкуОповещения(Обработчик, ОтчетСформирован);
ОбработчикПослеФормированияНаКлиенте = Неопределено;
КонецЕсли;
&НаКлиенте
Функция ОтчетСформирован(Результат)
Возврат ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено");
КонецФункции
КонецПроцедуры
&НаСервере
Функция РезультатФормированияОтчета(Знач ФормированиеПриОткрытии, Непосредственно, ПослеПредупреждения)
@@ -3187,14 +3174,16 @@
Кнопка.ТолькоВоВсехДействиях = Ложь;
// Подменю Еще (Все действия).
ДополнительнаяКнопка = Элементы.Добавить(Свойства.ИмяКоманды + "Еще", Тип("КнопкаФормы"), Элементы.ГруппаУровниГруппировокЕще);
ДополнительнаяКнопка = Элементы.Добавить(Свойства.ИмяКоманды + "Еще", Тип("КнопкаФормы"),
Элементы.ГруппаУровниГруппировокЕще);
ДополнительнаяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
ДополнительнаяКнопка.ИмяКоманды = Свойства.ИмяКоманды;
ДополнительнаяКнопка.Заголовок = Свойства.ПредставлениеУровняГруппировки;
ДополнительнаяКнопка.ТолькоВоВсехДействиях = Истина;
// Контекстное меню отчета.
КнопкаКонтекстногоМеню = Элементы.Добавить(Свойства.ИмяКоманды + "КонтекстноеМеню", Тип("КнопкаФормы"), Элементы.ГруппаУровниГруппировокКонтекстноеМеню);
КнопкаКонтекстногоМеню = Элементы.Добавить(Свойства.ИмяКоманды + "КонтекстноеМеню", Тип("КнопкаФормы"),
Элементы.ГруппаУровниГруппировокКонтекстноеМеню);
КнопкаКонтекстногоМеню.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
КнопкаКонтекстногоМеню.ИмяКоманды = Свойства.ИмяКоманды;
КнопкаКонтекстногоМеню.Заголовок = Свойства.ПредставлениеУровняГруппировки;
@@ -3206,19 +3195,9 @@
&НаСервере
Функция СвойстваМенюУровнейГруппировокСложногоОтчета(ИндексСтруктурыОтчета)
СвойстваМеню = ИндексСтруктурыОтчета.СкопироватьКолонки("ПорядокГруппировки, ПредставлениеГруппировки"); // ТаблицаЗначений
Колонки = СвойстваМеню.Колонки; // КоллекцияКолонокТаблицыЗначений
Колонки.Вставить(1, "ИмяКоманды", Новый ОписаниеТипов("Строка"));
Колонка = Колонки.Найти("ПорядокГруппировки"); // КолонкаТаблицыЗначений
Колонка.Имя = "УровеньГруппировки";
Колонка = Колонки.Найти("ПредставлениеГруппировки"); // КолонкаТаблицыЗначений
Колонка.Имя = "ПредставлениеУровняГруппировки";
КоличествоУровнейГруппировок = ОтчетТабличныйДокумент.КоличествоУровнейГруппировокСтрок();
СвойстваМеню = СвойстваМенюИзСтруктурыОтчета(ИндексСтруктурыОтчета);
КоличествоУровнейГруппировок = ОтчетТабличныйДокумент.КоличествоУровнейГруппировокСтрок();
Для УровеньГруппировки = 1 По КоличествоУровнейГруппировок Цикл
Свойства = СвойстваМеню.Добавить();
@@ -3229,8 +3208,7 @@
КонецЦикла;
СвойстваМеню.Сортировать("УровеньГруппировки");
СвойстваМеню.Сортировать("УровеньГруппировки");
Возврат СвойстваМеню;
КонецФункции
@@ -3249,33 +3227,45 @@
ГруппировкиОтчета = ГруппировкиОтчетаСУчетомПоляСИерархическойГруппировкой(
ИндексСтруктурыОтчета, ПоляСИерархическойГруппировкой, КоличествоУровнейГруппировок);
СвойстваМеню = ИндексСтруктурыОтчета.СкопироватьКолонки("ПорядокГруппировки, ПредставлениеГруппировки"); // ТаблицаЗначений
КолонкиСвойстваМеню = СвойстваМеню.Колонки; // КоллекцияКолонокТаблицыЗначений
КолонкиСвойстваМеню.Вставить(1, "ИмяКоманды", Новый ОписаниеТипов("Строка"));
Граница = Мин(ГруппировкиОтчета.Количество(), КоличествоУровнейГруппировок) - 1;
Для Индекс = 0 По Граница Цикл
СвойстваМеню = СвойстваМенюИзСтруктурыОтчета(ИндексСтруктурыОтчета);
Для Индекс = 0 По Мин(ГруппировкиОтчета.Количество(), КоличествоУровнейГруппировок) - 1 Цикл
УровеньГруппировки = Индекс + 1;
Свойства = СвойстваМеню.Добавить();
ЗаполнитьЗначенияСвойств(Свойства, ГруппировкиОтчета[Индекс]);
Свойства.ПредставлениеУровняГруппировки = ГруппировкиОтчета[Индекс].ПредставлениеГруппировки;
Свойства.ИмяКоманды = Элементы.ПоказатьУровеньГруппировок.Имя + УровеньГруппировки;
Свойства.ПорядокГруппировки = УровеньГруппировки;
Свойства.УровеньГруппировки = УровеньГруппировки;
КонецЦикла;
Колонка = КолонкиСвойстваМеню.Найти("ПорядокГруппировки"); // КолонкаТаблицыЗначений
СвойстваМеню.Сортировать("УровеньГруппировки");
Возврат СвойстваМеню;
КонецФункции
// Параметры:
// ИндексСтруктурыОтчета - см. ВариантыОтчетовСлужебный.НовыйИндексСтруктурыОтчета
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * ИмяКоманды - Строка
// * УровеньГруппировки - Число
// * ПредставлениеУровняГруппировки - Строка
//
&НаСервереБезКонтекста
Функция СвойстваМенюИзСтруктурыОтчета(ИндексСтруктурыОтчета)
СвойстваМеню = ИндексСтруктурыОтчета.СкопироватьКолонки("ПорядокГруппировки, ПредставлениеГруппировки"); // ТаблицаЗначений
СвойстваМеню.Колонки.Вставить(1, "ИмяКоманды", Новый ОписаниеТипов("Строка"));
Колонка = СвойстваМеню.Колонки.Найти("ПорядокГруппировки"); // КолонкаТаблицыЗначений
Колонка.Имя = "УровеньГруппировки";
Колонка = КолонкиСвойстваМеню.Найти("ПредставлениеГруппировки"); // КолонкаТаблицыЗначений
Колонка = СвойстваМеню.Колонки.Найти("ПредставлениеГруппировки"); // КолонкаТаблицыЗначений
Колонка.Имя = "ПредставлениеУровняГруппировки";
СвойстваМеню.Сортировать("УровеньГруппировки");
Возврат СвойстваМеню;
КонецФункции
@@ -3706,7 +3696,12 @@
Элементы.ГруппаСохранениеВыборВариантаОтчета.Видимость = Не ОбщегоНазначения.РазделениеВключено()
Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных();
Элементы.ИзменитьСоставБыстрыхНастроек.Видимость = ПоказыватьКомандыИзмененияВарианта;
Элементы.ИзменитьСоставБыстрыхНастроек.Видимость = ПоказыватьКомандыИзмененияВарианта
И Не ОбщегоНазначения.ЭтоМобильныйКлиент();
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Переместить(Элементы.ГруппаПоказатель, Элементы.ГруппаДляПоказателей);
КонецЕсли;
ЭтоПредопределенныйВариант = Не НастройкиОтчета.Пользовательский
И ЗначениеЗаполнено(НастройкиОтчета.ПредопределенныйСсылка);
@@ -3,11 +3,20 @@
<p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи и документа,а также проверки действительности сертификата. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p>
<p>С помощью электронной подписи можно:</p>
<ul><li>Подписывать объекты программы (например, поля <strong>Наименование</strong> и <strong>Краткое содержание</strong>);
</li><li>Подписывать содержимое хранимых файлов.</li></ul><h3>Сведения о подписи</h3>
</li>
<li>Подписывать содержимое хранимых файлов.</li></ul><h3>Сведения о подписи</h3>
<ul><li><strong>Автор подписи</strong> - данные о том, кому был выдан сертификат;
</li><li><strong>Установивший подпись</strong> - программа автоматически выводит пользователя, который установил подпись;
</li><li><strong>Дата подписи</strong> - дата и время установки подписи;
</li><li><strong>Комментарий</strong> - дополнительная информация о подписи. </li></ul><h3>Выгрузка подписи</h3>
</li>
<li><b>Тип подписи</b> - существует несколько типов подписей в зависимости от срока действия;</li>
<li><strong>Установивший подпись</strong> - программа автоматически выводит пользователя, который установил подпись;
</li>
<li><strong>Дата подписи</strong> - дата и время установки подписи;
</li>
<li><strong>Комментарий</strong> - дополнительная информация о подписи. </li></ul><h3>Выгрузка подписи</h3>
<ul><li>Нажмите <strong>Сохранить в файл</strong>, укажите папку на сетевом или локальном диске, для того чтобы сохранить данные электронной подписи на компьютер.</li></ul><h3>Просмотр сертификата</h3>
<ul><li>Нажмите <strong>Открыть сертификат</strong>, для того чтобы просмотреть <a href="CommonForm.Сертификат/Help">свойства сертификата ключа электронной подписи</a>.</li></ul><h3>См. также:</h3>
<ul><li>Нажмите <strong>Открыть сертификат</strong>, для того чтобы просмотреть <a href="CommonForm.Сертификат/Help">свойства сертификата ключа электронной подписи</a>.</li></ul><h3>Продление срока действия (усовершенствование) подписи</h3>
<div>
<ul><li>Нажмите <b>Продлить действие</b>, выберите <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способ усовершенствования</a> (тип подписи). </li>
<li>Кнопка недоступна, если продление подписи невозможно.</li></ul></div>
<h3>См. также:</h3>
<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a>. </li></ul></body></html>
@@ -145,7 +145,7 @@
КонецПроцедуры
// Для вызова из формы восстановления связи с главным узлом
// см. общую форму ВосстановлениеСвязиСГлавнымУзлом
// см. ОбщаяФорма.ВосстановлениеСвязиСГлавнымУзлом.
//
Процедура ПриПодтвержденииОтключенияСвязиСГлавнымУзлом() Экспорт
@@ -499,7 +499,7 @@
// Для внутреннего использования.
//
Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт
Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(ЗагрузкаДанных = Ложь) Экспорт
Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться в файловой информационной базе.'");
@@ -507,15 +507,20 @@
УстановитьПривилегированныйРежим(Истина);
ЗагрузитьДанныеНачальногоОбраза();
ЗагрузитьПараметрыИзНачальногоОбраза();
// Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил.
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
Если ЗагрузкаДанных Тогда
ЗагрузитьДанныеНачальногоОбраза();
Иначе
ЗагрузитьПараметрыИзНачальногоОбраза();
// Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил.
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ();
Если Не ЗагрузкаДанных Тогда
ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ();
КонецЕсли;
КонецПроцедуры
@@ -216,7 +216,13 @@
Если РезультатЗапроса.Пустой() Тогда
АдресныйКлассификаторСлужебный.ПроверкаНаУстаревшийРегион(Результат, СведенияОРегионе);
Если СтрСравнить(НаименованиеРегиона,
АдресныйКлассификаторСлужебный.ДействующиеНаименованиеКемеровскойОбласти()) = 0 Тогда
Результат.КодСубъектаРФ = 42;
Иначе
АдресныйКлассификаторСлужебный.ПроверкаНаУстаревшийРегион(Результат, СведенияОРегионе);
КонецЕсли;
Возврат Новый ФиксированнаяСтруктура(Результат);
КонецЕсли;
@@ -1030,6 +1030,7 @@
Если ЗагруженныеСведения.Загружен Тогда
АдресаЗагруженныеДанные.Вставить(УникальныйКлюч, Адрес);
Иначе
УстановкаТипаКузбассКемеровскойОбластиКакВГАР(Адрес);
АдресаВебСервис.Вставить(УникальныйКлюч, Адрес);
КонецЕсли;
КонецЦикла;
@@ -2073,16 +2074,24 @@
Функция АдаптацияНазванияРегиона(Название) Экспорт
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
Если СтрСравнить(Название, "Кемеровская область - Кузбасс обл") = 0
Или СтрСравнить(Название, "Кемеровская область - Кузбасс область") = 0
Или СтрСравнить(Название, "Кемеровская область") = 0 Тогда
Возврат "Кемеровская область - Кузбасс";
Возврат ДействующиеНаименованиеКемеровскойОбласти();
КонецЕсли;
// АПК: 1297-вкл
Возврат СокрЛП(Название);
КонецФункции
Функция ДействующиеНаименованиеКемеровскойОбласти() Экспорт
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
Возврат "Кемеровская область - Кузбасс";
// АПК: 1297-вкл
КонецФункции
// Параметры:
// НаименованияАдресныхОбъектов - Массив
// Возвращаемое значение:
@@ -4774,10 +4783,27 @@
КонецЦикла;
СписокИзвлеченныхФайлов(КаталогФайлов);
Возврат КаталогФайлов;
КонецФункции
Процедура СписокИзвлеченныхФайлов(КаталогФайлов)
НайденныеФайлы = НайтиФайлы(КаталогФайлов, ПолучитьМаскуВсеФайлы(), Истина);
СписокФайлов = Новый Массив;
Для каждого НайденныеФайл Из НайденныеФайлы Цикл
Если НайденныеФайл.ЭтоФайл() Тогда
СписокФайлов.Добавить(НайденныеФайл.Имя);
КонецЕсли;
КонецЦикла;
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Примечание,
,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Список извлеченных файлов адресных сведений региона: %1'"),
СтрСоединить(СписокФайлов, ",")));
КонецПроцедуры
Функция НоваяТаблицаАдресовСРазбивкойНаПоля()
Строка250 = ОбщегоНазначения.ОписаниеТипаСтрока(250);
@@ -8196,6 +8222,8 @@
ОписаниеФайла.ФайлЧтения = Неопределено;
Если ОписаниеФайла.УдалитьПутьПриЗакрытии Тогда
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Примечание,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удаление файла региона %1'"), ОписаниеФайла.Путь));
ФайловаяСистема.УдалитьВременныйФайл(ОписаниеФайла.Путь);
КонецЕсли;
@@ -9615,13 +9643,21 @@
Процедура УстановкаТипаКузбассКемеровскойОбласти(КонтактнаяИнформацияПоПолям) Экспорт
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
Если СтрСравнить(КонтактнаяИнформацияПоПолям.area, "Кемеровская область - Кузбасс") = 0 Тогда
Если СтрСравнить(КонтактнаяИнформацияПоПолям.area, ДействующиеНаименованиеКемеровскойОбласти()) = 0 Тогда
КонтактнаяИнформацияПоПолям.area = "Кемеровская область -";
КонтактнаяИнформацияПоПолям.areaType= "Кузбасс";
КонецЕсли;
// АПК: 1297-вкл
КонецПроцедуры
Процедура УстановкаТипаКузбассКемеровскойОбластиКакВГАР(КонтактнаяИнформацияПоПолям)
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
Если СтрНайти(ВРег(КонтактнаяИнформацияПоПолям.area), ВРег("Кемеровская область")) > 0 Тогда
КонтактнаяИнформацияПоПолям.area = "Кемеровская область - Кузбасс";
КонтактнаяИнформацияПоПолям.areaType= "обл";
КонецЕсли;
// АПК: 1297-вкл
КонецПроцедуры
Функция НаименованиеРегионаБезТипа(Наименование)
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
@@ -9642,8 +9678,6 @@
Возврат;
КонецЕсли;
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
УстановитьПривилегированныйРежим(Истина);
Авторизация = ПараметрыАутентификацииНаСайте();
УстановитьПривилегированныйРежим(Ложь);
@@ -9670,10 +9704,15 @@
ПутьДляСохранения = ВременныйКаталог + ВРег(ФайлРегиона.ИмяФайла);
ПараметрыПолучения.Вставить("ПутьДляСохранения", ПутьДляСохранения);
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения);
Если Не ЗагруженныйФайл.Статус Тогда
ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог);
ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке;
ФайлПолучен = ПолучитьФайлИзИнтернета(ОписаниеРегиона, ВременныйКаталог, ПараметрыПолучения, ФайлРегиона.ИмяФайла);
Если Не ФайлПолучен.Статус Тогда
// 2 попытка получения файла
ФайлПолучен = ПолучитьФайлИзИнтернета(ОписаниеРегиона, ВременныйКаталог, ПараметрыПолучения, ФайлРегиона.ИмяФайла);
Если Не ФайлПолучен.Статус Тогда
ВызватьИсключение ФайлПолучен.СообщениеОбОшибке;
КонецЕсли;
КонецЕсли;
КодыСубъектовДляЗагрузки.Добавить(КодСубъекта);
@@ -9683,6 +9722,46 @@
КонецПроцедуры
Функция ПолучитьФайлИзИнтернета(ОписаниеРегиона, Знач ВременныйКаталог, ПараметрыПолучения, ИмяФайла)
Результат = СведенияОПолученииФайла();
ПутьДляСохранения = ПараметрыПолучения.ПутьДляСохранения;
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения);
Если Не ЗагруженныйФайл.Статус Тогда
ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог);
Результат.СообщениеОбОшибке = ЗагруженныйФайл.СообщениеОбОшибке;
Возврат Результат;
КонецЕсли;
Если Не ФайлСуществует(ПутьДляСохранения) Тогда
Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось загрузить файл %1. Загрузка адресных сведений перервана.
|Техническая информация: %2'"), ИмяФайла, ПутьДляСохранения);
Иначе
Результат.Статус = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Статус - Булево
// * СообщениеОбОшибке - Строка
//
Функция СведенияОПолученииФайла()
Результат = Новый Структура;
Результат.Вставить("Статус", Ложь);
Результат.Вставить("СообщениеОбОшибке", "");
Возврат Результат;
КонецФункции
Процедура ЗагрузитьДанныеКлассификатораАдресовИзФайла(СубъектРФ, ОписаниеФайлов, ПараметрыЗагрузки) Экспорт
ДатаЗагрузки = ПараметрыЗагрузки.ДатаЗагрузки;
@@ -9696,6 +9775,9 @@
КаталогФайлов = КаталогФайлов + Формат(СубъектРФ, "ЧЦ=2; ЧВН=") + ПолучитьРазделительПутиСервера();
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Примечание,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка региона %1 из %2'"), СубъектРФ, КаталогФайлов));
Попытка
СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(КаталогФайлов);
@@ -9763,18 +9845,25 @@
ДатаЗагрузки = ТекущаяУниверсальнаяДата();
Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда
// Файлы уже подготовлены
КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ОписаниеФайлов);
КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ОписаниеФайлов);
КаталогОбщихАдресныхСведений = КаталогФайлов;
Иначе
КаталогФайлов = ИзвлечьФайлыВКаталог(ОписаниеФайлов);
КонецЕсли;
Если ТипЗнч(КодыСубъектовРФ) = Тип("Массив") И КодыСубъектовРФ.Количество() > 0 Тогда
КаталогОбщихАдресныхСведений = КаталогФайлов + Формат(КодыСубъектовРФ[0], "ЧЦ=2; ЧВН=") + ПолучитьРазделительПутиСервера();
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Попытка
СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(КаталогФайлов);
СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(КаталогОбщихАдресныхСведений);
ОбновитьСлужебныеАдресныеСведения(СлужебныеАдресныеСведения);
// 2. Все заказанные субъекты
ВсегоСубъектов = КодыСубъектовРФ.Количество();
НомерПоПорядку = 0;
@@ -9793,7 +9882,8 @@
Попытка
ЗагрузитьАдресныеСведенияПоРегиону(СубъектРФ, КаталогФайлов, ПараметрыЗагрузки);
КаталогФайловРегиона = КаталогФайлов + Формат(СубъектРФ, "ЧЦ=2; ЧВН=") + ПолучитьРазделительПутиСервера();
ЗагрузитьАдресныеСведенияПоРегиону(СубъектРФ, КаталогФайловРегиона, ПараметрыЗагрузки);
// Ставим версию данных загрузки региона.
УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки);
@@ -9814,7 +9904,7 @@
// 4. Загружаем сокращения адресов.
// Эти данные будут нужны при разборах адреса из строки.
ОбновитьАдресныеСокращения(КаталогФайлов);
ОбновитьАдресныеСокращения(КаталогОбщихАдресныхСведений);
// 5. Очищаем временный каталог.
ФайловаяСистема.УдалитьВременныйФайл(КаталогФайлов);
@@ -10556,8 +10646,12 @@
Процедура УдалитьФайлыРегиона(КаталогФайлов)
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Примечание,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удаление файла региона: %1'"), КаталогФайлов));
УдалитьФайлы(КаталогФайлов);
КонецПроцедуры
// Очистка данных классификатора адресов.
@@ -10846,6 +10940,10 @@
Результат.Вставить("ПолноеИмя", КаталогФайлов + ИмяИсходногоФайла + ".FI");
КонецЕсли;
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Примечание,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Чтение файла региона %1 из %2'"),
КодСубъектаРФ, Результат.ПолноеИмя));
// Тип заголовка
СвойствоЗаголовка = ФабрикаXDTO.Пакеты.Получить(ПространствоИмен()).КорневыеСвойства.Получить(ИмяОписывающегоУзла);
ТипXDTOЗаголовка = СвойствоЗаголовка.Тип;
@@ -10871,11 +10969,14 @@
Результат.Вставить("ДатаВерсии");
Результат.Вставить("ФайлЧтения", Новый ЧтениеFastInfoset);
ФайлЧтения = Результат.ФайлЧтения;
ПроверкаФайла = Новый Файл(Результат.ПолноеИмя);
Если Не ПроверкаФайла.Существует() Тогда
Возврат Неопределено;
Если Не ФайлСуществует(Результат.ПолноеИмя) Тогда
СписокИзвлеченныхФайлов(КаталогФайлов);
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось загрузить файл %1. Загрузка адресных сведений перервана.
|Техническая информация: %2'"), ИмяИсходногоФайла, Результат.ПолноеИмя);
КонецЕсли;
ФайлЧтения = Результат.ФайлЧтения;
ФайлЧтения.ОткрытьФайл(Результат.ПолноеИмя);
// Встаем на первый узел с данными.
@@ -10904,11 +11005,30 @@
Функция КаталогВременногоХранилищаФайлов() Экспорт
КаталогФайлов = ФайловаяСистема.КаталогОбщегоВременногоХранилищаФайлов("AdrCls") + ПолучитьРазделительПутиСервера();
КаталогФайлов = ФайловаяСистема.КаталогОбщегоВременногоХранилищаФайлов("AdrCls");
Если Не СтрЗаканчиваетсяНа(КаталогФайлов, ПолучитьРазделительПутиСервера()) Тогда
КаталогФайлов = КаталогФайлов + ПолучитьРазделительПутиСервера();
КонецЕсли;
Возврат КаталогФайлов;
КонецФункции
Функция ФайлСуществует(Знач ПутьДляСохранения)
ПроверкаФайла = Новый Файл(ПутьДляСохранения);
Если Не ПроверкаФайла.Существует() Тогда
Возврат Ложь;
КонецЕсли;
Если ПроверкаФайла.ЭтоФайл() Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция УровеньМуниципальногоРодительскогоОбъектаПоАдресу(Адрес)
@@ -95,6 +95,14 @@
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.АналитическийОтчетПоАнкетированию);
КонецПроцедуры
// См. РассылкаОтчетовПереопределяемый.ОпределитьИсключаемыеОтчеты
Процедура ПриОпределенииИсключаемыхОтчетов(ИсключаемыеОтчеты) Экспорт
ИсключаемыеОтчеты.Добавить(Метаданные.Отчеты.АнализОпроса);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -135,7 +135,6 @@
НачатьТранзакцию();
Попытка
ЗаблокироватьДанныеПараметровБлокировки();
ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = УстановитьБлокировкуРаботыСВнешнимиРесурсами();
УстановленныеПараметры.Добавить("РаботаСВнешнимиРесурсамиЗаблокирована");
@@ -578,6 +577,14 @@
Процедура УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения)
ЗаблокироватьДанныеПараметровБлокировки();
АктуальныеПараметрыБлокировки = СохраненныеПараметрыБлокировки();
Если АктуальныеПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено Тогда
// Если признак необходимости принятия решения о блокировке уже был установлен в другом сеансе.
Возврат;
КонецЕсли;
ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено;
ПараметрыБлокировки.ПричинаБлокировки = ПредставлениеПричиныБлокировки(ПараметрыБлокировки);
СохранитьПараметрыБлокировки(ПараметрыБлокировки);
@@ -4766,9 +4766,11 @@
Языки = Новый Массив;
КодТекущегоЯзыка = ?(ТипЗнч(ТекущийЯзык()) = Тип("Строка"), ТекущийЯзык(), ТекущийЯзык().КодЯзыка);
Исключения = Новый Массив;
Исключения.Добавить(ТекущийЯзык());
Исключения.Добавить(Метаданные.ОсновнойЯзык);
Исключения.Добавить(КодТекущегоЯзыка);
Исключения.Добавить(ОбщегоНазначения.КодОсновногоЯзыка());
Для Каждого Язык Из Метаданные.Языки Цикл
@@ -227,7 +227,7 @@
Результат.Колонки.Добавить("ПолноеИмя", ВариантыОтчетов.ОписаниеТиповСтрока(510));
Результат.Колонки.Добавить("Представление", ВариантыОтчетов.ОписаниеТиповСтрока(150));
Если ТекущийЯзык() = Метаданные.ОсновнойЯзык Тогда
Если ОбщегоНазначения.ЭтоОсновнойЯзык() Тогда
Возврат Результат;
КонецЕсли;
@@ -563,8 +563,10 @@
// - ГруппировкаКомпоновкиДанных
// - ГруппировкаТаблицыКомпоновкиДанных
// Настройки - НастройкиКомпоновкиДанных
// ПоляСортировки - Соответствие
// - Неопределено
// ПоляСортировки - Соответствие из КлючЗначение:
// * Ключ - ПолеКомпоновкиДанных
// * Значение - НаправлениеСортировкиКомпоновкиДанных
//
// Замещать - Булево
//
// Возвращаемое значение:
@@ -1304,8 +1306,49 @@
КонецПроцедуры
#Область Конструкторы
// Возвращаемое значение:
// ТаблицаЗначений:
// * ПорядокРаздела - Число
// * КоличествоРазделов - Число
// * ПорядокГруппировки - Число
// * ПорядокПоля - Число
// * ИдентификаторНастроек - ИдентификаторКомпоновкиДанных
// * ИдентификаторРаздела - ИдентификаторКомпоновкиДанных
// * ИдентификаторГруппировки - ИдентификаторКомпоновкиДанных
// * ИдентификаторПоля - ИдентификаторКомпоновкиДанных
// * Поле - ПолеКомпоновкиДанных
// * ТипПоля - Тип
// * ИспользуетсяВПоляхГруппировки - Булево
// * ТипГруппировки - ТипГруппировкиКомпоновкиДанных
// * ИмяГруппировки - Строка
// * ПредставлениеГруппировки - Строка
// * ПредставлениеПоля - Строка
// * Текст - Строка
// * Период - Булево
// * Измерение - Булево
// * Ресурс - Булево
// * ЭтоФормула - Булево
// * ТипЗначения - Тип
// * ПолеСортируется - Булево
// * НаправлениеСортировки - НаправлениеСортировкиКомпоновкиДанных
// * СгруппироватьПоВыбранномуПолю - Булево
// * ВставитьПолеСлева - Булево
// * ВставитьПолеСправа - Булево
// * ВставитьГруппировкуВыше - Булево
// * ВставитьГруппировкуНиже - Булево
// * ПереместитьПолеВлево - Булево
// * ПереместитьПолеВправо - Булево
// * ПереместитьПолеВыше - Булево
// * ПереместитьПолеНиже - Булево
// * СкрытьПоле - Булево
// * ПереименоватьПоле - Булево
// * ОформитьОтрицательные - Булево
// * ОформитьПоложительные - Булево
// * ОформитьЕще - Булево
// * СодержитРодительскиеГруппировки - Булево
// * СодержитДочерниеГруппировки - Булево
// * ИдентификаторИндекса - УникальныйИдентификатор
//
Функция НовыйИндексСтруктурыОтчета() Экспорт
ОписаниеЧисла = Новый ОписаниеТипов("Число");
@@ -1402,8 +1445,6 @@
#КонецОбласти
#КонецОбласти
#Область ИнициализацияСвойствЗаголовковТаблиц
Процедура ОпределитьИерархиюЗаголовковОтчета(РазрезСвойствЗаголовков, Заголовки)
@@ -1756,8 +1797,6 @@
КонецФункции
#Область Конструкторы
Функция СтандартныйРазрезСвойствЗаголовковОтчета()
ОписаниеЧисла = Новый ОписаниеТипов("Число");
@@ -1889,8 +1928,6 @@
#КонецОбласти
#КонецОбласти
#Область ДанныеЭлементаРасшифровки
Функция ДанныеЭлементаРасшифровки(Форма, Расшифровка) Экспорт
@@ -2163,7 +2163,14 @@
НеиспользуемыеОбласти.Добавить("ИспользоватьВЗаголовкеПолейРесурсов");
НеиспользуемыеОбласти.Добавить("ИспользоватьВЗаголовкеОбщегоИтога");
#Если ВебКлиент Тогда
СистемнаяИнформация = Новый СистемнаяИнформация;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.20.1859") > 0 Тогда
НеиспользуемыеОбласти.Добавить("ИспользоватьВЗаголовкеПолейРесурсовОбщегоИтога");
КонецЕсли;
#Иначе
НеиспользуемыеОбласти.Добавить("ИспользоватьВЗаголовкеПолейРесурсовОбщегоИтога");
#КонецЕсли
Возврат НеиспользуемыеОбласти;
@@ -3575,6 +3582,10 @@
Для Каждого Формула Из Формулы Цикл
Если ТипЗнч(Формула) <> Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Если СокрЛП(Выражение) = Формула.ПолучитьВыражениеДетальныхЗаписей() Тогда
Возврат Формула;
КонецЕсли;
@@ -3589,6 +3600,15 @@
Формула = ВариантыОтчетовСлужебныйКлиентСервер.ФормулаПоПутиКДанным(Настройки, ПутьКДанным);
Если ТипЗнч(Формула) <> Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Редактирование поля ""%1""доступно в форме настроек для технического специалиста на закладке ""Пользовательские поля""'"),
Формула.Заголовок);
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Возврат;
КонецЕсли;
ПараметрыРедактированияФормулы = КонструкторФормулКлиент.ПараметрыРедактированияФормулы();
ПараметрыРедактированияФормулы.Операнды = Форма.НастройкиОтчета.АдресСхемы;
ПараметрыРедактированияФормулы.ИмяКоллекцииСКДОперандов = ИмяКоллекции;
@@ -3665,7 +3685,6 @@
Формула = ДополнительныеПараметры.Формула;
Формула.УстановитьВыражениеДетальныхЗаписей(Выражение);
Формула.УстановитьПредставлениеВыражений(ПредставлениеВыражения, "");
Формула.Заголовок = ?(ЗначениеЗаполнено(Заголовок), Заголовок, ПредставлениеВыражения);
ОписаниеФормулы = ДополнительныеПараметры.КоллекцияПолей.НайтиПоле(Новый ПолеКомпоновкиДанных(Формула.ПутьКДанным));
@@ -3675,9 +3694,6 @@
Процедура УстановитьВыражениеИтоговыхЗаписей(Формула, ОписаниеФормулы)
ВыражениеДетальныхЗаписей = Формула.ПолучитьВыражениеДетальныхЗаписей();
ВыражениеИтоговыхЗаписей = Формула.ПолучитьВыражениеИтоговыхЗаписей();
Если ОписаниеФормулы = Неопределено
Или ОписаниеФормулы.Тип.Типы().Количество() > 1
Или Не ОписаниеФормулы.Тип.СодержитТип(Тип("Число")) Тогда
@@ -3685,87 +3701,31 @@
Возврат;
КонецЕсли;
Попытка
ВыражениеИтоговыхЗаписей = ВыражениеИтоговыхЗаписей(ВыражениеДетальныхЗаписей);
Формула.УстановитьВыражения(ВыражениеДетальныхЗаписей, ВыражениеИтоговыхЗаписей);
Исключение
ВыражениеДетальныхЗаписей = Формула.ПолучитьВыражениеДетальныхЗаписей();
Если ВыражениеСодержитАгрегатнуюФункцию(ВыражениеДетальныхЗаписей) Тогда
ВыражениеИтоговыхЗаписей = ВыражениеДетальныхЗаписей;
Иначе
ВыражениеИтоговыхЗаписей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"Сумма(%1)", ВыражениеДетальныхЗаписей);
Формула.УстановитьВыражения(ВыражениеДетальныхЗаписей, ВыражениеИтоговыхЗаписей);
КонецПопытки;
КонецЕсли;
Формула.УстановитьВыражения(ВыражениеДетальныхЗаписей, ВыражениеИтоговыхЗаписей);
КонецПроцедуры
Функция ВыражениеИтоговыхЗаписей(Знач Выражение)
Функция ВыражениеСодержитАгрегатнуюФункцию(Знач Выражение)
ОписаниеВыражения = Новый Массив;
Выражение = ВРег(СтрСоединить(СтрРазделить(Выражение, " " + Символы.Таб + Символы.ПС, Ложь), ""));
АрифметическиеОператоры = "+-*/%";
КоличествоСимволов = СтрДлина(Выражение);
Для НомерСимвола = 1 По КоличествоСимволов Цикл
Если КоличествоСимволов = 0 Тогда
Прервать;
КонецЕсли;
Символ = Сред(Выражение, НомерСимвола, 1);
Если Не ЗначениеЗаполнено(Символ) Тогда
Продолжить;
КонецЕсли;
Если Символ = "(" Тогда
ОписаниеВыражения.Добавить(Символ);
Выражение = СокрЛП(Сред(Выражение, НомерСимвола + 1));
НомерСимвола = 0;
КоличествоСимволов = СтрДлина(Выражение);
ИначеЕсли СтрНайти(АрифметическиеОператоры, Символ) > 0 Тогда
Операнд = СокрЛП(Сред(Выражение, 1, НомерСимвола - 1));
Если ОбщегоНазначенияКлиентСервер.ЭтоЧисло(Операнд) Тогда
ВложенноеВыражение = Операнд;
Иначе
ВложенноеВыражение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Сумма(%1)", Операнд);
КонецЕсли;
ОписаниеВыражения.Добавить(ВложенноеВыражение);
ОписаниеВыражения.Добавить(Символ);
Выражение = СокрЛП(Сред(Выражение, НомерСимвола + 1));
НомерСимвола = 0;
КоличествоСимволов = СтрДлина(Выражение);
КонецЕсли;
КонецЦикла;
Если ОбщегоНазначенияКлиентСервер.ЭтоЧисло(Выражение) Тогда
ВложенноеВыражение = Выражение;
Иначе
ВложенноеВыражение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Сумма(%1)", Выражение);
Если СтрНайти(Выражение, "СУММА(")
Или СтрНайти(Выражение, "КОЛИЧЕСТВО(")
Или СтрНайти(Выражение, "МАКСИМУМ(")
Или СтрНайти(Выражение, "МИНИМУМ(")
Или СтрНайти(Выражение, "СРЕДНЕЕ(") Тогда
Возврат Истина;
КонецЕсли;
ОписаниеВыражения.Добавить(ВложенноеВыражение);
ВыражениеИтоговыхЗаписей = "";
Для Каждого Элемент Из ОписаниеВыражения Цикл
ВыражениеИтоговыхЗаписей = ВыражениеИтоговыхЗаписей + " " + Элемент;
КонецЦикла;
Возврат СокрЛП(ВыражениеИтоговыхЗаписей);
Возврат Ложь;
КонецФункции
@@ -561,6 +561,12 @@
Если ПараметрыВыполнения.БезРасширений Тогда
ПараметрыВыполнения.БезРасширений = ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения);
ИначеЕсли Не ПараметрыВыполнения.СРасширениямиБазыДанных
И Не ПараметрыВыполнения.ЗапуститьНеВФоне
И СтандартныеПодсистемыСервер.ЭтоРазделенныйРежимСеансаБезРазделителей() Тогда
ПараметрыВыполнения.СРасширениямиБазыДанных = Истина;
КонецЕсли;
ПараметрыЭкспортнойПроцедуры = ПараметрыПроцедуры;
@@ -512,7 +512,7 @@
Блокировка = Новый БлокировкаДанных;
Если ПоставляемаяОбработкаСуществует Тогда
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка);
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка, ОписаниеИнсталляции.Инсталляция);
Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда
ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ИспользуемаяОбработкаСсылка);
@@ -545,7 +545,7 @@
КонецЦикла;
// Создается элемент справочника ДополнительныеОтчетыИОбработки, выступающий в роли используемой обработки.
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка);
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка, ОписаниеИнсталляции.Инсталляция);
Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда
ИспользуемаяОбработка = ИспользуемаяОбработкаСсылка.ПолучитьОбъект();
Иначе
@@ -1322,7 +1322,7 @@
// Возвращаемое значение:
// СправочникСсылка.ДополнительныеОтчетыИОбработки
//
Функция ИспользуемаяОбработка(ПоставляемаяОбработка)
Функция ИспользуемаяОбработка(ПоставляемаяОбработка, ИдентификаторИнсталляции = Неопределено)
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ТекстСообщения = НСтр("ru = 'Использование функции %1 доступно только сеансов с установленным разделением данных.'");
@@ -1340,13 +1340,26 @@
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ПоставляемаяОбработка", ПоставляемаяОбработка);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.ИспользуемаяОбработка;
КонецЕсли;
Если ИдентификаторИнсталляции = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(
Новый УникальныйИдентификатор(ИдентификаторИнсталляции));
Если ОбщегоНазначения.СсылкаСуществует(ИспользуемаяОбработка) Тогда
Возврат ИспользуемаяОбработка;
Иначе
Возврат Неопределено;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.ИспользуемаяОбработка;
КонецФункции
@@ -47,9 +47,6 @@
// Для регистрации условий следует использовать процедуру
// ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды.
// Условия объединяются по "И".
// * ИзменяетВыбранныеОбъекты - Булево - определяет доступность команды, когда у пользователя нет прав на
// изменение объекта. Если Истина, то в описанной выше ситуации кнопка будет недоступна.
// Значение по умолчанию - Истина.
//
// Настройки процесса выполнения:
// * МножественныйВыбор - Булево
@@ -690,6 +690,8 @@
МодульКалендарныеГрафикиСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
Если ОбщегоНазначения.ПодсистемаСуществует(
"СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда
МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль(
@@ -705,13 +707,16 @@
МодульРаботаСФайламиСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда
МодульУдалениеПомеченныхОбъектовСлужебный = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный");
МодульУдалениеПомеченныхОбъектовСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
МодульЭлектроннаяПодписьСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииИспользованияРегламентныхЗаданий.
@@ -845,7 +850,13 @@
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
МодульРаботаСАдресами.ПриДобавленииКлассификаторов(Классификаторы);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись")
И Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено Тогда
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
МодульЭлектроннаяПодписьСлужебный.ПриДобавленииКлассификаторов(Классификаторы);
КонецЕсли;
КонецПроцедуры
// См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора.
@@ -875,6 +886,13 @@
МодульРаботаСАдресами.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан,
ДополнительныеПараметры);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись")
И Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено Тогда
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
МодульЭлектроннаяПодписьСлужебный.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан,
ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
@@ -4300,6 +4318,25 @@
#КонецОбласти
#Область РассылкаОтчетов
// См. РассылкаОтчетовПереопределяемый.ОпределитьИсключаемыеОтчеты
Процедура ПриОпределенииИсключаемыхОтчетов(ИсключаемыеОтчеты) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный");
МодульУправлениеДоступомСлужебный.ПриОпределенииИсключаемыхОтчетов(ИсключаемыеОтчеты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда
МодульАнкетирование = ОбщегоНазначения.ОбщийМодуль("Анкетирование");
МодульАнкетирование.ПриОпределенииИсключаемыхОтчетов(ИсключаемыеОтчеты);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область РаботаСФайлами
// См. РаботаСФайламиСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов.
@@ -428,6 +428,7 @@
ПредставлениеПоля.ПутьКДанным = ИмяСпискаПолей + ".Заголовок";
ПредставлениеПоля.Вид = ВидПоляФормы.ПолеВвода;
ПредставлениеПоля.ТолькоПросмотр = Истина;
ПредставлениеПоля.Заголовок = НСтр("ru = 'Заголовок'");
ПредставлениеПоля = Форма.Элементы.Добавить(ИмяСпискаПолей + "ПредставлениеПутиКДанным", Тип("ПолеФормы"), ГруппаКолонок);
ПредставлениеПоля.ПутьКДанным = ИмяСпискаПолей + ".ПредставлениеПутиКДанным";
@@ -728,7 +729,7 @@
Реквизит.ПредставлениеПутиКДанным = Реквизит.Заголовок;
КонецЕсли;
Если ОписаниеПоля.Элементы.Количество() > 0 И Реквизит.Имя <> "Ссылка" Тогда
Если ОписаниеПоля.Элементы.Количество() > 0 Тогда
Реквизит.ЕстьПодчиненные = Истина;
КонецЕсли;
@@ -1999,7 +2000,7 @@
ГруппыОператоров = "Разделители, Операторы, ЛогическиеОператорыИКонстанты,
|ЧисловыеФункции, СтроковыеФункции, ПрочиеФункции";
ИначеЕсли ГруппыОператоров = "ВсеОператорыСКД" Тогда
ГруппыОператоров = "Операторы, ОперацииНадСтрокамиСКД, ОперацииСравненияСКД,
ГруппыОператоров = "Операторы, ОперацииНадСтрокамиСКД, РаботаСДатамиСКД, ОперацииСравненияСКД,
|ЛогическиеОперацииСКД, АгрегатныеФункцииСКД";
КонецЕсли;
@@ -2019,6 +2020,8 @@
ДобавитьГруппуОператоровПрочиеФункции(СписокОператоров);
ИначеЕсли ИмяГруппы = "ОперацииНадСтрокамиСКД" Тогда
ДобавитьГруппуОператоровОперацииНадСтроками(СписокОператоров);
ИначеЕсли ИмяГруппы = "РаботаСДатамиСКД" Тогда
ДобавитьГруппуОператоровРаботаСДатами(СписокОператоров);
ИначеЕсли ИмяГруппы = "ОперацииСравненияСКД" Тогда
ДобавитьГруппуОператоровОперацииСравнения(СписокОператоров);
ИначеЕсли ИмяГруппы = "ЛогическиеОперацииСКД" Тогда
@@ -2168,6 +2171,35 @@
КонецПроцедуры
Процедура ДобавитьГруппуОператоровРаботаСДатами(СписокОператоров)
Группа = СписокОператоров.Строки.Добавить();
Группа.Идентификатор = "РаботаСДатамиСКД";
Группа.Представление = НСтр("ru = 'Работа с датами'");
Группа.Порядок = 2;
Группа.Картинка = БиблиотекаКартинок.ТипФункция;
Тип = Новый ОписаниеТипов("Число");
ДобавитьОператорВГруппу(Группа, "ГОД", НСтр("ru = 'ГОД'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "МЕСЯЦ", НСтр("ru = 'МЕСЯЦ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ЧИСЛО", НСтр("ru = 'ЧИСЛО'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬГОДА", НСтр("ru = 'ДЕНЬГОДА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬ", НСтр("ru = 'ДЕНЬ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "НЕДЕЛЯ", НСтр("ru = 'НЕДЕЛЯ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬНЕДЕЛИ", НСтр("ru = 'ДЕНЬНЕДЕЛИ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ЧАС", НСтр("ru = 'ЧАС'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "МИНУТА", НСтр("ru = 'МИНУТА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "СЕКУНДА", НСтр("ru = 'СЕКУНДА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "НАЧАЛОПЕРИОДА", НСтр("ru = 'НАЧАЛОПЕРИОДА'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "КОНЕЦПЕРИОДА", НСтр("ru = 'КОНЕЦПЕРИОДА'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "ДОБАВИТЬКДАТЕ", НСтр("ru = 'ДОБАВИТЬКДАТЕ'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "РАЗНОСТЬДАТ", НСтр("ru = 'РАЗНОСТЬДАТ'"), Тип, Истина);
КонецПроцедуры
Процедура ДобавитьГруппуОператоровОперацииСравнения(СписокОператоров)
Группа = СписокОператоров.Строки.Добавить();
@@ -238,7 +238,7 @@
Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита];
КонецЦикла;
Отбор.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка;
Отбор.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
НайденныеСтроки = Представления.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
Для каждого ИмяРеквизита Из Реквизиты Цикл
@@ -314,7 +314,7 @@
ИмяРеквизита = Реквизит.Имя;
Отбор = Новый Структура();
Отбор.Вставить("КодЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка);
Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка());
НайденныеСтроки = Объект.Представления.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
@@ -328,7 +328,7 @@
КонецЕсли;
Представление = Объект.Представления.Добавить();
Представление.КодЯзыка = Метаданные.ОсновнойЯзык.КодЯзыка;
Представление.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
КонецЕсли;
Представление[ИмяРеквизита] = Объект[ИмяРеквизита];
@@ -467,7 +467,7 @@
Возврат Истина;
КонецЕсли;
Константы.ОсновнойЯзык.Установить(Метаданные.ОсновнойЯзык.КодЯзыка);
Константы.ОсновнойЯзык.Установить(ОбщегоНазначения.КодОсновногоЯзыка());
Возврат Ложь;
@@ -690,6 +690,46 @@
// Обновление данных
Процедура ОбработатьОбщиеДанныеДляПереходаНаНовуюВерсию() Экспорт
Если Метаданные.Языки.Количество() = 1 Тогда
Возврат;
КонецЕсли;
ОбъектыКОбработке = СписокОбъектовКОбработкеДляПереходаНаНовуюВерсию("Общие");
Если ОбъектыКОбработке.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ОбъектМетаданных = Неопределено;
ПараметрыЗаполнения = Неопределено;
Для каждого ОбъектыКОбработке Из ОбъектыКОбработке Цикл
Если ОбъектМетаданных = Неопределено Или ТипЗнч(ОбъектМетаданных) <> ТипЗнч(ОбъектыКОбработке) Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ОбъектыКОбработке));
ПараметрыЗаполнения = ОбновлениеИнформационнойБазыСлужебный.НаборПараметровДляЗаполненияОбъекта(ОбъектМетаданных);
КонецЕсли;
Если ПараметрыЗаполнения <> Неопределено Тогда
ЗаполнитьИПеренестиСтрокиИзТЧПредставленияВРеквизиты(ОбъектыКОбработке, ПараметрыЗаполнения, ОбъектовОбработано, ПроблемныхОбъектов);
КонецЕсли;
КонецЦикла;
Если ПроблемныхОбъектов > 0 Тогда
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре %1 не удалось обновить некоторые объекты (пропущены): %2 из %3'"),
"МультиязычностьСервер.ОбработатьОбщиеДанныеДляПереходаНаНовуюВерсию",
ПроблемныхОбъектов, ОбъектовОбработано));
КонецЕсли;
КонецПроцедуры
// Регистрирует объекты к обработке в обработчике обновления
//
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
@@ -698,110 +738,8 @@
Возврат;
КонецЕсли;
ОбъектыКОбработке = Новый Массив();
РазделительЗапросов = Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС;
СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбЯзыках();
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) И ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ОбъектыСПредопределеннымиЭлементами = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнением();
ШаблонаЗапроса = "ВЫБРАТЬ
| ДанныеОбъекта.Ссылка
|ИЗ
| &Таблица КАК ДанныеОбъекта
|ГДЕ
| &УсловиеОтбора";
НаборЗапросов = Новый Массив;
Для каждого ОбъектМетаданныхСЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл
ЛокализуемыеРеквизитыОбъекта = НаименованияЛокализуемыхРеквизитовОбъектаВШапке(ОбъектМетаданныхСЭлементами);
Отборы = Новый Массив;
Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл
Если Не РеквизитОбъекта.Значение Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) И ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ШаблонОтбора = "ВЫРАЗИТЬ(&Реквизит КАК СТРОКА(1)) <> """"
| И (ВЫРАЗИТЬ(&Язык1 КАК СТРОКА(1)) = """" ИЛИ ВЫРАЗИТЬ(&Язык2 КАК СТРОКА(1)) = """")";
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1", РеквизитОбъекта.Ключ + "Язык1");
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык2", РеквизитОбъекта.Ключ + "Язык2");
Иначе
ШаблонОтбора = "ВЫРАЗИТЬ(&Реквизит КАК СТРОКА(1)) <> """"
| И ВЫРАЗИТЬ(&Язык1Или2 КАК СТРОКА(1)) = """"";
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1Или2", РеквизитОбъекта.Ключ + "Язык2");
Иначе
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1Или2", РеквизитОбъекта.Ключ + "Язык1");
КонецЕсли;
КонецЕсли;
ТекстОтбора = СтрЗаменить(ШаблонОтбора, "&Реквизит", РеквизитОбъекта.Ключ);
Отборы.Добавить(ТекстОтбора);
КонецЦикла;
Если Отборы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ТекстЗапросаПредварительный = СтрЗаменить(ШаблонаЗапроса, "&Таблица", ОбъектМетаданныхСЭлементами.ПолноеИмя());
ТекстЗапросаПредварительный = СтрЗаменить(ТекстЗапросаПредварительный, "&УсловиеОтбора", СтрСоединить(Отборы, " ИЛИ "));
НаборЗапросов.Добавить(ТекстЗапросаПредварительный);
КонецЦикла;
Если НаборЗапросов.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(НаборЗапросов, РазделительЗапросов);
РезультатыЗапроса = Запрос.Выполнить().Выгрузить();
ОбъектыКОбработке = РезультатыЗапроса.ВыгрузитьКолонку("Ссылка");
КонецЕсли;
КонецЕсли;
// Отдельная порция объектов для регистрации с табличной частью Представления
ОбъектыСТЧПредставления = ОбъектыСТЧПредставления();
Если ОбъектыСТЧПредставления.Количество() > 0 Тогда
ШаблонЗапроса = "ВЫБРАТЬ
| СправочникСТЧПредставления.Ссылка
|ИЗ
| #Таблица КАК СправочникСТЧПредставления";
НаборЗапросов = Новый Массив;
Для Каждого ИмяОбъектаМетаданных Из ОбъектыСТЧПредставления Цикл
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "#Таблица", ОбъектМетаданных.ПолноеИмя());
НаборЗапросов.Добавить(ТекстЗапроса);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(НаборЗапросов, РазделительЗапросов);
РезультатыЗапроса = Запрос.Выполнить().Выгрузить();
ОбъектыСТабличнойЧастьюПредставлениеКОбработке = РезультатыЗапроса.ВыгрузитьКолонку("Ссылка");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбъектыКОбработке, ОбъектыСТабличнойЧастьюПредставлениеКОбработке);
КонецЕсли;
ОбъектыКОбработке = СписокОбъектовКОбработкеДляПереходаНаНовуюВерсию(ВариантДанныхДляОбработкиСУчетомРазделения());
Если ОбъектыКОбработке.Количество() > 0 Тогда
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ОбъектыКОбработке);
КонецЕсли;
@@ -810,15 +748,18 @@
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ОбъектыДляОбработкиОтсутствуют = Истина;
ИтогоОбработано = 0;
ОбрабатываемыеОбъекты = Новый Массив;
ИтогоОбработано = 0;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
Порция = 10000;
ОбъектыСТЧПредставления = ОбъектыСТЧПредставления();
ОбъектыСТЧПредставления = ОбъектыСТЧПредставления(ВариантДанныхДляОбработкиСУчетомРазделения());
Для Каждого ИмяОбъектСТЧПредставления Из ОбъектыСТЧПредставления Цикл
ОбрабатываемыеОбъекты.Добавить(ИмяОбъектСТЧПредставления);
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ИмяОбъектСТЧПредставления);
ПараметрыЗаполнения = Неопределено;
@@ -830,6 +771,12 @@
ЗаполнитьИПеренестиСтрокиИзТЧПредставленияВРеквизиты(Выборка.Ссылка, ПараметрыЗаполнения, ОбъектовОбработано, ПроблемныхОбъектов);
КонецЦикла;
ИтогоОбработано = ИтогоОбработано + ОбъектовОбработано;
Если ИтогоОбработано >= Порция Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда
@@ -846,26 +793,31 @@
ОбъектовОбработано));
КонецЕсли;
ОбъектыСПредопределеннымиЭлементами = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнением();
ОбъектыСПредопределеннымиЭлементами = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнением();
Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ОбъектСПредопределеннымиЭлементами.ПолноеИмя());
Если Выборка.Количество() > 0 Тогда
ОбъектыДляОбработкиОтсутствуют = Ложь;
Параметры.ОбработкаЗавершена = Ложь;
ЗаполнитьПустыеМультиязычныеРеквизитыЗначениемОсновногоЯзыка(Выборка, ОбъектСПредопределеннымиЭлементами, ИтогоОбработано);
Если ИтогоОбработано > 1000 Тогда
Прервать;
КонецЕсли;
Если ОбрабатываемыеОбъекты.Найти(ОбъектСПредопределеннымиЭлементами.ПолноеИмя()) = Неопределено Тогда
ОбрабатываемыеОбъекты.Добавить(ОбъектСПредопределеннымиЭлементами.ПолноеИмя());
КонецЕсли;
КонецЦикла;
Если ОбъектыДляОбработкиОтсутствуют Тогда
Параметры.ОбработкаЗавершена = Истина;
КонецЕсли;
Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл
Если ИтогоОбработано >= Порция Тогда
Прервать;
КонецЕсли;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ОбъектСПредопределеннымиЭлементами.ПолноеИмя());
Если Выборка.Количество() > 0 Тогда
ЗаполнитьПустыеМультиязычныеРеквизитыЗначениемОсновногоЯзыка(Выборка, ОбъектСПредопределеннымиЭлементами, ИтогоОбработано);
КонецЕсли;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ОбрабатываемыеОбъекты);
КонецПроцедуры
@@ -1124,7 +1076,7 @@
Если МультиязычныеСтрокиВРеквизитах Тогда
КодЯзыка =СведенияОбЯзыках.ОсновнойЯзык;;
КодЯзыка =СведенияОбЯзыках.ОсновнойЯзык;
Если ЗначениеЗаполнено(КодЯзыка) Тогда
Для каждого ИмяЛокализуемогоРеквизита Из ЛокализуемыеРеквизитыОбъекта Цикл
ЗаполняемыйЭлемент[ИмяЛокализуемогоРеквизита.Ключ] = СтрокаТаблицы[ИмяЛокализуемогоРеквизита.Ключ + "_" + КодЯзыка];
@@ -1164,25 +1116,40 @@
// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления.
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "МультиязычностьСервер.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "3.1.6.16";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("68d400bb-e5bb-49da-a567-ebf7458b29f8");
Обработчик.ПроцедураЗаполненияДанныхОбновления = "МультиязычностьСервер.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Комментарий = НСтр("ru = 'Заполнение значений мультиязычных реквизитов значением основного языка.'");
Если Метаданные.Языки.Количество() > 1 Тогда
ОбъектыДляОбработки = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнениемСтрокой();
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.6.16";
Обработчик.Комментарий = НСтр("ru = 'Заполнение значений мультиязычных реквизитов значением основного языка.'");
ОбъектыСтрокой = СтрСоединить(ОбъектыСТЧПредставления(), ",");
Если ЗначениеЗаполнено(ОбъектыСтрокой) Тогда
ОбъектыДляОбработки = ОбъектыДляОбработки + "," + ОбъектыСтрокой;
Если ОбщегоНазначения.РазделениеВключено()
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина;
Обработчик.Процедура = "МультиязычностьСервер.ОбработатьОбщиеДанныеДляПереходаНаНовуюВерсию";
Иначе
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Процедура = "МультиязычностьСервер.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("68d400bb-e5bb-49da-a567-ebf7458b29f8");
Обработчик.ПроцедураЗаполненияДанныхОбновления = "МультиязычностьСервер.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
ОбъектыСТЧПредставления = ОбъектыСТЧПредставления(ВариантДанныхДляОбработкиСУчетомРазделения());
ОбъектыДляОбработки = ОбъектыСНачальнымЗаполнениемСтрокой(ОбъектыСТЧПредставления);
Обработчик.ЧитаемыеОбъекты = ОбъектыДляОбработки;
Обработчик.ИзменяемыеОбъекты = ОбъектыДляОбработки;
Обработчик.БлокируемыеОбъекты = ОбъектыДляОбработки;
КонецЕсли;
КонецЕсли;
Обработчик.ЧитаемыеОбъекты = ОбъектыДляОбработки;
Обработчик.ИзменяемыеОбъекты = ОбъектыДляОбработки;
Обработчик.БлокируемыеОбъекты = ОбъектыДляОбработки;
КонецПроцедуры
@@ -1763,34 +1730,49 @@
Возврат СтрЗаканчиваетсяНа(ИмяРеквизита, "Язык1") Или СтрЗаканчиваетсяНа(ИмяРеквизита, "Язык2");
КонецФункции
// Параметры:
// ВариантДанных - Строка - Варианты: Общие, Разделенные, Все
//
// Возвращаемое значение:
// Массив из Строка
// Массив - Объекты СТЧПредставления
//
Функция ОбъектыСТЧПредставления()
Функция ОбъектыСТЧПредставления(ВариантДанных)
ОбъектыСТЧПредставления = Новый Массив;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ВидыКонтактнойИнформации"].ПолноеИмя());
Если ВариантДанных = "Разделенные" Или ВариантДанных = "Все" Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ВидыКонтактнойИнформации"].ПолноеИмя());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ВариантыОтчетов"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ПредопределенныеВариантыОтчетовРасширений"].ПолноеИмя());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ЗначенияСвойствОбъектов"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ЗначенияСвойствОбъектовИерархия"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["НаборыДополнительныхРеквизитовИСведений"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолноеИмя());
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ВариантыОтчетов"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ПредопределенныеВариантыОтчетов"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ПредопределенныеВариантыОтчетовРасширений"].ПолноеИмя());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ЗначенияСвойствОбъектов"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ЗначенияСвойствОбъектовИерархия"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["НаборыДополнительныхРеквизитовИСведений"].ПолноеИмя());
ОбъектыСТЧПредставления.Добавить(Метаданные.ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолноеИмя());
Если ВариантДанных = "Общие" Или ВариантДанных = "Все" Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
ОбъектыСТЧПредставления.Добавить(Метаданные.Справочники["ПредопределенныеВариантыОтчетов"].ПолноеИмя());
КонецЕсли;
КонецЕсли;
Возврат ОбъектыСТЧПредставления;
КонецФункции
Функция ВариантДанныхДляОбработкиСУчетомРазделения()
Возврат ?(ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), "Разделенные", "Все");
КонецФункции
Процедура ЗаполнитьИПеренестиСтрокиИзТЧПредставленияВРеквизиты(Ссылка, ПараметрыЗаполнения, ОбъектовОбработано, ПроблемныхОбъектов)
ОбъектМетаданных = Ссылка.Метаданные(); // ОбъектМетаданных
@@ -1881,6 +1863,181 @@
КонецПроцедуры
Функция ОбъектыСНачальнымЗаполнением(ВариантДанных)
ОбъектыСПредопределеннымиЭлементами = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнением();
Если Не ОбщегоНазначения.РазделениеВключено()
Или Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
Возврат ОбъектыСПредопределеннымиЭлементами;
КонецЕсли;
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
Позиция = ОбъектыСПредопределеннымиЭлементами.Количество() - 1;
Пока Позиция >= 0 Цикл
ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(ОбъектыСПредопределеннымиЭлементами[Позиция]);
Если ВариантДанных = "Общие" И ЭтоРазделенныйОбъектМетаданных Тогда
Если ЭтоРазделенныйОбъектМетаданных Тогда
ОбъектыСПредопределеннымиЭлементами.Удалить(Позиция);
КонецЕсли;
ИначеЕсли Не ЭтоРазделенныйОбъектМетаданных Тогда
ОбъектыСПредопределеннымиЭлементами.Удалить(Позиция);
КонецЕсли;
Позиция = Позиция - 1;
КонецЦикла;
Возврат ОбъектыСПредопределеннымиЭлементами;
КонецФункции
// Параметры:
// СписокОбъектов - Массив
//
// Возвращаемое значение:
// Строка - список полных имен объектов через запятую
//
Функция ОбъектыСНачальнымЗаполнениемСтрокой(СписокОбъектов)
ОбъектыСНачальнымЗаполнением = ОбъектыСНачальнымЗаполнением(ВариантДанныхДляОбработкиСУчетомРазделения());
Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСНачальнымЗаполнением Цикл
ПолноеИмя = ОбъектСПредопределеннымиЭлементами.ПолноеИмя();
Если СписокОбъектов.Найти(ПолноеИмя) = Неопределено Тогда
СписокОбъектов.Добавить(ПолноеИмя);
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(СписокОбъектов, ",");
КонецФункции
Функция СписокОбъектовКОбработкеДляПереходаНаНовуюВерсию(ВариантДанных)
ОбъектыКОбработке = Новый Массив();
РазделительЗапросов = Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС;
СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбЯзыках();
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) Или ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(ВариантДанных);
ШаблонаЗапроса = "ВЫБРАТЬ
| ДанныеОбъекта.Ссылка
|ИЗ
| &Таблица КАК ДанныеОбъекта
|ГДЕ
| &УсловиеОтбора";
НаборЗапросов = Новый Массив;
Для каждого ОбъектМетаданныхСЭлементами Из ОбъектыСПредопределеннымиЭлементами Цикл
ЛокализуемыеРеквизитыОбъекта = НаименованияЛокализуемыхРеквизитовОбъектаВШапке(ОбъектМетаданныхСЭлементами);
Отборы = Новый Массив;
Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл
Если Не РеквизитОбъекта.Значение Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) И ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ШаблонОтбора = "ВЫРАЗИТЬ(&Реквизит КАК СТРОКА(1)) <> """"
| И (ВЫРАЗИТЬ(&Язык1 КАК СТРОКА(1)) = """" ИЛИ ВЫРАЗИТЬ(&Язык2 КАК СТРОКА(1)) = """")";
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1", РеквизитОбъекта.Ключ + "Язык1");
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык2", РеквизитОбъекта.Ключ + "Язык2");
Иначе
ШаблонОтбора = "ВЫРАЗИТЬ(&Реквизит КАК СТРОКА(1)) <> """"
| И ВЫРАЗИТЬ(&Язык1Или2 КАК СТРОКА(1)) = """"";
Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1Или2", РеквизитОбъекта.Ключ + "Язык2");
Иначе
ШаблонОтбора = СтрЗаменить(ШаблонОтбора, "&Язык1Или2", РеквизитОбъекта.Ключ + "Язык1");
КонецЕсли;
КонецЕсли;
ТекстОтбора = СтрЗаменить(ШаблонОтбора, "&Реквизит", РеквизитОбъекта.Ключ);
Отборы.Добавить(ТекстОтбора);
КонецЦикла;
Если Отборы.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ТекстЗапросаПредварительный = СтрЗаменить(ШаблонаЗапроса, "&Таблица", ОбъектМетаданныхСЭлементами.ПолноеИмя());
ТекстЗапросаПредварительный = СтрЗаменить(ТекстЗапросаПредварительный, "&УсловиеОтбора", СтрСоединить(Отборы, " ИЛИ "));
НаборЗапросов.Добавить(ТекстЗапросаПредварительный);
КонецЦикла;
Если НаборЗапросов.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(НаборЗапросов, РазделительЗапросов);
РезультатыЗапроса = Запрос.Выполнить().Выгрузить();
ОбъектыКОбработке = РезультатыЗапроса.ВыгрузитьКолонку("Ссылка");
КонецЕсли;
КонецЕсли;
// Отдельная порция объектов для регистрации с табличной частью Представления
ОбъектыСТЧПредставления = ОбъектыСТЧПредставления(ВариантДанных);
Если ОбъектыСТЧПредставления.Количество() > 0 Тогда
ШаблонЗапроса = "ВЫБРАТЬ
| СправочникСТЧПредставления.Ссылка
|ИЗ
| #Таблица КАК СправочникСТЧПредставления";
НаборЗапросов = Новый Массив;
Для Каждого ИмяОбъектаМетаданных Из ОбъектыСТЧПредставления Цикл
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаМетаданных);
ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "#Таблица", ОбъектМетаданных.ПолноеИмя());
Если ОбъектМетаданных.Иерархический
И ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда
ТабличнаяЧастьОбъекта = ОбъектМетаданных.ТабличныеЧасти.Найти("Представления"); // ОбъектМетаданныхТабличнаяЧасть
Если ТабличнаяЧастьОбъекта.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента Тогда
ТекстЗапроса = ТекстЗапроса + "
|ГДЕ СправочникСТЧПредставления.ЭтоГруппа <> ИСТИНА";
ИначеЕсли ТабличнаяЧастьОбъекта.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы Тогда
ТекстЗапроса = ТекстЗапроса + "
|ГДЕ СправочникСТЧПредставления.ЭтоГруппа = ИСТИНА";
КонецЕсли;
КонецЕсли;
НаборЗапросов.Добавить(ТекстЗапроса);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(НаборЗапросов, РазделительЗапросов);
РезультатыЗапроса = Запрос.Выполнить().Выгрузить();
ОбъектыСТабличнойЧастьюПредставлениеКОбработке = РезультатыЗапроса.ВыгрузитьКолонку("Ссылка");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбъектыКОбработке, ОбъектыСТабличнойЧастьюПредставлениеКОбработке);
КонецЕсли;
Возврат ОбъектыКОбработке;
КонецФункции
#Область ИзменениеЯзыка
// Данные для изменения мультиязычных реквизитов.
@@ -1977,7 +2134,7 @@
ДанныеОбъекта.СсылкаНаПоследнийОбработанныйОбъекты,
ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).ПустаяСсылка());
ШаблонПолейЗапроса = "ДанныеОбъекта.%1%2 КАК %1%2"; // @Qurey-part1
ШаблонПолейЗапроса = "ДанныеОбъекта.%1%2 КАК %1%2";
ЗначенияЯзыковыхКонстант = ДанныеДляИзмененияМультиязычныхРеквизитов.НастройкиИзмененияЯзыков;
МультиязычныеРеквизиты = ДанныеОбъекта.ЯзыковыеПоля;
@@ -1313,6 +1313,7 @@
| &ИмяПланаОбмена КАК ПланОбмена
|ГДЕ
| ПланОбмена.РегистрироватьИзменения
| И НЕ ПланОбмена.ЭтотУзел
| И НЕ ПланОбмена.ПометкаУдаления";
Запрос = Новый Запрос;
@@ -3030,7 +3030,7 @@
// Строка - версия.
//
// Пример:
// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя);
// ВерсияКонфигурацииИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя);
//
Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт
@@ -39,7 +39,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "БиблиотекаСинхронизацииДанных";
Описание.Версия = "1.0.1.19";
Описание.Версия = "1.0.1.23";
Описание.ИдентификаторИнтернетПоддержки = "DSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "1.0.1.1";
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.6.209";
Описание.Версия = "3.1.6.310";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1787,21 +1787,6 @@
КонецФункции
// Возвращаемое значение:
// Строка - список полных имен объектов через запятую
//
Функция ОбъектыСНачальнымЗаполнениемСтрокой() Экспорт
ОбъектыСНачальнымЗаполнением = ОбъектыСНачальнымЗаполнением();
Список = Новый Массив;
Для каждого ОбъектСПредопределеннымиЭлементами Из ОбъектыСНачальнымЗаполнением Цикл
Список.Добавить(ОбъектСПредопределеннымиЭлементами.ПолноеИмя());
КонецЦикла;
Возврат СтрСоединить(Список, ",");
КонецФункции
Функция НастройкиПредопределенныхЭлементов(МенеджерОбъекта, ПредопределенныеДанные) Экспорт
ПользовательскиеНастройкиЗаполненияЭлементов = ПользовательскиеНастройкиЗаполненияЭлементов();
@@ -2385,8 +2370,8 @@
Попытка
Если РежимОбновленияДанных = "ПереходСДругойПрограммы" Тогда
ИтерацииОбновления = ИтерацииОбновления();
ПерейтиСДругойПрограммы(ИтерацииОбновления);
ИтерацииОбновления = ИтерацииОбновления();
РежимОбновленияДанных = РежимОбновленияДанных();
ОперативноеОбновление = Ложь;
@@ -5802,7 +5787,8 @@
ОписаниеПроцедурыЗаполнения = ОбработчикОбновления.ОбрабатываемыеДанные.Получить();
ПорцииДляОбновления = ОписаниеПроцедурыЗаполнения.ПорцииДляОбновления;
Если ПорцииДляОбновления <> Неопределено Тогда
Если ПорцииДляОбновления <> Неопределено
И КонтекстОбработчика.Параметры.Свойство("ОбновляемыеДанные") Тогда
ОбновляемыеДанные = КонтекстОбработчика.Параметры.ОбновляемыеДанные;
Если ОбновляемыеДанные <> Неопределено Тогда
@@ -6790,9 +6776,9 @@
ПоддерживаетсяИерархия, СтрокаТаблицы);
КонецЕсли;
Если ПараметрыДляЗаполненияОбъекта.НастройкиПредопределенныхЭлементов.ПриНачальномЗаполненииЭлемента Тогда
Если ПараметрыДляЗаполненияОбъекта.НастройкиПредопределенныхЭлементов.ПереопределяемыеНастройки.ПриНачальномЗаполненииЭлемента Тогда
МенеджерОбъекта.ПриНачальномЗаполненииЭлемента(ЗаполняемыйЭлемент, СтрокаТаблицы,
ПараметрыДляЗаполненияОбъекта.НастройкиПредопределенныхЭлементов.ДополнительныеПараметры);
ПараметрыДляЗаполненияОбъекта.НастройкиПредопределенныхЭлементов.ПереопределяемыеНастройки.ДополнительныеПараметры);
КонецЕсли;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ЗаполняемыйЭлемент);
@@ -426,6 +426,12 @@
Возврат НаборЗаписей;
КонецФункции
Функция ОтчетПрогрессОбновления() Экспорт
Возврат "Отчет.ПрогрессОбновленияОбластейДанных.Форма";
КонецФункции
#Область ОбработчикиСобытийПодсистемКонфигурации
// См. ОбновлениеИнформационнойБазыБСП.ПередОбновлениемИнформационнойБазы.
@@ -49,6 +49,10 @@
КонецПроцедуры
Функция ДанныеРасшифровкиОтчета(ДанныеРасшифровки, ИндексРасшифровки, Кеш = Неопределено, КешПриоритетов = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(ДанныеРасшифровки) Тогда
Возврат Неопределено;
КонецЕсли;
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
Если ИндексРасшифровки = Неопределено Тогда
Возврат Неопределено;
@@ -497,8 +497,11 @@
КонецЦикла;
КонецЕсли;
ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание();
ЭтоФоновоеЗадание = (ТекущийСеанс <> Неопределено);
ТекстДляАсинхронногоВызова = "";
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И ВФоне Тогда
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И (ВФоне Или ЭтоФоновоеЗадание) Тогда
ТекстДляАсинхронногоВызова = НСтр("ru = 'Обновление параметров работы расширений после установки или
|удаления патчей завершилось с ошибкой.'")
КонецЕсли;
@@ -561,8 +564,12 @@
КонецЕсли;
КонецПроцедуры
Процедура ОписанияНовыхПатчей(АдресХранилища, ТекущиеИсправления) Экспорт
Описания = Новый Массив;
Процедура ОписанияНовыхПатчей(АдресХранилища, ТекущиеИсправления, ДляОбновления = Ложь) Экспорт
Если ДляОбновления Тогда
Описания = Новый Соответствие;
Иначе
Описания = Новый Массив;
КонецЕсли;
Для Каждого Исправление Из ТекущиеИсправления Цикл
Если Метаданные.ОбщиеМакеты.Найти(Исправление) = Неопределено Тогда
Продолжить;
@@ -570,16 +577,34 @@
Макет = ПолучитьОбщийМакет(Исправление);
Для НомерСтроки = 1 По Макет.КоличествоСтрок() Цикл
Строка = Макет.ПолучитьСтроку(НомерСтроки);
Если Не СтрНачинаетсяС(СокрЛП(Строка), "<Description>") Тогда
Если Не СтрНачинаетсяС(СокрЛ(Строка), "<Description>") Тогда
Продолжить;
КонецЕсли;
ОписаниеПатча = СтрЗаменить(СтрЗаменить(СокрЛП(Строка), "<Description>", ""), "</Description>", "");
Описания.Добавить(Исправление + ": " + ОписаниеПатча);
ОписаниеПатча = СтрЗаменить(СокрЛ(Строка), "<Description>", "");
Пока НомерСтроки < Макет.КоличествоСтрок() Цикл
Если СтрЗаканчиваетсяНа(СокрП(ОписаниеПатча), "</Description>") Тогда
ОписаниеПатча = СтрЗаменить(СокрП(ОписаниеПатча), "</Description>", "");
Прервать;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
Строка = Макет.ПолучитьСтроку(НомерСтроки);
ОписаниеПатча = ОписаниеПатча + Символы.ПС + Строка;
КонецЦикла;
Если ДляОбновления Тогда
Описания.Вставить(Исправление, ОписаниеПатча);
Иначе
Описания.Добавить(Исправление + ": " + ОписаниеПатча);
КонецЕсли;
Прервать;
КонецЦикла;
КонецЦикла;
ОписаниеСтрокой = СтрСоединить(Описания, Символы.ПС);
ПоместитьВоВременноеХранилище(ОписаниеСтрокой, АдресХранилища);
Если ДляОбновления Тогда
ПоместитьВоВременноеХранилище(Описания, АдресХранилища);
Иначе
ОписаниеСтрокой = СтрСоединить(Описания, Символы.ПС);
ПоместитьВоВременноеХранилище(ОписаниеСтрокой, АдресХранилища);
КонецЕсли;
КонецПроцедуры
// Вызывается при завершении обновления конфигурации через COM-соединение.
@@ -299,14 +299,13 @@
// Открывает форму со списком установленных исправлений.
//
// Параметры:
// Исправления - СписокЗначений - список имен установленных исправлений, которые необходимо отобразить.
// Если не указан, отображаются все исправления.
//
Процедура ПоказатьУстановленныеИсправления(Исправления = Неопределено) Экспорт
Процедура ПоказатьУстановленныеИсправления(Параметры = Неопределено, РежимОткрытия = Неопределено) Экспорт
ПараметрыФормы = Новый Структура("Исправления", Исправления);
ОткрытьФорму("ОбщаяФорма.УстановленныеИсправления", ПараметрыФормы);
Если Параметры = Неопределено Тогда
Параметры = Новый Структура;
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.УстановленныеИсправления", Параметры,,,,,, РежимОткрытия);
КонецПроцедуры
@@ -531,9 +531,10 @@
КонецФункции
// Параметры:
// ПолучателиПриемник - КоллекцияИдентификаторовПользователейСистемыВзаимодействия
// ПолучателиИсточник - Массив из СправочникСсылка.Пользователи
// - Массив из ПользовательСистемыВзаимодействия
// ПолучателиПриемник - КоллекцияИдентификаторовПользователейСистемыВзаимодействия
// ПолучателиИсточник - Соответствие - см. ПользователиСистемыВзаимодействия
// - Массив из ПользовательСистемыВзаимодействия
// - КоллекцияИдентификаторовПользователейСистемыВзаимодействия
//
Процедура ДобавитьПолучателей(ПолучателиПриемник, ПолучателиИсточник)
@@ -541,8 +542,7 @@
Возврат;
КонецЕсли;
ПолучателиПользователиИБ = (ТипЗнч(ПолучателиИсточник[0]) = Тип("СправочникСсылка.Пользователи"));
Если ПолучателиПользователиИБ Тогда
Если ТипЗнч(ПолучателиИсточник) = Тип("Соответствие") Тогда
Для каждого Получатель Из ПолучателиИсточник Цикл
Если Получатель.Значение <> Неопределено Тогда
@@ -555,7 +555,7 @@
Для каждого Получатель Из ПолучателиИсточник Цикл // ИдентификаторПользователяСистемыВзаимодействия, ПользовательСистемыВзаимодействия
Если ТипЗнч(Получатель) = Тип("ИдентификаторПользователяСистемыВзаимодействия") Тогда
ПолучателиПриемник.Добавить(Получатель);
Иначе
ИначеЕсли ТипЗнч(Получатель) = Тип("ПользовательСистемыВзаимодействия") Тогда
ПолучателиПриемник.Добавить(Получатель.Идентификатор);
КонецЕсли;
@@ -563,7 +563,6 @@
КонецЕсли;
КонецПроцедуры
Функция ЭлементСоответствия(Соответствие, Индекс)
Сч = 0;
@@ -1347,20 +1347,22 @@
// Есть возможность переопределить процедуру поиска подчиненных объектов.
// Для этого в общем модуле или модуле менеджера необходимо реализовать процедуру
// ПриПоискеЗаменыСсылок с параметрами:
// ПарыЗамен - Соответствие - содержит пары значение Оригинал/Дубль
// НеобработанныеЗначенияОригиналов - Массив из Структура - содержит дополнительную информацию
// об обрабатываемых объектах:
// * ЗаменяемоеЗначение - ПроизвольнаяСсылка - оригинальное значение заменяемого объекта
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам
// * ЗначениеКлючевыхРеквизитов - Структура - Ключ - имя реквизита, значение - значение реквизита
// ПарыЗамен - Соответствие - содержит пары значение оригинал/дубль.
// НеобработанныеЗначенияОригиналов - Массив из Структура - дополнительная информация об обрабатываемых объектах:
// * ЗаменяемоеЗначение - ПроизвольнаяСсылка - оригинальное значение заменяемого объекта
// * ИспользуемыеСвязи - см. ПоискИУдалениеДублей.СвязиПодчиненныхОбъектовПоТипам
// * ЗначениеКлючевыхРеквизитов - Структура - где Ключ - имя реквизита, значение - значение реквизита.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * ПодчиненныйОбъект - ОбъектМетаданных - (обязательный) объект метаданных подчиненного объекта.
// * ПоляСвязей - Строка - (обязательный) реквизиты, определяющие связь между основными и подчиненными объектами.
// * ПриПоискеЗаменыСсылок - Строка - общий модуль или модуль менеджера, в котором есть процедура ПриПоискеЗаменыСсылок.
// * ВыполнятьАвтоматическийПоискЗаменСсылок - см. ЗаменитьСсылки
//
// * ПодчиненныйОбъект - ОбъектМетаданных - объект метаданных подчиненного объекта.
// * ПоляСвязей - Строка - имена реквизитов, определяющих связь между основными и подчиненными объектами.
// * ПриПоискеЗаменыСсылок - Строка - опционально. Имя общего модуля или модуля менеджера, в котором определена
// процедура ПриПоискеЗаменыСсылок.
// * ВыполнятьАвтоматическийПоискЗаменСсылок - Булево - если указать Истина, то будет выполнена попытка поиска замен
// для подчиненных объектов по значениям полей связи. В случае, если объект не существует,
// будет выполнена процедура ПриПоискеЗаменыСсылок. См. также ЗаменитьСсылки.
//
Функция ПодчиненныеОбъекты() Экспорт
ОписаниеСвязей = Новый ТаблицаЗначений;
@@ -1372,8 +1374,7 @@
ИнтеграцияПодсистемБСП.ПриОпределенииПодчиненныхОбъектов(ОписаниеСвязей);
ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов(ОписаниеСвязей);
// Если передали соответствие или структуру
// преобразуем к необходимому типу
// Если передали соответствие или структуру преобразуем к необходимому типу.
Для каждого СтрокаСвязи Из ОписаниеСвязей Цикл
ТипОписанияПолейСвязи = ТипЗнч(СтрокаСвязи.ПоляСвязей);
@@ -7527,15 +7528,16 @@
Процедура ЗагрузитьИзмененныйНаборВРегистрБухгалтерии(НаборЗаписей, ИзмененнаяКоллекция, ИзмененныеПоля)
НеизмененныеИзмерения = Новый Соответствие;
ИзмененныеИзмерения = Новый Соответствие;
МетаданныеРегистра = НаборЗаписей.Метаданные();
Для каждого Измерение Из НаборЗаписей.Метаданные().Измерения Цикл
Для каждого Измерение Из МетаданныеРегистра.Измерения Цикл
ИменаИзмерений = Новый Массив;
Если НЕ Измерение.Балансовый Тогда
ИменаИзмерений.Добавить(Измерение.Имя + "Дт");
ИменаИзмерений.Добавить(Измерение.Имя + "Кт");
Если Измерение.Балансовый ИЛИ НЕ МетаданныеРегистра.Корреспонденция Тогда
ИменаИзмерений.Добавить(Измерение.Имя);
Иначе
ИменаИзмерений.Добавить(Измерение.Имя);
ИменаИзмерений.Добавить(Измерение.Имя + "Дт");
ИменаИзмерений.Добавить(Измерение.Имя + "Кт");
КонецЕсли;
Для каждого ИмяИзмерения Из ИменаИзмерений Цикл
@@ -1423,6 +1423,10 @@
СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения");
ЗаполнитьЗначенияСвойств(СтруктураИмениФайла, Новый Файл(ПолноеИмяФайла));
Если СтруктураИмениФайла.Путь = ПолучитьРазделительПути() Тогда
СтруктураИмениФайла.Путь = "";
КонецЕсли;
Возврат СтруктураИмениФайла;
КонецФункции
@@ -1663,7 +1667,7 @@
Функция АдресЭлектроннойПочтыСоответствуетТребованиям(Знач Адрес, РазрешитьЛокальныеАдреса = Ложь) Экспорт
// Допустимые символы для email.
Буквы = "abcdefghijklmnopqrstuvwxyz";
Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
Цифры = "0123456789";
СпецСимволы = ".@_-:+";
@@ -2202,7 +2206,22 @@
// Расписание - РасписаниеРегламентногоЗадания - исходное расписание.
//
// Возвращаемое значение:
// Структура - расписание в виде структуры.
// Структура:
// * ВремяЗавершения - Дата
// * ВремяКонца - Дата
// * ВремяНачала - Дата
// * ДатаКонца - Дата
// * ДатаНачала - Дата
// * ДеньВМесяце - Дата
// * ДеньНеделиВМесяце - Число
// * ДниНедели - Число
// * ИнтервалЗавершения - Число
// * Месяцы - Массив из Число
// * ПаузаПовтора - Число
// * ПериодНедель - Число
// * ПериодПовтораВТечениеДня - Число
// * ПериодПовтораДней - Число
// * ДетальныеРасписанияДня - Массив из см. РасписаниеВСтруктуру
//
Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт
@@ -3404,11 +3423,13 @@
// Строка - код языка.
//
Функция КодОсновногоЯзыка() Экспорт
#Если НЕ ТонкийКлиент И НЕ ВебКлиент И НЕ МобильныйКлиент Тогда
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Возврат ОбщегоНазначения.КодОсновногоЯзыка();
#Иначе
Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка");
#КонецЕсли
КонецФункции
// Устарела. Следует использовать ОбщегоНазначенияКлиент.ПредставлениеЛокальнойДатыСоСмещением
@@ -360,7 +360,6 @@
// ** Ширина - Число
//
Функция СвойстваЭлементовФормыНастроек(ТипФормы, КомпоновщикНастроек, ДополнительныеПараметры) Экспорт
#Область ПодготовкаСтруктуры
СвойстваЭлементов = Новый Структура("Группы, Поля");
СвойстваЭлементов.Группы = Новый Структура;
@@ -380,16 +379,15 @@
НедоступныеЭлементыСтруктуры.Вставить(Тип("ТаблицаКомпоновкиДанных"), ТипФормыОтчета.Настройка);
НедоступныеЭлементыСтруктуры.Вставить(Тип("ДиаграммаКомпоновкиДанных"), ТипФормыОтчета.Настройка);
#КонецОбласти
#Область ЗаполнениеСтруктуры
Сведения = СведенияОПользовательскихНастройках(КомпоновщикНастроек.Настройки);
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл
НайденныеСведения = Сведения[ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки];
Если НайденныеСведения = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройки = НайденныеСведения.ЭлементНастройки; // ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных
Если ЭлементНастройки = Неопределено
Или НедоступныеЭлементыСтруктуры.Получить(ТипЗнч(ЭлементНастройки)) = ТипФормы
Или ДоступныеРежимы.Найти(ЭлементНастройки.РежимОтображения) = Неопределено Тогда
@@ -445,8 +443,6 @@
ТипФормы, СвойстваЭлементов, ПользовательскиеНастройки.Элементы);
КонецЕсли;
#КонецОбласти
Возврат СвойстваЭлементов;
КонецФункции
@@ -895,6 +895,11 @@
Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) И Подменю.Вид = ВидГруппыФормы.Подменю Тогда
КомандаФормы.Картинка = Подменю.Картинка;
КонецЕсли;
Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) Тогда
КомандаФормы.Картинка = СведенияОПодменю.КартинкаПодменю;
КонецЕсли;
Если СтрДлина(КомандаФормы.Заголовок) <= 35 И Подменю.Отображение <> ОтображениеКнопки.Картинка Тогда
КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;
Иначе
@@ -953,6 +958,7 @@
// * ГруппаПоУмолчанию - ГруппаФормы
// * ПоследняяКоманда - КомандаФормы
// * КомандыСУсловиямиВидимости - Массив
// * КартинкаПодменю - Картинка
//
Функция СведенияОВсехПодменю()
@@ -965,6 +971,7 @@
СведенияОВсехПодменю.Колонки.Добавить("ГруппаПоУмолчанию");
СведенияОВсехПодменю.Колонки.Добавить("ПоследняяКоманда");
СведенияОВсехПодменю.Колонки.Добавить("КомандыСУсловиямиВидимости", Новый ОписаниеТипов("Массив"));
СведенияОВсехПодменю.Колонки.Добавить("КартинкаПодменю");
Возврат СведенияОВсехПодменю;
@@ -1104,6 +1111,7 @@
Функция ЗарегистрироватьПодменю(Элементы, СведенияОВсехПодменю, ИмяПодменю, ШаблонНового = Неопределено, КоманднаяПанель = Неопределено, ПодменюПоУмолчанию = Неопределено)
ВыведеноКоманд = 0;
Группы = Новый Структура;
КартинкаПодменю = Неопределено;
Если ЗначениеЗаполнено(ИмяПодменю) Тогда
Подменю = Элементы.Найти(ИмяПодменю);
Если Подменю = Неопределено Тогда
@@ -1115,10 +1123,18 @@
Подменю.Заголовок = ШаблонНового.Заголовок;
Если Подменю.Вид = ВидГруппыФормы.Подменю Тогда
Подменю.Картинка = ШаблонНового.Картинка;
КартинкаПодменю = Подменю.Картинка;
Подменю.Отображение = ШаблонНового.Отображение;
КонецЕсли;
Иначе
ГруппаПоУмолчанию = Подменю;
Если Подменю.Вид = ВидГруппыФормы.Подменю Тогда
КартинкаПодменю = Подменю.Картинка;
ИначеЕсли ШаблонНового <> Неопределено Тогда
КартинкаПодменю = ШаблонНового.Картинка;
ИначеЕсли ПодменюПоУмолчанию <> Неопределено Тогда
КартинкаПодменю = ПодменюПоУмолчанию.КартинкаПодменю;
КонецЕсли;
ВыведеноКоманд = КоличествоКомандВГруппе(ГруппаПоУмолчанию);
Для Каждого Группа Из Подменю.ПодчиненныеЭлементы Цикл
Если ТипЗнч(Группа) <> Тип("ГруппаФормы") Тогда
@@ -1171,6 +1187,7 @@
Результат.ГруппаПоУмолчанию = ГруппаПоУмолчанию;
Результат.Группы = Группы;
Результат.ВыведеноКоманд = ВыведеноКоманд;
Результат.КартинкаПодменю = КартинкаПодменю;
Возврат Результат;
КонецФункции
@@ -1249,7 +1266,7 @@
Продолжить;
КонецЕсли;
ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданныхПоставщика);
ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданныхПоставщика, Ложь);
Если ТипЗнч(ИдентификаторОбъектаМетаданных) <> Отбор Тогда
Продолжить;
КонецЕсли;
@@ -1948,8 +1948,6 @@
НастройкиВхода.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса());
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(Настройки));
Если Не РазделениеВключено Тогда
@@ -1968,8 +1966,6 @@
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
@@ -4880,6 +4880,8 @@
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВладелецКИ);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ПочтаДляВосстановленияПароля = "";
НачатьТранзакцию();
Попытка
@@ -4892,7 +4894,6 @@
СтрокаСПочтой = КонтактнаяИнформацияПользователя[0];
ПочтаДляВосстановленияПароля = "";
Если ЗначениеЗаполнено(СтрокаСПочтой.Значение) Тогда
ПочтаДляВосстановленияПароля = МодульУправлениеКонтактнойИнформацией.АдресЭлектроннойПочты(СтрокаСПочтой.Значение);
Если Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ПочтаДляВосстановленияПароля) Тогда
@@ -4939,6 +4940,14 @@
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,
Метаданные.Справочники.Пользователи, ПользовательСсылка, ТекстСообщения);
Если ЗначениеЗаполнено(ПочтаДляВосстановленияПароля)
И СтрНайти(ТекстСообщения, ПочтаДляВосстановленияПароля) > 0 Тогда
Уточнение = НСтр("ru = 'Адрес электронной почты %1 занят другим пользователем и не может быть использован для восстановления пароля.'");
Уточнение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Уточнение, ПочтаДляВосстановленияПароля);
ОбновлениеИнформационнойБазы.ЗарегистрироватьПроблемуСДанными(ПользовательСсылка, Уточнение);
КонецЕсли;
КонецПопытки;
Возврат Результат;
@@ -5993,16 +6002,33 @@
| СоставыГруппПользователей.Пользователь ЕСТЬ NULL ";
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
Если ОбновитьГруппуВнешнихПользователей Тогда
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи");
ПолноеИмяСправочника = "Справочник.ВнешниеПользователи";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи");
Иначе
ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
ПолноеИмяСправочника = "Справочник.Пользователи";
КонецЕсли;
Если ТипЗнч(Пользователь) = Тип("Массив") И Пользователь.Количество() <= 1000 Тогда
Для Каждого Ссылка Из Пользователь Цикл
ЭлементБлокировкиРегистра = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировкиРегистра.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
ЭлементБлокировкиРегистра.УстановитьЗначение("Пользователь", Ссылка);
ЭлементБлокировкиСправочника = Блокировка.Добавить(ПолноеИмяСправочника);
ЭлементБлокировкиСправочника.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировкиСправочника.УстановитьЗначение("Ссылка", Ссылка);
КонецЦикла;
Иначе
ЭлементБлокировкиРегистра = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировкиСправочника = Блокировка.Добавить(ПолноеИмяСправочника);
ЭлементБлокировкиСправочника.Режим = РежимБлокировкиДанных.Разделяемый;
Если Пользователь <> Неопределено И ТипЗнч(Пользователь) <> Тип("Массив") Тогда
ЭлементБлокировкиРегистра.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
ЭлементБлокировкиРегистра.УстановитьЗначение("Пользователь", Пользователь);
ЭлементБлокировкиСправочника.УстановитьЗначение("Ссылка", Пользователь);
КонецЕсли;
КонецЕсли;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Если Пользователь = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователя", "ИСТИНА");
@@ -6316,8 +6342,7 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователяВСправочнике", ОтборПользователяВСправочнике);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаПользователей);
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Если ОбновитьГруппыВнешнихПользователей Тогда
@@ -6330,12 +6355,7 @@
ТекстЗапроса,
"ГруппыПользователейСостав.Пользователь",
"ГруппыПользователейСостав.ВнешнийПользователь");
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей");
Иначе
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей");
КонецЕсли;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
НачатьТранзакцию();
@@ -1360,7 +1360,6 @@
КонецФункции
// См. РаботаСПочтовымиСообщениями.ОтправитьПисьмо.
Функция ОтправитьПисьмо(УчетнаяЗапись, Письмо) Экспорт
Письма = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Письмо);
@@ -1417,7 +1416,7 @@
Письмо.Отправитель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя;
Письмо.Отправитель.Адрес = РеквизитыОтправителя.АдресЭлектроннойПочты;
Если РеквизитыОтправителя.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес Тогда
Если ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3 И РеквизитыОтправителя.ОтправлятьСкрытыеКопииПисемНаЭтотАдрес Тогда
Получатель = Письмо.СлепыеКопии.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты);
Получатель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя;
КонецЕсли;
@@ -1709,7 +1708,7 @@
КонецФункции
Функция ПоясненияПоОшибке(ТекстОшибки, Знач КодЯзыка = Неопределено) Экспорт
Функция ПоясненияПоОшибке(ТекстОшибки, Знач КодЯзыка = Неопределено, ДляПомощникаНастройки = Ложь) Экспорт
Если КодЯзыка = Неопределено Тогда
КодЯзыка = ТекущийЯзык().КодЯзыка;
@@ -1772,10 +1771,15 @@
Если Не ЗначениеЗаполнено(ОписанияОшибок) Тогда
СпособыУстранения.Добавить(НСтр("ru = 'Проверьте подключение к Интернету.'"));
КонецЕсли;
СпособыУстранения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Попробуйте перенастроить почту (кнопка <a href=\""%1\"">Перенастроить</a> в настройках почты).'"),
"Перенастроить"));
Если ДляПомощникаНастройки Тогда
СпособыУстранения.Добавить(НСтр("ru = 'Проверьте введенные настройки.'"));
Иначе
СпособыУстранения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Попробуйте перенастроить почту (кнопка <a href=\""%1\"">Перенастроить</a> в настройках почты).'"),
"Перенастроить"));
КонецЕсли;
СпособыУстранения.Добавить(НСтр("ru = 'Обратитесь к администратору локальной сети.'"));
СпособыУстранения.Добавить(НСтр("ru = 'Обратитесь к администратору почтового сервера.'"));
КонецЕсли;
@@ -876,7 +876,7 @@
#Если ВебКлиент Тогда
Если ПараметрыВыполнения.ДанныеФайла.Расширение <> "mxl" Тогда
Текст = НСтр("ru = 'Сохраните файл на компьютер, после чего распечатать его при помощи приложения, предназначенного для работы с данным файлом.'");
Текст = НСтр("ru = 'Сохраните файл на компьютер, после чего распечатайте его при помощи приложения, предназначенного для работы с данным файлом.'");
ПоказатьПредупреждение(, Текст);
Возврат;
КонецЕсли;
@@ -5994,8 +5994,7 @@
Функция ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение)
ТипОбъекта = ВладелецФайла;
ПредставлениеТипаВладельца = ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки));
ПредставлениеТипаВладельца = ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки));
ПолноеИмяСправочникаФайлов = НастройкаСинхронизации.ТипВладельцаФайла.ПолноеИмя;
МетаданныеОбъектаФайлов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяСправочникаФайлов);
ЕстьВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеОбъектаФайлов);
@@ -6025,12 +6024,12 @@
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
| СправочникПапок.Ссылка,";// @query-part
| СправочникПапок.Ссылка,"; // @query-part
ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта);
ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ВладелецФайла);
ТекстЗапроса = ТекстЗапроса + "
| СправочникФайлов.Ссылка КАК ФайлСсылка,";
| СправочникФайлов.Ссылка КАК ФайлСсылка,"; // @query-part
Если ВозможностьСоздаватьГруппы Тогда
@@ -6042,10 +6041,10 @@
| КОНЕЦ КАК Наименование,
| СправочникФайлов.ПометкаУдаления КАК ПометкаУдаления,
| СправочникФайлов.ВладелецФайла КАК Родитель,
| ЛОЖЬ КАК ЭтоПапка,";
| ЛОЖЬ КАК ЭтоПапка,"; // @query-part
ОтборПоПапкам = "(СправочникФайлов.ЭтоГруппа
| ИЛИ (НЕ СправочникФайлов.ЭтоГруппа И СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ)) ";
| ИЛИ (НЕ СправочникФайлов.ЭтоГруппа И СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ)) "; // @query-part
Иначе
@@ -6053,9 +6052,9 @@
| СправочникФайлов.Наименование + ""."" + СправочникФайлов.Расширение КАК Наименование,
| СправочникФайлов.ПометкаУдаления КАК ПометкаУдаления,
| СправочникФайлов.ВладелецФайла КАК Родитель,
| ЛОЖЬ КАК ЭтоПапка,";
| ЛОЖЬ КАК ЭтоПапка,"; // @query-part
ОтборПоПапкам = " СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ ";
ОтборПоПапкам = " СправочникФайлов.ПодписанЭП = ЛОЖЬ И СправочникФайлов.Зашифрован = ЛОЖЬ "; // @query-part
КонецЕсли;
@@ -6087,21 +6086,21 @@
Если МассивИсключений.Количество() > 0 Тогда
ТекстЗапроса = ТекстЗапроса + "
| И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)";
| И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; // @query-part
КонецЕсли;
Если ЭлементИсключение <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса + "
| И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)";
| И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; // @query-part
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СправочникПапок.Ссылка,";// @query-part
| СправочникПапок.Ссылка,"; // @query-part
ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта);
ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ВладелецФайла);
ТекстЗапроса = ТекстЗапроса + "
| СправочникПапок.Ссылка,
@@ -6169,25 +6168,31 @@
КонецФункции
// Параметры:
// ТипОбъекта - ОбъектМетаданныхСправочник
// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов
//
Процедура ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта)
Процедура ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ВладелецФайла)
ВсеСправочники = Справочники.ТипВсеСсылки();
ВсеДокументы = Документы.ТипВсеСсылки();
Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда
Справочник = Метаданные.Справочники[ТипОбъекта.Имя];
Если ВсеСправочники.СодержитТип(ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки)) Тогда
Справочник = Метаданные.Справочники[ВладелецФайла.Имя];
ШаблонЗапроса = "СправочникПапок.%1 КАК %1,"; // @query-part
Для Каждого Реквизит Из Справочник.Реквизиты Цикл
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникПапок." + Реквизит.Имя + " КАК " + Реквизит.Имя +",";
ТекстЗапроса = ТекстЗапроса + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапроса, Реквизит.Имя);
КонецЦикла;
ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда
Документ = Метаданные.Документы[ТипОбъекта.Имя];
ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки)) Тогда
Документ = Метаданные.Документы[ВладелецФайла.Имя];
ШаблонЗапроса = "СправочникПапок.%1,"; // @query-part
ШаблонЗапросаДата = "РАЗНОСТЬДАТ(СправочникПапок.%1, &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт%1,"; // @query-part
Для Каждого Реквизит Из Документ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ",";
ТекстЗапроса = ТекстЗапроса + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапросаДата, Реквизит.Имя);
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникПапок." + Реквизит.Имя + ",";
ТекстЗапроса = ТекстЗапроса + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапроса, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
@@ -8931,7 +8936,7 @@
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
"ВЫБРАТЬ ПЕРВЫЕ 1
| ПрисоединенныеФайлы.Ссылка
|ИЗ
| &ИмяСправочника КАК ПрисоединенныеФайлы
@@ -8948,8 +8953,7 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ФайлИсключение", "ИСТИНА"); // @Query-part-2
КонецЕсли;
ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов);
ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов);
Для каждого КлючИЗначение Из ИменаСправочников Цикл
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + КлючИЗначение.Ключ);
@@ -738,7 +738,7 @@
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию);
Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(Расширение, СведенияОФайле.Размер);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(СведенияОФайле.Размер, Расширение);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайловПоТипу(ТипХраненияФайла);
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(СсылкаНаВерсию,
СведенияОФайле.АдресВременногоХранилищаФайла, , ТипХраненияФайла);
@@ -991,6 +991,7 @@
КонецФункции
// Создает новый файл по аналогии с указанным и возвращает ссылку на него.
//
// Параметры:
// ИсходныйФайл - СправочникСсылка.Файлы - существующий файл.
// ВладелецНовогоФайла - ЛюбаяСсылка - владелец файла.
@@ -10503,7 +10503,8 @@
Процедура ВыбратьРежимИРедактироватьФайл(ОбработчикРезультата, ДанныеФайла, ДоступностьКомандыРедактировать) Экспорт
ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами();
РезультатОткрыть = ПерсональныеНастройки.ВариантОткрытияФайла;
РезультатОткрыть = ?(ДанныеФайла.ФайлРедактируетТекущийПользователь И ДоступностьКомандыРедактировать,
"Редактировать", ПерсональныеНастройки.ВариантОткрытияФайла);
СпособОткрытия = ПерсональныеНастройки.ТекстовыеФайлыСпособОткрытия;
Если СпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда
@@ -368,8 +368,8 @@
КонецЕсли;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отчеты отправлены ''%1'' (%2) от %3. %4'"),
ПредставлениеПолучателя, АдресПолучателя, ПредставлениеОтправителя, ДополнительныеСведения);
НСтр("ru = 'Отчеты отправлены ''%1'' от %2. %3'"),
ПредставлениеПолучателя, ПредставлениеОтправителя, ДополнительныеСведения);
ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения);
Исключение
@@ -396,6 +396,26 @@
// Доставка.
Если ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, ОбщиеВложения) Тогда
РассылкаВыполнена = Истина;
Если ПараметрыДоставки.Получатели <> Неопределено Тогда
ПредставлениеПолучателя = Новый Массив;
Для каждого ПолучательРассылки Из ПараметрыДоставки.Получатели Цикл
ПредставлениеПолучателя.Добавить(Строка(ПолучательРассылки.Ключ) + " (" + ПолучательРассылки.Значение + ")");
КонецЦикла;
ПредставлениеПолучателя = СтрСоединить(ПредставлениеПолучателя, Символы.ПС);
ДополнительныеСведения = "";
Если ОтправлятьСкрытыеКопииОтправителю Тогда
ДополнительныеСведения = НСтр("ru = 'Копия направлена отправителю.'");
КонецЕсли;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отчеты отправлены %1 получателям от %2. %3
|%4'"),
ПараметрыДоставки.Получатели.Количество(), ПредставлениеОтправителя,
ДополнительныеСведения, ПредставлениеПолучателя);
ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -2366,7 +2386,7 @@
// Возвращает шаблон темы по умолчанию для доставки по электронной почте.
Функция ШаблонТемы() Экспорт
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[НаименованиеРассылки]", "[ДатаВыполнения(ДЛФ=''D'')]");
НСтр("ru = '%1 от %2'"), "[НаименованиеРассылки]", "[ДатаВыполнения(ДЛФ='D')]");
КонецФункции
// Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте.
@@ -57,7 +57,10 @@
// Исключаемые отчеты используются в качестве исключающего фильтра при выборе отчетов.
Функция ИсключаемыеОтчеты() Экспорт
МассивМетаданных = Новый Массив;
ИнтеграцияПодсистемБСП.ПриОпределенииИсключаемыхОтчетов(МассивМетаданных);
РассылкаОтчетовПереопределяемый.ОпределитьИсключаемыеОтчеты(МассивМетаданных);
Результат = Новый Массив;
@@ -68,6 +71,7 @@
ИсключаемыеОтчеты = Новый ФиксированныйМассив(Результат);
Возврат ИсключаемыеОтчеты;
КонецФункции
#КонецОбласти
@@ -1044,22 +1044,14 @@
Если Задание <> Неопределено Тогда
ЕстьИзменения = Ложь;
ОбновитьЗначениеСвойстваЗадания(Задание,
"Наименование", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"Использование", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"Ключ", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"ИмяПользователя", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"ИнтервалПовтораПриАварийномЗавершении", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"КоличествоПовторовПриАварийномЗавершении", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"Параметры", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание,
"Расписание", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "Наименование", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "Использование", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "Ключ", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "ИмяПользователя", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "ИнтервалПовтораПриАварийномЗавершении", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "КоличествоПовторовПриАварийномЗавершении", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "Параметры", Параметры, ЕстьИзменения);
ОбновитьЗначениеСвойстваЗадания(Задание, "Расписание", Параметры, ЕстьИзменения);
Если ЕстьИзменения Тогда
Задание.Записать();
@@ -1160,7 +1152,13 @@
Возврат;
КонецЕсли;
Задание[ИмяСвойства] = ПараметрыЗадания[ИмяСвойства];
Если ТипЗнч(Задание[ИмяСвойства]) = Тип("РасписаниеРегламентногоЗадания")
И ТипЗнч(ПараметрыЗадания[ИмяСвойства]) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(Задание[ИмяСвойства], ПараметрыЗадания[ИмяСвойства]);
Иначе
Задание[ИмяСвойства] = ПараметрыЗадания[ИмяСвойства];
КонецЕсли;
ЕстьИзменения = Истина;
КонецПроцедуры
Loaded 100 of 251 files, more files were not shown because too many files have changed in this diff. Show more