3_2_1_371

This commit is contained in:
Компания 1С committed 2026-03-27 13:22:00 +03:00
1 parent 504a74c00e
commit 426771cb9c
174 files changed
+4578 -2834

No files matched your search

@@ -225,7 +225,8 @@
&НаКлиенте
Процедура ИзменитьДоступностьКоманд()
Если Элементы.Список.ТекущиеДанные = Неопределено Тогда
Если Элементы.Список.ТекущиеДанные = Неопределено
Или Не Элементы.Список.ТекущиеДанные.Свойство("Автор") Тогда
Возврат;
КонецЕсли;
@@ -128,7 +128,8 @@
&НаКлиенте
Процедура ИзменитьДоступностьКоманд()
Если Элементы.Список.ТекущиеДанные = Неопределено Тогда
Если Элементы.Список.ТекущиеДанные = Неопределено
Или Не Элементы.Список.ТекущиеДанные.Свойство("Автор") Тогда
Возврат;
КонецЕсли;
@@ -476,6 +476,32 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ГруппыВыбрать</name>
<id>674</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ГруппыВыбратьРасширеннаяПодсказка</name>
<id>675</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Группы.StandardCommand.Choose</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>638</id>
@@ -692,6 +718,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<choiceMode>true</choiceMode>
<selectionMode>MultiRow</selectionMode>
<rowSelectionMode>Row</rowSelectionMode>
<header>true</header>
@@ -1115,6 +1142,31 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>СписокВыбрать</name>
<id>676</id>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокВыбратьРасширеннаяПодсказка</name>
<id>677</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Список.StandardCommand.Choose</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>604</id>
@@ -1478,6 +1530,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<choiceMode>true</choiceMode>
<selectionMode>MultiRow</selectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
@@ -1966,6 +2019,32 @@
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:Button">
<name>ФормаВыбрать</name>
<id>672</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаВыбратьРасширеннаяПодсказка</name>
<id>673</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Choose</commandName>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаВыбратьИЗакрыть</name>
<id>98</id>
@@ -3274,6 +3353,12 @@
<name>ТекущаяСтрока</name>
<valueType/>
</parameters>
<parameters>
<name>СкрытьКомандыПриВыбореПодборе</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar>
@@ -44,11 +44,18 @@
НастроитьФормуПоИспользованиюГруппПользователей(Ложь, Истина);
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И (Не ХранимыеПараметры.РежимВыбора
Или ХранимыеПараметры.РасширенныйПодбор) Тогда
Если ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
ПользователиСлужебныйКлиентСервер.СкрытьКомандыПриВыбореПодборе(ЭтотОбъект);
КонецЕсли;
НастроитьРаботуВТакси();
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И ОбщегоНазначения.ЭтоВебКлиент() Тогда
КоманднаяПанель.Видимость = Ложь;
Элементы.ГоризонтальнаяГруппаТакси.Видимость = Ложь;
Элементы.ВидПользователей.Видимость = Ложь;
Элементы.Колонки.Видимость = Ложь;
Элементы.Легенда.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
@@ -56,7 +63,19 @@
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПользователиСлужебныйКлиент.ОтключитьВидимостьСкрытыхЭлементов(ЭтотОбъект);
Если ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
ПользователиСлужебныйКлиентСервер.СкрытьКомандыПриВыбореПодборе(ЭтотОбъект);
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
#Если ВебКлиент Тогда
ПодключитьОбработчикОжидания("ПриОткрытииОбработчикОжидания", 0.1, Истина);
#Иначе
НастроитьРаботуВТакси();
#КонецЕсли
КонецЕсли;
КонецПроцедуры
@@ -629,16 +648,7 @@
&НаКлиенте
Процедура ПриОткрытииОбработчикОжидания()
Если ХранимыеПараметры.РежимВыбора Тогда
ПользователиСлужебныйКлиент.НастроитьКнопкиПриВыбореИПодборе(ЭтотОбъект);
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И ХранимыеПараметры.РежимВыбора
И Не ХранимыеПараметры.РасширенныйПодбор Тогда
НастроитьРаботуВТакси();
КонецЕсли;
КонецПроцедуры
@@ -648,6 +658,7 @@
// * ЗакрыватьПриВыборе - Булево
// * ВыборГрупп - Булево
// * ОтборОбъектАвторизации - ОпределяемыйТип.ВнешнийПользователь
// * СкрытьКомандыПриВыбореПодборе - Булево
// * РасширенныйПодбор - Булево
// * ИспользоватьГруппы - Произвольный
// * ГруппаВсеПользователи - СправочникСсылка.ГруппыВнешнихПользователей
@@ -655,6 +666,7 @@
// * ПоказыватьЭлементыСписков - Строка - предыдущее значение
// * ГруппыОтображение - ОтображениеТаблицы - отображение перед включением отбора выбранных ссылок.
// * ГруппаТекущаяСтрока - Неопределено, СправочникСсылка.ГруппыВнешнихПользователей
// * СкрытыеЭлементы - Строка
//
&НаСервере
Функция ХранимыеПараметры()
@@ -665,6 +677,7 @@
Результат.Вставить("ВыборГрупп", Параметры.РежимВыбора И Параметры.ВыборГруппВнешнихПользователей);
Результат.Вставить("ОтборОбъектАвторизации", ?(Параметры.Отбор.Свойство("ОбъектАвторизации"),
Параметры.Отбор.ОбъектАвторизации, Неопределено));
Результат.Вставить("СкрытьКомандыПриВыбореПодборе", Параметры.РежимВыбора И Параметры.СкрытьКомандыПриВыбореПодборе);
Результат.Вставить("РасширенныйПодбор", Параметры.РежимВыбора И Параметры.РасширенныйПодбор);
Результат.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыВнешнихПользователей"));
Результат.Вставить("ГруппаВсеПользователи", ВнешниеПользователи.ГруппаВсеВнешниеПользователи());
@@ -672,6 +685,7 @@
Результат.Вставить("ПоказыватьЭлементыСписков", "");
Результат.Вставить("ГруппыОтображение", Элементы.Группы.Отображение);
Результат.Вставить("ГруппаТекущаяСтрока");
Результат.Вставить("СкрытыеЭлементы", "");
Возврат Результат;
@@ -780,6 +794,14 @@
ПользователиСлужебный.НастроитьРаботуВТакси(ЭтотОбъект);
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
КоманднаяПанель.Видимость = Истина;
Элементы.ГоризонтальнаяГруппаТакси.Видимость = Истина;
Элементы.ВидПользователей.Видимость = Истина;
Элементы.Колонки.Видимость = Истина;
Элементы.Легенда.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
@@ -1873,6 +1873,170 @@
КонецПроцедуры
Функция РеквизитыДоверенностиИзФайла(ЗагруженныйФайл) Экспорт
Результат = ФайлыДоверенностейИПодписей(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЗагруженныйФайл));
ФайлыДоверенностей = Результат.ФайлыДоверенностей;
Если ФайлыДоверенностей.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru = 'Не удалось прочитать доверенность - неверный формат.
|Ожидался файл доверенности в формате 003.'");
Возврат ТекстОшибки;
КонецЕсли;
ТекстОшибки = "";
Для Каждого Элемент Из ФайлыДоверенностей Цикл
ЗагруженныйФайл = Элемент.Ключ;
ИмяФайла = ЗагруженныйФайл.ИмяФайла;
АдресФайла = ЗагруженныйФайл.Хранение;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
Попытка
ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось прочитать файл %1 по причине:
|%2'"),
ИмяФайла,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ЗаписьЖурналаРегистрации(МашиночитаемыеДоверенностиФНССлужебный.ИмяСобытияЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
Продолжить;
КонецПопытки;
Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Довер.СвДов.НомДовер;
Иначе
ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Передов.СвПереДовер.НомДовер;
КонецЕсли;
//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
Доверенность = НайтиДоверенность(ЕдиныйРегистрационныйНомер);
Если ЗначениеЗаполнено(Доверенность) Тогда
Объект = Доверенность.ПолучитьОбъект();
Иначе
Объект = Справочники.МашиночитаемыеДоверенности.СоздатьЭлемент();
ЭтоПередоверие = ОписаниеДоверенности.Документ.Довер = Неопределено;
Если ЭтоПередоверие Тогда
//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
Иначе
ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
КонецЕсли;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Ссылка", ?(ЗначениеЗаполнено(Доверенность), Доверенность, Неопределено));
Результат.Вставить("Наименование", ?(ЗначениеЗаполнено(Доверенность), Объект.Наименование, АвтоНаименование(Объект)));
Результат.Вставить("ДатаВыдачи", Объект.ДатаВыдачи);
Результат.Вставить("ДатаОкончания", Объект.ДатаОкончания);
Результат.Вставить("НомерДоверенности", Объект.НомерДоверенности);
Результат.Вставить("Полномочия", Объект.Полномочия.Выгрузить().Скопировать(,"Код, Мнемокод, Наименование"));
МассивДоверителей = Новый Массив;
Доверители = Объект.Доверители.Выгрузить();
Найдено = Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
Для Каждого СтрокаОрганизация Из Найдено Цикл
РеквизитыОрганизации = СтрокаОрганизация.ДоверительРеквизиты.Получить();
Если РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
МассивДоверителей.Добавить(Новый Структура("Организация, ОрганизацияПредставитель, ФизическоеЛицо",
Неопределено, Неопределено, РеквизитыОрганизации));
Иначе
НайденоПредставителиОрганизации = Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
СтрокаОрганизация.Идентификатор));
Если НайденоПредставителиОрганизации.Количество() = 0 Тогда
МассивДоверителей.Добавить(
Новый Структура("Организация, ОрганизацияПредставитель, ФизическоеЛицо",
РеквизитыОрганизации, Неопределено, Неопределено));
Иначе
Для Каждого СтрокаПредставительОрганизации Из НайденоПредставителиОрганизации Цикл
РеквизитыПредставителяОрганизации = СтрокаПредставительОрганизации.ДоверительРеквизиты.Получить();
Если РеквизитыПредставителяОрганизации.ЭтоФизическоеЛицо Тогда
МассивДоверителей.Добавить(
Новый Структура("Организация, ОрганизацияПредставитель, ФизическоеЛицо",
РеквизитыОрганизации, Неопределено, РеквизитыПредставителяОрганизации));
Иначе
НайденоФизическиеЛица = Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
СтрокаПредставительОрганизации.Идентификатор));
Если НайденоФизическиеЛица.Количество() = 0 Тогда
МассивДоверителей.Добавить(
Новый Структура("Организация, ОрганизацияПредставитель, ФизическоеЛицо",
РеквизитыОрганизации, РеквизитыПредставителяОрганизации, Неопределено));
Иначе
Для Каждого СтрокаФизическоеЛицо Из НайденоФизическиеЛица Цикл
РеквизитыФизическогоЛица = СтрокаФизическоеЛицо.ДоверительРеквизиты.Получить();
МассивДоверителей.Добавить(
Новый Структура("Организация, ОрганизацияПредставитель, ФизическоеЛицо",
РеквизитыОрганизации, РеквизитыПредставителяОрганизации,
РеквизитыФизическогоЛица));
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат.Вставить("Доверители", МассивДоверителей);
МассивПредставителей = Новый Массив;
Представители = Объект.Представители.Выгрузить();
Найдено = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
Для Каждого СтрокаОрганизация Из Найдено Цикл
РеквизитыОрганизации = СтрокаОрганизация.ПредставительРеквизиты.Получить();
Если РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
МассивПредставителей.Добавить(Новый Структура("Организация, ФизическоеЛицо", Неопределено,
РеквизитыОрганизации));
Иначе
НайденоФизическиеЛица = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
СтрокаОрганизация.Идентификатор));
Если НайденоФизическиеЛица.Количество() = 0 Тогда
МассивПредставителей.Добавить(Новый Структура("Организация, ФизическоеЛицо", РеквизитыОрганизации,
Неопределено));
Иначе
Для Каждого СтрокаФизическоеЛицо Из НайденоФизическиеЛица Цикл
РеквизитыФизическогоЛица = СтрокаФизическоеЛицо.ПредставительРеквизиты.Получить();
МассивПредставителей.Добавить(Новый Структура("Организация, ФизическоеЛицо",
РеквизитыОрганизации, РеквизитыФизическогоЛица));
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат.Вставить("Представители", МассивПредставителей);
Возврат Результат;
КонецЦикла;
Возврат ТекстОшибки;
КонецФункции
Функция СвойстваДоверенностейИзФайлов(ЗагруженныеФайлы, УникальныйИдентификатор) Экспорт
@@ -1931,7 +2095,6 @@
НСтр("ru = '%1 - %2 (будет загружена)'"),
АвтоНаименование(Объект), ЕдиныйРегистрационныйНомер);
МассивПредставителей = Новый Массив;
Представители = Объект.Представители.Выгрузить();
Найдено = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
@@ -415,6 +415,32 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ГруппыВыбрать</name>
<id>549</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ГруппыВыбратьРасширеннаяПодсказка</name>
<id>550</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Группы.StandardCommand.Choose</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>488</id>
@@ -631,6 +657,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<choiceMode>true</choiceMode>
<selectionMode>MultiRow</selectionMode>
<rowSelectionMode>Row</rowSelectionMode>
<header>true</header>
@@ -1054,6 +1081,31 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>СписокВыбрать</name>
<id>551</id>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>СписокВыбратьРасширеннаяПодсказка</name>
<id>552</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Список.StandardCommand.Choose</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>454</id>
@@ -1449,6 +1501,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<choiceMode>true</choiceMode>
<selectionMode>MultiRow</selectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
@@ -2110,6 +2163,32 @@
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:Button">
<name>ФормаВыбрать</name>
<id>547</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаВыбратьРасширеннаяПодсказка</name>
<id>548</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Choose</commandName>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаВыбратьИЗакрыть</name>
<id>118</id>
@@ -3480,6 +3559,12 @@
<name>ТекущаяСтрока</name>
<valueType/>
</parameters>
<parameters>
<name>СкрытьКомандыПриВыбореПодборе</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar>
@@ -37,7 +37,7 @@
НастроитьФормуПоИспользованиюГруппПользователей(Ложь, Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда
Если ХранимыеПараметры.ВыборУчастниковОбсуждения Тогда
Элементы.СписокЗаблокироватьНедействительныхПользователейВСистемеВзаимодействий.Видимость = Истина;
КонецЕсли;
@@ -57,11 +57,18 @@
Элементы.СписокТекущиеДанныеКонтактнаяИнформация.Шрифт = Элементы.Фотография.Шрифт;
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И (Не ХранимыеПараметры.РежимВыбора
Или ХранимыеПараметры.РасширенныйПодбор) Тогда
Если ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
ПользователиСлужебныйКлиентСервер.СкрытьКомандыПриВыбореПодборе(ЭтотОбъект);
КонецЕсли;
НастроитьРаботуВТакси();
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И ОбщегоНазначения.ЭтоВебКлиент() Тогда
КоманднаяПанель.Видимость = Ложь;
Элементы.ГоризонтальнаяГруппаТакси.Видимость = Ложь;
Элементы.Колонки.Видимость = Ложь;
Элементы.Легенда.Видимость = Ложь;
Элементы.ГруппаКонтактнаяИнформация.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
@@ -69,7 +76,26 @@
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПользователиСлужебныйКлиент.ОтключитьВидимостьСкрытыхЭлементов(ЭтотОбъект);
Если ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
ПользователиСлужебныйКлиентСервер.СкрытьКомандыПриВыбореПодборе(ЭтотОбъект);
КонецЕсли;
ГруппаСкрыта = Элементы.ГруппаКонтактнаяИнформация.Скрыта();
Если ГруппаСкрыта И ПоказыватьКонтактнуюИнформацию Тогда
Элементы.ГруппаКонтактнаяИнформация.Показать();
ИначеЕсли Не ГруппаСкрыта И Не ПоказыватьКонтактнуюИнформацию Тогда
Элементы.ГруппаКонтактнаяИнформация.Скрыть();
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
#Если ВебКлиент Тогда
ПодключитьОбработчикОжидания("ПриОткрытииОбработчикОжидания", 0.1, Истина);
#Иначе
НастроитьРаботуВТакси();
#КонецЕсли
КонецЕсли;
КонецПроцедуры
@@ -644,23 +670,7 @@
&НаКлиенте
Процедура ПриОткрытииОбработчикОжидания()
Если ХранимыеПараметры.РежимВыбора Тогда
ПользователиСлужебныйКлиент.НастроитьКнопкиПриВыбореИПодборе(ЭтотОбъект);
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85()
И ХранимыеПараметры.РежимВыбора
И Не ХранимыеПараметры.РасширенныйПодбор Тогда
НастроитьРаботуВТакси();
КонецЕсли;
ГруппаСкрыта = Элементы.ГруппаКонтактнаяИнформация.Скрыта();
Если ГруппаСкрыта И ПоказыватьКонтактнуюИнформацию Тогда
Элементы.ГруппаКонтактнаяИнформация.Показать();
ИначеЕсли Не ГруппаСкрыта И Не ПоказыватьКонтактнуюИнформацию Тогда
Элементы.ГруппаКонтактнаяИнформация.Скрыть();
КонецЕсли;
КонецПроцедуры
@@ -744,6 +754,7 @@
// * ЗакрыватьПриВыборе - Булево
// * ВыборГрупп - Булево
// * ВыборУчастниковОбсуждения - Булево
// * СкрытьКомандыПриВыбореПодборе - Булево
// * РасширенныйПодбор - Булево
// * ИспользоватьГруппы - Произвольный
// * ГруппаВсеПользователи - СправочникСсылка.ГруппыПользователей
@@ -751,6 +762,7 @@
// * ПоказыватьЭлементыСписков - Строка - предыдущее значение
// * ГруппыОтображение - ОтображениеТаблицы - отображение перед включением отбора выбранных ссылок.
// * ГруппаТекущаяСтрока - Неопределено, СправочникСсылка.ГруппыПользователей
// * СкрытыеЭлементы - Строка
// * АдресПользовательБезФотографии - Строка
//
&НаСервере
@@ -760,7 +772,10 @@
Результат.Вставить("РежимВыбора", Параметры.РежимВыбора);
Результат.Вставить("ЗакрыватьПриВыборе", Параметры.ЗакрыватьПриВыборе <> Ложь);
Результат.Вставить("ВыборГрупп", Параметры.РежимВыбора И Параметры.ВыборГруппПользователей);
Результат.Вставить("ВыборУчастниковОбсуждения", Параметры.РежимВыбора И Параметры.ВыборУчастниковОбсуждения);
Результат.Вставить("ВыборУчастниковОбсуждения", Параметры.РежимВыбора И Параметры.ВыборУчастниковОбсуждения
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения"));
Результат.Вставить("СкрытьКомандыПриВыбореПодборе", Параметры.РежимВыбора И Параметры.СкрытьКомандыПриВыбореПодборе
Или Результат.ВыборУчастниковОбсуждения);
Результат.Вставить("РасширенныйПодбор", Параметры.РежимВыбора И Параметры.РасширенныйПодбор);
Результат.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
Результат.Вставить("ГруппаВсеПользователи", Пользователи.ГруппаВсеПользователи());
@@ -768,6 +783,7 @@
Результат.Вставить("ПоказыватьЭлементыСписков", "");
Результат.Вставить("ГруппыОтображение", Элементы.Группы.Отображение);
Результат.Вставить("ГруппаТекущаяСтрока");
Результат.Вставить("СкрытыеЭлементы", "");
Результат.Вставить("АдресПользовательБезФотографии",
ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, УникальныйИдентификатор));
@@ -874,6 +890,14 @@
ПользователиСлужебный.НастроитьРаботуВТакси(ЭтотОбъект);
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
КоманднаяПанель.Видимость = Истина;
Элементы.ГоризонтальнаяГруппаТакси.Видимость = Истина;
Элементы.Колонки.Видимость = Истина;
Элементы.Легенда.Видимость = Истина;
Элементы.ГруппаКонтактнаяИнформация.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
@@ -1076,9 +1100,7 @@
КонецЕсли;
КонецЦикла;
Если ХранимыеПараметры.ВыборУчастниковОбсуждения
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда
Если ХранимыеПараметры.ВыборУчастниковОбсуждения Тогда
МодульОбсуждения = ОбщегоНазначения.ОбщийМодуль("Обсуждения");
ИдентификаторыУчастников = МодульОбсуждения.ПользователиСистемыВзаимодействия(ВыбранныеПользователи);
МассивПользователей = Новый Массив;
@@ -45,6 +45,8 @@
&НаКлиенте
Процедура ЗаполнитьСписокСертификатов(Обновить)
Сертификаты.Очистить();
Токен = Новый Структура;
Токен.Вставить("Слот");
Токен.Вставить("СерийныйНомер");
@@ -86,8 +88,6 @@
&НаСервере
Процедура ЗаполнитьСписокСертификатовНаСервере(СертификатыСтрокой, Ошибки)
Сертификаты.Очистить();
Для Каждого Сертификат Из СертификатыСтрокой Цикл
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
@@ -1195,6 +1195,19 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>УжеДобавлен</name>
<id>19</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СертификатОписаниеДанных</name>
@@ -359,10 +359,6 @@
&НаКлиенте
Процедура Проверить(Команда)
ПроверкиУспешны = Истина;
Элементы.ГруппаСтраницы.Видимость = Истина;
Элементы.ФормаПроверить.Доступность = Ложь;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаВыполняетсяПроверка;
ПроверитьСертификат(Новый ОписаниеОповещения("ПроверитьЗавершение", ЭтотОбъект));
КонецПроцедуры
@@ -386,6 +382,12 @@
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ВидимостьПриОкончанииПроверки()
Элементы.ФормаПроверить.Доступность = Истина;
ВидимостьСтраниц(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИменаГруппПоНазваниямПроверок(ЭлементыФормы)
@@ -455,9 +457,7 @@
&НаКлиенте
Процедура ПроверитьЗавершение(Неопределен, Контекст) Экспорт
Элементы.ФормаПроверить.Доступность = Истина;
ВидимостьСтраниц(ЭтотОбъект);
ВидимостьПриОкончанииПроверки();
Если СертификатыМетокВремени.Количество() = 0 Тогда
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
@@ -549,6 +549,7 @@
КонецЕсли;
Контекст = Новый Структура("Оповещение", Оповещение);
ПроверитьСертификат(Новый ОписаниеОповещения(
"ПродолжитьОткрытиеПослеПроверкиСертификата", ЭтотОбъект, Контекст));
@@ -571,6 +572,8 @@
Возврат;
КонецЕсли;
ВидимостьПриОкончанииПроверки();
Если Не Открыта()
И Не (КлиентскиеПараметры.Свойство("НеПоказыватьРезультаты")
И КлиентскиеПараметры.НеПоказыватьРезультаты) Тогда
@@ -612,6 +615,11 @@
СертификатыМетокВремени.Очистить();
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
ПроверкиУспешны = Истина;
Элементы.ГруппаСтраницы.Видимость = Истина;
Элементы.ФормаПроверить.Доступность = Ложь;
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаВыполняетсяПроверка;
// Очистка предыдущих результатов проверки.
Если СтандартныеПроверки Тогда
@@ -1063,6 +1071,7 @@
КонецЕсли;
Если ТипЗнч(ДанныеПодписи) = Тип("ДвоичныеДанные") Тогда
ПарольПринят = Истина;
ПараметрыПроверкиПодписи = Новый Структура;
ПараметрыПроверкиПодписи.Вставить("Подпись", ДанныеПодписи);
ПараметрыПроверкиПодписи.Вставить("АлгоритмПодписи", Контекст.АлгоритмПодписи);
@@ -1114,11 +1123,13 @@
Если ТипЗнч(ЗашифрованныеДанные) = Тип("Строка") Тогда
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, ЗашифрованныеДанные, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
Иначе
Если ТипЗнч(ЗашифрованныеДанные) <> Тип("ДвоичныеДанные") Тогда
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, НСтр(
"ru = 'Не удалось зашифровать данные средствами токена.'"), Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
Иначе
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, "", Ложь, ОбъединятьРезультаты);
@@ -458,7 +458,7 @@
<Value>Hungary</Value>
</row>
<row>
<Value>ВЕНЕСУЭЛА БОЛИВАРИАНСКАЯ РЕСПУБЛИКА</Value>
<Value>ВЕНЕСУЭЛА, БОЛИВАРИАНСКАЯ РЕСПУБЛИКА</Value>
<Value>VE</Value>
<Value>VEN</Value>
<Value>862</Value>
@@ -872,7 +872,7 @@
<Value>IS</Value>
<Value>ISL</Value>
<Value>352</Value>
<Value>Республика Исландия</Value>
<Value></Value>
<Value>false</Value>
<Value>false</Value>
<Value>Iceland</Value>
@@ -1518,7 +1518,7 @@
<Value>Nigeria</Value>
</row>
<row>
<Value>НИДЕРЛАНДЫ</Value>
<Value> НИДЕРЛАНДЫ, КОРОЛЕВСТВО</Value>
<Value>NL</Value>
<Value>NLD</Value>
<Value>528</Value>
@@ -2048,11 +2048,11 @@
<Value>Slovenia</Value>
</row>
<row>
<Value>СОЕДИНЕННОЕ КОРОЛЕВСТВО</Value>
<Value>СОЕДИНЕННОЕ КОРОЛЕВСТВО ВЕЛИКОБРИТАНИИ И СЕВЕРНОЙ ИРЛАНДИИ</Value>
<Value>GB</Value>
<Value>GBR</Value>
<Value>826</Value>
<Value>Соединенное Королевство Великобритании и Северной Ирландии</Value>
<Value></Value>
<Value>false</Value>
<Value>false</Value>
<Value>The United Kingdom Of Great Britain And Northern Ireland</Value>
@@ -2498,7 +2498,7 @@
<Value>Equatorial Guinea</Value>
</row>
<row>
<Value>ЭЛАНДСКИЕ ОСТРОВА</Value>
<Value>АЛАНДСКИЕ ОСТРОВА</Value>
<Value>АХ</Value>
<Value>ALA</Value>
<Value>248</Value>
@@ -928,6 +928,10 @@
<event>Clearing</event>
<name>ПолноеИмяТипаПараметраВводаНаОснованииОчистка</name>
</handlers>
<handlers>
<event>ChoiceProcessing</event>
<name>ПолноеИмяТипаПараметраВводаНаОснованииОбработкаВыбора</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
@@ -482,6 +482,41 @@
Объект.ТолькоДляАвтора = ЗначениеЗаполнено(Объект.Автор);
КонецПроцедуры
&НаКлиенте
Процедура ПолноеИмяТипаПараметраВводаНаОснованииОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, СтандартнаяОбработка)
Если СтрСравнить(ВыбранноеЗначение, ШаблоныСообщенийКлиентСервер.ОбщийПредставление()) = 0 Тогда
Возврат;
КонецЕсли;
ТипВыбора = ПолучитьТипПоПолномуИмени(ВыбранноеЗначение);
Если ТипВыбора = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого Строка Из Реквизиты.ПолучитьЭлементы() Цикл
Если Строка.ПроизвольныйПараметр И Строка.Тип.СодержитТип(ТипВыбора) Тогда
СтандартнаяОбработка = Ложь;
ВыбранныйВариант = Элемент.СписокВыбора.НайтиПоЗначению(ВыбранноеЗначение);
Если ВыбранныйВариант <> Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru ='%1 уже выбран как произвольный параметр и не может быть назначением.'"),
ВыбранныйВариант.Представление);
Иначе
ТекстОшибки = НСтр("ru ='Объект уже выбран как произвольный параметр и не может быть назначением.'");
КонецЕсли;
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВложения
@@ -2541,4 +2576,10 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьТипПоПолномуИмени(Знач ПолноеИмя)
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Возврат ?(МенеджерОбъекта = Неопределено, Неопределено, ТипЗнч(МенеджерОбъекта.ПустаяСсылка()));
КонецФункции
#КонецОбласти
@@ -1515,7 +1515,7 @@
Процедура ЗаполнитьСписокТокенов(Токены)
Для Каждого Токен Из Токены Цикл
Найдено = Программы.НайтиСтроки(Новый Структура("ИмяПрограммы",Токен.СерийныйНомер));
Найдено = Программы.НайтиСтроки(Новый Структура("Наименование",Токен.Представление));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = Программы.Добавить();
@@ -428,7 +428,7 @@
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>StdPicture.CheckAll</picture>
<picture>CommonPicture.УстановитьВсе</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
@@ -450,7 +450,7 @@
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>StdPicture.UncheckAll</picture>
<picture>CommonPicture.СнятьВсе</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
@@ -4,6 +4,9 @@
<key>ru</key>
<value>Связанные документы</value>
</title>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманднаяПанельСПолями</name>
<id>51</id>
<items xsi:type="form:FormGroup">
<name>КоманднаяПанель</name>
<id>38</id>
@@ -69,85 +72,6 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:FormGroup">
<name>Поиск</name>
<id>31</id>
<items xsi:type="form:Button">
<name>ФормаНайти</name>
<id>33</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаНайтиРасширеннаяПодсказка</name>
<id>34</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаОтчета.StandardCommand.Find</commandName>
<buttonImportance>Normal</buttonImportance>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ФормаНайтиСледующий</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаНайтиСледующийРасширеннаяПодсказка</name>
<id>36</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.ТаблицаОтчета.StandardCommand.FindNext</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Поиск</value>
</title>
<extendedTooltip>
<name>ПоискРасширеннаяПодсказка</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo">
<representation>Compact</representation>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ИзменениеСостояния</name>
<id>21</id>
@@ -313,6 +237,190 @@
<appearanceMode>CommandBar</appearanceMode>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Поиск</name>
<id>41</id>
<items xsi:type="form:FormField">
<name>СтрокаПоиска</name>
<id>47</id>
<title>
<key>ru</key>
<value>Строка поиска</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СтрокаПоиска</segments>
</dataPath>
<titleLocation>None</titleLocation>
<toolTip>
<key>ru</key>
<value>Поиск определенного текста</value>
</toolTip>
<extendedTooltip>
<name>СтрокаПоискаРасширеннаяПодсказка</name>
<id>49</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СтрокаПоискаКонтекстноеМеню</name>
<id>48</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>TextEditEnd</event>
<name>СтрокаПоискаОкончаниеВводаТекста</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<extendedEditMultipleValues>true</extendedEditMultipleValues>
<clearButton>true</clearButton>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
<inputHint>
<key>ru</key>
<value>Поиск</value>
</inputHint>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>НайтиСледующуюСтроку</name>
<id>45</id>
<title>
<key>ru</key>
<value>Найти следующую строку</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НайтиСледующуюСтрокуРасширеннаяПодсказка</name>
<id>46</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<commandName>Form.Command.НайтиСледующуюСтроку</commandName>
<buttonImportance>Supplementary</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Поиск</value>
</title>
<horizontalStretch>false</horizontalStretch>
<groupHorizontalAlign>Right</groupHorizontalAlign>
<extendedTooltip>
<name>ПоискРасширеннаяПодсказка</name>
<id>42</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>
<horizontalSpacing>Half</horizontalSpacing>
<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>53</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Командная панель еще</value>
</title>
<horizontalStretch>false</horizontalStretch>
<groupHorizontalAlign>Right</groupHorizontalAlign>
<extendedTooltip>
<name>КоманднаяПанельЕщеРасширеннаяПодсказка</name>
<id>54</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<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>52</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>Auto</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>14</id>
@@ -331,7 +439,11 @@
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаОтчета</segments>
</dataPath>
<defaultItem>true</defaultItem>
<titleLocation>None</titleLocation>
<excludedCommands>Find</excludedCommands>
<excludedCommands>FindNext</excludedCommands>
<excludedCommands>FindPrevious</excludedCommands>
<extendedTooltip>
<name>ТаблицаОтчетаРасширеннаяПодсказка</name>
<id>20</id>
@@ -678,6 +790,24 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СтрокаПоиска</name>
<title>
<key>ru</key>
<value>Строка поиска</value>
</title>
<id>7</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Обновить</name>
<title>
@@ -800,6 +930,32 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>НайтиСледующуюСтроку</name>
<title>
<key>ru</key>
<value>Найти следующую строку</value>
</title>
<id>6</id>
<toolTip>
<key>ru</key>
<value>Повторить предыдущий поиск вперед</value>
</toolTip>
<use>
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>StdPicture.FindNext</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>НайтиСледующуюСтроку</name>
</handler>
</action>
<representation>Picture</representation>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>ОбъектОтбора</name>
<valueType/>
@@ -24,7 +24,7 @@
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
СтандартныеПодсистемыСервер.ПереместитьЭлементыВГруппу(Элементы.КоманднаяПанель, Элементы.ФормаКоманднаяПанель);
СтандартныеПодсистемыСервер.ПереместитьЭлементыВГруппу(Элементы.ФормаКоманднаяПанель, Элементы.КоманднаяПанельЕще);
КонецЕсли;
КонецПроцедуры
@@ -33,6 +33,11 @@
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СтрокаПоискаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
НайтиИВыделитьСтроку(Текст);
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаОтчетаПриАктивизации(Элемент)
@@ -129,6 +134,23 @@
КонецПроцедуры
&НаКлиенте
Процедура НайтиСледующуюСтроку(Команда)
НачалоПоиска = Неопределено;
ВыделенныеОбласти = Элементы.ТаблицаОтчета.ПолучитьВыделенныеОбласти();
Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл
Если ТипЗнч(ВыделеннаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
СледующаяСтрокаВерх = ВыделеннаяОбласть.Верх + 1;
СледующаяСтрокаНиз = ВыделеннаяОбласть.Низ + 1;
НачалоПоиска = ТаблицаОтчета.Область(СледующаяСтрокаВерх, 1,СледующаяСтрокаНиз, 1);
Прервать;
КонецЕсли;
КонецЦикла;
НачалоПоиска = ?(НачалоПоиска <> Неопределено, НачалоПоиска, Неопределено);
НайтиИВыделитьСтроку(СтрокаПоиска, НачалоПоиска);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1550,4 +1572,27 @@
#КонецОбласти
&НаКлиенте
Процедура НайтиИВыделитьСтроку(ТекстПоиска, НачалоПоиска = Неопределено)
Если Не ЗначениеЗаполнено(ТекстПоиска) Тогда
Возврат;
КонецЕсли;
РезультатПоиска = ТаблицаОтчета.НайтиТекст(ТекстПоиска, НачалоПоиска,,Истина,,,Истина);
Если РезультатПоиска = Неопределено И НачалоПоиска <> Неопределено Тогда
РезультатПоиска = ТаблицаОтчета.НайтиТекст(ТекстПоиска,,,Истина,,,Истина);
КонецЕсли;
Если РезультатПоиска <> Неопределено Тогда
ВыбранныеСтроки = Новый Массив;
ВыбранныеСтроки.Добавить(РезультатПоиска);
Элементы.ТаблицаОтчета.УстановитьВыделенныеОбласти(ВыбранныеСтроки);
ТекущийЭлемент = Элементы.ТаблицаОтчета;
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Строка не найдена.'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -2060,12 +2060,22 @@
Родители = ЭлементРасшифровки.ПолучитьРодителей();
Родитель = ?(Родители.Количество() = 0, Неопределено, Родители[0]);
РасшифровкаДоступна = Истина;
Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка")
Или ТипЗнч(Родитель) <> Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипЭлементаРасшифровкиГруппировка();
Иначе
ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит();
Если ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
Для Каждого Группировка Из Данные.Настройки.Структура Цикл
Если СтрСравнить(Родитель.Группировка, Группировка.Идентификатор) = 0 Тогда
РасшифровкаДоступна = Группировка.ПоляГруппировки.Элементы.Количество() > 0;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ДанныеЭлементаРасшифровки = Новый Структура;
@@ -2073,6 +2083,7 @@
ДанныеЭлементаРасшифровки.Вставить("Настройки", Данные.Настройки);
ДанныеЭлементаРасшифровки.Вставить("Отбор", ОтборЭлементаРасшифровки(ЭлементРасшифровки));
ДанныеЭлементаРасшифровки.Вставить("Отборы", ОтборыВыделенныхЭлементовРасшифровки(Документ, ВыделенныеОбластиДокумента, Данные));
ДанныеЭлементаРасшифровки.Вставить("РасшифровкаДоступна", РасшифровкаДоступна);
Поля = ЭлементРасшифровки.ПолучитьПоля();
@@ -635,6 +635,10 @@
Процедура СнятьФильтр(Форма, СвойстваЗаголовка, ДанныеРасшифровки = Неопределено) Экспорт
Если Не ДействиеДоступно(Форма, , СвойстваЗаголовка) Тогда
Возврат;
КонецЕсли;
ЭтоГруппировка = (ДанныеРасшифровки <> Неопределено
И ДанныеРасшифровки.Тип = ВариантыОтчетовСлужебныйКлиентСервер.ТипЭлементаРасшифровкиГруппировка());
@@ -3252,8 +3256,7 @@
Процедура ОткрытьФормуОтчета(Форма, ПараметрыОткрытия)
Если ПараметрыОткрытия.Данные <> Неопределено
И ПараметрыОткрытия.Данные.Тип = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит() Тогда
Если ПараметрыОткрытия.Данные <> Неопределено И Не ПараметрыОткрытия.Данные.РасшифровкаДоступна Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно. Нельзя расшифровывать детальные записи.'"));
Возврат;
КонецЕсли;
@@ -5530,7 +5530,8 @@
// Отправка вне транзакции.
НомераДляОтправки = ТаблицаАдресатовСообщения.ВыгрузитьКолонку("НомерДляОтправки");
Попытка
РезультатОтправки = ОтправкаSMS.ОтправитьSMS(НомераДляОтправки, ТекстСообщения, "", ОтправлятьВТранслите);
РезультатОтправки = ОтправкаSMS.ОтправитьSMS(НомераДляОтправки, ТекстСообщения, Неопределено,
ОтправлятьВТранслите);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось отправить %1 по причине:
@@ -3855,6 +3855,11 @@
ИсключениеПроверки.ИмяПроцедуры = "ЗапуститьВыполнениеВФоне";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры)";
Методы = Новый Соответствие;
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОбработки", Истина);
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОтчета", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ДлительныеОперации", Методы);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
@@ -1832,6 +1832,15 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
Методы = Новый Соответствие;
Методы.Вставить("ОбработчикКомандыЗаполнения");
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ДополнительныеОтчетыИОбработки", Методы);
КонецПроцедуры
Функция ДополнительныеОтчетыИОбработкиОбновляются(Очередь) Экспорт
Возврат ОбновлениеИнформационнойБазы.ЕстьЗаблокированныеПредыдущимиОчередямиДанные(Очередь, "Справочник.ДополнительныеОтчетыИОбработки");
КонецФункции
@@ -77,4 +77,35 @@
КонецФункции
Функция ДоступноПроведение(Ссылки) Экспорт
ТипыСсылок = Новый Соответствие;
Для Каждого Ссылка Из Ссылки Цикл
Если Ссылка = Неопределено Тогда
Продолжить;
КонецЕсли;
Тип = ТипЗнч(Ссылка);
Если ТипыСсылок[Тип] = Неопределено Тогда
ТипыСсылок[Тип] = Новый Массив;
КонецЕсли;
ТипыСсылок[Тип].Добавить(Ссылка);
КонецЦикла;
Если Не ЗначениеЗаполнено(ТипыСсылок) Тогда
Возврат Ложь;
КонецЕсли;
Для Каждого ТипСсылок Из ТипыСсылок Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипСсылок.Ключ);
Если ОбъектМетаданных = Неопределено Или Не ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных)
Или ОбъектМетаданных.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
#КонецОбласти
@@ -249,7 +249,7 @@
ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(
ПечатаемыеОбъекты, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
Если СтандартнаяОбработка И ДополнительныеОтчетыИОбработкиВызовСервера.ДоступноПроведение(ПечатаемыеОбъекты) Тогда
ПараметрыВыполнения.ТребуетсяПроведение = Истина;
КонецЕсли;
@@ -2395,11 +2395,21 @@
ДлительныеОперации.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
ОбновлениеИнформационнойБазыСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
МодульДополнительныеОтчетыИОбработки.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда
МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный");
МодульКонтрольВеденияУчетаСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкаПорядкаЭлементов") Тогда
МодульНастройкаПорядкаЭлементов = ОбщегоНазначения.ОбщийМодуль("НастройкаПорядкаЭлементов");
МодульНастройкаПорядкаЭлементов.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
@@ -1430,7 +1430,6 @@
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьИспользованиеНесколькихПроизводственныхКалендарей");
Методы.Вставить("ОбновитьДанныеПроизводственныхКалендарей");
Методы.Вставить("ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей");
Методы.Вставить("ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей");
@@ -507,6 +507,59 @@
// Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека регламентированной отчетности.
//
// Возвращает структуру реквизитов доверенности, прочитанной из переданного файла или архива.
// Если не удалось прочитать, возвращает текст ошибки
//
// Параметры:
// ЗагруженныйФайл - Структура - файл доверенности (xml), архив с доверенностью (zip):
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
//
// Возвращаемое значение:
// Строка,
// Структура:
// * ДатаВыдачи - Дата
// * ДатаОкончания - Дата
// * НомерДоверенности - Строка
// * Доверители - Массив из Структура:
// ** Организация - Неопределено, Структура - см. МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовОрганизации.Реквизиты
// ** ОрганизацияПредставитель - Неопределено, Структура - см. МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовОрганизации.Реквизиты
// ** ФизическоеЛицо - Неопределено, Структура - см. МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовФизическогоЛица.Реквизиты
// * Представители - Массив из Структура:
// ** Организация - Неопределено, Структура - см. МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовОрганизации.Реквизиты
// ** ФизическоеЛицо - Неопределено, Структура - см. МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовФизическогоЛица.Реквизиты
// * Полномочия - ТаблицаЗначений:
// ** Код - Строка
// ** Мнемокод - Строка
// ** Наименование - Строка
// * Ссылка - СправочникСсылка.МашиночитаемыеДоверенности
// * Наименование - Строка
//
Функция РеквизитыДоверенностиИзФайла(ЗагруженныйФайл) Экспорт
Возврат Справочники.МашиночитаемыеДоверенности.РеквизитыДоверенностиИзФайла(ЗагруженныйФайл);
КонецФункции
// Возвращает список новых либо перезаполненных существующих элементов справочника МашиночитаемыеДоверенности данными из
// файлов.
//
// Параметры:
// ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
// Замещать - Булево - при замещении выполняется перезаполнение элемента, все имеющиеся присоединенные файлы при этом
// помечаются на удаление.
//
// Возвращаемое значение:
// Структура:
// * Доверенности - Массив из СправочникСсылка.МашиночитаемыеДоверенности
// * ТекстыОшибок - Массив из Строка
//
Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь) Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать);
КонецФункции
// Получает уникальный номер машиночитаемой доверенности с сервиса распределенного реестра ФНС.
//
// Параметры:
@@ -182,6 +182,15 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
Методы = Новый Соответствие;
Методы.Вставить("Подключаемый_ПереместитьЭлемент");
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.НастройкаПорядкаЭлементов", Методы);
КонецПроцедуры
Функция НаправлениеПеремещенияЭлементаВверх() Экспорт
Возврат "Вверх";
КонецФункции
@@ -44,7 +44,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.2.1.356";
Описание.Версия = "3.2.1.371";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1980,6 +1980,19 @@
ИсключениеПроверки.ФрагментСодержания = "Обработан = ОбщегоНазначения.ВыполнитьМетодКонфигурации(СвойстваОбработчика.ПроцедураПроверки,
| ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МетаданныеИОтбор), Истина)";
Методы = Новый Соответствие;
Методы.Вставить("ПриАварийномЗавершенииПотокаОтложенногоОбработчика");
Методы.Вставить("ПриОтменеПотокаОтложенногоОбработчика");
Методы.Вставить("ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ПриОтменеПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ЗаполнитьДанныеОтложенногоОбработчика", Истина);
Методы.Вставить("ЗавершитьРегистрациюДанныхОтложенногоОбновления", Истина);
Методы.Вставить("ВыполнитьОтложенныйОбработчик", Истина);
Методы.Вставить("ЗавершитьВыполнениеОтложенногоОбработчика", Истина);
Методы.Вставить("НайтиПорциюДляОбновления", Истина);
Методы.Вставить("ЗавершитьПоискПорцииДляОбновления", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный", Методы);
КонецПроцедуры
Функция НастройкиПодсистемы() Экспорт
@@ -7358,6 +7371,13 @@
ИмяКлючевогоРеквизита = ИмяКлючевогоРеквизита(Контекст.НастройкиПредопределенныхЭлементов);
Если ИмяКлючевогоРеквизита = "Ссылка" Тогда
Если ЗаполняемыйЭлемент.ЭтоНовый() Тогда
ЗначениеКлючаОбъекта=ЗаполняемыйЭлемент.ПолучитьСсылкуНового();
Иначе
ЗначениеКлючаОбъекта=ЗаполняемыйЭлемент.Ссылка;
КонецЕсли;
Иначе
ЗначениеКлючаОбъекта = ЗаполняемыйЭлемент[ИмяКлючевогоРеквизита];
Если Не ЗначениеЗаполнено(ЗначениеКлючаОбъекта) Тогда
@@ -7373,6 +7393,7 @@
КонецЕсли;
КонецЕсли;
КонецЕсли;
МенеджерОбъекта = Контекст.МенеджерОбъекта;
@@ -360,6 +360,21 @@
КонецПроцедуры
Функция ПараметрыРасширеннойФормыПодбора(Форма) Экспорт
ПараметрыПодбора = ПользователиСлужебный.НовыеПараметрыРасширеннойФормыПодбора();
ПараметрыПодбора.ЗаголовокФормыПодбора = НСтр("ru = 'Участники обсуждения'");
Для Каждого Элемент Из Форма.Участники Цикл
Если ЗначениеЗаполнено(Элемент.Пользователь) Тогда
ПараметрыПодбора.ВыбранныеПользователи.Добавить(Элемент.Пользователь);
КонецЕсли;
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(ПараметрыПодбора, Форма.УникальныйИдентификатор);
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
@@ -64,7 +64,6 @@
Параметры.Вставить("ЗакрыватьПриВыборе", Ложь);
Параметры.Вставить("МножественныйВыбор", Истина);
Параметры.Вставить("РасширенныйПодбор", Истина);
Параметры.Вставить("ВыбранныеПользователи", Новый Массив);
Параметры.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Участники обсуждения'"));
СтандартнаяОбработка = Ложь;
@@ -88,17 +87,39 @@
#Область СлужебныеПроцедурыИФункции
Процедура НачатьПодборУчастниковОбсуждения(Элемент) Экспорт
Процедура НачатьПодборУчастниковОбсуждения(Форма, ПараметрыРасширеннойФормыПодбора) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("РасширенныйПодбор", Истина);
ПараметрыФормы.Вставить("ВыбранныеПользователи", Новый Массив);
ПараметрыФормы.Вставить("ЗаголовокФормыПодбора", НСтр("ru='Участники обсуждения'"));
ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора);
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы,Элемент,,,,,
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ЗавершитьПодборУчастниковОбсуждения", ЭтотОбъект, Форма);
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Форма,,,, ОповещениеОЗакрытии,
РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
КонецПроцедуры
Процедура ЗавершитьПодборУчастниковОбсуждения(Результат, Форма) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Участники = Форма.Участники;
Участники.Очистить();
Если ТипЗнч(Результат) = Тип("Массив") Тогда
Для Каждого Значение Из Результат Цикл
Участники.Добавить().Пользователь = Значение;
КонецЦикла;
Иначе
Участники.Добавить().Пользователь = Результат;
КонецЕсли;
КонецПроцедуры
Процедура ПоказатьИнформациюОбИнтеграции(Форма, ОписаниеИнтеграции, ОповещениеОбИзмененииИнтеграции) Экспорт
@@ -480,6 +480,15 @@
// ** ИмяПроцедуры - Строка - имя процедуры или функции, объявленной в модуле.
// ** ФрагментСодержания - Строка - фрагмент содержания места вызова, которые нужно пропустить.
// Фрагменты содержания указаны в подробном тексте ошибки отчета ПроверкаВнедренияБСП.
// * ОшибкаКогдаУказанныйМетодНеВызывается - Булево - начальное значение Истина.
// Если Истина, тогда отчет ПроверкаВнедренийБСП добавит ошибки,
// когда метод указанный в процедуре ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод,
// не найден среди вызываемых методов, которые нашел отчет (с учетом способа вызова - в фоне / не в фоне).
// * ИсключенияКогдаУказанныйМетодНеВызывается - Соответствие из КлючИЗначение:
// ** Ключ - Строка - имя общего модуля, например, "ОбщийМодуль.ОбщегоНазначения",
// имя объекта метаданных (модуль менеджера), например, "Справочник.Организации",
// или имя модуля объекта обработки или отчета, например, "Отчет.ПроверкаВнедренияБСП.МодульОбъекта".
// ** Значение - см. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод.Методы
//
// Пример:
// Обработчики = Новый Соответствие;
@@ -37,6 +37,7 @@
"КомандаЗапуска");
КонецЕсли;
// АПК:547-выкл инструкция препроцессора допустима, так как в выполняемом коде нет обращения к модулям.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
//@skip-check bsl-legacy-check-for-each-statetement-collection
Для Каждого Элемент Из КомандаЗапуска Цикл
@@ -45,6 +46,7 @@
#Иначе
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска[0], ЭтоАдминистратор);
#КонецЕсли
// АПК:547-вкл
Возврат МассивВСтрокуКоманды(КомандаЗапуска);
@@ -11,17 +11,93 @@
// Отправляет SMS через SMS4B.
//
// Параметры:
// НомераПолучателей - Массив - номера получателей в формате +7ХХХХХХХХХХ;
// Текст - Строка - текст сообщения, длиной не более 480 символов;
// ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера входящего SMS;
// Логин - Строка - логин пользователя услуги отправки sms;
// Пароль - Строка - пароль пользователя услуги отправки sms.
// НомераПолучателей - Массив - номера получателей в формате +7ХХХХХХХХХХ.
// Текст - Строка - текст сообщения, длиной не более 480 символов.
// ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера входящего SMS.
// Логин - Строка - логин пользователя услуги отправки SMS.
// Пароль - Строка - пароль пользователя услуги отправки SMS.
//
// Возвращаемое значение:
// см. ОтправкаSMS.ОтправитьSMS.
//
Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль) Экспорт
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоКлючу" Тогда
Возврат ОтправитьSMSНовыйAPI(НомераПолучателей, Текст, ИмяОтправителя);
Иначе
Возврат ОтправитьSMSСтарыйAPI(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль);
КонецЕсли;
КонецФункции
// Возвращает текстовое представление статуса доставки сообщения.
//
// Параметры:
// ИдентификаторСообщения - Строка - идентификатор, присвоенный sms при отправке.
// НастройкиОтправкиSMS - см. ОтправкаSMS.НастройкиОтправкиSMS.
//
// Возвращаемое значение:
// см. ОтправкаSMS.СтатусДоставки.
//
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоКлючу" Тогда
ИдентификаторыСообщений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения);
Возврат СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS)[ИдентификаторСообщения];
Иначе
Возврат СтатусДоставкиСтарыйAPI(ИдентификаторСообщения, НастройкиОтправкиSMS);
КонецЕсли;
КонецФункции
Функция СтатусДоставкиSMS(Знач КодСостояния)
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("-21", "НеОтправлялось");
СоответствиеСтатусов.Вставить("-22", "НеОтправлялось");
Если ПустаяСтрока(КодСостояния) Или СтрНачинаетсяС(КодСостояния, "-")
Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодСостояния) Тогда
Результат = СоответствиеСтатусов[НРег(КодСостояния)];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецЕсли;
КодСостояния = Число(КодСостояния);
ВсегоФрагментов = КодСостояния % 256;
ОтправленоФрагментов = Цел(КодСостояния / 256) % 256;
ОкончательныйСтатус = КодСостояния >= 256*256;
Если ОкончательныйСтатус Тогда
Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда
Результат = "НеДоставлено";
Иначе
Результат = "Доставлено";
КонецЕсли;
Иначе
Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда
Результат = "Отправляется";
Иначе
Результат = "Отправлено";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
#Область СтарыйAPI
Функция ОтправитьSMSСтарыйAPI(НомераПолучателей, Текст, ИмяОтправителя, Логин, Пароль)
Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, "");
ПараметрыЗапроса = Новый Структура;
@@ -67,7 +143,7 @@
// Возвращаемое значение:
// см. ОтправкаSMS.СтатусДоставки.
//
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт
Функция СтатусДоставкиСтарыйAPI(ИдентификаторСообщения, НастройкиОтправкиSMS)
Логин = НастройкиОтправкиSMS.Логин;
Пароль = НастройкиОтправкиSMS.Пароль;
@@ -78,7 +154,7 @@
ПараметрыЗапроса.Вставить("Password", Пароль);
ПараметрыЗапроса.Вставить("MessageId", ИдентификаторСообщения);
// отправка запроса
// Отправка запроса.
КодСостояния = ВыполнитьЗапрос("StatusTXT", ПараметрыЗапроса);
Если ПустаяСтрока(КодСостояния) Тогда
Возврат "Ошибка";
@@ -97,41 +173,8 @@
КонецФункции
Функция СтатусДоставкиSMS(Знач КодСостояния)
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("-21", "НеОтправлялось");
СоответствиеСтатусов.Вставить("-22", "НеОтправлялось");
Если ПустаяСтрока(КодСостояния) Или СтрНачинаетсяС(КодСостояния, "-")
Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодСостояния) Тогда
Результат = СоответствиеСтатусов[НРег(КодСостояния)];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецЕсли;
КодСостояния = Число(КодСостояния);
ВсегоФрагментов = КодСостояния % 256;
ОтправленоФрагментов = Цел(КодСостояния / 256) % 256;
ОкончательныйСтатус = КодСостояния >= 256*256;
Если ОкончательныйСтатус Тогда
Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда
Результат = "НеДоставлено";
Иначе
Результат = "Доставлено";
КонецЕсли;
Иначе
Если ВсегоФрагментов = 0 Или ВсегоФрагментов > ОтправленоФрагментов Тогда
Результат = "Отправляется";
Иначе
Результат = "Отправлено";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОписанияОшибок()
ОписанияОшибок = Новый Соответствие;
ОписанияОшибок.Вставить("0", НСтр("ru = 'Превышен предел открытых сессий.'"));
@@ -152,25 +195,34 @@
ОписанияОшибок.Вставить("-68", НСтр("ru = 'Аккаунт заблокирован.'"));
Возврат ОписанияОшибок;
КонецФункции
Функция ОписаниеОшибкиОтправки(КодОшибки)
ОписанияОшибок = ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
Если ТекстСообщения = Неопределено Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Код ошибки: ""%1"".'"), КодОшибки);
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
Функция ОписаниеОшибкиПолученияСтатуса(КодОшибки)
ОписанияОшибок =ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
Если ТекстСообщения = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Отказ выполнения операции'");
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
Функция ВыполнитьЗапрос(ИмяМетода, ПараметрыЗапроса)
@@ -210,13 +262,265 @@
КонецЕсли;
КонецЕсли;
ЧтениеXML.Закрыть();
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область НовыйAPI
Функция ОтправитьSMSНовыйAPI(НомераПолучателей, Текст, ИмяОтправителя)
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
// Формирование пакетов.
ПакетыОтправки = РазделитьМассивНомеровНаПакеты(НомераПолучателей);
КоличествоПакетов = ПакетыОтправки.Количество();
Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, "");
Для Индекс = 0 По КоличествоПакетов - 1 Цикл
ПакетНомеров = ПакетыОтправки[Индекс];
ПараметрыЗапроса = Новый Структура;
ТелоЗапроса = Новый Структура;
ТелоЗапроса.Вставить("sender", ?(ЗначениеЗаполнено(ИмяОтправителя), ИмяОтправителя, НастройкиОтправкиSMS.ИмяОтправителя));
Сообщения = Новый Массив;
Для Каждого НомерПолучателя Из ПакетНомеров Цикл
Сообщение = Новый Структура("number, text", "","");
Сообщение.number = ФорматироватьНомер(НомерПолучателя);
Сообщение.text = Текст;
Сообщения.Добавить(Сообщение);
КонецЦикла;
ТелоЗапроса.Вставить("messages", Сообщения);
ТекстОтвета = ВыполнитьЗапросНовыйAPI("sms", ПараметрыЗапроса, ТелоЗапроса, "POST");
// Обработка результата.
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
ДобавитьОшибку(Результат.ОписаниеОшибки, НСтр("ru = 'Соединение не установлено. Подробности см. в журнале регистрации.'"));
Возврат Результат;
КонецЕсли;
Попытка
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета,,Ложь);
Исключение
ДобавитьОшибку(Результат.ОписаниеОшибки, НСтр("ru = 'Ошибка сервера. Подробности см. в журнале регистрации.'"));
Возврат Результат;
КонецПопытки;
// Разбор результата запроса.
Если РезультатЗапроса.Свойство("errors") Тогда
Результат.ОписаниеОшибки = ОписаниеОшибкиЗапросаНовыйAPI(РезультатЗапроса);
Иначе
ИдентификаторыСообщений = РезультатЗапроса["messages"];
Переименования = Новый Соответствие;
ТаблицаИдентификаторов = МассивСтруктурВТаблицуЗначений(ИдентификаторыСообщений);
// Так как в сервис отправлен форматированный номер - выполняется перебор исходного пакета номеров.
Для Каждого НомерПолучателя Из ПакетНомеров Цикл
ИдентификаторСообщения = "";
СтрокаИдентификатора = ТаблицаИдентификаторов.Найти(ФорматироватьНомер(НомерПолучателя), "number");
Если Не СтрокаИдентификатора = Неопределено Тогда
ИдентификаторСообщения = СтрокаИдентификатора["id"];
Если Не ПустаяСтрока(НомерПолучателя) И ЗначениеЗаполнено(ИдентификаторСообщения) Тогда
ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения",
НомерПолучателя,ИдентификаторСообщения);
Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат.ОписаниеОшибки = СокрП(Результат.ОписаниеОшибки);
Если Не ПустаяСтрока(Результат.ОписаниеОшибки) Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ВыполнитьЗапросНовыйAPI(ИмяМетода, ПараметрыЗапроса, ТелоЗапроса, HTTPМетод)
HTTPЗапрос = ПодготовитьHTTPЗапрос("/v1/" + ИмяМетода, ПараметрыЗапроса, ТелоЗапроса);
HTTPЗапрос.Заголовки.Вставить("Accept-Encoding", "identity");
АдресСервера = АдресСервера();
HTTPОтвет = Неопределено;
Попытка
Соединение = Новый HTTPСоединение(АдресСервера,,,,
ПолучениеФайловИзИнтернета.ПолучитьПрокси("https"),
60,
ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());
Если HTTPМетод = "POST" Тогда
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
ИначеЕсли HTTPМетод = "GET" Тогда
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
Иначе
// Метод HTTP не поддерживается.
Результат = "";
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Метод HTTP ""%1"" не поддерживается.'"), HTTPМетод);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Результат = "";
Если HTTPОтвет <> Неопределено Тогда
Если HTTPОтвет.КодСостояния <> 200 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), ИмяМетода, HTTPОтвет.КодСостояния) + Символы.ПС
+ HTTPОтвет.ПолучитьТелоКакСтроку();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецЕсли;
Результат = HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОписаниеОшибкиЗапросаНовыйAPI(РезультатЗапроса)
РезультатСтатусЗапроса = РезультатЗапроса["status"];
РезультатЗаголовокОшибки = РезультатЗапроса["title"];
РезультатОшибки = РезультатЗапроса["errors"];
ОписанияОшибок = Новый Массив;
Для Каждого ОписаниеОшибки Из РезультатОшибки Цикл
ДетализацияОшибки = ОписаниеОшибки["detail"];
Если Не ПустаяСтрока(ДетализацияОшибки) Тогда
ОписанияОшибок.Добавить(ДетализацияОшибки);
КонецЕсли;
КонецЦикла;
ОписанияОшибокСтрокой = СтрСоединить(ОписанияОшибок, Символы.ПС);
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1
|Детальное описание:
|%2'"), РезультатЗаголовокОшибки, ОписанияОшибокСтрокой);
Возврат ТекстСообщения;
КонецФункции
// Запрашивает статус доставки сообщения у поставщика услуг.
//
// Параметры:
// ИдентификаторыСообщений - см. ОтправкаSMS.СтатусыДоставки.ИдентификаторыСообщений.
// НастройкиОтправкиSMS - см. ОтправкаSMS.НастройкиОтправкиSMS.
//
// Возвращаемое значение:
// см. ОтправкаSMS.СтатусыДоставки.
//
Функция СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS) Экспорт
СтатусыДоставки = Новый Соответствие;
// Инициализация значения статуса.
Для Каждого ИдентификаторСообщения Из ИдентификаторыСообщений Цикл
СтатусыДоставки[ИдентификаторСообщения] = "Ошибка";
КонецЦикла;
// Формирование пакетов.
ПакетыОтправки = РазделитьМассивНомеровНаПакеты(ИдентификаторыСообщений);
КоличествоПакетов = ПакетыОтправки.Количество();
Для Индекс = 0 По КоличествоПакетов - 1 Цикл
ТекущийПакет = ПакетыОтправки[Индекс];
ПараметрыЗапроса = Новый Структура;
ТелоЗапроса = Новый Структура;
ТелоЗапроса.Вставить("ids", ТекущийПакет);
ТекстОтвета = ВыполнитьЗапросНовыйAPI("sms/messages/status", ПараметрыЗапроса, ТелоЗапроса, "GET");
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
Возврат СтатусыДоставки;
КонецЕсли;
Попытка
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета,,Ложь);
Исключение
Возврат СтатусыДоставки;
КонецПопытки;
// Разбор результата запроса.
Если РезультатЗапроса.Свойство("errors") Тогда
Причина = ОписаниеОшибкиЗапросаНовыйAPI(РезультатЗапроса);
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось проверить статус доставки SMS по причине:
|%1'"), Причина);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
Возврат СтатусыДоставки;
Иначе
СтатусыСообщений = РезультатЗапроса["statuses"];
Для Каждого ТекСтатус Из СтатусыСообщений Цикл
ИдентификаторСообщения = ТекСтатус["id"];
КодСостояния = ТекСтатус["code"];
СтатусДоставки = СтатусДоставкиSMSНовыйAPI(КодСостояния);
СтатусыДоставки[ИдентификаторСообщения] = СтатусДоставки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат СтатусыДоставки;
КонецФункции
Функция СтатусДоставкиSMSНовыйAPI(Знач КодСостояния)
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("delivered", "Доставлено");
СоответствиеСтатусов.Вставить("undelivered", "НеДоставлено");
СоответствиеСтатусов.Вставить("in_process", "Отправляется");
СоответствиеСтатусов.Вставить("in_queue", "Отправляется");
СоответствиеСтатусов.Вставить("sent", "Отправлено");
СоответствиеСтатусов.Вставить("not_sent", "НеОтправлено");
СоответствиеСтатусов.Вставить("error", "НеОтправлялось");
Результат = СоответствиеСтатусов[НРег(КодСостояния)];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
#КонецОбласти
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
@@ -227,8 +531,146 @@
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса, ТелоЗапроса="") Экспорт
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
Заголовки = Новый Соответствие;
Если Не ПустаяСтрока(ТелоЗапроса) Тогда
Заголовки.Вставить("accept", "application/json");
КонецЕсли;
Если НастройкиОтправкиSMS.СпособАвторизации = "ПоКлючу" Тогда
Заголовки.Вставить("Authorization", "Bearer " + НастройкиОтправкиSMS.Пароль);
КонецЕсли;
Если ТипЗнч(ПараметрыЗапроса) = Тип("Строка") Тогда
СтрокаПараметров = ПараметрыЗапроса;
Иначе
СписокПараметров = Новый Массив;
Для Каждого Параметр Из ПараметрыЗапроса Цикл
Значения = Параметр.Значение;
Если ТипЗнч(Параметр.Значение) <> Тип("Массив") Тогда
Значения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.Значение);
КонецЕсли;
Для Каждого Значение Из Значения Цикл
СписокПараметров.Добавить(Параметр.Ключ + "=" + КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL));
КонецЦикла;
КонецЦикла;
СтрокаПараметров = СтрСоединить(СписокПараметров, "&");
КонецЕсли;
Если Не ПустаяСтрока(СтрокаПараметров) Тогда
АдресРесурса = АдресРесурса + "?" + СтрокаПараметров;
КонецЕсли;
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
Если Не ПустаяСтрока(ТелоЗапроса) Тогда
HTTPЗапрос.УстановитьТелоИзСтроки(ОбщегоНазначения.ЗначениеВJSON(ТелоЗапроса));
КонецЕсли;
Возврат HTTPЗапрос;
КонецФункции
// Разделяет массив номеров на пакеты.
//
// Параметры:
// НомераПолучателей- Массив из Строка - массив номеров или идентификаторов сообщений.
//
// Возвращаемое значение:
// Массив из Массив
//
Функция РазделитьМассивНомеровНаПакеты(НомераПолучателей)
РазмерПакета = РазмерПакета(); // Количество элементов в одном пакете.
Пакеты = Новый Массив; // Массив для хранения пакетов.
// Формируем пакеты.
Для Индекс = 0 По НомераПолучателей.Количество() - 1 Цикл
Если Индекс % РазмерПакета = 0 Тогда
ТекущийПакет = Новый Массив;
Пакеты.Добавить(ТекущийПакет);
КонецЕсли;
ПоследнийПакет = Пакеты[Пакеты.Количество() - 1];
ПоследнийПакет.Добавить(НомераПолучателей[Индекс]);
КонецЦикла;
Возврат Пакеты;
КонецФункции
// Функция помещает массив структур в таблицу значений.
//
// Параметры:
// МассивСтруктур - Массив из Структура.
//
// Возвращаемое значение:
// ТаблицаЗначений.
//
Функция МассивСтруктурВТаблицуЗначений(МассивСтруктур) Экспорт
Результат = Новый ТаблицаЗначений;
Если ТипЗнч(МассивСтруктур) = Тип("Массив")
И МассивСтруктур.Количество() <> 0 Тогда
// Создание колонок.
СтруктураКолонок = МассивСтруктур[0];
Для Каждого Поле Из СтруктураКолонок Цикл
Результат.Колонки.Добавить(Поле.Ключ);
КонецЦикла;
// Заполнение таблицы.
Для Каждого Строка Из МассивСтруктур Цикл
СтрокаРезультат = Результат.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРезультат, Строка);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает количество элементов в пакете.
//
// Возвращаемое значение:
// Число - количество элементов в пакете.
//
Функция РазмерПакета()
Возврат 5000;
КонецФункции
Функция АдресСервера()
Возврат "1c.sms4b.ru";
КонецФункции
// Добавляет строку к имеющимся.
//
// Параметры:
// Ошибки - Строка - накопленное описание ошибок.
// ТекстОшибки - Строка - описание очередной ошибки.
//
Процедура ДобавитьОшибку(Ошибки, ТекстОшибки)
Ошибки = Ошибки + ?(Ошибки = "", "", "
|") + ТекстОшибки;
КонецПроцедуры
// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров.
//
// Возвращаемое значение:
@@ -236,23 +678,115 @@
//
Функция Разрешения() Экспорт
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
Протокол = "HTTPS";
Адрес = "sms4b.ru";
Порт = Неопределено;
Описание = НСтр("ru = 'Отправка SMS через ""SMS4B"".'");
Описание = НСтр("ru = 'Отправка SMS через ""SMS4B"" (старый).'");
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
Разрешения = Новый Массив;
Разрешения.Добавить(
МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание));
Протокол = "HTTPS";
Адрес = "https://1c.sms4b.ru";
Порт = Неопределено;
Описание = НСтр("ru = 'Отправка SMS через ""SMS4B"" (новый).'");
Разрешения = Новый Массив;
Разрешения.Добавить(
МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание));
Возврат Разрешения;
КонецФункции
Процедура ПриОпределенииНастроек(Настройки) Экспорт
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
Настройки.АдресОписанияУслугиВИнтернете = "https://sms4b.ru";
Настройки.ПриОпределенииСпособовАвторизации = Истина;
Настройки.ПриОпределенииПолейАвторизации = Истина;
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоКлючу" Тогда
Настройки.СтатусыДоставкиОднимЗапросом = Истина;
Иначе
Настройки.СтатусыДоставкиОднимЗапросом = Ложь;
КонецЕсли;
Настройки.ПриЗаполненииСпискаТекущихДел = Истина;
Настройки.ИнформацияПоСпособамАвторизации.Вставить("ПоЛогинуИПаролю", СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Для сервиса SMS4B рекомендуем использовать новый способ авторизации по API-токену.
|Авторизация по логину и паролю в будущем будет отключена.'")));
Настройки.ИнформацияПоСпособамАвторизации.Вставить("ПоКлючу", СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = '<a href=""https://www.sms4b.ru/office/api/token/"">Получить API-токен</a>'")));
КонецПроцедуры
Процедура ПриОпределенииСпособовАвторизации(СпособыАвторизации) Экспорт
СпособыАвторизации.Очистить();
СпособыАвторизации.Добавить("ПоКлючу", НСтр("ru = 'По API-токену (рекомендуется)'"));
СпособыАвторизации.Добавить("ПоЛогинуИПаролю", НСтр("ru = 'По логину и паролю'"));
КонецПроцедуры
Процедура ПриОпределенииПолейАвторизации(СпособыАвторизации) Экспорт
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Токен'"));
СпособыАвторизации.Вставить("ПоКлючу", ПоляАвторизации);
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Логин", НСтр("ru = 'Логин'"));
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Пароль'"));
СпособыАвторизации.Вставить("ПоЛогинуИПаролю", ПоляАвторизации);
КонецПроцедуры
// Параметры:
// ТекущиеДела - см. ТекущиеДелаСервер.ТекущиеДела.
//
Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт
ИмяДела = "ОтправкаSMS";
МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер");
Если МодульТекущиеДелаСервер.ДелоОтключено(ИмяДела) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
ТребуетсяНастройка = Не НастройкиОтправкиSMS.Свойство("СпособАвторизации") Или НастройкиОтправкиSMS.СпособАвторизации = "ПоЛогинуИПаролю";
Если Не ТребуетсяНастройка Тогда
Возврат;
КонецЕсли;
КоличествоПроблем = 0;
ПараметрыФормы = Новый Структура;
Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.НастройкаОтправкиSMS.ПолноеИмя());
Для Каждого Раздел Из Разделы Цикл
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = ИмяДела + СтрЗаменить(Раздел.ПолноеИмя(), ".", "");
Дело.ЕстьДела = Истина;
Дело.Представление = НСтр("ru = 'Требуется настройка отправки SMS'");
Дело.Количество = КоличествоПроблем;
Дело.Форма = "ОбщаяФорма.НастройкаОтправкиSMS";
Дело.ПараметрыФормы = ПараметрыФормы;
Дело.Важное = Истина;
Дело.Владелец = Раздел;
КонецЦикла;
КонецПроцедуры
@@ -23,6 +23,7 @@
Функция ОтправитьSMS(НомераПолучателей, Текст, ИмяОтправителя, Логин, Знач Пароль) Экспорт
Получатели = Новый Массив;
Для Каждого Элемент Из НомераПолучателей Цикл
НомерПолучателя = ФорматироватьНомер(Элемент);
Если Получатели.Найти(НомерПолучателя) = Неопределено Тогда
@@ -30,13 +31,7 @@
КонецЕсли;
КонецЦикла;
СпособАвторизации = СпособАвторизации();
Если СпособАвторизации = СпособАвторизацииПоЛогинуИПаролюМаркетолог() Тогда
Возврат ОтправитьSMSМаркетолог(Получатели, Текст, ИмяОтправителя, Логин, Пароль);
КонецЕсли;
Возврат ОтправитьSMSКоммуникатор(Получатели, Текст, ИмяОтправителя, Логин, Пароль);
КонецФункции
@@ -51,67 +46,29 @@
//
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт
Если СпособАвторизации() = СпособАвторизацииПоЛогинуИПаролюМаркетолог() Тогда
Возврат СтатусДоставкиМаркетолог(ИдентификаторСообщения, НастройкиОтправкиSMS);
КонецЕсли;
Результат = "Ошибка";
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("messageID", ИдентификаторСообщения);
ПараметрыЗапроса.Вставить("login", НастройкиОтправкиSMS.Логин);
Если ЗначениеЗаполнено(НастройкиОтправкиSMS.Логин) Тогда
ПараметрыЗапроса.Вставить("password", ОбщегоНазначения.КонтрольнаяСуммаСтрокой(НастройкиОтправкиSMS.Пароль));
Иначе
ПараметрыЗапроса.Вставить("password", "");
КонецЕсли;
HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос(АдресРесурсаКоммуникатор() + "GetMessageStatus", ПараметрыЗапроса, Истина);
РезультатЗапроса = ВыполнитьЗапрос(АдресСервераКоммуникатор(), HTTPЗапрос);
Если Не РезультатЗапроса.ЗапросВыполнен Тогда
Возврат Результат;
КонецЕсли;
ДокументDOM = ДокументDOM(РезультатЗапроса.ОтветСервера);
Разыменователь = ДокументDOM.СоздатьРазыменовательПИ();
НайденныйЭлемент = ДокументDOM.ВычислитьВыражениеXPath("/xmlns:ArrayOfDeliveryInfo/xmlns:DeliveryInfo/xmlns:DeliveryStatus",
ДокументDOM, Разыменователь).ПолучитьСледующий();
Если НайденныйЭлемент = Неопределено Тогда
Возврат Результат;
КонецЕсли;
Результат = СтатусДоставкиSMS(НайденныйЭлемент.ТекстовоеСодержимое);
Возврат Результат;
КонецФункции
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
Символ = Сред(Номер,Позиция,1);
Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СтатусДоставкиSMS(СтатусСтрокой)
СоответствиеСтатусов = Новый Соответствие;
// Коммуникатор
СоответствиеСтатусов.Вставить("Pending", "НеОтправлялось");
СоответствиеСтатусов.Вставить("Sending", "Отправляется");
СоответствиеСтатусов.Вставить("Sent", "Отправлено");
СоответствиеСтатусов.Вставить("NotSent", "НеОтправлено");
СоответствиеСтатусов.Вставить("Delivered", "Доставлено");
СоответствиеСтатусов.Вставить("NotDelivered", "НеДоставлено");
СоответствиеСтатусов.Вставить("TimedOut", "НеДоставлено");
СоответствиеСтатусов = Новый Соответствие;
// Маркетолог
СоответствиеСтатусов.Вставить(200, "Отправлено");
@@ -123,31 +80,12 @@
Результат = СоответствиеСтатусов[СтатусСтрокой];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
Функция ОписанияОшибок()
ОписанияОшибок = Новый Соответствие;
// Коммуникатор
ОписанияОшибок.Вставить("SYSTEM_FAILURE", НСтр("ru = 'Временная проблема на стороне МТС.'"));
ОписанияОшибок.Вставить("TOO_MANY_PARAMETERS", НСтр("ru = 'Превышено максимальное число параметров.'"));
ОписанияОшибок.Вставить("INCORRECT_PASSWORD", НСтр("ru = 'Предоставленные логин/пароль не верны.'"));
ОписанияОшибок.Вставить("MSID_FORMAT_ERROR", НСтр("ru = 'Формат номера неверный.'"));
ОписанияОшибок.Вставить("MESSAGE_FORMAT_ERROR", НСтр("ru = 'Ошибка в формате сообщения.'"));
ОписанияОшибок.Вставить("WRONG_ID", НСтр("ru = 'Передан неверный идентификатор.'"));
ОписанияОшибок.Вставить("MESSAGE_HANDLING_ERROR", НСтр("ru = 'Ошибка в обработке сообщения'"));
ОписанияОшибок.Вставить("NO_SUCH_SUBSCRIBER", НСтр("ru = 'Данный абонент не зарегистрирован в Услуге в учетной записи клиента (или еще не дал подтверждение).'"));
ОписанияОшибок.Вставить("TEST_LIMIT_EXCEEDED", НСтр("ru = 'Превышен лимит по количеству сообщений в тестовой эксплуатации.'"));
ОписанияОшибок.Вставить("TRUSTED_LIMIT_EXCEEDED", НСтр("ru = 'Превышен лимит по количеству сообщений для абонентов, которые были добавлены без подтверждения.'"));
ОписанияОшибок.Вставить("IP_NOT_ALLOWED", НСтр("ru = 'Доступ к сервису с данного IP невозможен (список допустимых IP-адресов можно указывается при подключении услуги).'"));
ОписанияОшибок.Вставить("MAX_LENGTH_EXCEEDED", НСтр("ru = 'Превышена максимальная длина сообщения (1000 символов).'"));
ОписанияОшибок.Вставить("OPERATION_NOT_ALLOWED", НСтр("ru = 'Пользователь услуги не имеет прав на выполнение данной операции.'"));
ОписанияОшибок.Вставить("EMPTY_MESSAGE_NOT_ALLOWED", НСтр("ru = 'Отправка пустых сообщений не допускается.'"));
ОписанияОшибок.Вставить("ACCOUNT_IS_BLOCKED", НСтр("ru = 'Учетная запись заблокирована, отправка сообщений не возможна.'"));
ОписанияОшибок.Вставить("OBJECT_ALREADY_EXISTS", НСтр("ru = 'Список рассылки с указанным названием уже существует в рамках компании.'"));
ОписанияОшибок.Вставить("MSID_IS_IN_BLACKLIST", НСтр("ru = 'Номер абонента находится в черном списке, отправка сообщений запрещена.'"));
ОписанияОшибок.Вставить("MSIDS_ARE_IN_BLACKLIST", НСтр("ru = 'Все указанные номера абонентов находятся в черном списке, отправка сообщений запрещена.'"));
ОписанияОшибок.Вставить("TIME_IS_IN_THE_PAST", НСтр("ru = 'Переданное время в прошлом.'"));
ОписанияОшибок = Новый Соответствие;
// Маркетолог
ОписанияОшибок.Вставить(806, НСтр("ru = 'Не указан получатель сообщения.'"));
@@ -161,17 +99,21 @@
ОписанияОшибок.Вставить(602, НСтр("ru = 'Отсутствует обязательный параметр в тексте запроса.'"));
Возврат ОписанияОшибок;
КонецФункции
Функция ОписаниеОшибкиПоКоду(Знач КодОшибки)
КодОшибки = СокрЛП(КодОшибки);
ОписанияОшибок = ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
Если ТекстСообщения = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Отказ выполнения операции.'") + Символы.ПС
+ КодОшибки;
ТекстСообщения = НСтр("ru = 'Отказ выполнения операции.'") + Символы.ПС + КодОшибки;
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров.
@@ -180,6 +122,7 @@
// Массив
//
Функция Разрешения() Экспорт
Протокол = "HTTPS";
Адрес = АдресСервераМаркетолог();
Порт = Неопределено;
@@ -192,6 +135,7 @@
МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание));
Возврат Разрешения;
КонецФункции
Функция ВыполнитьЗапрос(Знач АдресСервера, Знач HTTPЗапрос, Знач Пользователь = Неопределено, Знач Пароль = Неопределено)
@@ -246,11 +190,6 @@
Процедура ПриОпределенииПолейАвторизации(СпособыАвторизации) Экспорт
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Ключ API'"));
СпособыАвторизации.Вставить("ПоКлючу", ПоляАвторизации);
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Логин", НСтр("ru = 'Логин'"));
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Пароль'"));
@@ -259,63 +198,6 @@
КонецПроцедуры
Функция ДокументDOM(Строка)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Строка);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ЧтениеXML.Закрыть();
Возврат ДокументDOM;
КонецФункции
Функция ОтправитьSMSКоммуникатор(Получатели, Текст, ИмяОтправителя, Логин, Знач Пароль)
Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, "");
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("msids", Получатели);
ПараметрыЗапроса.Вставить("message", Текст);
ПараметрыЗапроса.Вставить("naming", ИмяОтправителя);
ПараметрыЗапроса.Вставить("login", Логин);
Если ЗначениеЗаполнено(Логин) Тогда
ПараметрыЗапроса.Вставить("password", ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Пароль));
Иначе
ПараметрыЗапроса.Вставить("password", "");
КонецЕсли;
HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос(АдресРесурсаКоммуникатор() + "SendMessages", ПараметрыЗапроса, Истина);
РезультатЗапроса = ВыполнитьЗапрос(АдресСервераКоммуникатор(), HTTPЗапрос);
Если Не РезультатЗапроса.ЗапросВыполнен Тогда
Результат.ОписаниеОшибки = ОписаниеОшибкиПоКоду(РезультатЗапроса.ОтветСервера);
Возврат Результат;
КонецЕсли;
ДокументDOM = ДокументDOM(РезультатЗапроса.ОтветСервера);
Разыменователь = ДокументDOM.СоздатьРазыменовательПИ();
ОтправленныеСообщения = ДокументDOM.ВычислитьВыражениеXPath("/xmlns:ArrayOfSendMessageIDs/xmlns:SendMessageIDs",
ДокументDOM, Разыменователь);
Сообщение = ОтправленныеСообщения.ПолучитьСледующий();
Пока Сообщение <> Неопределено Цикл
НомерПолучателя = ДокументDOM.ВычислитьВыражениеXPath("xmlns:Msid", Сообщение, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
ИдентификаторСообщения = ДокументDOM.ВычислитьВыражениеXPath("xmlns:MessageID", Сообщение, Разыменователь).ПолучитьСледующий().ТекстовоеСодержимое;
Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",
"+" + НомерПолучателя, Формат(ИдентификаторСообщения, "ЧГ=")));
Сообщение = ОтправленныеСообщения.ПолучитьСледующий();
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОтправитьSMSМаркетолог(Знач Получатели, Знач Текст, Знач ИмяОтправителя, Знач Логин, Знач Пароль)
ТекстЗапроса = ТекстЗапросаМаркетолог(Получатели, Текст, ИмяОтправителя);
@@ -464,18 +346,6 @@
КонецФункции
Функция АдресСервераКоммуникатор()
Возврат "api.mcommunicator.ru";
КонецФункции
Функция АдресРесурсаКоммуникатор()
Возврат "/m2m/m2m_api.asmx/";
КонецФункции
Функция АдресСервераМаркетолог()
Возврат "omnichannel.mts.ru";
@@ -492,12 +362,6 @@
КонецФункции
Функция СпособАвторизации()
Возврат СпособАвторизацииПоЛогинуИПаролюМаркетолог();
КонецФункции
Функция СпособАвторизацииПоЛогинуИПаролюМаркетолог()
Возврат "ПоЛогинуИПаролюМаркетолог";
@@ -992,6 +992,8 @@
И Не КомандаВидаКоманднаяПанель Тогда
КнопкаФормы = Элементы.Вставить(Команда.ИмяВФорме, Тип("КнопкаФормы"), СведенияОПодменюКоманды.Подменю.Родитель, ГруппаФормы.Родитель);
ИмяКорневогоЭлемента = Команда.ИмяВФорме;
КнопкаФормы.ВажностьПриОтображении = ?(ТипЗнч(ГруппаФормы.Родитель) = Тип("ГруппаФормы"),
ГруппаФормы.Родитель.ВажностьПриОтображении, КнопкаФормы.ВажностьПриОтображении);
Иначе
КнопкаФормы = Элементы.Добавить(Команда.ИмяВФорме, Тип("КнопкаФормы"), ГруппаФормы);
КонецЕсли;
@@ -262,7 +262,10 @@
// * РасширенныйПодбор - Булево - если Истина, то доступен просмотр Групп пользователей.
// * ПараметрыРасширеннойФормыПодбора - Строка - адрес временного хранилища со структурой:
// ** ВыбранныеПользователи - Массив из СправочникСсылка.Пользователи - пользователи,
// которые должны отображаться в подобранных.
// которые должны отображаться в ранее выбранных
// для возможности их удобного удаления из выбранных.
// - Неопределено - без отображения ранее выбранных и соответственно,
// без отображения добавленных, удаленных и неизмененных.
// ** ЗаголовокФормыПодбора - Строка - если заполнен, переопределяет заголовок формы подбора.
// ** ЗаголовокКнопкиЗавершенияПодбора - Строка - если заполнен, переопределяет заголовок кнопки.
//
@@ -402,7 +402,10 @@
// Возвращаемое значение:
// Структура:
// * ВыбранныеПользователи - Массив из СправочникСсылка.Пользователи - пользователи,
// которые должны отображаться в подобранных.
// которые должны отображаться в ранее выбранных
// для возможности их удобного удаления из выбранных.
// - Неопределено - без отображения ранее выбранных и соответственно,
// без отображения добавленных, удаленных и неизмененных.
// * ЗаголовокФормыПодбора - Строка - если заполнен, переопределяет заголовок формы подбора.
// * ЗаголовокКнопкиЗавершенияПодбора - Строка - если заполнен, переопределяет заголовок кнопки.
//
@@ -7803,6 +7806,8 @@
ПараметрыРазмещения.ПрефиксГрупп = "Группы";
ПараметрыРазмещения.КоманднаяПанель = Элементы.Группы.КоманднаяПанель;
МодульПодключаемыеКоманды.ПриСозданииНаСервере(Форма, ПараметрыРазмещения);
ЗаполнитьСкрытыеЭлементы(Форма);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
@@ -7842,6 +7847,11 @@
Элементы.СписокПользователиИнформационнойБазы.Видимость = Ложь;
КонецЕсли;
Если Не ХранимыеПараметры.РежимВыбора Тогда
Элементы.Группы.РежимВыбора = Ложь;
Элементы.Список.РежимВыбора = Ложь;
КонецЕсли;
Элементы.ФормаВставитьИзБуфераОбмена.Видимость = ХранимыеПараметры.РасширенныйПодбор;
Элементы.ПоказыватьЭлементыСписков.Видимость = ХранимыеПараметры.РасширенныйПодбор;
@@ -7889,10 +7899,9 @@
Если ХранимыеПараметры.РасширенныйПодбор Тогда
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(Форма, "РасширенныйПодбор");
Элементы.Список.ОтображениеГиперссылокЯчеек = ОтображениеГиперссылокЯчеек.НеОтображать;
Элементы.Группы.РежимВыбора = Ложь;
Элементы.Список.РежимВыбора = Ложь;
Иначе
Элементы.Группы.РежимВыбора = ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85();
Элементы.Список.РежимВыбора = Истина;
Если ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
ВыборГрупп = ХранимыеПараметры.ВыборГрупп И ХранимыеПараметры.ИспользоватьГруппы;
Если ВыборГрупп
@@ -7906,10 +7915,12 @@
Иначе
Элементы.ФормаВыбратьВыделенные.РасширеннаяПодсказка.Заголовок =
?(ВыборГрупп,
НСтр("ru = 'Выбрать выделенные группы и пользователи'"),
НСтр("ru = 'Выбрать выделенные группы и выделенных пользователей'"),
НСтр("ru = 'Выбрать выделенных пользователей'"));
КонецЕсли;
КонецЕсли;
Иначе
Элементы.Группы.РежимВыбора = Ложь;
КонецЕсли;
КонецЕсли;
@@ -7936,14 +7947,6 @@
"СписокСкопировать", "ПоложениеВКоманднойПанели", ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели);
КонецЕсли;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
ЭлементГруппыСоздать = Элементы.Найти("ГруппыСоздать");
Если ЭлементГруппыСоздать <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюСоздать", "Заголовок", ЭлементГруппыСоздать.Заголовок);
КонецЕсли;
КонецЕсли;
ОписаниеОбъекта = Новый Структура;
ОписаниеОбъекта.Вставить("Ссылка", Справочники.Пользователи.ПустаяСсылка());
ОписаниеОбъекта.Вставить("ИдентификаторПользователяИБ",
@@ -7954,7 +7957,8 @@
Элементы.СписокУстановитьПароль.Видимость = Ложь;
КонецЕсли;
Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто()
Или ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
Форма.ТолькоПросмотр = Истина;
Элементы.Список.ТолькоПросмотр = Истина;
Элементы.Группы.ТолькоПросмотр = Истина;
@@ -7966,6 +7970,8 @@
ОграничитьИспользованиеЗаполняемогоПоляДинамическогоСписка(Список, "НомерКартинки");
НастроитьКнопкиПриВыбореИПодборе(Форма);
КонецПроцедуры
// Для формы списка справочников Пользователи и ВнешниеПользователи.
@@ -8013,6 +8019,121 @@
КонецПроцедуры
// Для формы списка справочников Пользователи и ВнешниеПользователи.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура ЗаполнитьСкрытыеЭлементы(Форма)
СкрываемыеЭлементы =
"ГруппыКонтекстноеМенюСоздатьНаОсновании
|ГруппыСоздатьНаОсновании
|СписокКонтекстноеМенюСоздатьНаОсновании
|СписокСоздатьНаОсновании";
ИменаЭлементов = СтрРазделить(СкрываемыеЭлементы, Символы.ПС);
СкрытыеЭлементы = Новый Массив;
Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл
НайденныйЭлемент = Форма.Элементы.Найти(ИмяЭлемента);
Если НайденныйЭлемент <> Неопределено
И Не НайденныйЭлемент.Видимость Тогда
СкрытыеЭлементы.Добавить(ИмяЭлемента);
КонецЕсли;
КонецЦикла;
Форма.ХранимыеПараметры.СкрытыеЭлементы = СтрСоединить(СкрытыеЭлементы, Символы.ПС);
КонецПроцедуры
// Для формы списка справочников Пользователи и ВнешниеПользователи.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура НастроитьКнопкиПриВыбореИПодборе(Форма)
// При обычном выборе пользователей (без выбора групп) используется стандартная кнопка "Выбрать".
// При обычном выборе/подборе и пользователей, и групп пользователей
// - в интерфейсе Такси используются стандартные кнопки выбора, но только в командных панелях списков, так как их две;
// - в интерфейсе 8.5 используется одна кнопка "Выбрать", так как есть флажки выделения строк,
// которые однозначно отделяют выделенные строки от активной строки.
// Кроме того, при обычном подборе добавляется кнопка "Выбрать и закрыть".
// При расширенном подборе:
// - используется нестандартная кнопка "Завершить подбор",
// - команды текущей строки и выделенных строк переносятся в дополнительное подменю,
// кроме своих команд включения/исключения из выбранных.
Элементы = Форма.Элементы;
ХранимыеПараметры = Форма.ХранимыеПараметры;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"СписокКонтекстноеМенюВыбрать", "ВажностьПриОтображении", ВажностьПриОтображении.ОченьВысокая);
Если Не ХранимыеПараметры.ВыборГрупп Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыВыбрать", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюВыбрать", "Видимость", Ложь);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюВыбрать", "ВажностьПриОтображении", ВажностьПриОтображении.ОченьВысокая);
КонецЕсли;
Если Не ХранимыеПараметры.РасширенныйПодбор Тогда
ВыборГрупп = ХранимыеПараметры.ВыборГрупп И ХранимыеПараметры.ИспользоватьГруппы;
Если ВыборГрупп
Или Не ХранимыеПараметры.ЗакрыватьПриВыборе Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыВыбрать", "Видимость", Ложь);
Если ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
ИначеЕсли ВыборГрупп Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
Элементы.ГруппыВыбратьТакси.Видимость = Истина;
Элементы.СписокВыбратьТакси.Видимость = Истина;
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) <> Тип("КнопкаФормы") Тогда
Продолжить;
КонецЕсли;
Если СтрНачинаетсяС(Элемент.Имя, Элементы.Группы.Имя)
И Элемент.Имя <> "ГруппыВыбратьТакси"
И Элемент.Имя <> "ГруппыВключитьВВыбранные"
И Элемент.Имя <> "ГруппыИсключитьИзВыбранных"
И Элемент.Имя <> "ГруппыПанельДействийВыделенныхСтрокКнопкаЯрлыка"
И Элемент.Имя <> "ГруппыПанельДействийВыделенныхСтрокСнятьВыделение"
И Элемент.Имя <> "ГруппыСоздать"
Или СтрНачинаетсяС(Элемент.Имя, Элементы.Список.Имя)
И Элемент.Имя <> "СписокВыбратьТакси"
И Элемент.Имя <> "СписокВключитьВВыбранные"
И Элемент.Имя <> "СписокИсключитьИзВыбранных"
И Элемент.Имя <> "СписокПоказатьПользователейНижестоящихГрупп"
И Элемент.Имя <> "СписокПоказатьНедействительныхПользователей"
И Элемент.Имя <> "СписокСоздать"
И Элемент.Имя <> "СписокПанельДействийВыделенныхСтрокКнопкаЯрлыка"
И Элемент.Имя <> "СписокПанельДействийВыделенныхСтрокСнятьВыделение" Тогда
Элемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Для формы списка справочников Пользователи и ВнешниеПользователи.
//
// Параметры:
@@ -8027,6 +8148,7 @@
// Загрузка списка выбранных пользователей.
ПараметрыПодбора = НовыеПараметрыРасширеннойФормыПодбора();
ПараметрыПодбора.ВыбранныеПользователи = Неопределено;
Если ЗначениеЗаполнено(Параметры.ПараметрыРасширеннойФормыПодбора) Тогда
УказанныеПараметры = ПолучитьИзВременногоХранилища(Параметры.ПараметрыРасширеннойФормыПодбора);
Если ТипЗнч(УказанныеПараметры) = Тип("Структура") Тогда
@@ -8038,6 +8160,10 @@
Если ТипЗнч(ПараметрыПодбора.ВыбранныеПользователи) = Тип("Массив") Тогда
ВыбранныеПользователи = ПараметрыПодбора.ВыбранныеПользователи;
Иначе
Элементы.ПоказыватьЭлементыСписков.СписокВыбора.Удалить(4);
Элементы.ПоказыватьЭлементыСписков.СписокВыбора.Удалить(3);
Элементы.ПоказыватьЭлементыСписков.СписокВыбора.Удалить(2);
КонецЕсли;
// Установка параметров расширенной формы подбора.
@@ -8161,6 +8287,10 @@
|СписокКонтекстноеМенюУстановитьПароль<СписокКонтекстноеМенюИзменить
|СписокКонтекстноеМенюНазначитьГруппы");
Если ХранимыеПараметры.СкрытьКомандыПриВыбореПодборе Тогда
ПользователиСлужебныйКлиентСервер.СкрытьКомандыПриВыбореПодборе(Форма);
КонецЕсли;
КонецПроцедуры
@@ -8297,6 +8427,10 @@
СписокВыбора[1].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выбранные: %1'"), Формат(КоличествоВыбранных, "ЧН=0; ЧГ="));
Если СписокВыбора.Количество() < 3 Тогда
Возврат;
КонецЕсли;
СписокВыбора[2].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Добавленные: %1'"), Формат(Добавленные.Количество(), "ЧН=0; ЧГ="));
@@ -398,86 +398,29 @@
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура НастроитьКнопкиПриВыбореИПодборе(Форма) Экспорт
// При обычном выборе только пользователей используется стандартная кнопка "Выбрать".
// При обычном выборе/подборе и пользователей, и групп пользователей
// - в интерфейсе Такси используются стандартные кнопки выбора, но только в командных панелях списков, так как их две;
// - в интерфейсе 8.5 используется одна кнопка "Выбрать", так как есть флажки выделения строк,
// которые однозначно отделяют выделенные строки от активной строки.
// Кроме того, при обычном подборе добавляется кнопка "Выбрать и закрыть".
// При расширенном подборе:
// - используется нестандартная кнопка "Завершить подбор",
// - команды текущей строки и выделенных строк переносятся в дополнительное подменю,
// кроме своих команд включения/исключения из выбранных.
Процедура ОтключитьВидимостьСкрытыхЭлементов(Форма) Экспорт
Элементы = Форма.Элементы;
ХранимыеПараметры = Форма.ХранимыеПараметры;
ИменаЭлементов = СтрРазделить(Форма.ХранимыеПараметры.СкрытыеЭлементы, Символы.ПС);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"СписокКонтекстноеМенюВыбрать", "ВажностьПриОтображении", ВажностьПриОтображении.ОченьВысокая);
Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл
НайденныйЭлемент = Элементы.Найти(ИмяЭлемента);
Если Не ХранимыеПараметры.ВыборГрупп Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыВыбрать", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюВыбрать", "Видимость", Ложь);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюВыбрать", "ВажностьПриОтображении", ВажностьПриОтображении.ОченьВысокая);
КонецЕсли;
Если НайденныйЭлемент <> Неопределено
И НайденныйЭлемент.Видимость Тогда
Если Не ХранимыеПараметры.РасширенныйПодбор Тогда
ВыборГрупп = ХранимыеПараметры.ВыборГрупп И ХранимыеПараметры.ИспользоватьГруппы;
Если ВыборГрупп
Или Не ХранимыеПараметры.ЗакрыватьПриВыборе Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыВыбрать", "Видимость", Ложь);
Если ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
ИначеЕсли ВыборГрупп Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
Элементы.ГруппыВыбратьТакси.Видимость = Истина;
Элементы.СписокВыбратьТакси.Видимость = Истина;
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ФормаВыбрать", "Видимость", Ложь);
Для Каждого Элемент Из Элементы Цикл
Если ТипЗнч(Элемент) <> Тип("КнопкаФормы") Тогда
Продолжить;
КонецЕсли;
Если СтрНачинаетсяС(Элемент.Имя, Элементы.Группы.Имя)
И Элемент.Имя <> "ГруппыВыбратьТакси"
И Элемент.Имя <> "ГруппыВключитьВВыбранные"
И Элемент.Имя <> "ГруппыИсключитьИзВыбранных"
И Элемент.Имя <> "ГруппыПанельДействийВыделенныхСтрокКнопкаЯрлыка"
И Элемент.Имя <> "ГруппыПанельДействийВыделенныхСтрокСнятьВыделение"
И Элемент.Имя <> "ГруппыСоздать"
Или СтрНачинаетсяС(Элемент.Имя, Элементы.Список.Имя)
И Элемент.Имя <> "СписокВыбратьТакси"
И Элемент.Имя <> "СписокВключитьВВыбранные"
И Элемент.Имя <> "СписокИсключитьИзВыбранных"
И Элемент.Имя <> "СписокПоказатьПользователейНижестоящихГрупп"
И Элемент.Имя <> "СписокПоказатьНедействительныхПользователей"
И Элемент.Имя <> "СписокСоздать"
И Элемент.Имя <> "СписокПанельДействийВыделенныхСтрокКнопкаЯрлыка"
И Элемент.Имя <> "СписокПанельДействийВыделенныхСтрокСнятьВыделение" Тогда
Элемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
НайденныйЭлемент.Видимость = Ложь;
КонецЕсли;
КонецЦикла;
Если Не ОбщегоНазначенияКлиентСервер.ЭтоВариантИнтерфейса85() Тогда
ЭлементГруппыСоздать = Элементы.Найти("ГруппыСоздать");
Если ЭлементГруппыСоздать <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппыКонтекстноеМенюСоздать", "Заголовок", ЭлементГруппыСоздать.Заголовок);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Для формы списка справочников Пользователи и ВнешниеПользователи.
@@ -262,4 +262,95 @@
КонецФункции
#Область ПроцедурыИФункцияДляРаботыФормСправочников
// Для формы списка справочников Пользователи и ВнешниеПользователи.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура СкрытьКомандыПриВыбореПодборе(Форма) Экспорт
ИменаКнопокДляВыбораПодбора = СтрРазделить(ИменаКнопокДляВыбораПодбора(), Символы.ПС);
ТипКнопкаФормы = Тип("КнопкаФормы");
Для Каждого ЭлементФормы Из Форма.Элементы Цикл
Если ТипЗнч(ЭлементФормы) = ТипКнопкаФормы
И ЭлементФормы.Видимость
И ИменаКнопокДляВыбораПодбора.Найти(ЭлементФормы.Имя) = Неопределено Тогда
ЭлементФормы.Видимость = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Для процедуры СкрытьКомандыПриВыбореПодборе.
Функция ИменаКнопокДляВыбораПодбора()
Возврат
"ГруппыКонтекстноеМенюВыбрать
|ГруппыКонтекстноеМенюПоискПоТекущемуЗначению
|ГруппыКонтекстноеМенюНайтиВезде
|ГруппыКонтекстноеМенюОтменитьПоиск
|ГруппыКонтекстноеМенюВыделитьВсе
|ГруппыВыбрать
|ГруппыИерархическийСписок
|ГруппыСписок
|ГруппыДерево
|ГруппыНастройкаСписка
|ГруппыЗагрузитьНастройкиДинамическогоСписка
|ГруппыСохранитьНастройкиДинамическогоСписка
|ГруппыСтандартныеНастройкиДинамическогоСписка
|ГруппыОчиститьОформлениеОтметокТаблицы
|ГруппыОбновить
|ГруппыВыделитьВсе
|ГруппыВыбратьТакси
|ГруппыВключитьВВыбранные
|ГруппыИсключитьИзВыбранных
|ГруппыПоискПоТекущемуЗначению
|ГруппыНайтиВезде
|ГруппыНайти
|ГруппыИсторияПоиска
|ГруппыОтменитьПоиск
|СписокКонтекстноеМенюВыбрать
|СписокКонтекстноеМенюНайтиВезде
|СписокКонтекстноеМенюОтменитьПоиск
|СписокКонтекстноеМенюВыделитьВсе
|СписокВыбрать
|СписокНастройкаСписка
|СписокЗагрузитьНастройкиДинамическогоСписка
|СписокСохранитьНастройкиДинамическогоСписка
|СписокСтандартныеНастройкиДинамическогоСписка
|СписокОчиститьОформлениеОтметокТаблицы
|СписокОбновить
|СписокВыделитьВсе
|СписокВыбратьТакси
|СписокВключитьВВыбранные
|СписокИсключитьИзВыбранных
|СписокПоказатьПользователейНижестоящихГрупп
|СписокПоказатьНедействительныхПользователей
|СписокПоискПоТекущемуЗначению
|СписокНайтиВезде
|СписокНайти
|СписокИсторияПоиска
|СписокОтменитьПоиск
|СписокТекущиеДанныеКонтактнаяИнформацияКонтекстноеМенюПоказать
|ФормаВыбрать
|ФормаНастройкаСписка
|ФормаЗагрузитьНастройкиДинамическогоСписка
|ФормаСохранитьНастройкиДинамическогоСписка
|ФормаСтандартныеНастройкиДинамическогоСписка
|ФормаОбновить
|ФормаПоискПоТекущемуЗначению
|ФормаНайти
|ФормаОтменитьПоиск
|ФормаВыбратьИЗакрыть
|ФормаВыбратьВыделенные
|ФормаИзменитьФорму
|ФормаСправка";
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -2534,11 +2534,12 @@
АдресПоПолям.ТипАдреса = АдресИзJSON.AddressType;
АдресПоПолям.Страна = АдресИзJSON.Country;
АдресПоПолям.КодСтраны = КодыСтраны(АдресИзJSON);
НаименованиеРегиона = СокрЛП(АдресИзJSON["area"] + " " +АдресИзJSON["areaType"]);
НазваниеОсновнойСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(), "Наименование");
ЭтоНациональныйАдрес = ?(СтрСравнить(АдресИзJSON.Country, НазваниеОсновнойСтраны) = 0, Истина, Ложь);
АдресПоПолям.КодРегиона = ?(ЭтоНациональныйАдрес, КодРегиона(НаименованиеРегиона), "");
Если ЭтоНациональныйАдрес Тогда
АдресПоПолям.КодРегиона = КодРегиона(АдресИзJSON.areaValue, АдресИзJSON.area, АдресИзJSON.areaType);
КонецЕсли;
ИдентификаторАдресногоОбъекта = "";
МаксимальныйУровеньИдентификатора = 0;
@@ -2577,7 +2578,7 @@
// Коды мун. уровней
АдресПоПолям.КодМуниципальногоРайона = КодМуниципальногоРайона(АдресИзJSON.munDistrictType, АдресИзJSON.oktmo,
ЭтоГородФедеральногоЗначения(НаименованиеРегиона));
ЭтоГородФедеральногоЗначения(СокрЛП(АдресИзJSON.area + " " + АдресИзJSON.areaType)));
АдресПоПолям.КодПоселения = КодПоселения(АдресИзJSON.settlementType);
Если Параметры.КодыАдреса Тогда
@@ -3080,21 +3081,32 @@
// Возвращает код региона по его полному наименованию.
//
// Параметры:
// НаименованиеРегиона - Строка - полное наименование региона с сокращением.
// ПолноеНаименование - Строка - полное официальное наименование региона.
// НаименованиеАдресногоЭлемента - Строка - наименование адресного элемента региона, например "Тверская".
// ТипАдресногоЭлемента - Строка - вид адресного элемента региона.
//
// Возвращаемое значение:
// Строка - код региона из двух цифр. Пустая строка, если наименование определить не удалось.
// Неопределено - если нет ни одной подсистемы адресного классификатора.
// Строка - код региона из двух цифр; пустая строка, если код региона по наименованию определить не удалось.
// Неопределено - если нет подсистемы адресного классификатора.
//
Функция КодРегиона(Знач ПолноеНаименование) Экспорт
Функция КодРегиона(Знач ПолноеНаименование, НаименованиеАдресногоЭлемента = "", ТипАдресногоЭлемента = "") Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование);
Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН=");
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Неопределено;
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование);
Если Не ЗначениеЗаполнено(Код) И ЗначениеЗаполнено(НаименованиеАдресногоЭлемента) Тогда
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеАдресногоЭлемента);
Если Не ЗначениеЗаполнено(Код) И ЗначениеЗаполнено(ТипАдресногоЭлемента) Тогда
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеАдресногоЭлемента + " " + ТипАдресногоЭлемента);
КонецЕсли;
КонецЕсли;
Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН=");
КонецФункции
@@ -4783,7 +4783,7 @@
Исключение
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Работа с файлами.Ошибка установки времени изменения'", ОбщегоНазначения.КодОсновногоЯзыка()),
"Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
@@ -152,6 +152,69 @@
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьВФоне";
ИсключениеПроверки.ФрагментСодержания = "Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения)";
Методы = Новый Соответствие;
Методы.Вставить("ОбновитьКэшСертификатов");
Методы.Вставить("АутентификацияПоСертификату", Истина);
Методы.Вставить("АутентификацияПоЛогину", Истина);
Методы.Вставить("Зашифровать", Истина);
Методы.Вставить("СертификатыРасшифрования", Истина);
Методы.Вставить("ХешированиеДанных", Истина);
Методы.Вставить("СоздатьТранзакцию", Истина);
Методы.Вставить("Расшифровать", Истина);
Методы.Вставить("Подписать", Истина);
Методы.Вставить("ПодписатьПакет", Истина);
Методы.Вставить("УсовершенствоватьПодпись", Истина);
Методы.Вставить("ВалидацияПинКодаСертификата", Истина);
Методы.Вставить("ПолучитьДанныеСертификата", Истина);
Методы.Вставить("ПолучитьСвойстваСертификата", Истина);
Методы.Вставить("ОбновитьДанныеСертификатов", Истина);
Методы.Вставить("СоздатьЗапросНаСертификат", Истина);
Методы.Вставить("СписокЗапросовНаСертификат", Истина);
Методы.Вставить("ПолучитьЗапросНаСертификат", Истина);
Методы.Вставить("УдалитьЗапросНаСертификат", Истина);
Методы.Вставить("УстановитьСертификат", Истина);
Методы.Вставить("НазначитьОсновнымСертификат", Истина);
Методы.Вставить("СменитьПинКодСертификата", Истина);
Методы.Вставить("ПроверитьСертификат", Истина);
Методы.Вставить("ПолучитьСведенияОПодписантах", Истина);
Методы.Вставить("ПроверитьПодпись", Истина);
Методы.Вставить("ОбновитьПолитикуПользователя", Истина);
Методы.Вставить("ПолучитьОписаниеСервиса", Истина);
Методы.Вставить("ВыполнитьЗапросКСервису", Истина);
Методы.Вставить("НайтиСертификат", Истина);
Методы.Вставить("СостояниеУчетнойЗаписи", Истина);
Методы.Вставить("ПодготовитьТранзакцию", Истина);
Методы.Вставить("ПолучитьЗаписиАудита", Истина);
Методы.Вставить("ЗагрузитьДокумент", Истина);
Методы.Вставить("ЗагрузитьПакетДокументов", Истина);
Методы.Вставить("ИнформацияОДокументеПоИдентификатору", Истина);
Методы.Вставить("ИнформацияОДокументеПоХешу", Истина);
Методы.Вставить("ПолучитьОбработанныйДокумент", Истина);
Методы.Вставить("ИзменитьИнформациюОДокументе", Истина);
Методы.Вставить("ПривязатьДокумент", Истина);
Методы.Вставить("ПолучитьИнформациюДокументаКонвертации", Истина);
Методы.Вставить("УдалитьДокумент", Истина);
Методы.Вставить("СоздатьЗакрытыйКлюч", Истина);
Методы.Вставить("УстановитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПолучитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПодписатьАсинхронно", Истина);
Методы.Вставить("ПолучитьОбработанныеДокументы", Истина);
Методы.Вставить("ЗашифроватьАсинхронно", Истина);
Методы.Вставить("РасшифроватьАсинхронно", Истина);
Методы.Вставить("СертификатыРасшифрованияАсинхронно", Истина);
Методы.Вставить("СведенияОбОперации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.СервисКриптографииDSSСлужебный", Методы);
Методы = Новый Соответствие;
Методы.Вставить("ОбменССерверомАктивироватьУчетнуюЗапись", Истина);
Методы.Вставить("ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписи", Истина);
Методы.Вставить("ОбменССерверомОтправитьКодАктивацииКлюча", Истина);
Методы.Вставить("ПолучитьТикетИнтернетПоддержкиПользователя", Истина);
Методы.Вставить("ОтправитьЗаявлениеНаПортал", Истина);
Методы.Вставить("ОбменССерверомСписокСерверовОблачнойПодписи", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("Обработка.УправлениеПодключениемDSS", Методы);
КонецПроцедуры
#КонецОбласти
@@ -7488,8 +7551,6 @@
Методы.Вставить("СертификатыРасшифрованияАсинхронно", Истина);
Методы.Вставить("СведенияОбОперации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
КонецПроцедуры
@@ -742,7 +742,7 @@
|Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами:
|ENTERPRISE %2 /C %3 /UC %4'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СоединенияИБКлиентСервер.ТекстДляАдминистратора(),
СтрокаПутиКИнформационнойБазе, ИмяПараметра, НСтр("ru = '<код разрешения>'"));
СтрокаПутиКИнформационнойБазе, ИмяПараметра, "КодРазрешения");
КонецЕсли;
Возврат ТекстСообщения;
@@ -404,22 +404,24 @@
Возврат;
КонецЕсли;
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ВремяОкончанияБлокировки = ТекущийРежим.Конец;
// ИнтервалЗакрытьСЗапросом и ИнтервалПрекратить имеют отрицательное значение,
// поэтому, когда идет сравнение этих параметров с разницей (ВремяНачалаБлокировки - ТекущийМомент),
// то используется "<=", так как данная разница постоянно уменьшается.
ИнтервалПредупреждения = ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей;
ИнтервалЗакрытьСЗапросом = ИнтервалПредупреждения / 3;
ИнтервалПрекратитьВМоделиСервиса = 60; // За минуту до начала блокировки.
ИнтервалПрекратить = 0; // В момент установки блокировки.
ТекущийМомент = ТекущийРежим.ТекущаяДатаСеанса;
ВремяОкончанияБлокировки = ТекущийРежим.Конец;
Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда
Возврат;
КонецЕсли;
РазделениеВключено = ОбщегоНазначенияКлиент.РазделениеВключено();
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ИнтервалПредупреждения = ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей;
ИнтервалПрекратитьВМоделиСервиса = 60; // За минуту до начала блокировки.
ИнтервалПрекратить = 0; // В момент установки блокировки.
ИнтервалЗакрытьСЗапросом = 60 + ?(РазделениеВключено, ИнтервалПрекратитьВМоделиСервиса, ИнтервалПрекратить);
ИнтервалПредупреждения = ?(ИнтервалПредупреждения - 60 > ИнтервалЗакрытьСЗапросом,
ИнтервалПредупреждения, ИнтервалЗакрытьСЗапросом + 60);
ДатаВремениНачалаБлокировки = Формат(ВремяНачалаБлокировки, "ДЛФ=DD");
ВремяВремениНачалаБлокировки = Формат(ВремяНачалаБлокировки, "ДЛФ=T");
@@ -428,7 +430,6 @@
|%3'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДатаВремениНачалаБлокировки, ВремяВремениНачалаБлокировки, ТекстСообщения);
РазделениеВключено = ОбщегоНазначенияКлиент.РазделениеВключено();
Если Не РазделениеВключено
И (Не ЗначениеЗаполнено(ВремяНачалаБлокировки) Или ВремяНачалаБлокировки - ТекущийМомент < ИнтервалПрекратить) Тогда
@@ -677,18 +678,21 @@
ПараметрыИнформирования.ОповещениеПоказано = Истина;
КонецЕсли;
Если Не ПараметрыИнформирования.ПоказатьПредупреждениеИлиВопрос Тогда
Если ПараметрыИнформирования.ПредупреждениеПоказано Тогда
Возврат;
КонецЕсли;
ПоказатьПредупреждение(, ТекстСообщения, 30);
ПараметрыИнформирования.ПредупреждениеПоказано = Истина;
КонецПроцедуры
// Возвращаемое значение:
// Структура:
// * ОповещениеПоказано - Булево
// * ПоказатьПредупреждениеИлиВопрос - Булево
// * ПредупреждениеПоказано - Булево
// * ВопросПоказан - Булево
//
Функция ПараметрыИнформирования(ВремяНачалаБлокировки)
@@ -697,20 +701,12 @@
Если Свойства = Неопределено Или Свойства.ВремяНачалаБлокировки <> ВремяНачалаБлокировки Тогда
Свойства = Новый Структура;
Свойства.Вставить("ОповещениеПоказано", Ложь);
Свойства.Вставить("ПоказатьПредупреждениеИлиВопрос", Ложь);
Свойства.Вставить("ДатаПоследнегоПредупрежденияИлиВопроса", '00010101');
Свойства.Вставить("ПредупреждениеПоказано", Ложь);
Свойства.Вставить("ВопросПоказан", Ложь);
Свойства.Вставить("ВремяНачалаБлокировки", ВремяНачалаБлокировки);
ПараметрыПриложения.Вставить(ИмяПараметра, Свойства);
КонецЕсли;
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
Если Свойства.ДатаПоследнегоПредупрежденияИлиВопроса + 50 < ДатаСеанса Тогда
Свойства.ДатаПоследнегоПредупрежденияИлиВопроса = ДатаСеанса;
Свойства.ПоказатьПредупреждениеИлиВопрос = Истина;
Иначе
Свойства.ПоказатьПредупреждениеИлиВопрос = Ложь;
КонецЕсли;
Возврат Свойства;
КонецФункции
@@ -739,7 +735,7 @@
ПараметрыИнформирования.ОповещениеПоказано = Истина;
КонецЕсли;
Если Не ПараметрыИнформирования.ПоказатьПредупреждениеИлиВопрос Тогда
Если ПараметрыИнформирования.ВопросПоказан Тогда
Возврат;
КонецЕсли;
@@ -749,6 +745,8 @@
ОписаниеОповещения = Новый ОписаниеОповещения("ЗадатьВопросПриЗавершенииРаботыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да);
ПараметрыИнформирования.ВопросПоказан = Истина;
КонецПроцедуры
Процедура ЗадатьВопросПриЗавершенииРаботыЗавершение(Ответ, ДополнительныеПараметры) Экспорт
@@ -812,6 +812,8 @@
Настройки = Новый Структура;
Настройки.Вставить("ОписаниеОбработчиков", ОписаниеОбработчиков);
Настройки.Вставить("ИсключенияПроверки", ИсключенияПроверки);
Настройки.Вставить("ОшибкаКогдаУказанныйМетодНеВызывается", Истина);
Настройки.Вставить("ИсключенияКогдаУказанныйМетодНеВызывается", Новый Соответствие);
ИнтеграцияПодсистемБСП.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
Попытка
@@ -750,7 +750,7 @@
// вырезаем скрипты
Позиция = СтрНайти(Текст, "<script");
Пока Позиция > 0 Цикл
ПозицияЗакрывающегоТега = СтрНайти(Текст, "</script>");
ПозицияЗакрывающегоТега = СтрНайти(Текст, "</script>", , Позиция);
Если ПозицияЗакрывающегоТега = 0 Тогда
// Не найден закрывающий тег - вырезаем оставшийся текст.
ПозицияЗакрывающегоТега = СтрДлина(Текст);
@@ -763,7 +763,7 @@
// вырезаем стили
Позиция = СтрНайти(Текст, "<style");
Пока Позиция > 0 Цикл
ПозицияЗакрывающегоТега = СтрНайти(Текст, "</style>");
ПозицияЗакрывающегоТега = СтрНайти(Текст, "</style>", , Позиция);
Если ПозицияЗакрывающегоТега = 0 Тогда
// Не найден закрывающий тег - вырезаем оставшийся текст.
ПозицияЗакрывающегоТега = СтрДлина(Текст);
@@ -443,7 +443,7 @@
СвойстваТокена.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить информацию о токене в слоте %1. %2'"),
ЗначениеСлота, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
СтрокиТокенов.Вставить(ТипУстройства, СвойстваТокена);
СтрокиТокенов.Вставить(СвойстваТокена.Слот, СвойстваТокена);
Продолжить;
КонецПопытки;
@@ -460,12 +460,12 @@
НСтр("ru = 'Не удалось получить информацию о механизмах токена: %1'"),
ОшибкаПолученияМеханизмовТокена);
КонецЕсли;
СтрокиТокенов.Вставить(ТипУстройства, СвойстваТокена);
СтрокиТокенов.Вставить(СвойстваТокена.Слот, СвойстваТокена);
Продолжить;
КонецПопытки;
СвойстваТокена.Механизмы = СписокМеханизмов.Значение;
СтрокиТокенов.Вставить(ТипУстройства, СвойстваТокена);
СтрокиТокенов.Вставить(СвойстваТокена.Слот, СвойстваТокена);
КонецЦикла;
КонецЦикла;
@@ -677,11 +677,6 @@
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыПодписи.Токен.Пароль) Тогда
ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, НСтр("ru = 'Укажите пин-код токена.'"));
Возврат;
КонецЕсли;
ПодписатьНаТокене(ОповещениеОЗавершении, ПараметрыПодписи, Данные);
// Конец Локализация
@@ -1068,6 +1063,13 @@
#Область ТокеныЛокализация
Процедура ВвестиПинКодТокена(ОписаниеОповещения) Экспорт
ОткрытьФорму("Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.ВводПинКода",, ЭтотОбъект, Истина,
,, ОписаниеОповещения, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
КонецПроцедуры
// Проверяет подпись с помощью токена.
//
// Параметры:
@@ -1150,30 +1152,67 @@
Асинх Процедура ПодписатьНаТокене(ОповещениеОЗавершении, ПараметрыПодписи, Данные)
#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
Контекст = Новый Структура("ПараметрыПодписи, Данные, Оповещение", ПараметрыПодписи, Данные, ОповещениеОЗавершении);
Если Не ЗначениеЗаполнено(ПараметрыПодписи.Токен.Пароль) Тогда
ВвестиПинКодТокена(Новый ОписаниеОповещения("ПродолжитьПодписаниеПослеВводаПинКода", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
ПродолжитьПодписаниеПослеВводаПинКода(ПараметрыПодписи.Токен.Пароль, Контекст);
КонецПроцедуры
Асинх Процедура ПродолжитьПодписаниеПослеВводаПинКода(ПинКод, Контекст) Экспорт
Если Не ЗначениеЗаполнено(ПинКод) Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, НСтр("ru = 'Укажите пин-код токена.'"));
Возврат;
КонецЕсли;
Контекст.ПараметрыПодписи.Токен.Пароль = ПинКод;
#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
Оповещение = Новый ОписаниеОповещения("ПослеОперацииНаТокенеВМобильномКлиенте", ЭтотОбъект, Контекст);
НачатьПодписьНаТокенеВМобильномКлиенте(Оповещение, ПараметрыПодписи, Данные);
НачатьПодписьНаТокенеВМобильномКлиенте(Оповещение, Контекст.ПараметрыПодписи, Контекст.Данные);
Возврат;
#КонецЕсли
Результат = Ждать ПодписьНаТокене(ПараметрыПодписи, Данные);
ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Результат);
Результат = Ждать ПодписьНаТокене(Контекст.ПараметрыПодписи, Контекст.Данные);
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат);
КонецПроцедуры
Асинх Процедура РасшифроватьНаТокене(ОповещениеОЗавершении, ПараметрыРасшифровки, Данные)
#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
Контекст = Новый Структура("ПараметрыРасшифровки, Данные, Оповещение", ПараметрыРасшифровки, Данные, ОповещениеОЗавершении);
Если Не ЗначениеЗаполнено(ПараметрыРасшифровки.Токен.Пароль) Тогда
ВвестиПинКодТокена(Новый ОписаниеОповещения("ПродолжитьРасшифровкуПослеВводаПинКода", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
ПродолжитьРасшифровкуПослеВводаПинКода(ПараметрыРасшифровки.Токен.Пароль, Контекст);
КонецПроцедуры
Асинх Процедура ПродолжитьРасшифровкуПослеВводаПинКода(ПинКод, Контекст) Экспорт
Если Не ЗначениеЗаполнено(ПинКод) Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, НСтр("ru = 'Укажите пин-код токена.'"));
Возврат;
КонецЕсли;
Контекст.ПараметрыРасшифровки.Токен.Пароль = ПинКод;
#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
Оповещение = Новый ОписаниеОповещения("ПослеОперацииНаТокенеВМобильномКлиенте",
ЭтотОбъект, Контекст);
НачатьРасшифровкуНаТокенеВМобильномКлиенте(Оповещение, ПараметрыРасшифровки, Данные);
НачатьРасшифровкуНаТокенеВМобильномКлиенте(Оповещение, Контекст.ПараметрыРасшифровки, Контекст.Данные);
Возврат;
#КонецЕсли
Результат = Ждать РасшифровкаНаТокене(ПараметрыРасшифровки, Данные);
ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Результат);
Результат = Ждать РасшифровкаНаТокене(Контекст.ПараметрыРасшифровки, Контекст.Данные);
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат);
КонецПроцедуры
@@ -1739,10 +1778,6 @@
Возврат НСтр("ru = 'Расшифровка средствами токена JaCarta недоступна, используйте Рутокен или приложения для работы с электронной подписью и шифрованием.'");
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыРасшифровки.Токен.Пароль) Тогда
Возврат НСтр("ru = 'Укажите пин-код токена.'")
КонецЕсли;
Если ПараметрыРасшифровки.ОбъектКомпоненты = Неопределено Тогда
Попытка
ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина);
@@ -2227,6 +2262,12 @@
Возврат НСтр("ru = 'Рутокен S'");
ИначеЕсли СтрНачинаетсяС(НРег(Модель), "rutoken") Тогда
Возврат НСтр("ru = 'Рутокен'");
ИначеЕсли СтрНачинаетсяС(НРег(Модель), "jacartagost") Тогда
Возврат НСтр("ru = 'JaCarta ГОСТ'");
ИначеЕсли СтрНачинаетсяС(НРег(Модель), "jacartalaser") Тогда
Возврат НСтр("ru = 'JaCarta PKI'");
ИначеЕсли СтрНачинаетсяС(НРег(Модель), "jacartapro") Тогда
Возврат НСтр("ru = 'JaCarta PRO'");
ИначеЕсли СтрНачинаетсяС(НРег(Модель), "jacarta") Тогда
Возврат "JaCarta";
КонецЕсли;
@@ -2658,6 +2658,10 @@
Иначе
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Контекст.ОписаниеОшибкиНаКлиенте = Результат.ОписаниеОшибки;
Иначе
Контекст.ОписаниеОшибкиНаКлиенте = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить менеджер криптографии для алгоритма %1: %2.'"),
Контекст.АлгоритмПодписи, Результат);
КонецЕсли;
ПроверитьСертификатПослеНеуспешнойПроверки(Контекст);
КонецЕсли;
Binary file not shown.
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="59ddb036-3048-4315-8e1d-afd44c88698c">
<name>СнятьВсе</name>
<synonym>
<key>ru</key>
<value>Снять все</value>
</synonym>
</mdclass:CommonPicture>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5f3c723-c88e-464a-937f-9bb9117bf32a">
<name>УстановитьВсе</name>
<synonym>
<key>ru</key>
<value>Установить все</value>
</synonym>
</mdclass:CommonPicture>
+11 -9
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fba8e84d-7df3-4002-8d3e-91cbd5f2fa86">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="29dc4258-7dc1-4fea-b078-e7878750b500">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.2</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="6b5d7bc9-f9ae-45d1-8dca-769c657433a5"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="276aac83-f938-4c7d-baac-93ad4244bf5d"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="c8c165bf-737d-4a0a-ab3a-53137138a7f6"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="3d84c1b9-091e-48f2-a57e-7e66bd44563c"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="175b7027-4883-4ec3-80c4-8a9ffa26f88b"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="2820cb2d-8a52-4519-ab1e-940addb9f8bc"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="10fb87bc-d218-44cc-956a-a07a7c7a137a"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="dcbd1edb-fc5e-4872-8629-41b3b40834be"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="9c9accd0-919a-4cb9-8b7d-aeab767ef64d"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="1e69418b-24d6-49d0-b840-e90023443953"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="ec1f92b7-0c8d-43a8-8875-a6cdad95a9e7"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="05b423a8-45a4-4815-a88d-d15fc795c0fc"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="482c537a-fe01-4afa-94c2-e78d47d7b78d"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="0624ede7-1e8e-4b2c-9e0a-70deda16970c"/>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>3.2.1.356</version>
<version>3.2.1.371</version>
<updateCatalogAddress>https://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -593,6 +593,7 @@
<commonPictures>CommonPicture.СкопироватьВБуферОбмена</commonPictures>
<commonPictures>CommonPicture.Скрепка</commonPictures>
<commonPictures>CommonPicture.СкрытьПодсказку</commonPictures>
<commonPictures>CommonPicture.СнятьВсе</commonPictures>
<commonPictures>CommonPicture.СнятьПризнакРассмотреноУВзаимодействия</commonPictures>
<commonPictures>CommonPicture.СозданиеАвтономногоРабочегоМеста</commonPictures>
<commonPictures>CommonPicture.СопоставитьПользователяИБСНовымПользователемВСправочнике</commonPictures>
@@ -729,6 +730,7 @@
<commonPictures>CommonPicture.УровеньДоступаЧтениеБезПросмотра</commonPictures>
<commonPictures>CommonPicture.Успешно</commonPictures>
<commonPictures>CommonPicture.Успешно32</commonPictures>
<commonPictures>CommonPicture.УстановитьВсе</commonPictures>
<commonPictures>CommonPicture.УстановитьОтветственногоЗаВзаимодействие</commonPictures>
<commonPictures>CommonPicture.УстановитьПредметВзаимодействия</commonPictures>
<commonPictures>CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия</commonPictures>
@@ -1 +1 @@
{6,1,1,0c59f682-8057-428f-b177-5965bf7dc0d6,1,b0b422b1-6959-4238-86a1-051fdda58893,"3.2.1.356","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7929,1,0,fba8e84d-7df3-4002-8d3e-91cbd5f2fa86,fba8e84d-7df3-4002-8d3e-91cbd5f2fa86,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,1,0,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,491b9625-62ce-436b-8245-60decacc4552,491b9625-62ce-436b-8245-60decacc4552,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8Line truncated
{6,1,1,a7821d15-4e20-41b3-af98-27acdcdcaa81,1,46ec6fac-fef7-4fc8-9b6b-3ba6f5399921,"3.2.1.371","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7931,1,0,29dc4258-7dc1-4fea-b078-e7878750b500,29dc4258-7dc1-4fea-b078-e7878750b500,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,1,0,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,491b9625-62ce-436b-8245-60decacc4552,491b9625-62ce-436b-8245-60decacc4552,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8Line truncated
@@ -665,8 +665,6 @@
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию");
Методы.Вставить("ОтключитьЗагрузкуКурсаВалюты643ИзИнтернета");
Методы.Вставить("УстановитьРасписаниеРегламентногоЗадания");
КонецПроцедуры
@@ -45,7 +45,7 @@
Функция ВерсияКалендарей() Экспорт
Возврат 109;
Возврат 110;
КонецФункции
@@ -57,7 +57,7 @@
Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт
Возврат "3.2.1.348";
Возврат "3.2.1.363";
КонецФункции
@@ -292,7 +292,8 @@
<Item Calendar="05" Year="2025" DayType="Праздник" Date="20250726" SwapDate="20250728"/>
<Item Calendar="05" Year="2025" DayType="Суббота" Date="20250728" SwapDate="20250726"/>
<Item Calendar="05" Year="2025" DayType="Праздник" Date="20250915" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Предпраздничный" Date="20260319" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Предпраздничный" Date="20260318" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Праздник" Date="20260319" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Праздник" Date="20260320" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Предпраздничный" Date="20260526" SwapDate=""/>
<Item Calendar="05" Year="2026" DayType="Праздник" Date="20260527" SwapDate=""/>
@@ -356,8 +357,11 @@
<Item Calendar="06" Year="2025" DayType="Праздник" Date="20250606" SwapDate=""/>
<Item Calendar="06" Year="2025" DayType="Праздник" Date="20250607" SwapDate="20250609"/>
<Item Calendar="06" Year="2025" DayType="Суббота" Date="20250609" SwapDate="20250607"/>
<Item Calendar="06" Year="2026" DayType="Предпраздничный" Date="20260319" SwapDate=""/>
<Item Calendar="06" Year="2026" DayType="Предпраздничный" Date="20260318" SwapDate=""/>
<Item Calendar="06" Year="2026" DayType="Праздник" Date="20260319" SwapDate=""/>
<Item Calendar="06" Year="2026" DayType="Праздник" Date="20260320" SwapDate=""/>
<Item Calendar="06" Year="2026" DayType="Праздник" Date="20260321" SwapDate="20260323"/>
<Item Calendar="06" Year="2026" DayType="Суббота" Date="20260323" SwapDate="20260321"/>
<Item Calendar="06" Year="2026" DayType="Предпраздничный" Date="20260526" SwapDate=""/>
<Item Calendar="06" Year="2026" DayType="Праздник" Date="20260527" SwapDate=""/>
<Item Calendar="07" Year="2016" DayType="Праздник" Date="20160328" SwapDate=""/>
@@ -973,9 +977,11 @@
<Item Calendar="20" Year="2025" DayType="Праздник" Date="20250608" SwapDate="20250610"/>
<Item Calendar="20" Year="2025" DayType="Суббота" Date="20250609" SwapDate="20250607"/>
<Item Calendar="20" Year="2025" DayType="Воскресенье" Date="20250610" SwapDate="20250608"/>
<Item Calendar="20" Year="2026" DayType="Предпраздничный" Date="20260319" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Предпраздничный" Date="20260318" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Праздник" Date="20260319" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Праздник" Date="20260320" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Праздник" Date="20260323" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Праздник" Date="20260321" SwapDate="20260323"/>
<Item Calendar="20" Year="2026" DayType="Суббота" Date="20260323" SwapDate="20260321"/>
<Item Calendar="20" Year="2026" DayType="Предпраздничный" Date="20260415" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Праздник" Date="20260416" SwapDate=""/>
<Item Calendar="20" Year="2026" DayType="Предпраздничный" Date="20260526" SwapDate=""/>
@@ -3753,8 +3753,7 @@
Ждать ОбъектКомпоненты.ПолучитьСписокОшибокАсинх();
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьПослеВводаПинКода", ЭтотОбъект, Контекст);
ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ВводПинКода",, ЭтотОбъект, Истина,
,, ОписаниеОповещения, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
ЭлектроннаяПодписьКлиентЛокализация.ВвестиПинКодТокена(ОписаниеОповещения);
КонецПроцедуры
@@ -4920,6 +4919,10 @@
Для Каждого Токен Из УстановленныеТокеныРезультат.Токены Цикл
Найдено = СписокТокенов.НайтиСтроки(Новый Структура("ПрограммаИдентификатор", Токен.СерийныйНомер));
Если Найдено.Количество() > 0 Тогда
НоваяСтрока = Найдено[0];
Иначе
НоваяСтрока = СписокТокенов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Токен);
НоваяСтрока.ПрограммаИмя = ИмяПрограммы(НоваяСтрока.Токен);
@@ -4928,11 +4931,13 @@
Если Не ПустаяСтрока(НоваяСтрока.Ошибка) И СтрНайти(НоваяСтрока.Ошибка, ОшибкаНеНайденТокен()) <> 0 Тогда
НоваяСтрока.Ошибка = СтрШаблон("%1%2%3", НоваяСтрока.Ошибка, Символы.ПС, РекомендацииДляТокена());
КонецЕсли;
КонецЕсли;
Если Токен.Слот = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяСтрока.ТипМеханизмаГенерацииКлючевойПары) Тогда
Попытка
ТипМеханизмаГенерацииКлючевойПары = ТипМеханизмаГенерацииКлючевойПары(Токен.Механизмы, Токен.Представление);
Исключение
@@ -4946,7 +4951,11 @@
Если ТипЗнч(ТипМеханизмаГенерацииКлючевойПары) = Тип("Строка") Тогда
НоваяСтрока.Ошибка = ТипМеханизмаГенерацииКлючевойПары;
Иначе
НоваяСтрока.Представление = Токен.Представление;
НоваяСтрока.Слот = Токен.Слот;
НоваяСтрока.ТипМеханизмаГенерацииКлючевойПары = ТипМеханизмаГенерацииКлючевойПары;
НоваяСтрока.Ошибка = "";
КонецЕсли;
КонецЕсли;
КонецЦикла;
@@ -7338,8 +7347,7 @@
Контекст.Вставить("ДанныеСертификата", ДД);
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУстановкуПослеВводаПинКода", ЭтотОбъект, Контекст);
ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ВводПинКода",, ЭтотОбъект, Истина,
,, ОписаниеОповещения, РежимБлокировкиПриОткрытииОкнаФормы.БлокироватьВладельца);
ЭлектроннаяПодписьКлиентЛокализация.ВвестиПинКодТокена(ОписаниеОповещения);
КонецПроцедуры
@@ -70,15 +70,6 @@
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="af062541-4dec-4856-9be9-dec804fbae0b">
<name>ВводПинКода</name>
<synonym>
<key>ru</key>
<value>Ввод пин кода</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="e057e428-99c1-419d-a169-697c1e825e94">
<name>ИндивидуальныйПредприниматель</name>
<synonym>
@@ -1,11 +1,11 @@
<!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>Предназначена для настройки REST-сервиса для обмена со сторонними приложениями.
<div>Для работы с REST-сервисом не рекомендуется использовать какие-либо уже существующие ученые записи с целью защиты данных приложения от взлома, т.к. REST-сервис предназначен для работы со сторонними приложениями.</div>
<!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>Предназначена для настройки REST-сервиса для обмена со сторонними приложениями (например, для обмена с Интернет-магазином, корпоративными информационными системами или пакетной загрузки данных в приложение).  REST-сервис позволяет получать данные, изменять их, создавать новые объекты (например, справочники и документы) и удалять существующие. Для работы с REST-сервисом не рекомендуется использовать какие-либо уже существующие ученые записи с целью защиты данных приложения от взлома, т.к. REST-сервис предназначен для работы со сторонними приложениями. 
<div><br></div>
<div>Состоит из двух вкладок:</div>
<div><b>Авторизация</b> - можно ввести имя пользователя и пароль для работы с REST-сервисом;</div>
<div><b>Состав</b> - можно определить, какие данные будут участвовать в работе автоматического REST-сервиса.</div>
<h3>Авторизация</h3>
<div>Включите флажок <b>Создать для использования автоматического REST-сервиса отдельные имя пользователя и пароль</b> (рекомендуется).</div>
<div>Включите переключатель <b>Создать для использования автоматического REST-сервиса отдельные имя пользователя и пароль</b> (рекомендуется).</div>
<div>При использовании REST-сервиса и настройке интеграции не рекомендуется передавать учетные данные пользователя с правами доступа для работы в приложении. Рекомендуется создать отдельного пользователя (с отдельным паролем). Такой пользователь не будет иметь возможности работать с приложением (или изменять настройки). </div>
<div>Заполните поля:</div>
<div>
<ul><li><b>Имя пользователя</b>;</li>
@@ -1,39 +1,150 @@
<!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.9600.16428"></meta></head><body>
<p>Предназначены для организации обсуждений с помощью внешних приложений.</p>
<p>С помощью кнопки <b>Создать</b> выберите и настройте нужный чат. </p>
<h3>Чат Telegram</h3>
<ul><li>Перейдите в <b>Telegram</b>.</li>
<li>Следуя указаниям приложения создайте бот.</li>
<li>Выберите боту <b>Имя </b>и произведите необходимые настройки в <b>Telegram</b>. </li>
<li>После успешного создания бота укажите <b>Наименование</b> бота и <b>Токен</b>.</li>
<li>С помощью кнопки <b>Подобрать</b> выберите из списка пользователей, которые будут получать и отправлять сообщения в <b>Telegram</b>.</li></ul><h3>Чат Вконтакте</h3>
<ul><li>Перейдите в социальную сеть <b>Вконтакте</b>.</li>
<li>Следуя указаниям приложения создайте сообщество (группу).</li>
<li>Выберите сообществу <b>Имя </b>и произведите необходимые настройки во <b>Вконтакте</b>. </li>
<li>После успешного создания чата заполните поля <b>Наименование</b>,<b> Ключ</b> и<b> Ключ Группу</b>. </li>
<li>С помощью кнопки <b>Подобрать</b> выберите из списка пользователей, которые будут получать и отправлять сообщения в приложении.</li>
<li>Нажмите кнопку <b>Активировать</b>.</li></ul><h3>Чат WhatsApp</h3>
<ul><li>Предварительно заключите договор с провайдером <b>WhatsApp Business API</b> - компанией <b>"Девино Телеком"</b>. </li>
<li>После заключения договора получите у менеджера <b>"Девино Телеком" Ключ (token) </b>и <b>Имя канала</b>. </li>
<li>После настройки интеграции необходимо передать навигационную ссылку точки подключения менеджеру <b>"Девино Телеком"</b>.</li>
<li>Заполните поля <b>Наименование</b>,<b> Ключ, Имя канала</b>.</li>
<li><b>Точка подключения</b> заполняется автоматически.<b> </b></li>
<li>С помощью кнопки <b>Подобрать</b> выберите из списка пользователей, которые будут получать и отправлять сообщения от лица аккаунта <b>WhatsApp</b>.</li></ul><h3>Чат на сайте</h3>
<div>Чат можно интегрировать с корпоративным сайтом или интернет-магазином, что обеспечит непрерывность коммуникации и автоматизирует общение с посетителями даже в нерабочее время благодаря использованию бота.</div>
<ul><li>На вкладке <b>Основное</b> заполните поле <b>Наименование</b>. </li>
<li><b>Точка подключения</b> заполняется автоматически после успешной активации. </li>
<li>С помощью кнопки <b>Подобрать</b> выберите из списка пользователей, которые будут получать и отправлять сообщения.</li>
<li>Настройте (при необходимости) на соответствующей вкладке <b>Параметры отображения</b>, например, внешний вид, расположение окна чата и т.д. </li>
<li>Нажмите кнопку <b>Активировать</b>.</li>
<li>Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему <b>Точку подключения</b>. </li></ul><h3>Интеграция Webhook</h3>
<div><b>Webhook</b> - это механизм, который позволяет различным сервисам и приложениям обмениваться данными в режиме реального времени. Интеграция с <b>Webhook </b>обеспечивает одностороннюю коммуникацию от внешнего приложения в <b>Систему взаимодействия</b>. С помощью интеграции можно создать новые сценарии взаимодействия, например, информировать пользователей о новых заказах через сайт интернет-магазина. </div>
<ul><li>Заполните <b>Наименование</b> бота в 1С. </li>
<li>С помощью кнопки <b>Подобрать</b> выберите из списка пользователей, которые будут получать сообщения.</li>
<li>Нажмите кнопку <b>Активировать</b>.</li>
<li><b>Точка подключения</b> заполняется автоматически после успешной активации. </li>
<li>Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему <b>Точку подключения</b>. </li></ul><div><br></div>
<div>Если<b> </b>все было корректно настроено, должны приходить сообщения из приложений. </div>
<div>
<p><span style="font-size: 13.43px; font-weight: bold;"><br></span></p>
<p><span style="font-size: 13.43px; font-weight: bold;">См. также:</span></p>
<ul><li><a href="DataProcessor.ПанельАдминистрированияБСП/Help">Настройки программы</a>.</li></ul></div></body></html>
<!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.9600.16428"></meta><style>
body, p, li, div, span, h1, h2, h3, h4, h5, td, th, input, textarea, select, button {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif !important;
font-size: 12px !important;
}
h3 {
font-size: 14px !important;
font-weight: bold;
}
a, a:visited {
color: #0000FF;
text-decoration: underline;
}
a:hover {
text-decoration: none;
}
.note {
background-color: #f8f8f8;
border-left: 4px solid #6b6b6b;
padding: 8px 12px;
margin: 10px 0;
}
</style></head><body>
<p>Настройки предназначены для организации обсуждений с помощью внешних приложений и мессенджеров.</p>
<p>С помощью кнопки <strong>Создать</strong> выберите и настройте нужный чат. Для каждого типа чата предусмотрены свои параметры подключения.</p>
<h3>Чат Max</h3>
<ul><li>Для получения сообщений из Max необходим бот, с которым будут общаться ваши контакты.</li>
<li>Если у вас в Max еще нет бота, создайте его на <strong>платформе Max для партнеров</strong> для вашей организации. </li>
<li>Перед настройкой рекомендуется ознакомиться с инструкциями:
<ul><li><a href="https://dev.max.ru/docs/maxbusiness/connection" target="_blank">Как создать профиль организации</a>;</li>
<li><a href="https://dev.max.ru/docs/chatbots/bots-create" target="_blank">Как создать бота и получить токен</a>.</li>
</ul></li>
<li>Заполните поля настройки чата:
<ul><li><strong>Наименование</strong> — произвольное название бота в Max для отображения в списке;</li>
<li><strong>Токен</strong> — ключ доступа, выданный на платформе Max для партнеров после создания бота.</li>
</ul></li>
<li>В поле <strong>Кто получает и отправляет сообщения от лица бота Max</strong> с помощью кнопки <strong>Подобрать</strong> выберите пользователей приложения, которые будут работать с сообщениями из Max.</li>
<li>После заполнения всех данных нажмите кнопку <strong>Активировать</strong> для включения интеграции.</li>
</ul><h3>Чат Telegram</h3>
<ul><li>Перейдите в <strong>Telegram</strong>. Для создания бота напишите пользователю <a href="https://telegram.me/BotFather" target="_blank">@BotFather</a> и следуйте его инструкциям.</li>
<li>Подробные настройки бота описаны в официальной документации: <a href="https://tlgrm.ru/docs/bots#edit-settings" target="_blank">Боты: информация для разработчиков</a>.</li>
<li>Выберите боту <strong>Имя</strong> и произведите необходимые настройки в <strong>Telegram</strong>.</li>
<li>После успешного создания бота укажите <strong>Наименование</strong> бота и <strong>Токен</strong> (полученный от @BotFather).</li>
<li>С помощью кнопки <strong>Подобрать</strong> выберите из списка пользователей, которые будут получать и отправлять сообщения в <strong>Telegram</strong>.</li>
</ul><h3>Чат Вконтакте</h3>
<ul><li>Перейдите в социальную сеть <strong>Вконтакте</strong>.</li>
<li>Следуя указаниям приложения, создайте сообщество (группу).</li>
<li>Выберите сообществу <strong>Имя</strong> и произведите необходимые настройки во <strong>Вконтакте</strong> (в разделе "Работа с API").</li>
<li>После успешного создания чата заполните поля:
<ul><li><strong>Наименование</strong> — название чата в программе;</li>
<li><strong>Ключ</strong> — ключ доступа сообщества;</li>
<li><strong>Ключ группы</strong> — идентификатор группы.</li>
</ul></li>
<li>С помощью кнопки <strong>Подобрать</strong> выберите из списка пользователей, которые будут получать и отправлять сообщения в приложении.</li>
<li>Нажмите кнопку <strong>Активировать</strong>.</li>
</ul><h3>Чат WhatsApp</h3>
<ul><li>Предварительно заключите договор с провайдером <strong>WhatsApp Business API</strong> — компанией <strong>"Девино Телеком"</strong>.</li>
<li>Подробная инструкция по подключению доступна на официальном сайте: <a href="https://v8.1c.ru/static/instruktsiya-po-podklyucheniyu-k-whatsapp-business-api/" target="_blank">Инструкция по подключению к WhatsApp Business API через провайдера «Девино Телеком»</a>.</li>
<li>После заключения договора получите у менеджера <strong>"Девино Телеком"</strong>:
<ul><li><strong>Ключ (token)</strong>;</li>
<li><strong>Имя канала</strong>.</li>
</ul></li>
<li>После настройки интеграции необходимо передать навигационную ссылку точки подключения менеджеру <strong>"Девино Телеком"</strong>.</li>
<li>Заполните поля:
<ul><li><strong>Наименование</strong> — название чата в программе;</li>
<li><strong>Ключ</strong> — полученный токен доступа;</li>
<li><strong>Имя канала</strong> — название канала WhatsApp.</li>
</ul></li>
<li><strong>Точка подключения</strong> заполняется автоматически.</li>
<li>С помощью кнопки <strong>Подобрать</strong> выберите из списка пользователей, которые будут получать и отправлять сообщения от лица аккаунта <strong>WhatsApp</strong>.</li>
</ul><h3>Чат на сайте</h3>
<div>Чат можно интегрировать с корпоративным сайтом или интернет-магазином, что обеспечит непрерывность коммуникации и автоматизирует общение с посетителями даже в нерабочее время благодаря использованию бота. Подробная документация доступна на ИТС: <a href="https://its.1c.ru/db/v8327doc#bookmark:dev:TI000002677" target="_blank">Руководство разработчика. Система взаимодействия</a>.</div>
<ul><li>На вкладке <strong>Основное</strong> заполните поле <strong>Наименование</strong>.</li>
<li><strong>Точка подключения</strong> заполняется автоматически после успешной активации.</li>
<li>С помощью кнопки <strong>Подобрать</strong> выберите из списка пользователей, которые будут получать и отправлять сообщения.</li>
<li>Настройте (при необходимости) на соответствующей вкладке <strong>Параметры отображения</strong>, например, внешний вид, расположение окна чата и т.д.</li>
<li>Нажмите кнопку <strong>Активировать</strong>.</li>
<li>Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему <strong>Точку подключения</strong>.</li>
</ul><h3>Интеграция Webhook</h3>
<div><strong>Webhook</strong> — это механизм, который позволяет различным сервисам и приложениям обмениваться данными в режиме реального времени. Интеграция с <strong>Webhook</strong> обеспечивает одностороннюю коммуникацию от внешнего приложения в <strong>Систему взаимодействия</strong>. С помощью интеграции можно создать новые сценарии взаимодействия, например, информировать пользователей о новых заказах через сайт интернет-магазина. Подробнее см. в документации на ИТС: <a href="https://its.1c.ru/db/v8325doc#bookmark:dev:TI000002496" target="_blank">Руководство разработчика. Интеграция с Webhook</a>.</div>
<ul><li>Заполните <strong>Наименование</strong> бота в 1С.</li>
<li>С помощью кнопки <strong>Подобрать</strong> выберите из списка пользователей, которые будут получать сообщения.</li>
<li>Нажмите кнопку <strong>Активировать</strong>.</li>
<li><strong>Точка подключения</strong> заполняется автоматически после успешной активации.</li>
<li>Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему <strong>Точку подключения</strong>.</li>
</ul><div class="note">
Если все было корректно настроено, в программу должны приходить сообщения из подключенных внешних приложений.
</div>
<h3>См. также:</h3>
<ul><li><a href="DataProcessor.ПанельАдминистрированияБСП/Help">Настройки приложения</a> (общие настройки взаимодействия).</li>
<li><a href="https://dev.max.ru/docs/maxbusiness/connection" target="_blank">Как создать профиль организации</a> (инструкция на сайте Max).</li>
<li><a href="https://dev.max.ru/docs/chatbots/bots-create" target="_blank">Как создать бота и получить токен</a> (инструкция на сайте Max).</li>
<li><a href="https://telegram.me/BotFather" target="_blank">@BotFather</a> — бот для создания и настройки ботов в Telegram.</li>
<li><a href="https://tlgrm.ru/docs/bots#edit-settings" target="_blank">Документация Telegram: Боты</a> (официальная документация).</li>
<li><a href="https://v8.1c.ru/static/instruktsiya-po-podklyucheniyu-k-whatsapp-business-api/" target="_blank">Инструкция по подключению к WhatsApp Business API</a> (официальный сайт 1С).</li>
<li><a href="https://its.1c.ru/db/v8327doc#bookmark:dev:TI000002677" target="_blank">Чат на сайте: документация на ИТС</a>.</li>
<li><a href="https://its.1c.ru/db/v8325doc#bookmark:dev:TI000002496" target="_blank">Интеграция Webhook: документация на ИТС</a>.</li>
</ul></body></html>
@@ -44,7 +44,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
&НаКлиенте
@@ -125,10 +126,21 @@
Закрыть(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОтключитьСервер()
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -44,7 +44,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
&НаКлиенте
@@ -125,10 +126,21 @@
Закрыть(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОтключитьСервер()
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -95,7 +95,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
@@ -180,4 +181,11 @@
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -96,7 +96,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
&НаКлиенте
@@ -182,4 +183,11 @@
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -52,7 +52,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
&НаКлиенте
@@ -134,10 +135,21 @@
Закрыть(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОтключитьСервер()
ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -184,7 +184,8 @@
&НаКлиенте
Процедура Подобрать(Команда)
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники);
ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(ЭтотОбъект,
ПараметрыРасширеннойФормыПодбора());
КонецПроцедуры
&НаКлиенте
@@ -807,4 +808,11 @@
#КонецОбласти
&НаСервере
Функция ПараметрыРасширеннойФормыПодбора()
Возврат ОбсужденияСлужебный.ПараметрыРасширеннойФормыПодбора(ЭтотОбъект);
КонецФункции
#КонецОбласти
@@ -1607,25 +1607,17 @@
<items xsi:type="form:FormGroup">
<name>ГруппаСостояние</name>
<id>157</id>
<items xsi:type="form:FormField">
<items xsi:type="form:Decoration">
<name>ОписаниеСостоянияНайденныхДублей</name>
<id>202</id>
<title>
<key>ru</key>
<value>Описание состояния найденных дублей</value>
</title>
<id>788</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>204</id>
<id>790</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -1635,21 +1627,17 @@
</extendedTooltip>
<contextMenu>
<name>ОписаниеСостоянияНайденныхДублейКонтекстноеМеню</name>
<id>203</id>
<id>789</id>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<type>Label</type>
<height>3</height>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>URLProcessing</event>
<name>ОписаниеСостоянияНайденныхДублейОбработкаНавигационнойСсылки</name>
</handlers>
<height>3</height>
<maxHeight>3</maxHeight>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
@@ -1661,7 +1649,7 @@
<key>ru</key>
<value>Состояние</value>
</title>
<height>2</height>
<height>3</height>
<extendedTooltip>
<name>ГруппаСостояниеРасширеннаяПодсказка</name>
<id>158</id>
@@ -1674,7 +1662,7 @@
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<group>Vertical</group>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
@@ -4434,10 +4422,6 @@
</attributes>
<attributes>
<name>ОписаниеСостоянияНайденныхДублей</name>
<title>
<key>ru</key>
<value>Описание состояния найденных дублей</value>
</title>
<id>15</id>
<valueType>
<types>FormattedString</types>
@@ -295,10 +295,10 @@
КонецПроцедуры
&НаКлиенте
Процедура ОписаниеСостоянияНайденныхДублейОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
Процедура ОписаниеСостоянияНайденныхДублейОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Ссылка = "СпособУдаления" Тогда
Если НавигационнаяСсылкаФорматированнойСтроки = "СпособУдаления" Тогда
СпособУдаления = ?(СпособУдаления = "Непосредственно", "Пометка", "Непосредственно");
ОбновитьОписаниеСостоянияНайденныхДублей();
КонецЕсли;
@@ -1320,7 +1320,7 @@
ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут помечены на удаление и заменены на оригиналы (отмечены стрелкой).'");
КонецЕсли;
ОписаниеСостоянияНайденныхДублей = СтроковыеФункцииКлиент.ФорматированнаяСтрока(Описание + Символы.ПС + ТекстПодсказки);
Элементы.ОписаниеСостоянияНайденныхДублей.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(Описание + Символы.ПС + ТекстПодсказки);
КонецПроцедуры
@@ -21,7 +21,7 @@
НСтр("ru='Приложение КриптоПро CSP - платное. Подробнее о приложении и условиях его приобретения см. сайт компании <a href = ""%1"">ООО ""КРИПТО-ПРО""</a>'"),
"https://www.cryptopro.ru/buy");
ОбщегоНазначения.ВставитьВажноеСообщение(ЭтотОбъект, ПараметрыСообщения, Элементы.ГруппаВажныеСообщения, Элементы.ВыполнятьКонтрольЦелостности);
ОбщегоНазначения.ВставитьВажноеСообщение(ЭтотОбъект, ПараметрыСообщения, Элементы.ГруппаВажныеСообщения);
ОбщегоНазначения.ВывестиСтатусыИВажныеСообщенияНаФорму(ЭтотОбъект);
@@ -75,6 +75,15 @@
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="31f2a49e-3095-4888-afbd-bf1a4d8fbec9">
<name>ВводПинКода</name>
<synonym>
<key>ru</key>
<value>Ввод пин кода</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="766f2abe-1dfd-4e16-bffd-83f44d25d82a">
<name>КлассификаторАУЦ_1_0_0_1</name>
<synonym>
@@ -1789,6 +1789,10 @@ TIF - Не все браузеры отображают этот формат.</
<items xsi:type="form:Button">
<name>УстановитьСтандартныеНастройки</name>
<id>204</id>
<title>
<key>ru</key>
<value>Установить стандартные параметры</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1804,7 +1808,7 @@ TIF - Не все браузеры отображают этот формат.</
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.RestoreValues</commandName>
<commandName>Form.Command.УстановитьСтандартныеНастройки</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
@@ -2495,6 +2495,19 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ЭтоВнешняяОбработка</name>
<id>23</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ВыполнитьСкрытие</name>
<title>
@@ -13,6 +13,7 @@
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
АдресХранилищаНастроек = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные());
Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации'");
@@ -483,7 +484,7 @@
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации");
Если МодульДлительныеОперации = Неопределено Тогда
Если МодульДлительныеОперации = Неопределено Или ЭтоВнешняяОбработка Тогда
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ОбработкаОбъект.ЗаполнитьДеревоОбрабатываемыхОбъектов(СохраненныеНастройки, АдресХранилища);
Возврат;
@@ -613,7 +614,7 @@
ПараметрыПроцедуры.Вставить("ПравилаОбработки", ПравилаОбработки);
МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации");
Если МодульДлительныеОперации = Неопределено Тогда
Если МодульДлительныеОперации = Неопределено Или ЭтоВнешняяОбработка Тогда
АдресХранилищаВторой = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ОбработкаОбъект.УничтожитьПерсональныеДанные(ПараметрыПроцедуры, АдресХранилищаВторой);
Возврат Истина;
@@ -2194,8 +2194,8 @@
// Получим список адресатов
СоответствиеТабличныхЧастей = Новый Соответствие;
СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма);
СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий);
СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий);
СоответствиеТабличныхЧастей.Вставить("Копия", Объект.ПолучателиКопий);
СоответствиеТабличныхЧастей.Вставить("СкрытаяКопия", Объект.ПолучателиСкрытыхКопий);
СоответствиеТабличныхЧастей.Вставить("Ответ", Объект.ПолучателиОтвета);
СписокВыбранных = Новый СписокЗначений;
@@ -2235,8 +2235,8 @@
// Получим список адресатов
СоответствиеТабличныхЧастей = Новый Соответствие;
СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма);
СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий);
СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий);
СоответствиеТабличныхЧастей.Вставить("Копия", Объект.ПолучателиКопий);
СоответствиеТабличныхЧастей.Вставить("СкрытаяКопия", Объект.ПолучателиСкрытыхКопий);
СоответствиеТабличныхЧастей.Вставить("Получатели", Объект.ПолучателиОтвета);
ДляПодбора = (Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено"));
@@ -45,7 +45,7 @@
<li><strong>Действует по</strong> - для произвольной даты напишите или <img src="StdPicture.InputFieldCalendar" width="12" height="12"></img> выберите значение, для относительной даты значение проставляется приложением автоматически.</li></ul></li>
<li>В списке по умолчанию присутствует элемент <strong>&lt;Общая дата&gt;</strong>. Значение даты запрета для этого элемента будет использоваться для всех разделов по умолчанию, кроме тех, которые уже содержатся в списке. </li></ul></li>
<li><strong>По объектам</strong> – даты запрета задаются в разрезе объектов приложения. Для каждого объекта устанавливается своя дата запрета. Если выбрано это значение, то становится доступным список, в который можно добавлять объекты (соответствующей командой) и указывать для каждого объекта свое значение даты запрета. Так же, как и в предыдущем способе, в списке для аналогичных целей содержится элемент <strong>&lt;Общая дата&gt;</strong>.
</li>
<ul><li>Данный способ доступен не во всех приложениях. Если в интерфейсе присутствует способ <strong>По объектам</strong>, то способы <strong>По разделам</strong> и <strong>По разделам и объектам</strong> недоступны, и наоборот. Также возможна ситуация, когда доступен только способ <strong>По разделам</strong>, а <strong>По разделам и объектам</strong> отсутствует.</li></ul></li>
<li><strong>По разделам и объектам</strong> – даты запрета задаются и в разрезе разделов, и в разрезе объектов.
<ul><li>При этом становится доступным список, в котором перечислены разделы и объекты. Можно указать для каждого раздела и каждого объекта свое значение даты запрета. Так же, как и в предыдущих способах, в списке содержится элемент <strong>&lt;Общая дата&gt;</strong> для аналогичных целей.
<ul><li>Для выбора нескольких объектов в выделенном разделе выполните команду <strong>Подобрать</strong>.
@@ -100,34 +100,39 @@
МетаданныеРегистра = Метаданные.РегистрыСведений.ДатыЗапретаИзменения;
Поля = Новый СписокЗначений;
ШиринаКолонок = Новый Соответствие;
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Раздел, 20);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Объект, 40);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Измерения.Пользователь, 40);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Ресурсы.ДатаЗапрета, 20);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета, 22);
ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.Комментарий, 20);
Поля = Новый Массив;
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Измерения.Раздел));
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Измерения.Объект));
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Измерения.Пользователь));
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Ресурсы.ДатаЗапрета));
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета));
Поля.Добавить(НовоеОписаниеПоля(МетаданныеРегистра.Реквизиты.Комментарий));
Заголовок = Новый Массив;
Заголовок.Добавить("");
Для Каждого Поле Из Поля Цикл
Заголовок.Добавить(ДополненнаяСтрока(Поле.Представление,
ШиринаКолонок.Получить(Поле.Значение)));
Заголовок.Добавить(ДополненнаяСтрока(Поле.Представление, Поля, Поле));
КонецЦикла;
СтрокиКомментария = Новый Массив;
СтрокиКомментария.Добавить(СтрСоединить(Заголовок, " | "));
Если ЗначениеЗаполнено(ДобавленныеСтроки) Тогда
ДобавитьСтроки(СтрокиКомментария, ДобавленныеСтроки, Поля, ШиринаКолонок, "+");
ДобавитьСтроки(СтрокиКомментария, ДобавленныеСтроки, Поля, "+");
КонецЕсли;
Если ЗначениеЗаполнено(УдаленныеСтроки) Тогда
ДобавитьСтроки(СтрокиКомментария, УдаленныеСтроки, Поля, ШиринаКолонок, "-");
ДобавитьСтроки(СтрокиКомментария, УдаленныеСтроки, Поля, "-");
КонецЕсли;
Комментарий = СтрСоединить(СтрокиКомментария, Символы.ПС) + Символы.ПС;
ПробелыПоШирине = ПробелыПоШирине();
НачальнаяШирина = СтрДлина(ПробелыПоШирине);
Для Каждого Поле Из Поля Цикл
СтрокаЗамены = Лев(ПробелыПоШирине, НачальнаяШирина - Поле.Ширина) + "/" + Поля.Найти(Поле) + " | ";
Комментарий = СтрЗаменить(Комментарий, СтрокаЗамены, " | ");
КонецЦикла;
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Даты запрета.Регистрация изменений'",
ОбщегоНазначения.КодОсновногоЯзыка()),
@@ -141,37 +146,60 @@
КонецПроцедуры
Процедура ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеПоля, ШиринаКолонки);
Функция НовоеОписаниеПоля(МетаданныеПоля)
Поля.Добавить(МетаданныеПоля.Имя, МетаданныеПоля.Представление());
ШиринаКолонок.Вставить(МетаданныеПоля.Имя, ШиринаКолонки);
ОписаниеПоля = Новый Структура;
ОписаниеПоля.Вставить("Имя", МетаданныеПоля.Имя);
ОписаниеПоля.Вставить("Представление", МетаданныеПоля.Представление());
ОписаниеПоля.Вставить("Ширина", 0);
КонецПроцедуры
Функция ДополненнаяСтрока(Значение, ШиринаКолонки)
Строка = Строка(Значение);
Если Не ЗначениеЗаполнено(Строка)
И ТипЗнч(Значение) <> Тип("Строка") Тогда
Строка = "<> (" + Строка(ТипЗнч(Значение)) + ")";
КонецЕсли;
ДлинаСтроки = СтрДлина(Строка);
Если ТипЗнч(ШиринаКолонки) <> Тип("Число")
Или ШиринаКолонки <= ДлинаСтроки Тогда
Возврат Строка;
КонецЕсли;
Пробелы = " ";
Возврат Строка + Лев(Пробелы, ШиринаКолонки - ДлинаСтроки);
Возврат ОписаниеПоля;
КонецФункции
Процедура ДобавитьСтроки(СтрокиКомментария, СтрокиТаблицы, Поля, ШиринаКолонок, Операция)
Функция ДополненнаяСтрока(Значение, Поля, Поле)
Тип = ТипЗнч(Значение);
Если Тип = Тип("Дата") Тогда
Строка = Формат(Значение, "ДЛФ=DT");
Иначе
Строка = Строка(Значение);
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка) И Тип <> Тип("Строка") Тогда
Строка = "<> (" + Строка(ТипЗнч(Значение)) + ")";
КонецЕсли;
Строка = СтрЗаменить(СокрЛП(Строка), Символы.ПС, " ");
ИндексПоля = Поля.Найти(Поле);
Если ИндексПоля = Поля.ВГраница() Тогда
Возврат Строка;
КонецЕсли;
ДлинаСтроки = СтрДлина(Строка);
ПробелыПоШирине = ПробелыПоШирине();
НачальнаяШирина = СтрДлина(ПробелыПоШирине);
Если ДлинаСтроки >= НачальнаяШирина Тогда
Возврат Строка;
КонецЕсли;
Если Поле.Ширина < ДлинаСтроки Тогда
Поле.Ширина = ДлинаСтроки;
КонецЕсли;
Возврат Строка + Лев(ПробелыПоШирине, НачальнаяШирина - ДлинаСтроки) + "/" + ИндексПоля;
КонецФункции
Функция ПробелыПоШирине()
Возврат " ";
КонецФункции
Процедура ДобавитьСтроки(СтрокиКомментария, СтрокиТаблицы, Поля, Операция)
Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл
СтрокаКомментария = Новый Массив;
Для Каждого Поле Из Поля Цикл
СтрокаКомментария.Добавить(ДополненнаяСтрока(СтрокаТаблицы[Поле.Значение],
ШиринаКолонок.Получить(Поле.Значение)));
СтрокаКомментария.Добавить(ДополненнаяСтрока(СтрокаТаблицы[Поле.Имя], Поля, Поле));
КонецЦикла;
СтрокиКомментария.Добавить(Операция + "| " + СтрСоединить(СтрокаКомментария, " | "));
КонецЦикла;
@@ -3,49 +3,36 @@
<p>Для ведения истории изменений объектов необходимо включить флажок <strong>Хранить историю изменений</strong> (по умолчанию включен) в разделе <strong>Администрирование - Общие настройки - История изменений</strong>.</p>
<p>После этого становится доступной команда <strong>Настройки хранения</strong>, по которой можно произвести необходимые настройки.</p>
<p>В списке выводится:</p>
<ul><li><strong>Объект</strong> - список объектов приложения в виде дерева с группировкой по типам объектов.
</li>
<li><strong>Когда сохранять версии</strong> - выбранный вариант хранения версий;
</li>
<li><strong>Срок хранения версий</strong> - выбранный срок хранения версий.</li></ul><h3>Выбор варианта хранения истории изменений объектов</h3>
<ul><li><strong>Объект</strong> - список объектов приложения в виде дерева с группировкой по типам объектов.</li>
<li><strong>Когда сохранять версии</strong> - выбранный вариант хранения версий;</li>
<li><strong>Срок хранения версий</strong> - выбранный срок хранения версий.</li>
</ul><h3>Выбор варианта хранения истории изменений объектов</h3>
<ul><li>Выберите один или несколько объектов, затем нажмите кнопку <strong>Установить когда сохранять версии</strong>, из выпадающего списка выберите нужный вариант хранения версий для каждого типа документов и справочников (также можно найти команду в меню <strong>Еще</strong> или в контекстном меню по правой кнопке мыши):
<ul><li><strong>Никогда</strong> - история версий объекта не ведется;
</li>
<li><strong>При записи</strong> - новая запись заносится в <a href="InformationRegister.ВерсииОбъектов.Form.ВыборХранимыхВерсий/Help">историю версий</a> каждый раз при изменении (или создании нового) справочника или документа;
</li>
<li><strong>При проведении (для документов)</strong> - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение;
</li>
<li><strong>При старте (для бизнес-процессов)</strong> - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов;
</li>
<li><strong>По умолчанию</strong> - установить рекомендуемые настройки (для справочников - никогда (не создавать версии), для документов - создавать версии при проведении, для бизнес-процессов - создавать версии при старте).</li></ul></li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Также возможна настройка хранения версий сразу для группы объектов приложения, например, можно выбрать все документы или справочники.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Выбор срока хранения версий</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Нажмите кнопку <strong>Установить срок хранения версий</strong>, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить <strong>За последнюю неделю</strong>, <strong>За последний месяц</strong>, <strong>За последние три месяца</strong>, <strong>За последние шесть месяцев</strong>, <strong>За последний год</strong> и <strong>Бессрочно</strong>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Просмотр отчета "Количество и объем хранимых версий объектов"</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">По соответствующей ссылке можно перейти к просмотру <a href="Report.АнализВерсийОбъектов/Help">отчета</a> <strong>Количество и объем хранимых версий объектов</strong>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Очистка устаревших версий</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">В поле <strong>Всего устаревших версий </strong>выдается информация о количестве и объеме устаревших версий в приложении.</div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Нажмите <strong>Очистить</strong>, для того чтобы удалить устаревшие версии. Кнопка становится доступной, если в приложении имеются устаревшие версии.</div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Для того чтобы <strong>Автоматически удалять устаревшие версии</strong>, включите соответствующий флажок.</div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Перейдите по соответствующей ссылке, для того чтобы <strong>Настроить расписание</strong>. Настроенное <a href="v8help://mngbase/jobschedule.lf">расписание</a> выводится в нижней части окна.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Применение хранения версий объектов</h3>
<ul><li>В начале внедрения приложения, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), хранение версий может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе.
</li>
<li>Благодаря хранению версий объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния.
</li>
<li>В дальнейшем, когда объемы информации в приложении возрастают, можно постепенно отказываться от хранения версий некоторых объектов вообще или вести историю версий только в важные моменты, например, при проведении документов.
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Хранение версий большого количества объектов может привести к увеличению объема хранимой в приложении информации из-за хранения их версий, что может существенно замедлить работу приложения. Поэтому рекомендуется использовать эту возможность избирательно.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Особенности режима "При проведении"</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Если у документа установлен режим <strong>При проведении</strong>, то первая версия документа будет записана в историю только после первого проведения документа. Впоследствии версии документа будут записываться при каждой записи проведенного документа. Режим позволяет не создавать версии новых и не заполненных окончательно документов, для того чтобы не увеличивать объем хранимой в приложении информации. Рекомендуется применять эту настройку для всех документов.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Особенности режима "При старте"</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Если у бизнес-процесса установлен режим <strong>При старте</strong>, то первая версия будет записана только после его старта. Режим позволяет не создавать лишние версии бизнес-процессов в то время, пока их подготавливают к запуску.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">См. также:</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html>
<ul><li><strong>Никогда</strong> - история версий объекта не ведется;</li>
<li><strong>При записи</strong> - новая запись заносится в <a href="InformationRegister.ВерсииОбъектов.Form.ВыборХранимыхВерсий/Help">историю версий</a> каждый раз при изменении (или создании нового) справочника или документа;</li>
<li><strong>При проведении (для документов)</strong> - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение;</li>
<li><strong>При старте (для бизнес-процессов)</strong> - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов;</li>
<li><strong>По умолчанию</strong> - установить рекомендуемые настройки (для справочников - никогда (не создавать версии), для документов - создавать версии при проведении, для бизнес-процессов - создавать версии при старте).</li>
</ul></li>
<li>Также возможна настройка хранения версий сразу для группы объектов приложения, например, можно выбрать все документы или справочники.</li>
</ul><h3>Выбор срока хранения версий</h3>
<ul><li>Нажмите кнопку <strong>Установить срок хранения версий</strong>, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить <strong>За последнюю неделю</strong>, <strong>За последний месяц</strong>, <strong>За последние три месяца</strong>, <strong>За последние шесть месяцев</strong>, <strong>За последний год</strong> и <strong>Бессрочно</strong>.</li>
</ul><h3>Просмотр отчета "Количество и объем хранимых версий объектов"</h3>
<ul><li>С помощью меню <strong>Еще</strong> по соответствующей ссылке можно перейти к просмотру <a href="Report.АнализВерсийОбъектов/Help">отчета</a> <strong>Количество и объем хранимых версий объектов</strong>.</li>
</ul><h3>Очистка устаревших версий</h3>
<ul><li>В поле <strong>Всего устаревших версий</strong> выдается информация о количестве и объеме устаревших версий в приложении.</li>
<li>Нажмите <strong>Очистить</strong>, для того чтобы удалить устаревшие версии. Кнопка становится доступной, если в приложении имеются устаревшие версии.</li>
<li>Для того чтобы <strong>Автоматически удалять устаревшие версии</strong>, включите соответствующий флажок.</li>
<li>Перейдите по соответствующей ссылке, для того чтобы <strong>Настроить расписание</strong>. Настроенное <a href="v8help://mngbase/jobschedule.lf">расписание</a> выводится в нижней части окна.</li>
</ul><h3>Применение хранения версий объектов</h3>
<ul><li>В начале внедрения приложения, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), хранение версий может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе.</li>
<li>Благодаря хранению версий объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния.</li>
<li>В дальнейшем, когда объемы информации в приложении возрастают, можно постепенно отказываться от хранения версий некоторых объектов вообще или вести историю версий только в важные моменты, например, при проведении документов.</li>
<li>Хранение версий большого количества объектов может привести к увеличению объема хранимой в приложении информации из-за хранения их версий, что может существенно замедлить работу приложения. Поэтому рекомендуется использовать эту возможность избирательно.</li>
</ul><h3>Особенности режима "При проведении"</h3>
<ul><li>Если у документа установлен режим <strong>При проведении</strong>, то первая версия документа будет записана в историю только после первого проведения документа. Впоследствии версии документа будут записываться при каждой записи проведенного документа. Режим позволяет не создавать версии новых и не заполненных окончательно документов, для того чтобы не увеличивать объем хранимой в приложении информации. Рекомендуется применять эту настройку для всех документов.</li>
</ul><h3>Особенности режима "При старте"</h3>
<ul><li>Если у бизнес-процесса установлен режим <strong>При старте</strong>, то первая версия будет записана только после его старта. Режим позволяет не создавать лишние версии бизнес-процессов в то время, пока их подготавливают к запуску.</li>
</ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li>
</ul></body></html>
@@ -1324,14 +1324,6 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию");
Методы.Вставить("ОбработатьДанныеДляПереходаНаНовуюВерсию");
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -554,8 +554,6 @@
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию");
Методы.Вставить("ОбработатьПользовательскиеМакеты");
Методы.Вставить("МакетыОбъектов", Истина);
КонецПроцедуры
@@ -3,18 +3,14 @@
<p>Открывается по команде <strong>Количество и объем хранимых версий объектов</strong> из <a href="InformationRegister.НастройкиВерсионированияОбъектов/Help">настроек версионирования</a>.</p>
<p>Если ограничен размер устройства, предназначенного для хранения данных приложения, с помощью отчета можно контролировать объем хранимых версий объектов в сравнении и принять решение о сокращении числа хранимых версий.</p>
<p>В отчете выводится:</p>
<ul><li>Диаграмма <strong>Объем хранимых версий по типам объектов</strong>;
</li>
<li>Диаграмма <strong>Количество хранимых версий по типам объектов</strong>;
</li>
<ul><li>Диаграмма <strong>Объем хранимых версий по типам объектов</strong>;</li>
<li>Диаграмма <strong>Количество хранимых версий по типам объектов</strong>;</li>
<li>Таблица <strong>Количество и объем хранимых версий объектов</strong> - числовые данные по количеству и объему хранимых версий объектов. Состоит из колонок:
<ul><li><strong>Тип объекта</strong> - объект приложения;
</li>
<li><strong>Количество</strong> - количество версий объекта;
</li>
<li><strong>Размер данных (Мб)</strong> - объем, занимаемый версиями объекта.</li></ul></li></ul><h3 style="MARGIN: 0cm 0cm 6pt">См. также: </h3>
<ul><li>
<div style="MARGIN: 0cm 0cm 6pt"><a href="CommonForm.ФормаОтчета/Help">Работа с отчетами</a>;</div>
</li>
<li>
<div style="MARGIN: 0cm 0cm 6pt"><a href="CommonForm.ФормаНастроекОтчета/Help">Настройки отчетов</a>.</div></li></ul></body></html>
<ul><li><strong>Тип объекта</strong> - объект приложения;</li>
<li><strong>Количество</strong> - количество версий объекта;</li>
<li><strong>Размер данных (Мб)</strong> - объем, занимаемый версиями объекта.</li>
</ul></li>
</ul><h3>См. также:</h3>
<ul><li><a href="CommonForm.ФормаОтчета/Help">Работа с отчетами</a>;</li>
<li><a href="CommonForm.ФормаНастроекОтчета/Help">Настройки отчетов</a>.</li>
</ul></body></html>
@@ -110,7 +110,7 @@
НайтиПеревыпущенныеСертификаты = Неопределено;
НайтиМЧД = Неопределено;
ПолеНовыйСертификат = Новый ПолеКомпоновкиДанных("НовыйСертификат");
ПолеМЧД = Новый ПолеКомпоновкиДанных("МЧД");
ПолеМЧД = Новый ПолеКомпоновкиДанных("МашиночитаемаяДоверенность");
Для каждого Элемент Из НастройкиКомпоновки.Выбор.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
Если Элемент.Поле = ПолеНовыйСертификат Тогда
@@ -300,7 +300,7 @@
ВыбранныеПоля);
Если Доверенности.Количество() > 0 Тогда
Строка.МЧД = Доверенности[0].МашиночитаемаяДоверенность;
Строка.МашиночитаемаяДоверенность = Доверенности[0].МашиночитаемаяДоверенность;
КонецЕсли;
КонецЕсли;
// Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности
@@ -1080,6 +1080,93 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.НастройкиРегистрацииСобытийДоступаКДанным</name>
<right>
@@ -6024,93 +6111,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой</name>
<right>
@@ -534,6 +534,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений</name>
<right>
@@ -3062,33 +3089,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИспользоватьДатуНачалаЗадач</name>
<right>
@@ -379,6 +379,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений</name>
<right>
@@ -2467,33 +2494,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИспользоватьДатуНачалаЗадач</name>
<right>
@@ -149,6 +149,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.СценарииСинхронизации</name>
<right>
@@ -1057,33 +1084,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>WebService.Exchange_3_0_2_2.Operation.Callback</name>
<right>
@@ -72,6 +72,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ПричиныИзмененияАдресныхСведений</name>
<right>
@@ -325,31 +352,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.СрокиХраненияПерсональныхДанных</name>
<right>
@@ -135,31 +162,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.ЗагрузкаКлассификатораБанков.Command.ЗагрузкаКлассификатораБанков</name>
<right>
@@ -60,31 +87,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -49,6 +49,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ПользовательскиеНастройкиОтчетов</name>
<right>
@@ -179,31 +206,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -272,6 +272,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>DocumentJournal.Взаимодействия.Command.ПозвонитьПоПредмету</name>
<right>
@@ -1429,33 +1456,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Subsystem.СтандартныеПодсистемы.Subsystem.Взаимодействия</name>
<right>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ВидыКонтактнойИнформации</name>
<right>
@@ -81,31 +108,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -14,6 +14,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.ГруппыПользователей</name>
<right>
@@ -124,31 +151,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -65,29 +65,6 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.РучныеИзмененияГрафиковРаботы</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -115,4 +92,27 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.РучныеИзмененияГрафиковРаботы</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -29,6 +29,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаЗагрузкиДанных</name>
<right>
@@ -131,33 +158,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5)</name>
<condition>// ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "")
@@ -18,6 +18,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Report.ДатыЗапретаИзменения</name>
<right>
@@ -135,33 +162,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5)</name>
<condition>// ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "")
Loaded 100 of 174 files, more files were not shown because too many files have changed in this diff. Show more