3_1_6_118

This commit is contained in:
Компания 1С committed 2022-02-16 16:31:00 +03:00
1 parent 6323e447c0
commit 3e5e0c470a
194 files changed
+6810 -1986

No files matched your search

@@ -39,6 +39,7 @@
</li>
<li>Задайте способ расчета курса валюты в соответствующем поле, например, <strong>(USD+EUR)/2</strong>.
</li>
<li>Для построения сложных формул можно использовать конструктор, который открывается с помощью кнопки  <img src="StdPicture.InputFieldSelect"></img>.</li>
<li>Допустимыми разделителями дробной части чисел в формуле являются знаки точки и запятой, т.е. правильно:
<ul><li><strong>EUR*1.025</strong>
</li>
@@ -161,7 +161,8 @@
КонецЕсли;
КонецЕсли;
Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда
Если ОбщегоНазначения.РазделениеВключено()
Или Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда
Элементы.ГруппаИзменитьОграничение.Видимость = Ложь;
КонецЕсли;
@@ -2630,7 +2630,7 @@
НовыеПодсистемы = Новый Массив;
ВсеНовыеПодсистемы = Новый Массив;
НачалоИмени = "Подсистема.СтандартныеПодсистемы.";
КлючВсеПодсистемы = "Подсистемы.";
КлючВсеПодсистемы = "Подсистема.";
Для Каждого Объект Из ОбъектыДляЗаписи Цикл
Если Не Объект.ЭтоНовый()
@@ -2643,7 +2643,7 @@
КонецЕсли;
Если ВРег(Лев(Объект.ПолноеИмя, СтрДлина(КлючВсеПодсистемы))) = ВРег(КлючВсеПодсистемы) Тогда
НовыеПодсистемы.Добавить(Объект.ПолноеИмя);
ВсеНовыеПодсистемы.Добавить(Объект.ПолноеИмя);
КонецЕсли;
КонецЦикла;
@@ -0,0 +1,3 @@
<!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>С помощью кнопки <b>Видимость в подменю "Печать"</b> можно ограничить доступность соответствующей команды печати в зависимости от значений реквизитов элементов. 
<div>Видимость команд печати нужна для того, чтобы печатная форма могла быть сформирована только для подходящего документа.
<div>Для ввода условия нажмите <b>Добавить</b>.<br><div>Выберите <b>Поле</b> документа, <b>Вид сравнения</b>, напишите или выберите <b>Значение</b>, с которым будет сравниваться поле.</div></div></div></body></html>
@@ -295,6 +295,11 @@
<key>ru</key>
<value>Условия видимости в подменю &quot;Печать&quot;</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
@@ -575,11 +575,16 @@
Если ЗначениеЗаполнено(Родитель) Тогда
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат Новый УникальныйИдентификатор(Родитель);
КонецЕсли;
Если ТипЗнч(Родитель) = Тип("Строка") Тогда
Родитель = ПолучитьСсылку(Новый УникальныйИдентификатор(Родитель));
ИначеЕсли ТипЗнч(Родитель) = Тип("УникальныйИдентификатор") Тогда
Родитель = ПолучитьСсылку(Родитель);
КонецЕсли;
КонецЕсли;
Возврат Родитель;
@@ -0,0 +1,604 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormField">
<name>ВладелецДанных</name>
<id>25</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>
<toolTip>
<key>ru</key>
<value>Имя домена-владельца данных. По этому имени определяется возможность использования аутентификации по протоколу OAuth. Например, mycompany.zzz.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ВладелецДанныхРасширеннаяПодсказка</name>
<id>27</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВладелецДанныхКонтекстноеМеню</name>
<id>26</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИмяИнтернетСервиса</name>
<id>22</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИмяИнтернетСервиса</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Доменное имя сервера, на котором хранятся данные. Например, outlook.com.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ИмяИнтернетСервисаРасширеннаяПодсказка</name>
<id>24</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИмяИнтернетСервисаКонтекстноеМеню</name>
<id>23</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АдресАвторизации</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АдресАвторизации</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Адрес для интерактивной авторизации пользователя</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>АдресАвторизацииРасширеннаяПодсказка</name>
<id>6</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресАвторизацииКонтекстноеМеню</name>
<id>5</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АдресПеренаправления</name>
<id>28</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АдресПеренаправления</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Адрес перенаправления пользователя после авторизации</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>АдресПеренаправленияРасширеннаяПодсказка</name>
<id>30</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресПеренаправленияКонтекстноеМеню</name>
<id>29</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АдресПолученияКлюча</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АдресПолученияКлюча</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Адрес для получения и обновления токенов</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>АдресПолученияКлючаРасширеннаяПодсказка</name>
<id>9</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресПолученияКлючаКонтекстноеМеню</name>
<id>8</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ЗапрашиваемыеРазрешения</name>
<id>34</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ЗапрашиваемыеРазрешения</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Идентификаторы разрешений, разделенные пробелом.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<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>
<contextMenu>
<name>ЗапрашиваемыеРазрешенияКонтекстноеМеню</name>
<id>35</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИдентификаторПриложения</name>
<id>16</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИдентификаторПриложения</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Идентификатор этого приложения на сервере с данными</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ИдентификаторПриложенияРасширеннаяПодсказка</name>
<id>18</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИдентификаторПриложенияКонтекстноеМеню</name>
<id>17</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ПарольПриложения</name>
<id>19</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПарольПриложения</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Секретный ключ доступа этого приложения к данным на сервере</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ПарольПриложенияРасширеннаяПодсказка</name>
<id>21</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПарольПриложенияКонтекстноеМеню</name>
<id>20</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<passwordMode>true</passwordMode>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ДополнительныеПараметрыАвторизации</name>
<id>37</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ДополнительныеПараметрыАвторизации</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Дополнительные параметры, которые необходимо передать в запросе авторизации. Указываются в формате ИмяПараметра=Значение, разделитель - пробел.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ДополнительныеПараметрыАвторизацииРасширеннаяПодсказка</name>
<id>39</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДополнительныеПараметрыАвторизацииКонтекстноеМеню</name>
<id>38</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ДополнительныеПараметрыПолученияТокена</name>
<id>40</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ДополнительныеПараметрыПолученияТокена</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Дополнительные параметры, которые необходимо передать в запросе обмена кода авторизации на токен доступа. Указываются в формате ИмяПараметра=Значение, разделитель - пробел.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<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>
<contextMenu>
<name>ДополнительныеПараметрыПолученияТокенаКонтекстноеМеню</name>
<id>41</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИспользоватьКлючПроверкиПодлинностиPKCE</name>
<id>31</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИспользоватьКлючПроверкиПодлинностиPKCE</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<toolTip>
<key>ru</key>
<value>Установите этот флажок, если в запросах авторизации и обмена кода авторизации на токен доступа на сервере авторизации поддерживается защита с помощью ключа проверки подлинности &quot;Proof Key for Code Exchange (PKCE)&quot;</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ИспользоватьКлючПроверкиПодлинностиPKCEРасширеннаяПодсказка</name>
<id>33</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИспользоватьКлючПроверкиПодлинностиPKCEКонтекстноеМеню</name>
<id>32</id>
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<items xsi:type="form:FormField">
<name>ИспользоватьПарольПриложения</name>
<id>43</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИспользоватьПарольПриложения</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<toolTip>
<key>ru</key>
<value>Установите этот флажок, если для получения токенов требуется передавать в запросах пароль приложения (client_secret)</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ИспользоватьПарольПриложенияРасширеннаяПодсказка</name>
<id>45</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИспользоватьПарольПриложенияКонтекстноеМеню</name>
<id>44</id>
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<windowOpeningMode>LockOwner</windowOpeningMode>
<autoSaveDataInSettings>Use</autoSaveDataInSettings>
<saveWindowSettings>true</saveWindowSettings>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>CatalogObject.НастройкиАвторизацииИнтернетСервисов</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
<savedData>true</savedData>
</attributes>
<attributes>
<name>ПарольПриложения</name>
<title>
<key>ru</key>
<value>Пароль приложения</value>
</title>
<id>4</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<settingsSavedData xsi:type="form:DataPath">
<segments>ПарольПриложения</segments>
</settingsSavedData>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:CatalogFormExtInfo"/>
</form:Form>
@@ -0,0 +1,119 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
// Возвращаемое значение:
// Структура:
// * Ссылка - СправочникСсылка.НастройкиАвторизацииИнтернетСервисов
// * ИмяИнтернетСервиса - Строка
// * ВладелецДанных - Строка
// * АдресАвторизации - Строка
// * АдресПолученияКлюча - Строка
// * АдресПеренаправления - Строка
// * ЗапрашиваемыеРазрешения - Строка
// * ИспользоватьКлючПроверкиПодлинностиPKCE - Булево
// * ИдентификаторПриложения - Строка
// * ИспользоватьПарольПриложения - Булево
// * ПарольПриложения - Строка
// * ДополнительныеПараметрыАвторизации - Строка
// * ДополнительныеПараметрыПолученияТокена - Строка
//
Функция НастройкиАвторизацииИнтернетСервиса(ИмяИнтернетСервиса, ВладелецДанных) Экспорт
НастройкиАвторизации = Новый Структура;
НастройкиАвторизации.Вставить("Ссылка");
НастройкиАвторизации.Вставить("ИмяИнтернетСервиса");
НастройкиАвторизации.Вставить("ВладелецДанных");
НастройкиАвторизации.Вставить("АдресАвторизации");
НастройкиАвторизации.Вставить("АдресПолученияКлюча");
НастройкиАвторизации.Вставить("АдресПеренаправления");
НастройкиАвторизации.Вставить("ЗапрашиваемыеРазрешения");
НастройкиАвторизации.Вставить("ИспользоватьКлючПроверкиПодлинностиPKCE");
НастройкиАвторизации.Вставить("ИдентификаторПриложения");
НастройкиАвторизации.Вставить("ИспользоватьПарольПриложения");
НастройкиАвторизации.Вставить("ПарольПриложения");
НастройкиАвторизации.Вставить("ДополнительныеПараметрыАвторизации");
НастройкиАвторизации.Вставить("ДополнительныеПараметрыПолученияТокена");
ТекстЗапроса =
"ВЫБРАТЬ
| НастройкиАвторизацииИнтернетСервисов.Ссылка,
| НастройкиАвторизацииИнтернетСервисов.АдресАвторизации,
| НастройкиАвторизацииИнтернетСервисов.АдресПолученияКлюча,
| НастройкиАвторизацииИнтернетСервисов.АдресПеренаправления,
| НастройкиАвторизацииИнтернетСервисов.ИспользоватьКлючПроверкиПодлинностиPKCE,
| НастройкиАвторизацииИнтернетСервисов.ИдентификаторПриложения,
| НастройкиАвторизацииИнтернетСервисов.ЗапрашиваемыеРазрешения,
| НастройкиАвторизацииИнтернетСервисов.ИспользоватьПарольПриложения,
| НастройкиАвторизацииИнтернетСервисов.ДополнительныеПараметрыАвторизации,
| НастройкиАвторизацииИнтернетСервисов.ДополнительныеПараметрыПолученияТокена,
| НастройкиАвторизацииИнтернетСервисов.ИмяИнтернетСервиса,
| НастройкиАвторизацииИнтернетСервисов.ВладелецДанных
|ИЗ
| Справочник.НастройкиАвторизацииИнтернетСервисов КАК НастройкиАвторизацииИнтернетСервисов
|ГДЕ
| НастройкиАвторизацииИнтернетСервисов.ВладелецДанных = &ВладелецДанных
| И НастройкиАвторизацииИнтернетСервисов.ИмяИнтернетСервиса = &ИмяИнтернетСервиса
| И НЕ НастройкиАвторизацииИнтернетСервисов.ПометкаУдаления";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ВладелецДанных", ВладелецДанных);
Запрос.УстановитьПараметр("ИмяИнтернетСервиса", ИмяИнтернетСервиса);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(НастройкиАвторизации, Выборка);
НастройкиАвторизации.ПарольПриложения = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Выборка.Ссылка, "ПарольПриложения");
КонецЕсли;
Возврат НастройкиАвторизации;
КонецФункции
// Параметры:
// НастройкиАвторизации - см. НастройкиАвторизацииИнтернетСервиса
//
Процедура ЗаписатьНастройкиАвторизации(НастройкиАвторизации) Экспорт
Если ЗначениеЗаполнено(НастройкиАвторизации.Ссылка) Тогда
НастройкиАвторизацииОбъект = НастройкиАвторизации.Ссылка.ПолучитьОбъект();
Иначе
НастройкиАвторизацииОбъект = СоздатьЭлемент();
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации.Ссылка) Тогда
Для Каждого Элемент Из НастройкиАвторизации Цикл
Если Элемент.Ключ = "Ссылка" Или Элемент.Ключ = "ПарольПриложения" Тогда
Продолжить;
КонецЕсли;
Если НастройкиАвторизацииОбъект[Элемент.Ключ] <> Элемент.Значение Тогда
НастройкиАвторизацииОбъект[Элемент.Ключ] = Элемент.Значение;
КонецЕсли;
КонецЦикла;
Иначе
ЗаполнитьЗначенияСвойств(НастройкиАвторизацииОбъект, НастройкиАвторизации, , "Ссылка");
КонецЕсли;
Если НастройкиАвторизацииОбъект.Модифицированность() Тогда
НастройкиАвторизацииОбъект.Записать();
КонецЕсли;
Если НастройкиАвторизации.ИспользоватьПарольПриложения Тогда
ПарольПриложения = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиАвторизацииОбъект.Ссылка, "ПарольПриложения");
Если ПарольПриложения <> НастройкиАвторизации.ПарольПриложения Тогда
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(НастройкиАвторизацииОбъект.Ссылка, НастройкиАвторизации.ПарольПриложения, "ПарольПриложения");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,21 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
Наименование = ВладелецДанных + " / " + ИмяИнтернетСервиса;
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
@@ -0,0 +1,309 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ffd14055-0847-48da-8807-0ba07decf6a5">
<producedTypes>
<objectType typeId="10786051-eef0-4293-9fd5-9bca70fe4b6e" valueTypeId="cc9b5b7f-c034-4275-89a1-f02c7cd004a1"/>
<refType typeId="f3b275ed-7599-4712-877a-e32d917ca3aa" valueTypeId="c719de67-cfd7-4f83-a854-8449b8353fe8"/>
<selectionType typeId="dcfbeac1-6ba6-4ee1-b4ff-2f476f682117" valueTypeId="32841d34-e475-43c5-a681-b235e4216a26"/>
<listType typeId="55d4f167-f67b-46e7-9b01-ee1d1cbe1fd0" valueTypeId="86132c10-16eb-4917-b829-030201004558"/>
<managerType typeId="2318afd5-d8fa-4e7d-9be4-e59ce5e64e5d" valueTypeId="5ac18854-cca9-444f-baea-3227067fc31c"/>
</producedTypes>
<name>НастройкиАвторизацииИнтернетСервисов</name>
<synonym>
<key>ru</key>
<value>Настройки авторизации Интернет-сервисов</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.НастройкиАвторизацииИнтернетСервисов.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>PredefinedDataName</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Predefined</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Ref</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>DeletionMark</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>IsFolder</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Owner</name>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Parent</name>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Description</name>
<synonym>
<key>ru</key>
<value>Адрес сервера с данными</value>
</synonym>
<toolTip>
<key>ru</key>
<value>Адрес сервера, предоставляющего доступ к данным по протоколу OAuth2</value>
</toolTip>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Code</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
<descriptionLength>50</descriptionLength>
<codeType>String</codeType>
<codeAllowedLength>Variable</codeAllowedLength>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
<defaultObjectForm>Catalog.НастройкиАвторизацииИнтернетСервисов.Form.ФормаЭлемента</defaultObjectForm>
<attributes uuid="ee808b7e-8313-4838-8a5a-9b49e3ce7e3e">
<name>ВладелецДанных</name>
<synonym>
<key>ru</key>
<value>Владелец данных</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>200</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="a8450a10-c18c-4b99-828b-870f38c32991">
<name>АдресАвторизации</name>
<synonym>
<key>ru</key>
<value>Адрес авторизации</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<toolTip>
<key>ru</key>
<value>Адрес для получения кода авторизации</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ad5e61a9-2f12-4629-9d7b-7882cc885992">
<name>АдресПолученияКлюча</name>
<synonym>
<key>ru</key>
<value>Адрес получения ключа</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<toolTip>
<key>ru</key>
<value>Адрес для получения и обновления ключей доступа</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="68a66e43-123c-4dc4-8eb7-3b728a6dbf40">
<name>ИмяИнтернетСервиса</name>
<synonym>
<key>ru</key>
<value>Имя интернет сервиса</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>200</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="b016e858-7a3b-473a-a9b7-a6c718d0a028">
<name>ИдентификаторПриложения</name>
<synonym>
<key>ru</key>
<value>Идентификатор приложения</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="7db81d96-e359-4157-b5cb-3b50622d6556">
<name>АдресПеренаправления</name>
<synonym>
<key>ru</key>
<value>Адрес перенаправления</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="aa09ff66-3f4a-4746-9a99-697a2915b3fc">
<name>ИспользоватьКлючПроверкиПодлинностиPKCE</name>
<synonym>
<key>ru</key>
<value>Использовать ключ проверки подлинности (PKCE)</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="21305c37-31fb-46f3-85bc-8743c22faa02">
<name>ЗапрашиваемыеРазрешения</name>
<synonym>
<key>ru</key>
<value>Запрашиваемые разрешения</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="c5bace94-8fbc-4ad1-9567-a41332e8f00a">
<name>ИспользоватьПарольПриложения</name>
<synonym>
<key>ru</key>
<value>Использовать пароль приложения</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="9fc40f79-c538-4ea5-a939-67bdd540d805">
<name>ДополнительныеПараметрыАвторизации</name>
<synonym>
<key>ru</key>
<value>Дополнительные параметры авторизации</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="70443b2a-04db-4573-a4ea-e35078b383d7">
<name>ДополнительныеПараметрыПолученияТокена</name>
<synonym>
<key>ru</key>
<value>Дополнительные параметры получения токена</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<forms uuid="a4814357-6575-4a55-808f-4a4c94047110">
<name>ФормаЭлемента</name>
<synonym>
<key>ru</key>
<value>Форма элемента</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:Catalog>
@@ -906,7 +906,7 @@
<textSize>Normal</textSize>
<inputHint>
<key>ru</key>
<value>Введите имя пользователя</value>
<value>Введите имя, адрес, телефон...</value>
</inputHint>
</extInfo>
</items>
@@ -2792,9 +2792,6 @@
<segments>ВыбранныеПользователиИГруппы</segments>
</dataPath>
<titleLocation>Top</titleLocation>
<excludedCommands>Add</excludedCommands>
<excludedCommands>Change</excludedCommands>
<excludedCommands>Copy</excludedCommands>
<excludedCommands>EndEdit</excludedCommands>
<excludedCommands>MoveDown</excludedCommands>
<excludedCommands>MoveUp</excludedCommands>
@@ -2811,6 +2808,7 @@
<dataPath xsi:type="form:DataPath">
<segments>ВыбранныеПользователиИГруппы.Пользователь</segments>
</dataPath>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>ПользователиИГруппыExtendedTooltip</name>
<id>129</id>
@@ -2827,8 +2825,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<readOnly>true</readOnly>
<editMode>Auto</editMode>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
@@ -2837,7 +2834,9 @@
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<choiceListButton>false</choiceListButton>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<openButton>false</openButton>
<quickChoice>true</quickChoice>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
@@ -2848,13 +2847,21 @@
<id>80</id>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnEditEnd</event>
<name>СписокВыбранныхПользователейИГруппПриОкончанииРедактирования</name>
</handlers>
<handlers>
<event>Selection</event>
<name>СписокВыбранныхПользователейИГруппВыбор</name>
</handlers>
<handlers>
<event>BeforeAddRow</event>
<name>СписокВыбранныхПользователейИГруппПередНачаломДобавления</name>
<event>OnActivateRow</event>
<name>СписокВыбранныхПользователейИГруппПриАктивизацииСтроки</name>
</handlers>
<handlers>
<event>OnStartEdit</event>
<name>СписокВыбранныхПользователейИГруппПриНачалеРедактирования</name>
</handlers>
<searchStringAddition>
<name>СписокВыбранныхПользователейИГруппСтрокаПоиска</name>
@@ -3734,8 +3741,6 @@
</title>
<id>1</id>
<valueType>
<types>CatalogRef.ВнешниеПользователи</types>
<types>CatalogRef.ГруппыВнешнихПользователей</types>
<types>CatalogRef.ГруппыПользователей</types>
<types>CatalogRef.Пользователи</types>
</valueType>
@@ -38,7 +38,7 @@
ВыбиратьИерархически = Истина;
Элементы.ГруппаКоманднаяПанельВыбора.Видимость = Ложь;
ЗаполнитьХранимыеПараметры();
ХранимыеПараметры = ХранимыеПараметры();
Если Параметры.РежимВыбора Тогда
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор");
@@ -88,10 +88,7 @@
НастроитьПараметрыСпискаПользователейДляКомандыУстановитьПароль();
НастроитьПорядокГруппыВсеПользователи(ГруппыПользователей);
ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор);
Элементы.ВыбранныеПользователиИГруппы.Видимость = ХранимыеПараметры.РасширенныйПодбор;
ХранимыеПараметры.Вставить(
"ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда
@@ -131,7 +128,7 @@
Элементы.ГруппаКоманднаяПанельВыбора.Видимость = Истина;
Элементы.ПользователиСписок.ПоискПриВводе = ПоискВТаблицеПриВводе.НеИспользовать;
Элементы.ГруппыПользователей.ПоискПриВводе = ПоискВТаблицеПриВводе.НеИспользовать;
ТекущийЭлемент = Элементы.СписокВыбранныхПользователейИГрупп;
Элементы.ЗавершитьИЗакрыть.Заголовок = НСтр("ru='Завершить и закрыть'");
КонецЕсли;
@@ -151,8 +148,6 @@
"ВыбратьГруппуПользователей", "Видимость", Ложь);
КонецЕсли;
ХранимыеПараметры.Вставить("ГруппаВсеПользователи", Справочники.ГруппыПользователей.ВсеПользователи);
ХранимыеПараметры.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока);
НастроитьФормуПоИспользованиюГруппПользователей();
ХранимыеПараметры.Удалить("ТекущаяСтрока");
@@ -208,7 +203,7 @@
КонецЕсли;
#Если МобильныйКлиент Тогда
Если ХранимыеПараметры.Свойство("ИспользоватьГруппы") И ХранимыеПараметры.ИспользоватьГруппы Тогда
Если ХранимыеПараметры.ИспользоватьГруппы Тогда
Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыПользователей.ТекущиеДанные.Ссылка);
КонецЕсли;
#КонецЕсли
@@ -271,11 +266,11 @@
&НаКлиенте
Процедура СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
СтрокаПоискаТекст = Текст;
ПодключитьОбработчикОжидания("СтрокаПоискаОчисткаЗавершение", 0.1, Истина);
ПодключитьОбработчикОжидания("СтрокаПоискаЗавершение", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаОчисткаЗавершение()
Процедура СтрокаПоискаЗавершение()
Если НЕ ЗначениеЗаполнено(СтрокаПоискаТекст) Тогда
Элементы.СтраницыВыбораПользователей.ТекущаяСтраница = Элементы.СтраницаВыборПользователейИГрупп;
@@ -310,11 +305,8 @@
| ПользователиКонтактнаяИнформация.Представление ПОДОБНО &СтрокаПоиска";
Запрос.УстановитьПараметр("СтрокаПоиска", СтрокаПоискаТекст+"%");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОтборПоКонтактнойИнформации.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
@@ -631,8 +623,27 @@
КонецПроцедуры
&НаКлиенте
Процедура СписокВыбранныхПользователейИГруппПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Процедура СписокВыбранныхПользователейИГруппПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
Элемент.ТекущиеДанные.НомерКартинки = 1;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокВыбранныхПользователейИГруппПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
СписокВыбранныхПользователейИзменен = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СписокВыбранныхПользователейИГруппПриАктивизацииСтроки(Элемент)
ОбновитьКонтактнуюИнформациюПользователя(Элемент);
КонецПроцедуры
#КонецОбласти
@@ -863,12 +874,20 @@
Процедура ОбновитьКонтактнуюИнформациюПользователя(ЭлементСписок)
ТекущиеДанные = ЭлементСписок.ТекущиеДанные;
Если НЕ СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(ЭлементСписок) Тогда
Если ТекущиеДанные = Неопределено Тогда
ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, Неопределено);
Возврат;
КонецЕсли;
Если ЭлементСписок = Элементы.СписокВыбранныхПользователейИГрупп Тогда
ТекущийПользователь = ТекущиеДанные.Пользователь;
ИначеЕсли НЕ СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(ЭлементСписок) Тогда
ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, Неопределено);
Возврат;
Иначе
ТекущийПользователь = ТекущиеДанные.Ссылка;
КонецЕсли;
ПодключитьОбработчикОжидания("ОбновитьКонтактнуюИнформациюПользователяЗавершение", 0.1, Истина);
КонецПроцедуры
@@ -922,13 +941,30 @@
Возврат КонтактнаяИнформация;
КонецФункции
// Возвращаемое значение:
// Структура:
// * ВыборГруппПользователей - Булево
// * РасширенныйПодбор - Булево
// * ИспользоватьГруппы - Произвольный
// * ГруппаВсеПользователи - СправочникСсылка.ГруппыПользователей
// * ТекущаяСтрока - СправочникСсылка, Неопределено
// * ЗаголовокФормыПодбора - Строка
// * ЗаголовокКнопкиЗавершенияПодбора - Строка
//
&НаСервере
Процедура ЗаполнитьХранимыеПараметры()
Функция ХранимыеПараметры()
ХранимыеПараметры = Новый Структура;
ХранимыеПараметры.Вставить("ВыборГруппПользователей", Параметры.ВыборГруппПользователей);
Результат = Новый Структура;
Результат.Вставить("ВыборГруппПользователей", Параметры.ВыборГруппПользователей);
Результат.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор);
Результат.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
Результат.Вставить("ГруппаВсеПользователи", Справочники.ГруппыПользователей.ВсеПользователи);
Результат.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока);
Результат.Вставить("ЗаголовокФормыПодбора", "");
Результат.Вставить("ЗаголовокКнопкиЗавершенияПодбора", "");
Возврат Результат;
КонецПроцедуры
КонецФункции
&НаСервере
Процедура ОформитьИСкрытьНедействительныхПользователей()
@@ -1093,10 +1129,10 @@
КонецЦикла;
КонецЕсли;
Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки");
ХранимыеПараметры.Вставить("ЗаголовокФормыПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора);
ХранимыеПараметры.ЗаголовокФормыПодбора = ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора;
Если ПараметрыРасширеннойФормыПодбора.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда
ХранимыеПараметры.Вставить("ЗаголовокКнопкиЗавершенияПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокКнопкиЗавершенияПодбора);
ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора = ПараметрыРасширеннойФормыПодбора.ЗаголовокКнопкиЗавершенияПодбора;
КонецЕсли;
// Установка параметров расширенной формы подбора.
@@ -1182,10 +1218,10 @@
Процедура НастроитьФормуПоИспользованиюГруппПользователей(ИзменилосьИспользованиеГрупп = Ложь)
Если ИзменилосьИспользованиеГрупп Тогда
ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
ХранимыеПараметры.ИспользоватьГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей");
КонецЕсли;
ТекущиеХранимыеПараметры = ХранимыеПараметры; // Структура
ТекущиеХранимыеПараметры = ХранимыеПараметры; // см. ХранимыеПараметры
Если ТекущиеХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда
Если ТипЗнч(ТекущиеХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
@@ -1195,7 +1231,7 @@
Иначе
Параметры.ТекущаяСтрока = Неопределено;
КонецЕсли;
Иначе
ИначеЕсли ТипЗнч(ТекущиеХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") Тогда
ТекущийЭлемент = Элементы.ПользователиСписок;
Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи;
КонецЕсли;
@@ -1267,7 +1303,7 @@
Если ХранимыеПараметры.РасширенныйПодбор Тогда
Заголовок = ХранимыеПараметры.ЗаголовокФормыПодбора;
Если ХранимыеПараметры.Свойство("ЗаголовокКнопкиЗавершенияПодбора") Тогда
Если Не ПустаяСтрока(ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ЗавершитьИЗакрытьВыбор", "Заголовок", ХранимыеПараметры.ЗаголовокКнопкиЗавершенияПодбора);
КонецЕсли;
@@ -1311,7 +1347,7 @@
КонецЕсли;
#Если МобильныйКлиент Тогда
Если ХранимыеПараметры.Свойство("РасширенныйПодбор") И Не ХранимыеПараметры.РасширенныйПодбор Тогда
Если Не ХранимыеПараметры.РасширенныйПодбор Тогда
Элементы.ГруппаГруппы.Заголовок = Строка(Элементы.ГруппыПользователей.ТекущиеДанные.Ссылка);
ТекущийЭлемент = Элементы.ПользователиСписок;
КонецЕсли;
@@ -1369,7 +1405,7 @@
ПоказатьПредупреждение(,СообщениеПользователю.Сообщение);
КонецЕсли;
Оповестить("Запись_ГруппыВнешнихПользователей");
Оповестить("Запись_ГруппыПользователей");
КонецПроцедуры
@@ -196,7 +196,8 @@
ОбновитьВидимостьРеквизитаПоказыватьВСпискеВыбора();
Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда
Если ОбщегоНазначения.РазделениеВключено()
Или Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда
Элементы.ГруппаИзменитьОграничение.Видимость = Ложь;
КонецЕсли;
@@ -313,21 +314,15 @@
ОчиститьСообщения();
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
Если ЗначениеЗаполнено(ИмяРеквизитаСПочтойДляВосстановленияПароля)
И ПользовательИБАдресЭлектроннойПочты <> ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля] Тогда
Если ПарольДляПодтвержденияИзмененияПочты = Неопределено Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура("ПараметрыЗаписи", ПараметрыЗаписи);
Оповещение = Новый ОписаниеОповещения("ПослеЗапросаПароляДляИзмененияПочты", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму("Справочник.Пользователи.Форма.ВводПароля",, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -66,7 +66,7 @@
ДополнительныеДанные.НеподписанныеДанные = Неопределено;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
КонецПроцедуры
@@ -739,6 +739,9 @@
ПараметрыДействия.Вставить("НазначениеРолей",
УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(Объект));
ПараметрыДействия.Вставить("СтандартныеРолиРасширений",
УправлениеДоступомСлужебныйПовтИсп.ОписаниеСтандартныхРолейРасширенийСеанса().РолиСеанса);
ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
КонецПроцедуры
@@ -360,6 +360,53 @@
КонецПроцедуры
// Параметры:
// РолиПрофиля - Массив из Строка - имена ролей.
// - ТабличнаяЧасть:
// * Роль - СправочникСсылка.ИдентификаторыОбъектовМетаданных
// - СправочникСсылка.ИдентификаторыОбъектовРасширений
// - ДанныеФормыКоллекция:
// * Роль - Строка - имя роли.
//
Процедура ЗаполнитьСтандартныеРолиРасширений(РолиПрофиля, СтандартныеРолиРасширений = Неопределено) Экспорт
Если СтандартныеРолиРасширений = Неопределено Тогда
СтандартныеРолиРасширений = УправлениеДоступомСлужебный.СтандартныеРолиРасширений();
КонецЕсли;
СтандартныеРолиПрофиля = СтандартныеРолиПрофиля(РолиПрофиля);
// АдминистраторСистемы.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.АдминистраторСистемы,
СтандартныеРолиПрофиля.АдминистраторСистемы);
// ПолныеПрава.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.ПолныеПрава,
СтандартныеРолиПрофиля.ПолныеПрава);
// БазовыеПраваБСП.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.БазовыеПрава,
СтандартныеРолиПрофиля.БазовыеПраваБСП);
// БазовыеПраваВнешнихПользователейБСП.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.БазовыеПраваВнешнихПользователей,
СтандартныеРолиПрофиля.БазовыеПраваВнешнихПользователейБСП);
// Общие права.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.ОбщиеПрава,
СтандартныеРолиПрофиля.ПолныеПрава
Или СтандартныеРолиПрофиля.БазовыеПраваБСП
Или СтандартныеРолиПрофиля.БазовыеПраваВнешнихПользователейБСП);
// Очистка удаленных.
ОчиститьУдаленныеСтандартныеРолиРасширений(РолиПрофиля);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1089,45 +1136,6 @@
КонецПроцедуры
Процедура ЗаполнитьСтандартныеРолиРасширений(РолиПрофиля, СтандартныеРолиРасширений = Неопределено) Экспорт
Если СтандартныеРолиРасширений = Неопределено Тогда
СтандартныеРолиРасширений = УправлениеДоступомСлужебный.СтандартныеРолиРасширений();
КонецЕсли;
СтандартныеРолиПрофиля = СтандартныеРолиПрофиля(РолиПрофиля);
// АдминистраторСистемы.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.АдминистраторСистемы,
СтандартныеРолиПрофиля.АдминистраторСистемы);
// ПолныеПрава.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.ПолныеПрава,
СтандартныеРолиПрофиля.ПолныеПрава);
// БазовыеПраваБСП.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.БазовыеПрава,
СтандартныеРолиПрофиля.БазовыеПраваБСП);
// БазовыеПраваВнешнихПользователейБСП.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.БазовыеПраваВнешнихПользователей,
СтандартныеРолиПрофиля.БазовыеПраваВнешнихПользователейБСП);
// Общие права.
УстановитьРолиВПрофиле(РолиПрофиля,
СтандартныеРолиРасширений.ОбщиеПрава,
СтандартныеРолиПрофиля.ПолныеПрава
Или СтандартныеРолиПрофиля.БазовыеПраваБСП
Или СтандартныеРолиПрофиля.БазовыеПраваВнешнихПользователейБСП);
// Очистка удаленных.
ОчиститьУдаленныеСтандартныеРолиРасширений(РолиПрофиля);
КонецПроцедуры
// Для процедуры ОбновитьСтандартныеРолиРасширений.
Функция СтандартныеРолиПрофиля(РолиПрофиля)
@@ -1157,6 +1165,11 @@
Если РолиПрофиля.Найти(Роль.Имя) <> Неопределено Тогда
Результат = Истина;
КонецЕсли;
ИначеЕсли ТипЗнч(РолиПрофиля) = Тип("ДанныеФормыКоллекция") Тогда
Отбор = Новый Структура("Роль", Роль.Имя);
Если РолиПрофиля.НайтиСтроки(Отбор).Количество() > 0 Тогда
Результат = Истина;
КонецЕсли;
Иначе
ИдентификаторРоли = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Роль.ПолноеИмя());
@@ -1186,6 +1199,18 @@
РолиПрофиля.Удалить(ИндексРоли);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(РолиПрофиля) = Тип("ДанныеФормыКоллекция") Тогда
Для Каждого ИмяРоли Из ИменаРолей Цикл
Отбор = Новый Структура("Роль", ИмяРоли);
НайденныеСтроки = РолиПрофиля.НайтиСтроки(Отбор);
Установлена = НайденныеСтроки.Количество() > 0;
Если Установить И Не Установлена Тогда
РолиПрофиля.Добавить().Роль = ИмяРоли;
ИначеЕсли Не Установить И Установлена Тогда
НайденнаяСтрока = НайденныеСтроки[0]; // ДанныеФормыЭлементКоллекции
РолиПрофиля.Удалить(НайденнаяСтрока);
КонецЕсли;
КонецЦикла;
Иначе
СтрокаПолныхИменРолей = "Роль." + СтрСоединить(ИменаРолей, Символы.ПС + "Роль.");
ПолныеИменаРолей = СтрРазделить(СтрокаПолныхИменРолей, Символы.ПС);
@@ -1207,7 +1232,8 @@
Процедура ОчиститьУдаленныеСтандартныеРолиРасширений(РолиПрофиля)
Если ТипЗнч(РолиПрофиля) = Тип("Массив") Тогда
Если ТипЗнч(РолиПрофиля) = Тип("Массив")
Или ТипЗнч(РолиПрофиля) = Тип("ДанныеФормыКоллекция") Тогда
Возврат;
КонецЕсли;
@@ -171,7 +171,7 @@
Элементы.ГруппаТребуетсяПомощь.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
КонецПроцедуры
@@ -498,7 +498,8 @@
ПроверитьВСервисеВместоПроверкиНаСервере = СтандартныеПроверки
И ПроверятьЭлектронныеПодписиНаСервере
И (ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса);
И (ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса)
И Не ОперацииНаСервере;
Если ПроверитьВСервисеВместоПроверкиНаСервере Тогда
@@ -82,7 +82,6 @@
<value>Строковое представление контакта взаимодействий</value>
</toolTip>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@@ -108,10 +108,6 @@
<key>ru</key>
<value>Учетная запись DSS</value>
</objectPresentation>
<listPresentation>
<key>ru</key>
<value>Учетные записи DSS</value>
</listPresentation>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
<owners>Catalog.ЭкземплярыСервераDSS</owners>
@@ -298,6 +298,59 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Группа1</name>
<id>298</id>
<items xsi:type="form:FormField">
<name>СпособАутентификацииПароль</name>
<id>302</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособАутентификацииПриИзменении</name>
</handlers>
<extendedTooltip>
<name>СпособАутентификацииПарольРасширеннаяПодсказка</name>
<id>304</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособАутентификацииПарольКонтекстноеМеню</name>
<id>303</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<columnsCount>1</columnsCount>
<choiceList>
<presentation>
<key>ru</key>
<value>Ввести пароль:</value>
</presentation>
<value xsi:type="core:StringValue">
<value>Пароль</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Пароль</name>
<id>47</id>
@@ -313,6 +366,7 @@
<dataPath xsi:type="form:DataPath">
<segments>ПарольДляПолученияПисем</segments>
</dataPath>
<titleLocation>None</titleLocation>
<titleHeight>1</titleHeight>
<handlers>
<event>OnChange</event>
@@ -366,6 +420,85 @@
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа1</value>
</title>
<extendedTooltip>
<name>Группа1РасширеннаяПодсказка</name>
<id>299</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>СпособАутентификацииПочтовыйСервис</name>
<id>305</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособАутентификацииПриИзменении</name>
</handlers>
<extendedTooltip>
<name>СпособАутентификацииПочтовыйСервисРасширеннаяПодсказка</name>
<id>307</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособАутентификацииПочтовыйСервисКонтекстноеМеню</name>
<id>306</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<columnsCount>1</columnsCount>
<choiceList>
<presentation>
<key>ru</key>
<value>Авторизоваться с помощью почтового сервиса</value>
</presentation>
<value xsi:type="core:StringValue">
<value>OAuth</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Аутентификация</value>
@@ -1432,6 +1565,379 @@
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>НастройкиАвторизацииПриложения</name>
<id>310</id>
<items xsi:type="form:Decoration">
<name>ПояснениеПоРегистрацииПриложения</name>
<id>347</id>
<title>
<key>ru</key>
<value>Для авторизации средствами почтового сервиса необходимо зарегистрировать это приложение в почтовом сервисе.
</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПояснениеПоРегистрацииПриложенияРасширеннаяПодсказка</name>
<id>349</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПояснениеПоРегистрацииПриложенияКонтекстноеМеню</name>
<id>348</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ПояснениеПоАдресуПеренаправления</name>
<id>312</id>
<title>
<key>ru</key>
<value>
Из настроек регистрации приложения заполните следующие поля:
</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПояснениеПоАдресуПеренаправленияРасширеннаяПодсказка</name>
<id>314</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПояснениеПоАдресуПеренаправленияКонтекстноеМеню</name>
<id>313</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АдресПеренаправления</name>
<id>321</id>
<title>
<key>ru</key>
<value>Адрес перенаправления (redirect_uri)</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>АдресПеренаправления</segments>
</dataPath>
<extendedTooltip>
<name>АдресПеренаправленияРасширеннаяПодсказка</name>
<id>323</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресПеренаправленияКонтекстноеМеню</name>
<id>322</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ПояснениеПоИдентификаторуПриложения</name>
<id>330</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПояснениеПоИдентификаторуПриложенияРасширеннаяПодсказка</name>
<id>332</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПояснениеПоИдентификаторуПриложенияКонтекстноеМеню</name>
<id>331</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИдентификаторПриложения</name>
<id>315</id>
<title>
<key>ru</key>
<value>Идентификатор приложения (client_id)</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ИдентификаторПриложения</segments>
</dataPath>
<extendedTooltip>
<name>ИдентификаторПриложенияРасширеннаяПодсказка</name>
<id>317</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИдентификаторПриложенияКонтекстноеМеню</name>
<id>316</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ПояснениеПоПаролюПриложения</name>
<id>333</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПояснениеПоПаролюПриложенияРасширеннаяПодсказка</name>
<id>335</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПояснениеПоПаролюПриложенияКонтекстноеМеню</name>
<id>334</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ПарольПриложения</name>
<id>318</id>
<title>
<key>ru</key>
<value>Пароль приложения (client_secret)</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПарольПриложения</segments>
</dataPath>
<extendedTooltip>
<name>ПарольПриложенияРасширеннаяПодсказка</name>
<id>320</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПарольПриложенияКонтекстноеМеню</name>
<id>319</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа2</value>
</title>
<extendedTooltip>
<name>НастройкиАвторизацииПриложенияРасширеннаяПодсказка</name>
<id>311</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Авторизация</name>
<id>308</id>
<items xsi:type="form:FormField">
<name>ВебСтраница</name>
<id>327</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>329</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВебСтраницаКонтекстноеМеню</name>
<id>328</id>
<autoFill>true</autoFill>
</contextMenu>
<type>HTMLDocumentField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:HtmlFieldExtInfo">
<handlers>
<event>DocumentComplete</event>
<name>ВебСтраницаДокументСформирован</name>
</handlers>
<width>50</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа2</value>
</title>
<extendedTooltip>
<name>АвторизацияРасширеннаяПодсказка</name>
<id>309</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ПроверкаНастроекУчетнойЗаписи</name>
<id>34</id>
@@ -2855,6 +3361,187 @@ vasyapupkin@example.com завершена.</value>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СпособАутентификации</name>
<title>
<key>ru</key>
<value>Способ аутентификации</value>
</title>
<id>44</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ИдентификаторПриложения</name>
<title>
<key>ru</key>
<value>Идентификатор приложения</value>
</title>
<id>45</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПарольПриложения</name>
<title>
<key>ru</key>
<value>Ключ доступа приложения</value>
</title>
<id>46</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>АдресПеренаправления</name>
<title>
<key>ru</key>
<value>Адрес перенаправления</value>
</title>
<id>47</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ВебСтраница</name>
<title>
<key>ru</key>
<value>Веб страница</value>
</title>
<id>48</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ИдентификаторЗапроса</name>
<id>49</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПроверочныйКод</name>
<id>50</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТокенДоступа</name>
<id>51</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТокенОбновления</name>
<id>52</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СрокДействияТокенаДоступа</name>
<id>53</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>НастройкиАвторизации</name>
<id>55</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТолькоАвторизация</name>
<id>57</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Назад</name>
<title>
@@ -2931,6 +3618,20 @@ vasyapupkin@example.com завершена.</value>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ВойтиСПомощьюСервераАвторизации</name>
<title>
<key>ru</key>
<value>Войти с помощью сервера авторизации</value>
</title>
<id>5</id>
<use>
<common>true</common>
</use>
<representation>TextPicture</representation>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>КонтекстныйРежим</name>
<valueType>
@@ -2943,6 +3644,12 @@ vasyapupkin@example.com завершена.</value>
<types>Boolean</types>
</valueType>
</parameters>
<parameters>
<name>ТолькоАвторизация</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -46,13 +46,16 @@
КлючСохраненияПоложенияОкна = ?(КонтекстныйРежим, "КонтекстныйРежим", "НеконтекстныйРежим");
СпособАутентификации = "Пароль";
Если Параметры.Свойство("Ключ") Тогда
УчетнаяЗаписьСсылка = Параметры.Ключ;
ТекстЗапроса =
"ВЫБРАТЬ
| УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты,
| УчетныеЗаписиЭлектроннойПочты.ИмяПользователя КАК ИмяОтправителяПисем,
| УчетныеЗаписиЭлектроннойПочты.Наименование КАК НазваниеУчетнойЗаписи
| УчетныеЗаписиЭлектроннойПочты.Наименование КАК НазваниеУчетнойЗаписи,
| УчетныеЗаписиЭлектроннойПочты.АвторизацияСПомощьюПочтовогоСервиса
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
@@ -62,6 +65,24 @@
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка);
ТолькоАвторизация = Параметры.ТолькоАвторизация;
Если Выборка.АвторизацияСПомощьюПочтовогоСервиса Или ТолькоАвторизация Тогда
СпособАутентификации = "OAuth";
Элементы.Пароль.Доступность = Ложь;
Если ТолькоАвторизация Тогда
НастройкиАвторизации = НастройкиАвторизацииНаПочтовомСервере();
Если ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
ИдентификаторПриложения = НастройкиАвторизации.ИдентификаторПриложения;
АдресПеренаправления = НастройкиАвторизации.АдресПеренаправления;
ПарольПриложения = НастройкиАвторизации.ПарольПриложения;
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.Авторизация;
Иначе
Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкиАвторизацииПриложения;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
СсылкаНовойУчетнойЗаписи = Справочники.УчетныеЗаписиЭлектроннойПочты.ПолучитьСсылку();
@@ -89,11 +110,20 @@
ТребуетсяАвторизацияПриОтправкеПисем = Истина;
АдресПеренаправления = "http://localhost/oauth2";
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
НастроитьЭлементыТекущейСтраницы()
Если ТолькоАвторизация Тогда
УстановитьТекстыПоясненийПоРегистрацииПриложения();
АвторизоватьсяНаПочтовомСервере();
КонецЕсли;
НастроитьЭлементыТекущейСтраницы();
КонецПроцедуры
&НаКлиенте
@@ -184,6 +214,11 @@
КонецПроцедуры
&НаКлиенте
Процедура СпособАутентификацииПриИзменении(Элемент)
Элементы.Пароль.Доступность = СпособАутентификации = "Пароль";
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -210,6 +245,8 @@
Если ПредыдущаяСтраница <> Неопределено Тогда
Элементы.Страницы.ТекущаяСтраница = ПредыдущаяСтраница;
Иначе
Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи;
КонецЕсли;
НастроитьЭлементыТекущейСтраницы()
@@ -259,7 +296,31 @@
Если Не Отказ И Не НастройкиЗаполнены Тогда
ЗаполнитьНастройкиУчетнойЗаписи();
КонецЕсли;
Если СпособНастройки = "Автоматически" Или ПроверкаЗавершиласьСОшибками Тогда
Если СпособАутентификации = "OAuth" Тогда
ПроверкаЗавершиласьСОшибками = Ложь;
СледующаяСтраница = Элементы.НастройкиАвторизацииПриложения;
НастройкиАвторизации = НастройкиАвторизацииНаПочтовомСервере();
Если ЗначениеЗаполнено(НастройкиАвторизации.АдресАвторизации) Тогда
УстановитьТекстыПоясненийПоРегистрацииПриложения();
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
ИдентификаторПриложения = НастройкиАвторизации.ИдентификаторПриложения;
АдресПеренаправления = НастройкиАвторизации.АдресПеренаправления;
ПарольПриложения = НастройкиАвторизации.ПарольПриложения;
АвторизоватьсяНаПочтовомСервере();
СледующаяСтраница = Элементы.Авторизация;
ИначеЕсли Не ЗначениеЗаполнено(НастройкиАвторизации.АдресАвторизации) Тогда
СообщенияОбОшибках = НСтр("ru = 'Не найдены настройки авторизации почтового сервиса. Используйте авторизацию по паролю.'");
ПроверкаЗавершиласьСОшибками = Истина;
СпособАутентификации = "Пароль";
СледующаяСтраница = Элементы.НастройкаУчетнойЗаписи;
КонецЕсли;
ИначеЕсли ПроверкаЗавершиласьСОшибками Тогда
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
Иначе
Если СпособНастройки = "Автоматически" Тогда
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
Иначе
Если ИспользоватьДляОтправки Или ИспользоватьДляПолучения Тогда
@@ -268,6 +329,34 @@
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.НастройкиАвторизацииПриложения Тогда
АвторизоватьсяНаПочтовомСервере();
СледующаяСтраница = Элементы.Авторизация;
ИначеЕсли ТекущаяСтраница = Элементы.Авторизация Тогда
Если ТолькоАвторизация Тогда
ТребуетсяПодтверждениеЗакрытияФормы = Ложь;
Если ПроверкаЗавершиласьСОшибками Тогда
Закрыть(Ложь);
Иначе
ЗаписатьНастройкиАвторизации();
Закрыть(Истина);
КонецЕсли;
Возврат;
КонецЕсли;
Если ПроверкаЗавершиласьСОшибками Тогда
СледующаяСтраница = Элементы.НастройкаУчетнойЗаписи;
Иначе
Если СпособНастройки = "Автоматически" Тогда
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
Иначе
Если ИспользоватьДляОтправки Или ИспользоватьДляПолучения Тогда
СледующаяСтраница = Элементы.НастройкаСервераИсходящейПочты;
Иначе
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда
СледующаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи;
ИначеЕсли ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи Тогда
@@ -311,6 +400,69 @@
КонецПроцедуры
&НаКлиенте
Процедура УстановитьТекстыПоясненийПоРегистрацииПриложения()
ПояснениеПоРегистрацииПриложения = Элементы.ПояснениеПоРегистрацииПриложения.Заголовок;
ПояснениеПоАдресуПеренаправления = Элементы.ПояснениеПоАдресуПеренаправления.Заголовок;
ПояснениеПоИдентификаторуПриложения = Элементы.ПояснениеПоИдентификаторуПриложения.Заголовок;
ПояснениеПоПаролюПриложения = Элементы.ПояснениеПоПаролюПриложения.Заголовок;
Если НРег(НастройкиАвторизации.ИмяИнтернетСервиса) = "yandex.ru" Тогда
ПояснениеПоАдресуПеренаправления = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
"1. Перейдите в раздел <a href=""https://oauth.yandex.ru"">Доступ к вашим данным на Яндексе</a> и нажмите на кнопку <b>Зарегистрировать новое приложение</b>.
|2. В поле <b>Название приложения</b> введите название приложения или организации, например, ""Бухгалтерия ООО Ромашка"".
|3. В разделе <b>Платформы</b> установите флажок в строке <b>Веб-сервисы</b>, поле <b>Callback URI #1</b> скопируйте из поля ниже:");
ПояснениеПоИдентификаторуПриложения = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
"4. В списке <b>Доступы</b> найдите и разверните группу <b>Яндекс.Почта</b>, отметьте все флажки.
|5. Нажмите на кнопку <b>Создать приложение</b> внизу страницы.
|6. Скопируйте <b>ID</b> и <b>Пароль</b> в программу в соответствующие поля ниже:");
ПояснениеПоПаролюПриложения = "";
ПсевдонимАдресаПеренаправления = "Callback URI #1";
ПсевдонимИдентификатораПриложения = "ID";
ПсевдонимПароляПриложения = "Пароль";
ИначеЕсли НРег(НастройкиАвторизации.ИмяИнтернетСервиса) = "office365.com" Тогда
ПояснениеПоАдресуПеренаправления = СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр(
"ru = '1. Перейдите в раздел <a href=""%1"">Все службы - Регистрация приложений</a> и нажмите на кнопку Новая регистрация.
|2. В поле <b>Имя</b> введите название приложения или организации, например ""Бухгалтерия ООО Ромашка"".
|3. Переключатель <b>Поддерживаемые типы учетных записей</b> установите в положение <b>Учетные записи в любом каталоге организации (любой каталог Azure AD — мультитенантный)</b>.
|4. Выберите <b>URI перенаправления</b>: платформа - <b>Общедоступный/собственный клиент (мобильный или классический)</b>, адрес перенаправления (URI) скопируйте из поля ниже:'"),
"https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade");
ПояснениеПоИдентификаторуПриложения = СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр(
"ru = '5. Нажмите на кноку <b>Зарегистрировать</b> (внизу страницы).
|6. В резделе <b>Обзор - Основное</b> найдите <b>Идентификатор приложения</b> и скопируйте и вставьте сюда:'"));
ПояснениеПоПаролюПриложения = "";
ПсевдонимАдресаПеренаправления = НСтр("ru = 'URI (перенаправления)'");
ПсевдонимИдентификатораПриложения = НСтр("ru = 'Идентификатор приложения'");
ПсевдонимПароляПриложения = НСтр("ru = 'Значение (секрета)'");
КонецЕсли;
Элементы.ПояснениеПоРегистрацииПриложения.Заголовок = ПояснениеПоРегистрацииПриложения;
Элементы.ПояснениеПоАдресуПеренаправления.Заголовок = ПояснениеПоАдресуПеренаправления;
Элементы.ПояснениеПоИдентификаторуПриложения.Заголовок = ПояснениеПоИдентификаторуПриложения;
Элементы.ПояснениеПоПаролюПриложения.Заголовок = ПояснениеПоПаролюПриложения;
Элементы.АдресПеренаправления.Заголовок = ПсевдонимАдресаПеренаправления;
Элементы.ИдентификаторПриложения.Заголовок = ПсевдонимИдентификатораПриложения;
Элементы.ПарольПриложения.Заголовок = ПсевдонимПароляПриложения;
Элементы.ПояснениеПоПаролюПриложения.Видимость = НастройкиАвторизации.ИспользоватьПарольПриложения;
Элементы.ПарольПриложения.Видимость = НастройкиАвторизации.ИспользоватьПарольПриложения;
Элементы.ПояснениеПоАдресуПеренаправления.Видимость = ЗначениеЗаполнено(ПояснениеПоАдресуПеренаправления);
Элементы.ПояснениеПоИдентификаторуПриложения.Видимость = ЗначениеЗаполнено(ПояснениеПоИдентификаторуПриложения);
Элементы.ПояснениеПоПаролюПриложения.Видимость = ЗначениеЗаполнено(ПояснениеПоПаролюПриложения);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПроверкуНастроек()
@@ -391,7 +543,7 @@
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Адрес электронной почты введен неверно'"), , "АдресЭлектроннойПочты", , Отказ);
КонецЕсли;
Если ПустаяСтрока(ПарольДляПолученияПисем) Тогда
Если СпособАутентификации = "Пароль" И ПустаяСтрока(ПарольДляПолученияПисем) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Введите пароль'"), , "ПарольДляПолученияПисем", , Отказ);
КонецЕсли;
@@ -429,12 +581,14 @@
Элементы.КнопкаДалее.Заголовок = ЗаголовокКнопкиДалее;
Элементы.КнопкаДалее.КнопкаПоУмолчанию =ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи;
Элементы.КнопкаДалее.Доступность = Не (ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи И ПроверкаПропущена);
Элементы.КнопкаДалее.Видимость = Не (ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи И СпособНастройки = "Вручную");
Элементы.КнопкаДалее.Видимость = Не (ТекущаяСтраница = Элементы.ПроверкаНастроекУчетнойЗаписи И СпособНастройки = "Вручную")
И Не ТекущаяСтраница = Элементы.Авторизация;
// КнопкаНазад
Элементы.КнопкаНазад.Видимость = ТекущаяСтраница <> Элементы.НастройкаУчетнойЗаписи
И ТекущаяСтраница <> Элементы.УчетнаяЗаписьУспешноНастроена
И ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи;
И ТекущаяСтраница <> Элементы.ПроверкаНастроекУчетнойЗаписи
И Не ТолькоАвторизация;
// КнопкаОтмена
Элементы.КнопкаОтмена.Видимость = ТекущаяСтраница <> Элементы.УчетнаяЗаписьУспешноНастроена;
@@ -452,6 +606,7 @@
Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда
Элементы.НеУдалосьПодключитьсяКартинкаИНадпись.Видимость = ПроверкаЗавершиласьСОшибками;
Элементы.Пароль.Доступность = СпособАутентификации = "Пароль";
КонецЕсли;
Если ТекущаяСтраница = Элементы.НастройкаСервераИсходящейПочты Тогда
@@ -617,14 +772,27 @@
УчетнаяЗапись.ВладелецУчетнойЗаписи = Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек");
Если СпособАутентификации = "OAuth" Тогда
УчетнаяЗапись.АвторизацияСПомощьюПочтовогоСервиса = Истина;
УчетнаяЗапись.ИмяПочтовогоСервиса = НастройкиАвторизации.ИмяИнтернетСервиса;
КонецЕсли;
УчетнаяЗапись.Записать();
УчетнаяЗаписьСсылка = УчетнаяЗапись.Ссылка;
ТребуетсяПодтверждениеЗакрытияФормы = Ложь;
УстановитьПривилегированныйРежим(Истина);
Если СпособАутентификации = "OAuth" Тогда
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ТокенДоступа, "ТокенДоступа");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, СрокДействияТокенаДоступа, "СрокДействияТокенаДоступа");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ТокенОбновления, "ТокенОбновления");
ЗаписатьНастройкиАвторизации();
Иначе
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляПолученияПисем);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьСсылка, ПарольДляОтправкиПисем, "ПарольSMTP");
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
@@ -637,6 +805,14 @@
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНастройкиАвторизации()
НастройкиАвторизации.ПарольПриложения = ПарольПриложения;
НастройкиАвторизации.ИдентификаторПриложения = ИдентификаторПриложения;
НастройкиАвторизации.АдресПеренаправления = АдресПеренаправления;
Справочники.НастройкиАвторизацииИнтернетСервисов.ЗаписатьНастройкиАвторизации(НастройкиАвторизации);
КонецПроцедуры
&НаСервере
Функция ИнтернетПочтовыйПрофиль(ДляПолучения = Ложь)
@@ -668,6 +844,11 @@
Профиль.Таймаут = ДлительностьОжиданияСервера;
Если ЗначениеЗаполнено(ТокенДоступа) Тогда
Профиль.АутентификацияПоТокену = ИспользованиеАутентификацииИнтернетПочтыПоТокену.Использовать;
Профиль.ТокенДоступа = ТокенДоступа;
КонецЕсли;
Возврат Профиль;
КонецФункции
@@ -765,4 +946,248 @@
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПереходПоАдресу(Знач АдресПерехода)
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресПерехода);
Если Не ЗначениеЗаполнено(СтруктураАдреса.Схема) Тогда
АдресПерехода = "http://" + АдресПерехода;
КонецЕсли;
ВебСтраница =
"<!DOCTYPE html>
|<html>
| <body>
| <script language = 'javascript'>
| document.location.href='" + АдресПерехода + "';
| </script>
| <p>Загрузка...</p>
| </body>
|</html>";
КонецПроцедуры
&НаКлиенте
Процедура АвторизоватьсяНаПочтовомСервере()
ВыполнитьПереходПоАдресу(СтрокаЗапросаАвторизации());
КонецПроцедуры
&НаСервере
Функция СтрокаЗапросаАвторизации()
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(НастройкиАвторизации.АдресАвторизации);
АдресСервера = СтруктураURI.Хост;
АдресРесурса = "/" + СтруктураURI.ПутьНаСервере;
ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор());
ПроверочныйКод = РаботаСПочтовымиСообщениямиСлужебный.СгенерироватьПроверочныйКод();
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("client_id", ИдентификаторПриложения);
ПараметрыЗапроса.Вставить("response_type", "code");
ПараметрыЗапроса.Вставить("redirect_uri", АдресПеренаправления);
Если ЗначениеЗаполнено(НастройкиАвторизации["ЗапрашиваемыеРазрешения"]) Тогда
ПараметрыЗапроса.Вставить("scope", НастройкиАвторизации["ЗапрашиваемыеРазрешения"]);
КонецЕсли;
ПараметрыЗапроса.Вставить("state", ИдентификаторЗапроса);
ПараметрыЗапроса.Вставить("login_hint", АдресЭлектроннойПочты);
Если НастройкиАвторизации.ИспользоватьКлючПроверкиПодлинностиPKCE Тогда
ПараметрыЗапроса.Вставить("code_challenge", РаботаСПочтовымиСообщениямиСлужебный.КодироватьСтрокуМетодомS256(ПроверочныйКод));
ПараметрыЗапроса.Вставить("code_challenge_method", "S256");
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации["ДополнительныеПараметрыАвторизации"]) Тогда
Для Каждого Элемент Из СтрРазделить(НастройкиАвторизации["ДополнительныеПараметрыАвторизации"], " ", Ложь) Цикл
ОписаниеПараметра = СтрРазделить(Элемент, "=", Истина);
ИмяПараметра = ОписаниеПараметра[0];
ЗначениеПараметра = "";
Если ОписаниеПараметра.Количество() = 2 Тогда
ЗначениеПараметра = ОписаниеПараметра[1];
КонецЕсли;
ПараметрыЗапроса.Вставить(ИмяПараметра, ЗначениеПараметра);
КонецЦикла;
КонецЕсли;
HTTPЗапрос = РаботаСПочтовымиСообщениямиСлужебный.ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса, Ложь);
СтрокаЗапроса = "https://" + АдресСервера + HTTPЗапрос.АдресРесурса;
Возврат СтрокаЗапроса;
КонецФункции
&НаКлиенте
Процедура ВебСтраницаДокументСформирован(Элемент)
Если СтрНачинаетсяС(НРег(Элемент.Документ.URL), НРег(АдресПеренаправления)) Тогда
ПриПолученииОтветаПочтовогоСервера(Элемент.Документ.URL, НастройкиАвторизации.АдресПолученияКлюча);
ПерейтиНаСледующуюСтраницу();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриПолученииОтветаПочтовогоСервера(СтрокаURI, АдресПолученияКлюча)
Ответ = ПараметрыИзСтрокиURI(СтрокаURI);
КодАвторизации = Ответ["code"];
КодОшибки = Ответ["error"];
ТекстОшибки = Ответ["error_description"];
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ТекстОшибки = РаскодироватьСтроку(ТекстОшибки, СпособКодированияСтроки.КодировкаURL);
КонецЕсли;
Если ИдентификаторЗапроса <> Ответ["state"] Тогда
СообщенияОбОшибках = НСтр("ru = 'Не удалось авторизоваться на сервере %1. Неверный идентификатор ответа.'");
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(КодОшибки) Тогда
СообщенияОбОшибках = ОписаниеОшибкиАвторизацииПочтовогоСервера(КодОшибки, ТекстОшибки);
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
КонецЕсли;
Если Не ПолучитьКлючиДоступаКПочтовомуСерверу(КодАвторизации, АдресПолученияКлюча) Тогда
ПроверкаЗавершиласьСОшибками = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьКлючиДоступаКПочтовомуСерверу(КодАвторизации, АдресПолученияКлюча)
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресПолученияКлюча);
АдресСервера = СтруктураURI.Хост;
АдресРесурса = "/" + СтруктураURI.ПутьНаСервере;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("client_id", ИдентификаторПриложения);
Если ЗначениеЗаполнено(НастройкиАвторизации["ЗапрашиваемыеРазрешения"]) Тогда
ПараметрыЗапроса.Вставить("scope", НастройкиАвторизации["ЗапрашиваемыеРазрешения"]);
КонецЕсли;
ПараметрыЗапроса.Вставить("code", КодАвторизации);
ПараметрыЗапроса.Вставить("redirect_uri", АдресПеренаправления);
ПараметрыЗапроса.Вставить("grant_type", "authorization_code");
Если НастройкиАвторизации.ИспользоватьКлючПроверкиПодлинностиPKCE Тогда
ПараметрыЗапроса.Вставить("code_verifier", ПроверочныйКод);
КонецЕсли;
Если ЗначениеЗаполнено(ПарольПриложения) Тогда
ПараметрыЗапроса.Вставить("client_secret", ПарольПриложения);
КонецЕсли;
ВремяЗапроса = ТекущаяДатаСеанса();
РезультатЗапроса = РаботаСПочтовымиСообщениямиСлужебный.ВыполнитьЗапрос(АдресСервера, АдресРесурса, ПараметрыЗапроса);
Попытка
ПараметрыОтвета = РаботаСПочтовымиСообщениямиСлужебный.JSONВЗначение(РезультатЗапроса.ОтветСервера);
Исключение
ПараметрыОтвета = Новый Соответствие;
КонецПопытки;
ТокенДоступа = ПараметрыОтвета["access_token"];
СрокДействияТокенаДоступа = ПараметрыОтвета["expires_in"];
ТокенОбновления = ПараметрыОтвета["refresh_token"];
КодОшибки = ПараметрыОтвета["error"];
ТекстОшибки = ПараметрыОтвета["error_description"];
Если ЗначениеЗаполнено(КодОшибки) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить ключи доступа к учетной записи почты %1 по причине:
|%2'"), АдресЭлектроннойПочты, ТекстОшибки);
ТехническиеПодробности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ответ сервера:
|%1'"), РезультатЗапроса.ОтветСервера);
ЗаписьЖурналаРегистрации(РаботаСПочтовымиСообщениямиСлужебный.ИмяСобытияАвторизацияПоПротоколуOAuth(),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки + Символы.ПС + ТехническиеПодробности);
СообщенияОбОшибках = ТекстОшибки;
Возврат Ложь;
ИначеЕсли Не РезультатЗапроса.ЗапросВыполнен Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить ключи доступа к учетной записи почты %1 по причине:
|Запрос не выполнен.'"), АдресЭлектроннойПочты);
ТехническиеПодробности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ответ сервера:
|%1'"), РезультатЗапроса.ОтветСервера);
ЗаписьЖурналаРегистрации(РаботаСПочтовымиСообщениямиСлужебный.ИмяСобытияАвторизацияПоПротоколуOAuth(),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки + Символы.ПС + ТехническиеПодробности);
СообщенияОбОшибках = ТекстОшибки;
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияТокенаДоступа) Тогда
СрокДействияТокенаДоступа = ВремяЗапроса + СрокДействияТокенаДоступа;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ПараметрыИзСтрокиURI(СтрокаURI)
ЗначенияПараметров = Новый Соответствие;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(СтрокаURI);
Для Каждого ЧастьСтроки Из СтрРазделить(СтруктураURI.ПутьНаСервере, "?&") Цикл
ПараметрИЗначение = СтрРазделить(ЧастьСтроки, "=", Истина);
ИмяПараметра = ПараметрИЗначение[0];
Если ПараметрИЗначение.Количество() > 1 Тогда
ЗначениеПараметра = ПараметрИЗначение[1];
ЗначенияПараметров.Вставить(ИмяПараметра, ЗначениеПараметра);
КонецЕсли;
КонецЦикла;
Возврат ЗначенияПараметров;
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеОшибкиАвторизацииПочтовогоСервера(Знач КодОшибки, Знач ТекстОшибки)
Результат = Строка(ТекстОшибки) + Символы.ПС + КодОшибки;
Результат = СокрЛП(Результат);
Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось авторизоваться на почтовом сервере:
|%1'"), Результат);
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// см. Справочники.УчетныеЗаписиЭлектроннойПочты.НастройкиПодключенияПоАдресуЭлектроннойПочты
//
&НаСервере
Функция НастройкиПодключенияПоАдресуЭлектроннойПочты()
УстановитьПривилегированныйРежим(Истина);
Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.НастройкиПодключенияПоАдресуЭлектроннойПочты(АдресЭлектроннойПочты, ПарольДляПолученияПисем);
КонецФункции
// Возвращаемое значение:
// см. Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса
//
&НаСервере
Функция НастройкиАвторизацииНаПочтовомСервере()
Возврат НастройкиПодключенияПоАдресуЭлектроннойПочты().НастройкиАвторизации;
КонецФункции
#КонецОбласти
@@ -566,6 +566,73 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АвторизацияСПомощьюПочтовогоСервиса</name>
<id>274</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АвторизацияСПомощьюПочтовогоСервиса</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<handlers>
<event>OnChange</event>
<name>АвторизацияСПомощьюПочтовогоСервисаПриИзменении</name>
</handlers>
<extendedTooltip>
<name>АвторизацияСПомощьюПочтовогоСервисаРасширеннаяПодсказка</name>
<id>276</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АвторизацияСПомощьюПочтовогоСервисаКонтекстноеМеню</name>
<id>275</id>
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Логин пароль</value>
</title>
<extendedTooltip>
<name>ЛогинПарольРасширеннаяПодсказка</name>
<id>264</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Пароль</name>
<id>105</id>
@@ -625,35 +692,6 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Логин пароль</value>
</title>
<extendedTooltip>
<name>ЛогинПарольРасширеннаяПодсказка</name>
<id>264</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ОставлятьПисьмаНаСервере</name>
<id>185</id>
@@ -40,6 +40,10 @@
ЦветПодсветки = ЦветаСтиля.ПоясняющийОшибкуТекст;
ИдентификаторИсправления = Параметры.ИдентификаторИсправления;
Если Объект.АвторизацияСПомощьюПочтовогоСервиса Тогда
Элементы.Пароль.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
@@ -318,6 +322,17 @@
Элементы.ФормаПроверитьНастройки.Доступность = Объект.ИспользоватьДляОтправки Или Объект.ИспользоватьДляПолучения;
КонецПроцедуры
&НаКлиенте
Процедура АвторизацияСПомощьюПочтовогоСервисаПриИзменении(Элемент)
Если Объект.АвторизацияСПомощьюПочтовогоСервиса Тогда
ОткрытьФормуПомощникаНастроек(Истина);
КонецЕсли;
Элементы.Пароль.Доступность = Объект.АвторизацияСПомощьюПочтовогоСервиса;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -366,12 +381,7 @@
&НаКлиенте
Процедура ОткрытьПомощникНастройки(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииНастройки", ЭтотОбъект);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Ключ", Объект.Ссылка);
ПараметрыОткрытия.Вставить("Перенастройка", Истина);
ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПомощникНастройкиУчетнойЗаписи",
ПараметрыОткрытия, , , , , ОписаниеОповещения);
ОткрытьФормуПомощникаНастроек();
КонецПроцедуры
@@ -575,7 +585,14 @@
КонецПроцедуры
&НаКлиенте
Процедура ПриЗавершенииНастройки(Результат, ДополнительныеПараметры) Экспорт
Процедура ПриЗавершенииНастройки(Результат, ТолькоАвторизация) Экспорт
Если ТолькоАвторизация Тогда
Если Результат <> Истина Тогда
Объект.АвторизацияСПомощьюПочтовогоСервиса = Ложь;
КонецЕсли;
Возврат;
КонецЕсли;
Прочитать();
@@ -685,4 +702,20 @@
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуПомощникаНастроек(ТолькоАвторизация = Ложь)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииНастройки", ЭтотОбъект, ТолькоАвторизация);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Ключ", Объект.Ссылка);
Если ТолькоАвторизация Тогда
ПараметрыОткрытия.Вставить("ТолькоАвторизация", Истина);
Иначе
ПараметрыОткрытия.Вставить("Перенастройка", Истина);
КонецЕсли;
ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПомощникНастройкиУчетнойЗаписи",
ПараметрыОткрытия, , , , , ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
@@ -392,24 +392,34 @@
Функция ОпределитьНастройкиУчетнойЗаписи(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения) Экспорт
НастройкиПочтовыхСерверов = Неопределено;
УстановитьПривилегированныйРежим(Истина);
НайденныеНастройки = НастройкиПодключенияПоАдресуЭлектроннойПочты(АдресЭлектроннойПочты, Пароль);
УстановитьПривилегированныйРежим(Ложь);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере("https://downloads.v8.1c.ru/content/common/settings/mailservers.json");
Если ЗагруженныйФайл.Статус Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ЗагруженныйФайл.Путь);
НастройкиПочтовыхСерверов = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецЕсли;
Возврат ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, НайденныеНастройки.Профиль);
КонецФункции
// Возвращаемое значение:
// Структура:
// * Профиль - ИнтернетПочтовыйПрофиль
// * ИмяПочтовогоСервера - Строка
// * НастройкиАвторизации - см. Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса
//
Функция НастройкиПодключенияПоАдресуЭлектроннойПочты(АдресЭлектроннойПочты, Пароль = "") Экспорт
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЭлектроннойПочты);
ПочтовыйДомен = СтруктураАдреса.Хост;
НайденныеНастройки = Неопределено;
ИмяПочтовогоСервера = "";
НастройкиПочтовыхСерверов = НастройкиПочтовыхСерверов();
Если НастройкиПочтовыхСерверов <> Неопределено Тогда
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЭлектроннойПочты);
НайденныеНастройки = НастройкиПочтовыхСерверов[СтруктураАдреса.Хост];
ИмяПочтовогоСервера = СтруктураАдреса.Хост;
Если ТипЗнч(НайденныеНастройки) = Тип("Строка") Тогда
ИмяПочтовогоСервера = НайденныеНастройки;
НайденныеНастройки = НастройкиПочтовыхСерверов[НайденныеНастройки];
КонецЕсли;
@@ -421,7 +431,10 @@
Хост = СтрСоединить(УровниДомена, ".");
НайденныеНастройки = НастройкиПочтовыхСерверов[Хост];
ИмяПочтовогоСервера = Хост;
Если ТипЗнч(НайденныеНастройки) = Тип("Строка") Тогда
ИмяПочтовогоСервера = НайденныеНастройки;
НайденныеНастройки = НастройкиПочтовыхСерверов[НайденныеНастройки];
КонецЕсли;
@@ -441,17 +454,92 @@
КонецЕсли;
КонецЕсли;
Возврат ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, НайденныеНастройки);
Профиль = Неопределено;
Если ЗначениеЗаполнено(НайденныеНастройки) Тогда
Профиль = СформироватьПрофиль(НайденныеНастройки, АдресЭлектроннойПочты, Пароль);
УстановитьПривилегированныйРежим(Истина);
НастройкиАвторизации = НастройкиАвторизацииСервера(НайденныеНастройки, ИмяПочтовогоСервера, ПочтовыйДомен);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Профиль", Профиль);
Результат.Вставить("ИмяПочтовогоСервера", ИмяПочтовогоСервера);
Результат.Вставить("НастройкиАвторизации", НастройкиАвторизации);
Возврат Результат;
КонецФункции
Функция ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, ИзвестныеНастройкиПочтовогоСервера)
// Возвращаемое значение:
// см. Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса
//
Функция НастройкиАвторизацииСервера(НайденныеНастройки, ИмяПочтовогоСервера, ПочтовыйДомен)
Профиль = Неопределено;
Если ЗначениеЗаполнено(ИзвестныеНастройкиПочтовогоСервера) Тогда
Профиль = СформироватьПрофиль(ИзвестныеНастройкиПочтовогоСервера, АдресЭлектроннойПочты, Пароль);
НастройкиАвторизации = Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса(ИмяПочтовогоСервера, ПочтовыйДомен);
НастройкиИзКлассификатора = НайденныеНастройки["OAuth"];
Если ЗначениеЗаполнено(НастройкиАвторизации.АдресАвторизации) Или Не ЗначениеЗаполнено(НастройкиИзКлассификатора) Тогда
Возврат НастройкиАвторизации;
КонецЕсли;
НастройкиАвторизации.ИмяИнтернетСервиса = ИмяПочтовогоСервера;
НастройкиАвторизации.ВладелецДанных = ПочтовыйДомен;
НастройкиАвторизации.АдресАвторизации = НастройкиИзКлассификатора["AuthorizationURI"];
НастройкиАвторизации.АдресПолученияКлюча = НастройкиИзКлассификатора["TokenExchangeURI"];
НастройкиАвторизации.ЗапрашиваемыеРазрешения = НастройкиИзКлассификатора["MailScope"];
Если ТипЗнч(НастройкиАвторизации.ЗапрашиваемыеРазрешения) = Тип("Массив") Тогда
НастройкиАвторизации.ЗапрашиваемыеРазрешения = СтрСоединить(НастройкиАвторизации.ЗапрашиваемыеРазрешения, " ");
КонецЕсли;
НастройкиАвторизации.ИспользоватьКлючПроверкиПодлинностиPKCE = НастройкиИзКлассификатора["UsePKCE"];
НастройкиАвторизации.ИспользоватьПарольПриложения = НастройкиИзКлассификатора["UseClientSecret"];
ДополнительныеПараметрыАвторизации = НастройкиИзКлассификатора["AuthorizationParameters"];
Если ЗначениеЗаполнено(ДополнительныеПараметрыАвторизации) Тогда
ОписанияПараметров = Новый Массив;
Для Каждого Элемент Из ДополнительныеПараметрыАвторизации Цикл
ОписанияПараметров.Добавить(Элемент.Ключ + "=" + XMLСтрока(Элемент.Значение));
КонецЦикла;
НастройкиАвторизации.ДополнительныеПараметрыАвторизации = СтрСоединить(ОписанияПараметров, " ");
КонецЕсли;
ДополнительныеПараметрыПолученияТокена = НастройкиИзКлассификатора["TokenExchangeParameters"];
Если ЗначениеЗаполнено(ДополнительныеПараметрыПолученияТокена) Тогда
ОписанияПараметров = Новый Массив;
Для Каждого Элемент Из ДополнительныеПараметрыПолученияТокена Цикл
ОписанияПараметров.Добавить(Элемент.Ключ + "=" + XMLСтрока(Элемент.Значение));
КонецЦикла;
НастройкиАвторизации.ДополнительныеПараметрыПолученияТокена = СтрСоединить(ОписанияПараметров, " ");
КонецЕсли;
Возврат НастройкиАвторизации;
КонецФункции
Функция НастройкиПочтовыхСерверов()
НастройкиПочтовыхСерверов = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере("https://downloads.v8.1c.ru/content/common/settings/mailservers.json");
Если ЗагруженныйФайл.Статус Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ЗагруженныйФайл.Путь);
НастройкиПочтовыхСерверов = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецЕсли;
Возврат НастройкиПочтовыхСерверов;
КонецФункции
Функция ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, Профиль = Неопределено)
НастройкиПолучены = Профиль <> Неопределено;
НайденныйПрофильSMTP = ?(НастройкиПолучены И ЗначениеЗаполнено(Профиль.АдресСервераSMTP), Профиль, Неопределено);
@@ -507,7 +595,7 @@
КонецФункции
Функция СформироватьПрофиль(ИзвестныеНастройки, АдресЭлектроннойПочты, Пароль)
Функция СформироватьПрофиль(ИзвестныеНастройки, АдресЭлектроннойПочты, Пароль = "")
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЭлектроннойПочты);
@@ -558,6 +558,39 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="e9939b36-bceb-40e2-a182-1d5cc248f353">
<name>АвторизацияСПомощьюПочтовогоСервиса</name>
<synonym>
<key>ru</key>
<value>Авторизация с помощью почтового сервиса</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="619d3ac6-40fe-485d-a407-fe065f16b186">
<name>ИмяПочтовогоСервиса</name>
<synonym>
<key>ru</key>
<value>Имя почтового сервиса</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>200</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<forms uuid="ecaa0af8-549c-4c07-82ff-1c4e02ff15b8">
<name>ФормаВыбора</name>
<synonym>
@@ -69,16 +69,12 @@
ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПравПапки(Элементы.Папки.ТекущаяСтрока));
ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"Файлы",
"Предпросмотр");
ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Файлы", "Предпросмотр");
Если ИспользоватьПредпросмотр <> Неопределено Тогда
Предпросмотр = ИспользоватьПредпросмотр;
Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр;
Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр;
КонецЕсли;
РасширенияПоддерживающиеПредпросмотр = РаботаСФайламиСлужебный.СписокРасширенийДляПредпросмотра();
Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь;
@@ -98,6 +94,13 @@
Элементы.ФормаСоздатьСоСканера.Заголовок = НСтр("ru = 'С камеры устройства...'");
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -272,6 +275,13 @@
КонецЕсли;
ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд();
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -676,8 +686,13 @@
&НаКлиенте
Процедура Отправить(Команда)
ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, Элементы.Папки.ТекущиеДанные.Ссылка , УникальныйИдентификатор);
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, ТекущиеДанные.Ссылка,
УникальныйИдентификатор);
РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(
Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки, Истина);
@@ -736,22 +751,16 @@
&НаКлиенте
Процедура Сравнить(Команда)
ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество();
Если ЧислоВыделенныхСтрок = 2 ИЛИ ЧислоВыделенныхСтрок = 1 Тогда
Если ЧислоВыделенныхСтрок = 2 Тогда
Ссылка1 = Элементы.Список.ВыделенныеСтроки[0];
Ссылка2 = Элементы.Список.ВыделенныеСтроки[1];
ИначеЕсли ЧислоВыделенныхСтрок = 1 Тогда
Ссылка1 = Элементы.Список.ТекущиеДанные.Ссылка;
Ссылка2 = Элементы.Список.ТекущиеДанные.РодительскаяВерсия;
Если Элементы.Список.ВыделенныеСтроки.Количество() <> 2 Тогда
Возврат;
КонецЕсли;
ПервыйФайл = Элементы.Список.ВыделенныеСтроки[0];
ВторойФайл = Элементы.Список.ВыделенныеСтроки[1];
Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение);
РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, ПервыйФайл, ВторойФайл, Расширение);
РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -1604,4 +1613,30 @@
Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗаписьСервис);
КонецФункции
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
@@ -4912,6 +4912,10 @@
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:CatalogFormExtInfo">
<handlers>
<event>AfterWrite</event>
<name>ПослеЗаписи</name>
</handlers>
<handlers>
<event>AfterWriteAtServer</event>
<name>ПослеЗаписиНаСервере</name>
@@ -48,6 +48,13 @@
ОбновитьПолныйПуть();
ОбновитьПояснениеОблачногоСервиса(Объект.Ссылка);
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Описание.Высота = 0;
@@ -67,7 +74,6 @@
Процедура ПриОткрытии(Отказ)
НаименованиеДоЗаписи = Объект.Наименование;
ДатаМодификации = МестноеВремя(ЭтотОбъект.Объект.ДатаМодификацииУниверсальная);
УстановитьДоступностьКомандСпискаЭП();
@@ -76,6 +82,13 @@
РаботаСФайламиСлужебныйКлиент.ПрочитатьСертификатыПодписей(ЭтотОбъект);
ОтображатьВкладкиДополнительныхДанных();
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -146,13 +159,18 @@
// СтандартныеПодсистемы.УправлениеДоступом
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.УправлениеДоступом
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
@@ -199,6 +217,18 @@
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
@@ -717,17 +747,13 @@
Возврат;
КонецЕсли;
РазблокироватьДанныеФормыДляРедактирования();
ДанныеФайла = ДанныеФайла(ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор);
Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) Тогда
РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Неопределено,
ДанныеФайла, УникальныйИдентификатор);
Иначе
РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Неопределено,
ДанныеФайла, УникальныйИдентификатор);
ФайлРедактируется = ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует);
РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Неопределено, ДанныеФайла, УникальныйИдентификатор);
Если Не ФайлРедактируется Тогда
ОбновитьОбъект();
ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка);
Оповестить("Запись_Файл", Новый Структура, ЭтотОбъект.Объект.Ссылка);
КонецЕсли;
@@ -1541,4 +1567,31 @@
Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись);
КонецФункции
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
@@ -479,6 +479,50 @@
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаНаименование</name>
<id>73</id>
<items xsi:type="form:FormField">
<name>СтандартнаяКартинка</name>
<id>70</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.DefaultPicture</segments>
</dataPath>
<extendedTooltip>
<name>СтандартнаяКартинкаРасширеннаяПодсказка</name>
<id>72</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СтандартнаяКартинкаКонтекстноеМеню</name>
<id>71</id>
<autoFill>true</autoFill>
</contextMenu>
<type>PictureField</type>
<editMode>Enter</editMode>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<extInfo xsi:type="form:ImageFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<border xsi:type="core:BorderDef">
<style>Single</style>
<width>1</width>
</border>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Наименование</name>
<id>16</id>
@@ -521,6 +565,32 @@
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<extendedTooltip>
<name>ГруппаНаименованиеРасширеннаяПодсказка</name>
<id>74</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>ColumnGroup</type>
<extInfo xsi:type="form:ColumnGroupExtInfo">
<group>InCell</group>
<showTitle>auto</showTitle>
<showInCard>true</showInCard>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Наименование и файлы</value>
@@ -435,7 +435,7 @@
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.УдалениеПомеченных</metadata>
<metadata>ScheduledJob.УдалениеПомеченныхОбъектов</metadata>
<use>DontUse</use>
</content>
<content>
@@ -474,6 +474,10 @@
<metadata>Constant.ИспользуютсяПрофилиБезопасности</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.СтандартныеПодсистемыВАвтономномРежиме</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.МониторингЗадач</metadata>
<use>DontUse</use>
@@ -490,6 +494,10 @@
<metadata>Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.НастройкиВходаПользователей</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ОчисткаЗамеровВремени</metadata>
<use>DontUse</use>
@@ -523,7 +531,7 @@
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ОтключениеПроверкиИспользованияУдаляемыхОбъектов</metadata>
<metadata>ScheduledJob.КонтрольУдаленияПомеченныхОбъектов</metadata>
<use>DontUse</use>
</content>
<content>
+1 -10
View File
@@ -69,7 +69,7 @@
ОжиданиеСчетчик = Параметры.Таймаут;
// Сброс размеров и положения окна этой формы.
СброситьРазмерыИПоложениеОкна();
СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Переместить(Элементы.БольшеНеЗадаватьЭтотВопрос, ЭтотОбъект);
@@ -241,15 +241,6 @@
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СброситьРазмерыИПоложениеОкна()
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда
ХранилищеСистемныхНастроек.Удалить("ОбщаяФорма.Вопрос", "", ИмяПользователя);
КонецЕсли;
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
КонецПроцедуры
&НаСервереБезКонтекста
Функция СтандартныйНабор(Кнопки)
Результат = Новый СписокЗначений;
@@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Предназначен для просмотра и управления доступными командами текущим пользователем. 
<div><br></div>
<div>В списке можно включать или выключать предусмотренные команды с помощью флажков.
<div><br><div>Для того чтобы в списке были доступны команды, администратор программы при настройке <a href="Catalog.ДополнительныеОтчетыИОбработки.Form.ФормаЭлемента/Help">дополнительного отчета или обработки</a> должен сначала включить имя данного пользователя в список для быстрого доступа, иначе список доступных команд может быть пустым.  При этом состав и текст команд в дополнительных отчетах и обработках определяется разработчиком.</div></div></div></body></html>
<div><br><div>Для того чтобы в списке были доступны команды, администратор программы при настройке <a href="Catalog.ДополнительныеОтчетыИОбработки.Form.ФормаЭлемента/Help">дополнительного отчета или обработки</a> должен сначала включить имя данного пользователя в список для быстрого доступа, иначе список доступных команд может быть пустым. При этом состав и текст команд в дополнительных отчетах и обработках определяется разработчиком.</div></div></div></body></html>
@@ -102,6 +102,113 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ПредупреждениеНастройкаВСервисе</name>
<id>120</id>
<items xsi:type="form:Decoration">
<name>ПредупреждениеНастройкаВСервисеКартинка</name>
<id>122</id>
<title>
<key>ru</key>
<value>Предупреждение настройка в сервисе картинка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПредупреждениеНастройкаВСервисеКартинкаРасширеннаяПодсказка</name>
<id>124</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПредупреждениеНастройкаВСервисеКартинкаКонтекстноеМеню</name>
<id>123</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<skipOnInput>false</skipOnInput>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Предупреждение32</picture>
</picture>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ПредупреждениеНастройкаВСервисеПояснение</name>
<id>125</id>
<title>
<key>ru</key>
<value>В модели сервиса настройки
устанавливаются администратором сервиса</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПредупреждениеНастройкаВСервисеПояснениеРасширеннаяПодсказка</name>
<id>127</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПредупреждениеНастройкаВСервисеПояснениеКонтекстноеМеню</name>
<id>126</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<skipOnInput>false</skipOnInput>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
<verticalAlign>Center</verticalAlign>
</extInfo>
</items>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Предупреждение настройка в сервисе</value>
</title>
<extendedTooltip>
<name>ПредупреждениеНастройкаВСервисеРасширеннаяПодсказка</name>
<id>121</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаНастройки</name>
<id>128</id>
<items xsi:type="form:FormGroup">
<name>ГруппаСложностьПароля</name>
<id>33</id>
@@ -945,6 +1052,35 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Настройки</value>
</title>
<extendedTooltip>
<name>ГруппаНастройкиРасширеннаяПодсказка</name>
<id>129</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
@@ -39,6 +39,15 @@
КонецЦикла;
ВидимостьГруппыВосстановлениеПароля = Ложь;
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ПредупреждениеНастройкаВСервисе.Видимость = Истина;
Элементы.ФормаЗаписатьИЗакрыть.Доступность = Ложь;
Элементы.ГруппаНастройки.Доступность = Ложь;
Иначе
НастройкиВосстановленияПароля = ПользователиСлужебный.НастройкиВосстановленияПароля();
Если НастройкиВосстановленияПароля <> Неопределено Тогда
ВидимостьГруппыВосстановлениеПароля =
@@ -49,6 +58,9 @@
= ПользователиСлужебный.СпособВосстановленияПароляПользователяИнформационнойБазы(
"ОтправкаКодаПодтвержденияЧерезСтандартныйСервис");
КонецЕсли;
КонецЕсли;
Элементы.ПредупреждениеВосстановлениеПароля.Видимость = ВидимостьГруппыВосстановлениеПароля;
КонецПроцедуры
@@ -110,29 +122,9 @@
&НаСервере
Процедура ЗаписатьНаСервере()
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.НастройкиВходаПользователей");
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
НастройкиВхода = ПользователиСлужебный.НастройкиВхода();
Если ПоказатьНастройкиВнешнихПользователей Тогда
Настройки = НастройкиВхода.ВнешниеПользователи;
Иначе
Настройки = НастройкиВхода.Пользователи;
КонецЕсли;
Настройки = Пользователи.НовоеОписаниеНастроекВхода();
Настройки.ПарольДолженОтвечатьТребованиямСложности = ПарольДолженОтвечатьТребованиямСложности;
Если Не ЗначениеЗаполнено(ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда
Настройки.ПросрочкаРаботыВПрограммеДатаВключения = '00010101';
ИначеЕсли Не ЗначениеЗаполнено(Настройки.ПросрочкаРаботыВПрограммеДатаВключения) Тогда
Настройки.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса());
КонецЕсли;
Для Каждого КлючИЗначение Из ПредлагаемыеЗначенияНастроек Цикл
Если ЭтотОбъект[КлючИЗначение.Ключ + "Включить"] Тогда
Настройки[КлючИЗначение.Ключ] = ЭтотОбъект[КлючИЗначение.Ключ];
@@ -141,21 +133,7 @@
КонецЕсли;
КонецЦикла;
Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода));
Если ЗначениеЗаполнено(НастройкиВхода.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода)
Или ЗначениеЗаполнено(НастройкиВхода.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда
УстановитьПривилегированныйРежим(Истина);
ПользователиСлужебный.ИзменитьЗаданиеКонтрольАктивностиПользователей(Истина);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Пользователи.УстановитьНастройкиВхода(Настройки, ПоказатьНастройкиВнешнихПользователей);
ОбновитьПовторноИспользуемыеЗначения();
@@ -3054,6 +3054,33 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ФормаТехническаяИнформация</name>
<id>432</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаТехническаяИнформацияРасширеннаяПодсказка</name>
<id>433</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ТехническаяИнформация</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
@@ -3910,6 +3937,24 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ТехническаяИнформация</name>
<title>
<key>ru</key>
<value>Техническая информация</value>
</title>
<id>8</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ТехническаяИнформация</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>СертификатыПоказать</name>
<valueType>
@@ -586,6 +586,14 @@
КонецПроцедуры
&НаКлиенте
Процедура ТехническаяИнформация(Команда)
ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию(
НСтр("ru = 'Настройки электронной подписи и шифрования'"));
КонецПроцедуры
&НаКлиенте
Процедура ПрограммыУстановитьПометкуУдаления(Команда)
@@ -2320,19 +2320,6 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПоказатьОповещениеОПодсказках</name>
<id>19</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ЦветПодсказки</name>
<id>22</id>
@@ -87,13 +87,6 @@
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПоказатьОповещениеОПодсказках И ПоказыватьПодсказки Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Новая возможность'"),
"e1cib/data/ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ОписаниеНовойВозможностиПоВыводуОписаний",
НСтр("ru = 'Вывод описаний в панелях отчетов'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
Если ДлительнаяОперация.Статус = "Выполняется" Тогда
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
@@ -148,7 +141,7 @@
Или Изменения.ИскатьВоВсехРазделах <> ИскатьВоВсехРазделах Тогда
ПараметрыКлиента.Обновлять = Истина;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Изменения, "ПоказыватьПодсказки, ИскатьВоВсехРазделах, ПоказатьОповещениеОПодсказках");
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Изменения, "ПоказыватьПодсказки,ИскатьВоВсехРазделах");
КонецЕсли;
Если ПараметрыКлиента.Обновлять Тогда
ПодключитьОбработчикОжидания("ОбновитьПанельОтчетовПоТаймеру", 1, Истина);
@@ -281,12 +274,7 @@
ОбщиеНастройки = Новый Структура;
ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки);
ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах);
ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках);
Оповестить(
ВариантыОтчетовКлиент.ИмяСобытияИзменениеОбщихНастроек(),
ОбщиеНастройки,
ЭтотОбъект);
Оповестить(ВариантыОтчетовКлиент.ИмяСобытияИзменениеОбщихНастроек(), ОбщиеНастройки, ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
@@ -671,10 +659,7 @@
ОбщиеНастройки = Новый Структура;
ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки);
ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах);
ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках);
ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки);
КонецЕсли;
Элементы.ПоказыватьПодсказки.Видимость = РежимНастройки;
@@ -875,7 +860,7 @@
&НаСервере
Процедура ЗагрузитьВсеНастройки()
ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеНастройки, "ПоказатьОповещениеОПодсказках, ПоказыватьПодсказки, ИскатьВоВсехРазделах");
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеНастройки, "ПоказыватьПодсказки,ИскатьВоВсехРазделах");
ЛокальныеНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(),
@@ -46,10 +46,9 @@
<div>Выделите расширение, нажмите <strong>Обновить из файла</strong>, укажите путь к файлу на компьютере.</div>
</li>
<li>
<div>Следует использовать эту кнопку для установки новой версии расширения.</div>
</li>
</ul><div>Также нужно использовать эту возможность для возврата к предыдущей версии, если новая версия содержит ошибку (однако не рекомендуется устанавливать расширение меньшей версии, т.к. это может привести к потере сделанных настроек).</div>
<div>Следует использовать эту кнопку для установки новой версии расширения.</div></li>
<li>Если обновить расширение на новую версию, в которой изменено его имя, то все прежние настройки этого расширения будут сохранены, например, созданные варианты отчетов.</li>
<ul><li>При попытке обновления на расширение с другим именем программа выводит сообщение, подтвердить свое действие необходимо с помощью кнопки <b>Заменить</b>.</li></ul><li>При случайном удалении и повторном добавлении этого же расширения в программу через короткий промежуток времени можно продолжить работу без потери настроек расширения.</li></ul><div>Также нужно использовать эту возможность для возврата к предыдущей версии, если новая версия содержит ошибку (однако не рекомендуется устанавливать расширение меньшей версии, т.к. это может привести к потере сделанных настроек).</div>
<p></p>
<h3><b style="font-size: 13.4399995803833px;">Установленные исправления (патчи)</b></h3>
<ul style="font-size: 13.4399995803833px;"><li><span style="font-size: 11.199999809265137px;">С помощью команды меню <b>Еще - Установленные исправления (патчи)</b> можно открыть <a href="CommonForm.УстановленныеИсправления/Help">список</a>, в котором можно просмотреть уже установленные исправления и с помощью кнопки панели навигации <b>Установить исправление</b>.</span></li></ul><h3><br></h3>
<p></p></body></html>
<ul style="font-size: 13.4399995803833px;"><li><span style="font-size: 11.199999809265137px;">С помощью команды меню <b>Еще - Установленные исправления (патчи)</b> можно открыть <a href="CommonForm.УстановленныеИсправления/Help">список</a>, в котором можно просмотреть уже установленные исправления и с помощью кнопки панели навигации <b>Установить исправление</b>.</span></li></ul><p></p></body></html>
@@ -46,7 +46,7 @@
ДополнительныеДанные = Параметры.ДополнительныеДанные;
ЭлектроннаяПодписьСлужебный.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
КонецПроцедуры
@@ -1,5 +1,27 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Предназначена для выбора региональных настроек при выборе других языков. Программа позволяет печатные формы на разных языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.
<div>Для некоторых языков доступен выбор региональных настроек (указаны в скобках рядом с названием языка). Выбор региональных настроек влияет на вывод дат и чисел. Например, дата <b>24.12.2020</b> на языке "французский" будет выводиться <b>24/12/2020</b>, а на языке "французский (Канада) - <b>2020-12-24</b>.</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 class="">Предназначена для выбора региональных настроек при выборе других языков. 
<div>Открывается с помощью ссылки в разделе <b>Администрирование - Общие настройки</b>.</div>
<div>В окне <b>Региональные Настройки</b> можно:</div>
<div>
<ul><li>Выбрать <b>Часовой пояс программы</b> - все операции в программе будут выполняться во времени этого часового пояса;</li>
<li>Посмотреть с помощью ссылки <b>Время текущего сеанса</b>;</li>
<li>Настроить основной и дополнительный языки.</li></ul>При необходимости для формирования печатных форм можно добавить еще несколько языков.</div>
<div>Программа позволяет печатные формы на разных языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.
<div>Для некоторых языков доступен выбор региональных настроек (указаны в скобках рядом с названием языка). Выбор региональных настроек влияет на вывод дат и чисел. Например, дата <b>24.12.2020</b> на языке "<b>французский</b>" будет выводиться <b>24/12/2020</b>, а на языке "<b>французский (Канада)</b>" - <b>2020-12-24</b>.</div>
<div>После выбора основного и дополнительных языков следует нажать кнопку <b>Изменить</b>. В программе существуют предопределенные и поставляемые элементы. При смене языков с помощью кнопки <b>Изменить</b> вызывается механизм начального заполнения этих элементов. Через некоторое время программа готова к работе.</div>
<div>Если строка на дополнительном языке отсутствует, то заполняется значением основного языка (реквизита).Мультиязычные строки хранятся в шапке объекта. Если строка на дополнительных языках отсутствует, то заполняется на основном языке.</div>
<div>Если меняются местами основной и дополнительный языки, то значения также меняются местами:</div>
<div>
<ul><li><b>Наименование (ru) &lt;-&gt; НаименованиеЯзык (en)</b>.</li></ul></div>
<div>Если основной язык <b>(ru)</b> меняется на другой язык (не дополнительный, например, польский - <b>pl</b>):</div>
<div>
<ul><li>Предопределенные и поставляемые элементы перезаполняются;</li>
<li>Старые значения (<b>ru</b>), введенные пользователем, сохраняются для нового языка (<b>pl</b>).</li></ul>При добавлении новых данных: если в интерактивном режиме данные на дополнительных языках не были введены, то реквизиты на дополнительных языках заполняются значениями основного языка.</div>
<div>Отключить основной язык нельзя. При отключении доп. языков данные не очищаются.</div>
<div>На нескольких языках заполняются поля в следующих объектах программы:</div>
<div>
<ul><li><b>Виды контактной информации</b> (поле <b>Наименование</b>);</li>
<li><b>Свойства</b> (поле <b>Наименование</b>);</li>
<li><b>Варианты отчетов</b>.</li></ul>Просмотреть или заполнить поле <b>Наименование</b> на разных языках можно с помощью кнопки <img src="StdPicture.InputFieldOpen"></img>.</div>
</body></html>
</div></body></html>
@@ -9,7 +9,29 @@
</li>
<li>Можно <strong>Вставить примечание</strong> с помощью соответствующей команды меню <strong>Еще</strong>.
</li>
<li>По окончании редактирования нажмите <strong>Записать и закрыть</strong>.</li></ul><h3 style="font-size: 13.4399995803833px;">Перевод макета на другой язык</h3>
<li>По окончании редактирования нажмите <strong>Записать и закрыть</strong>.</li></ul><h3>Создание или редактирование пользовательской печатной формы</h3>
<div>В списке макетов нажмите кнопку <b>Создать</b> или <b>Копировать</b>.</div>
<div><br></div>
<div>С помощью кнопок панели навигации верхнего ряда можно:<br><ul><li><img src="CommonPicture.ОтменитьДействие"></img>отменить или <img src="CommonPicture.ПовторитьДействие"></img>повторить действие;</li>
<li><img src="StdPicture.ShowData"></img><img src=""></img>проверить вид макета на бумаге;</li>
<li>задать колонтитулы макета печатной формы;</li>
<li>сформировать образец печатной формы по макету;</li>
<li>повторять выбранные строки в <img src="CommonPicture.ПовторятьВНачалеСтраницы"></img><img src=""></img>начале/<img src="CommonPicture.ПовторятьВКонцеСтраницы"></img>конце страницы;</li>
<li>переключиться на макет на другом языке.</li></ul></div>
<div>В нижнем ряду панели навигации также предусмотрены стандартные кнопки редактирования и форматирования, а также можно:</div>
<div>
<ul><li><img src="StdPicture.QueryWizardCreateTempTableDropQuery"></img> очистить формат выделенной ячейки;</li>
<li><img src="StdPicture.SpreadsheetInsertComment"></img> открыть меню работы над ячейками (перейти к ячейке, объединить ячейки и т.д.)</li>
<li><img src="StdPicture.Picture"></img> открыть меню работы над картинками.</li></ul>Окно редактирования печатной формы состоит из четырех частей:<br><ul><li>В левой верхней части строится макет печатной формы;</li>
<li>В левой нижней части можно просмотреть или написать текст выбранной ячейки;</li>
<li>В правой верхней части находится список доступных полей документа для использования в макете;</li>
<ul><li>Список доступных полей содержит следующие колонки:</li>
<ul><li><b>Поле</b> - доступное поле элемента-владельца макета. Поле можно перетаскивать в макет. Можно вставить поля табличной части документа.</li>
<li><b>Образец</b> - показывает, как будет выглядеть поле при выводе на печать. В качестве образца для заполнения полей берется случайный элемент списка. </li>
<li><b><img src="StdPicture.DataCompositionOutputParameters"></img> Формат поля</b> - предусмотрена настройка формата поля. Например, можно выбрать формат даты, отличный от стандартного.</li></ul></ul><li>В правой нижней части находится список операторов и функций для создания выражений;</li>
</ul>С помощью кнопки <b>Доступные поля</b> панели навигации можно убрать правую часть для просмотра всего макета.</div>
<div>Для сохранения новой печатной формы нажмите <b>Записать и закрыть</b>.</div>
<h3 style="font-size: 13.4399995803833px;">Перевод макета на другой язык</h3>
<p>Программа позволяет формировать печатные формы на других языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.</p>
<p>Для этого необходимо:</p>
<p></p>
@@ -19,7 +41,7 @@
<li>добавить перевод макета печатной формы на дополнительный язык.</li>
<ul><li>После добавления других языков при редактировании макета появляется кнопка выбора языка.</li>
<li>Откройте на редактирование нужный макет, переключите на дополнительный язык и выполните перевод.</li>
<li>В макете следует переводить только статический текст, например, заголовки, подписи и т.д.</li>
<li>В макете следует переводить только статический текст, например заголовки, подписи и т.д.</li>
<li>Не нужно переводить имена областей и параметры. Параметры в печатной форме отображаются в угловых скобках, например, <b>&lt;Наименование&gt;</b>. Параметры могут находиться внутри шаблонов текста, в этом случае они отображаются в квадратных скобках, например, <b>&lt;Счет на оплату №[Номер]от[Дата]&gt;</b>, в этом случае переводить следует только текст шаблона за скобками.</li>
<li>Кнопка <img src="StdPicture.Document"></img>позволяет рядом расположить оригинал и переводимую печатную форму для удобства перевода и его проверки.</li></ul></ul>После сохранения макета в колонке <b>Доступные языки</b> добавляется язык, на который был выполнен перевод.<br><h3>Переключение режимов редактирования и просмотра</h3>
<ul><li>Для переключения режимов нажмите кнопку <strong>Редактирование</strong>. В режиме просмотра кнопки редактирования макета становится неактивными.</li></ul><h3>Печать макета</h3>
@@ -4,7 +4,7 @@
<p>Исправление (патч) позволяет оперативно исправлять ошибки в программе, не дожидаясь следующего исправительного релиза. Установка патчей также не требует обязательного завершения сеансов пользователей, работающих с программой. Для применения исправлений достаточно перезапустить программу в удобный момент времени.</p>
<p><span style="font-size: 13.4399995803833px; font-weight: bold;">Автоматическая установка патчей</span></p>
<p></p>
<ul><li>Загрузка и установка патчей выполняется <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ИнтернетПоддержкаИСервисы/Help">автоматически</a> при наличии подписки 1С:ИТС  и доступа к сети Интернет. Это рекомендуемый режим работы. </li>
<ul><li>Загрузка и установка патчей выполняется <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ИнтернетПоддержкаИСервисы/Help">автоматически</a> при наличии подписки 1С:ИТС и доступа к сети Интернет. Это рекомендуемый режим работы. </li>
<li>Для настройки автоматической загрузки необходимо перейти в раздел <b>Администрирование - Интернет-поддержка и сервисы - Обновление программы</b> и включить флажок <b>Загружать и устанавливать исправления (патчи) автоматически</b>. Потребуется подключение Интернет-поддержки.</li></ul><p></p>
<p><span style="font-size: 13.4399995803833px; font-weight: bold;">Установка исправлений вручную</span></p>
<p>Если на компьютере не доступен Интернет, но есть возможность скачать патч с 1С:ИТС:</p>
@@ -2,9 +2,10 @@
<p>Предназначена для настройки отчета.</p>
<p>Открывается из <a href="CommonForm.ФормаОтчета/Help">формы отчета</a> по кнопке <strong>Настройки</strong>.</p>
<p>С помощью кнопки <strong>Вид</strong> можно перевести настройки в один из режимов:</p>
<ul><li><strong>Простой</strong> - можно только менять уже имеющиеся параметры, с помощью флажков добавлять или убирать их;
</li>
<li><strong>Расширенный</strong> - можно управлять настройками: добавлять параметры, менять поля, структуру отчета. После того, как настройки в расширенном режиме закончены и сохранены, в простом режиме появляется возможность включать и отключать их с помощью флажка.</li></ul><p>Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:</p>
<ul><li><strong>Простой</strong> - можно только менять уже имеющиеся параметры, с помощью флажков добавлять или убирать их. В простом режиме на вкладке Основное, открыв раздел Дополнительно с помощью кнопки, можно добавить следующие возможности:</li>
<ul><li><b>Выводить заголовок</b>;</li>
<li><b>Выводить параметры и отборы</b> - если флажок выключить, то будет выведена только шапка таблицы отчета, перечень параметров отчета выводиться не будет;
</li></ul><li><strong>Расширенный</strong> - можно управлять настройками: добавлять параметры, менять поля, структуру отчета. После того, как настройки в расширенном режиме закончены и сохранены, в простом режиме появляется возможность включать и отключать их с помощью флажка.</li></ul><p>Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:</p>
<ul><li><a href="#1">Фильтры</a> - вводятся условия для отборов значений в отчете;
</li>
<li><a href="#2">Поля и сортировки</a>- с помощью флажков можно добавлять в отчет поля или убирать их. Можно добавлять поля для сортировки отчета, убирать их или отключать;
@@ -70,11 +71,14 @@
<ul><li>в правой части с помощью кнопки <strong>Добавить</strong> вывести в отчет другие поля документов и списков программы;
</li>
<li>в левой части с помощью соответствующей кнопки <strong>Добавить</strong> сортировку по полю. Выберите поле для сортировки из предлагаемого программой списка.</li></ul></li></ul><h3><a name="4">Оформление</a></h3>
<ul><li>На вкладке в простом режиме можно поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить <strong>Цвет фона</strong>, в который можно окрасить все поля.
<ul><li>На вкладке в простом режиме можно:</li>
<ul><li>поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить <strong>Цвет фона</strong>, в который можно окрасить все поля. Можно также включить <b>Заголовок</b>.</li></ul><li>В расширенном режиме:
</li>
<li>В расширенном режиме:
</li>
<li>С помощью кнопки <strong>Добавить</strong> можно ввести новый <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.ЭлементУсловногоОформленияОтчета/Help">Элемент условного оформления отчета</a>. </li></ul><h3><a name="5">Структура</a></h3>
<ul><li>Можно настроить индивидуальные <a href="CommonForm.НастройкаКолонтитулов/Help">Колонтитулы</a>. Если они не устраивают, можно их отменить с помощью команды <b>Установить стандартные настройки</b> меню <b>Еще</b>. </li>
<li>Включите флажок, для того чтобы <b>Выводить заголовок для печати</b>. Также эта возможность предусмотрена в простом режиме в разделе <b>Дополнительно</b>. Заголовок можно изменить. Для этого дважды щелкните мышкой по строке с наименованием заголовка.</li>
<li><b>Выводить фильтры</b> - если флажок включен, то в отчете выводится строка с перечнем настроенных фильтров.</li>
<li>Предусмотрена возможность условного оформления, т.е. можно изменить цвет полей в зависимости от некоторого условия.</li>
<li>С помощью кнопки <strong>Добавить</strong> можно ввести новый <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.ЭлементУсловногоОформленияОтчета/Help">Элемент условного оформления отчета</a>. </li></ul></ul><h3><a name="5">Структура</a></h3>
<ul><li>Изменить параметры на вкладке можно только в <strong>Расширенном</strong> режиме.
</li>
<li>На вкладке можно добавить группируемые поля в отчет. С помощью кнопок панели навигации можно добавить, изменить поля, поменять их местами.
@@ -90,9 +94,15 @@
</li>
<li><strong>Оформление</strong>.</li></ul></li></ul><h3>Добавление формул в окне Выбор поля отчета</h3>
<div>
<ul><li>В настройках в окне <b>Выбор поля отчета</b> (из всех вкладок открывается по кнопке <b>Добавить</b>) имеется возможность работать с формулами. </li>
<li>Нажмите кнопку <b>Добавить формулу</b> для перехода к построению <a href="DataProcessor.КонструкторФормул.Form.РедактированиеФормулы/Help">формулы</a>.</li>
<li>После добавления формулы ее можно редактировать с помощью кнопки <img src="StdPicture.Change"></img>.</li></ul></div>
<ul><li>В настройках в окне <b>Выбор поля отчета</b> (из всех вкладок открывается по кнопке <b>Добавить</b>) имеется возможность работать с формулами. Открывается окно <b>Редактирование формулы</b>. </li>
<a name="СтандартныеПодсистемы.КонструкторФормул">
</a>
<li><a name="СтандартныеПодсистемы.КонструкторФормул"></a><a name="СтандартныеПодсистемы.КонструкторФормул">
Нажмите кнопку <b>Добавить формулу</b> для перехода к построению </a><a href="DataProcessor.КонструкторФормул.Form.РедактированиеФормулы/Help">формулы</a>.</li>
<li>Появляется новый элемент в группе Формулы. Заменить формулой имеющиеся поля невозможно. В формулу можно добавить различные поля из списка и операции (арифметические операторы, операции сравнения, логические операции, агрегатные функции). Можно добавить <b>Наименование</b> формулы в нижней части окна. После окончания составления формулы необходимо нажать кнопку <b>Завершить редактирование</b>, выделить новую формулу и нажать <b>Выбрать</b>.</li>
<li>После добавления формулы ее можно редактировать с помощью кнопки <img src="StdPicture.Change"></img>. Также можно сделать с помощью команды контекстного меню по правой кнопке мыши.</li></ul></div>
<div>
<h3>Изменение условий отборов</h3>
<ul><li>
@@ -1,20 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body class="">
<p>Для просмотра отчета необходимо нажать кнопку <strong>Сформировать</strong>, предварительно задав параметры (если они предусмотрены). В клиент-серверном варианте работы программы предусмотрено формирование отчетов в фоновом режиме.</p>
<p>В программе можно установить общие колонтитулы для оформления отчета.</p>
<h3>Режим формирования</h3>
<ul><li>Установите флажок<strong> Формировать сразу</strong> меню <strong>Еще</strong>, для того чтобы отчет формировался автоматически сразу после открытия, без нажатия кнопки <strong>Сформировать</strong>. </li></ul><h3>Панель быстрых (избранных) настроек</h3>
<ul><li>Установите флажок<strong> Формировать сразу</strong> меню <strong>Еще</strong>, для того чтобы отчет формировался автоматически сразу после открытия, без нажатия кнопки <strong>Сформировать</strong>.</li></ul><h3>Период</h3>
<div>
<ul><li>Период может выводиться в виде полей <b>Дата начала</b> и <b>Дата окончания</b>. </li>
<li>Ввести начало и окончание произвольного периода можно вручную или выбрать из календаря с помощью кнопок <img src="StdPicture.Calendar"></img>. </li>
<li>С помощью ссылки <b>Сегодня</b> можно установить в календаре текущую дату.</li></ul></div>
<div>
<ul><li>С помощью кнопки справа можно выбрать месяц, квартал или год, а также стандартный период.</li>
<li>По умолчанию выбран произвольный период, из календаря можно выбрать любой месяц какого-либо года или весь год.</li>
<li>Можно воспользоваться ссылкой <b>Показать стандартные периоды</b>, после этого можно выбрать относительный период с помощью кнопок, например, <b>День</b>. Выберите одно из перечисленных значений. Для того чтобы вернуться к выбору фиксированных значений периода, нажмите ссылку <b>Показать произвольный период</b>. Тогда можно будет снова ввести конкретные даты.</li>
<li>В зависимости от настроек разработчика <b>Период</b> может выводиться в виде ссылку, в этом случае листать периоды можно с помощью значков <b>&gt;&lt;</b>, для выбора периода следует нажать на ссылку с наименованием периода.</li></ul></div>
<div>
<h3>Панель быстрых (избранных) настроек</h3>
<div>
<ul><li>Размещается в шапке отчета, в панель выводятся наиболее важные настройки, некоторые из которых могут быть обязательными для заполнения.</li>
<li>С помощью кнопки <img src="CommonPicture.Закрепить"></img> можно открыть быстрые настройки и изменить их состав с помощью флажков.</li>
<li>С помощью ссылки <b>Больше возможностей</b> можно открыть <a href="CommonForm.ФормаНастроекОтчета/Help">Настройки отчета</a> (расширенный режим).</li></ul></div>
<li>С помощью кнопки <img src="CommonPicture.Закрепить"></img> <b>Изменить состав быстрых настроек</b> можно открыть быстрые настройки и изменить их состав с помощью флажков.</li>
<li>С помощью флажка можно <b>Выводить заголовки</b> настроек или спрятать их при необходимости. </li>
<li>В большинстве случаев поля в шапке отчетов вполне понятны без заголовков: по их содержимому, подсказке ввода или всплывающей подсказке при наведении курсором. Тем самым, шапка отчета занимает меньше места по ширине экрана.</li>
<li>С помощью ссылки <b>Больше возможностей</b> можно открыть <a href="CommonForm.ФормаНастроекОтчета/Help">Настройки отчета</a> (расширенный режим).</li></ul><h3>Сохранение отчета</h3></div>
<div>
<h3>Фильтр по значению</h3>
<ul><li>С помощью кнопки <img src="CommonPicture.Скачать"></img> <b>(Ctrl+S)</b> можно <b>Сохранить результат отчета в файл</b>. Укажите папку для сохранения, выберите тип и напишите имя файла. Для сохранения отчета можно выбрать несколько типов файла, например в Excel.</li>
<li>При сохранении результата отчета в формат Excel из шапки отчета скрываются картинки-индикаторы сортировки.</li></ul></div>
<div>
<ul><li>Для быстрой установки фильтра можно использовать универсальную строку поиска. С помощью знаков операций можно построить выражение для поиска. Подробнее см. подсказку <b>"?"</b>. </li>
<li>Если выделить несколько ячеек, можно воспользоваться расчетом показателей, в этом случае в данной строке появляется результат.</li></ul><h3>Расчетные показатели</h3></div>
<div>
<ul><li>С помощью кнопки <img src="CommonPicture.Сумма"></img> можно открыть выпадающее меню расчетных показателей для выделенных ячеек (выбранный показатель отображается на кнопке): количество, среднее арифметическое выделенных ячеек, минимум и максимум, значение выводится в универсальной строке поиска.</li>
<h3>Расчетные показатели и строка фильтра</h3></div>
<div>
<ul><li>Справа в шапке отчета выводится строка фильтра и автосуммы (расчетных показателей).</li>
<li>С помощью строки фильтра можно добавлять новые фильтры по точному значению или фрагменту значения любого из полей, выведенных в отчет. Например, для того чтобы быстро установить фильтр по значению <b>Розничный склад</b>, достаточно ввести в эту строку фрагмент <b>"роз"</b> и программа сама предложит варианты фильтров. Кроме того, можно добавлять фильтры с условиями, например, <b>Остатки &gt; 500</b>. С помощью знаков операций можно построить выражение для поиска.</li>
<li>Если выделить несколько ячеек, можно воспользоваться расчетом показателей, в этом случае в данной строке появляется результат.</li>
<li>Перед строкой фильтра предусмотрена кнопка <img src="CommonPicture.Сумма"></img> с выпадающим подменю для выбора основного вида расчетного показателя для выделенных ячеек:</li>
<ul><li>С помощью кнопки <img src="CommonPicture.Сумма"></img> можно открыть выпадающее меню расчетных показателей для выделенных ячеек (выбранный показатель отображается на кнопке): <b>Сумма, Количество, Среднее арифметическое выделенных ячеек, Минимум и Максимум</b>, значение выводится в универсальной строке поиска.</li>
<li>Если включить <b>Все показатели</b>, то в нижней части варианта отчета показывается строка, в которой выводятся показатели.</li>
<li>При вычислении показателей выполняется преобразование текстовых строк в выбранных ячейках в числа. Преобразование происходит в соответствии с региональными настройками. При этом если форматирование числовых полей было перенастроено так, что представление числа перестает им соответствовать, то показатели не вычисляются.</li></ul></div>
<li>При вычислении показателей выполняется преобразование текстовых строк в выбранных ячейках в числа. Преобразование происходит в соответствии с региональными настройками. При этом если форматирование числовых полей было перенастроено так, что представление числа перестает им соответствовать, то показатели не вычисляются.</li></ul></ul></div>
<h3>Варианты отчета</h3>
<ul><li>В программе может быть предусмотрено несколько <a href="Catalog.ВариантыОтчетов/Help">вариантов отчетов</a>, выполняющих схожий анализ. Для их просмотра предусмотрена кнопка <img src="CommonPicture.ВыбратьВариантОтчета"></img> <strong>Варианты отчета</strong>.
<ul><li>Выберите из выпадающего списка нужный вариант отчета. Текущий <a href="Catalog.ВариантыОтчетов.Form.ФормаЭлемента/Help">вариант отчета</a> отмечен флажком.
@@ -31,7 +50,7 @@
<h3>Загрузка варианта отчета из файла</h3>
<div>
<ul><li>Нажмите <b>Еще - Варианты отчета - Обновить из файла</b> для загрузки варианта отчета, сохраненного вместе с пользовательскими настройками в архивный файл на компьютере. Укажите путь к архиву с вариантом отчета.</li>
<li>Данная возможность предназначена для обмена настройками вариантов отчетов между информационными базами идентичной структуры.</li></ul><h3>Настройки отчета из контекстного меню</h3>
<li>Данная возможность предназначена для обмена настройками вариантов отчетов между информационными базами идентичной структуры.</li></ul><h3>Контекстное меню</h3>
<div>
<ul><li>С помощью команд контекстного меню ячейки по правой кнопке мыши можно быстро изменить вид отчета, настроить фильтры, сортировки: 
<ul><li>изменить уровни группировок отчета;</li>
@@ -39,20 +58,33 @@
<li>С помощью команды <strong>Фильтровать</strong> можно быстро установить отбор по текущему значению, используя предлагаемые команды сравнения. </li>
<ul><li>С помощью команды <b>Еще</b> можно получить дополнительные возможности по настройке фильтра. </li>
<li>С помощью команды <b>Больше возможностей</b> можно перейти к расширенным <a href="CommonForm.ФормаНастроекОтчета/Help">настройкам</a> отборов отчета.</li></ul><li><b>Сортировать</b> - по возрастанию или убыванию; </li>
<li>Отсортированная колонка обозначается значком.</li>
<li><b>Оформить</b> - быстро изменить цвет выделенных ячеек, высоту и ширину колонки;</li>
<ul><li>По команде <b>Еще</b> можно перейти к более сложному <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.ЭлементУсловногоОформленияОтчета/Help">форматированию</a> для выбранных ячеек.</li></ul><li><b>Расшифровать </b>- переход к выбору полей для расшифровки и формированию отчета.</li></ul></li>
<ul><li>По команде <b>Еще</b> можно перейти к более сложному <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.ЭлементУсловногоОформленияОтчета/Help">форматированию</a> для выбранных ячеек, при этом некоторые параметры (поле для условного оформления, отбор) заполняются автоматически из контекста.</li>
<li>Можно оформить выбранные ячейки цветом, определить высоту строк или ширину колонок. </li>
<li>Можно выделить отрицательные или положительные значения цветом.</li></ul><li>По команде <b>Детальные записи</b> можно перейти к расшифровке отчета по детальным записям. В структуре такого отчета имеется только один элемент <b>Детальные записи</b>.</li>
<li>С помощью команды контекстного меню по правой кнопке мыши можно выбранную позицию отчета <b>Расшифровать по детальным записям</b>.</li>
<li><b>Расшифровать </b>- переход к выбору полей для расшифровки и формированию отчета.</li></ul></li>
<li>Контекстное меню шапки отчета содержит полезные команды:</li>
<ul><li>с помощью меню по левой кнопке мыши можно настроить сортировку в выбранном поле, задать фильтры по значению, выбрав из списка.</li>
<ul><li>По команде <b>Еще</b> можно перейти к настройке поля, вставить в шапку дополнительные поля, выбрав их из списка, оформить поле, скрыть или переименовать.</li></ul><li>С помощью меню по правой кнопке мыши можно оформить поля, настроить отборы и сортировки. </li>
<ul><li>По команде <b>Еще</b> можно открыть дополнительные возможности оформления поля.</li></ul></ul></ul></div></div>
<ul><li>По команде <b>Еще</b> можно открыть дополнительные возможности оформления поля, можно настроить условное оформление поля.</li></ul></ul></ul></div></div>
<h3><a name="#1">Настройки</a></h3>
<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li>По кнопке <strong>Настройки</strong> можно перейти к <a href="CommonForm.ФормаНастроекОтчета/Help">настройке</a> параметров отчета. Часть настроек (отборы) иногда выведены в шапку отчета.
<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li>Значения настроек отчета автоматически сохраняются при закрытии отчета и восстанавливаются при следующем открытии отчета.</li>
<li>По кнопке <strong>Настройки</strong> можно перейти к <a href="CommonForm.ФормаНастроекОтчета/Help">настройке</a> параметров отчета. Часть настроек (отборы) иногда выведены в шапку отчета.
</li>
<li>В форме настройки отчета, в расширенном режиме, теперь можно добавлять отборы не только с помощью выбора полей из списка, но и вводом по первым буквам.</li>
<li>Нажмите <strong>Еще - Стандартные настройки</strong>, для того чтобы вернуться к настройкам по умолчанию.
</li>
<li>Нажмите <strong>Еще - Персональные настройки - Сохранить настройки</strong>, для того чтобы записать текущие настройки отчета. Напишите имя настроек для сохранения.</li>
<li>Нажмите <strong>Еще - Персональные настройки - Выбрать настройки</strong>, для того чтобы воспользоваться ранее сохраненными настройками отчета. В списке можно посмотреть также настройки отчета, переданные другими пользователями.</li>
<li>Нажмите <b>Еще - Персональные настройки - Поделиться настройками</b>, для того чтобы передать текущие настройки отчета другим пользователям. Настройки передаются и без предварительного сохранения. В открывшемся списке выберите пользователей или группы пользователей, нажмите <b>Поделиться</b>. Если все в порядке, через некоторое время программа выводит сообщение об успешной передаче настроек.</li></ul><p></p>
<li>Нажмите <b>Еще - Персональные настройки - Поделиться настройками</b>, для того чтобы передать текущие настройки отчета другим пользователям. Настройки передаются и без предварительного сохранения. В открывшемся списке выберите пользователей или группы пользователей, нажмите <b>Поделиться</b>. Если все в порядке, через некоторое время программа выводит сообщение об успешной передаче настроек.</li></ul><h3>Отмена и повтор действий</h3></div>
<div>
<ul><li>В командной панели отчета размещены кнопки <img src="CommonPicture.ОтменитьДействие"></img>отмены и <img src="CommonPicture.ПовторитьДействие"></img>повтора действий.</li>
<li>При активной настройке отчета с их помощью удобно отменять одно или несколько последних настроечных действий, выполненных из контекстного меню или в форме настроек: добавление фильтров, группировок, перемещение колонок, изменение сортировки и т.п. </li>
<li>Также можно сбросить до стандартных настроек. </li></ul></div>
<div>
<p></p>
<h3 dir="ltr">Печать отчета </h3>
<ul dir="ltr"><li>Сформированный отчет можно распечатать, нажав кнопку <img src="StdPicture.Print" width="16" height="16"></img> <strong>Печать</strong>.
</li>
@@ -79,10 +111,19 @@
<div><strong>Включить в существующую рассылку отчетов</strong>. Для этого из <a href="Catalog.РассылкиОтчетов/Help">списка рассылок</a> выберите нужную.</div></li></ul><h3>Выбор варианта отчета</h3>
<ul><li>Для загрузки ранее сохраненного варианта отчета воспользуйтесь командой <strong>Еще - Варианты отчета - Выбрать</strong>.
<ul><li>в <a href="SettingsStorage.ХранилищеВариантовОтчетов.Form.ВыборВариантаОтчета/Help">списке вариантов отчета</a> нажмите кнопку <strong>Выбрать</strong> для перехода к нужному варианту отчета.</li></ul></li></ul><h3>Сброс настроек</h3>
<ul><li>Нажмите <strong>Еще - Стандартные настройки</strong>, для того чтобы сбросить пользовательские настройки.</li></ul><h3>Другие доступные действия</h3>
<ul><li>Нажмите <strong>Еще - Стандартные настройки</strong>, для того чтобы сбросить пользовательские настройки.</li></ul><h3>Редактирование таблицы отчета</h3>
<div>
<ul><li>С помощью команд меню <b>Еще - Таблица</b> можно изменить таблицу отчета и вид отчета:</li>
<li><b>Зафиксировать таблицу</b>;</li>
<li><b>Отображать группы</b> - включить или выключить группы;</li>
<li><b>Редактирование</b> - начать или закончить редактирование.</li>
<li>В некоторых отчетах может быть предусмотрена кнопка <img src="CommonPicture.РедактироватьМакет"></img> <b>Изменить табличный документ</b>, которая позволяет отредактировать таблицу отчета как табличный документ - изменить форматы ячеек и внешний вид. Можно изменить цвет, шрифт, оформление всего отчета, но информацию отчета изменить уже нельзя.</li>
<li>С помощью кнопки <b>Записать и закрыть</b> можно сохранить табличный документ на компьютер. Напишите адрес для сохранения файла.</li></ul><h3>Изменение варианта отчета</h3></div>
<div>
<ul><li>При работе с отчетом можно перейти к изменению данного варианта отчета. Для этого в <a href="CommonForm.ФормаНастроекОтчета/Help">настройках отчета</a> выполните команду <b>Настройки для технического специалиста</b> меню <b>Еще</b>.</li></ul></div>
<h3>Другие доступные действия</h3>
<ul><li>Для <a href="v8help://moxelui/form_finddialog">поиска в отчете</a> воспользуйтесь командой <strong>Найти</strong>.
</li>
<li>С помощью кнопок <img src="StdPicture.CollapseAll"></img> <strong>Свернуть все группы</strong> или <img src="StdPicture.ExpandAll"></img> <strong>Развернуть все группы</strong> можно скрыть или показать группировку отчета.
</li>
<li>С помощью кнопки <b>Разворачивать до</b> можно выбрать уровень группировки отчета.</li>
<li>Для сохранения результата отчета в файл нажмите <b>Ctrl+S</b>, укажите наименование файла и путь для сохранения.</li></ul></div></body></html>
<li>С помощью кнопки <b>Разворачивать до</b> можно выбрать уровень группировки отчета. Если отчет сложный, состоит из нескольких разделов, например из таблицы, диаграммы и двух списков, то уровни группировок нумеруются.</li></ul></div></div></body></html>
@@ -184,20 +184,16 @@
Если ИмяПодчиненнойФормы = "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета"
Или ПодчиненнаяФорма.ОписаниеОповещенияОЗакрытии <> Неопределено Тогда
РезультатОбработан = Истина; // См. ВсеНастройкиЗавершение.
РезультатОбработан = Истина; // См. ПрименитьНастройкиИПереформироватьОтчет.
ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда
ПозицияТочки = СтрДлина(ИмяПодчиненнойФормы);
Пока КодСимвола(ИмяПодчиненнойФормы, ПозицияТочки) <> 46 Цикл // Не точка.
ПозицияТочки = ПозицияТочки - 1;
КонецЦикла;
СуффиксФормыИсточника = ВРег(Сред(ИмяПодчиненнойФормы, ПозицияТочки + 1));
Если СуффиксФормыИсточника = ВРег("ФормаНастроекОтчета")
Или СуффиксФормыИсточника = ВРег("ФормаНастроек")
Или СуффиксФормыИсточника = ВРег("ФормаВариантаОтчета")
Или СуффиксФормыИсточника = ВРег("ФормаВарианта") Тогда
ЧастиИмениФормы = СтрРазделить(ИмяПодчиненнойФормы, ".");
ИмяФормыИсточника = ВРег(ЧастиИмениФормы[ЧастиИмениФормы.Количество() - 1]);
Если ИмяФормыИсточника = ВРег("ФормаНастроекОтчета")
Или ИмяФормыИсточника = ВРег("ФормаНастроек")
Или ИмяФормыИсточника = ВРег("ФормаВариантаОтчета")
Или ИмяФормыИсточника = ВРег("ФормаВарианта") Тогда
ОбновитьЭлементыФормыНастроек(Результат);
РезультатОбработан = Истина;
@@ -718,7 +714,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ВсеНастройкиЗавершение(Результат, ПараметрыВыполнения) Экспорт
Процедура ПрименитьНастройкиИПереформироватьОтчет(Результат, ПараметрыВыполнения) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
@@ -1210,7 +1206,7 @@
НайденныеЗаписи = СтекНастроек.НайтиСтроки(Новый Структура("Порядок", Порядок));
ТекущиеНастройкиСтека = НайденныеЗаписи[0];
Результат = ВариантыОтчетовСлужебныйКлиент.СтандартныйРезультатНастройкиИзКонтекстногоМеню(
Результат = ВариантыОтчетовСлужебныйКлиент.РезультатКонтекстнойНастройки(
Отчет.КомпоновщикНастроек, ТекущиеНастройкиСтека.Действие, УникальныйИдентификатор);
Результат.Вставить("НастройкиКД", ТекущиеНастройкиСтека.Настройки);
@@ -1221,7 +1217,7 @@
ВариантыОтчетовСлужебныйКлиент.СброситьПометкиСтекаНастроек(СтекНастроек);
ТекущиеНастройкиСтека.Пометка = Истина;
ВсеНастройкиЗавершение(Результат, Неопределено);
ПрименитьНастройкиИПереформироватьОтчет(Результат, Неопределено);
КонецПроцедуры
@@ -2014,8 +2010,7 @@
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("ВариантНаименование", Строка(ОтчетНаименованиеТекущегоВарианта));
Обработчик = Новый ОписаниеОповещения("ВсеНастройкиЗавершение", ЭтотОбъект);
Обработчик = Новый ОписаниеОповещения("ПрименитьНастройкиИПереформироватьОтчет", ЭтотОбъект);
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаНастроек", ПараметрыФормы, ЭтотОбъект,,,, Обработчик);
Если ВыполнятьЗамеры Тогда
@@ -3757,6 +3752,7 @@
КонецЕсли;
Элементы.КомандыПанелиБыстрыхНастроек.Видимость = (КоличествоДоступныхНастроек.БыстрогоДоступа > 0);
Элементы.ИзменитьСоставБыстрыхНастроекЕще.Видимость = Элементы.КомандыПанелиБыстрыхНастроек.Видимость;
КонецЕсли;
// Команды выбора вариантов.
@@ -4634,8 +4630,7 @@
КонецЕсли;
УточнитьПризнакАвтоформированияОтчета(Результат);
ВсеНастройкиЗавершение(Результат, Неопределено);
ПрименитьНастройкиИПереформироватьОтчет(Результат, Неопределено);
КонецПроцедуры
@@ -4928,11 +4923,11 @@
&НаКлиенте
Процедура УточнитьПризнакАвтоформированияОтчета(ПараметрыОбновления)
ДопустимоеВремяДляАвтоформированияОтчетаВСек = 5;
ВремяФормированияОтчетаВСек = НастройкиОтчета.СвойстваРезультата.ВремяФормирования;
Переформировать = (ВремяФормированияОтчетаВСек <= ДопустимоеВремяДляАвтоформированияОтчетаВСек);
ПараметрыОбновления.Вставить("Переформировать", Переформировать);
Если Не ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОбновления, "Переформировать", Ложь) Тогда
ДопустимоеВремяДляАвтоформированияОтчета = 5; // секунд
ВремяФормированияОтчета = НастройкиОтчета.СвойстваРезультата.ВремяФормирования;
ПараметрыОбновления.Вставить("Переформировать", ВремяФормированияОтчета <= ДопустимоеВремяДляАвтоформированияОтчета);
КонецЕсли;
КонецПроцедуры
@@ -113,6 +113,12 @@
#Область СлужебныйПрограммныйИнтерфейс
Функция ИмяКонстантыАРМБазовойФункциональности() Экспорт
Возврат "СтандартныеПодсистемыВАвтономномРежиме";
КонецФункции
Процедура ВыключитьСвойствоИБ() Экспорт
ЭтоАвтономноеРабочееМесто = Константы.ЭтоАвтономноеРабочееМесто.СоздатьМенеджерЗначения();
@@ -125,6 +131,17 @@
КонецЕсли;
ИмяКонстанты = ИмяКонстантыАРМБазовойФункциональности();
Если Метаданные.Константы.Найти(ИмяКонстанты) <> Неопределено Тогда
Если Константы[ИмяКонстанты].Получить() = Истина Тогда
Константы[ИмяКонстанты].Установить(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Для вызова из формы восстановления связи с главным узлом
@@ -132,7 +149,13 @@
//
Процедура ПриПодтвержденииОтключенияСвязиСГлавнымУзлом() Экспорт
Если НЕ Константы.ЭтоАвтономноеРабочееМесто.Получить() Тогда
ИмяКонстанты = ИмяКонстантыАРМБазовойФункциональности();
ЕстьКонстантаБазовойФункциональности = (Метаданные.Константы.Найти(ИмяКонстанты) <> Неопределено);
Если Константы.ЭтоАвтономноеРабочееМесто.Получить() = Ложь
И
(ЕстьКонстантаБазовойФункциональности
И Константы[ИмяКонстанты].Получить() = ЛОЖЬ) Тогда
Возврат;
@@ -1017,6 +1017,13 @@
Константы.ЭтоАвтономноеРабочееМесто.Установить(Истина);
Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(Ложь);
ИмяКонстанты = АвтономнаяРабота.ИмяКонстантыАРМБазовойФункциональности();
Если Метаданные.Константы.Найти(ИмяКонстанты) <> Неопределено Тогда
Константы[ИмяКонстанты].Установить(Истина);
КонецЕсли;
// Константа влияет на открытие помощника по настройке автономного рабочего места.
Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина);
@@ -337,7 +337,7 @@
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма выполнения задачи, где:
// * Объект - ЗадачаОбъект - задача объект.
// * Объект - ЗадачаОбъект - задача объекта.
// ИмяСобытия - Строка - имя события.
// Параметр - Произвольный - параметр события.
// Источник - Произвольный - источник события.
@@ -3174,16 +3174,9 @@
ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(),
"ПанельОтчетов");
Если ОбщиеНастройки = Неопределено Тогда
ОбщиеНастройки = Новый Структура("ПоказыватьПодсказки, ИскатьВоВсехРазделах, ПоказатьОповещениеОПодсказках");
ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Ложь;
ОбщиеНастройки = Новый Структура("ПоказыватьПодсказки, ИскатьВоВсехРазделах");
ОбщиеНастройки.ПоказыватьПодсказки = ГлобальныеНастройки().ВыводитьОписания;
ОбщиеНастройки.ИскатьВоВсехРазделах = Ложь;
Иначе
// Возможность можно считать новой для пользователя только в том случае,
// если у пользователя есть понимание что такое "старые" возможности (т.е. если он уже работал с этой формой).
Если Не ОбщиеНастройки.Свойство("ПоказатьОповещениеОПодсказках") Тогда
ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", Истина);
КонецЕсли;
КонецЕсли;
Возврат ОбщиеНастройки;
КонецФункции
@@ -3193,9 +3186,6 @@
Если ТипЗнч(ОбщиеНастройки) <> Тип("Структура") Тогда
Возврат Неопределено;
КонецЕсли;
Если ОбщиеНастройки.Количество() < 3 Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ОбщиеНастройки, ОбщиеНастройкиПанели(), Ложь);
КонецЕсли;
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(
ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(),
"ПанельОтчетов",
@@ -54,7 +54,7 @@
ПараметрыФормы.Вставить("КэшЗначенийОтборов", КэшЗначенийОтборов);
ОткрытьФорму(
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.КонтекстнаяНастройкаОтчета",
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкаПоля",
ПараметрыФормы,
Форма,
Форма.УникальныйИдентификатор);
@@ -609,7 +609,7 @@
ПараметрыФормы.Вставить("Ячейка", Ячейка);
ОткрытьФорму(
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.РасширеннаяНастройкаФильтраОтчета",
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ФильтроватьПоПолю",
ПараметрыФормы,
Форма,
Форма.УникальныйИдентификатор);
@@ -3397,7 +3397,7 @@
ИдентификаторВладельца = ?(ЭтоФормОтчета, Форма.УникальныйИдентификатор, Форма.ВладелецФормы.УникальныйИдентификатор);
Результат = СтандартныйРезультатНастройкиИзКонтекстногоМеню(КомпоновщикНастроек, Действие, ИдентификаторВладельца);
Результат = РезультатКонтекстнойНастройки(КомпоновщикНастроек, Действие, ИдентификаторВладельца);
Если ЭтоФормОтчета Тогда
Оповестить(Действие, Результат, ЭтотОбъект);
@@ -3422,14 +3422,13 @@
// * ПользовательскиеНастройкиМодифицированы - Булево
// * СброситьПользовательскиеНастройки - Булево
//
Функция СтандартныйРезультатНастройкиИзКонтекстногоМеню(КомпоновщикНастроек, Действие, ИдентификаторВладельца) Экспорт
Функция РезультатКонтекстнойНастройки(КомпоновщикНастроек, Действие, ИдентификаторВладельца) Экспорт
Результат = Новый Структура;
Результат.Вставить("КомпоновщикНастроекКД", КомпоновщикНастроек);
Результат.Вставить("Действие", Действие);
Результат.Вставить("ИдентификаторВладельца", ИдентификаторВладельца);
Результат.Вставить("Переформировать", СтрЗаканчиваетсяНа(Действие, "Сформировать"));
Результат.Вставить("УчитыватьВремяФормирования", Истина);
Результат.Вставить("Переформировать", Ложь);
Результат.Вставить("ВариантМодифицирован", Истина);
Результат.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
Результат.Вставить("СброситьПользовательскиеНастройки", Истина);
@@ -366,10 +366,13 @@
КонецЕсли;
Если ПараметрыШтрихкода.ТипКода = 16 Тогда // QR
Если ПараметрыШтрихкода.Свойство("ЛоготипКартинка") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипКартинка) Тогда
Если ПараметрыШтрихкода.Свойство("ЛоготипКартинка") И ЗначениеЗаполнено(ПараметрыШтрихкода.ЛоготипКартинка) Тогда
ВнешняяКомпонента.ЛоготипКартинка = ПараметрыШтрихкода.ЛоготипКартинка;
Иначе
ВнешняяКомпонента.ЛоготипКартинка = "";
КонецЕсли;
Если ПараметрыШтрихкода.Свойство("ЛоготипРазмерПроцентОтШК") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда
Если ПараметрыШтрихкода.Свойство("ЛоготипРазмерПроцентОтШК") И Не ПустаяСтрока(
ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда
ВнешняяКомпонента.ЛоготипРазмерПроцентОтШК = ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК;
КонецЕсли;
КонецЕсли;
@@ -1646,7 +1646,11 @@
Поток.ПараметрыМетода = ПараметрыПотока;
Поток.КлючПотока = КлючПотока;
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей = РегистрыСведений.ДлительныеОперации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИдентификаторПотока.Установить(Поток.ИдентификаторПотока);
НаборЗаписей.Прочитать();
Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Поток, , "ИдентификаторПотока,ПараметрыМетода,КлючПотока");
@@ -1656,6 +1660,8 @@
НаборЗаписей.Записать();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ЗафиксироватьТранзакцию();
@@ -1717,13 +1723,13 @@
Пока Потоки.Количество() >= МаксимумПотоков Цикл
ЕстьЗавершеныеПотоки = ЕстьЗавершенныеПотоки(Потоки, Результаты, ЗавершитьДосрочноЕслиОшибка);
ЕстьЗавершенныеПотоки = ЕстьЗавершенныеПотоки(Потоки, Результаты, ЗавершитьДосрочноЕслиОшибка);
Если ЗавершитьДосрочноЕслиОшибка И ЕстьЗавершеныеПотоки = Неопределено Тогда
Если ЗавершитьДосрочноЕслиОшибка И ЕстьЗавершенныеПотоки = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ЕстьЗавершеныеПотоки Тогда
Если ЕстьЗавершенныеПотоки Тогда
Продолжить;
КонецЕсли;
@@ -1760,14 +1766,14 @@
Потоки = ПотокиДлительныхОпераций(ИдентификаторФормы);
Пока Потоки.Количество() > 0 Цикл
ЕстьЗавершеныеПотоки = ЕстьЗавершенныеПотоки(Потоки, Результаты, ЗавершитьДосрочноЕслиОшибка);
ЕстьЗавершенныеПотоки = ЕстьЗавершенныеПотоки(Потоки, Результаты, ЗавершитьДосрочноЕслиОшибка);
Если ЕстьЗавершеныеПотоки = Неопределено Тогда
Если ЕстьЗавершенныеПотоки = Неопределено Тогда
ОтменитьВыполнениеВсехПотоков(Результаты, ИдентификаторФормы);
Прервать;
КонецЕсли;
Если Не ЕстьЗавершеныеПотоки Тогда
Если Не ЕстьЗавершенныеПотоки Тогда
ОжидатьЗавершениеПотока(Потоки[0]);
КонецЕсли;
@@ -1936,6 +1942,8 @@
Блокировка.Заблокировать();
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей = РегистрыСведений.ДлительныеОперации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИдентификаторПотока.Установить(Идентификатор);
@@ -1954,6 +1962,8 @@
НаборЗаписей.Записать();
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
@@ -1965,6 +1975,8 @@
Процедура УдалитьПоток(ИдентификаторПотока)
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей = РегистрыСведений.ДлительныеОперации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИдентификаторПотока.Установить(ИдентификаторПотока);
НаборЗаписей.Записать();
@@ -1983,14 +1995,29 @@
Возврат 1;
КонецЕсли;
ДопустимоеКоличествоПотоков = Константы.КоличествоПотоковДлительныхОпераций.Получить() - 1;
ДопустимоеКоличествоПотоков = Константы.КоличествоПотоковДлительныхОпераций.Получить();
Возврат ?(ДопустимоеКоличествоПотоков < 1, 1, ДопустимоеКоличествоПотоков)
Возврат КоличествоПотоковСУчетомУправляющегоПотока(ДопустимоеКоличествоПотоков);
КонецФункции
Функция КоличествоПотоковСУчетомУправляющегоПотока(ДопустимоеКоличествоПотоков)
Если ДопустимоеКоличествоПотоков > 1 Тогда
Возврат ДопустимоеКоличествоПотоков - 1;
ИначеЕсли ДопустимоеКоличествоПотоков = 1 Тогда
Возврат ДопустимоеКоличествоПотоков;
КонецЕсли;
// Значение по умолчанию. Управляющий поток + 3 дочерних
Возврат 3;
КонецФункции
Функция КоличествоРаботающихПотоков()
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
@@ -2033,6 +2060,8 @@
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Поток Из Результат Цикл
@@ -148,7 +148,7 @@
// Возвращает таблицу, извлеченную из временного хранилища для сопоставления загружаемых данных с данными в программе.
// Список колонок извлекаемой таблицы динамический и формируется на основе макета загружаемых данных.
// В возвращаемом значении описана только служебная колонка, которая присутствуют всегда.
// В возвращаемом значении описана только служебная колонка, которая присутствует всегда.
//
// Параметры:
// АдресРезультата - Строка - адрес во временном хранилища
@@ -1588,6 +1588,8 @@
МодульИнтеграцияПодсистемБИП.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии);
КонецЕсли;
ПользователиСлужебный.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии);
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
@@ -242,6 +242,21 @@
//
Процедура ПриПолученииДоступныхРасширенийФормата(РасширенияФормата) Экспорт
КонецПроцедуры
// Вызывается в событии ПриЗаписи константы ЭтоАвтономноеРабочееМесто.
// Позволяет переопределить стандартную обработку при измении значения.
//
// Параметры:
// ПредыдущееЗначение - Булево - значение константы ЭтоАвтономноеРабочееМесто до изменения.
// НовоеТекущее - Булево - записываемое значение константы ЭтоАвтономноеРабочееМесто до изменения.
// СтандартнаяОбработка - Булево - отключение стандартного поведения системы при записи константы
// (значение по-умолчанию Истина).
//
Процедура ПриИзмененииОпцииАвтономногоРежимаРаботы(ПредыдущееЗначение, НовоеТекущее, СтандартнаяОбработка) Экспорт
КонецПроцедуры
#КонецОбласти
@@ -4789,7 +4789,7 @@
// - РегистрНакопленияМенеджер
// - РегистрРасчетаМенеджер
// - РегистрБухгалтерииМенеджер - менеджер для создания наборов.
// Размер - Число - начальное количество хранилища переиспользуемых наборов.
// Размер - Число
//
// Возвращаемое значение:
// Структура:
@@ -41,7 +41,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.6.100";
Описание.Версия = "3.1.6.118";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1896,11 +1896,17 @@
Если ПредопределенныеДанные.Колонки.Найти("Ссылка") <> Неопределено Тогда
Для Каждого СтрокаПредопределенныхДанных Из ПредопределенныеДанные Цикл
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Если ТипЗнч(СтрокаПредопределенныхДанных.Ссылка) = Тип("УникальныйИдентификатор") Тогда
СтрокаПредопределенныхДанных.Ссылка = МенеджерОбъекта.ПолучитьСсылку(СтрокаПредопределенныхДанных.Ссылка);
ИначеЕсли ТипЗнч(СтрокаПредопределенныхДанных.Ссылка) = Тип("Строка") Тогда
СтрокаПредопределенныхДанных.Ссылка = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаПредопределенныхДанных.Ссылка));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
@@ -1922,8 +1928,17 @@
МодульМультиязычностьСервер.ПриПолученииПараметровЗаполненияПредопределенныхДанных(ПараметрыЗаполнения);
КонецЕсли;
ПроверятьНеобходимостьВыполнения = ДополнительныеПараметры <> Неопределено
И ТипЗнч(ДополнительныеПараметры) = Тип("Структура")
И ДополнительныеПараметры.Свойство("НовыеОбъекты");
Для Каждого МетаданныеОбъекта Из ОбъектыСНачальнымЗаполнением Цикл
Если ПроверятьНеобходимостьВыполнения
И ДополнительныеПараметры.НовыеОбъекты.Найти(МетаданныеОбъекта.ПолноеИмя()) = Неопределено Тогда
Продолжить;
КонецЕсли;
ПараметрыЗаполнения = НаборПараметровДляЗаполненияОбъекта(МетаданныеОбъекта);
МенеджерОбъекта = ПараметрыЗаполнения.МенеджерОбъекта;
@@ -2905,6 +2920,12 @@
ВсеНовыеПодсистемы = СведенияОбОбновленииИнформационнойБазы().ВсеНовыеПодсистемы;
// Добавление обработчика заполнения предопределенных данных.
ОбработчикПерехода = ОбработчикиПерехода.Добавить();
ОбработчикПерехода.ПредыдущееИмяКонфигурации = "*";
ОбработчикПерехода.ОбщиеДанные = Ложь;
ОбработчикПерехода.Процедура = ОбработчикНачальногоЗаполненияПредопределенных();
НовыеОбъектыМетаданных = Новый Массив;
Для Каждого Подсистема Из ВсеНовыеПодсистемы Цикл
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Подсистема);
@@ -2966,10 +2987,14 @@
Если ОбщегоНазначения.РазделениеВключено() Тогда
Отбор.Вставить("ОбщиеДанные", Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных());
КонецЕсли;
Результат = ОбработчикиПерехода.НайтиСтроки(Отбор);
ВыбранныеОбработчики = ОбработчикиПерехода.НайтиСтроки(Отбор);
Отбор.ПредыдущееИмяКонфигурации = ПредыдущееИмяКонфигурации;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ОбработчикиПерехода.НайтиСтроки(Отбор), Истина);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ВыбранныеОбработчики, ОбработчикиПерехода.НайтиСтроки(Отбор), Истина);
Результат = Новый Структура;
Результат.Вставить("Обработчики", ВыбранныеОбработчики);
Результат.Вставить("НовыеОбъекты", НовыеОбъектыМетаданных);
Возврат Результат;
@@ -3045,7 +3070,9 @@
КонецЕсли;
КонецЕсли;
Обработчики = ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ИтерацииОбновления);
ОбработчикиИНовыеОбъекты = ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ИтерацииОбновления);
Обработчики = ОбработчикиИНовыеОбъекты.Обработчики;
НовыеОбъекты = ОбработчикиИНовыеОбъекты.НовыеОбъекты;
ПодсистемаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом");
// Выполняем все обработчики перехода.
@@ -3054,7 +3081,16 @@
ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна();
ОтключитьОбновлениеКлючейДоступа(Истина, ПодсистемаСуществует);
Попытка
// Начальное заполнение предопределенных для новых объектов.
Если Обработчик.Процедура = ОбработчикНачальногоЗаполненияПредопределенных() Тогда
ПараметрыОбработчика = Новый Массив;
ПараметрыОбработчика.Добавить(Ложь);
ПараметрыОбработчика.Добавить(Новый Структура("НовыеОбъекты", НовыеОбъекты));
ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика);
Иначе
// Выполнение обработчиков перехода.
ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура);
КонецЕсли;
ОтключитьОбновлениеКлючейДоступа(Ложь, ПодсистемаСуществует);
Исключение
@@ -3123,6 +3159,12 @@
КонецПроцедуры
Функция ОбработчикНачальногоЗаполненияПредопределенных()
Возврат "ОбновлениеИнформационнойБазыСлужебный.НачальноеЗаполнениеПредопределенныхДанных";
КонецФункции
Процедура ПриЗавершенииПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ПредыдущаяВерсияКонфигурации, Параметры)
ИмяКонфигурации = Метаданные.Имя;
@@ -4601,6 +4643,10 @@
//
Процедура ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата) Экспорт
КонтекстОбработчика.Вставить("ПропуститьОтменуТранзакций");
НачатьТранзакцию();
Попытка
ОбработчикОбновления = ОбработчикОбновления(КонтекстОбработчика.ИмяОбработчика);
УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ОбработкаПорцииЗавершена", Истина);
@@ -4620,6 +4666,17 @@
ЗавершитьВыполнениеОтложенногоОбработчикаОбновления(КонтекстОбработчика);
РассчитатьВремяВыполненияПроцедурыОбработчика(КонтекстОбработчика, КонтекстОбработчика.ИмяОбработчика);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонтекстОбработчика.Удалить("ПропуститьОтменуТранзакций");
Если КонтекстОбработчика.Свойство("ОшибкаПриЗавершенииОбработчика") Тогда
ВызватьИсключение КонтекстОбработчика.ОшибкаПриЗавершенииОбработчика;
КонецЕсли;
КонецПроцедуры
@@ -5047,7 +5104,8 @@
Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Или ЗаданиеВыполнено <> Ложь Тогда
Выполнять = Не ПустаяСтрока(ОписаниеПотока.ПроцедураЗавершения)
И Поток.ПараметрыПроцедурыЗавершения <> Неопределено
И (Не ЗначениеЗаполнено(ИдентификаторЗадания) Или ЗаданиеВыполнено = Истина);
И (Не ЗначениеЗаполнено(ИдентификаторЗадания) Или ЗаданиеВыполнено = Истина)
И Поток.АдресРезультата <> Неопределено;
Если Выполнять Тогда
ПараметрыВызова = Новый Массив;
@@ -5057,7 +5115,9 @@
ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПроцедураЗавершения, ПараметрыВызова);
КонецЕсли;
Если Поток.АдресРезультата <> Неопределено Тогда
УдалитьИзВременногоХранилища(Поток.АдресРезультата);
КонецЕсли;
УдалитьПотокОбновления(Поток.ИдентификаторПотока);
Потоки.Удалить(Поток);
ЕстьЗавершенныеПотоки = Истина;
@@ -6371,6 +6431,8 @@
// Параметры:
// ЗаполняемыйОбъект - СправочникОбъект
// - ПланВидовХарактеристикОбъект
// - ДанныеФормыСтруктура:
// * Ссылка - СправочникСсылка
// НастройкиЗаполнения - см. ОбновлениеИнформационнойБазы.НастройкиЗаполнения
//
Процедура ЗаполнитьОбъектНачальнымиДанными(ЗаполняемыйОбъект, НастройкиЗаполнения) Экспорт
@@ -8141,8 +8203,9 @@
КонецЕсли;
ШаблонОшибки = НСтр("ru = 'Не удалось выполнить обработчик обновления ""%1"". Подробнее в журнале регистрации.'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
КонтекстОбработчика.ИмяОбработчика);
КонтекстОбработчика.Вставить("ОшибкаПриЗавершенииОбработчика", ТекстОшибки);
КонецЕсли;
КонецПроцедуры
@@ -8152,7 +8215,8 @@
Для Каждого Параметр Из Параметры Цикл
Если Параметр.Ключ <> "ОбработкаЗавершена"
И Параметр.Ключ <> "ПрогрессВыполнения"
И Параметр.Ключ <> "Очередь" Тогда
И Параметр.Ключ <> "Очередь"
И Параметр.Ключ <> "ОбновляемыеДанные" Тогда
ПереданныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение);
КонецЕсли;
КонецЦикла;
@@ -8908,9 +8972,11 @@
КонецЕсли;
// АПК:325-выкл откат незакрытых транзакций после выполнения обработчика.
Если Не КонтекстОбработчика.Свойство("ПропуститьОтменуТранзакций") Тогда
Пока ТранзакцияАктивна() Цикл
ОтменитьТранзакцию();
КонецЦикла;
КонецЕсли;
// АПК:325-вкл
ДобавляемоеЧислоПопыток = ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика, Истина);
@@ -9118,7 +9184,11 @@
Функция ДобавляемоеЧислоПопыток(ОбработчикОбновления, КонтекстОбработчика, Ошибка = Ложь)
Если ОбработчикОбновления.Многопоточный Тогда
Если КонтекстОбработчика.Параметры.Свойство("ОбновляемыеДанные") Тогда
ОбновляемыеДанные = КонтекстОбработчика.Параметры.ОбновляемыеДанные;
Иначе
ОбновляемыеДанные = Неопределено;
КонецЕсли;
// Проверяется по полям ОбновляемыеДанные.ПерваяЗапись и ОбновляемыеДанные.ПоследняяЗапись, а не по полю
// ОбновляемыеДанные.НаборДанных, т.к. оно очищается в ОбработатьФрагментДанныхВПотоке() для экономии памяти.
@@ -365,6 +365,7 @@
Для Каждого Патч Из Устанавливаемые Цикл
ИмяИсправления = "";
Данные = Неопределено;
Попытка
// Чтение исправления из архива.
Если ТипЗнч(Патч) = Тип("Структура") Тогда
@@ -11,8 +11,8 @@
// Начать подключение системы взаимодействия.
//
// Параметры:
// ОписаниеЗавершения - ОписаниеОповещения - оповещения, которые будет выполнено после закрытия формы подключения
// с параметрами:
// ОписаниеЗавершения - ОписаниеОповещения - оповещение, которое будет выполнено
// после закрытия формы подключения с параметрами:
// * Результат - Неопределено
// * ДополнительныеПараметры - Неопределено
// - Структура.
@@ -101,9 +101,9 @@
// Возвращаемое значение:
// Структура - параметры размещения подключаемых команд:
// * Источники - ОписаниеТипов
// - Массив - источники команд.
// - Массив из ОбъектМетаданных - источники команд.
// Используется для второстепенных списков, а также в формах объектов, не являющихся поставщиками
// команд (обработки, общие формы). В массиве ожидаются элементы типа "ОбъектМетаданных".
// команд (обработки, общие формы).
// * КоманднаяПанель - ГруппаФормы - командная панель или группа команд, в которой выводятся подменю.
// Используется как родитель для создания подменю в случае их отсутствия.
// Если не указан то в первую очередь ищется группа "ПодключаемыеКоманды".
@@ -11,6 +11,9 @@
// Позволяет внести изменения в дерево с разделами полнотекстового поиска, отображаемое при выборе области поиска.
// По умолчанию дерево разделов формируется на основании состава подсистем конфигурации.
//
// Перед добавлением объекта метаданных убедитесь, что его свойство ПолнотекстовыйПоиск
// установлено в значение Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать.
//
// Параметры:
// РазделыПоиска - ДеревоЗначений - области поиска. Содержит колонки:
// * Раздел - Строка - представление раздела, например, название подсистемы или объекта метаданных.
@@ -206,6 +206,7 @@
Если СвойстваПользователяИБ.УказанТекущийПользовательИБ Тогда
Для Каждого ИмяРоли Из МассивИменРолей Цикл
//@skip-check using-isinrole
Если РольДоступна(СокрЛП(ИмяРоли)) Тогда // Не заменять на РолиДоступны.
Возврат Истина;
КонецЕсли;
@@ -1899,6 +1900,138 @@
КонецПроцедуры
// Сохраняет настройки входа пользователей
//
// Параметры:
// СохраняемыеНастройки - см. Пользователи.НовоеОписаниеНастроекВхода
// ДляВнешнихПользователей - Булево - Истина, если записываются настройки внешних пользователей
//
Процедура УстановитьНастройкиВхода(СохраняемыеНастройки, ДляВнешнихПользователей = Ложь) Экспорт
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
Блокировка = Новый БлокировкаДанных();
Блокировка.Добавить("Константа.НастройкиВходаПользователей");
Если Не РазделениеВключено Тогда
Блокировка.Добавить("Константа.УдалитьНастройкиВходаПользователей");
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
Настройки = ПользователиСлужебный.НастройкиВхода();
Если ДляВнешнихПользователей Тогда
НастройкиВхода = Настройки.ВнешниеПользователи;
Иначе
НастройкиВхода = Настройки.Пользователи;
КонецЕсли;
Для Каждого СохраняемаяНастройка Из СохраняемыеНастройки Цикл
Если Не НастройкиВхода.Свойство(СохраняемаяНастройка.Ключ)
Или ТипЗнч(НастройкиВхода[СохраняемаяНастройка.Ключ]) <> ТипЗнч(СохраняемаяНастройка.Значение) Тогда
Продолжить;
КонецЕсли;
НастройкиВхода[СохраняемаяНастройка.Ключ] = СохраняемаяНастройка.Значение;
КонецЦикла;
Если Не ЗначениеЗаполнено(НастройкиВхода.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда
НастройкиВхода.ПросрочкаРаботыВПрограммеДатаВключения = Дата(1, 1, 1);
ИначеЕсли Не ЗначениеЗаполнено(НастройкиВхода.ПросрочкаРаботыВПрограммеДатаВключения) Тогда
НастройкиВхода.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса());
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(Настройки));
Если Не РазделениеВключено Тогда
СохраненныеНастройки = Константы.УдалитьНастройкиВходаПользователей.Получить().Получить();
Если СохраненныеНастройки <> Неопределено Тогда
Константы.УдалитьНастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(Неопределено));
КонецЕсли;
Если ЗначениеЗаполнено(Настройки.Пользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода)
Или ЗначениеЗаполнено(Настройки.ВнешниеПользователи.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда
ПользователиСлужебный.ИзменитьЗаданиеКонтрольАктивностиПользователей(Истина);
КонецЕсли;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Возвращает структуру настроек входа по умолчанию.
//
// Возвращаемое значение:
// Структура:
// * ПарольДолженОтвечатьТребованиямСложности - Булево - должен ли пароль отвечать требованиям сложности:
// длина не менее 7 символов;
// содержит любые 3 из 4-х типов символов: заглавные буквы,
// строчные буквы, цифры, специальные символы;
// не совпадает с именем (для входа).
// * МинимальнаяДлинаПароля - Число - минимальная длина пароля.
// * МаксимальныйСрокДействияПароля - Число - максимальный срок действия пароля.
// * МинимальныйСрокДействияПароля - Число - минимальный срок действия пароля.
// * ЗапретитьПовторениеПароляСредиПоследних - Число - количество последних паролей,
// которые запрещено использовать повторно
// * ПросрочкаРаботыВПрограммеДоЗапрещенияВхода - Число - количество дней не активности пользователя,
// после чего будет запрещен вход
// * ПросрочкаРаботыВПрограммеДатаВключения - Дата - дата включения просрочки работы в программе
//
Функция НовоеОписаниеНастроекВхода() Экспорт
Настройки = Новый Структура();
// Требования сложности.
Настройки.Вставить("ПарольДолженОтвечатьТребованиямСложности", Ложь);
Настройки.Вставить("МинимальнаяДлинаПароля", 0);
// Требования срока действия.
Настройки.Вставить("МаксимальныйСрокДействияПароля", 0);
Настройки.Вставить("МинимальныйСрокДействияПароля", 0);
Настройки.Вставить("ЗапретитьПовторениеПароляСредиПоследних", 0);
// Требование периодической работы в программе.
Настройки.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", 0);
Настройки.Вставить("ПросрочкаРаботыВПрограммеДатаВключения", '00010101');
Возврат Настройки;
КонецФункции
// Добавляет пароль в список используемых,
// если в настройках для входа заполнено свойство ЗапретитьПовторениеПароляСредиПоследних
//
// Параметры:
// Пользователь - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи - пользователь для которого добавляется пароль
// СохраняемоеЗначениеПароля - Строка - хеш пароля
//
Процедура ДобавитьИспользованныйПароль(Пользователь, СохраняемоеЗначениеПароля) Экспорт
ПользователиСлужебный.ДобавитьИспользованныйПароль(Пользователь, СохраняемоеЗначениеПароля);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -16,6 +16,7 @@
// "Настройки прав и пользователей" доступны настройки входа, и доступность
// настроек ограничения срока действия в формах пользователя и внешнего пользователя.
// По умолчанию - Истина, а для базовых версий конфигурации - всегда Ложь.
// В модели сервиса получается из настроек Менеджера сервиса и не может быть переопределено.
//
// * РедактированиеРолей - Булево - определяет доступность интерфейса изменения ролей
// в карточках пользователя, внешнего пользователя и группы внешних пользователей
@@ -267,6 +267,7 @@
//
Функция ОшибкаНедостаточноПравДляВходаВПрограмму(РегистрироватьВЖурнале = Истина) Экспорт
//@skip-check using-isinrole
Если РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда // Не заменять на РолиДоступны.
Возврат "";
КонецЕсли;
@@ -277,6 +278,7 @@
ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваБСП.Имя;
КонецЕсли;
//@skip-check using-isinrole
Если РольДоступна(ИмяРолиБазовыеПрава) Тогда // Не заменять на РолиДоступны.
Возврат "";
КонецЕсли;
@@ -1279,12 +1281,16 @@
Обработчик.Приоритет = 1;
КонецЕсли;
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.2.192";
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.Процедура = "ПользователиСлужебный.ПеренестиНастройкиДлиныИСложностиПаролейКонфигуратора";
КонецЕсли;
Обработчик = Обработчики.Добавить();
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.РежимВыполнения = "Оперативно";
@@ -1358,6 +1364,16 @@
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.Процедура = "Константы.ИспользоватьГруппыВнешнихПользователей.Обновить";
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.6.108";
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.Процедура = "Константы.УдалитьНастройкиВходаПользователей.ПеренестиНастройки";
Обработчик.Комментарий = НСтр("ru = 'Перенос настроек входа пользователей'");
КонецЕсли;
КонецПроцедуры
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек
@@ -1483,6 +1499,22 @@
Набор.Идентификатор = Новый УникальныйИдентификатор("2bf06771-775a-406a-a5dc-45a10e98914f");
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов.
//
// Параметры:
// СтруктураПоддерживаемыхВерсий - см. ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов.ПоддерживаемыеВерсии
//
Процедура ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий) Экспорт
МассивВерсий = Новый Массив;
МассивВерсий.Добавить("1.0.0.1");
СтруктураПоддерживаемыхВерсий.Вставить(
"НастройкиВходаВМоделиСервиса",
МассивВерсий);
КонецПроцедуры
// Обработчики событий подсистемы Обмен данными.
// См. ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ.
@@ -1621,6 +1653,10 @@
//
Процедура ИзменитьЗаданиеКонтрольАктивностиПользователей(Использование) Экспорт
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
РегламентныеЗаданияСервер.УстановитьИспользованиеПредопределенногоРегламентногоЗадания(
Метаданные.РегламентныеЗадания.КонтрольАктивностиПользователей, Использование);
@@ -1629,6 +1665,10 @@
// Вызывается при записи пользователя или внешнего пользователя, проверят срок действия.
Процедура ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Пользователь) Экспорт
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда
@@ -1660,18 +1700,7 @@
// См. ПользователиСлужебныйПовтИсп.Настройки
Функция НастройкиВхода() Экспорт
Настройки = Новый Структура;
// Требования сложности.
Настройки.Вставить("ПарольДолженОтвечатьТребованиямСложности", Ложь);
Настройки.Вставить("МинимальнаяДлинаПароля", 0);
// Требования срока действия.
Настройки.Вставить("МаксимальныйСрокДействияПароля", 0);
Настройки.Вставить("МинимальныйСрокДействияПароля", 0);
Настройки.Вставить("ЗапретитьПовторениеПароляСредиПоследних", 0);
// Требование периодической работы в программе.
Настройки.Вставить("ПросрочкаРаботыВПрограммеДоЗапрещенияВхода", 0);
Настройки.Вставить("ПросрочкаРаботыВПрограммеДатаВключения", '00010101');
Настройки = Пользователи.НовоеОписаниеНастроекВхода();
КопияНастроек = Новый ФиксированнаяСтруктура(Настройки);
ПодготовленныеНастройки = Новый Структура;
@@ -1679,32 +1708,47 @@
ПодготовленныеНастройки.Вставить("ВнешниеПользователи", Настройки);
УстановитьПривилегированныйРежим(Истина);
Если ОбщегоНазначения.РазделениеВключено() Тогда
СохраненныеНастройки = Константы.НастройкиВходаПользователей.Получить().Получить();
Иначе
СохраненныеНастройки = Константы.УдалитьНастройкиВходаПользователей.Получить().Получить();
Если СохраненныеНастройки = Неопределено Тогда
СохраненныеНастройки = Константы.НастройкиВходаПользователей.Получить().Получить();
КонецЕсли;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Если ТипЗнч(СохраненныеНастройки) <> Тип("Структура") Тогда
Возврат ПодготовленныеНастройки;
КонецЕсли;
Для Каждого ПодготовленнаяНастройка Из ПодготовленныеНастройки Цикл
Если Не СохраненныеНастройки.Свойство(ПодготовленнаяНастройка.Ключ)
Или ТипЗнч(СохраненныеНастройки[ПодготовленнаяНастройка.Ключ]) <> Тип("Структура") Тогда
Продолжить;
КонецЕсли;
НачальныеНастройки = ПодготовленнаяНастройка.Значение;
ТекущиеНастройки = СохраненныеНастройки[ПодготовленнаяНастройка.Ключ];
Если ТипЗнч(ТекущиеНастройки) = Тип("Структура") Тогда
Для Каждого НачальнаяНастройка Из НачальныеНастройки Цикл
Если Не ТекущиеНастройки.Свойство(НачальнаяНастройка.Ключ)
Или ТипЗнч(ТекущиеНастройки[НачальнаяНастройка.Ключ]) <> ТипЗнч(НачальнаяНастройка.Значение) Тогда
Продолжить;
КонецЕсли;
НачальныеНастройки[НачальнаяНастройка.Ключ] = ТекущиеНастройки[НачальнаяНастройка.Ключ];
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ПодготовленныеНастройки;
@@ -1917,7 +1961,8 @@
Если Не ДополнительныеПараметры.Свойство("ЭтоСлужебныйПользователь")
И ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса")
И Пользователь <> Пользователи.АвторизованныйПользователь() Тогда
МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса");
ДействияСПользователемСервиса = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(
@@ -2004,7 +2049,7 @@
КонецЕсли;
// Проверка минимального срока действия пароля.
Если УровеньДоступа.НастройкиДляВхода Тогда
Если Не ОбщегоНазначения.РазделениеВключено() И УровеньДоступа.НастройкиДляВхода Тогда
Возврат Истина;
КонецЕсли;
@@ -2307,21 +2352,10 @@
ВызватьИсключение;
КонецПопытки;
Иначе
СведенияОПользователе.ДатаНачалаИспользованияПароля = Неопределено;
Если Параметры.Пользователь.ДополнительныеСвойства.Свойство("СменаПароляПриВходеВПрограмму") Тогда
СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Ложь;
КонецЕсли;
Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода
И ЗначениеЗаполнено(НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних) Тогда
ИспользованныеПароли.Добавить(СохраняемоеЗначениеПароля);
Пока ИспользованныеПароли.Количество() > НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних Цикл
ИспользованныеПароли.Удалить(0);
КонецЦикла;
Иначе
ИспользованныеПароли.Очистить();
КонецЕсли;
СведенияОПользователе.ИспользованныеПароли = Новый ХранилищеЗначения(ИспользованныеПароли);
ОбновитьСведенияОбИспользованииПароля(СведенияОПользователе, СохраняемоеЗначениеПароля);
НаборЗаписей.Записать();
КонецЕсли;
КонецЕсли;
@@ -2421,6 +2455,91 @@
КонецФункции
// Добавляет пароль в список используемых,
// если в настройках для входа заполнено свойство ЗапретитьПовторениеПароляСредиПоследних
//
// Параметры:
// Пользователь - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи - пользователь для которого добавляется пароль
// СохраняемоеЗначениеПароля - Строка - хеш пароля
//
Процедура ДобавитьИспользованныйПароль(Пользователь, СохраняемоеЗначениеПароля) Экспорт
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях");
ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СведенияОПользователе = РегистрыСведений.СведенияОПользователях.СоздатьМенеджерЗаписи();
СведенияОПользователе.Пользователь = Пользователь;
СведенияОПользователе.Прочитать();
Если Не СведенияОПользователе.Выбран() Тогда
СведенияОПользователе.Пользователь = Пользователь;
КонецЕсли;
ОбновитьСведенияОбИспользованииПароля(СведенияОПользователе, СохраняемоеЗначениеПароля);
СведенияОПользователе.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Обновляет данные использования пароля в записи сведений о пользователе
//
// Параметры:
// СведенияОПользователе - РегистрСведенийМенеджерЗаписи.СведенияОПользователях
// - РегистрСведенийЗапись.СведенияОПользователях - запись регистра сведений
// СохраняемоеЗначениеПароля - Строка - хеш пароля
// НастройкиВхода - см. ПользователиСлужебный.НастройкиВхода
//
Процедура ОбновитьСведенияОбИспользованииПароля(СведенияОПользователе, СохраняемоеЗначениеПароля)
Если ТипЗнч(СведенияОПользователе.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи;
Иначе
НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи;
КонецЕсли;
ИспользованныеПароли = СведенияОПользователе.ИспользованныеПароли.Получить();
Если ИспользованныеПароли = Неопределено Тогда
ИспользованныеПароли = Новый Массив();
КонецЕсли;
Если Пользователи.ОбщиеНастройкиВходаИспользуются()
И ЗначениеЗаполнено(НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних) Тогда
ИспользованныеПароли.Добавить(СохраняемоеЗначениеПароля);
Пока ИспользованныеПароли.Количество() > НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних Цикл
ИспользованныеПароли.Удалить(0);
КонецЦикла;
Иначе
ИспользованныеПароли.Очистить();
КонецЕсли;
ДатаНачалаИспользованияПароля = ?(ОбщегоНазначения.РазделениеВключено(),
НачалоДня(ТекущаяДатаСеанса()),
Неопределено);
СведенияОПользователе.ДатаНачалаИспользованияПароля = ДатаНачалаИспользованияПароля;
СведенияОПользователе.ИспользованныеПароли = Новый ХранилищеЗначения(ИспользованныеПароли);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции работы с пользователями.
@@ -3180,6 +3299,7 @@
Если ПользовательИБ = Неопределено
Или ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь() Тогда
//@skip-check using-isinrole
Возврат РольДоступна(Метаданные.Роли.ПолныеПрава) // Не заменять на РолиДоступны.
И (РольДоступна(Метаданные.Роли.АдминистраторСистемы) // Не заменять на РолиДоступны.
Или ОбщегоНазначения.РазделениеВключено() );
@@ -5061,8 +5181,12 @@
Возврат;
КонецЕсли;
ИмяКонстанты = ?(Метаданные.Константы.Найти("УдалитьНастройкиВходаПользователей") = Неопределено,
"НастройкиВходаПользователей",
"УдалитьНастройкиВходаПользователей");
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.НастройкиВходаПользователей");
Блокировка.Добавить("Константа." + ИмяКонстанты);
НачатьТранзакцию();
Попытка
@@ -5079,7 +5203,7 @@
НастройкиВхода.ВнешниеПользователи.ПарольДолженОтвечатьТребованиямСложности = СложныйПароль;
КонецЕсли;
Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода));
Константы[ИмяКонстанты].Установить(Новый ХранилищеЗначения(НастройкиВхода));
ЗафиксироватьТранзакцию();
Исключение
@@ -6851,10 +6975,6 @@
// Обновляет дату последней активности и проверяет необходимость смены пароля.
Функция ТребуетсяСменитьПароль(ОписаниеОшибки = "", ПриЗапуске = Ложь, РегистрироватьВЖурнале = Истина)
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат Ложь;
КонецЕсли;
ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Не ЗначениеЗаполнено(ПользовательИБ.Имя) Тогда
Возврат Ложь;
@@ -6880,11 +7000,26 @@
Иначе
СведенияОПользователе = НаборЗаписей[0];
КонецЕсли;
Записать = Ложь;
Если СведенияОПользователе.ДатаПоследнейАктивности <> НачалоДняТекущейДатыСеанса Тогда
СведенияОПользователе.ДатаПоследнейАктивности = НачалоДняТекущейДатыСеанса;
Записать = Истина;
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ПользователиСервиса") Тогда
МодульПользователиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСервиса");
МодульПользователиСервиса.ОбновитьАктивностьПользователяСервиса(
ТекущийПользователь,
НачалоДняТекущейДатыСеанса);
КонецЕсли;
КонецЕсли;
ИспользуемыйКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ИспользуемыйКлиент");
Если ИспользуемыйКлиент <> Неопределено
И СведенияОПользователе.ПоследнийИспользуемыйКлиент <> ИспользуемыйКлиент Тогда
@@ -7548,6 +7683,10 @@
Процедура ОтключитьНеактивныхИПросроченныхПользователей(ТолькоДляАвторизованногоПользователя = Ложь,
ОписаниеОшибки = "", РегистрироватьВЖурнале = Истина)
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Настройки = ПользователиСлужебныйПовтИсп.Настройки();
@@ -8050,7 +8189,8 @@
ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число"));
ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли,
Параметры.КоллекцияРолей);
Параметры.КоллекцияРолей, ?(Параметры.Свойство("СтандартныеРолиРасширений"),
Параметры.СтандартныеРолиРасширений, Неопределено));
Параметры.Форма.ЗначениеВРеквизитФормы(ДеревоРолей, "Роли");
@@ -8154,7 +8294,8 @@
КонецПроцедуры
Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли, КоллекцияРолей)
Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли,
КоллекцияРолей, СтандартныеРолиРасширений)
Индекс = Коллекция.Количество()-1;
@@ -8162,12 +8303,15 @@
Строка = Коллекция[Индекс];
ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли,
КоллекцияРолей);
КоллекцияРолей, СтандартныеРолиРасширений);
Если Строка.ЭтоРоль Тогда
Если СкрытьРольПолныеПрава
И ( ВРег(Строка.Имя) = ВРег("ПолныеПрава")
ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда
ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")
ИЛИ СтандартныеРолиРасширений <> Неопределено
И ( СтандартныеРолиРасширений.ПолныеПрава.Найти(Строка.Имя) <> Неопределено
Или СтандартныеРолиРасширений.АдминистраторСистемы.Найти(Строка.Имя) <> Неопределено)) Тогда
Коллекция.Удалить(Индекс);
Иначе
Строка.НомерКартинки = 7;
@@ -8280,6 +8424,7 @@
КоллекцияРолей.Добавить().Роль = "ПолныеПрава";
КонецЕсли;
КонецЕсли;
ЗаполнитьСтандартныеРолиРасширений(Параметры);
Если ПоказатьТолькоВыбранныеРоли Тогда
Если КоллекцияРолей.Количество() > 0 Тогда
@@ -8297,12 +8442,27 @@
Иначе
ДобавитьУдалитьРолиПодсистемы(Параметры, ТекущиеДанные.ПолучитьЭлементы(), ТекущиеДанные.Пометка);
КонецЕсли;
ЗаполнитьСтандартныеРолиРасширений(Параметры);
КонецЕсли;
ОбновитьПометкуВыбранныхРолей(Параметры, Роли.ПолучитьЭлементы());
КонецПроцедуры
Процедура ЗаполнитьСтандартныеРолиРасширений(Параметры)
Если Не Параметры.Свойство("СтандартныеРолиРасширений") Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульПрофилиГруппДоступа = ОбщегоНазначения.ОбщийМодуль("Справочники.ПрофилиГруппДоступа");
МодульПрофилиГруппДоступа.ЗаполнитьСтандартныеРолиРасширений(Параметры.КоллекцияРолей,
Параметры.СтандартныеРолиРасширений);
КонецЕсли;
КонецПроцедуры
// Параметры:
// Параметры - см. ОбработатьИнтерфейсРолей.Параметры
// Роль - Строка
@@ -261,11 +261,25 @@
ИнтеграцияПодсистемБСП.ПриОпределенииНастроек(Настройки);
ПользователиПереопределяемый.ПриОпределенииНастроек(Настройки);
Если ОбщегоНазначения.РазделениеВключено()
Или СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации()
Если ОбщегоНазначения.РазделениеВключено() Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ПользователиСервиса") Тогда
МодульПользователиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСервиса");
Настройки.Вставить(
"ОбщиеНастройкиВхода",
МодульПользователиСервиса.ИспользоватьОбщиеНастройкиВходаПользователейСервиса());
Иначе
Настройки.Вставить("ОбщиеНастройкиВхода", Ложь);
КонецЕсли;
ИначеЕсли СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации()
Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
Настройки.Вставить("ОбщиеНастройкиВхода", Ложь);
КонецЕсли;
ВсеНастройки = ПользователиСлужебный.НастройкиВхода();
@@ -345,9 +359,11 @@
ПравоДоступа("Администрирование", Метаданные, ПользовательИБ),
ПравоДоступа("Администрирование", Метаданные)));
//@skip-check using-isinrole
Свойства.Вставить("РольДоступнаАдминистраторСистемы",
РольДоступна(Метаданные.Роли.АдминистраторСистемы)); // Не заменять на РолиДоступны.
//@skip-check using-isinrole
Свойства.Вставить("РольДоступнаПолныеПрава",
РольДоступна(Метаданные.Роли.ПолныеПрава)); // Не заменять на РолиДоступны.
@@ -300,7 +300,6 @@
АдресПоПолям = Адрес;
КонецЕсли;
ПереченьЭлементов = Новый ФиксированноеСоответствие(Новый Соответствие);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
@@ -2644,7 +2643,8 @@
// АПК: 1297-выкл Данные адресного классификатора, не локализуются
Если СтрСравнить(ТипМуниципальногоРайона, "м.р-н") = 0 Тогда
КодМуниципальногоРайона = "1";
ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, "г.о.") = 0 Тогда
ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, "г.о.") = 0
Или СтрСравнить(ТипМуниципальногоРайона, "ф.т.") = 0 Тогда
КодМуниципальногоРайона = "2";
ИначеЕсли СтрСравнить(ТипМуниципальногоРайона, "вн.тер.") = 0
Или СтрСравнить(ТипМуниципальногоРайона, "вн.тер. г.") = 0 Тогда
@@ -4142,7 +4142,7 @@
КонецПроцедуры
Процедура ВывитьИИсправитьУстаревшиеАдреса() Экспорт
Процедура ВыявитьИИсправитьУстаревшиеАдреса() Экспорт
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
Возврат;
@@ -4377,4 +4377,16 @@
КонецФункции
// Проверить корректность кода города и номера телефона кодов страны.
//
// Параметры:
// ПоляТелефона - см. УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона
// СписокОшибок - СписокЗначений
//
Процедура ПроверитьКорректностьКодовСтраныИГорода(ПоляТелефона, СписокОшибок) Экспорт
РаботаСАдресамиКлиентСервер.ПроверитьКорректностьКодовСтраныИГорода(ПоляТелефона, СписокОшибок);
КонецПроцедуры
#КонецОбласти
@@ -80,22 +80,12 @@
// Проверить корректность кода города и номера телефона кодов страны.
//
// Параметры:
// КодСтраны - Строка
// КодГорода - Строка
// НомерТелефона - Строка
// ПоляТелефона - см. УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона
// СписокОшибок - СписокЗначений
//
Процедура ПроверитьКорректностьКодовСтраныИГорода(КодСтраны, КодГорода, НомерТелефона, СписокОшибок) Экспорт
Процедура ПроверитьКорректностьКодовСтраныИГорода(ПоляТелефона, СписокОшибок) Экспорт
Если КодСтраны = "7" ИЛИ КодСтраны = "+7" Тогда
Если СтрДлина(УправлениеКонтактнойИнформациейКлиент.ОставитьТолькоЦифрыВСтроке(НомерТелефона)) > 7 Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номер телефона не может быть больше 7 цифр'"));
КонецЕсли;
КонецЕсли;
Если СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номера мобильных телефонов должны содержать 3 цифры'"));
КонецЕсли;
РаботаСАдресамиКлиентСервер.ПроверитьКорректностьКодовСтраныИГорода(ПоляТелефона, СписокОшибок);
КонецПроцедуры
@@ -764,6 +764,30 @@
КонецФункции
// Проверить корректность кода города и номера телефона кодов страны.
//
// Параметры:
// ПоляТелефона - см. УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейТелефона
// СписокОшибок - СписокЗначений
//
Процедура ПроверитьКорректностьКодовСтраныИГорода(ПоляТелефона, СписокОшибок) Экспорт
КодСтраны = ПоляТелефона.КодСтраны;
КодГорода = ПоляТелефона.КодГорода;
НомерТелефона = ПоляТелефона.НомерТелефона;
Если КодСтраны = "7" ИЛИ КодСтраны = "+7" Тогда
Если СтрДлина(УправлениеКонтактнойИнформациейКлиентСервер.ОставитьТолькоЦифрыВСтроке(НомерТелефона)) > 7 Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номер телефона не может быть больше 7 цифр'"));
КонецЕсли;
КонецЕсли;
Если СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номера мобильных телефонов должны содержать 3 цифры'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -36,7 +36,8 @@
| УчетныеЗаписиЭлектроннойПочты.Пользователь КАК ПользовательSMTP,
| УчетныеЗаписиЭлектроннойПочты.ВремяОжидания КАК Таймаут,
| УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол,
| УчетныеЗаписиЭлектроннойПочты.ПриОтправкеПисемТребуетсяАвторизация КАК ПриОтправкеПисемТребуетсяАвторизация
| УчетныеЗаписиЭлектроннойПочты.ПриОтправкеПисемТребуетсяАвторизация КАК ПриОтправкеПисемТребуетсяАвторизация,
| УчетныеЗаписиЭлектроннойПочты.АвторизацияСПомощьюПочтовогоСервиса
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
@@ -53,10 +54,19 @@
СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP";
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль,ПарольSMTP");
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись,
"Пароль,ПарольSMTP,ТокенДоступа,СрокДействияТокенаДоступа,ТокенОбновления");
УстановитьПривилегированныйРежим(Ложь);
Результат = Новый ИнтернетПочтовыйПрофиль;
Если Выборка.АвторизацияСПомощьюПочтовогоСервиса Тогда
Если ЗначениеЗаполнено(Пароли.СрокДействияТокенаДоступа) И Пароли.СрокДействияТокенаДоступа - 60 <= ТекущаяДатаСеанса() Тогда
Пароли.ТокенДоступа = ОбновитьТокенДоступа(УчетнаяЗапись, Пароли.ТокенОбновления);
КонецЕсли;
Результат.ТокенДоступа = Пароли.ТокенДоступа;
КонецЕсли;
Если ДляПолучения Тогда
Если Выборка.Протокол = "IMAP" Тогда
ТребуемыеСвойства = СписокСвойствIMAP;
@@ -1892,4 +1902,239 @@
КонецФункции
Функция ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса, ПоместитьПараметрыВТелоЗапроса = Истина) Экспорт
Заголовки = Новый Соответствие;
Если ПоместитьПараметрыВТелоЗапроса Тогда
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
КонецЕсли;
Если ТипЗнч(ПараметрыЗапроса) = Тип("Строка") Тогда
СтрокаПараметров = ПараметрыЗапроса;
Иначе
СписокПараметров = Новый Массив;
Для Каждого Параметр Из ПараметрыЗапроса Цикл
Значения = Параметр.Значение;
Если ТипЗнч(Параметр.Значение) <> Тип("Массив") Тогда
Значения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.Значение);
КонецЕсли;
Для Каждого Значение Из Значения Цикл
СписокПараметров.Добавить(Параметр.Ключ + "=" + КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL));
КонецЦикла;
КонецЦикла;
СтрокаПараметров = СтрСоединить(СписокПараметров, "&");
КонецЕсли;
Если Не ПоместитьПараметрыВТелоЗапроса Тогда
АдресРесурса = АдресРесурса + "?" + СтрокаПараметров;
КонецЕсли;
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
Если ПоместитьПараметрыВТелоЗапроса Тогда
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров);
КонецЕсли;
Возврат HTTPЗапрос;
КонецФункции
Функция ВыполнитьЗапрос(АдресСервера, АдресРесурса, ПараметрыЗапроса) Экспорт
Результат = Новый Структура;
Результат.Вставить("ЗапросВыполнен", Ложь);
Результат.Вставить("ОтветСервера", "");
HTTPЗапрос = ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса, Истина);
HTTPОтвет = Неопределено;
Прокси = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https");
КонецЕсли;
Попытка
Соединение = Новый HTTPСоединение(АдресСервера, , , , Прокси,
60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если HTTPОтвет <> Неопределено Тогда
Если HTTPОтвет.КодСостояния <> 200 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Запрос ""%1"" не выполнен. Код состояния: %2.'"), АдресРесурса, HTTPОтвет.КодСостояния) + Символы.ПС
+ HTTPОтвет.ПолучитьТелоКакСтроку();
ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецЕсли;
Результат.ЗапросВыполнен = HTTPОтвет.КодСостояния = 200;
Результат.ОтветСервера = HTTPОтвет.ПолучитьТелоКакСтроку();
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ИмяСобытияАвторизацияПоПротоколуOAuth() Экспорт
Возврат НСтр("ru = 'Работа с почтовыми сообщениями.Авторизация на почтовом сервере'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
Функция СгенерироватьПроверочныйКод() Экспорт
ПроверочныйКод = "";
Буквы = "abcdefghijklmnopqrstuvwxyz";
Цифры = "1234567890";
ДополнительныеСимволы = "-._~";
ДопустимыеСимволы = Буквы + ВРег(Буквы) + Цифры + ДополнительныеСимволы;
ДлинаСтроки = СтрДлина(ДопустимыеСимволы);
ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
Для Счетчик = 1 По 128 Цикл
Позиция = ГенераторСлучайныхЧисел.СлучайноеЧисло(1, ДлинаСтроки);
Символ = Сред(ДопустимыеСимволы, Позиция, 1);
ПроверочныйКод = ПроверочныйКод + Символ;
КонецЦикла;
Возврат ПроверочныйКод;
КонецФункции
Функция КодироватьСтрокуМетодомS256(Строка) Экспорт
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256);
ХешированиеДанных.Добавить(Строка);
Результат = Base64URLСтрока(ХешированиеДанных.ХешСумма);
Возврат Результат;
КонецФункции
Функция Base64URLСтрока(Значение)
Результат = Base64Строка(Значение);
Результат = СтрЗаменить(Результат, "+", "-");
Результат = СтрЗаменить(Результат, "/", "_");
Результат = СтрЗаменить(Результат, "=", "");
Результат = СтрЗаменить(Результат, Символы.ПС, "");
Возврат Результат;
КонецФункции
Функция JSONВЗначение(Строка, ИменаСвойствСоЗначениямиДата = Неопределено) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Строка);
Возврат ПрочитатьJSON(ЧтениеJSON, Истина, ИменаСвойствСоЗначениямиДата);
КонецФункции
Функция ОбновитьТокенДоступа(Знач УчетнаяЗапись, Знач ТокенОбновления = Неопределено)
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись,
"АдресЭлектроннойПочты, ИмяПочтовогоСервиса");
Если Не ЗначениеЗаполнено(ЗначенияРеквизитов.ИмяПочтовогоСервиса) Тогда
ТекстОшибки = НСтр("ru = 'Не указано имя почтового сервиса для авторизации. Необходимо перенастроить почту.'");
ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись,
ТекстОшибки);
Возврат "";
КонецЕсли;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(ЗначенияРеквизитов.АдресЭлектроннойПочты);
УстановитьПривилегированныйРежим(Истина);
НастройкиАвторизации = Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса(
ЗначенияРеквизитов.ИмяПочтовогоСервиса, СтруктураURI.Хост);
УстановитьПривилегированныйРежим(Ложь);
Если Не ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
ТекстОшибки = НСтр("ru = 'Настройки авторизации Интернет-сервиса ""%1"" не найдены для домена ""%2"". Необходимо перенастроить почту.'");
ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись,
ТекстОшибки);
Возврат "";
КонецЕсли;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(НастройкиАвторизации.АдресПолученияКлюча);
АдресСервера = СтруктураURI.Хост;
АдресРесурса = "/" + СтруктураURI.ПутьНаСервере;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("client_id", НастройкиАвторизации.ИдентификаторПриложения);
Если ЗначениеЗаполнено(НастройкиАвторизации.ИспользоватьПарольПриложения) Тогда
ПараметрыЗапроса.Вставить("client_secret", НастройкиАвторизации.ПарольПриложения);
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации["ЗапрашиваемыеРазрешения"]) Тогда
ПараметрыЗапроса.Вставить("scope", НастройкиАвторизации["ЗапрашиваемыеРазрешения"]);
КонецЕсли;
ПараметрыЗапроса.Вставить("refresh_token", ТокенОбновления);
ПараметрыЗапроса.Вставить("grant_type", "refresh_token");
ВремяЗапроса = ТекущаяДатаСеанса();
РезультатЗапроса = ВыполнитьЗапрос(АдресСервера, АдресРесурса, ПараметрыЗапроса);
Попытка
ПараметрыОтвета = JSONВЗначение(РезультатЗапроса.ОтветСервера);
Исключение
ПараметрыОтвета = Новый Соответствие;
КонецПопытки;
ТокенДоступа = ПараметрыОтвета["access_token"];
СрокДействияТокенаДоступа = ПараметрыОтвета["expires_in"];
ТокенОбновления = ПараметрыОтвета["refresh_token"];
КодОшибки = ПараметрыОтвета["error"];
ТекстОшибки = ПараметрыОтвета["error_description"];
Если ЗначениеЗаполнено(КодОшибки) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить ключи доступа к учетной записи почты %1 по причине:
|%2
|Ответ сервера:
|%3'"), ЗначенияРеквизитов.АдресЭлектроннойПочты, ТекстОшибки, РезультатЗапроса.ОтветСервера);
ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
Возврат "";
ИначеЕсли Не РезультатЗапроса.ЗапросВыполнен Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить ключи доступа к учетной записи почты %1 по причине:
|Запрос не выполнен.
|Ответ сервера:
|%2'"), ЗначенияРеквизитов.АдресЭлектроннойПочты, РезультатЗапроса.ОтветСервера);
ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись,
ТекстОшибки);
Возврат "";
КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияТокенаДоступа) Тогда
СрокДействияТокенаДоступа = ВремяЗапроса + СрокДействияТокенаДоступа;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗапись, ТокенДоступа, "ТокенДоступа");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗапись, СрокДействияТокенаДоступа, "СрокДействияТокенаДоступа");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗапись, ТокенОбновления, "ТокенОбновления");
УстановитьПривилегированныйРежим(Ложь);
Возврат ТокенДоступа;
КонецФункции
#КонецОбласти
@@ -108,29 +108,38 @@
// не найден или отсутствует часть обязательной информации о файле и ВызыватьИсключение отсутствует
// или принимает значение Истина, вызывает исключение. Свойства структуры:
// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом.
// * СсылкаНаДвоичныеДанныеФайла - Строка - адрес во временном хранилище, по которому помещены данные.
// * СсылкаНаДвоичныеДанныеФайла - Строка - адрес во временном хранилище, по которому помещены данные файла.
// * Владелец - ОпределяемыйТип.ВладелецФайлов - ссылка объект-владелец файла.
// * ОтносительныйПуть - Строка - относительный путь файла.
// * ДатаМодификацииУниверсальная - Дата - дата изменения фала.
// * ИмяФайла - Строка - имя файла.
// * Наименование - Строка - наименование файла в справочнике хранения файлов.
// * ДатаМодификацииУниверсальная - Дата - дата изменения файла в UTC.
// * ИмяФайла - Строка - имя файла, например, "документ.txt".
// * Наименование - Строка - наименование файла (в справочнике хранения файлов).
// * Расширение - Строка - расширение файла без точки.
// * Размер - Число - размер файла.
// * Размер - Число - размер файла в байтах.
// * Редактирует - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи
// - Неопределено - ссылка на пользователя, занявшего файл.
// - Неопределено - пользователь, занявший файл для редактирования.
// * ДатаЗаема - Дата - дата и время, когда файл был открыт для редактирования.
// * ПодписанЭП - Булево - признак того, что файл подписан.
// * Зашифрован - Булево - признак того, что файл зашифрован.
// * Версия - ОпределяемыйТип.ПрисоединенныйФайл - если справочник файлов поддерживает создание
// * МассивСертификатовШифрования - см. ЭлектроннаяПодпись.СертификатыШифрования
// * ПометкаУдаления - Булево - признак того, что файл помечен на удаление.
// * НавигационнаяСсылка - Строка - навигационная ссылка на файл.
// * ХранитьВерсии - Булево - признак того, что у файла хранятся версии.
// * ТекущаяВерсия - ОпределяемыйТип.ПрисоединенныйФайл - если справочник файлов поддерживает создание
// версий, содержит ссылку на текущую версию файла. В ином случае содержит
// ссылку на файл.
// * Версия - ОпределяемыйТип.ПрисоединенныйФайл - аналогично выше.
// * НомерВерсии - Число - если справочник файлов поддерживает создание версий, содержит номер
// текущей версии файла, иначе - 0.
// * АвторТекущейВерсии - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов
// - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи - пользователь, отредактировавший файл.
// * Том - СправочникСсылка.ТомаХраненияФайлов - том хранения файла.
// * Автор - СправочникСсылка.УчетныеЗаписиСинхронизацииФайлов
// - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи - автор файла.
// * СтатусИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов - статус извлечения текста
// из файла.
// * СтатусИзвлеченияТекста - Строка - статус извлечения текста из файла.
// * ПолноеНаименованиеВерсии - Строка - если справочник файлов поддерживает создание версий, содержит полное
// наименование текущей версии файла. В ином случае содержит полное
// наименование файла.
@@ -142,6 +151,7 @@
// * ПапкаДляСохранитьКак - Строка - путь к каталогу сохранения.
// * ФайлРедактируется - Булево - признак того, что файл занят для редактирования.
// * ФайлРедактируетТекущийПользователь - Булево - признак того, что файл занят для редактирования текущим пользователем.
// * Кодировка - Строка - кодировка текстового файла.
// * Служебный - Булево - признак того, что файл является служебным.
//
// Пример:
@@ -157,11 +167,8 @@
// МассивДанныхФайлов.Добавить(РаботаСФайлами.ДанныеФайла(Выборка.Файл, ПараметрыДанныхФайла));
// КонецЦикла;
//
//
Функция ДанныеФайла(Знач ПрисоединенныйФайл,
Знач ДополнительныеПараметры = Неопределено,
Знач УдалитьПолучатьСсылкуНаДвоичныеДанные = Истина,
Знач УдалитьДляРедактирования = Ложь) Экспорт
Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ДополнительныеПараметры = Неопределено,
Знач УдалитьПолучатьСсылкуНаДвоичныеДанные = Истина, Знач УдалитьДляРедактирования = Ложь) Экспорт
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
@@ -203,8 +210,7 @@
ПоддерживаетсяХранениеВерсий = (ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.Файлы"));
ИспользуетсяВерсионированиеФайлов = ПоддерживаетсяХранениеВерсий
И ПрисоединенныйФайл.ХранитьВерсии
И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия);
И ПрисоединенныйФайл.ХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия);
Если ПолучатьСсылкуНаДвоичныеДанные Тогда
Если ИспользуетсяВерсионированиеФайлов Тогда
@@ -681,6 +681,9 @@
Процедура ПолеПредпросмотраНажатие(Форма, Элемент, СтандартнаяОбработка, Просмотр = Ложь) Экспорт
СтандартнаяОбработка = Ложь;
Если Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр Тогда
Возврат;
КонецЕсли;
НомерЭлемента = Число(СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", ""));
ТолькоОдинФайл = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ТолькоОдинФайл;
@@ -716,11 +719,15 @@
//
Процедура ПолеПредпросмотраПеретаскивание(Форма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
Если Форма.ТолькоПросмотр Или Элемент.ТолькоПросмотр Тогда
Возврат;
КонецЕсли;
НомерЭлемента = Число(СтрЗаменить(Элемент.Имя, "ПолеКартинкиПрисоединенногоФайла", ""));
ТолькоОдинФайл = Форма.ПараметрыРаботыСФайлами[НомерЭлемента].ТолькоОдинФайл;
ВладелецПрисоединенныхФайлов = ЗначениеПараметраПрисоединенногоФайла(Форма, Число(НомерЭлемента), "ПутьКДаннымВладельца");
СтандартнаяОбработка = Ложь;
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("Действие", "Перетаскивание");
ПараметрыОбработчика.Вставить("Форма", Форма);
@@ -1305,12 +1305,11 @@
КонецЕсли;
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -4921,20 +4920,22 @@
КонецЕсли;
РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии);
Если БлокироватьВерсию Тогда
РазблокироватьДанныеДляРедактирования(СсылкаНаВерсию, УникальныйИдентификаторФормы);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если БлокироватьВерсию Тогда
РазблокироватьДанныеДляРедактирования(СсылкаНаВерсию, УникальныйИдентификаторФормы);
КонецЕсли;
МенеджерФайлов.ПослеОбновленияДанныхФайла(Контекст, Ложь);
ВызватьИсключение;
КонецПопытки;
МенеджерФайлов.ПослеОбновленияДанныхФайла(Контекст, Истина);
Если БлокироватьВерсию Тогда
РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы);
КонецЕсли;
Если ЕстьПравоСохранения Тогда
НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка);
ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла);
@@ -4967,7 +4968,7 @@
БлокировкаДанных.Заблокировать();
ФайлОбъект = ФайлСсылка.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор);
ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор);
Если МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда
РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста);
@@ -4979,6 +4980,7 @@
КонецЕсли;
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
КонецПроцедуры
@@ -5035,11 +5037,12 @@
ЗаполнитьЗначенияСвойств(ФайлОбъект, ХранениеВерсии);
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -197,12 +197,13 @@
ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();
ФайлОбъект.ДатаЗаема = Дата("00010101000000");
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор);
РаботаСФайламиПереопределяемый.ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -261,7 +262,6 @@
КонецЕсли;
ФайлОбъект.ДатаЗаема = ТекущаяДатаСеанса();
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор);
НавигационнаяСсылкаТекущейВерсии = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии;
РабочийКаталогВладельца = ДанныеФайла.РабочийКаталогВладельца;
@@ -272,10 +272,12 @@
РаботаСФайламиПереопределяемый.ПриЗахватеФайла(ДанныеФайла, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -727,8 +729,6 @@
СсылкаНаВерсию = ?(ВерсияСсылка = Неопределено, ФайлСсылка, ВерсияСсылка);
ВерсияЗаблокирована = Ложь;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(СсылкаНаВерсию.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию);
@@ -752,10 +752,7 @@
Версия = СсылкаНаВерсию.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(СсылкаНаВерсию, , УникальныйИдентификаторФормы);
ВерсияЗаблокирована = Истина;
Версия.ТипХраненияФайла = ТипХраненияФайлов;
Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
СвойстваВерсии = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваВерсии, Версия);
@@ -837,20 +834,19 @@
Версия.Записать();
МенеджерФайла.ПриОбновленииДанныхФайла(Контекст, Версия.Ссылка);
Если ВерсияЗаблокирована Тогда
РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы);
КонецЕсли;
РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии);
Если СведенияОФайле.ХранитьВерсии Тогда
РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, Версия.Ссылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
Иначе
РаботаСФайламиСлужебный.ОбновитьТекстВФайле(ФайлСсылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
КонецЕсли;
РазблокироватьДанныеДляРедактирования(СсылкаНаВерсию, УникальныйИдентификаторФормы);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(СсылкаНаВерсию, УникальныйИдентификаторФормы);
МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Ложь);
ВызватьИсключение;
КонецПопытки;
@@ -2593,6 +2589,7 @@
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -2617,28 +2614,28 @@
Попытка
Блокировка.Заблокировать();
ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Версия, , УникальныйИдентификатор);
ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, , УникальныйИдентификатор);
ВерсияОбъект = ДанныеФайла.Версия.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(ВерсияОбъект.Ссылка, , УникальныйИдентификатор);
ВерсияОбъект.Размер = РазмерФайла;
// Чтобы прошла запись ранее подписанного объекта.
ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина);
ВерсияОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ВерсияОбъект.Ссылка, УникальныйИдентификатор);
ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор);
// Чтобы прошла запись ранее подписанного объекта.
ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина);
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Версия, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Версия, УникальныйИдентификатор);
РазблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка, УникальныйИдентификатор);
ВызватьИсключение;
КонецПопытки;
@@ -5165,7 +5165,7 @@
Процедура ОчиститьРабочийКаталог(ОбработчикРезультата, РазмерФайловВРабочемКаталоге, РазмерДобавляемогоФайла, ОчищатьВсе) Экспорт
#Если ВебКлиент Тогда
ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, НСтр("ru = 'Очистка рабочего каталога не поддерживается в веб-клиенте.'"), Неопределено);
ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, НСтр("ru = 'Очистка рабочего каталога возможна только в приложении (тонкий клиент).'"), Неопределено);
Возврат;
#КонецЕсли
@@ -5200,7 +5200,6 @@
СреднийРазмерФайла = ПараметрыВыполнения.РазмерФайловВРабочемКаталоге / ТаблицаФайлов.Количество();
КонецЕсли;
Если ПараметрыВыполнения.ОчищатьВсе Тогда
СколькоНадоОсвободитьМеста = 0;
Иначе
@@ -5228,8 +5227,14 @@
//
Процедура ОчиститьРабочийКаталогДляОткрываемогоФайла(ПараметрыВыполнения)
Индекс = 0;
Заголовок = НСтр("ru = 'Очистка рабочего каталога'");
Текст = НСтр("ru = 'Пожалуйста, подождите...'");
Состояние(Заголовок, 1, Текст);
Для каждого Элемент Из ПараметрыВыполнения.ТаблицаФайлов Цикл
Индекс = Индекс + 1;
ПолныйПуть = ПараметрыВыполнения.ИмяКаталога + Элемент.Путь;
ФайлНаДиске = Новый Файл(ПолныйПуть);
ФайлНаДиске.УстановитьТолькоЧтение(Ложь);
@@ -5254,7 +5259,6 @@
КонецЕсли;
КонецЕсли;
// Удаление из регистра сведений.
РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(Элемент.Версия);
Если ПараметрыВыполнения.СколькоНадоОсвободитьМеста > 0 Тогда
@@ -5264,6 +5268,13 @@
КонецЕсли;
КонецЕсли;
Если Индекс % 10 = 0 Тогда
Прогресс = ?(ПараметрыВыполнения.СколькоНадоОсвободитьМеста > 0,
(ПараметрыВыполнения.СколькоНадоОсвободитьМеста - ПараметрыВыполнения.СколькоОсталось) * 100 / ПараметрыВыполнения.СколькоНадоОсвободитьМеста,
Индекс * 100 / ПараметрыВыполнения.ТаблицаФайлов.Количество());
Состояние(Заголовок, Прогресс, Текст);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -9629,7 +9640,7 @@
Если Не РасширениеПоддерживается Тогда
ТекстПредупреждения =
НСтр("ru = 'Сравнение файлов поддерживается только для файлов следующих типов:
НСтр("ru = 'Сравнение файлов возможно только для файлов следующих типов:
| Текстовый документ (.txt)
| Документ формата RTF (.rtf)
| Документ Microsoft Word (.doc, .docx)
@@ -9662,11 +9673,11 @@
ПараметрыВыполнения.Вставить("Ссылка2", ВторойФайл);
ПараметрыВыполнения.Вставить("ВладелецВерсии", ВладелецВерсии);
СравнениеВерсийАвтомат(-1, ПараметрыВыполнения);
СравнитьФайлыСлужебный(-1, ПараметрыВыполнения);
КонецПроцедуры
Процедура СравнениеВерсийАвтомат(Результат, ПараметрыВыполнения) Экспорт
Процедура СравнитьФайлыСлужебный(Результат, ПараметрыВыполнения) Экспорт
Если Результат <> -1 Тогда
Если ПараметрыВыполнения.ТекущийШаг = 1 Тогда
@@ -9702,7 +9713,7 @@
Если ПараметрыВыполнения.СпособСравненияВерсийФайлов = Неопределено Тогда
// Первый вызов - еще не инициализирована настройка.
Обработчик = Новый ОписаниеОповещения("СравнениеВерсийАвтомат", ЭтотОбъект, ПараметрыВыполнения);
Обработчик = Новый ОписаниеОповещения("СравнитьФайлыСлужебный", ЭтотОбъект, ПараметрыВыполнения);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВыборСпособаСравненияВерсий", ,
ЭтотОбъект, , , , Обработчик);
Возврат;
@@ -9729,14 +9740,14 @@
КонецЕсли;
Если ПараметрыВыполнения.ТекущийШаг = 3 Тогда
Обработчик = Новый ОписаниеОповещения("СравнениеВерсийАвтомат", ЭтотОбъект, ПараметрыВыполнения);
Обработчик = Новый ОписаниеОповещения("СравнитьФайлыСлужебный", ЭтотОбъект, ПараметрыВыполнения);
ПолучитьФайлВерсииВРабочийКаталог(
Обработчик, ПараметрыВыполнения.ДанныеФайла1, ПараметрыВыполнения.ПолноеИмяФайла1);
Возврат;
КонецЕсли;
Если ПараметрыВыполнения.ТекущийШаг = 4 Тогда
Обработчик = Новый ОписаниеОповещения("СравнениеВерсийАвтомат", ЭтотОбъект, ПараметрыВыполнения);
Обработчик = Новый ОписаниеОповещения("СравнитьФайлыСлужебный", ЭтотОбъект, ПараметрыВыполнения);
ПолучитьФайлВерсииВРабочийКаталог(
Обработчик, ПараметрыВыполнения.ДанныеФайла2, ПараметрыВыполнения.ПолноеИмяФайла2);
Возврат;
@@ -5746,13 +5746,13 @@
// 2. открыть форму ошибки
// 3. возврат результат успеха.
//
Процедура ВывестиИнформацию(ОповещениеОЗавершении, ТекстСообщения, ТаймаАут = Неопределено, Заголовок = "", ПараметрыОперации = Неопределено) Экспорт
Процедура ВывестиИнформацию(ОповещениеОЗавершении, ТекстСообщения, ТаймАут = Неопределено, Заголовок = "", ПараметрыОперации = Неопределено) Экспорт
ПараметрыЦикла = Новый Структура();
ПараметрыЦикла.Вставить("ВидОперации", НСтр("ru = 'Вывести информацию пользователю'", КодЯзыка()));
ПараметрыЦикла.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении);
ПараметрыЦикла.Вставить("ТекстСообщения", ТекстСообщения);
ПараметрыЦикла.Вставить("ТаймАут", ТаймаАут);
ПараметрыЦикла.Вставить("ТаймАут", ТаймАут);
ПараметрыЦикла.Вставить("Заголовок", Заголовок);
ПараметрыЦикла.Вставить("ПараметрыОперации", ПроверитьПараметрыОперации(ПараметрыОперации));
@@ -5797,14 +5797,14 @@
// 2. открыть форму ошибки
// 3. возврат результат успеха.
//
Процедура ВывестиВопрос(ОповещениеОЗавершении, ТекстСообщения, СписокКоманд, ТаймаАут = Неопределено, Заголовок = "", ПараметрыОперации = Неопределено) Экспорт
Процедура ВывестиВопрос(ОповещениеОЗавершении, ТекстСообщения, СписокКоманд, ТаймАут = Неопределено, Заголовок = "", ПараметрыОперации = Неопределено) Экспорт
ПараметрыЦикла = Новый Структура();
ПараметрыЦикла.Вставить("ВидОперации", НСтр("ru = 'Вопрос пользователю'", КодЯзыка()));
ПараметрыЦикла.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении);
ПараметрыЦикла.Вставить("ТекстСообщения", ТекстСообщения);
ПараметрыЦикла.Вставить("СписокКоманд", СписокКоманд);
ПараметрыЦикла.Вставить("ТаймАут", ТаймаАут);
ПараметрыЦикла.Вставить("ТаймАут", ТаймАут);
ПараметрыЦикла.Вставить("Заголовок", Заголовок);
ПараметрыЦикла.Вставить("ПараметрыОперации", ПроверитьПараметрыОперации(ПараметрыОперации));
@@ -1367,6 +1367,106 @@
КонецПроцедуры
Процедура СброситьРазмерыИПоложениеОкна(Форма) Экспорт
Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда
Возврат;
КонецЕсли;
ИмяФормы = Форма.ИмяФормы;
НовыйКлючСохраненияПоложенияОкна = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
КлючОбъектаХранения = ИмяФормы + "/ВременныеКлючиСохраненияПоложенияОкна";
ИмяПользователя = ИмяПользователя();
НачалоДня = НачалоДня(ТекущаяУниверсальнаяДата());
ГраницаУстаревания = НачалоДня - 2*24*60*60;
Ключи = ХранилищеСистемныхНастроек.Загрузить(КлючОбъектаХранения);
Если ТипЗнч(Ключи) = Тип("Соответствие") Тогда
ИменаНастроек = Новый Массив;
ИменаНастроек.Добавить("/НастройкиОкна");
ИменаНастроек.Добавить("/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкна");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента");
Для Каждого КлючИЗначение Из Ключи Цикл
ТекущийДень = КлючИЗначение.Ключ;
Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Если ТекущийДень > ГраницаУстаревания Тогда
Продолжить;
КонецЕсли;
КлючиТекущегоДня = КлючИЗначение.Значение;
Если ТипЗнч(КлючиТекущегоДня) <> Тип("Массив") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Для Каждого ТекущийКлюч Из КлючиТекущегоДня Цикл
НачалоКлючаОбъекта = ИмяФормы + "/" + ТекущийКлюч;
Для Каждого ИмяНастройки Из ИменаНастроек Цикл
ХранилищеСистемныхНастроек.Удалить(НачалоКлючаОбъекта + ИмяНастройки, "", ИмяПользователя);
КонецЦикла;
КонецЦикла;
Ключи.Удалить(ТекущийДень);
КонецЦикла;
КонецЕсли;
ОчиститьСтарыеКлючи = ТипЗнч(Ключи) <> Тип("Соответствие");
Если ОчиститьСтарыеКлючи Тогда
Ключи = Новый Соответствие;
КонецЕсли;
КлючиДня = Ключи.Получить(НачалоДня);
Если ТипЗнч(КлючиДня) <> Тип("Массив") Тогда
КлючиДня = Новый Массив;
Ключи.Вставить(НачалоДня, КлючиДня);
КонецЕсли;
КлючиДня.Добавить(НовыйКлючСохраненияПоложенияОкна);
ХранилищеСистемныхНастроек.Сохранить(КлючОбъектаХранения,, Ключи);
Форма.КлючСохраненияПоложенияОкна = НовыйКлючСохраненияПоложенияОкна;
Если Не ОчиститьСтарыеКлючи Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Истина Цикл
Попытка
ЕстьСледующей = Выборка.Следующий();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
Прервать;
КонецПопытки;
Если Не ЕстьСледующей Тогда
Прервать;
КонецЕсли;
Если Не СтрНачинаетсяС(Выборка.КлючОбъекта, ИмяФормы)
Или Выборка.КлючНастроек <> ""
Или Выборка.КлючОбъекта = КлючОбъектаХранения Тогда
Продолжить;
КонецЕсли;
ЧастиКлючаОбъекта = СтрРазделить(Выборка.КлючОбъекта, "/");
Если ЧастиКлючаОбъекта.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
ПоследняяЧастьКлюча = ЧастиКлючаОбъекта[ЧастиКлючаОбъекта.ВГраница()];
Если СтрНайти(ПоследняяЧастьКлюча, "НастройкиОкна") > 0
Или СтрНайти(ПоследняяЧастьКлюча, "WindowSettings") > 0 Тогда
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, "", ИмяПользователя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Прочие процедуры и функции.
@@ -1656,7 +1756,7 @@
Типы.Добавить(Метаданные.Константы.АдресПубликацииИнформационнойБазыВИнтернете);
Типы.Добавить(Метаданные.Константы.АдресПубликацииИнформационнойБазыВЛокальнойСети);
Типы.Добавить(Метаданные.Константы.ИдентификаторИнформационнойБазы);
Типы.Добавить(Метаданные.Справочники.ВерсииРасширений);
Типы.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовРасширений);
Типы.Добавить(Метаданные.РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений);
@@ -2405,30 +2505,40 @@
Если Константы.ИспользоватьРазделениеПоОбластямДанных.Получить() Тогда
НовыеЗначения.Вставить("НеИспользоватьРазделениеПоОбластямДанных", Ложь);
НовыеЗначения.Вставить("СтандартныеПодсистемыВАвтономномРежиме", Ложь);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда
НовыеЗначения.Вставить("ЭтоАвтономноеРабочееМесто", Ложь)
НовыеЗначения.Вставить("ЭтоАвтономноеРабочееМесто", Ложь);
КонецЕсли;
ИначеЕсли ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса")
И ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
НовыеЗначения.Вставить("НеИспользоватьРазделениеПоОбластямДанных", Ложь);
// При обновлении АРМ синхронизируем значения константы с ЭтоАвтономноеРабочееМесто
НовыеЗначения.Вставить("СтандартныеПодсистемыВАвтономномРежиме", Истина);
Иначе
НовыеЗначения.Вставить("НеИспользоватьРазделениеПоОбластямДанных", Истина);
НовыеЗначения.Вставить("СтандартныеПодсистемыВАвтономномРежиме", Ложь);
КонецЕсли;
Для каждого КлючИЗначения Из НовыеЗначения Цикл
Если КлючИЗначения.Ключ = "НеИспользоватьРазделениеПоОбластямДанных"
И Константы[КлючИЗначения.Ключ].Получить() <> КлючИЗначения.Значение Тогда
ИЛИ КлючИЗначения.Ключ = "СтандартныеПодсистемыВАвтономномРежиме" Тогда
Если Константы[КлючИЗначения.Ключ].Получить() <> КлючИЗначения.Значение Тогда
Константы[КлючИЗначения.Ключ].Установить(КлючИЗначения.Значение);
КонецЕсли;
ИначеЕсли КлючИЗначения.Ключ = "ЭтоАвтономноеРабочееМесто"
И ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() = Истина Тогда
@@ -262,7 +262,7 @@
Функция ЗначениеФлажкаУдалятьПоРасписанию() Экспорт
Отбор = Новый Структура;
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных);
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9162a85e-a385-42b0-b809-da916fce44b7">
<name>УдалениеПомеченныхПовтИсп</name>
<name>УдалениеПомеченныхОбъектовПовтИсп</name>
<synonym>
<key>ru</key>
<value>Удаление помеченных повт исп</value>
<value>Удаление помеченных объектов повт исп</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
@@ -30,7 +30,7 @@
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
Зависимость = Настройки.Добавить();
Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УдалениеПомеченных;
Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов;
Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьУдалениеПомеченныхОбъектов;
Зависимость.ВключатьПриВключенииФункциональнойОпции = Ложь;
@@ -39,7 +39,7 @@
// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.
Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт
ШаблоныЗаданий.Добавить("УдалениеПомеченных");
ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов.Имя);
ШаблоныЗаданий.Добавить(Метаданные.РегламентныеЗадания.КонтрольУдаленияПомеченныхОбъектов.Имя);
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.
@@ -251,7 +251,7 @@
ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 10);
ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3);
РегламентныеЗаданияСервер.УстановитьПараметрыРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченных,
РегламентныеЗаданияСервер.УстановитьПараметрыРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов,
ПараметрыЗадания);
КонецПроцедуры
@@ -260,7 +260,7 @@
//
Процедура УдалениеПомеченныхПоРасписанию() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченных);
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов);
УдаляемыеОбъекты = УдалениеПомеченныхОбъектов.ПомеченныеНаУдаление(,Истина);
УдалитьПомеченныеОбъектыСлужебный(
УдаляемыеОбъекты,
@@ -286,22 +286,21 @@
// Формирует список объектов метаданных, в которых разрешено наличие битых ссылок.
// Результат кешируется.
//
//
// Возвращаемое значение:
// Массив из ОбъектМетаданных
//
Функция ИсключенияПоискаСсылокРазрешающихУдаление() Экспорт
Возврат УдалениеПомеченныхПовтИсп.ИсключенияПоискаСсылокРазрешающихУдаление();
Возврат УдалениеПомеченныхОбъектовПовтИсп.ИсключенияПоискаСсылокРазрешающихУдаление();
КонецФункции
// Снимает блокировку с объектов по истечении времени жизни сеанса удаления объектов.
// Для прекращения контроля использования удаляемых объектов при аварийном завершении сеанса удаления объектов.
// Для снятия запрета использования удаляемых объектов в новых объектах
// в случае аварийного завершения сеанса удаления помеченных объектов.
//
Процедура ПроверкаАктивностиСеансаУдаленияОбъектов() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов);
Процедура КонтрольУдаленияПомеченныхОбъектов() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.КонтрольУдаленияПомеченныхОбъектов);
УстановитьПривилегированныйРежим(Истина);
Если НЕ ПроверятьИспользованиеУдаляемыхОбъектов() Тогда
Возврат;
КонецЕсли;
@@ -338,17 +337,15 @@
КонецЦикла;
КонецПроцедуры
// Возвращает число секунд, в течение которых должна держаться блокировка использования удаляемого объекта
// Возвращает максимальное количество секунд, в течение которого должен быть установлен
// запрет использования удаляемого объекта в других объектах. Значение равно трем часам.
//
// Возвращаемое значение:
// Число
//
Функция ВремяЖизниБлокировки() Экспорт
Перем ВремяЖизниБлокировки;
ВремяЖизниБлокировки = 3 * 60 * 60;
Возврат ВремяЖизниБлокировки;
Возврат 3 * 60 * 60;
КонецФункции
@@ -672,8 +669,9 @@
#КонецОбласти
// Отключает контроль использования удаляемых объектов. Отключает регламентное задание, если обработаны все удаляемых объекты.
// Не используется для неразделенного сеанса в модули сервиса.
// Отключает контроль использования удаляемых объектов.
// Отключает регламентное задание, если обработаны все удаляемые объекты.
// Не используется для неразделенного сеанса в модели сервиса.
//
// Параметры:
// Идентификатор - УникальныйИдентификатор
@@ -698,7 +696,7 @@
Фильтр = Новый Структура(
"Метаданные",
Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов);
Метаданные.РегламентныеЗадания.КонтрольУдаленияПомеченныхОбъектов);
УстановитьПривилегированныйРежим(Истина);
@@ -747,7 +745,7 @@
Фильтр = Новый Структура(
"Метаданные",
Метаданные.РегламентныеЗадания.ОтключениеПроверкиИспользованияУдаляемыхОбъектов);
Метаданные.РегламентныеЗадания.КонтрольУдаленияПомеченныхОбъектов);
УстановитьПривилегированныйРежим(Истина);
@@ -861,8 +859,7 @@
КешТиповУдаляемыхОбъектов = Новый Соответствие;
Для Каждого УдаляемыйСсылка Из УдаляемыеОбъекты Цикл
ТипУдаляемого = ТипЗнч(УдаляемыйСсылка);
УдаляемыйИнформация = ИнформацияОТипе(ТипУдаляемого,
КешТиповУдаляемыхОбъектов);
УдаляемыйИнформация = ИнформацияОТипе(ТипУдаляемого, КешТиповУдаляемыхОбъектов);
УзелТипа = УзлыПервогоУровня.Получить(ТипУдаляемого);
Если УзелТипа = Неопределено Тогда
@@ -1564,7 +1561,7 @@
ПериодОбновленияЗначения = 60000;
ДанныеКонстанты = УдалениеПомеченныхПовтИсп.ПроверятьИспользованиеУдаляемыхОбъектов();
ДанныеКонстанты = УдалениеПомеченныхОбъектовПовтИсп.ПроверятьИспользованиеУдаляемыхОбъектов();
Если ТекущаяУниверсальнаяДатаВМиллисекундах() - ДанныеКонстанты.МеткаВремени > ПериодОбновленияЗначения Тогда
ДанныеКонстанты.Значение = Константы.ПроверятьИспользованиеУдаляемыхОбъектов.Получить();
ДанныеКонстанты.МеткаВремени = ТекущаяУниверсальнаяДатаВМиллисекундах();
@@ -27,7 +27,7 @@
УдалятьПомеченныеОбъекты = Изменения.Использование;
Отбор = Новый Структура;
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных);
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
@@ -59,7 +59,7 @@
Результат.Вставить("РазделениеВключено", ОбщегоНазначения.РазделениеВключено());
Отбор = Новый Структура;
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченных);
Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.УдалениеПомеченныхОбъектов);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Если Задания.Количество() > 0 Тогда
Задания = Задания[0];
@@ -3228,6 +3228,15 @@
Возврат;
КонецЕсли;
Если Объект.ЭтоНовый()
И ОбщегоНазначения.ИнформационнаяБазаФайловая()
И Не ПропуститьПроверкуДоступа(Отказ, Объект) Тогда
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений");
Блокировка.Заблокировать();
КонецЕсли;
СвойстваВидовДоступа = СвойстваВидовДоступа();
ЗначенияДоступаСГруппами = СвойстваВидовДоступа.ЗначенияДоступаСГруппами;
@@ -23011,8 +23020,7 @@
Параметры = КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя);
Если Параметры = Неопределено Тогда
ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, Ложь);
Параметры = КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя);
ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, Параметры);
КонецЕсли;
Если ДляВнешнихПользователей = Null Тогда
@@ -23032,53 +23040,35 @@
КонецФункции
// Для функций СвойстваСпискаКакВедущего, ПараметрыОграничения.
Процедура ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, ДействующиеПараметрыОбновлены,
ДобавляемыеОграниченияСписков = Неопределено, ОбщийКонтекст = Неопределено, ПовторныйВызов = Ложь)
Процедура ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, Параметры,
ОбщийКонтекст = Неопределено, ПовторныйВызов = Ложь)
Если ОбщийКонтекст = Неопределено Тогда
ОбщийКонтекст = ОбщийКонтекстРасчетаПараметровОграничения(ПолноеИмя);
ОбщийКонтекст.Вставить("ОписанияОграничений", Новый Соответствие);
КонецЕсли;
ПараметрыОграниченияСписков = Новый Соответствие;
ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, ОбщийКонтекст, Ложь);
ПолноеИмяПриЗацикливании = "";
ДобавитьПараметрыОграниченияСписка(ПолноеИмя, ПараметрыОграниченияСписков,
ДействующиеПараметры, ДействующиеПараметрыОбновлены, ИдентификаторТранзакции, ОбщийКонтекст);
ВерсияОграничений = ДействующиеПараметры.ВерсииОграниченийСписков.Получить(ПолноеИмя);
РассчитанныеПараметры = РассчитанныеПараметрыОграничения(ПолноеИмя, ОбщийКонтекст, ДействующиеПараметры);
Если ДействующиеПараметрыОбновлены Тогда
Если ВерсияОграничений <> РассчитанныеПараметры.Версия Тогда
Если ПовторныйВызов Тогда
ПолноеИмяПриЗацикливании = ПолноеИмя;
Иначе
ЗаполнитьПараметрыОграничения(ПолноеИмя,
ИдентификаторТранзакции, Ложь, ДобавляемыеОграниченияСписков, ОбщийКонтекст, Истина);
Возврат;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ПолноеИмяПриЗацикливании) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обновить параметры ограничения доступа списка ""%1""
|из-за нестабильной строки свойств версии параметров для вычисления хеш-суммы.'"),
ПолноеИмяПриЗацикливании);
ПолноеИмя);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если ПараметрыОграниченияСписков.Количество() = 0 Тогда
ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, ОбщийКонтекст, Истина);
ЗаполнитьПараметрыОграничения(ПолноеИмя, ИдентификаторТранзакции, Параметры, ОбщийКонтекст, Истина);
Возврат;
КонецЕсли;
Если ДобавляемыеОграниченияСписков <> Неопределено Тогда
ДобавляемыеОграниченияСписков = ПараметрыОграниченияСписков;
Возврат;
КонецЕсли;
Параметры = ОбщегоНазначения.ФиксированныеДанные(РассчитанныеПараметры);
Кэш = КэшПараметровОграничения();
Для Каждого КлючИЗначение Из ПараметрыОграниченияСписков Цикл
Кэш.ОграниченияСписков.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КэшПараметровОграничения().ОграниченияСписков.Вставить(ПолноеИмя, Параметры);
КонецПроцедуры
@@ -23265,28 +23255,6 @@
КонецФункции
// Для процедуры ЗаполнитьПараметрыОграничения.
Процедура ДобавитьПараметрыОграниченияСписка(ПолноеИмя, ПараметрыОграниченияСписков, ДействующиеПараметры,
ДействующиеПараметрыОбновлены, ИдентификаторТранзакции, ОбщийКонтекст)
Если КэшПараметровОграничения().ОграниченияСписков.Получить(ПолноеИмя) <> Неопределено Тогда
Возврат;
КонецЕсли;
ВерсияОграничений = ДействующиеПараметры.ВерсииОграниченийСписков.Получить(ПолноеИмя);
РассчитанныеПараметры = РассчитанныеПараметрыОграничения(ПолноеИмя, ОбщийКонтекст, ДействующиеПараметры);
Если ВерсияОграничений <> РассчитанныеПараметры.Версия Тогда
ДействующиеПараметры = ДействующиеПараметрыОграниченияДоступа(ИдентификаторТранзакции, ОбщийКонтекст, Истина);
ДействующиеПараметрыОбновлены = Истина;
Возврат;
КонецЕсли;
ПараметрыОграниченияСписков.Вставить(ПолноеИмя,
ОбщегоНазначения.ФиксированныеДанные(РассчитанныеПараметры));
КонецПроцедуры
// Для процедуры ДобавитьПараметрыОграниченияСписка.
//
// Возвращаемое значение:
@@ -2719,7 +2719,7 @@
// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь.
// * НастройкиПроверки - Неопределено - для типов Другое, ВебСтраница, Skype.
// - Структура - состав полей зависит от типа контактной информации:
// ** ТолькоНациональныйАдрес - Булево - для типа Адрес. Если Истина, если возможен ввод только российских адресов.
// ** ТолькоНациональныйАдрес - Булево - для типа Адрес. Если Истина, если возможен ввод только национальных адресов.
// ** ПроверятьКорректность - Булево - для типа Адрес. Если Истина, если требуется запрещать пользователю записывать
// некорректные адреса.
// ** СкрыватьНеактуальныеАдреса - Булево - для типа Адрес. Если Истина, если не требуется показывать
@@ -4494,7 +4494,7 @@
Возврат Ложь;
КонецФункции
Процедура ВывестиСообщениеПользователю(ТекстСообщения, ИмяРеквизита, ПолеРеквизита)
Процедура ВывестиСообщениеПользователю(ТекстСообщения, ИмяРеквизита, ПолеРеквизита = "")
ИмяРеквизита = ?(ПустаяСтрока(ПолеРеквизита), ИмяРеквизита, "");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, ПолеРеквизита, ИмяРеквизита);
@@ -4862,13 +4862,45 @@
// Параметры:
// Источник - ОбъектXDTO - контактная информацией.
// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации с настройками проверки.
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке.
// ИмяРеквизита - Строка - необязательно имя реквизита для привязки сообщения об ошибке к реквизиту на форме.
//
// Возвращаемое значение:
// Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие.
//
Функция ОшибкиЗаполненияТелефона(Источник, ВидИнформации, ИмяРеквизита = "")
Если Не ВидИнформации.ПроверятьКорректность Тогда
Возврат 0;
КонецЕсли;
ЕстьОшибки = Ложь;
СведенияОТелефоне = СведенияОТелефоне(Источник);
МодульРаботаСАдресами = Неопределено;
Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
КонецЕсли;
СписокОшибок = УправлениеКонтактнойИнформациейКлиентСервер.ОшибкиЗаполненияТелефона(СведенияОТелефоне, МодульРаботаСАдресами);
Для Каждого Элемент Из СписокОшибок Цикл
Если ЗначениеЗаполнено(ИмяРеквизита) Тогда
ВывестиСообщениеПользователю(Элемент.Представление, ИмяРеквизита);
КонецЕсли;
ЕстьОшибки = Истина;
КонецЦикла;
Если ЕстьОшибки И ВидИнформации.ПроверятьКорректность Тогда
Возврат 2;
ИначеЕсли ЕстьОшибки Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции
// Проверяет контактную информацию веб страницы и сообщает об ошибках. Возвращает флаг наличия ошибок.
@@ -1766,14 +1766,4 @@
КонецПроцедуры
Функция ОставитьТолькоЦифрыВСтроке(Знач Строка) Экспорт
ЛишниеСимволы = СтрСоединить(СтрРазделить(Строка, "0123456789"), "");
Результат = СтрСоединить(СтрРазделить(Строка, ЛишниеСимволы), "");
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -601,6 +601,83 @@
// АПК: 1297-вкл
КонецФункции
//
// Возвращает список ошибок заполнения в виде списка значений
//
// Параметры:
// СведенияОТелефоне - см. СтруктураПолейТелефона
// МодульДополнительныхПроверок - Произвольный
//
// Возвращаемое значение:
// СписокЗначений - ошибки заполнения телефона:
// * Представление - описание ошибки.
// * Значение - XPath для поля.
//
Функция ОшибкиЗаполненияТелефона(СведенияОТелефоне, МодульДополнительныхПроверок = Неопределено) Экспорт
СписокОшибок = Новый СписокЗначений;
ПолныйНомерТелефона = СведенияОТелефоне.КодСтраны + СведенияОТелефоне.КодГорода + СведенияОТелефоне.НомерТелефона;
КодСтраныТолькоЦифры = ОставитьТолькоЦифрыВСтроке(СведенияОТелефоне.КодСтраны);
Если ЗначениеЗаполнено(СведенияОТелефоне.КодСтраны) И ПустаяСтрока(КодСтраныТолькоЦифры) Тогда
СписокОшибок.Добавить("КодСтраны", НСтр("ru = 'Код страны содержит недопустимые символы'"));
КонецЕсли;
НомерТелефонаТолькоЦифры = ОставитьТолькоЦифрыВСтроке(СведенияОТелефоне.Представление);
Если ПустаяСтрока(НомерТелефонаТолькоЦифры) Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона не содержит цифр'"));
КонецЕсли;
ПолныйНомерТелефонаТолькоЦифры = ОставитьТолькоЦифрыВСтроке(ПолныйНомерТелефона);
Если СтрДлина(ПолныйНомерТелефонаТолькоЦифры) > 15 Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона слишком длинный'"));
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОТелефоне.КодСтраны) И НомерТелефонаСодержитНедопустимыеСимволы(СведенияОТелефоне.КодСтраны) Тогда
СписокОшибок.Добавить("КодСтраны", НСтр("ru = 'Код страны содержит недопустимые символы'"));
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОТелефоне.КодГорода) И НомерТелефонаСодержитНедопустимыеСимволы(СведенияОТелефоне.КодГорода) Тогда
СписокОшибок.Добавить("КодГорода", НСтр("ru = 'Код города содержит недопустимые символы'"));
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОТелефоне.НомерТелефона) И НомерТелефонаСодержитНедопустимыеСимволы(СведенияОТелефоне.НомерТелефона) Тогда
СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона содержит недопустимые символы'"));
КонецЕсли;
Если МодульДополнительныхПроверок <> Неопределено Тогда
МодульДополнительныхПроверок.ПроверитьКорректностьКодовСтраныИГорода(СведенияОТелефоне, СписокОшибок);
КонецЕсли;
Возврат СписокОшибок;
КонецФункции
Функция ОставитьТолькоЦифрыВСтроке(Знач Строка) Экспорт
ЛишниеСимволы = СтрСоединить(СтрРазделить(Строка, "0123456789"), "");
Результат = СтрСоединить(СтрРазделить(Строка, ЛишниеСимволы), "");
Возврат Результат;
КонецФункции
// Проверяет, содержит ли строка только ~
//
// Параметры:
// СтрокаПроверки - Строка - строка для проверки.
//
// Возвращаемое значение:
// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы.
//
Функция НомерТелефонаСодержитНедопустимыеСимволы(Знач СтрокаПроверки)
СписокДопустимыхСимволов = "+-.,() wp1234567890";
Возврат СтрРазделить(СтрокаПроверки, СписокДопустимыхСимволов, Ложь).Количество() > 0;
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -862,7 +862,7 @@
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
МодульРаботаСАдресами.ВывитьИИсправитьУстаревшиеАдреса();
МодульРаботаСАдресами.ВыявитьИИсправитьУстаревшиеАдреса();
КонецЕсли;
@@ -1551,17 +1551,11 @@
//
// Возвращаемое значение
// ТаблицаЗначений:
// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе,
// соответствующее
// формату;
// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные,
// где хранится
// представление;
// Представление - Строка - представление типа
// файла (заполняется из перечисления);
// Расширение - Строка - тип файла для
// операционной системы;
// Картинка - Картинка - значок формата.
// * ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение, соответствующее формату.
// * Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов
// * Представление - Строка - представление типа файла (заполняется из перечисления).
// * Расширение - Строка - тип файла для операционной системы.
// * Картинка - Картинка - значок формата.
//
Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт
@@ -1662,11 +1662,12 @@
Записать = Ложь;
Если Объект = Неопределено Тогда
Если СвойстваНабора.ДочерниеНаборы = Неопределено
Или СвойстваНабора.ДочерниеНаборы.Количество() = 0 Тогда
Объект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
Иначе
Если СвойстваНабора.ЭтоГруппа
Или (СвойстваНабора.ДочерниеНаборы <> Неопределено
И СвойстваНабора.ДочерниеНаборы.Количество() <> 0) Тогда
Объект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьГруппу();
Иначе
Объект = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент();
КонецЕсли;
Если Родитель <> Неопределено Тогда
Объект.Родитель = Родитель;
@@ -95,7 +95,6 @@
Результат.Вставить("ТипШаблона", "Письмо");
Результат.Вставить("Назначение", "");
Результат.Вставить("ПолноеИмяТипаНазначения", "");
Результат.Вставить("ФорматПисьма", ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"));
Результат.Вставить("УпаковатьВАрхив", Ложь);
Результат.Вставить("ТранслитерироватьИменаФайлов", Ложь);
Результат.Вставить("ПеревестиВТранслит", Ложь);
@@ -113,6 +112,8 @@
Результат.Вставить("Наименование", "");
Результат.Вставить("ПараметрыСообщения", Новый Структура);
Результат.Вставить("ПодписьИПечать", Ложь);
Результат.Вставить("РасширенныйСписокПолучателей", Ложь);
Результат.Вставить("ФорматПисьма", ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"));
Возврат Результат;
@@ -796,6 +796,10 @@
ПараметрыШаблона.ТипШаблона = "SMS";
КонецЕсли;
Если ПараметрыОтправки.ДополнительныеПараметры.Свойство("РасширенныйСписокПолучателей") Тогда
ПараметрыШаблона.РасширенныйСписокПолучателей = ПараметрыОтправки.ДополнительныеПараметры.РасширенныйСписокПолучателей;
КонецЕсли;
МенеджерОбъекта = Неопределено;
Если ПараметрыОтправки.Свойство("Предмет") И ЗначениеЗаполнено(ПараметрыОтправки.Предмет) Тогда
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(ПараметрыОтправки.Предмет));
@@ -1777,106 +1777,6 @@
КонецПроцедуры
Процедура СброситьРазмерыИПоложениеОкна(Форма) Экспорт
Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда
Возврат;
КонецЕсли;
ИмяФормы = Форма.ИмяФормы;
НовыйКлючСохраненияПоложенияОкна = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
КлючОбъектаХранения = ИмяФормы + "/ВременныеКлючиСохраненияПоложенияОкна";
ИмяПользователя = ИмяПользователя();
НачалоДня = НачалоДня(ТекущаяУниверсальнаяДата());
ГраницаУстаревания = НачалоДня - 2*24*60*60;
Ключи = ХранилищеСистемныхНастроек.Загрузить(КлючОбъектаХранения);
Если ТипЗнч(Ключи) = Тип("Соответствие") Тогда
ИменаНастроек = Новый Массив;
ИменаНастроек.Добавить("/НастройкиОкна");
ИменаНастроек.Добавить("/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/НастройкиОкнаМобильногоКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкна");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаВебКлиента");
ИменаНастроек.Добавить("/Такси/НастройкиОкнаМобильногоКлиента");
Для Каждого КлючИЗначение Из Ключи Цикл
ТекущийДень = КлючИЗначение.Ключ;
Если ТипЗнч(ТекущийДень) <> Тип("Дата") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Если ТекущийДень > ГраницаУстаревания Тогда
Продолжить;
КонецЕсли;
КлючиТекущегоДня = КлючИЗначение.Значение;
Если ТипЗнч(КлючиТекущегоДня) <> Тип("Массив") Тогда
Ключи = Неопределено;
Прервать;
КонецЕсли;
Для Каждого ТекущийКлюч Из КлючиТекущегоДня Цикл
НачалоКлючаОбъекта = ИмяФормы + "/" + ТекущийКлюч;
Для Каждого ИмяНастройки Из ИменаНастроек Цикл
ХранилищеСистемныхНастроек.Удалить(НачалоКлючаОбъекта + ИмяНастройки, "", ИмяПользователя);
КонецЦикла;
КонецЦикла;
Ключи.Удалить(ТекущийДень);
КонецЦикла;
КонецЕсли;
ОчиститьСтарыеКлючи = ТипЗнч(Ключи) <> Тип("Соответствие");
Если ОчиститьСтарыеКлючи Тогда
Ключи = Новый Соответствие;
КонецЕсли;
КлючиДня = Ключи.Получить(НачалоДня);
Если ТипЗнч(КлючиДня) <> Тип("Массив") Тогда
КлючиДня = Новый Массив;
Ключи.Вставить(НачалоДня, КлючиДня);
КонецЕсли;
КлючиДня.Добавить(НовыйКлючСохраненияПоложенияОкна);
ХранилищеСистемныхНастроек.Сохранить(КлючОбъектаХранения,, Ключи);
Форма.КлючСохраненияПоложенияОкна = НовыйКлючСохраненияПоложенияОкна;
Если Не ОчиститьСтарыеКлючи Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Истина Цикл
Попытка
ЕстьСледующей = Выборка.Следующий();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
Прервать;
КонецПопытки;
Если Не ЕстьСледующей Тогда
Прервать;
КонецЕсли;
Если Не СтрНачинаетсяС(Выборка.КлючОбъекта, ИмяФормы)
Или Выборка.КлючНастроек <> ""
Или Выборка.КлючОбъекта = КлючОбъектаХранения Тогда
Продолжить;
КонецЕсли;
ЧастиКлючаОбъекта = СтрРазделить(Выборка.КлючОбъекта, "/");
Если ЧастиКлючаОбъекта.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
ПоследняяЧастьКлюча = ЧастиКлючаОбъекта[ЧастиКлючаОбъекта.ВГраница()];
Если СтрНайти(ПоследняяЧастьКлюча, "НастройкиОкна") > 0
Или СтрНайти(ПоследняяЧастьКлюча, "WindowSettings") > 0 Тогда
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, "", ИмяПользователя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Обновление информационной базы.
@@ -4343,7 +4243,7 @@
ПредставлениеКлассификатора.Колонки.Добавить("Причина",
Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(500)));
ПредставлениеКлассификатора.Колонки.Добавить("Решение",
Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(500)));
Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(750)));
ПредставлениеКлассификатора.Колонки.Добавить("СпособУстранения",
Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(500)));
ПредставлениеКлассификатора.Колонки.Добавить("Ссылка",
+15 -12
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="a22da5f4-17b3-4d36-af20-4b41712cca0b">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="92b3f980-1c93-42e2-ba1d-372940c24422">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="37b03872-fd22-4a91-aa14-20ac21a39b7f"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="4524d8b6-091b-4c03-b028-669729d6fb3c"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="694341a3-d446-492b-9d91-aff62a0403c3"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="0abf53f1-3e7a-48bb-ba64-28b6aa792b04"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="6ac83ae2-7764-4bef-801b-84c488c9988c"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="49aa51d5-db18-4ce3-91c1-964f9f72e6b5"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="4219f7b4-553d-4092-b946-569014897938"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="2b12dda9-0fbd-448e-81bd-e18451d93f5f"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="1699dfbf-13ad-46d3-8e11-8bda66256ef7"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="70223a5f-c904-486f-b158-225dfb9c8990"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="13e5e33f-78b5-4e64-a413-3881962a3cb1"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="d72c87ef-36ba-493c-afbf-f6beced5f7fb"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="eab014bd-61f9-4aa2-a92b-5177ca6b9821"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="6b833a13-0ec0-4656-a507-2a3191355c5d"/>
<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.1.6.100</version>
<version>3.1.6.118</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1189,10 +1189,10 @@
<commonModules>CommonModule.УдалениеПомеченныхОбъектов</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовКлиент</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовПереопределяемый</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовПовтИсп</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовСлужебный</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхОбъектовСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.УдалениеПомеченныхПовтИсп</commonModules>
<commonModules>CommonModule.УправлениеДоступом</commonModules>
<commonModules>CommonModule.УправлениеДоступомПереопределяемый</commonModules>
<commonModules>CommonModule.УправлениеДоступомСлужебный</commonModules>
@@ -1419,6 +1419,7 @@
<scheduledJobs>ScheduledJob.ИзвлечениеТекста</scheduledJobs>
<scheduledJobs>ScheduledJob.ИсправлениеУстаревшихАдресов</scheduledJobs>
<scheduledJobs>ScheduledJob.КонтрольАктивностиПользователей</scheduledJobs>
<scheduledJobs>ScheduledJob.КонтрольУдаленияПомеченныхОбъектов</scheduledJobs>
<scheduledJobs>ScheduledJob.МониторингЗадач</scheduledJobs>
<scheduledJobs>ScheduledJob.ОбновлениеАгрегатов</scheduledJobs>
<scheduledJobs>ScheduledJob.ОбновлениеДоступаНаУровнеЗаписей</scheduledJobs>
@@ -1427,7 +1428,6 @@
<scheduledJobs>ScheduledJob.ОбновлениеСостоянияЗаявленияНаВыпускСертификата</scheduledJobs>
<scheduledJobs>ScheduledJob.ОбновлениеСтатусовДоставкиSMS</scheduledJobs>
<scheduledJobs>ScheduledJob.ОбработкаСервисовИнтеграции</scheduledJobs>
<scheduledJobs>ScheduledJob.ОтключениеПроверкиИспользованияУдаляемыхОбъектов</scheduledJobs>
<scheduledJobs>ScheduledJob.ОтложенноеОбновлениеИБ</scheduledJobs>
<scheduledJobs>ScheduledJob.ОтправкаSMS</scheduledJobs>
<scheduledJobs>ScheduledJob.ОчисткаЗамеровВремени</scheduledJobs>
@@ -1449,7 +1449,7 @@
<scheduledJobs>ScheduledJob.СтартОтложенныхПроцессов</scheduledJobs>
<scheduledJobs>ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах</scheduledJobs>
<scheduledJobs>ScheduledJob.УдалениеНеактуальнойИнформацииСинхронизации</scheduledJobs>
<scheduledJobs>ScheduledJob.УдалениеПомеченных</scheduledJobs>
<scheduledJobs>ScheduledJob.УдалениеПомеченныхОбъектов</scheduledJobs>
<scheduledJobs>ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений</scheduledJobs>
<scheduledJobs>ScheduledJob.УстановкаПериодаРассчитанныхИтогов</scheduledJobs>
<scheduledJobs>ScheduledJob.ЭкспортОценкиПроизводительности</scheduledJobs>
@@ -1789,11 +1789,13 @@
<constants>Constant.СписокРасширенийФайловOpenDocument</constants>
<constants>Constant.СписокРасширенийФайловOpenDocumentОбластиДанных</constants>
<constants>Constant.СпособХраненияФайлов</constants>
<constants>Constant.СтандартныеПодсистемыВАвтономномРежиме</constants>
<constants>Constant.СтатусОбновленияКонфигурации</constants>
<constants>Constant.УчетнаяЗаписьДляВосстановленияПароля</constants>
<constants>Constant.ХранитьФайлыВТомахНаДиске</constants>
<constants>Constant.ЭтоАвтономноеРабочееМесто</constants>
<constants>Constant.УдалитьЛогинДоступаКСервисуMorpher</constants>
<constants>Constant.УдалитьНастройкиВходаПользователей</constants>
<commonForms>CommonForm.АвтономнаяРабота</commonForms>
<commonForms>CommonForm.АвтономнаяРаботаВМоделиСервиса</commonForms>
<commonForms>CommonForm.АдреснаяКнига</commonForms>
@@ -1918,6 +1920,7 @@
<catalogs>Catalog.МакетыПечатныхФорм</catalogs>
<catalogs>Catalog.НаборыГруппДоступа</catalogs>
<catalogs>Catalog.НаборыДополнительныхРеквизитовИСведений</catalogs>
<catalogs>Catalog.НастройкиАвторизацииИнтернетСервисов</catalogs>
<catalogs>Catalog.ОбщиеВнешниеКомпоненты</catalogs>
<catalogs>Catalog.ПапкиФайлов</catalogs>
<catalogs>Catalog.ПапкиЭлектронныхПисем</catalogs>
@@ -1 +1 @@
{6,1,1,9f44c960-df00-4076-8041-eaa1d3afa88f,1,e3032068-eca1-4932-ba4a-df0c13f23b85,"3.1.6.100","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6688,1,0,a22da5f4-17b3-4d36-af20-4b41712cca0b,a22da5f4-17b3-4d36-af20-4b41712cca0b,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,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,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,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,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-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7Line truncated
{6,1,1,e67e4a81-24b9-4b21-94b8-aec88bc7ce16,1,da2b293d-795a-4b3f-9280-a0ba68dc66b8,"3.1.6.118","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6704,1,0,92b3f980-1c93-42e2-ba1d-372940c24422,92b3f980-1c93-42e2-ba1d-372940c24422,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,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,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,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,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-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7Line truncated
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8">
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ae039438-89af-4217-910d-476115f51ab2">
<producedTypes>
<managerType typeId="950c9fb9-004c-4aea-9952-da77fd857482" valueTypeId="1de2030d-fef3-4c93-99d2-afe629a74798"/>
<valueManagerType typeId="25e29d89-5baf-4310-a1cc-99c252daf10a" valueTypeId="fa9d15fc-cf10-47dc-b3b3-8de30db13827"/>
<valueKeyType typeId="7aedb719-b816-50c6-83eb-1e8b8329e723" valueTypeId="d5b4a76d-79a2-5a64-b09c-a5be745b4e27"/>
<managerType typeId="b4b73017-0460-47f4-9f8e-75fb41de4b6b" valueTypeId="23f537c1-5429-4e2e-8d30-e8e7337c1766"/>
<valueManagerType typeId="3150f1e9-15ca-4111-bd54-7bbe6a1c3c8f" valueTypeId="d46916b8-5446-4df1-b43c-3f4229a948ac"/>
<valueKeyType typeId="93c2c5af-7bb3-4b0b-96de-fae40a4b7855" valueTypeId="731618b2-b245-4d62-8a0f-63739f5b7146"/>
</producedTypes>
<name>НастройкиВходаПользователей</name>
<synonym>
Loaded 100 of 194 files, more files were not shown because too many files have changed in this diff. Show more