This commit is contained in:
Компания 1С committed 2018-03-30 14:01:00 +03:00
1 parent 9a30420561
commit aaa751af4b
106 files changed
+12689 -1716

No files matched your search

@@ -11,6 +11,8 @@
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
Доступен = ?(Объект.ТолькоДляАвтора, "1", "2");
// Чтение свойств предопределенного;
@@ -86,4 +86,94 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
////////////////////////////////////////////////////////////////////////////////
// Обработчики обновления.
// Регистрирует данные к обновлению в плане обмена ОбновлениеИнформационнойБазы
// см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления.
//
// Параметры:
// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
//
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Варианты.Ссылка
|ИЗ
| Справочник.ВариантыОтчетов КАК Варианты
|ГДЕ
| Варианты.Отчет = &УниверсальныйОтчет
| И Варианты.Пользовательский
|");
УниверсальныйОтчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Отчеты.УниверсальныйОтчет);
Запрос.УстановитьПараметр("УниверсальныйОтчет", УниверсальныйОтчет);
Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Ссылки);
КонецПроцедуры
// Обрабатывает данные, зарегистрированные в плане обмена ОбновлениеИнформационнойБазы
// см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления.
//
// Параметры:
// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
//
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ОбъектМетаданных = Метаданные.Справочники.ВариантыОтчетов;
ПолноеИмяОбъекта = ОбъектМетаданных.ПолноеИмя();
Обработано = 0;
Отказано = 0;
Вариант = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта);
Пока Вариант.Следующий() Цикл
Попытка
Отчеты.УниверсальныйОтчет.УстановитьИсточникДанныхВарианта(Вариант.Ссылка);
Обработано = Обработано + 1;
Исключение
// Если не удалось обработать вариант отчета, повторяем попытку снова.
Отказано = Отказано + 1;
ШаблонКомментария = НСтр("ru = 'Не удалось установить источник данных варианта отчета:
| %1 по причине:
| %2'");
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонКомментария, Вариант.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
//
ЗаписьЖурналаРегистрации(
ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
ОбъектМетаданных,
Вариант.Ссылка,
Комментарий);
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Если Обработано = 0 И Отказано <> 0 Тогда
ШаблонСообщения = НСтр("ru = 'Процедуре УстановитьИсточникДанныхВарианта не удалось обработать некоторые варианты отчетов: %1'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Отказано);
ВызватьИсключение ТекстСообщения;
Иначе
ШаблонКомментария = НСтр("ru = 'Процедура УстановитьИсточникДанныхВарианта обработала очередной пакет вариантов отчетов: %1'");
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработано);
//
ЗаписьЖурналаРегистрации(
ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,
ОбъектМетаданных,,
Комментарий);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -28,6 +28,8 @@
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПользователемИзмененаПометкаУдаления = (
Не ЭтоНовый()
И ПометкаУдаления <> Ссылка.ПометкаУдаления
@@ -59,33 +59,6 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ДополнительныеНастройкиАдреса</name>
<id>153</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДополнительныеНастройкиАдресаРасширеннаяПодсказка</name>
<id>154</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ДополнительныеНастройкиАдреса</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -523,6 +496,71 @@
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<items xsi:type="form:FormField">
<name>МеждународныйФорматАдреса</name>
<id>165</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>167</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>МеждународныйФорматАдресаКонтекстноеМеню</name>
<id>166</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:Button">
<name>ДополнительныеНастройкиАдреса</name>
<id>153</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДополнительныеНастройкиАдресаРасширеннаяПодсказка</name>
<id>154</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ДополнительныеНастройкиАдреса</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -153,6 +153,13 @@
КонецПроцедуры
&НаКлиенте
Процедура МеждународныйФорматАдресаПриИзменении(Элемент)
ИзменитьОтображениеПриИзмененииТипа();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -186,8 +193,9 @@
Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда
Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Адрес;
Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования;
Элементы.ДополнительныеНастройкиАдреса.Видимость = ДоступныДополнительныеНастройкиАдреса;
Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования;
Элементы.ДополнительныеНастройкиАдреса.Видимость = ДоступныДополнительныеНастройкиАдреса;
Элементы.ДополнительныеНастройкиАдреса.Доступность = Не Объект.МеждународныйФорматАдреса;
Иначе
Элементы.ДополнительныеНастройкиАдреса.Видимость = Ложь;
Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда
@@ -241,6 +249,5 @@
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -112,5 +112,4 @@
#КонецОбласти
#КонецЕсли
@@ -512,6 +512,25 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="71dfde27-3762-4dd0-9252-6e703ce1b101">
<name>МеждународныйФорматАдреса</name>
<synonym>
<key>ru</key>
<value>Международный формат адреса</value>
</synonym>
<type>
<types>Boolean</types>
</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>
<forms uuid="f5ef3f75-7d12-4284-844f-54d19d1f7e2f">
<name>ФормаСписка</name>
<synonym>
@@ -837,6 +837,10 @@
<command>CommonCommand.Напомнить</command>
<userVisible/>
</cmiFragmentRecord>
<cmiFragmentRecord>
<command>CommonCommand.СкрытьПерсональныеДанныеСубъектов</command>
<userVisible/>
</cmiFragmentRecord>
</commandBar>
</commandInterface>
<extInfo xsi:type="form:CatalogFormExtInfo"/>
@@ -92,6 +92,91 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИНН</name>
<id>45</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИНН</segments>
</dataPath>
<extendedTooltip>
<name>ИННРасширеннаяПодсказка</name>
<id>47</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИННКонтекстноеМеню</name>
<id>46</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">
<width>12</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>13</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Телефоны</segments>
</dataPath>
<extendedTooltip>
<name>ТелефоныExtendedTooltip</name>
<id>37</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТелефоныКонтекстноеМеню</name>
<id>14</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">
<width>20</width>
<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>
@@ -115,10 +200,8 @@
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
@@ -283,25 +366,99 @@
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоррСчетБИК</name>
<id>15</id>
<name>ГруппаРеквизитыДляПлатежейВнутриСтраны</name>
<id>64</id>
<items xsi:type="form:FormGroup">
<name>Коды</name>
<id>41</id>
<name>ГруппаКоррСчетБИК</name>
<id>15</id>
<items xsi:type="form:FormGroup">
<name>Коды</name>
<id>41</id>
<items xsi:type="form:FormField">
<name>Код</name>
<id>1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Code</segments>
</dataPath>
<extendedTooltip>
<name>КодExtendedTooltip</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КодКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>12</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>Коды</value>
</title>
<extendedTooltip>
<name>КодыРасширеннаяПодсказка</name>
<id>42</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<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>1</id>
<name>КоррСчет</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Code</segments>
<segments>Объект.КоррСчет</segments>
</dataPath>
<extendedTooltip>
<name>КодExtendedTooltip</name>
<id>32</id>
<name>КоррСчетExtendedTooltip</name>
<id>31</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -310,8 +467,8 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КодКонтекстноеМеню</name>
<id>2</id>
<name>КоррСчетКонтекстноеМеню</name>
<id>8</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
@@ -320,54 +477,7 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>12</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>38</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>
<extendedTooltip>
<name>СВИФТКодРасширеннаяПодсказка</name>
<id>40</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СВИФТКодКонтекстноеМеню</name>
<id>39</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">
<width>11</width>
<width>24</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
@@ -385,11 +495,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Коды</value>
<value>Корр счет БИК</value>
</title>
<extendedTooltip>
<name>КодыРасширеннаяПодсказка</name>
<id>42</id>
<name>ГруппаКоррСчетБИКExtendedTooltip</name>
<id>30</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -399,27 +509,27 @@
</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>
<items xsi:type="form:FormField">
<name>КоррСчет</name>
<id>7</id>
<name>Город</name>
<id>9</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.КоррСчет</segments>
<segments>Объект.Город</segments>
</dataPath>
<extendedTooltip>
<name>КоррСчетExtendedTooltip</name>
<id>31</id>
<name>ГородExtendedTooltip</name>
<id>34</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -428,8 +538,8 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КоррСчетКонтекстноеМеню</name>
<id>8</id>
<name>ГородКонтекстноеМеню</name>
<id>10</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
@@ -438,7 +548,7 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>24</width>
<width>30</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
@@ -450,19 +560,19 @@
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ИНН</name>
<id>45</id>
<name>Адрес</name>
<id>11</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.ИНН</segments>
<segments>Объект.Адрес</segments>
</dataPath>
<extendedTooltip>
<name>ИННРасширеннаяПодсказка</name>
<id>47</id>
<name>АдресExtendedTooltip</name>
<id>36</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -471,8 +581,88 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИННКонтекстноеМеню</name>
<id>46</id>
<name>АдресКонтекстноеМеню</name>
<id>12</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">
<width>30</width>
<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>Реквизиты для платежей внутри страны</value>
</title>
<extendedTooltip>
<name>ГруппаРеквизитыДляПлатежейВнутриСтраныРасширеннаяПодсказка</name>
<id>65</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>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаРеквизитыДляМеждународныхПлатежей</name>
<id>66</id>
<items xsi:type="form:FormField">
<name>НаименованиеМеждународное</name>
<id>48</id>
<title>
<key>ru</key>
<value>Наименование / Bank name</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.МеждународноеНаименование</segments>
</dataPath>
<titleHeight>1</titleHeight>
<extendedTooltip>
<name>НаименованиеМеждународноеРасширеннаяПодсказка</name>
<id>50</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НаименованиеМеждународноеКонтекстноеМеню</name>
<id>49</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
@@ -481,8 +671,193 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>12</width>
<width>30</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<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>38</id>
<title>
<key>ru</key>
<value>SWIFT BIC</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>40</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СВИФТКодКонтекстноеМеню</name>
<id>39</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">
<width>11</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>54</id>
<title>
<key>ru</key>
<value>Город / City</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>56</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ГородМеждународныйКонтекстноеМеню</name>
<id>55</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">
<width>30</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>57</id>
<title>
<key>ru</key>
<value>Адрес / Address</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>59</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресМеждународныйКонтекстноеМеню</name>
<id>58</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">
<width>30</width>
<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>51</id>
<title>
<key>ru</key>
<value>Страна / Country</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>53</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СтранаКонтекстноеМеню</name>
<id>52</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">
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<wrap>true</wrap>
@@ -499,11 +874,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Корр счет БИК</value>
<value>Реквизиты для международных платежей</value>
</title>
<extendedTooltip>
<name>ГруппаКоррСчетБИКExtendedTooltip</name>
<id>30</id>
<name>ГруппаРеквизитыДляМеждународныхПлатежейРасширеннаяПодсказка</name>
<id>67</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -515,140 +890,13 @@
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<representation>NormalSeparation</representation>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<showTitle>auto</showTitle>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Город</name>
<id>9</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Город</segments>
</dataPath>
<extendedTooltip>
<name>ГородExtendedTooltip</name>
<id>34</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ГородКонтекстноеМеню</name>
<id>10</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">
<width>24</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<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>11</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Адрес</segments>
</dataPath>
<extendedTooltip>
<name>АдресExtendedTooltip</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>12</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">
<width>30</width>
<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>13</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Телефоны</segments>
</dataPath>
<extendedTooltip>
<name>ТелефоныExtendedTooltip</name>
<id>37</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТелефоныКонтекстноеМеню</name>
<id>14</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">
<width>20</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
@@ -7,7 +7,7 @@
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
Возврат;
КонецЕсли;
Элементы.СтраницыДеятельностьПрекращена.Видимость = Объект.ДеятельностьПрекращена Или Пользователи.ЭтоПолноправныйПользователь();
Элементы.СтраницыДеятельностьПрекращена.ТекущаяСтраница = ?(Пользователи.ЭтоПолноправныйПользователь(),
Элементы.СтраницаФлажокДеятельностьПрекращена, Элементы.СтраницаНадписьДеятельностьПрекращена);
@@ -308,6 +308,91 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="d253aa54-a447-44aa-bb13-82fd1ce22af4">
<name>Страна</name>
<synonym>
<key>ru</key>
<value>Страна</value>
</synonym>
<type>
<types>CatalogRef.СтраныМира</types>
</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="8936f114-7a0e-4a4c-8752-ccacab410778">
<name>МеждународноеНаименование</name>
<synonym>
<key>ru</key>
<value>Международное наименование</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>100</length>
</stringQualifiers>
</type>
<toolTip>
<key>ru</key>
<value>Международное наименование банка латиницей</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="55649242-42fd-468f-a1e4-f6cd8871f7a4">
<name>ГородМеждународный</name>
<synonym>
<key>ru</key>
<value>Город</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>50</length>
</stringQualifiers>
</type>
<toolTip>
<key>ru</key>
<value>Город банка латиницей в международном формате.</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="980e0883-cd8f-48c8-896f-ef185650f5c2">
<name>АдресМеждународный</name>
<synonym>
<key>ru</key>
<value>Адрес</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>500</length>
</stringQualifiers>
</type>
<toolTip>
<key>ru</key>
<value>Адрес банка латницей в международном формате</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<forms uuid="c31e34db-41ff-4db3-a4d0-f780f67070f6">
<name>ФормаВыбора</name>
<synonym>
@@ -568,7 +568,7 @@
&НаСервере
Процедура УстановитьВидимостьБазовогоКалендаря()
ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей();
ТаблицаКалендарей = Справочники.ПроизводственныеКалендари.ПроизводственныеКалендариИзМакета();
Если ТаблицаКалендарей.Найти(СокрЛП(Объект.Код), "Code") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "БазовыйКалендарьГруппа", "Видимость", Ложь);
КонецЕсли;
@@ -94,10 +94,6 @@
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Функция читает данные производственного календаря из регистра.
//
// Параметры:
@@ -114,20 +110,108 @@
Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь);
Запрос.УстановитьПараметр("ТекущийГод", НомерГода);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеПроизводственногоКалендаря.Дата,
| ДанныеПроизводственногоКалендаря.ВидДня,
| ДанныеПроизводственногоКалендаря.ДатаПереноса
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.Год = &ТекущийГод
| И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь";
"ВЫБРАТЬ
| ДанныеПроизводственногоКалендаря.Дата,
| ДанныеПроизводственногоКалендаря.ВидДня,
| ДанныеПроизводственногоКалендаря.ДатаПереноса
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.Год = &ТекущийГод
| И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Обновляет справочник Производственные календари из XML файла.
//
// Параметры:
// - ТаблицаКалендарей - таблица значений с описанием производственных календарей.
//
Процедура ОбновитьПроизводственныеКалендари(ТаблицаКалендарей) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаКалендарей);
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код,
| ВЫРАЗИТЬ(КлассификаторТаблица.Base КАК СТРОКА(2)) КАК КодБазового,
| ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование
|ПОМЕСТИТЬ КлассификаторТаблица
|ИЗ
| &КлассификаторТаблица КАК КлассификаторТаблица
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КлассификаторТаблица.Код КАК Код,
| КлассификаторТаблица.КодБазового КАК КодБазового,
| КлассификаторТаблица.Наименование КАК Наименование,
| ПроизводственныеКалендари.Ссылка КАК Ссылка,
| ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод,
| ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование,
| ЕСТЬNULL(ПроизводственныеКалендари.БазовыйКалендарь.Код, """") КАК ПроизводственныйКалендарьКодБазового
|ИЗ
| КлассификаторТаблица КАК КлассификаторТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари
| ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код
|
|УПОРЯДОЧИТЬ ПО
| КодБазового";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(Выборка.Код) = СокрЛП(Выборка.ПроизводственныйКалендарьКод)
И СокрЛП(Выборка.Наименование) = СокрЛП(Выборка.ПроизводственныйКалендарьНаименование)
И СокрЛП(Выборка.КодБазового) = СокрЛП(Выборка.ПроизводственныйКалендарьКодБазового) Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
Иначе
Если Не ОбщегоНазначения.РазделениеВключено() И ЗначениеЗаполнено(Выборка.КодБазового) Тогда
// Зависимые календари не создаем автоматически при обновлении в локальном режиме.
Продолжить;
КонецЕсли;
СправочникОбъект = СоздатьЭлемент();
КонецЕсли;
СправочникОбъект.Код = СокрЛП(Выборка.Код);
СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование);
Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда
СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового);
КонецЕсли;
Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СправочникОбъект);
Продолжить;
КонецЕсли;
СправочникОбъект.Записать();
КонецЦикла;
КонецПроцедуры
// Обновляет данные производственных календарей по таблице данных.
//
Функция ОбновитьДанныеПроизводственныхКалендарей(Знач ТаблицаДанных) Экспорт
ТаблицаИзменений = ТаблицаИзмененийПроизводственныхКалендарей();
ОбновитьОсновныеДанныеПроизводственныхКалендарей(ТаблицаДанных, ТаблицаИзменений);
ОбновитьДанныеЗависимыхПроизводственныхКалендарей(ТаблицаИзменений);
Возврат ТаблицаИзменений;
КонецФункции
// Функция подготавливает результат заполнения производственного календаря
// данными по умолчанию.
// При наличии в конфигурации макета с предопределенными данными
@@ -152,7 +236,7 @@
// Отбираем данные из макета по обоим календарям.
// Получаем не полный набор, а только праздничные дни и переносы.
ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыКалендарей, Ложь);
ДанныеИзМакета = ДанныеПроизводственныхКалендарейПоУмолчанию(КодыКалендарей);
ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Год");
ОтборСтрок.Год = НомерГода;
@@ -234,7 +318,7 @@
// Запрашиваем данные всех календарей из макета для определения годов заполнения.
КодыДанныхМакета = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("КодКалендаря");
ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыДанныхМакета, Ложь);
ДанныеИзМакета = ДанныеПроизводственныхКалендарейПоУмолчанию(КодыДанныхМакета);
ТаблицаДанных = НовыеДанныеПроизводственныхКалендарей();
Выборка = РезультатЗапроса.Выбрать();
@@ -275,14 +359,19 @@
МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков");
ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ДанныеПроизводственныхКалендарей");
Возврат ДанныеПроизводственныхКалендарейИзXML(ТекстовыйДокумент.ПолучитьТекст(), КодыКалендарей, ФормироватьПолныйНабор);
ДанныеXML = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст());
ТаблицаКалендарей = ПроизводственныеКалендариИзМакета();
Возврат ДанныеПроизводственныхКалендарейИзXML(ДанныеXML, ТаблицаКалендарей, КодыКалендарей, ФормироватьПолныйНабор);
КонецФункции
// Преобразовывает данные производственных календарей, представленные в виде XML.
//
// Параметры:
// XML - документ с данными.
// ДанныеXML - структура, извлеченная из файла XML методом ОбщегоНазначения.ПрочитатьXMLВТаблицу.
// ТаблицаКалендарей - таблица значений, список производственных календарей, поддерживаемых в конфигурации.
// КодыКалендарей - необязательный, массив, если не задан, то отбор не будет установлен.
// ФормироватьПолныйНабор - необязательный, булево, если ложь, то будут сформированы только данные по отклонениям от календаря по умолчанию.
//
@@ -294,12 +383,11 @@
// * Дата
// * ДатаПереноса.
//
Функция ДанныеПроизводственныхКалендарейИзXML(Знач XML, КодыКалендарей = Неопределено, ФормироватьПолныйНабор = Истина) Экспорт
Функция ДанныеПроизводственныхКалендарейИзXML(Знач ДанныеXML, ТаблицаКалендарей, КодыКалендарей = Неопределено, ФормироватьПолныйНабор = Истина) Экспорт
ТаблицаДанных = НовыеДанныеПроизводственныхКалендарей();
ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей();
КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(XML).Данные;
КлассификаторТаблица = ДанныеXML.Данные;
ГодыКалендарей = КлассификаторТаблица.Скопировать(, "Calendar,Year");
ГодыКалендарей.Свернуть("Calendar,Year");
@@ -350,90 +438,32 @@
КонецФункции
// Обновляет справочник Производственные календари из XML файла.
// Получает таблицу поставляемых в составе программы производственных календарей.
//
// Параметры:
// - ТаблицаКалендарей - таблица значений с описанием производственных календарей.
// Возвращаемое значение:
// ТаблицаЗначений.
//
Процедура ОбновитьПроизводственныеКалендари(ТаблицаКалендарей) Экспорт
Функция ПроизводственныеКалендариИзМакета() Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаКалендарей);
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код,
| ВЫРАЗИТЬ(КлассификаторТаблица.Base КАК СТРОКА(2)) КАК КодБазового,
| ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование
|ПОМЕСТИТЬ КлассификаторТаблица
|ИЗ
| &КлассификаторТаблица КАК КлассификаторТаблица
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КлассификаторТаблица.Код КАК Код,
| КлассификаторТаблица.КодБазового КАК КодБазового,
| КлассификаторТаблица.Наименование КАК Наименование,
| ПроизводственныеКалендари.Ссылка КАК Ссылка,
| ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод,
| ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование,
| ЕСТЬNULL(ПроизводственныеКалендари.БазовыйКалендарь.Код, """") КАК ПроизводственныйКалендарьКодБазового
|ИЗ
| КлассификаторТаблица КАК КлассификаторТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари
| ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код
|
|УПОРЯДОЧИТЬ ПО
| КодБазового";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(Выборка.Код) = СокрЛП(Выборка.ПроизводственныйКалендарьКод)
И СокрЛП(Выборка.Наименование) = СокрЛП(Выборка.ПроизводственныйКалендарьНаименование)
И СокрЛП(Выборка.КодБазового) = СокрЛП(Выборка.ПроизводственныйКалендарьКодБазового) Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
Иначе
Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда
// Зависимые календари не создаем автоматически при обновлении.
Продолжить;
КонецЕсли;
СправочникОбъект = СоздатьЭлемент();
КонецЕсли;
СправочникОбъект.Код = СокрЛП(Выборка.Код);
СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование);
Если ЗначениеЗаполнено(Выборка.КодБазового) Тогда
СправочникОбъект.БазовыйКалендарь = НайтиПоКоду(Выборка.КодБазового);
КонецЕсли;
Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(СправочникОбъект);
Продолжить;
КонецЕсли;
СправочникОбъект.Записать();
КонецЦикла;
МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков");
ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ПроизводственныеКалендари");
ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные;
КонецПроцедуры
// Обновляет данные производственных календарей по таблице данных.
//
Функция ОбновитьДанныеПроизводственныхКалендарей(Знач ТаблицаДанных) Экспорт
ТаблицаИзменений = ТаблицаИзмененийПроизводственныхКалендарей();
ОбновитьОсновныеДанныеПроизводственныхКалендарей(ТаблицаДанных, ТаблицаИзменений);
ОбновитьДанныеЗависимыхПроизводственныхКалендарей(ТаблицаИзменений);
Возврат ТаблицаИзменений;
Возврат ТаблицаКалендарей;
КонецФункции
Процедура ЗаполнитьПроизводственныеКалендариПоУмолчаниюДлительнаяОперация(Параметры, АдресРезультата) Экспорт
Календари = ПроизводственныеКалендариПоУмолчанию();
ПоместитьВоВременноеХранилище(Календари, АдресРезультата);
КонецПроцедуры
Процедура ОбновитьОсновныеДанныеПроизводственныхКалендарей(ТаблицаДанных, ИзмененияКалендарей)
Если ТаблицаДанных.Количество() = 0 Тогда
@@ -441,28 +471,27 @@
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаДанных);
Запрос.Текст =
"ВЫБРАТЬ
| КлассификаторТаблица.КодПроизводственногоКалендаря КАК КалендарьКод,
| КлассификаторТаблица.Дата,
| КлассификаторТаблица.Год,
| КлассификаторТаблица.ВидДня,
| КлассификаторТаблица.ДатаПереноса
|ПОМЕСТИТЬ КлассификаторТаблица
| КлассификаторТаблица.Дата КАК Дата,
| КлассификаторТаблица.Год КАК Год,
| КлассификаторТаблица.ВидДня КАК ВидДня,
| КлассификаторТаблица.ДатаПереноса КАК ДатаПереноса
|ПОМЕСТИТЬ ВТКлассификаторТаблица
|ИЗ
| &КлассификаторТаблица КАК КлассификаторТаблица
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПроизводственныеКалендари.Ссылка КАК ПроизводственныйКалендарь,
| КлассификаторТаблица.КалендарьКод КАК КодПроизводственногоКалендаря,
| КлассификаторТаблица.Год,
| КлассификаторТаблица.Дата,
| КлассификаторТаблица.ВидДня,
| КлассификаторТаблица.ДатаПереноса
| КлассификаторТаблица.Год КАК Год
|ПОМЕСТИТЬ ВТИзмененияКалендарей
|ИЗ
| КлассификаторТаблица КАК КлассификаторТаблица
| ВТКлассификаторТаблица КАК КлассификаторТаблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари
| ПО КлассификаторТаблица.КалендарьКод = ПроизводственныеКалендари.Код
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
@@ -472,26 +501,55 @@
| И КлассификаторТаблица.ВидДня = ДанныеПроизводственногоКалендаря.ВидДня
| И КлассификаторТаблица.ДатаПереноса = ДанныеПроизводственногоКалендаря.ДатаПереноса
|ГДЕ
| ДанныеПроизводственногоКалендаря.ВидДня ЕСТЬ NULL ";
| ДанныеПроизводственногоКалендаря.ВидДня ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИзмененияКалендарей.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь,
| ИзмененияКалендарей.КодПроизводственногоКалендаря КАК КодПроизводственногоКалендаря,
| ИзмененияКалендарей.Год КАК Год,
| КлассификаторТаблица.Дата КАК Дата,
| КлассификаторТаблица.ВидДня КАК ВидДня,
| КлассификаторТаблица.ДатаПереноса КАК ДатаПереноса
|ИЗ
| ВТИзмененияКалендарей КАК ИзмененияКалендарей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКлассификаторТаблица КАК КлассификаторТаблица
| ПО (КлассификаторТаблица.КалендарьКод = ИзмененияКалендарей.КодПроизводственногоКалендаря)
| И (КлассификаторТаблица.Год = ИзмененияКалендарей.Год)
|
|УПОРЯДОЧИТЬ ПО
| ИзмененияКалендарей.ПроизводственныйКалендарь,
| Год";
Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаДанных);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей();
КлючиРегистра = Новый Массив;
КлючиРегистра.Добавить("ПроизводственныйКалендарь");
КлючиРегистра.Добавить("Год");
КлючиРегистра.Добавить("Дата");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Очистить();
ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка);
ЗаполнитьЗначенияСвойств(ИзмененияКалендарей.Добавить(), Выборка);
Для Каждого Ключ Из КлючиРегистра Цикл
НаборЗаписей.Отбор[Ключ].Установить(Выборка[Ключ]);
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("ПроизводственныйКалендарь") Цикл
Пока Выборка.СледующийПоЗначениюПоля("Год") Цикл
НаборЗаписей.Очистить();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка);
КонецЦикла;
ЗаполнитьЗначенияСвойств(ИзмененияКалендарей.Добавить(), Выборка);
Для Каждого Ключ Из КлючиРегистра Цикл
НаборЗаписей.Отбор[Ключ].Установить(Выборка[Ключ]);
КонецЦикла;
Если ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
Продолжить;
КонецЕсли;
НаборЗаписей.Записать(Истина);
КонецЦикла;
НаборЗаписей.Записать(Истина);
КонецЦикла;
ИзмененияКалендарей.Свернуть("КодПроизводственногоКалендаря, Год");
@@ -506,6 +564,7 @@
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИзмененияКалендарей", ИзмененияКалендарей);
Запрос.УстановитьПараметр("ГодНачалаОбновленияЗависимых", 2018);
Запрос.Текст =
"ВЫБРАТЬ
| ИзмененияКалендарей.КодПроизводственногоКалендаря КАК КодПроизводственногоКалендаря,
@@ -526,6 +585,7 @@
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИзмененияКалендарей КАК ИзмененияБазовыхКалендарей
| ПО ЗависимыеКалендари.БазовыйКалендарь.Код = ИзмененияБазовыхКалендарей.КодПроизводственногоКалендаря
| И (ЗависимыеКалендари.БазовыйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка))
| И (ИзмененияБазовыхКалендарей.Год >= &ГодНачалаОбновленияЗависимых)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИзмененияКалендарей КАК ИзмененияЗависимыхКалендарей
| ПО (ИзмененияЗависимыхКалендарей.КодПроизводственногоКалендаря = ЗависимыеКалендари.Код)
| И (ИзмененияЗависимыхКалендарей.Год = ИзмененияБазовыхКалендарей.Год)
@@ -537,7 +597,7 @@
КонецЕсли;
КодыЗависимых = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Код");
ДанныеИзМакета = ДанныеПроизводственныхКалендарейИзМакета(КодыЗависимых, Ложь);
ДанныеИзМакета = ДанныеПроизводственныхКалендарейПоУмолчанию(КодыЗависимых);
ОтборСтрок = Новый Структура(
"КодПроизводственногоКалендаря,
@@ -572,6 +632,73 @@
КонецПроцедуры
// Определяет источник актуального перечня поддерживаемых производственных календарей (макет или поставка классификатора).
//
// Возвращаемое значение:
// ТаблицаЗначений.
//
Функция ПроизводственныеКалендариПоУмолчанию()
Если КалендарныеГрафики.ВерсияКалендарей() >= КалендарныеГрафики.ВерсияЗагруженныхКалендарей() Тогда
Возврат ПроизводственныеКалендариИзМакета();
КонецЕсли;
Попытка
Возврат ПроизводственныеКалендариИзФайлаКлассификатора();
Исключение
ИмяСобытия = НСтр("ru = 'Календарные графики.Получение календарей из классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить список производственных календарей из классификатора.
|Список календарей получен из поставляемого макета.
|%1'"),
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения);
КонецПопытки;
Возврат ПроизводственныеКалендариИзМакета();
КонецФункции
// Определяет источник актуальных данных производственного календаря (макет или поставка классификатора).
//
// Параметры:
// КодыКалендарей - Массив.
//
// Возвращаемое значение:
// ТаблицаЗначений - см. Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзXML.
//
Функция ДанныеПроизводственныхКалендарейПоУмолчанию(КодыКалендарей)
Если КалендарныеГрафики.ВерсияКалендарей() >= КалендарныеГрафики.ВерсияЗагруженныхКалендарей() Тогда
Возврат ДанныеПроизводственныхКалендарейИзМакета(КодыКалендарей, Ложь);
КонецЕсли;
Возврат ДанныеПроизводственныхКалендарейИзФайлаКлассификатора(КодыКалендарей);
КонецФункции
Функция ПроизводственныеКалендариИзФайлаКлассификатора()
ДанныеКлассификатора = КалендарныеГрафики.ДанныеКлассификатора();
ТаблицаКалендарей = ДанныеКлассификатора["ПроизводственныеКалендари"].Данные;
Возврат ТаблицаКалендарей;
КонецФункции
Функция ДанныеПроизводственныхКалендарейИзФайлаКлассификатора(КодыКалендарей)
ДанныеКлассификатора = КалендарныеГрафики.ДанныеКлассификатора();
Возврат ДанныеПроизводственныхКалендарейИзXML(
ДанныеКлассификатора["ДанныеПроизводственныхКалендарей"],
ДанныеКлассификатора["ПроизводственныеКалендари"].Данные,
КодыКалендарей,
Ложь);
КонецФункции
// Создает таблицу значений для описания изменений данных производственных календарей.
//
Функция ТаблицаИзмененийПроизводственныхКалендарей()
@@ -825,11 +952,7 @@
КонецФункции
Функция КодБазовогоКалендаря(КодКалендаря, КлассификаторКалендарей = Неопределено)
Если КлассификаторКалендарей = Неопределено Тогда
КлассификаторКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей();
КонецЕсли;
Функция КодБазовогоКалендаря(КодКалендаря, КлассификаторКалендарей)
СтрокаКалендаря = КлассификаторКалендарей.Найти(КодКалендаря, "Code");
@@ -849,7 +972,8 @@
Если Проверять Тогда
ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Дата");
ЗаполнитьЗначенияСвойств(ОтборСтрок, СтрокаКлассификатора);
ОтборСтрок.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
ОтборСтрок.Дата = Дата(СтрокаКлассификатора.Date);
НайденныеСтроки = ДанныеКалендаря.НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() > 0 Тогда
Если Не Замещать Тогда
@@ -22,6 +22,8 @@
Иначе
Если Параметры.ВыборШаблона Тогда
ОпределитьВозможностьДобавлениеШаблоновФайлов();
РежимВыбораШаблона = Параметры.ВыборШаблона;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
@@ -138,4 +140,22 @@
КонецПроцедуры
&НаСервере
Процедура ОпределитьВозможностьДобавлениеШаблоновФайлов()
Перем ЕстьПравоДобавлениеФайлов, МодульУправлениеДоступом;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
ЕстьПравоДобавлениеФайлов = МодульУправлениеДоступом.ЕстьПраво("ДобавлениеФайлов", Справочники.ПапкиФайлов.Шаблоны);
Иначе
ЕстьПравоДобавлениеФайлов = ПравоДоступа("Добавление", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов);
КонецЕсли;
Если Не ЕстьПравоДобавлениеФайлов Тогда
Элементы.ДобавитьФайл.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -90,6 +90,10 @@
<metadata>InformationRegister.ЗамерыВремени</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ПолучениеСубъектовДляСкрытияПерсональныхДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.НастройкаПроксиСервера</metadata>
<use>DontUse</use>
@@ -166,6 +170,10 @@
<metadata>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.СкрытиеПерсональныхДанныхСубъектов</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ОбслуживаниеОбластейДанных</metadata>
<use>DontUse</use>
@@ -586,6 +594,10 @@
<metadata>ChartOfCharacteristicTypes.УдалитьВидыДоступа</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.КоличествоПотоковОбновленияИнформационнойБазы</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>InformationRegister.УдалитьОбластиДанных</metadata>
<use>DontUse</use>
@@ -0,0 +1,87 @@
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ПараметрКоманды.Количество() = 1 Тогда
ТекстВопроса = НСтр("ru = 'Персональные данные субъекта «%1» будут скрыты.
|
|Продолжить?'");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ПараметрКоманды[0]);
Иначе
ТекстВопроса = НСтр("ru = 'Персональные данные субъектов будут скрыты.
|
|Продолжить?'");
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ОбработкаКомандыЗавершение", ЭтотОбъект, ПараметрКоманды);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОбработкаКомандыЗавершение(Результат, Субъекты) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
СкрытьПерсональныеДанныеСубъектов(Субъекты);
Оповестить("СкрытыПерсональныеДанные");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СкрытьПерсональныеДанныеСубъектов(Субъекты)
ОтбираемыеСубъекты = Новый Массив;
НастройкиСубъектов = ЗащитаПерсональныхДанных.ПрочитатьНастройкиСкрытияСубъектов(Субъекты);
Если ЗначениеЗаполнено(НастройкиСубъектов) Тогда
Для Каждого НастройкиСкрытия Из НастройкиСубъектов Цикл
Субъект = НастройкиСкрытия.Ключ;
Настройки = НастройкиСкрытия.Значение;
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено
Или Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеВыполнено Тогда
Если Настройки.Состояние = Перечисления.СостоянияСубъектовДляСкрытия.СкрытиеОтменено Тогда
ТекстПричины = НСтр("ru = 'Скрытие ранее отменено по причине: %1.'");
ТекстПричины = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПричины, Настройки.ПричинаОтменыСкрытия);
Иначе
ТекстПричины = НСтр("ru = 'Скрытие уже выполнено.'");
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Персональные данные субъекта «%1» не могут быть скрыты.
|%2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Субъект, ТекстПричины);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
КонецЕсли;
ОтбираемыеСубъекты.Добавить(Субъект);
КонецЦикла;
Иначе
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОтбираемыеСубъекты, Субъекты);
КонецЕсли;
ЗащитаПерсональныхДанных.СкрытьПерсональныеДанныеСубъектов(ОтбираемыеСубъекты);
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonCommand xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6c66ff27-19af-4728-95a8-463fd1c4dcd3">
<name>СкрытьПерсональныеДанныеСубъектов</name>
<synonym>
<key>ru</key>
<value>Скрыть ПДн</value>
</synonym>
<group>FormCommandBarImportant</group>
<commandParameterType>
<types>DefinedType.СубъектПерсональныхДанных</types>
</commandParameterType>
<parameterUseMode>Multiple</parameterUseMode>
<representation>Auto</representation>
<toolTip>
<key>ru</key>
<value>Скрыть персональные данные субъектов</value>
</toolTip>
</mdclass:CommonCommand>
@@ -4637,10 +4637,7 @@
РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат;
Информация.ПользовательскиеНастройки.Колонки.Очистить();
Информация.НастройкиВарианта.Колонки.Очистить();
Информация.ДеревоВарианта.Колонки.Очистить();
Информация.Очистить();
ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация);
ПараметрыЗаполнения.Очистить();
КонецФункции
@@ -6352,6 +6349,9 @@
СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, РодительКД);
СтрокиРодителяКД.Удалить(СтрокаДерева.ЭлементКД);
КонецЦикла;
ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
@@ -1218,10 +1218,7 @@
РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат;
// Очистка цикличных ссылок.
Информация.ДеревоВарианта.Колонки.Очистить();
Информация.НастройкиВарианта.Колонки.Очистить();
Информация.ПользовательскиеНастройки.Колонки.Очистить();
ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация);
КонецФункции
&НаСервере
@@ -2336,6 +2336,22 @@
Обработчик.Версия = "*";
Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеРазделенныхДанныхКонфигурацииПолное";
Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, сохраненных пользователями.'");
// 3.4. Установить ссылки на идентификаторы объектов метаданных в настройках вариантов универсального отчета.
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.6.23";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("6cd3c6c1-6919-4e18-9725-eb6dbb841f4a");
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ОчередьОтложеннойОбработки = 1;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВариантыОтчетов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.Процедура = "Справочники.ВариантыОтчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.ЧитаемыеОбъекты = "Справочник.ВариантыОтчетов";
Обработчик.ИзменяемыеОбъекты = "Справочник.ВариантыОтчетов";
Обработчик.БлокируемыеОбъекты = "Справочник.ВариантыОтчетов";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Комментарий = НСтр("ru = 'Установка параметра ИсточникДанных в настройках вариантов отчета ""Универсальный отчет"".
|Для того чтобы формировать варианты этого отчета следует дождаться завершения обработки.'");
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.
@@ -3554,9 +3570,7 @@
Обработчик.Приоритет = 70;
КонецЕсли;
// Для платформы (очистка коллекции вручную для освобождение памяти от цикличных ссылок).
Кэш.ДеревоВариантов.Колонки.Очистить();
Кэш.ДеревоВариантов.Строки.Очистить();
ОтчетыСервер.ОчиститьДеревоЗначений(Кэш.ДеревоВариантов);
Возврат Кэш;
КонецФункции
@@ -5095,6 +5109,7 @@
Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках(КомпоновщикНастроекКД, НастройкиОтчета, ОтчетОбъект, УсловияВывода);
БыстрыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен, Быстрая", Истина, Истина));
ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация);
Если БыстрыеНастройки.Количество() <= 2 Тогда
Возврат Ложь; // Уменьшение количества не требуется.
КонецЕсли;
@@ -483,12 +483,15 @@
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
Если Задание = Неопределено Тогда
Пояснение = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания.
|Фоновое задание не найдено:'") + " " + Строка(ИдентификаторЗадания);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , НСтр("ru = 'Фоновое задание не найдено:'") + " " + Строка(ИдентификаторЗадания));
УровеньЖурналаРегистрации.Ошибка, , , Пояснение);
Если ИсключениеПриОшибке Тогда
ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.'"));
КонецЕсли;
Результат.Статус = "Ошибка";
Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Операция не выполнена из-за аварийного завершения фонового задания.'");
Возврат Результат;
КонецЕсли;
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,40 @@
#Область СлужебныйПрограммныйИнтерфейс
// Запускает изменение настроек скрытия персональных данных субъектов в соответствии с измененными
// настройками системы.
//
// Параметры:
// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы.
// ПараметрыМетода - Структура - новые настройки (см. функцию НастройкиСкрытияПерсональныхДанныхСистемы).
//
// Возвращаемое значение:
// Структура - см. возвращаемое значение функции ДлительныеОперации.ВыполнитьВФоне.
//
Функция ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Знач ИдентификаторФормы, Знач ПараметрыМетода) Экспорт
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Изменение настроек скрытия персональных данных'");
ПараметрыВыполнения.ОжидатьЗавершение = 0;
Возврат ДлительныеОперации.ВыполнитьВФоне("ЗащитаПерсональныхДанных.ИзменитьНастройкиСкрытияПерсональныхДанных", ПараметрыМетода, ПараметрыВыполнения);
КонецФункции
// Возвращает настройки скрытия персональных данных системы.
//
// Возвращаемое значение:
// Структура - содержит поля:
// * ИспользоватьСкрытиеПерсональныхДанных - Булево - Признак использования скрытия персональных данных субъектов.
// * ДнейДоСкрытияПерсональныхДанных - Число - Дней до скрытия персональных данных субъектов.
//
Функция НастройкиСкрытияПерсональныхДанныхСистемы() Экспорт
НастройкиСкрытия = Новый Структура;
НастройкиСкрытия.Вставить("ИспользоватьСкрытиеПерсональныхДанных", Константы.ИспользоватьСкрытиеПерсональныхДанныхСубъектов.Получить());
НастройкиСкрытия.Вставить("ДнейДоСкрытияПерсональныхДанных", Константы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Получить());
Возврат НастройкиСкрытия;
КонецФункции
#КонецОбласти
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c382ee3a-d0a8-4ed8-ac88-5558b631f448">
<name>ЗащитаПерсональныхДанныхВызовСервера</name>
<synonym>
<key>ru</key>
<value>Защита персональных данных вызов сервера</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>
@@ -22,6 +22,59 @@
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации.
// Определяет, что указанное событие - это событие о скрытии персональных данных субъектов
// и обновляет объект управляемой формы.
//
// Параметры:
// Форма - УправляемаяФорма - форма субъекта.
// ИмяСобытия - Строка - имя обрабатываемого события.
//
Процедура ОбработкаОповещенияФормы(Форма, ИмяСобытия) Экспорт
Если ИмяСобытия = "СкрытыПерсональныеДанные" Тогда
Форма.Прочитать();
КонецЕсли;
КонецПроцедуры
// Определяет, что указанное событие - это событие о скрытии персональных данных субъектов
// и обновляет данные в таблице субъектов.
//
// Параметры:
// СписокФормы - ТаблицаФормы - элемент формы динамического списка субъектов.
// ИмяСобытия - Строка - имя обрабатываемого события.
//
Процедура ОбработкаОповещенияФормыСписка(СписокФормы, ИмяСобытия) Экспорт
Если ИмяСобытия = "СкрытыПерсональныеДанные" Тогда
СписокФормы.Обновить();
КонецЕсли;
КонецПроцедуры
// Обработчик команды формы списка субъектов персональных данных.
//
// Параметры:
// Форма - УправляемаяФорма - форма субъекта.
// Список - ДинамическийСписок - динамический список субъектов.
//
Процедура ПоказыватьСоСкрытымиПДн(Форма, Список) Экспорт
Кнопка = Форма.Элементы.Найти("ПоказыватьСоСкрытымиПДн");
Если Кнопка = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказыватьСоСкрытымиПДн = Не Кнопка.Пометка;
Кнопка.Пометка = ПоказыватьСоСкрытымиПДн;
Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьСоСкрытымиПДн", ПоказыватьСоСкрытымиПДн);
КонецПроцедуры
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
@@ -44,6 +97,49 @@
КонецФункции
// Настраивает элементы формы НастройкиПользователейИПрав обработки ПанельАдминистрированияБСП.
// Запускает фоновое изменение настроек скрытия персональных данных.
//
// Параметры:
// Форма - УправляемаяФорма - настраиваемая форма.
//
Процедура НастройкиСкрытияПерсональныхДанныхПриИзменении(Форма) Экспорт
Элементы = Форма.Элементы;
НаборКонстант = Форма.НаборКонстант;
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ДнейДоСкрытияПерсональныхДанных", НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов);
ПараметрыВыполнения.Вставить("ИспользоватьСкрытиеПерсональныхДанных", НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов);
ФоновоеЗадание = ЗащитаПерсональныхДанныхВызовСервера.ЗапуститьИзменениеНастроекСкрытияПДнВФоновомЗадании(Форма.УникальныйИдентификатор, ПараметрыВыполнения);
ДоступностьЭлементов = Новый Соответствие;
ДоступностьЭлементов.Вставить(Элементы.ИспользоватьСкрытиеПерсональныхДанных.Имя, Элементы.ИспользоватьСкрытиеПерсональныхДанных.Доступность);
ДоступностьЭлементов.Вставить(Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Имя, Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Доступность);
Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.Статус = "Выполняется" Тогда
Элементы.ИспользоватьСкрытиеПерсональныхДанных.Доступность = Ложь;
Элементы.ДнейДоСкрытияПерсональныхДанныхСубъектов.Доступность = Ложь;
Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость = Истина;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Форма", Форма);
ДополнительныеПараметры.Вставить("ДоступностьЭлементов", ДоступностьЭлементов);
НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма);
НастройкиОжидания.ВыводитьОкноОжидания = Ложь;
Обработчик = Новый ОписаниеОповещения("ПослеИзмененияНастроекСкрытияПерсональныхДанных", ЭтотОбъект, ДополнительныеПараметры);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -101,4 +197,51 @@
КонецПроцедуры
Процедура ПослеИзмененияНастроекСкрытияПерсональныхДанных(ФоновоеЗадание, ДополнительныеПараметры) Экспорт
Форма = ДополнительныеПараметры.Форма;
ДоступностьЭлементов = ДополнительныеПараметры.ДоступностьЭлементов;
Элементы = Форма.Элементы;
НаборКонстант = Форма.НаборКонстант;
Для Каждого КлючИЗначение Из ДоступностьЭлементов Цикл
ИмяЭлемента = КлючИЗначение.Ключ;
ДоступностьДо = КлючИЗначение.Значение;
ТекущийЭлемент = Элементы.Найти(ИмяЭлемента);
Если ТекущийЭлемент.Доступность <> ДоступностьДо Тогда
ТекущийЭлемент.Доступность = ДоступностьДо;
КонецЕсли;
КонецЦикла;
Если Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость Тогда
Элементы.ДекорацияОжиданиеИзмененияИспользованияСкрытияПДн.Видимость = Ложь;
КонецЕсли;
Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.Статус = "Выполнено" Тогда
Оповестить("Запись_НаборКонстант", Новый Структура, "ИспользоватьСкрытиеПерсональныхДанныхСубъектов");
ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки скрытия персональных данных изменены.'"));
Иначе
СтарыеНастройкиСистемы = ЗащитаПерсональныхДанныхВызовСервера.НастройкиСкрытияПерсональныхДанныхСистемы();
НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов = СтарыеНастройкиСистемы.ИспользоватьСкрытиеПерсональныхДанных;
НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов = СтарыеНастройкиСистемы.ДнейДоСкрытияПерсональныхДанных;
Если ФоновоеЗадание <> Неопределено Тогда
ТекстОшибки = НСтр("ru='Не удалось изменить настройки скрытия персональных данных.
|См. подробности в журнале регистрации.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -54,6 +54,18 @@
КонецПроцедуры
// Позволяет проверить возможность скрытия персональных данных и задать состав исключений для записи в данных.
//
// Параметры:
// Субъекты - Массив - ссылки на объекты данных, чьи персональные данные будут скрыты.
// ТаблицаИсключений - ТаблицаЗначений - таблица, в которую добавляются субъекты и причины отказа их скрытия.
// Состав полей см. в функции ЗащитаПерсональныхДанных.НоваяТаблицаИсключений.
// Отказ - Булево - признак отказа от скрытия.
//
Процедура ПередСкрытиемПерсональныхДанныхСубъектов(Субъекты, ТаблицаИсключений, Отказ) Экспорт
КонецПроцедуры
#КонецОбласти
@@ -373,6 +373,11 @@
// См. РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных.
Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда
МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафики");
МодульКалендарныеГрафики.ПриВключенииРазделенияПоОбластямДанных();
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ПриВключенииРазделенияПоОбластямДанных();
@@ -1889,16 +1894,16 @@
МодульВерсионированиеОбъектов.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда
МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса");
МодульКурсыВалютСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда
МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса");
МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда
МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса");
МодульКурсыВалютСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда
МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса");
МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
@@ -1943,11 +1948,6 @@
МодульБанкиСлужебныйВМоделиСервиса.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда
МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса");
МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда
МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса");
МодульКурсыВалютСлужебныйВМоделиСервиса.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики);
@@ -2008,6 +2008,11 @@
МодульВзаимодействия.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда
МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
МодульЗащитаПерсональныхДанных.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
@@ -523,6 +523,46 @@
КонецФункции
#Область ДляВызоваИзДругихПодсистем
// ИнтернетПоддержкаПользователей.РаботаСКлассификаторами
// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов.
Процедура ПриДобавленииКлассификаторов(Классификаторы) Экспорт
Описатель = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
Описатель = МодульРаботаСКлассификаторами.ОписаниеКлассификатора();
КонецЕсли;
Если Описатель = Неопределено Тогда
Возврат;
КонецЕсли;
Описатель.Идентификатор = ИдентификаторКлассификатора();
Описатель.ОбновлятьАвтоматически = Истина;
Описатель.ОбщиеДанные = Истина;
Классификаторы.Добавить(Описатель);
КонецПроцедуры
// См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора.
Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан) Экспорт
Если Идентификатор <> ИдентификаторКлассификатора() Тогда
Возврат;
КонецЕсли;
ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан);
КонецПроцедуры
// Конец ИнтернетПоддержкаПользователей.РаботаСКлассификаторами
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
// Устарела. Следует использовать ОсновнойПроизводственныйКалендарь.
@@ -704,6 +744,126 @@
КонецПроцедуры
// Определяет версию данных календарей, встроенных в конфигурацию.
//
// Возвращаемое значение:
// Число - номер версии.
//
Функция ВерсияКалендарей() Экспорт
Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда
Возврат 0;
КонецЕсли;
МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков");
Возврат МодульКалендарныеГрафики.ВерсияКалендарей();
КонецФункции
// Определяет версию загруженных в ИБ данных классификатора.
//
// Возвращаемое значение:
// Число - номер версии загруженных данных, 0 - если подсистема работы с классификаторами не существует.
//
Функция ВерсияЗагруженныхКалендарей() Экспорт
ВерсияЗагруженныхКалендарей = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
ВерсияЗагруженныхКалендарей = МодульРаботаСКлассификаторами.ВерсияКлассификатора(ИдентификаторКлассификатора());
КонецЕсли;
Если ВерсияЗагруженныхКалендарей = Неопределено Тогда
ВерсияЗагруженныхКалендарей = 0;
КонецЕсли;
Возврат ВерсияЗагруженныхКалендарей;
КонецФункции
// Запрашивает файл с данными классификатора календарей.
// Преобразует полученный файл в структуру с таблицами календарей и их данных.
// Если подсистема РаботаСКлассификаторами отсутствует или не удалось получить файл классификатора, вызывается исключение.
//
// Возвращаемое значение:
// Структура - со свойствами:
// * ПроизводственныеКалендари - Структура - со свойствами:
// * ИмяТаблицы - Строка - имя таблицы.
// * Данные - ТаблицаЗначений - преобразованная из XML таблица календарей.
// * ДанныеПроизводственныхКалендарей - Структура - со свойствами:
// * ИмяТаблицы - Строка - имя таблицы.
// * Данные - ТаблицаЗначений - преобразованная из XML таблица данных календарей.
//
Функция ДанныеКлассификатора() Экспорт
ДанныеФайлов = Неопределено;
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторКлассификатора());
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
ДанныеФайлов = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
КонецЕсли;
Если ДанныеФайлов = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Работа с классификаторами не поддерживается или отсутствует.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
Если Не ПустаяСтрока(ДанныеФайлов.КодОшибки) Тогда
ИмяСобытия = НСтр("ru = 'Календарные графики.Получение файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(
ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1'"),
ДанныеФайлов.ИнформацияОбОшибке));
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1.'"),
ДанныеФайлов.СообщениеОбОшибке);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ОтборСтрок = Новый Структура("Идентификатор");
ОтборСтрок.Идентификатор = ИдентификаторКлассификатора();
НайденныеСтроки = ДанныеФайлов.ДанныеКлассификаторов.НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Полученные классификаторы не содержат календарей.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
СведенияФайла = НайденныеСтроки[0];
Если СведенияФайла.Версия < ВерсияКалендарей() Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря из-за конфликта версий.
|Версия календарей
|- полученного классификатора %1,
|- встроенных в конфигурацию %2,
|- загруженного ранее классификатора %3.'"),
СведенияФайла.Версия,
ВерсияКалендарей(),
ВерсияЗагруженныхКалендарей());
ВызватьИсключение ТекстСообщения;
КонецЕсли;
Попытка
ДанныеКлассификатора = ДанныеФайлаКлассификатора(СведенияФайла.АдресФайла);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря.
|%1.'"),
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстСообщения;
КонецПопытки;
Возврат ДанныеКлассификатора;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий подсистем конфигурации.
@@ -715,12 +875,6 @@
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари";
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей";
Обработчик.Версия = "1.0.0.1";
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей";
@@ -737,26 +891,26 @@
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.4.111";
Обработчик.Версия = "2.4.6.4";
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари";
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.4.112";
Обработчик.Версия = "2.4.6.4";
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыхПроизводственныхКалендарей";
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.5.48";
Обработчик.Версия = "2.4.6.21";
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей";
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина;
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.5.48";
Обработчик.Версия = "2.4.6.21";
Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей";
Обработчик.ОчередьОтложеннойОбработки = 1;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "КалендарныеГрафики.ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей";
@@ -788,29 +942,17 @@
КонецПроцедуры
// См. РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных.
Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт
ОбновитьПроизводственныеКалендари();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Получает таблицу поставляемых в составе программы производственных календарей.
//
// Возвращаемое значение:
// ТаблицаЗначений.
//
Функция ТаблицаПроизводственныхКалендарей() Экспорт
Если Метаданные.Обработки.Найти("ЗаполнениеКалендарныхГрафиков") = Неопределено Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаполнениеКалендарныхГрафиков");
ТекстовыйДокумент = МодульКалендарныеГрафики.ПолучитьМакет("ПроизводственныеКалендари");
ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные;
Возврат ТаблицаКалендарей;
КонецФункции
// Получает единственный производственный календарь в ИБ.
//
Функция ЕдинственныйПроизводственныйКалендарь()
@@ -836,6 +978,93 @@
КонецФункции
// Определяет внутренний идентификатор классификатора для подсистемы РаботаСКлассификаторами.
Функция ИдентификаторКлассификатора()
Возврат "Calendars";
КонецФункции
Процедура ЗагрузитьДанныеПроизводственныхКалендарей(Версия, Адрес, Обработан)
Если Версия <= ВерсияКалендарей() Тогда
Обработан = Истина;
Возврат;
КонецЕсли;
ДанныеКлассификатора = ДанныеФайлаКлассификатора(Адрес);
// Обновляем список производственных календарей.
ТаблицаКалендарей = ДанныеКлассификатора["ПроизводственныеКалендари"].Данные;
Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей);
// Обновляем данные производственных календарей.
ДанныеXML = ДанныеКлассификатора["ДанныеПроизводственныхКалендарей"];
ТаблицаДанных = Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзXML(ДанныеXML, ТаблицаКалендарей);
ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных);
РаспространитьИзмененияДанныхПроизводственныхКалендарей(ТаблицаИзменений);
Обработан = Истина;
КонецПроцедуры
Функция ДанныеФайлаКлассификатора(Адрес)
ДанныеКлассификатора = Новый Структура(
"ПроизводственныеКалендари,
|ДанныеПроизводственныхКалендарей");
ПутьКФайлу = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ПутьКФайлу);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ЧтениеXML.ПерейтиКСодержимому();
ПроверитьНачалоЭлемента(ЧтениеXML, "CalendarSuppliedData");
ЧтениеXML.Прочитать();
ПроверитьНачалоЭлемента(ЧтениеXML, "Calendars");
ДанныеКлассификатора.ПроизводственныеКалендари = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ЧтениеXML);
ЧтениеXML.Прочитать();
ПроверитьКонецЭлемента(ЧтениеXML, "Calendars");
ЧтениеXML.Прочитать();
ПроверитьНачалоЭлемента(ЧтениеXML, "CalendarData");
ДанныеКлассификатора.ДанныеПроизводственныхКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ЧтениеXML);
ЧтениеXML.Закрыть();
УдалитьФайлы(ПутьКФайлу);
Возврат ДанныеКлассификатора;
КонецФункции
Процедура ПроверитьНачалоЭлемента(Знач ЧтениеXML, Знач Имя)
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда
ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"),
Имя);
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьКонецЭлемента(Знач ЧтениеXML, Знач Имя)
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда
ИмяСобытия = НСтр("ru = 'Календарные графики.Обработка файла классификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"),
Имя);
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Обновление информационной базы.
@@ -843,7 +1072,12 @@
//
Процедура ОбновитьПроизводственныеКалендари() Экспорт
ТаблицаКалендарей = ТаблицаПроизводственныхКалендарей();
ВерсияВстроенныхКалендарей = ВерсияКалендарей();
Если ВерсияВстроенныхКалендарей <= ВерсияЗагруженныхКалендарей() Тогда
Возврат;
КонецЕсли;
ТаблицаКалендарей = Справочники.ПроизводственныеКалендари.ПроизводственныеКалендариИзМакета();
Если ТаблицаКалендарей.Количество() = 0 Тогда
Возврат;
@@ -851,6 +1085,13 @@
Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей);
ЗаполнитьДанныеПроизводственныхКалендарейПриОбновлении();
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
МодульРаботаСКлассификаторами.УстановитьВерсиюКлассификатора(ИдентификаторКлассификатора(), ВерсияВстроенныхКалендарей);
КонецЕсли;
КонецПроцедуры
// Обновляет данные производственных календарей из макета.
@@ -858,26 +1099,17 @@
//
Процедура ОбновитьДанныеПроизводственныхКалендарей() Экспорт
ТаблицаДанных = Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзМакета();
// Обновляем данные производственных календарей.
ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных);
Если ОбщегоНазначения.РазделениеВключено() Тогда
ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений);
ВерсияВстроенныхКалендарей = ВерсияКалендарей();
Если ВерсияВстроенныхКалендарей <= ВерсияЗагруженныхКалендарей() Тогда
Возврат;
КонецЕсли;
ПараметрыОбработчика = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтложенногоОбработчикаОбновления(
"КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей");
Если ПараметрыОбработчика <> Неопределено И ПараметрыОбработчика.Свойство("ТаблицаИзменений") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИзменений, ПараметрыОбработчика.ТаблицаИзменений);
КонецЕсли;
ПараметрыОбработчика = Новый Структура("ТаблицаИзменений");
ПараметрыОбработчика.ТаблицаИзменений = ТаблицаИзменений;
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОтложенногоОбработчикаОбновления(
"КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей", ПараметрыОбработчика);
ЗаполнитьДанныеПроизводственныхКалендарейПриОбновлении();
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
МодульРаботаСКлассификаторами.УстановитьВерсиюКлассификатора(ИдентификаторКлассификатора(), ВерсияВстроенныхКалендарей);
КонецЕсли;
КонецПроцедуры
@@ -1004,6 +1236,31 @@
КонецПроцедуры
Процедура ЗаполнитьДанныеПроизводственныхКалендарейПриОбновлении()
ТаблицаДанных = Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзМакета();
// Обновляем данные производственных календарей.
ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных);
Если ОбщегоНазначения.РазделениеВключено() Тогда
ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(ТаблицаИзменений);
Возврат;
КонецЕсли;
ПараметрыОбработчика = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтложенногоОбработчикаОбновления(
"КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей");
Если ПараметрыОбработчика <> Неопределено И ПараметрыОбработчика.Свойство("ТаблицаИзменений") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИзменений, ПараметрыОбработчика.ТаблицаИзменений);
КонецЕсли;
ПараметрыОбработчика = Новый Структура("ТаблицаИзменений");
ПараметрыОбработчика.ТаблицаИзменений = ТаблицаИзменений;
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОтложенногоОбработчикаОбновления(
"КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей", ПараметрыОбработчика);
КонецПроцедуры
// Устанавливает значение константы, определяющей использование нескольких производственных календарей.
//
Процедура ОбновитьИспользованиеНесколькихПроизводственныхКалендарей() Экспорт
@@ -1,75 +1,6 @@
#Область СлужебныйПрограммныйИнтерфейс
// Вызывается при получении уведомления о новых данных.
// В теле следует проверить, необходимы ли эти данные приложению,
// и если да - установить флажок Загружать.
//
// Параметры:
// Дескриптор - ОбъектXDTO - Дескриптор.
// Загружать - Булево - Истина, если загружать, Ложь - иначе.
//
Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт
Если Дескриптор.DataType = "ПроизвКалендари" Тогда
Загружать = Истина;
КонецЕсли;
КонецПроцедуры
// Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные.
//
// Параметры:
// Дескриптор - ОбъектXDTO - Дескриптор.
// ПутьКФайлу - Строка - полное имя извлеченного файла. Файл будет автоматически удален
// после завершения процедуры. Если в менеджере сервиса не был
// указан файл - значение аргумента равно Неопределено.
//
Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ЧтениеXML.ПерейтиКСодержимому();
Если Не НачалоЭлемента(ЧтениеXML, "CalendarSuppliedData") Тогда
Возврат;
КонецЕсли;
ЧтениеXML.Прочитать();
Если Не НачалоЭлемента(ЧтениеXML, "Calendars") Тогда
Возврат;
КонецЕсли;
// Обновляем список производственных календарей.
ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ЧтениеXML).Данные;
Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей);
ЧтениеXML.Прочитать();
Если Не КонецЭлемента(ЧтениеXML, "Calendars") Тогда
Возврат;
КонецЕсли;
ЧтениеXML.Прочитать();
Если Не НачалоЭлемента(ЧтениеXML, "CalendarData") Тогда
Возврат;
КонецЕсли;
// Обновляем данные производственных календарей.
ТаблицаДанных = Справочники.ПроизводственныеКалендари.ДанныеПроизводственныхКалендарейИзXML(ЧтениеXML);
ТаблицаИзменений = Справочники.ПроизводственныеКалендари.ОбновитьДанныеПроизводственныхКалендарей(ТаблицаДанных);
КалендарныеГрафики.РаспространитьИзмененияДанныхПроизводственныхКалендарей(ТаблицаИзменений);
КонецПроцедуры
// Вызывается при отмене обработки данных в случае сбоя.
//
// Параметры:
// Дескриптор - ОбъектXDTO - Дескриптор.
//
Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт
ПоставляемыеДанные.ОбластьОбработана(Дескриптор.FileGUID, "ДанныеПроизводственныхКалендарей", Неопределено);
КонецПроцедуры
// Вызывается при изменении производственных календарей.
//
Процедура ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей(Знач УсловияОбновления) Экспорт
@@ -92,13 +23,6 @@
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий подсистем конфигурации.
// См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных.
Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт
ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики);
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков.
Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт
@@ -110,26 +34,6 @@
#Область СлужебныеПроцедурыИФункции
// Регистрирует обработчики поставляемых данных за день и за все время.
//
// Параметры:
// Обработчики - ТаблицаЗначений - таблица для добавления обработчиков. Содержит колонки.
// * ВидДанных - Строка - код вида данных, обрабатываемый обработчиком.
// * КодОбработчика - Строка - будет использоваться при восстановлении обработки данных после сбоя.
// * Обработчик - ОбщийМодуль - модуль, содержащий экспортные процедуры:
// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт
// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт
// ОбработкаДанныхОтменена(Дескриптор) Экспорт
//
Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики)
Обработчик = Обработчики.Добавить();
Обработчик.ВидДанных = "ПроизвКалендари";
Обработчик.КодОбработчика = "ДанныеПроизводственныхКалендарей";
Обработчик.Обработчик = КалендарныеГрафикиСлужебныйВМоделиСервиса;
КонецПроцедуры
// Процедура для вызова из очереди заданий, помещается туда в ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей.
//
// Параметры:
@@ -162,65 +66,26 @@
УсловияОбновления.Свернуть("КодПроизводственногоКалендаря, Год");
Для каждого ОбластьДанных Из ОбластиДляОбновления Цикл
УстановитьПривилегированныйРежим(Истина);
РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Истина, ОбластьДанных);
УстановитьПривилегированныйРежим(Ложь);
НачатьТранзакцию();
Попытка
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда
МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы");
МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления);
КонецЕсли;
КалендарныеГрафикиПереопределяемый.ПриОбновленииДанныхЗависимыхОтПроизводственныхКалендарей(УсловияОбновления);
ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
ЗаписьЖурналаРегистрации(НСтр("ru = 'Календарные графики.Распространение производственных календарей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Прочие служебные процедуры и функции.
Функция НачалоЭлемента(Знач ЧтениеXML, Знач Имя)
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,
,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя));
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Функция КонецЭлемента(Знач ЧтениеXML, Знач Имя)
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,
,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя));
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
#КонецОбласти
@@ -1629,9 +1629,28 @@
//
Процедура ЗавершитьЗаписьФайлаСДаннымиОбновления(Параметры) Экспорт
ДанныеОбновления = ЗавершитьЗаписьФайлаИПолучитьДанныеОбновления(Параметры);
Если ДанныеОбновления <> Неопределено Тогда
СохранитьДанныеОбновления(ДанныеОбновления, Параметры.ИмяФайлаСИзменениями);
КонецЕсли;
КонецПроцедуры
// Выполняет закрытие XML файла с записанной информацией об объектах
// зарегистрированных для отложенного обновления и возвращает содержимое файла.
//
// Параметры:
// Параметры - Структура - См. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке().
//
// Возвращаемое значение:
// ХранилищеЗначения - содержимое файла.
//
Функция ЗавершитьЗаписьФайлаИПолучитьДанныеОбновления(Параметры) Экспорт
Если Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром")
Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда
Возврат;
Возврат Неопределено;
КонецЕсли;
Если Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами = Неопределено Тогда
@@ -1644,6 +1663,24 @@
ЗаписьXML.Закрыть();
ИмяФайлаСИзменениями = Параметры.ИмяФайлаСИзменениями;
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаСИзменениями);
Возврат Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9));
КонецФункции
// Сохраняет содержимое файла из ЗавершитьЗаписьФайлаИПолучитьДанныеОбновления()
// в константу ДанныеДляОтложенногоОбновления.
//
// Параметры:
// ДанныеОбновления - ХранилищеЗначения - содержимое файла.
// ИмяФайлаСИзменениями - Строка - Имя файла, в котором находились данные.
//
Процедура СохранитьДанныеОбновления(ДанныеОбновления, ИмяФайлаСИзменениями) Экспорт
Если ИмяФайлаСИзменениями = Неопределено Тогда
Возврат;
КонецЕсли;
НачатьТранзакцию();
Попытка
@@ -1656,10 +1693,7 @@
ЗначениеКонстанты = Новый Массив;
КонецЕсли;
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаСИзменениями);
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9));
ЗначениеКонстанты.Добавить(Хранилище);
ЗначениеКонстанты.Добавить(ДанныеОбновления);
Константы.ДанныеДляОтложенногоОбновления.Установить(Новый ХранилищеЗначения(ЗначениеКонстанты));
ЗафиксироватьТранзакцию();
@@ -886,7 +886,7 @@
| ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная
|ГДЕ
| ВТДляОбработкиРегистраторПолная.Регистратор В
| (ВЫБРАТЬ ПЕРВЫЕ 500
| (ВЫБРАТЬ ПЕРВЫЕ 10000
| ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор
| ИЗ
| ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная
@@ -959,7 +959,7 @@
| ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная
|ГДЕ
| ВТДляОбработкиРегистраторПолная.Регистратор В
| (ВЫБРАТЬ ПЕРВЫЕ 500
| (ВЫБРАТЬ ПЕРВЫЕ 10000
| ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор
| ИЗ
| ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная
@@ -1092,7 +1092,7 @@
Если ПолноеИмяДокумента = Неопределено Тогда
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 500
"ВЫБРАТЬ ПЕРВЫЕ 10000
| ТаблицаРегистраИзменения.Регистратор КАК Регистратор
|ИЗ
| #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения
@@ -1115,7 +1115,7 @@
Иначе
ИмяДокумента = СтрРазделить(ПолноеИмяДокумента,".",Ложь)[1];
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 500
"ВЫБРАТЬ ПЕРВЫЕ 10000
| ТаблицаРегистраИзменения.Регистратор КАК Регистратор
|ИЗ
| #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения
@@ -1151,7 +1151,7 @@
СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ);
Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ");
КонецЕсли;
ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры);
@@ -1193,7 +1193,7 @@
Или ОбщегоНазначения.ЭтоЗадача(МетаданныеОбъекта);
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 500
"ВЫБРАТЬ ПЕРВЫЕ 10000
| ТаблицаИзменений.Ссылка
|ИЗ
| #ТаблицаОбъектаИзменения КАК ТаблицаИзменений
@@ -1225,7 +1225,7 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъекта", ПолноеИмяОбъекта);
Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ");
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
@@ -1314,7 +1314,7 @@
| ВТДляОбработкиСсылкаПолная КАК ВТДляОбработкиСсылкаПолная
|ГДЕ
| ВТДляОбработкиСсылкаПолная.Ссылка В
| (ВЫБРАТЬ ПЕРВЫЕ 500
| (ВЫБРАТЬ ПЕРВЫЕ 10000
| ВТДляОбработкиСсылкаПолная.Ссылка КАК Ссылка
| ИЗ
| ВТДляОбработкиСсылкаПолная КАК ВТДляОбработкиСсылкаПолная";
@@ -1426,7 +1426,7 @@
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 500
"ВЫБРАТЬ ПЕРВЫЕ 10000
| &ТекстВыборкиИзмерений
|ИЗ
| #ТаблицаОбъектаИзменения КАК ТаблицаИзменений
@@ -1492,7 +1492,7 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоИзмерения","ВТЗаблокировано" + ИмяОбъекта);
Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 10000","ВЫБРАТЬ");
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
@@ -1561,7 +1561,7 @@
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 500
|ВЫБРАТЬ ПЕРВЫЕ 10000
| &ТекстВыборкиИзмерений
|ПОМЕСТИТЬ #ВТДляОбработкиИзмерения
|ИЗ
@@ -2855,6 +2855,21 @@
КонецФункции
// Возвращает признак разрешения использования многопоточного обновления.
// Многопоточное обновление можно включить в ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек().
//
// Возвращаемое значение:
// Булево - если Истина, многопоточное обновление разрешено. По умолчанию - Ложь (для обратной совместимости).
//
Функция РазрешеноМногопоточноеОбновление() Экспорт
Параметры = Новый Структура("МногопоточноеОбновление", Ложь);
ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек(Параметры);
Возврат Параметры.МногопоточноеОбновление;
КонецФункции
#Область УстаревшиеПроцедурыИФункции
// Устарела: больше не требуется, т.к. данные действия выполняются автоматически механизмом обновления.
@@ -32,7 +32,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "2.4.5.71";
Описание.Версия = "2.4.6.27";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -16,6 +16,12 @@
// * ЗапрещатьПродолжение - Булево - если Истина, продолжить обновление будет невозможно. По умолчанию Ложь.
// * РасположениеОписанияИзмененийПрограммы - Строка - описывает расположение команды, по которой можно
// открыть форму с описанием изменений в новой версии программы.
// * МногопоточноеОбновление - Булево - если Истина, то в один момент времени могут выполняться сразу
// несколько обработчиков обновления. По умолчанию - Ложь.
// ВАЖНО: Перед установкой значения Истина ознакомьтесь с документацией.
// * КоличествоПотоковОбновленияИнформационнойБазыПоУмолчанию - Строка - количество потоков отложенного обновления
// используемое, когда не задано значение для константы
// КоличествоПотоковОбновленияИнформационнойБазы. По умолчанию равно 1.
//
Процедура ПриОпределенииНастроек(Параметры) Экспорт
@@ -3411,7 +3411,7 @@
СтруктураСсылки = СтруктураURI(URL);
АдресСервераРесурса = СтруктураСсылки.Хост;
АдресСервераКонтрольнойПроверки = "1c.eu";
АдресСервераКонтрольнойПроверки = "1c.com";
РезультатДоступностиРесурса = ПроверитьДоступностьСервера(АдресСервераРесурса);
@@ -3852,9 +3852,9 @@
Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
Если ЭтоWindows Тогда
ШаблонКоманды = "ping %1 -n 2 -w 100";
ШаблонКоманды = "ping %1 -n 2 -w 500";
Иначе
ШаблонКоманды = "ping -c 2 -w 100 %1";
ШаблонКоманды = "ping -c 2 -w 500 %1";
КонецЕсли;
СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, АдресСервера);
@@ -177,7 +177,7 @@
HTTPОтвет = Неопределено;
Попытка
Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"),
Соединение = Новый HTTPСоединение("sms.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"),
60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
@@ -121,11 +121,12 @@
Функция ПодключитьВебСервис()
ПараметрыПодключения = ОбщегоНазначения.ПараметрыПодключенияWSПрокси();
ПараметрыПодключения.АдресWSDL = "http://www.mcommunicator.ru/m2m/m2m_api.asmx?WSDL";
ПараметрыПодключения.АдресWSDL = "https://www.mcommunicator.ru/m2m/m2m_api.asmx?WSDL";
ПараметрыПодключения.URIПространстваИмен = "http://mcommunicator.ru/M2M";
ПараметрыПодключения.ИмяСервиса = "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_API";
ПараметрыПодключения.ИмяТочкиПодключения = "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_APISoap12";
ПараметрыПодключения.Таймаут = 60;
ПараметрыПодключения.ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
Возврат ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения);
@@ -189,8 +190,8 @@
// Массив.
//
Функция Разрешения() Экспорт
Протокол = "HTTP";
Адрес = "http://mcommunicator.ru";
Протокол = "HTTPS";
Адрес = "https://mcommunicator.ru";
Порт = Неопределено;
Описание = НСтр("ru = 'Отправка SMS через МТС.'");
@@ -337,12 +337,65 @@
КонецЕсли;
ЗарегистрироватьНастройкиВарианта(НастройкиКД, Информация);
ЗарегистрироватьСвязиОтВедущих(Информация);
Возврат Информация;
КонецФункции
// Очистить от циклических ссылок для освобождения памяти.
Процедура ОчиститьРасширеннуюИнформациюОНастройках(ИнформацияОНастройках) Экспорт
ОчиститьДеревоЗначений(ИнформацияОНастройках.ДеревоВарианта);
ОчиститьДеревоЗначений(ИнформацияОНастройках.НастройкиВарианта);
ИнформацияОНастройках.Поиск.Очистить();
ИнформацияОНастройках.ПользовательскиеНастройки.Колонки.Очистить();
ИнформацияОНастройках.Связи.Очистить();
ИнформацияОНастройках.Очистить();
КонецПроцедуры
// Очистить дерево значений от циклических ссылок для освобождения памяти.
//
Процедура ОчиститьДеревоЗначений(Знач Дерево) Экспорт
СтрокиДерева = Дерево.Строки;
ОчищаемыеКолонки = Новый Массив;
ИндексКолонки = 0;
Для каждого КолонкаДерева Из Дерево.Колонки Цикл
Если КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Строка")
И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Булево")
И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Число")
И КолонкаДерева.ТипЗначения <> Новый ОписаниеТипов("Дата") Тогда
ОчищаемыеКолонки.Добавить(ИндексКолонки);
КонецЕсли;
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
Если ОчищаемыеКолонки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для каждого СтрокаДерева Из СтрокиДерева Цикл
ОчиститьСтрокиДереваЗначений(СтрокаДерева.Строки, ОчищаемыеКолонки);
КонецЦикла;
Дерево.Колонки.Очистить();
КонецПроцедуры
Процедура ОчиститьСтрокиДереваЗначений(Знач СтрокиДерева, Знач ОчищаемыеКолонки)
Для каждого СтрокаДерева Из СтрокиДерева Цикл
ОчиститьСтрокиДереваЗначений(СтрокаДерева.Строки, ОчищаемыеКолонки);
КонецЦикла;
Для каждого СтрокаДерева Из СтрокиДерева Цикл
Для каждого Колонка Из ОчищаемыеКолонки Цикл
СтрокаДерева[Колонка] = Неопределено;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Дерево варианта
@@ -9,6 +9,8 @@
//
Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт
КонецПроцедуры
// Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий.
@@ -22,6 +24,8 @@
//
Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт
КонецПроцедуры
// Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении
@@ -783,7 +783,7 @@
ИначеЕсли КодСостояния = 507 Тогда // Insufficient Storage
Расшифровка = НСтр("ru = 'На сервере недостаточно места для выполнения запроса.'");
ИначеЕсли КодСостояния = 509 Тогда // Bandwidth Limit Exceeded
Расшифровка = НСтр("ru = 'Сервер превысил отведенное ограничение на потребление траффика.'");
Расшифровка = НСтр("ru = 'Сервер превысил отведенное ограничение на потребление трафика.'");
ИначеЕсли КодСостояния = 510 Тогда // Not Extended
Расшифровка = НСтр("ru = 'Сервер требует больше информации о совершаемом запросе.'");
ИначеЕсли КодСостояния = 511 Тогда // Network Authentication Required
@@ -27,6 +27,8 @@
//
Процедура ПолучитьОбработчикиПоставляемыхДанных(Обработчики) Экспорт
КонецПроцедуры
#КонецОбласти
@@ -132,5 +132,21 @@
КонецПроцедуры
// Позволяет изменить стандартную форму списка файлов
//
// Параметры:
// Форма - УправляемаяФорма - форма списка файлов.
Процедура ПриСозданииФормыСпискаФайлов(Форма) Экспорт
КонецПроцедуры
// Позволяет изменить стандартную форму файла
//
// Параметры:
// Форма - УправляемаяФорма - форма файла.
Процедура ПриСозданииФормыЭлементаФайлов(Форма) Экспорт
КонецПроцедуры
#КонецОбласти
@@ -98,6 +98,7 @@
Счетчик = 0;
ЦиклНомер = 0;
Успешно = Ложь;
КодБукваA = КодСимвола("A", 1);
ГенераторСлучая = Неопределено;
@@ -106,7 +107,6 @@
#КонецЕсли
КоличествоСлучайныхВариантов = 26;
КодБукваA = КодСимвола("A", 1);
Пока НЕ Успешно И ЦиклНомер < 100 Цикл
НомерКаталога = 0;
@@ -121,6 +121,7 @@
КонецЕсли;
БуквыКаталога = "";
КодБукваA = КодСимвола("A", 1);
Пока Истина Цикл
НомерБуквы = НомерКаталога % 26;
@@ -138,7 +139,7 @@
// По умолчанию вначале используется корень, если возможности нет,
// то добавляется A, B, ... Z, .. ZZZZZ, .. AAAAA1, .. AAAAA2 и т.д.
Если Счетчик = 0 Тогда
Если Счетчик = 0 Тогда
ПодКаталог = "";
Иначе
ПодКаталог = БуквыКаталога;
@@ -177,7 +178,7 @@
// Проверка, есть ли файл с таким именем.
ФайлНаДиске = Новый Файл(ФайлПопытки);
Если НЕ ФайлНаДиске.Существует() Тогда // Нет такого файла.
Если НЕ ФайлНаДиске.Существует() Тогда // Нет такого файла.
ИтоговыйПуть = ПодКаталог + ИмяФайла;
Успешно = Истина;
КонецЕсли;
@@ -1273,11 +1273,13 @@
ОтложеннаяИнициализация = ?(ДополнительныеПараметры.Свойство("ОтложеннаяИнициализация"), ДополнительныеПараметры.ОтложеннаяИнициализация, Ложь);
ПоложениеЗаголовкаКИ = ?(ДополнительныеПараметры.Свойство("ПоложениеЗаголовкаКИ"), ДополнительныеПараметры.ПоложениеЗаголовкаКИ, "");
ИсключаемыеВиды = ?(ДополнительныеПараметры.Свойство("ИсключаемыеВиды"), ДополнительныеПараметры.ИсключаемыеВиды, Неопределено);
СкрываемыеВиды = ?(ДополнительныеПараметры.Свойство("СкрываемыеВиды"), ДополнительныеПараметры.СкрываемыеВиды, Неопределено);
ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры.Свойство("ИмяЭлементаДляРазмещения"), ДополнительныеПараметры.ИмяЭлементаДляРазмещения, "ГруппаКонтактнаяИнформация");
Иначе
ИмяЭлементаДляРазмещения = ?(ДополнительныеПараметры = Неопределено, "ГруппаКонтактнаяИнформация", ДополнительныеПараметры);
ОтложеннаяИнициализация = УдалитьОтложеннаяИнициализация;
ИсключаемыеВиды = УдалитьИсключаемыеВиды;
СкрываемыеВиды = Неопределено;
ПоложениеЗаголовкаКИ = УдалитьПоложениеЗаголовкаКИ;
КонецЕсли;
@@ -1285,6 +1287,10 @@
ИсключаемыеВиды = Новый Массив;
КонецЕсли;
Если СкрываемыеВиды = Неопределено Тогда
СкрываемыеВиды = Новый Массив;
КонецЕсли;
ДобавляемыеРеквизиты = Новый Массив;
ПроверитьНаличиеРеквизитовКонтактнойИнформации(Форма, ДобавляемыеРеквизиты);
@@ -1395,6 +1401,7 @@
| ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге,
| ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти,
| ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания,
| ВидыКонтактнойИнформации.МеждународныйФорматАдреса КАК МеждународныйФорматАдреса,
| ЕСТЬNULL(КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация, ЛОЖЬ) КАК ЭтоИсторическаяКонтактнаяИнформация,
| ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление,
| ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей,
@@ -1416,6 +1423,7 @@
| И (
| ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
| ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ)
| И ВидыКонтактнойИнформации.Ссылка НЕ В (&СкрываемыеВиды)
|УПОРЯДОЧИТЬ ПО
| ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ
|";
@@ -1429,6 +1437,7 @@
Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", КонтактнаяИнформация);
Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКонтактнойИнформации);
Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект);
Запрос.УстановитьПараметр("СкрываемыеВиды", СкрываемыеВиды);
УстановитьПривилегированныйРежим(Истина);
КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Строки;
@@ -1964,6 +1973,7 @@
// в форме ввода нового адреса. По умолчанию, "Квартира".
// * ИмяЭлементаДляРазмещения - Строка - Группа, куда будут размещены элементы контактной информации.
// * ИсключаемыеВиды - Массив - Виды контактной информации, которые не требуется отображать на форме.
// * СкрываемыеВиды - Массив - Виды контактной информации, которые не требуется отображать на форме.
// * ОтложеннаяИнициализация - Булево - Если Истина, то создание полей контактной информации на форме будет отложено.
// * ПоложениеЗаголовкаКИ - ПоложениеЗаголовкаЭлементаФормы - Может принимать значения:
// ПоложениеЗаголовкаЭлементаФормы.Верх или
@@ -1978,6 +1988,7 @@
Результат.Вставить("ОтложеннаяИнициализация", Ложь);
Результат.Вставить("ПоложениеЗаголовкаКИ", "");
Результат.Вставить("ИсключаемыеВиды", Неопределено);
Результат.Вставить("СкрываемыеВиды", Неопределено);
Результат.Вставить("ИмяЭлементаДляРазмещения", "ГруппаКонтактнаяИнформация");
Возврат Результат;
@@ -2119,6 +2130,7 @@
Объект.ЗапретитьРедактированиеПользователем = Параметры.ЗапретитьРедактированиеПользователем;
Объект.Используется = Параметры.Используется;
Объект.ХранитьИсториюИзменений = Параметры.ХранитьИсториюИзменений;
Объект.МеждународныйФорматАдреса = Параметры.МеждународныйФорматАдреса;
Если Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
Объект.ВидПоляДругое = Параметры.ВидПоляДругое;
@@ -2216,6 +2228,7 @@
ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь);
ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь);
ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь);
ПараметрыВида.Вставить("МеждународныйФорматАдреса", Ложь);
ПараметрыВида.Вставить("Используется", Истина);
Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
@@ -3739,6 +3752,7 @@
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяЭлементаДляРазмещения", Строка500, ИмяОписания));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("МеждународныйФорматАдреса", Новый ОписаниеТипов("Булево"), ИмяОписания));
Иначе
РеквизитыТаблицы = Форма.ПолучитьРеквизиты("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов");
РеквизитыДляСоздания = Новый Соответствие;
@@ -3746,6 +3760,7 @@
РеквизитыДляСоздания.Вставить("ХранитьИсториюИзменений", Истина);
РеквизитыДляСоздания.Вставить("ДействуетС", Истина);
РеквизитыДляСоздания.Вставить("ЭтоИсторическаяКонтактнаяИнформация", Истина);
РеквизитыДляСоздания.Вставить("МеждународныйФорматАдреса", Истина);
Для Каждого Реквизит Из РеквизитыТаблицы Цикл
Если РеквизитыДляСоздания[Реквизит.Имя] <> Неопределено Тогда
@@ -3795,16 +3810,23 @@
НоваяСтрока.Тип = СтрокаКонтактнойИнформации.Тип;
НоваяСтрока.ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения;
НоваяСтрока.ЭтоРеквизитТабличнойЧасти = ЭтоРеквизитТабличнойЧасти;
Если НоваяСтрока.Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда
НоваяСтрока.ЭтоИсторическаяКонтактнаяИнформация = СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация;
КонецЕсли;
Если НоваяСтрока.Свойство("ДействуетС") Тогда
НоваяСтрока.ДействуетС = СтрокаКонтактнойИнформации.ДействуетС;
КонецЕсли;
Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") Тогда
НоваяСтрока.ХранитьИсториюИзменений = СтрокаКонтактнойИнформации.ХранитьИсториюИзменений;
КонецЕсли;
Если НоваяСтрока.Свойство("МеждународныйФорматАдреса") Тогда
НоваяСтрока.МеждународныйФорматАдреса = СтрокаКонтактнойИнформации.МеждународныйФорматАдреса;
КонецЕсли;
Если ПустаяСтрока(СтрокаКонтактнойИнформации.ЗначенияПолей) Тогда
НоваяСтрока.ЗначенияПолей = "";
Иначе
@@ -4839,18 +4861,23 @@
Если СтрокаКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
Продолжить;
КонецЕсли;
ПодменюКопироватьАдреса = Форма.Элементы.Найти("ПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита);
КонтекстноеПодменюКопироватьАдреса = Форма.Элементы.Найти("КонтекстноеПодменюКопироватьАдреса" + СтрокаКИ.ИмяРеквизита);
Если ПодменюКопироватьАдреса <> Неопределено И КонтекстноеПодменюКопироватьАдреса = Неопределено Тогда
Продолжить;
КонецЕсли;
КоличествоКомандВПодменю = 0;
СписокАдресовВПодменю = Новый Соответствие();
СписокАдресовВПодменю.Вставить(ВРег(СтрокаКИ.Представление), Истина);
Для Каждого Адрес Из НайденныеСтроки Цикл
Если КоличествоКомандВПодменю > 7 Тогда // Ограничение для большого количества адресов на форме
Прервать;
КонецЕсли;
КонецЕсли;
Если Адрес.ЭтоИсторическаяКонтактнаяИнформация Или Адрес.ИмяРеквизита = СтрокаКИ.ИмяРеквизита Тогда
Продолжить;
КонецЕсли;
@@ -4865,20 +4892,30 @@
ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить(ИмяКоманды, 9, Истина);
КоличествоКомандВПодменю = КоличествоКомандВПодменю + 1;
КонецЕсли;
ПредставлениеАдреса = ?(СтрокаКИ.МеждународныйФорматАдреса,
СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Адрес.Представление), Адрес.Представление);
Если СписокАдресовВПодменю[ВРег(Адрес.Представление)] <> Неопределено Тогда
ПредставлениеАдреса = "";
Иначе
СписокАдресовВПодменю.Вставить(ВРег(Адрес.Представление), Истина);
КонецЕсли;
Если ПодменюКопироватьАдреса <> Неопределено Тогда
ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды,
Адрес.Представление, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса);
ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды,
ПредставлениеАдреса, ПараметрыКонтактнойИнформации, ПодменюКопироватьАдреса);
КонецЕсли;
Если КонтекстноеПодменюКопироватьАдреса <> Неопределено Тогда
ДобавитьКнопкуСкопироватьАдрес(Форма, ИмяКоманды,
Адрес.Представление, ПараметрыКонтактнойИнформации, КонтекстноеПодменюКопироватьАдреса);
ПредставлениеАдреса, ПараметрыКонтактнойИнформации, КонтекстноеПодменюКопироватьАдреса);
КонецЕсли;
КонецЦикла;
ОбщееКоличествоКоманд = ОбщееКоличествоКоманд + КоличествоКомандВПодменю;
КонецЦикла;
КонецПроцедуры
@@ -205,8 +205,21 @@
Результат = Новый Структура("ИмяРеквизита", ИмяРеквизитаИсточник);
СтрокаПотребитель = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0];
ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "ЗначенияПолей,Представление,Комментарий");
Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление;
Если СтрокаПотребитель.Свойство("МеждународныйФорматАдреса") И СтрокаПотребитель.МеждународныйФорматАдреса Тогда
ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Комментарий");
ПредставлениеАдреса = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(НайденнаяСтрока.Представление);
СтрокаПотребитель.Представление = ПредставлениеАдреса;
Форма[СтрокаПотребитель.ИмяРеквизита] = ПредставлениеАдреса;
СтрокаПотребитель.ЗначенияПолей = "";
Иначе
ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "ЗначенияПолей,Представление,Комментарий");
Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление;
КонецЕсли;
Форма.Модифицированность = Истина;
Результат = Новый Структура("ОбновитьКонтекстноеМеню, ИмяРеквизита, ИмяЭлементаДляРазмещения",
@@ -109,7 +109,7 @@
Обработчик.РежимВыполнения = "Монопольно";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "2.4.5.67";
Обработчик.Версия = "2.4.6.9";
Обработчик.Комментарий =
НСтр("ru = 'Заполнение справочника Программы электронной подписи и шифрования.'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("8e76369a-e16c-415d-bfeb-95e7e5f07a00");
@@ -157,8 +157,6 @@
Параметры.Вставить("ЭлектроннаяПодпись", НастройкиПодсистемы);
КонецЕсли;
Параметры.Вставить("ТипыПрограммЭлектроннойПодписи", ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыПрограммЭлектроннойПодписи());
КонецПроцедуры
// См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных.
@@ -1102,7 +1100,8 @@
ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig();
ТипКриптопровайдера = ТипКриптопровайдера(МенеджерКриптографии);
СвойстваКриптопровайдера = СвойстваКриптопровайдера(МенеджерКриптографии);
ОбъектКомпоненты.ПутьККриптопровайдеру = СвойстваКриптопровайдера.Путь;
КонвертSOAP = СтрЗаменить(
КонвертSOAP,
@@ -1117,7 +1116,7 @@
ОбъектКомпоненты,
C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемыйТег),
OIDАлгоритмаХеширования,
ТипКриптопровайдера);
СвойстваКриптопровайдера.Тип);
КонвертSOAP = СтрЗаменить(КонвертSOAP, "%DigestValue%", DigestValue);
@@ -1144,7 +1143,8 @@
ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig();
ТипКриптопровайдера = ТипКриптопровайдера(МенеджерКриптографии);
СвойстваКриптопровайдера = СвойстваКриптопровайдера(МенеджерКриптографии);
ОбъектКомпоненты.ПутьККриптопровайдеру = СвойстваКриптопровайдера.Путь;
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken");
@@ -1155,13 +1155,13 @@
C14N(ОбъектКомпоненты, КонвертSOAP, XPathSignedInfo),
ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "SignatureValue"),
СертификатКриптографииBase64,
ТипКриптопровайдера);
СвойстваКриптопровайдера.Тип);
DigestValue = Hash(
ОбъектКомпоненты,
C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемыйТег),
OIDАлгоритмаХеширования,
ТипКриптопровайдера);
СвойстваКриптопровайдера.Тип);
ХешСовпадает = Ложь;
Если DigestValue = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "DigestValue") Тогда
@@ -1208,18 +1208,27 @@
КонецФункции
Функция ТипКриптопровайдера(МенеджерКриптографии)
Функция СвойстваКриптопровайдера(МенеджерКриптографии)
ИнформацияМодуляКриптографии = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии();
ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя;
ТипКриптопровайдера = ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыПрограммЭлектроннойПодписи()[ИмяКриптопровайдера];
ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера);
Если ТипКриптопровайдера = Неопределено Тогда
Если ОписаниеПрограммы = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИмяКриптопровайдера);
КонецЕсли;
Возврат ТипКриптопровайдера;
Свойства = Новый Структура("Тип, Путь", ОписаниеПрограммы.ТипПрограммы, "");
Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда
ПутиКПрограммамНаСерверахLinux = ПутиКПрограммамНаСерверахLinux(ИмяКомпьютера());
Свойства.Путь = ПутиКПрограммамНаСерверахLinux.Получить(ОписаниеПрограммы.Ссылка);
Иначе
Свойства.Путь = "";
КонецЕсли;
Возврат Свойства;
КонецФункции
@@ -1803,22 +1812,7 @@
ЭтоLinux = ОбщегоНазначения.ЭтоLinuxСервер();
Если ЭтоLinux Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяКомпьютера", ИмяКомпьютера);
Запрос.Текст =
"ВЫБРАТЬ
| ПутиКПрограмме.Программа,
| ПутиКПрограмме.ПутьКПрограмме
|ИЗ
| РегистрСведений.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux КАК ПутиКПрограмме
|ГДЕ
| ПутиКПрограмме.ИмяКомпьютера = &ИмяКомпьютера";
ПутиКПрограммамНаСерверахLinux = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПутиКПрограммамНаСерверахLinux.Вставить(Выборка.Программа, Выборка.ПутьКПрограмме);
КонецЦикла;
ПутиКПрограммамНаСерверахLinux = ПутиКПрограммамНаСерверахLinux(ИмяКомпьютера);
Иначе
ПутиКПрограммамНаСерверахLinux = Неопределено;
КонецЕсли;
@@ -1904,4 +1898,27 @@
КонецФункции
Функция ПутиКПрограммамНаСерверахLinux(ИмяКомпьютера)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяКомпьютера", ИмяКомпьютера);
Запрос.Текст =
"ВЫБРАТЬ
| ПутиКПрограмме.Программа,
| ПутиКПрограмме.ПутьКПрограмме
|ИЗ
| РегистрСведений.ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux КАК ПутиКПрограмме
|ГДЕ
| ПутиКПрограмме.ИмяКомпьютера = &ИмяКомпьютера";
ПутиКПрограммамНаСерверахLinux = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПутиКПрограммамНаСерверахLinux.Вставить(Выборка.Программа, Выборка.ПутьКПрограмме);
КонецЦикла;
Возврат ПутиКПрограммамНаСерверахLinux;
КонецФункции
#КонецОбласти
@@ -202,6 +202,7 @@
Возврат Ложь;
КонецЕсли;
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля;
Попытка
ДвоичныеДанныеРезультата = ЭлектроннаяПодписьСлужебный.Подписать(
Данные.КонвертSOAP,
@@ -3684,6 +3684,7 @@
Контекст.Вставить("ТипКриптопровайдера", Неопределено);
Контекст.Вставить("ИмяКриптопровайдера", Неопределено);
Контекст.Вставить("ПутьКриптопровайдера", Неопределено);
СертификатКриптографии.НачатьВыгрузку(
Новый ОписаниеОповещения("НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии", ЭтотОбъект, Контекст));
@@ -3717,6 +3718,7 @@
Контекст.Вставить("ТипКриптопровайдера", Неопределено);
Контекст.Вставить("ИмяКриптопровайдера", Неопределено);
Контекст.Вставить("ПутьКриптопровайдера", Неопределено);
Контекст.СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения(
"НачатьПроверкуПодписиПослеИнициализацииСертификата", ЭтотОбъект, Контекст),
@@ -3742,21 +3744,9 @@
Процедура ПослеПодключенияКомпоненты(Результат, Контекст) Экспорт
Если Результат.Подключено Тогда
Контекст.Вставить("ОбъектКомпоненты", Результат.ПодключаемыйМодуль);
Если Контекст.Режим = "РежимПроверка" Тогда
ОповещениеПриЗавершении = Новый ОписаниеОповещения("НачатьПроверкуПодписиСообщенияSOAP", ЭтотОбъект, Контекст);
Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении);
ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда
ОповещениеПриЗавершении = Новый ОписаниеОповещения("НачатьПодписаниеСообщенияSOAP", ЭтотОбъект, Контекст);
Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении);
Иначе
ЗавершитьОперациюСОшибкой(
Контекст,
НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'"));
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(
Новый ОписаниеОповещения("ПослеПолученияИнформацииМодуляКриптографии", ЭтотОбъект, Контекст));
Иначе
Если ПустаяСтрока(Результат.ОписаниеОшибки) Тогда
@@ -3782,6 +3772,64 @@
КонецПроцедуры
Процедура ПослеПолученияИнформацииМодуляКриптографии(ИнформацияМодуляКриптографии, Контекст) Экспорт
ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя;
ОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера);
Если ОписаниеПрограммы = Неопределено Тогда
ЗавершитьОперациюСОшибкой(Контекст,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"),
ИнформацияМодуляКриптографии.Имя));
Возврат;
КонецЕсли;
Контекст.ТипКриптопровайдера = ОписаниеПрограммы.ТипПрограммы;
Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера;
Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда
ПутьКПрограмме = "";
Иначе
ПерсональныеНастройки = ЭлектроннаяПодписьКлиентСервер.ПерсональныеНастройки();
ПутьКПрограмме = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования.Получить(
ОписаниеПрограммы.Ссылка);
КонецЕсли;
Контекст.ПутьКриптопровайдера = ПутьКПрограмме;
Контекст.ОбъектКомпоненты.НачатьУстановкуПутьККриптопровайдеру(
Новый ОписаниеОповещения("ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру", ЭтотОбъект, Контекст),
Контекст.ПутьКриптопровайдера);
КонецПроцедуры
Процедура ПослеУстановкиСвойстваКомпонентыПутьККриптопровайдеру(Контекст) Экспорт
Если ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент() Тогда
Контекст.ОбъектКомпоненты.НачатьУстановкуЗапретитьПользовательскийИнтерфейс(
Новый ОписаниеОповещения("ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс", ЭтотОбъект, Контекст),
Ложь);
Иначе
ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст);
КонецЕсли;
КонецПроцедуры
Процедура ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст) Экспорт
Если Контекст.Режим = "РежимПроверка" Тогда
НачатьПроверкуПодписиСообщенияSOAP(Контекст);
ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда
НачатьПодписаниеСообщенияSOAP(Контекст);
Иначе
ЗавершитьОперациюСОшибкой(
Контекст,
НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'"));
КонецЕсли;
КонецПроцедуры
Процедура НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии(ДвоичныеДанныеСертификата, Контекст) Экспорт
СертификатКриптографииBase64 = ОтформатироватьСтрокуBase64(Base64Строка(ДвоичныеДанныеСертификата));
@@ -3804,28 +3852,9 @@
КонецПроцедуры
Процедура НачатьПодписаниеСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента();
ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя;
ТипКриптопровайдера = ПараметрыРаботыКлиента.ТипыПрограммЭлектроннойПодписи[ИмяКриптопровайдера];
Если ТипКриптопровайдера = Неопределено Тогда
ЗавершитьОперациюСОшибкой(
Контекст,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИнформацияМодуляКриптографии.Имя)
+ Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецЕсли;
Контекст.ТипКриптопровайдера = ТипКриптопровайдера;
Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера;
Процедура НачатьПодписаниеСообщенияSOAP(Контекст)
Попытка
ОписаниеОповещения = Новый ОписаниеОповещения(
"Подписание_ПослеВыполненияGetSignOIDFromCert", ЭтотОбъект, Контекст,
"Подписание_ПослеВыполненияGetSignOIDFromCert_Ошибка", ЭтотОбъект);
@@ -3833,13 +3862,10 @@
Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert(
ОписаниеОповещения,
Контекст.СертификатКриптографииBase64);
Исключение
ЗавершитьОперациюСОшибкой(
Контекст,
НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
@@ -4020,29 +4046,9 @@
КонецПроцедуры
Процедура НачатьПроверкуПодписиСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента();
ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя;
ТипКриптопровайдера = ПараметрыРаботыКлиента.ТипыПрограммЭлектроннойПодписи[ИмяКриптопровайдера];
Если ТипКриптопровайдера = Неопределено Тогда
ЗавершитьОперациюСОшибкой(
Контекст,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИнформацияМодуляКриптографии.Имя)
+ Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецЕсли;
Контекст.ТипКриптопровайдера = ТипКриптопровайдера;
Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера;
Процедура НачатьПроверкуПодписиСообщенияSOAP(Контекст)
Попытка
ОписаниеОповещения = Новый ОписаниеОповещения(
"Проверка_ПослеВыполненияGetSignOIDFromCert", ЭтотОбъект, Контекст,
"Проверка_ПослеВыполненияGetSignOIDFromCert_Ошибка", ЭтотОбъект);
@@ -4050,13 +4056,9 @@
Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert(
ОписаниеОповещения,
Контекст.СертификатКриптографииBase64);
Исключение
ЗавершитьОперациюСОшибкой(
Контекст,
ЗавершитьОперациюСОшибкой(Контекст,
НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
@@ -96,6 +96,26 @@
#Область СлужебныеПроцедурыИФункции
Функция ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера) Экспорт
ОписанияПрограмм = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().ОписанияПрограмм;
ПрограммаНайдена = Ложь;
Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
Если ОписаниеПрограммы.ИмяПрограммы = ИмяКриптопровайдера Тогда
ПрограммаНайдена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПрограммаНайдена Тогда
Возврат ОписаниеПрограммы;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Только для внутреннего использования.
Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки) Экспорт
@@ -87,40 +87,6 @@
КонецФункции
// Возвращает соответствие типов программ электронной подписи по именам.
//
// Возвращаемое значение:
// Соответствие со свойствами:
// * Ключ - Строка - Уникальное имя программы, присвоенное ее разработчиком.
// * Значение - Число - Число, которое описывает тип программы и дополняет имя программы.
//
Функция ТипыПрограммЭлектроннойПодписи() Экспорт
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат Новый ФиксированноеСоответствие(Новый Соответствие);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ПрограммыЭлектроннойПодписиИШифрования.ИмяПрограммы,
| ПрограммыЭлектроннойПодписиИШифрования.ТипПрограммы
|ИЗ
| Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
ТипыПрограммЭлектроннойПодписи = Новый Соответствие;
Пока Выборка.Следующий() Цикл
ТипыПрограммЭлектроннойПодписи.Вставить(Выборка.ИмяПрограммы, Выборка.ТипПрограммы);
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(ТипыПрограммЭлектроннойПодписи);
КонецФункции
Функция ТипыВладельцев(ТолькоСсылки = Ложь) Экспорт
Результат = Новый Соответствие;
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="db6679c4-a647-471a-9f90-40248eb18db9">
<name>ОтсутствуетСогласие</name>
<synonym>
<key>ru</key>
<value>Отсутствует согласие</value>
</synonym>
</mdclass:CommonPicture>
+21 -9
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c62db5d4-93b3-4f13-8889-81e64c73f224">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bd230cde-6399-4ead-b820-663d251d83c7">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 2.3</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="66ae928c-408f-405d-9411-8fb67fce1316"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="9cd82b1c-0f04-450c-8cf2-e44a270763aa"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="55641679-6abe-4bef-b169-8dd1bb9f3fae"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="ff91b048-fb10-4085-b1a6-96fcc3613c59"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="5451adc5-de58-4ddc-88fc-744f12840127"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="993a11e2-0a9c-4836-9e9d-8b30e402845c"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="5eb32ffa-247a-4f98-9caf-0d400f164003"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="af126449-6d5c-4582-9a45-c042ba027c9d"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="513acd2c-f417-435b-abad-630f0fe371b5"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="6d0b3c9c-9aa8-4c48-b8ab-72cdada6d8a7"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="2ce7c9a6-d479-4ce1-98f7-547be6b46e10"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="c644b16a-abe9-47bd-8b1b-37d0515dc334"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="2c27a107-d634-4a0d-b883-21086c9d14e1"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="60b4b373-1fdc-476e-874a-705d5a0d99c7"/>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>2.4.5.71</version>
<version>2.4.6.27</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -253,6 +253,7 @@
<commonPictures>CommonPicture.ОтправитьSMS</commonPictures>
<commonPictures>CommonPicture.ОтправитьПолучитьПочту</commonPictures>
<commonPictures>CommonPicture.ОтправитьЭлектронноеПисьмо</commonPictures>
<commonPictures>CommonPicture.ОтсутствуетСогласие</commonPictures>
<commonPictures>CommonPicture.Отчеты</commonPictures>
<commonPictures>CommonPicture.Оформление</commonPictures>
<commonPictures>CommonPicture.Ошибка32</commonPictures>
@@ -609,6 +610,7 @@
<commonModules>CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебный</commonModules>
<commonModules>CommonModule.ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент</commonModules>
<commonModules>CommonModule.ЗащитаПерсональныхДанных</commonModules>
<commonModules>CommonModule.ЗащитаПерсональныхДанныхВызовСервера</commonModules>
<commonModules>CommonModule.ЗащитаПерсональныхДанныхКлиент</commonModules>
<commonModules>CommonModule.ЗащитаПерсональныхДанныхПереопределяемый</commonModules>
<commonModules>CommonModule.ЗащитаПерсональныхДанныхПовтИсп</commonModules>
@@ -938,6 +940,7 @@
<xDTOPackages>XDTOPackage.EnterpriseData_1_3_8</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_4_4</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_5_2</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_6_1</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseDataExchange_1_0_1_1</xDTOPackages>
<xDTOPackages>XDTOPackage.ExchangeMessage</xDTOPackages>
<xDTOPackages>XDTOPackage.SuppliedData</xDTOPackages>
@@ -1041,12 +1044,14 @@
<scheduledJobs>ScheduledJob.ПланированиеИзвлеченияТекстаВМоделиСервиса</scheduledJobs>
<scheduledJobs>ScheduledJob.ПланированиеОбработкиЗаданий</scheduledJobs>
<scheduledJobs>ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем</scheduledJobs>
<scheduledJobs>ScheduledJob.ПолучениеСубъектовДляСкрытияПерсональныхДанных</scheduledJobs>
<scheduledJobs>ScheduledJob.ПроверкаВеденияУчета</scheduledJobs>
<scheduledJobs>ScheduledJob.РассылкаОтчетов</scheduledJobs>
<scheduledJobs>ScheduledJob.СборИОтправкаОтчетовОбОшибках</scheduledJobs>
<scheduledJobs>ScheduledJob.СборИОтправкаСтатистики</scheduledJobs>
<scheduledJobs>ScheduledJob.СинхронизацияДанных</scheduledJobs>
<scheduledJobs>ScheduledJob.СинхронизацияФайлов</scheduledJobs>
<scheduledJobs>ScheduledJob.СкрытиеПерсональныхДанныхСубъектов</scheduledJobs>
<scheduledJobs>ScheduledJob.СлияниеИндексаППД</scheduledJobs>
<scheduledJobs>ScheduledJob.СтартОтложенныхПроцессов</scheduledJobs>
<scheduledJobs>ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах</scheduledJobs>
@@ -1087,6 +1092,7 @@
<functionalOptions>FunctionalOption.ИспользоватьСинхронизациюДанных</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьСинхронизациюФайлов</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьУдалениеПомеченныхОбъектов</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьШаблоныСообщений</functionalOptions>
<functionalOptions>FunctionalOption.ИспользоватьШифрование</functionalOptions>
@@ -1200,6 +1206,7 @@
<commonCommands>CommonCommand.СвязатьсяСоСпециалистомОнлайнПоддержки</commonCommands>
<commonCommands>CommonCommand.Синхронизировать</commonCommands>
<commonCommands>CommonCommand.СинхронизироватьСДополнительнымиПараметрами</commonCommands>
<commonCommands>CommonCommand.СкрытьПерсональныеДанныеСубъектов</commonCommands>
<commonCommands>CommonCommand.СменитьПароль</commonCommands>
<commonCommands>CommonCommand.СобытияОтправки</commonCommands>
<commonCommands>CommonCommand.СобытияПолучения</commonCommands>
@@ -1234,6 +1241,7 @@
<constants>Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC</constants>
<constants>Constant.ДатаУведомленияОНовыхЗадачах</constants>
<constants>Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации</constants>
<constants>Constant.ДнейДоСкрытияПерсональныхДанныхСубъектов</constants>
<constants>Constant.ЗаголовокСистемы</constants>
<constants>Constant.ЗагрузитьСообщениеОбменаДанными</constants>
<constants>Constant.ЗапрещатьЗагрузкуФайловПоРасширению</constants>
@@ -1270,6 +1278,7 @@
<constants>Constant.ИспользоватьСинхронизациюДанных</constants>
<constants>Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</constants>
<constants>Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса</constants>
<constants>Constant.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</constants>
<constants>Constant.ИспользоватьУдалениеПомеченныхОбъектов</constants>
<constants>Constant.ИспользоватьШаблоныСообщений</constants>
<constants>Constant.ИспользоватьШифрование</constants>
@@ -1283,6 +1292,7 @@
<constants>Constant.КаталогСообщенийОбменаДаннымиДляWindows</constants>
<constants>Constant.КлючОбластиДанных</constants>
<constants>Constant.КоличествоЗамеровВПакетеЭкспорта</constants>
<constants>Constant.КоличествоПотоковОбновленияИнформационнойБазы</constants>
<constants>Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных</constants>
<constants>Constant.КопироватьОбластиДанныхИзЭталонной</constants>
<constants>Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания</constants>
@@ -1544,6 +1554,7 @@
<enums>Enum.СостоянияЗаявленияНаВыпускСертификата</enums>
<enums>Enum.СостоянияПроцессовДляЗапуска</enums>
<enums>Enum.СостоянияСообщенияSMS</enums>
<enums>Enum.СостоянияСубъектовДляСкрытия</enums>
<enums>Enum.СпособВыполненияПроверки</enums>
<enums>Enum.СпособыPOP3Аутентификации</enums>
<enums>Enum.СпособыSMTPАутентификации</enums>
@@ -1776,6 +1787,7 @@
<informationRegisters>InformationRegister.СостоянияУспешныхОбменовДанными</informationRegisters>
<informationRegisters>InformationRegister.СтатистикаКонфигурации</informationRegisters>
<informationRegisters>InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом</informationRegisters>
<informationRegisters>InformationRegister.СубъектыДляСкрытияПерсональныхДанных</informationRegisters>
<informationRegisters>InformationRegister.ТаблицыГруппДоступа</informationRegisters>
<informationRegisters>InformationRegister.УведомленияОПрочтении</informationRegisters>
<informationRegisters>InformationRegister.Удалить_АктивныеПредметыВзаимодействий</informationRegisters>
@@ -1 +1 @@
{6,1,1,ec777841-3392-42a6-8cce-42e0b05cf36a,1,2afc11ab-5a89-4034-9794-e5f30c4918a1,"2.4.5.71","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5550,1,0,c62db5d4-93b3-4f13-8889-81e64c73f224,c62db5d4-93b3-4f13-8889-81e64c73f224,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-Line truncated
{6,1,1,bb3111f9-693b-46d3-88cd-2baece1aba62,1,bed22fba-10bf-4142-a8d3-3e652b34fcf9,"2.4.6.27","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5575,1,0,bd230cde-6399-4ead-b820-663d251d83c7,bd230cde-6399-4ead-b820-663d251d83c7,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,c27472ee-879a-4746-9d21-122738ec80b7,c27472ee-879a-4746-9d21-122738ec80b7,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-Line truncated
@@ -0,0 +1,24 @@
<?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="251ca8fe-09eb-45ca-be8b-0d8faf927009">
<producedTypes>
<managerType typeId="6ca65b05-0bd1-49ea-a53c-2529094a3592" valueTypeId="50484fe0-2dd3-487a-987c-a262058e7322"/>
<valueManagerType typeId="726acf20-f24c-483c-889a-057085aabbf6" valueTypeId="18080a77-73d4-4085-81e9-bb59b8747006"/>
<valueKeyType typeId="b3f5a35b-8c66-5205-87b6-c4c45e6d5c53" valueTypeId="25ca8ece-355c-5884-8081-448cc0fd00ba"/>
</producedTypes>
<name>ДнейДоСкрытияПерсональныхДанныхСубъектов</name>
<synonym>
<key>ru</key>
<value>Дней до скрытия персональных данных субъектов</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>3</precision>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>
@@ -0,0 +1,20 @@
<?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="3f3f1b41-57a9-4a82-bdfa-89a6653479ab">
<producedTypes>
<managerType typeId="f6b36ddf-3a9c-4dd4-abfa-1638f9664221" valueTypeId="7fbb6710-e2d0-49be-895a-ce48e88cbc05"/>
<valueManagerType typeId="ff9fc631-190e-4c78-9054-135251ef6d18" valueTypeId="472f0b59-7e5b-40a4-a4d5-b277017b4666"/>
<valueKeyType typeId="e745c653-9c39-5ba4-8890-d9ad342cd222" valueTypeId="10d909f4-5cd0-5315-88b5-4724f6c775fe"/>
</producedTypes>
<name>ИспользоватьСкрытиеПерсональныхДанныхСубъектов</name>
<synonym>
<key>ru</key>
<value>Использовать скрытие персональных данных субъектов</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>
@@ -0,0 +1,24 @@
<?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="d416cc2a-425f-4c01-a550-5a755ed78cc8">
<producedTypes>
<managerType typeId="15035100-6827-4d98-88ab-df30c38e319f" valueTypeId="f94608ba-6383-494e-a5fa-b4f64e778faf"/>
<valueManagerType typeId="325ed2e7-8175-42d8-8ca6-23ac8f6fd743" valueTypeId="1e280ab8-3cb5-4954-b15b-13ba9882a475"/>
<valueKeyType typeId="d67e456c-db8b-5777-aad7-b608b42a5718" valueTypeId="0b64608b-81ce-527c-96d1-9cf0e255d505"/>
</producedTypes>
<name>КоличествоПотоковОбновленияИнформационнойБазы</name>
<synonym>
<key>ru</key>
<value>Количество потоков обновления информационной базы</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>5</precision>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>
@@ -425,6 +425,10 @@
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
@@ -10,7 +10,18 @@
// Заполнение списка календарей.
ЗакрыватьПриВыборе = Ложь;
ЗаполнитьТаблицуКалендарей();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ДлительнаяОперация = ЗагрузитьСписокПоддерживаемыхПроизводственныхКалендарей();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗаполнитьСписокКалендарейЗавершение", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры
@@ -41,9 +52,33 @@
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьТаблицуКалендарей()
Функция ЗагрузитьСписокПоддерживаемыхПроизводственныхКалендарей()
ТаблицаКалендарей = КалендарныеГрафики.ТаблицаПроизводственныхКалендарей();
ПараметрыПроцедуры = Новый Структура;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Заполнение списка поддерживаемых календарей'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Справочники.ПроизводственныеКалендари.ЗаполнитьПроизводственныеКалендариПоУмолчаниюДлительнаяОперация",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ЗаполнитьСписокКалендарейЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьСписокКалендарей(Результат.АдресРезультата);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокКалендарей(АдресТаблицы)
ТаблицаКалендарей = ПолучитьИзВременногоХранилища(АдресТаблицы);
Для Каждого СтрокаТаблицы Из ТаблицаКалендарей Цикл
НоваяСтрока = Календари.Добавить();
@@ -35,6 +35,12 @@
КонецФункции
Функция ВерсияКалендарей() Экспорт
Возврат 7;
КонецФункции
// Заполняет даты праздничных дней по производственному календарю для конкретного календарного года.
//
// Параметры:
@@ -270,8 +270,9 @@
<Item Calendar="91" Year="2017" DayType="Праздник" Date="20170605" SwapDate=""/>
<Item Calendar="91" Year="2017" DayType="Праздник" Date="20170626" SwapDate=""/>
<Item Calendar="91" Year="2017" DayType="Праздник" Date="20170904" SwapDate=""/>
<Item Calendar="91" Year="2018" DayType="Воскресенье" Date="20180312" SwapDate="20180318"/>
<Item Calendar="91" Year="2018" DayType="Праздник" Date="20180318" SwapDate="20180319"/>
<Item Calendar="91" Year="2018" DayType="Воскресенье" Date="20180319" SwapDate="20180318"/>
<Item Calendar="91" Year="2018" DayType="Рабочий" Date="20180319" SwapDate="20180312"/>
<Item Calendar="91" Year="2018" DayType="Праздник" Date="20180409" SwapDate=""/>
<Item Calendar="91" Year="2018" DayType="Праздник" Date="20180528" SwapDate=""/>
<Item Calendar="91" Year="2018" DayType="Предпраздничный" Date="20180614" SwapDate=""/>
@@ -1,5 +1,5 @@
<?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">
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>ГруппаЗаголовок</name>
<id>2022</id>
@@ -1348,38 +1348,274 @@
<name>ГруппаЗащитаПерсональныхДанных</name>
<id>2209</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным</name>
<id>2211</id>
<items xsi:type="form:Button">
<name>ОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным</name>
<id>2213</id>
<name>ГруппаНастройкиЗащитыПерсональныхДанных</name>
<id>2219</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным</name>
<id>2211</id>
<items xsi:type="form:Button">
<name>ОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным</name>
<id>2213</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымExtendedTooltip</name>
<id>2214</id>
<title>
<key>ru</key>
<value>Регистрация событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ &quot;О персональных данных&quot;.</value>
</title>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Открыть настройки регистрации событий доступа к персональным данным</value>
</title>
<width>43</width>
<horizontalStretch>false</horizontalStretch>
<extendedTooltip>
<name>ОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымExtendedTooltip</name>
<id>2214</id>
<title>
<key>ru</key>
<value>Регистрация событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ &quot;О персональных данных&quot;.</value>
</title>
<name>ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымExtendedTooltip</name>
<id>2212</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным.StandardCommand.Open</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
<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>
<items xsi:type="form:FormGroup">
<name>ГруппаСкрытиеПерсональныхДанныхИспользование</name>
<id>2221</id>
<items xsi:type="form:FormGroup">
<name>ГруппаДнейДоСкрытия</name>
<id>2223</id>
<items xsi:type="form:FormField">
<name>ИспользоватьСкрытиеПерсональныхДанных</name>
<id>2225</id>
<title>
<key>ru</key>
<value>Скрывать персональные данные через</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>НаборКонстант.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<toolTip>
<key>ru</key>
<value>Скрывать персональные данные субъектов</value>
</toolTip>
<handlers>
<event>OnChange</event>
<name>Подключаемый_НастройкиСкрытияПДнПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ИспользоватьСкрытиеПерсональныхДанныхРасширеннаяПодсказка</name>
<id>2227</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИспользоватьСкрытиеПерсональныхДанныхКонтекстноеМеню</name>
<id>2226</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>2228</id>
<title>
<key>ru</key>
<value>дней</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>НаборКонстант.ДнейДоСкрытияПерсональныхДанныхСубъектов</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<handlers>
<event>OnChange</event>
<name>Подключаемый_НастройкиСкрытияПДнПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ДнейДоСкрытияПерсональныхДанныхСубъектовРасширеннаяПодсказка</name>
<id>2230</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДнейДоСкрытияПерсональныхДанныхСубъектовКонтекстноеМеню</name>
<id>2229</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>2231</id>
<title>
<key>ru</key>
<value>Декорация ожидание изменения использования скрытия ПДн</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияОжиданиеИзмененияИспользованияСкрытияПДнРасширеннаяПодсказка</name>
<id>2233</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияОжиданиеИзмененияИспользованияСкрытияПДнКонтекстноеМеню</name>
<id>2232</id>
<autoFill>true</autoFill>
</contextMenu>
<width>2</width>
<autoMaxWidth>true</autoMaxWidth>
<height>1</height>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.НезавершившаясяПроверка</picture>
</picture>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Дней до скрытия</value>
</title>
<toolTip>
<key>ru</key>
<value>Причиной скрытия данных может быть истечение срока действия согласия субъекта или его отсутствие.</value>
</toolTip>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<width>43</width>
<horizontalStretch>false</horizontalStretch>
<extendedTooltip>
<name>ГруппаДнейДоСкрытияРасширеннаяПодсказка</name>
<id>2224</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">
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Скрытие персональных данных использование</value>
</title>
<extendedTooltip>
<name>ГруппаСкрытиеПерсональныхДанныхИспользованиеРасширеннаяПодсказка</name>
<id>2222</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
@@ -1388,13 +1624,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Открыть настройки регистрации событий доступа к персональным данным</value>
<value>Настройки защиты персональных данных</value>
</title>
<width>43</width>
<horizontalStretch>false</horizontalStretch>
<extendedTooltip>
<name>ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымExtendedTooltip</name>
<id>2212</id>
<name>ГруппаНастройкиЗащитыПерсональныхДанныхРасширеннаяПодсказка</name>
<id>2220</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -1406,6 +1640,7 @@
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
@@ -89,6 +89,8 @@
Прочитать();
УстановитьДоступность();
ИначеЕсли Источник = "ИспользоватьСкрытиеПерсональныхДанныхСубъектов" Тогда
Прочитать();
КонецЕсли;
КонецПроцедуры
@@ -212,6 +214,16 @@
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НастройкиСкрытияПДнПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗащитаПерсональныхДанных") Тогда
МодульЗащитаПерсональныхДанныхКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗащитаПерсональныхДанныхКлиент");
МодульЗащитаПерсональныхДанныхКлиент.НастройкиСкрытияПерсональныхДанныхПриИзменении(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИнтерфейсПрограммы()
@@ -1,4 +1,3 @@
#Область ОбработчикиСобытийФормы
&НаСервере
@@ -81,7 +80,15 @@
Параметры.ВладелецФайла, "", ЗаголовокОшибки, ОкончаниеОшибки);
ВозможностьСоздаватьГруппыФайлов = МетаданныеСправочникаСФайлами.Иерархический;
Если НастройкиФайлов.НеСоздаватьФайлыПоШаблону.Найти(Метаданные.НайтиПоТипу(ТипЗнч(ВладелецФайла))) <> Неопределено Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
ЕстьПравоИспользоватьШаблоны = МодульУправлениеДоступом .ЕстьПраво("Чтение", Справочники.ПапкиФайлов.Шаблоны);
Иначе
ЕстьПравоИспользоватьШаблоны = ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов);
КонецЕсли;
Если НЕ ЕстьПравоИспользоватьШаблоны Или НастройкиФайлов.НеСоздаватьФайлыПоШаблону.Найти(Метаданные.НайтиПоТипу(ТипЗнч(ВладелецФайла))) <> Неопределено Тогда
Элементы.ДобавитьФайлПоШаблону.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюДобавитьФайлПоШаблону.Видимость = Ложь;
КонецЕсли;
@@ -166,6 +173,8 @@
УстановитьУсловноеОформление();
РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
@@ -1701,7 +1710,6 @@
КонецПроцедуры
&НаСервере
Процедура ОбновитьПояснениеОблачногоСервиса()
@@ -31,6 +31,8 @@
ОбновитьЗаголовок();
ОбновитьПояснениеОблачногоСервиса(ПрисоединенныйФайл);
РаботаСФайламиПереопределяемый.ПриСозданииФормыЭлементаФайлов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
@@ -2574,6 +2574,213 @@
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>МеждународныйАдрес</name>
<id>371</id>
<items xsi:type="form:FormGroup">
<name>СтруктураМеждународныеАдреса</name>
<id>373</id>
<items xsi:type="form:FormField">
<name>НаселенныйПунктМеждународныеАдреса</name>
<id>375</id>
<title>
<key>ru</key>
<value>Город, населенный пункт / City</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>НаселенныйПункт</segments>
</dataPath>
<handlers>
<event>OnChange</event>
<name>НаселенныйПунктИностранныйАдресаПриИзменении</name>
</handlers>
<extendedTooltip>
<name>НаселенныйПунктМеждународныеАдресаРасширеннаяПодсказка</name>
<id>377</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НаселенныйПунктМеждународныеАдресаКонтекстноеМеню</name>
<id>376</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>378</id>
<title>
<key>ru</key>
<value>Адрес / Address</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Улица</segments>
</dataPath>
<titleLocation>Left</titleLocation>
<handlers>
<event>OnChange</event>
<name>УлицаИностранныйАдресаПриИзменении</name>
</handlers>
<extendedTooltip>
<name>УлицаМеждународныеАдресаРасширеннаяПодсказка</name>
<id>380</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>УлицаМеждународныеАдресаКонтекстноеМеню</name>
<id>379</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>
<multiLine>true</multiLine>
<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>Структура международные адреса</value>
</title>
<extendedTooltip>
<name>СтруктураМеждународныеАдресаРасширеннаяПодсказка</name>
<id>374</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>
<items xsi:type="form:FormField">
<name>ПредставлениеМеждународногоАдреса</name>
<id>381</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>383</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПредставлениеМеждународногоАдресаКонтекстноеМеню</name>
<id>382</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">
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<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>Международный адрес</value>
</title>
<extendedTooltip>
<name>МеждународныйАдресРасширеннаяПодсказка</name>
<id>372</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -4733,6 +4940,23 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>МеждународныйФорматАдреса</name>
<title>
<key>ru</key>
<value>Международный формат адреса</value>
</title>
<id>52</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>КомандаОК</name>
<title>
@@ -45,7 +45,6 @@
ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля;
ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы;
АвтоЦвет = Новый Цвет;
ОсновнаяСтрана = РаботаСАдресами.ОсновнаяСтрана();
ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации);
@@ -83,6 +82,11 @@
СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса;
ТолькоНациональныйАдрес = ВидКонтактнойИнформации.ТолькоНациональныйАдрес;
ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип;
МеждународныйФорматАдреса = ВидКонтактнойИнформации.МеждународныйФорматАдреса;
Если Не МеждународныйФорматАдреса Тогда
ОсновнаяСтрана = РаботаСАдресами.ОсновнаяСтрана();
КонецЕсли;
ЗаполнитьПредопределенныеВариантыАдреса(Параметры);
@@ -120,13 +124,18 @@
Если ЗначениеЗаполнено(Страна) Тогда
КодСтраны = Страна.Код;
Иначе
Страна = ОсновнаяСтрана;
КодСтраны = ОсновнаяСтрана.Код;
Если ЗначениеЗаполнено(ОсновнаяСтрана) Тогда
СтранаПоУмолчанию = ОсновнаяСтрана;
Иначе
СтранаПоУмолчанию = РаботаСАдресами.ОсновнаяСтрана();
КонецЕсли;
Страна = СтранаПоУмолчанию;
КодСтраны = СтранаПоУмолчанию.Код;
КонецЕсли;
ОтобразитьДополнительныеЗданияИПомещения();
Если ТолькоНациональныйАдрес Тогда
Если ТолькоНациональныйАдрес И Не МеждународныйФорматАдреса Тогда
Элементы.Страна.Доступность = Ложь;
Элементы.Страна.ЦветФона = АвтоЦвет;
// Проверяем на корректность
@@ -143,7 +152,11 @@
КонецЕсли;
// Проверка какой адрес
Если Страна = ОсновнаяСтрана Тогда
Если МеждународныйФорматАдреса Тогда
ЕстьПравоЗагружатьКлассификатор = Ложь;
ИначеЕсли Страна = ОсновнаяСтрана Тогда
Элементы.ОКТМО.Видимость = ВидКонтактнойИнформации.УказыватьОКТМО;
Если Не ЭтоВебСервис Тогда
@@ -1186,8 +1199,9 @@
// Флаги вида были прочитаны заново.
ВидКонтактнойИнформации = Контекст.ВидКонтактнойИнформации;
Если ВидКонтактнойИнформации.ПроверятьКорректность
И (Не РазрешитьВводАдресаВСвободнойФорме)
Если (ВидКонтактнойИнформации.ПроверятьКорректность
И Не РазрешитьВводАдресаВСвободнойФорме
Или ВидКонтактнойИнформации.МеждународныйФорматАдреса)
И Результат.ОшибкиЗаполнения.Количество() > 0 Тогда
СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь);
Возврат;
@@ -1421,13 +1435,15 @@
КонецЕсли;
РазрешитьВводАдресаВСвободнойФорме = Не РазрешитьВводАдресаВСвободнойФорме;
Если ЭтоСтранаУчастникЕАЭС(Страна) Тогда
Если ЭтоСтранаУчастникЕАЭС(Страна) Или МеждународныйФорматАдреса Тогда
// ЕАЭС
Контекст = КонтекстФормыКлиент();
ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(ПредставлениеАдреса, Контекст);
КонтекстФормыКлиент(Контекст);
КонецЕсли;
ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса);
ОпределениеРежимаВводаАдреса();
Модифицированность = Истина;
@@ -1599,7 +1615,8 @@
Процедура СообщениеОНеобходимостиОбновленияКлассификатора(Идентификатор = Неопределено)
Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь;
Если НЕ ЭтоВебСервис И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
Если Страна = ОсновнаяСтрана Тогда
ВидимостьНеобходимоОбновление = НЕ ЭтоВебСервис И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор");
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
ИнформацияОбОбновление = МодульАдресныйКлассификаторСлужебный.ОписаниеПоследнейЗагрузки(Идентификатор);
Элементы.АдресныйКлассификаторУстарел.Видимость = ИнформацияОбОбновление.НеобходимоОбновление;
@@ -1699,14 +1716,26 @@
&НаКлиенте
Процедура ОбработкаИзмененияСтраныКлиент()
ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана);
Элементы.ТипАдреса.ТекущаяСтраница = ?(ЭтоНациональныйАдрес, Элементы.НациональныйАдрес, Элементы.ИностранныйАдрес);
ЭтоНациональныйАдрес = (Страна = ОсновнаяСтрана И Не МеждународныйФорматАдреса);
Если МеждународныйФорматАдреса Тогда
Элементы.ТипАдреса.ТекущаяСтраница = Элементы.МеждународныйАдрес;
ИначеЕсли ЭтоНациональныйАдрес Тогда
Элементы.ТипАдреса.ТекущаяСтраница = Элементы.НациональныйАдрес;
Иначе
Элементы.ТипАдреса.ТекущаяСтраница = Элементы.ИностранныйАдрес;
КонецЕсли;
// Проверять, вводить в свободной форме и искать по индексу можем только российские адреса.
Элементы.ПроверитьЗаполнениеАдреса.Доступность = ЭтоНациональныйАдрес;
Элементы.ЗаполнитьПоПочтовомуИндексу.Доступность = ЭтоНациональныйАдрес;
Элементы.ЗаполнитьПоПочтовомуИндексуВсеДействия.Доступность = ЭтоНациональныйАдрес;
Если МеждународныйФорматАдреса Тогда
Элементы.ПроверитьЗаполнениеАдреса.Видимость = Ложь;
Элементы.АдресныйКлассификаторУстарел.Видимость = Ложь;
КонецЕсли;
ОпределениеРежимаВводаАдреса();
КонецПроцедуры
@@ -1714,36 +1743,48 @@
&НаКлиенте
Процедура ОпределениеРежимаВводаАдреса()
Если Страна = ОсновнаяСтрана Тогда
// Загружать можем только национальные адреса.
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина;
Элементы.ГруппаИндекса.Видимость = Истина;
Если ЕстьПравоЗагружатьКлассификатор Тогда
КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор");
Если КнопкаПанели <> Неопределено Тогда
Элементы.ЗагрузитьКлассификатор.Доступность = Истина;
Если Не МеждународныйФорматАдреса Тогда
Если Страна = ОсновнаяСтрана Тогда
// Загружать можем только национальные адреса.
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина;
Элементы.ГруппаИндекса.Видимость = Истина;
Если ЕстьПравоЗагружатьКлассификатор Тогда
КнопкаПанели = Элементы.Найти("ЗагрузитьКлассификатор");
Если КнопкаПанели <> Неопределено Тогда
Элементы.ЗагрузитьКлассификатор.Доступность = Истина;
КонецЕсли;
КонецЕсли;
Иначе
Если НЕ ЭтоСтранаУчастникЕАЭС(Страна) Тогда
// Прочие страны
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь;
Элементы.СтруктураИностранныйАдреса.Видимость = Ложь;
Элементы.ГруппаИндекса.Видимость = Ложь;
РазрешитьВводАдресаВСвободнойФорме = Истина;
Иначе
// Страны ЕАЭС
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина;
Если РазрешитьВводАдресаВСвободнойФорме Тогда
Элементы.СтруктураИностранныйАдреса.Видимость = Ложь;
Элементы.ГруппаИндекса.Видимость = Ложь;
Иначе
Элементы.СтруктураИностранныйАдреса.Видимость = Истина;
Элементы.ГруппаИндекса.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если НЕ ЭтоСтранаУчастникЕАЭС(Страна) Тогда
// Прочие страны
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Ложь;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Ложь;
Элементы.СтруктураИностранныйАдреса.Видимость = Ложь;
Элементы.ГруппаИндекса.Видимость = Ложь;
РазрешитьВводАдресаВСвободнойФорме = Истина;
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина;
Если РазрешитьВводАдресаВСвободнойФорме Тогда
Элементы.СтруктураМеждународныеАдреса.Видимость = Ложь;
Элементы.ГруппаИндекса.Видимость = Ложь;
Иначе
// Страны ЕАЭС
Элементы.ВвестиАдресВСвободнойФорме.Доступность = Истина;
Элементы.ВвестиАдресВСвободнойФормеВсеДействия.Доступность = Истина;
Если РазрешитьВводАдресаВСвободнойФорме Тогда
Элементы.СтруктураИностранныйАдреса.Видимость = Ложь;
Элементы.ГруппаИндекса.Видимость = Ложь;
Иначе
Элементы.СтруктураИностранныйАдреса.Видимость = Истина;
Элементы.ГруппаИндекса.Видимость = Истина;
КонецЕсли;
Элементы.СтруктураМеждународныеАдреса.Видимость = Истина;
Элементы.ГруппаИндекса.Видимость = Истина;
КонецЕсли;
КонецЕсли;
@@ -1757,6 +1798,7 @@
КонецЕсли;
СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме);
СообщениеОНеобходимостиОбновленияКлассификатора(Неопределено);
КонецПроцедуры
@@ -2902,13 +2944,18 @@
&НаКлиенте
Процедура СостояниеВводаПредставленияАдреса(РедактироватьПредставлениеАдреса, ФормироватьПредставление = Истина)
Если Страна = ОсновнаяСтрана Тогда
Элемент = Элементы.ПредставлениеАдреса;
// Проверять адрес, введенный вручную нельзя.
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не РедактироватьПредставлениеАдреса;
Если МеждународныйФорматАдреса Тогда
Элемент = Элементы.ПредставлениеМеждународногоАдреса;
Иначе
Элемент = Элементы.ПредставлениеИностранногоАдреса;
Если Страна = ОсновнаяСтрана Тогда
Элемент = Элементы.ПредставлениеАдреса;
// Проверять адрес, введенный вручную нельзя.
Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не РедактироватьПредставлениеАдреса;
Иначе
Элемент = Элементы.ПредставлениеИностранногоАдреса;
КонецЕсли;
КонецЕсли;
Элемент.ТолькоПросмотр = Не РедактироватьПредставлениеАдреса;
Если РедактироватьПредставлениеАдреса Тогда
Элемент.ЦветФона = АвтоЦвет;
@@ -2942,7 +2989,9 @@
Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
Элементы.ПредставлениеАдреса.Заголовок = НСтр("ru='Адрес в свободной форме'");
Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.Нет;
Если Страна <> ОсновнаяСтрана Тогда
Если МеждународныйФорматАдреса Тогда
ТекущийЭлемент = Элементы.ПредставлениеМеждународногоАдреса;
ИначеЕсли Страна <> ОсновнаяСтрана Тогда
ТекущийЭлемент = Элементы.ПредставлениеИностранногоАдреса;
Иначе
ТекущийЭлемент = Элементы.ПредставлениеАдреса;
@@ -2950,8 +2999,10 @@
Иначе
Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элементы.ПредставлениеАдреса.Заголовок = "";
Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
Если Страна = ОсновнаяСтрана Тогда
Элементы.СтранаАдреса.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
Если МеждународныйФорматАдреса Тогда
ТекущийЭлемент = Элементы.НаселенныйПунктМеждународныеАдреса;
ИначеЕсли Страна = ОсновнаяСтрана Тогда
ТекущийЭлемент = Элементы.НаселенныйПункт;
Иначе
ТекущийЭлемент = Элементы.НаселенныйПунктИностранныйАдреса;
@@ -2972,7 +3023,7 @@
Для Каждого Элемент Из Группа.ПодчиненныеЭлементы Цикл
ТипЭлемента = ТипЗнч(Элемент);
Если ТипЭлемента = Тип("ГруппаФормы") Тогда
Если Элемент <> Элементы.ИностранныйАдрес Тогда
Если Элемент <> Элементы.ИностранныйАдрес И Элемент <> Элементы.МеждународныйАдрес Тогда
СостояниеГруппыВвода(Элемент, Режим);
КонецЕсли;
@@ -2382,6 +2382,19 @@
КонецЕсли;
КонецЕсли;
Если ФлагиПроверки.МеждународныйФорматАдреса Тогда
СтрокаПроверки = СтрЗаменить(АдресРФ, XDTOАдрес.Страна, "");
Если Не СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(СтрокаПроверки, Ложь, "1234567890") Тогда
ТекстОшибки = НСтр("ru = 'Адрес в международном формате должен быть набран латиницей.'");
Если РезультатГруппами Тогда
Результат.Добавить(Новый Структура("Поля, ТипОшибки, Сообщение", Новый Массив,
"НеТолькоЛатиницаВАдресеМеждународногоФормата", ТекстОшибки));
Иначе
Результат.Добавить("/", ТекстОшибки).Пометка = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецЕсли;
@@ -793,46 +793,6 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ОписаниеПотоков</name>
<title>
<key>ru</key>
<value>Описание потоков</value>
</title>
<id>19</id>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:ValueListExtInfo">
<itemValueType/>
</extInfo>
</attributes>
<attributes>
<name>МаксимальноПотоков</name>
<title>
<key>ru</key>
<value>Максимально потоков</value>
</title>
<id>20</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>Коробка</name>
<title>
@@ -865,6 +825,23 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ИдентификаторЗадания</name>
<title>
<key>ru</key>
<value>Идентификатор задания</value>
</title>
<id>23</id>
<valueType>
<types>UUID</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<parameters>
<name>ПриЗапускеКлиентскогоПриложения</name>
<valueType>
@@ -24,25 +24,6 @@
КлиентСервер = Не ОбщегоНазначения.ИнформационнаяБазаФайловая();
Коробка = Не ОбщегоНазначения.РазделениеВключено();
ПараметрыЗапускаПрограммы = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска");
ПараметрыЗапускаМассивом = СтрРазделить(ПараметрыЗапускаПрограммы, ";");
Для Каждого Параметр Из ПараметрыЗапускаМассивом Цикл
Если СтрНайти(Параметр, "ЧислоПотоковОбновления") > 0 Тогда
ПотокиОбновления = СтрРазделить(Параметр, "=");
Попытка
МаксимальноПотоков = Число(ПотокиОбновления[1]);
Исключение
ТекстИсключения = НСтр("ru = 'Неправильно указан параметр запуска программы ""ЧислоПотоковОбновления"".
|Правильный формат - ""ЧислоПотоковОбновления=Х"", где ""Х"" - максимальное количество потоков обновления.'");
ВызватьИсключение ТекстИсключения;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если МаксимальноПотоков = 0 Тогда
МаксимальноПотоков = 8;
КонецЕсли;
ПрогрессВыполнения = 5;
РежимОбновленияДанных = ОбновлениеИнформационнойБазыСлужебный.РежимОбновленияДанных();
@@ -390,14 +371,16 @@
Процедура ОбработатьОшибкуПравилРегистрации(СообщенияПользователю)
// См. ОбменДаннымиСобытия.ОбработатьОшибкуПравилРегистрации
Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл
НачалоСтроки = "ОбменДанными=";
Если СтрНачинаетсяС(СообщениеПользователю.Текст, НачалоСтроки) Тогда
ИмяПланаОбмена = Сред(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки) + 1);
КонецЕсли;
КонецЦикла;
Если СообщенияПользователю <> Неопределено Тогда
Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл
НачалоСтроки = "ОбменДанными=";
Если СтрНачинаетсяС(СообщениеПользователю.Текст, НачалоСтроки) Тогда
ИмяПланаОбмена = Сред(СообщениеПользователю.Текст, СтрДлина(НачалоСтроки) + 1);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
@@ -511,6 +494,7 @@
ЗаполнитьЗначенияСвойств(РезультатВыполненияОбновления, СостояниеРегистрации);
ВыполнитьОбработкуОповещения(ОбработкаЗавершения, РезультатВыполненияОбновления);
Иначе
ИдентификаторЗадания = СостояниеРегистрации.ИдентификаторЗадания;
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков", 5);
КонецЕсли;
@@ -592,8 +576,6 @@
ХодРегистрации.Вставить("ВсегоПроцедур", ОписаниеПроцедур.Количество());
ХодРегистрации.Вставить("ВыполненоПроцедур", 0);
ОписаниеПотоков = Новый СписокЗначений;
// Снятие блокировки информационной базы и выполнение регистрации на плане обмена.
ОбновлениеИнформационнойБазыСлужебный.РазблокироватьИБ(БлокировкаИБ);
@@ -617,82 +599,35 @@
&НаСервере
Функция ЗапуститьПроцедурыЗаполненияОтложенныхОбработчиков()
РезультатПроверки = Новый Структура;
РезультатПроверки.Вставить("Статус", "");
РезультатПроверки.Вставить("КраткоеПредставлениеОшибки", "");
РезультатПроверки.Вставить("ПодробноеПредставлениеОшибки", "");
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Управление многопоточной регистрацией данных отложенного обновления'");
ЕстьАктивныеПотоки = Ложь;
// Корректировка количества потоков
СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы();
КоличествоПроцедурЗаполнения = СведенияОбОбновлении.ОписаниеПроцедурЗаполнения.Количество();
Если КоличествоПроцедурЗаполнения < МаксимальноПотоков Тогда
МаксимальноПотоков = КоличествоПроцедурЗаполнения;
КонецЕсли;
ИмяПроцедуры = "ОбновлениеИнформационнойБазыСлужебный.ЗапускРегистрацииДанныхОтложенногоОбновления";
РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, УникальныйИдентификатор, ПараметрыВыполнения);
Для ТекущийПоток = 1 По МаксимальноПотоков Цикл
Результат = ЗапускЗадания();
ЗаполнитьЗначенияСвойств(РезультатПроверки, Результат);
Если Результат.Статус = "Ошибка" Тогда
ОтменитьЗаданияПриОшибке();
Возврат РезультатПроверки;
ИначеЕсли Результат.Статус = "Выполняется" Тогда
ЕстьАктивныеПотоки = Истина;
КонецЕсли;
ОписаниеПотока = Новый Структура;
ОписаниеПотока.Вставить("ИдентификаторЗадания", Результат.ИдентификаторЗадания);
ОписаниеПотока.Вставить("Статус", Результат.Статус);
ОписаниеПотоков.Добавить(ОписаниеПотока);
КонецЦикла;
Если ЕстьАктивныеПотоки Тогда
РезультатПроверки.Статус = "Выполняется";
Иначе
РезультатПроверки.Статус = "Выполнено";
ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления();
КонецЕсли;
Возврат РезультатПроверки;
Возврат ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков(РезультатВыполнения);
КонецФункции
&НаСервере
Функция ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков()
Функция ПроверитьПроцедурыЗаполненияОтложенныхОбработчиков(РезультатВыполненияУправляющегоФЗ = Неопределено)
РезультатПроверки = Новый Структура;
РезультатПроверки.Вставить("Статус", "");
РезультатПроверки.Вставить("КраткоеПредставлениеОшибки", "");
РезультатПроверки.Вставить("ПодробноеПредставлениеОшибки", "");
Если РезультатВыполненияУправляющегоФЗ = Неопределено Тогда
РезультатВыполненияУправляющегоФЗ = ДлительныеОперации.ОперацияВыполнена(ИдентификаторЗадания);
КонецЕсли;
ЗаполнениеДанныхЗавершено = Истина;
Для Каждого ЭлементОписаниеПотока Из ОписаниеПотоков Цикл
ОписаниеПотока = ЭлементОписаниеПотока.Значение;
Если ОписаниеПотока.Статус = "Выполнено" Тогда
Продолжить;
КонецЕсли;
ЗаполнениеДанныхЗавершено = Ложь;
Результат = ПроверитьПроцедуруЗаполнения(ОписаниеПотока);
Если Результат.Статус = "Ошибка" Тогда
ОтменитьЗаданияПриОшибке();
ЗаполнитьЗначенияСвойств(РезультатПроверки, Результат);
Возврат РезультатПроверки;
КонецЕсли;
КонецЦикла;
СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы();
Статус = РезультатВыполненияУправляющегоФЗ.Статус;
Если ЗаполнениеДанныхЗавершено Тогда
РезультатПроверки.Статус = "Выполнено";
Если Статус = "Выполнено" Тогда
ОбновлениеИнформационнойБазыСлужебный.ОтметитьРегистрациюОтложенныхОбработчиковОбновления();
Иначе
РезультатПроверки.Статус = "Выполняется";
ИначеЕсли Статус = "Ошибка" Или Статус = "Отменено" Тогда
ОбновлениеИнформационнойБазыСлужебный.ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков);
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
Возврат РезультатВыполненияУправляющегоФЗ;
КонецЕсли;
// Обновление прогресса.
СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы();
ВыполненоПроцедур = 0;
Для Каждого ЭлементОписаниеПроцедуры Из СведенияОбОбновлении.ОписаниеПроцедурЗаполнения Цикл
ОписаниеПроцедуры = ЭлементОписаниеПроцедуры.Значение;
@@ -708,55 +643,10 @@
КонецЕсли;
ПрогрессВыполнения = ПрогрессВыполнения + ПрибавкаПрогресса;
Возврат РезультатПроверки;
Возврат РезультатВыполненияУправляющегоФЗ;
КонецФункции
&НаСервере
Функция ПроверитьПроцедуруЗаполнения(ОписаниеПотока)
Результат = ДлительныеОперации.ОперацияВыполнена(ОписаниеПотока.ИдентификаторЗадания);
Если Результат.Статус = "Выполнено" Тогда
ОписаниеПотока.Статус = "Выполнено";
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ЗапускЗадания()
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Фоновая регистрация данных отложенного обновления'");
ПараметрыВыполнения.ОжидатьЗавершение = 0;
Результат = ДлительныеОперации.ВыполнитьВФоне("ОбновлениеИнформационнойБазыСлужебный.ЗапускРегистрацииДанныхОтложенногоОбновления",
Неопределено, ПараметрыВыполнения);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ОтменитьЗаданияПриОшибке()
Если ОписаниеПотоков.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого ЭлементОписаниеПотока Из ОписаниеПотоков Цикл
ОписаниеПотока = ЭлементОписаниеПотока.Значение;
Если ОписаниеПотока.Статус = "Выполнено" Тогда
Продолжить;
КонецЕсли;
ДлительныеОперации.ОтменитьВыполнениеЗадания(ОписаниеПотока.ИдентификаторЗадания);
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Общие процедуры для всех этапов.
@@ -810,31 +810,146 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ПриоритетОбновления</name>
<id>177</id>
<items xsi:type="form:FormGroup">
<name>ГруппаПриоритет</name>
<id>199</id>
<items xsi:type="form:FormField">
<name>ПриоритетОбновления</name>
<id>177</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПриоритетОбновления</segments>
</dataPath>
<toolTipRepresentation>None</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>ПриоритетОбновленияПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ПриоритетОбновленияРасширеннаяПодсказка</name>
<id>179</id>
<title>
<key>ru</key>
<value>&lt;b>• &lt;/>&lt;b>Работа пользователей&lt;/> - данные обрабатываются медленнее, но меньше нагрузка на сервер и влияние на работу пользователей в программе.
&lt;b>• &lt;/>&lt;b>Обработка данных&lt;/> - выше скорость обработки данных, но выше нагрузка на сервер, а так же существенное замедление работы пользователей в программе. Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.</value>
</title>
<formatted>true</formatted>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПриоритетОбновленияКонтекстноеМеню</name>
<id>178</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">
<choiceList>
<presentation>
<key>ru</key>
<value>Работа пользователей</value>
</presentation>
<value xsi:type="core:StringValue">
<value>РаботаПользователей</value>
</value>
</choiceList>
<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>201</id>
<title>
<key>ru</key>
<value>потоками</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>КоличествоПотоковОбновленияИнформационнойБазы</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<toolTipRepresentation>Button</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>КоличествоПотоковОбновленияИнформационнойБазыПриИзменении</name>
</handlers>
<extendedTooltip>
<name>КоличествоПотоковОбновленияИнформационнойБазыРасширеннаяПодсказка</name>
<id>203</id>
<title>
<key>ru</key>
<value>&lt;b>• &lt;/>&lt;b>Работа пользователей&lt;/> - данные обрабатываются медленнее, но меньше нагрузка на сервер и влияние на работу пользователей в программе.
&lt;b>• &lt;/>&lt;b>Обработка данных&lt;/> - выше скорость обработки данных, но выше нагрузка на сервер, а так же существенное замедление работы пользователей в программе. Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.
&lt;b>• Количество потоков&lt;/> - это количество одновременно выполняющихся обработчиков обновления. Рекомендуемое значение равно количеству ядер процессора сервера (следует учитывать требования назначения функциональности для сервиса заданий). Значение по умолчанию равно 8.</value>
</title>
<formatted>true</formatted>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КоличествоПотоковОбновленияИнформационнойБазыКонтекстноеМеню</name>
<id>202</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>
<minValue xsi:type="core:NumberValue">
<value>1</value>
</minValue>
<textSize>Normal</textSize>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПриоритетОбновления</segments>
</dataPath>
<toolTipRepresentation>Button</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>ПриоритетОбновленияПриИзменении</name>
</handlers>
<title>
<key>ru</key>
<value>Приоритет</value>
</title>
<extendedTooltip>
<name>ПриоритетОбновленияРасширеннаяПодсказка</name>
<id>179</id>
<title>
<key>ru</key>
<value>&lt;b>• &lt;/>&lt;b>Работа пользователей&lt;/> - данные обрабатываются медленнее, но меньше нагрузка на сервер и влияние на работу пользователей в программе.
&lt;b>• &lt;/>&lt;b>Обработка данных&lt;/> - выше скорость обработки данных, но выше нагрузка на сервер, а так же существенное замедление работы пользователей в программе. Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.</value>
</title>
<formatted>true</formatted>
<name>ГруппаПриоритетРасширеннаяПодсказка</name>
<id>200</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -842,36 +957,13 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПриоритетОбновленияКонтекстноеМеню</name>
<id>178</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">
<choiceList>
<presentation>
<key>ru</key>
<value>Работа пользователей</value>
</presentation>
<value xsi:type="core:StringValue">
<value>РаботаПользователей</value>
</value>
</choiceList>
<choiceList>
<presentation>
<key>ru</key>
<value>Обработка данных</value>
</presentation>
<value xsi:type="core:StringValue">
<value>ОбработкаДанных</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Decoration">
@@ -1798,6 +1890,27 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>КоличествоПотоковОбновленияИнформационнойБазы</name>
<title>
<key>ru</key>
<value>Количество потоков обновления информационной базы</value>
</title>
<id>10</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>5</precision>
<nonNegative>true</nonNegative>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ВыполнитьОбновление</name>
<title>
@@ -25,6 +25,7 @@
КонецЕсли;
// Зачитываем значение констант.
ПолучитьКоличествоПотоковОбновленияИнформационнойБазы();
СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы();
ПриоритетОбновления = ?(СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление"), "ОбработкаДанных", "РаботаПользователей");
ВремяОкончанияОбновления = СведенияОбОбновлении.ВремяОкончанияОбновления;
@@ -73,9 +74,12 @@
КонецЕсли;
УстановитьВидимостьКоличестваПотоковОбновленияИнформационнойБазы();
Если Не ИБФайловая Тогда
ОбновлениеЗавершено = Ложь;
ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено);
УстановитьДоступностьКоличестваПотоковОбновленияИнформационнойБазы(ЭтотОбъект);
Если ОбновлениеЗавершено Тогда
ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении);
@@ -106,7 +110,7 @@
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ГиперссылкаОсновноеОбновление.Видимость = Ложь;
Элементы.ПриоритетОбновления.Видимость = Ложь;
Элементы.ГруппаПриоритет.Видимость = Ложь;
КонецЕсли;
ОбработатьРезультатОбновленияНаСервере();
@@ -191,7 +195,17 @@
&НаКлиенте
Процедура ПриоритетОбновленияПриИзменении(Элемент)
УстановитьПриоритетОбновления();
УстановитьДоступностьКоличестваПотоковОбновленияИнформационнойБазы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура КоличествоПотоковОбновленияИнформационнойБазыПриИзменении(Элемент)
УстановитьКоличествоПотоковОбновленияИнформационнойБазы();
КонецПроцедуры
#КонецОбласти
@@ -281,6 +295,13 @@
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоПотоковОбновленияИнформационнойБазы()
Константы.КоличествоПотоковОбновленияИнформационнойБазы.Установить(КоличествоПотоковОбновленияИнформационнойБазы);
КонецПроцедуры
&НаКлиенте
Процедура ЗапуститьОтложенноеОбновление()
@@ -528,4 +549,36 @@
КонецПроцедуры
&НаСервере
Процедура ПолучитьКоличествоПотоковОбновленияИнформационнойБазы()
Если ПравоДоступа("Чтение", Метаданные.Константы.КоличествоПотоковОбновленияИнформационнойБазы) Тогда
КоличествоПотоковОбновленияИнформационнойБазы =
ОбновлениеИнформационнойБазыСлужебный.КоличествоПотоковОбновленияИнформационнойБазы();
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКоличестваПотоковОбновленияИнформационнойБазы(Форма)
Доступно = (Форма.ПриоритетОбновления = "ОбработкаДанных");
Форма.Элементы.КоличествоПотоковОбновленияИнформационнойБазы.Доступность = Доступно;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКоличестваПотоковОбновленияИнформационнойБазы()
РазрешеноМногопоточноеОбновление = ОбновлениеИнформационнойБазы.РазрешеноМногопоточноеОбновление();
Элементы.КоличествоПотоковОбновленияИнформационнойБазы.Видимость = РазрешеноМногопоточноеОбновление;
Если РазрешеноМногопоточноеОбновление Тогда
Элементы.ПриоритетОбновления.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
Иначе
Элементы.ПриоритетОбновления.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -547,7 +547,7 @@
&НаСервере
Процедура ЗаполнитьДеревоОбрабатываемыхОбъектов(СохраненныеНастройки, ОбработкаОбъект)
ОбрабатываемыеМетаданные = ОбрабатываемыеМетаданные();
ОбрабатываемыеМетаданные = ЗащитаПерсональныхДанных.ОбрабатываемыеМетаданные();
ДеревоОбрабатываемыхОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты");
ПараметрыПроцедуры = Новый Структура;
@@ -579,27 +579,6 @@
КонецПроцедуры
&НаСервере
Функция ОбрабатываемыеМетаданные()
Структура = Новый Структура;
Структура.Вставить("Константы", НСтр("ru = 'Константы'"));
Структура.Вставить("Справочники", НСтр("ru = 'Справочники'"));
Структура.Вставить("Документы", НСтр("ru = 'Документы'"));
Структура.Вставить("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'"));
Структура.Вставить("ПланыСчетов", НСтр("ru = 'Планы счетов'"));
Структура.Вставить("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'"));
Структура.Вставить("РегистрыСведений", НСтр("ru = 'Регистры сведений'"));
Структура.Вставить("РегистрыНакопления", НСтр("ru = 'Регистры накопления'"));
Структура.Вставить("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'"));
Структура.Вставить("РегистрыРасчета", НСтр("ru = 'Регистры расчета'"));
Структура.Вставить("БизнесПроцессы", НСтр("ru = 'Бизнес процессы'"));
Структура.Вставить("Задачи", НСтр("ru = 'Задачи'"));
Возврат Структура;
КонецФункции
&НаКлиенте
Процедура ИзменитьДочерниеЭлементы(ОбрабатываемыеЭлементы, ЗначениеПометки)
@@ -20,14 +20,22 @@
ДеревоОбрабатываемыхОбъектов = Параметры.ДеревоОбрабатываемыхОбъектов;
ПравилаОбработки = Параметры.ПравилаОбработки;
ПараметрыОтбора = Неопределено;
Если Не Параметры.Свойство("ПараметрыОтбора", ПараметрыОтбора) Тогда
ПараметрыОтбора = ЗащитаПерсональныхДанных.ПараметрыОтбораСкрываемыхДанных();
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПравилаОбработки);
Для Каждого ТипМетаданных Из ДеревоОбрабатываемыхОбъектов.Строки Цикл
Если ТипМетаданных.Пометка = 0 Тогда
Продолжить;
КонецЕсли;
Для Каждого ОбъектМетаданных Из ТипМетаданных.Строки Цикл
Если ОбъектМетаданных.Пометка = 0 Тогда
Продолжить;
КонецЕсли;
@@ -38,9 +46,9 @@
КонецЕсли;
Если СтрНайти(ОбъектМетаданных.Тип, "Регистры") > 0 Тогда
ОбработатьРегистры(ОбъектМетаданных);
ОбработатьРегистры(ОбъектМетаданных, ПараметрыОтбора);
Иначе
ОбработатьОбъектМетаданных(ОбъектМетаданных);
ОбработатьОбъектМетаданных(ОбъектМетаданных, ПараметрыОтбора);
КонецЕсли;
КонецЦикла;
@@ -48,16 +56,19 @@
КонецЦикла;
ИмяРегистраВерсииОбъектов = "ВерсииОбъектов";
Если Метаданные.НайтиПоПолномуИмени("РегистрСведений." + ИмяРегистраВерсииОбъектов) <> Неопределено Тогда
Если Метаданные.НайтиПоПолномуИмени("РегистрСведений." + ИмяРегистраВерсииОбъектов) <> Неопределено
И Не ЗначениеЗаполнено(ПараметрыОтбора.Субъекты)Тогда
НаборЗаписей = РегистрыСведений[ИмяРегистраВерсииОбъектов].СоздатьНаборЗаписей();
НаборЗаписей.Записать();
КонецЕсли;
ПоместитьВоВременноеХранилище(Истина, АдресХранилища);
КонецПроцедуры
Процедура ОбработатьРегистры(ОбъектМетаданных)
Процедура ОбработатьРегистры(ОбъектМетаданных, ПараметрыОтбора)
Если ОбъектМетаданных.Тип = "РегистрыСведений" Тогда
Коллекция = РегистрыСведений;
@@ -72,7 +83,7 @@
Регистр = Коллекция[ОбъектМетаданных.Имя];
НаборЗаписейРегистра = Регистр.СоздатьНаборЗаписей();
МетаданныеРегистра = НаборЗаписейРегистра.Метаданные();
Если ОбъектМетаданных.Тип = "РегистрыСведений" Тогда
РегистрПериодический = (МетаданныеРегистра.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
РежимЗаписиНезависимый = (МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый);
@@ -80,27 +91,16 @@
// Периодический и независимый режим записи.
Если РегистрПериодический И РежимЗаписиНезависимый Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИмяРегистраОбъект.Период КАК Период
|ИЗ
| " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписейРегистра.Отбор.Период.Использование = Истина;
НаборЗаписейРегистра.Отбор.Период.Значение = Выборка.Период;
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЦикла;
ПараметрыОтбора.ОсновноеПолеОтбора = "Период";
ОбработатьНаборЗаписейСОтбором(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
// Непериодический и режим записи независимый.
ИначеЕсли РежимЗаписиНезависимый Тогда
ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя();
КоличествоЗаписей = КоличествоЗаписейРегистра(ПолноеИмяРегистра);
КоличествоЗаписей = КоличествоЗаписейРегистра(ОбъектМетаданных.ПолноеИмя);
Если КоличествоЗаписей > 100000 Тогда
ШаблонЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
@@ -134,11 +134,14 @@
ОписанияИзмерений.Колонки.Добавить("ВышеПорога");
ОписанияИзмерений.Колонки.Добавить("Максимум");
ОписанияИзмерений.Колонки.Добавить("Всего");
ЕстьИзмеренияНижеПорога = Ложь;
Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл
Запрос = Новый Запрос;
Запрос.Текст = ШаблонЗапроса;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ПолноеИмяРегистра);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ОбъектМетаданных.ПолноеИмя);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%2", Измерение.Имя);
Результат = Запрос.Выполнить().Выгрузить();
@@ -147,9 +150,11 @@
Строка.ВышеПорога = Результат[0].ВышеПорога;
Строка.Максимум = Результат[0].Максимум;
Строка.Всего = Результат[1].Всего;
Если Строка.ВышеПорога = 0 Тогда
ЕстьИзмеренияНижеПорога = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьИзмеренияНижеПорога Тогда
@@ -158,61 +163,38 @@
ОписанияИзмерений.Сортировать("Максимум Возр");
КонецЕсли;
ОптимальноеИзмерение = ОписанияИзмерений[0].Измерение;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Регистр.%2 КАК ЗначениеИзмерения,
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| %1 КАК Регистр
|
|СГРУППИРОВАТЬ ПО
| Регистр.%2";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ПолноеИмяРегистра);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%2", ОптимальноеИзмерение);
ПараметрыОтбора.ОсновноеПолеОтбора = ОписанияИзмерений[0].Измерение;
ОбработатьНаборЗаписейСОтбором(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписейРегистра.Отбор[ОптимальноеИзмерение].Установить(Выборка.ЗначениеИзмерения);
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЦикла;
Иначе
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
Если ЗначениеЗаполнено(ПараметрыОтбора.Субъекты) Тогда
ОбработатьНаборЗаписейСОтборомСубъекта(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
Иначе
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЕсли;
КонецЕсли;
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИмяРегистраОбъект.Регистратор КАК Регистратор
|ИЗ
| " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор);
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЦикла;
Если ЗначениеЗаполнено(ПараметрыОтбора.Субъекты) Тогда
ОбработатьНаборЗаписейСОтборомПоНайденнымСсылкам(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
Иначе
ПараметрыОтбора.ОсновноеПолеОтбора = "Регистратор";
ОбработатьНаборЗаписейСОтбором(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
КонецЕсли;
КонецЕсли;
Иначе // Остальные регистры.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИмяРегистраОбъект.Регистратор КАК Регистратор
|ИЗ
| " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор);
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЦикла;
Иначе
// Остальные регистры.
Если ЗначениеЗаполнено(ПараметрыОтбора.Субъекты) Тогда
ОбработатьНаборЗаписейСОтборомПоНайденнымСсылкам(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
Иначе
ПараметрыОтбора.ОсновноеПолеОтбора = "Регистратор";
ОбработатьНаборЗаписейСОтбором(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -235,15 +217,120 @@
КонецФункции
Процедура ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных)
Процедура ОбработатьНаборЗаписейСОтборомПоНайденнымСсылкам(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора)
МетаданныеРегистра = НаборЗаписейРегистра.Метаданные();
МассивОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МетаданныеРегистра);
Результат = НайтиПоСсылкам(ПараметрыОтбора.Субъекты, Новый Массив, МассивОбъектов, Новый Массив);
Регистраторы = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат.ВыгрузитьКолонку("Данные"));
Для Каждого Регистратор Из Регистраторы Цикл
НаборЗаписейРегистра.Отбор.Регистратор.Установить(Регистратор);
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора, Истина);
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьНаборЗаписейСОтбором(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора)
Субъекты = ПараметрыОтбора.Субъекты;
ИмяПоляОтбора = ПараметрыОтбора.ОсновноеПолеОтбора;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИмяРегистраОбъект.ИмяПоляОтбора КАК ИмяПоляОтбора
|ИЗ
| ПолноеИмяРегистра КАК ИмяРегистраОбъект";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПолноеИмяРегистра", ОбъектМетаданных.ПолноеИмя);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИмяПоляОтбора", ИмяПоляОтбора);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписейРегистра.Отбор[ИмяПоляОтбора].Установить(Выборка[ИмяПоляОтбора]);
Если ЗначениеЗаполнено(Субъекты) Тогда
ОбработатьНаборЗаписейСОтборомСубъекта(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора);
Иначе
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьНаборЗаписейСОтборомСубъекта(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора)
МетаданныеРегистра = НаборЗаписейРегистра.Метаданные();
Субъекты = ПараметрыОтбора.Субъекты;
ТипСубъектов = ПараметрыОтбора.ТипСубъектов;
ИменаИзмеренийСТипомСубъекта = ИменаИзмеренийРегистраПоТипу(МетаданныеРегистра, ТипСубъектов);
Для Каждого ИмяИзмерения Из ИменаИзмеренийСТипомСубъекта Цикл
Для Каждого Субъект Из Субъекты Цикл
НаборЗаписейРегистра.Отбор[ИмяИзмерения].Установить(Субъект);
ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, , Истина);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных, ПараметрыОтбора = Неопределено, РегистрироватьНаУзлах = Ложь)
НаборЗаписейРегистра.Прочитать();
ОбрабатыватьЗаписьПриНаличииСубъекта = Ложь;
Субъекты = Неопределено;
Если ЗначениеЗаполнено(ПараметрыОтбора) Тогда
МетаданныеРегистра = НаборЗаписейРегистра.Метаданные();
Субъекты = ПараметрыОтбора.Субъекты;
ТипСубъектов = ПараметрыОтбора.ТипСубъектов;
ИменаИзмеренийСТипомСубъекта = ИменаИзмеренийРегистраПоТипу(МетаданныеРегистра, ТипСубъектов);
ОбрабатыватьЗаписьПриНаличииСубъекта = ЗначениеЗаполнено(ИменаИзмеренийСТипомСубъекта);
КонецЕсли;
Обработано = Истина;
ВыполнитьЗаписьОбъекта = Ложь;
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
Если ЗначениеЗаполнено(Субъекты) Тогда
Если ОбрабатыватьЗаписьПриНаличииСубъекта Тогда
СубъектВЗаписи = Ложь;
Для Каждого ИмяИзмерения Из ИменаИзмеренийСТипомСубъекта Цикл
ТекущийСубъект = ЗаписьРегистра[ИмяИзмерения];
Если Субъекты.Найти(ТекущийСубъект) <> Неопределено Тогда
СубъектВЗаписи = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не СубъектВЗаписи Тогда
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Для Каждого ГруппаСвойствОбъекта Из ОбъектМетаданных.Строки Цикл
Если ГруппаСвойствОбъекта.Пометка = 0 Тогда
Продолжить;
КонецЕсли;
@@ -280,26 +367,54 @@
КонецЦикла;
Если ВыполнитьЗаписьОбъекта Тогда
ЗаписатьДанные(НаборЗаписейРегистра);
ЗаписатьДанные(НаборЗаписейРегистра, РегистрироватьНаУзлах);
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьОбъектМетаданных(ОбъектМетаданных)
Процедура ОбработатьОбъектМетаданных(ОбъектМетаданных, ПараметрыОтбора)
ОбработкаПорциями = Ложь;
Ссылка = "";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| ОбъектМетаданных.Ссылка
|ИЗ
| " + ОбъектМетаданных.ПолноеИмя + " КАК ОбъектМетаданных
|ГДЕ
| ОбъектМетаданных.Ссылка > &Ссылка
|УПОРЯДОЧИТЬ ПО
| ОбъектМетаданных.Ссылка";
Результат = Запрос.Выполнить().Выгрузить();
Субъекты = ПараметрыОтбора.Субъекты;
ТипСубъектов = ПараметрыОтбора.ТипСубъектов;
ИменаРеквизитовСТипомСубъекта = "";
РеквизитыПроверены = Ложь;
ВключеноВерсионирование = Ложь;
Если ЗначениеЗаполнено(Субъекты) Тогда
Объект = Метаданные.НайтиПоПолномуИмени(ОбъектМетаданных.ПолноеИмя);
МассивОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект);
Результат = НайтиПоСсылкам(Субъекты, Новый Массив, МассивОбъектов, Новый Массив);
Результат.Свернуть("Данные");
Результат.Колонки.Данные.Имя = "Ссылка";
Если Результат.Количество() = 0 И Объект = Субъекты[0].Метаданные() Тогда
Для Каждого Субъект Из Субъекты Цикл
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Ссылка = Субъект;
КонецЦикла;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
ВключеноВерсионирование = МодульВерсионированиеОбъектов.ВключеноВерсионированиеОбъекта(ОбъектМетаданных.ПолноеИмя);
КонецЕсли;
Иначе
ОбработкаПорциями = Истина;
Результат = ДанныеОбъектаМетаданных(ОбъектМетаданных, Ссылка);
КонецЕсли;
Пока Истина Цикл
@@ -312,6 +427,12 @@
Обработано = Истина;
ВыполнитьЗаписьОбъекта = Ложь;
ОбрабатываемыйОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
Если ЗначениеЗаполнено(Субъекты) И Не РеквизитыПроверены Тогда
ИменаРеквизитовСТипомСубъекта = ОбщегоНазначения.ИменаРеквизитовПоТипу(СтрокаРезультата.Ссылка, ТипСубъектов);
РеквизитыПроверены = Истина;
КонецЕсли;
Для Каждого ГруппаСвойствОбъекта Из ОбъектМетаданных.Строки Цикл
Если ГруппаСвойствОбъекта.Пометка = 0 Тогда
Продолжить;
@@ -323,9 +444,42 @@
КонецЕсли;
Если ГруппаСвойствОбъекта.Тип = "ТабличнаяЧасть" Тогда
ОбрабатыватьТЧПриНаличииСубъекта = Ложь;
ОбрабатываемыеСвойства = ОбрабатываемыйОбъект[ГруппаСвойствОбъекта.Имя];
Если ЗначениеЗаполнено(Субъекты) И ПустаяСтрока(ИменаРеквизитовСТипомСубъекта) Тогда
ИменаРеквизитовТЧСТипомСубъекта = ИменаРеквизитовТЧОбъектаПоТипу(ОбрабатываемыйОбъект.Метаданные(), ГруппаСвойствОбъекта.Имя, ТипСубъектов);
ОбрабатыватьТЧПриНаличииСубъекта = ЗначениеЗаполнено(ИменаРеквизитовТЧСТипомСубъекта);
КонецЕсли;
Для Каждого СтрокаТабличнойЧасти Из ОбрабатываемыеСвойства Цикл
Если ЗначениеЗаполнено(Субъекты) Тогда
Если ОбрабатыватьТЧПриНаличииСубъекта Тогда
СубъектВСтроке = Ложь;
Для Каждого ИмяРеквизита Из ИменаРеквизитовТЧСТипомСубъекта Цикл
ТекущийСубъект = СтрокаТабличнойЧасти[ИмяРеквизита];
Если Субъекты.Найти(ТекущийСубъект) <> Неопределено Тогда
СубъектВСтроке = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не СубъектВСтроке Тогда
Продолжить;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Значение = СтрокаТабличнойЧасти[ОбрабатываемоеСвойство.Имя];
ОбработатьСвойство(Значение, ОбрабатываемоеСвойство, Обработано);
Если Обработано Тогда
@@ -333,6 +487,7 @@
КонецЕсли;
ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано;
КонецЦикла;
Иначе
@@ -347,17 +502,52 @@
КонецЦикла;
КонецЦикла;
Если ВыполнитьЗаписьОбъекта Тогда
ЗаписатьДанные(ОбрабатываемыйОбъект);
ЗаписатьДанные(ОбрабатываемыйОбъект, ЗначениеЗаполнено(Субъекты));
КонецЕсли;
Если ЗначениеЗаполнено(Субъекты) И ВключеноВерсионирование Тогда
ИмяРегистраВерсииОбъектов = "ВерсииОбъектов";
НаборЗаписей = РегистрыСведений[ИмяРегистраВерсииОбъектов].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(СтрокаРезультата.Ссылка);
ЗаписатьДанные(НаборЗаписей, Истина);
КонецЕсли;
КонецЦикла;
Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
Если ОбработкаПорциями Тогда
Результат = ДанныеОбъектаМетаданных(ОбъектМетаданных, СтрокаРезультата.Ссылка);
Иначе
Результат.Очистить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ДанныеОбъектаМетаданных(ОбъектМетаданных, ТекущаяСсылка)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ТекущаяСсылка);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| ОбъектМетаданных.Ссылка
|ИЗ
| " + ОбъектМетаданных.ПолноеИмя + " КАК ОбъектМетаданных
|ГДЕ
| ОбъектМетаданных.Ссылка > &Ссылка
|УПОРЯДОЧИТЬ ПО
| ОбъектМетаданных.Ссылка";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции формирования дерева метаданных.
@@ -638,21 +828,39 @@
МодульЗащитаПерсональныхДанных.ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений);
Для Каждого СтрокаСведения Из ТаблицаСведений Цикл
СтрокаОбъекта = ДеревоОбрабатываемыхОбъектов.Строки.Найти(СтрокаСведения.Объект, "ПолноеИмя", Истина);
Если СтрокаОбъекта = Неопределено Тогда
Продолжить;
КонецЕсли;
ПоляДоступа = СтрокаСведения.ПоляДоступа;
МассивПолейДоступа = СтрРазделить(ПоляДоступа, ",");
Для Каждого ПолеДоступа Из МассивПолейДоступа Цикл
ПолеДоступа = СокрЛП(ПолеДоступа);
СтрокаПолеДоступа = СтрокаОбъекта.Строки.Найти(ПолеДоступа, "Имя", Истина);
ЧастиИмениПоляДоступа = СтрРазделить(ПолеДоступа, ".");
Если ЧастиИмениПоляДоступа.Количество() > 1 Тогда
СтрокаТЧ = СтрокаОбъекта.Строки.Найти(ЧастиИмениПоляДоступа[0], "Имя", Истина);
Если СтрокаТЧ = Неопределено Тогда
СтрокаПолеДоступа = Неопределено;
Продолжить;
Иначе
СтрокаПолеДоступа = СтрокаТЧ.Строки.Найти(ЧастиИмениПоляДоступа[1], "Имя", Истина);
КонецЕсли;
Иначе
СтрокаПолеДоступа = СтрокаОбъекта.Строки.Найти(ПолеДоступа, "Имя", Истина);
КонецЕсли;
Если СтрокаПолеДоступа <> Неопределено Тогда
СтрокаПолеДоступа.Пометка = 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Для Каждого ОбрабатываемыйОбъект Из ДеревоОбрабатываемыхОбъектов.Строки Цикл
@@ -954,6 +1162,39 @@
КонецФункции
Функция ИменаРеквизитовТЧОбъектаПоТипу(МетаданныеОбъекта, ИмяТабличнойЧасти, Тип)
ИменаРеквизитов = Новый Массив;
МетаданныеТЧ = МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТабличнойЧасти);
Если МетаданныеТЧ <> Неопределено Тогда
Для Каждого Реквизит Из МетаданныеТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип) Тогда
ИменаРеквизитов.Добавить(Реквизит.Имя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ИменаРеквизитов;
КонецФункции
Функция ИменаИзмеренийРегистраПоТипу(МетаданныеРегистра, Тип)
ИменаИзмерений = Новый Массив;
Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл
Если Измерение.Тип.СодержитТип(Тип) Тогда
ИменаИзмерений.Добавить(Измерение.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаИзмерений;
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -29,6 +29,7 @@
<types>ConstantValueManager.ХранитьФайлыВТомахНаДиске</types>
<types>ConstantValueManager.ИспользоватьШифрование</types>
<types>ConstantValueManager.ИспользоватьЭлектронныеПодписи</types>
<types>ConstantValueManager.ДнейДоСкрытияПерсональныхДанныхСубъектов</types>
<types>ConstantValueManager.ИспользоватьДатуИВремяВСрокахЗадач</types>
<types>ConstantValueManager.ИспользоватьВнешнихПользователей</types>
<types>ConstantValueManager.ИспользуютсяПрофилиБезопасности</types>
@@ -48,5 +49,6 @@
<types>ConstantValueManager.ИспользоватьНесколькоПроизводственныхКалендарей</types>
<types>ConstantValueManager.ИспользоватьВерсионированиеОбъектов</types>
<types>ConstantValueManager.ОтправлятьПисьмаВФорматеHTML</types>
<types>ConstantValueManager.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</types>
</type>
</mdclass:DefinedType>
@@ -9,9 +9,6 @@
<value>Субъект персональных данных</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
<types>CatalogRef.ИдентификаторыОбъектовМетаданных</types>
</type>
</mdclass:DefinedType>
@@ -2853,36 +2853,18 @@
Если ТипЗнч(Результат.Текст) = Тип("Структура") Тогда
РезультатТекст = Результат.Текст.ТекстHTML;
СтруктураВложений = Результат.Текст.СтруктураВложений;
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками;
НужнаКонвертацияИзHTML = Ложь;
Иначе
СтруктураВложений = Новый Структура();
РезультатТекст = Результат.Текст;
Если СтрНачинаетсяС(РезультатТекст , "<!DOCTYPE html") Тогда
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками;
Иначе
Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст;
КонецЕсли;
НужнаКонвертацияИзHTML = СтрНачинаетсяС(РезультатТекст , "<!DOCTYPE html");
КонецЕсли;
Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками Тогда
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(РезультатТекст, СтруктураВложений);
ТекстПисьма = "";
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента;
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент;
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
Иначе
ТекстПисьмаФорматированныйДокумент.Удалить();
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
Объект.ТекстHTML = "";
Объект.Кодировка = "UTF-8";
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст;
ТекстПисьма = РезультатТекст;
Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;
ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст;
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(РезультатТекст, СтруктураВложений);
Если НужнаКонвертацияИзHTML Тогда
РезультатТекст = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
КонецЕсли;
Элементы.ФорматСообщения.Заголовок = ФорматСообщения;
ТекстПисьма = РезультатТекст;
Объект.Тема = Результат.Тема;
Если ЗначениеЗаполнено(Результат.Получатель) Тогда
@@ -2891,7 +2873,7 @@
НоваяСтрока.ВариантОтправки = НСтр("ru = 'Кому:'");
НоваяСтрока.Адрес = Получатель.Значение;
НоваяСтрока.Представление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Получатель.Представление,
Получатель.Значение, "");
Получатель.Значение, "");
КонецЦикла;
КонецЕсли;
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Enum 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="f5c4d4ad-dda6-4dc3-b112-61f776006f3c">
<producedTypes>
<refType typeId="32fb3f2d-3183-4b2a-b4bc-34e2101f1785" valueTypeId="0cdd8adf-451c-4f73-96f4-744eecfe378e"/>
<listType typeId="1ba99e3c-539b-4028-b026-79374703371b" valueTypeId="5eba2825-56ac-4aaf-9e99-07cf950aa2fe"/>
<managerType typeId="d88db388-c9ba-43f4-8b1e-8914a635d51d" valueTypeId="ffbea96e-b9a2-4491-a0f1-d177b811e881"/>
</producedTypes>
<name>СостоянияСубъектовДляСкрытия</name>
<synonym>
<key>ru</key>
<value>Состояния субъектов для скрытия</value>
</synonym>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Order</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>
<quickChoice>true</quickChoice>
<choiceMode>BothWays</choiceMode>
<enumValues uuid="466d9fd7-188e-4f3b-a673-35db9075d537">
<name>ГотовКСкрытию</name>
<synonym>
<key>ru</key>
<value>Готов к скрытию</value>
</synonym>
</enumValues>
<enumValues uuid="1c2e2c7d-c9d2-46a6-81f9-30078ca511c7">
<name>СкрытиеВыполнено</name>
<synonym>
<key>ru</key>
<value>Скрытие выполнено</value>
</synonym>
</enumValues>
<enumValues uuid="09d3717a-d6f9-42fd-ae9e-df5658fa3981">
<name>СкрытиеОтменено</name>
<synonym>
<key>ru</key>
<value>Скрытие отменено</value>
</synonym>
</enumValues>
</mdclass:Enum>
@@ -20,6 +20,7 @@
<types>ConstantValueManager.РазмерБлокаПередачиФайла</types>
<types>ConstantValueManager.КаталогСообщенийОбменаДаннымиДляLinux</types>
<types>ConstantValueManager.ИспользоватьПолнотекстовыйПоиск</types>
<types>ConstantValueManager.КоличествоПотоковОбновленияИнформационнойБазы</types>
<types>ConstantValueManager.КаталогСообщенийОбменаДаннымиДляWindows</types>
<types>ConstantValueManager.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</types>
<types>ConstantValueManager.УдалитьКонечнаяТочкаМенеджераСервиса</types>
@@ -37,54 +37,59 @@
// Очередь - Число - очередь обработки данных.
//
// Возвращаемое значение:
// ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
//
Функция УзелПоОчереди(Очередь) Экспорт
Если ТипЗнч(Очередь) <> Тип("Число")
Или Очередь = 0 Тогда
ТекстИсключения = НСтр("ru = 'Не возможно получить узел плана обмена ОбновлениеИнформационнойБазы, т.к. не передан номер очереди.'");
ВызватьИсключение ТекстИсключения;
Если ТипЗнч(Очередь) <> Тип("Число") Или Очередь = 0 Тогда
ВызватьИсключение НСтр("ru = 'Невозможно получить узел плана обмена ОбновлениеИнформационнойБазы, т.к. не передан номер очереди.'");
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("ПланОбмена.ОбновлениеИнформационнойБазы");
Блокировка.Заблокировать();
Запрос = Новый Запрос;
Запрос.Текст =
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ОбновлениеИнформационнойБазы.Ссылка КАК Ссылка
|ИЗ
| ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы
|ГДЕ
| ОбновлениеИнформационнойБазы.Очередь = &Очередь
| И НЕ ОбновлениеИнформационнойБазы.ЭтотУзел";
| И НЕ ОбновлениеИнформационнойБазы.ЭтотУзел");
Запрос.УстановитьПараметр("Очередь", Очередь);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Узел = Выборка.Ссылка;
Иначе
НачатьТранзакцию();
Запрос.УстановитьПараметр("Очередь", Очередь);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Узел = Выборка.Ссылка;
Иначе
УзелОбъект = СоздатьУзел();
УзелОбъект.Очередь = Очередь;
УзелОбъект.УстановитьНовыйКод(Строка(Очередь));
УзелОбъект.Наименование = Строка(Очередь);
УзелОбъект.Записать();
Узел = УзелОбъект.Ссылка;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Попытка
Блокировки = Новый БлокировкаДанных;
Блокировка = Блокировки.Добавить("ПланОбмена.ОбновлениеИнформационнойБазы");
Блокировка.УстановитьЗначение("Очередь", Очередь);
Блокировки.Заблокировать();
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Узел = Выборка.Ссылка;
Иначе
ОчередьСтрокой = Строка(Очередь);
УзелОбъект = СоздатьУзел();
УзелОбъект.Очередь = Очередь;
УзелОбъект.УстановитьНовыйКод(ОчередьСтрокой);
УзелОбъект.Наименование = ОчередьСтрокой;
УзелОбъект.Записать();
Узел = УзелОбъект.Ссылка;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
Возврат Узел;
КонецФункции
#КонецОбласти
@@ -75,6 +75,7 @@
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>DontUse</createOnInput>
<dataLockFields>ExchangePlan.ОбновлениеИнформационнойБазы.Attribute.Очередь</dataLockFields>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<objectPresentation>
@@ -214,6 +215,9 @@
<content>
<mdObject>InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений</mdObject>
</content>
<content>
<mdObject>InformationRegister.СубъектыДляСкрытияПерсональныхДанных</mdObject>
</content>
<content>
<mdObject>InformationRegister.УдалитьЗамерыВремениТехнологические</mdObject>
</content>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="35823167-b658-4563-8d01-b0aab05aa619">
<name>ИспользоватьСкрытиеПерсональныхДанныхСубъектов</name>
<synonym>
<key>ru</key>
<value>Использовать скрытие персональных данных субъектов</value>
</synonym>
<location>Constant.ИспользоватьСкрытиеПерсональныхДанныхСубъектов</location>
<privilegedGetMode>true</privilegedGetMode>
<content>CommonCommand.СкрытьПерсональныеДанныеСубъектов</content>
<content>InformationRegister.СубъектыДляСкрытияПерсональныхДанных</content>
</mdclass:FunctionalOption>
@@ -0,0 +1,24 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриЗаписи(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСкрытиеПерсональныхДанныхСубъектов") Тогда
Регистратор = Отбор.Регистратор.Значение;
Субъект = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Регистратор, "Субъект");
ЗащитаПерсональныхДанных.РассчитатьДатуСкрытияПерсональныхДанныхСубъекта(Субъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -108,29 +108,8 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
<indexing>Index</indexing>
</resources>
<dimensions uuid="86182e9a-89e0-40d7-b2d7-fcd92ee42942">
<name>Организация</name>
<synonym>
<key>ru</key>
<value>Организация</value>
</synonym>
<type>
<types>DefinedType.Организация</types>
</type>
<toolTip>
<key>ru</key>
<value>Оператор персональных данных</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<denyIncompleteValues>true</denyIncompleteValues>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
<mainFilter>true</mainFilter>
</dimensions>
<dimensions uuid="df750e63-50fc-4085-b8b8-f05e4751ff51">
<name>Субъект</name>
<synonym>
@@ -153,4 +132,26 @@
<fillValue xsi:type="core:UndefinedValue"/>
<mainFilter>true</mainFilter>
</dimensions>
<dimensions uuid="86182e9a-89e0-40d7-b2d7-fcd92ee42942">
<name>Организация</name>
<synonym>
<key>ru</key>
<value>Организация</value>
</synonym>
<type>
<types>DefinedType.Организация</types>
</type>
<toolTip>
<key>ru</key>
<value>Оператор персональных данных</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<denyIncompleteValues>true</denyIncompleteValues>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
<mainFilter>true</mainFilter>
</dimensions>
</mdclass:InformationRegister>
@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:InformationRegister 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="2bb5c23c-ad87-4b66-b766-d2e3f82715bd">
<producedTypes>
<selectionType typeId="71d55fc6-dc84-4be7-a596-3e4760a02c23" valueTypeId="1a7a444d-4265-4e2c-af4d-b1bccbd9f8d7"/>
<listType typeId="9b4bbf85-dbd8-445b-90f1-6cec74380635" valueTypeId="19ae61d1-a01e-4318-9473-a408e480fcc8"/>
<managerType typeId="9e281bc3-c989-4267-ac51-1ad7a3ae9bf9" valueTypeId="e6327cbe-3b7b-470e-8cf7-46c554f20d18"/>
<recordSetType typeId="1787a45d-22be-44f7-a766-b2f5be07d8c7" valueTypeId="60305350-5bf1-4c59-9723-0c5a3a1f81a8"/>
<recordKeyType typeId="c4a333c0-5631-4a43-96e8-aed351d425a4" valueTypeId="e9ad85bb-c772-4d72-9c76-085f74ee66d2"/>
<recordType typeId="2e92811e-f75d-4c9f-a143-c5efe964ea99" valueTypeId="7c8fbc23-be11-45b9-8db7-122db891b72e"/>
<recordManagerType typeId="487366d5-5061-46fd-81eb-5fef246593f5" valueTypeId="d6e4825a-db93-4830-a783-514e716663b8"/>
</producedTypes>
<name>СубъектыДляСкрытияПерсональныхДанных</name>
<synonym>
<key>ru</key>
<value>Субъекты для скрытия персональных данных</value>
</synonym>
<editType>InDialog</editType>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Active</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>LineNumber</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>Recorder</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>Period</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<dataLockControlMode>Managed</dataLockControlMode>
<resources uuid="d01871bb-492e-4ab8-ada9-e9d8ec1adbce">
<name>ДатаСкрытия</name>
<synonym>
<key>ru</key>
<value>Дата скрытия</value>
</synonym>
<type>
<types>Date</types>
<dateQualifiers>
<dateFractions>Date</dateFractions>
</dateQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
</resources>
<resources uuid="dd931c85-8c19-42a8-a39e-7af0c5bd346c">
<name>Состояние</name>
<synonym>
<key>ru</key>
<value>Состояние</value>
</synonym>
<type>
<types>EnumRef.СостоянияСубъектовДляСкрытия</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
</resources>
<attributes uuid="4fa153eb-1efb-43e5-ac09-e5431d4800df">
<name>ПричинаОтменыСкрытия</name>
<synonym>
<key>ru</key>
<value>Причина отмены скрытия</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>300</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:StringValue"/>
</attributes>
<attributes uuid="ada760f3-6a9f-4b81-afc1-98eb164af747">
<name>Основание</name>
<synonym>
<key>ru</key>
<value>Основание</value>
</synonym>
<type>
<types>DocumentRef.СогласиеНаОбработкуПерсональныхДанных</types>
<types>DocumentRef.ОтзывСогласияНаОбработкуПерсональныхДанных</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:UndefinedValue"/>
</attributes>
<dimensions uuid="262dea64-4ccd-4b97-ac7e-ec1dbdd9ac98">
<name>Субъект</name>
<synonym>
<key>ru</key>
<value>Субъект</value>
</synonym>
<type>
<types>DefinedType.СубъектПерсональныхДанных</types>
</type>
<toolTip>
<key>ru</key>
<value>Субъект, предоставляющий согласие на обработку персональных данных</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<denyIncompleteValues>true</denyIncompleteValues>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<master>true</master>
<mainFilter>true</mainFilter>
</dimensions>
</mdclass:InformationRegister>
@@ -25,6 +25,8 @@
Возврат;
КонецЕсли;
УстановитьИсточникДанныхТекущегоВарианта(Параметры.Ссылка);
// Определение ключевых параметров отчета.
РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено);
ПравоВывода = ПравоДоступа("Вывод", Метаданные);
@@ -599,6 +601,11 @@
КонецЕсли;
Параметр.Значение = ПользовательскаяНастройкаКД.Значение;
Если НастройкиОтчета.Свойство("Период") Тогда
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
Параметр.Значение = НастройкиОтчета.Период;
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь);
ПараметрыЗаполнения = Новый Структура;
@@ -611,21 +618,29 @@
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолноеИмяОбъектаМетаданных_ПриИзменении(Элемент)
Процедура Подключаемый_ИмяОбъектаМетаданных_ПриИзменении(Элемент)
ИдентификаторЭлемента = Прав(Элемент.Имя, 32);
ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента);
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных");
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяОбъектаМетаданных");
Если Параметр.Значение = ПользовательскаяНастройкаКД.Значение Тогда
Возврат;
КонецЕсли;
Параметр.Значение = ПользовательскаяНастройкаКД.Значение;
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИсточникДанных");
Параметр.Значение = "";
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы");
Параметр.Значение = "";
Если НастройкиОтчета.Свойство("Период") Тогда
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
Параметр.Значение = НастройкиОтчета.Период;
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь);
ПараметрыЗаполнения = Новый Структура;
@@ -648,15 +663,22 @@
Если Параметр.Значение = ПользовательскаяНастройкаКД.Значение Тогда
Возврат;
КонецЕсли;
Параметр.Значение = ПользовательскаяНастройкаКД.Значение;
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных");
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИсточникДанных");
Параметр.Значение = "";
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяОбъектаМетаданных");
Параметр.Значение = "";
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы");
Параметр.Значение = "";
Если НастройкиОтчета.Свойство("Период") Тогда
Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
Параметр.Значение = НастройкиОтчета.Период;
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь);
ПараметрыЗаполнения = Новый Структура;
@@ -694,6 +716,8 @@
Если Заполнено Тогда
ПользовательскаяНастройкаКД.Использование = Истина;
КонецЕсли;
НастройкиОтчета.Вставить("Период", Значение);
КонецПроцедуры
&НаКлиенте
@@ -719,6 +743,8 @@
Если Заполнено Тогда
ПользовательскаяНастройкаКД.Использование = Истина;
КонецЕсли;
НастройкиОтчета.Вставить("Период", Значение);
КонецПроцедуры
&НаКлиенте
@@ -1398,11 +1424,8 @@
КонецЕсли;
РезультатЗаполненияНастроек = ПараметрыЗаполнения.Результат;
ОтчетыСервер.ОчиститьРасширеннуюИнформациюОНастройках(Информация);
// Очистка цикличных ссылок.
Информация.ДеревоВарианта.Колонки.Очистить();
Информация.НастройкиВарианта.Колонки.Очистить();
Информация.ПользовательскиеНастройки.Колонки.Очистить();
КонецПроцедуры
&НаСервере
@@ -1458,6 +1481,7 @@
КонецЕсли;
Если ПользовательскаяНастройкаКД.Использование И ТипЗнч(Значение) = Тип("СтандартныйПериод") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Разрезы, ОтчетыСервер.АнализПериода(Значение), Истина);
НастройкиОтчета.Вставить("Период", Значение);
Прервать;
КонецЕсли;
КонецЦикла;
@@ -1749,8 +1773,8 @@
ИмяПараметра = Строка(СвойстваНастройки.ПолеКД);
Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" Тогда
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ТипОбъектаМетаданных_ПриИзменении");
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" Тогда
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолноеИмяОбъектаМетаданных_ПриИзменении");
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяОбъектаМетаданных" Тогда
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ИмяОбъектаМетаданных_ПриИзменении");
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ИмяТаблицы_ПриИзменении");
Иначе
@@ -2058,7 +2082,7 @@
ИмяПараметра = Строка(СвойстваНастройки.ПолеКД);
Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ИмяОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда
ПолеНадписи.Видимость = Ложь;
КонецЕсли;
@@ -2214,10 +2238,14 @@
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта);
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта);
// Подготовка к предварительной инициализации компоновщика (используется при расшифровке).
Если НастройкиОтчета.СхемаМодифицирована Тогда
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы);
КонецЕсли;
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта);
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта);
// Подготовка к предварительной инициализации компоновщика (используется при расшифровке).
Если НастройкиОтчета.СхемаМодифицирована Тогда
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы);
КонецЕсли;
Если ПараметрыЗаполнения.Свойство("ФормаНастроекРасширенныйРежим") Тогда
@@ -2374,7 +2402,7 @@
Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда
ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппыВывода.Основные, Прочее);
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ИмяОбъектаМетаданных"
Или ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда
ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппыВывода.Основные, Прочее);
Иначе
@@ -2404,7 +2432,10 @@
// Стандартные периоды (установка значений и связей).
Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл
Дополнительно = СвойстваНастройки.Дополнительно;
ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение;
Если Не НастройкиОтчета.Свойство("Период") Тогда
НастройкиОтчета.Вставить("Период", СвойстваНастройки.Значение);
КонецЕсли;
ЭтотОбъект[Дополнительно.ЗначениеИмя] = НастройкиОтчета.Период;
Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала";
Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания";
КонецЦикла;
@@ -2645,4 +2676,32 @@
Возврат ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта);
КонецФункции
// Устанавливает параметр "ИсточникДанных" настроек текущего варианта отчета
//
// Параметры:
// Вариант - СправочникСсылка.ВариантыОтчетов - хранилище настроек варианта отчета.
//
&НаСервереБезКонтекста
Процедура УстановитьИсточникДанныхТекущегоВарианта(Вариант)
Если Не ЗначениеЗаполнено(Вариант) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Попытка
Отчеты.УниверсальныйОтчет.УстановитьИсточникДанныхВарианта(Вариант);
Исключение
Событие = НСтр("ru = 'Варианты отчетов.Установка источника данных универсального отчета'");
ШаблонКомментария = НСтр("ru = 'Не удалось установить источник данных варианта отчета:
| %1 по причине:
| %2'");
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонКомментария, Вариант, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(
Событие, УровеньЖурналаРегистрации.Предупреждение, Вариант.Метаданные(), Вариант, Комментарий);
КонецПопытки;
КонецПроцедуры
#КонецОбласти
@@ -28,19 +28,9 @@
#Область СлужебныеПроцедурыИФункции
Процедура ПередКомпоновкойМакета(Схема, Настройки)
Настройки.Структура.Очистить();
Структура = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
КонецПроцедуры
Функция ТекстЗапросаПоМетаданным(ПараметрыОтчета)
ТекстЗапроса = " ВЫБРАТЬ РАЗРЕШЕННЫЕ " + Символы.ПС;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ " + Символы.ПС;
Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда
ИмяТипаДанных = "РегистрСведений";
@@ -62,18 +52,19 @@
ИмяТипаДанных = "Задача";
КонецЕсли;
ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса)-2);
ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 2);
ТекстЗапроса = ТекстЗапроса
+ "* ИЗ " + ИмяТипаДанных + "." + ПараметрыОтчета.ПолноеИмяОбъектаМетаданных;
+ " * ИЗ " + ИмяТипаДанных + "." + ПараметрыОтчета.ИмяОбъектаМетаданных;
ЭтоТабличнаяЧасть = Ложь;
Если НЕ ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда
Если ИмяТипаДанных = "Справочник" ИЛИ ИмяТипаДанных = "Документ"
Или ИмяТипаДанных = "Задача" ИЛИ ИмяТипаДанных = "БизнесПроцесс" Тогда
Если ИмяТипаДанных = "Справочник" Или ИмяТипаДанных = "Документ"
Или ИмяТипаДанных = "Задача" Или ИмяТипаДанных = "БизнесПроцесс" Тогда
// Если это табличная часть объекта, то нужно проверить ее наличие.
Если Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы) <> Неопределено Тогда
МетаданныеОбъекта = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных];
Если МетаданныеОбъекта.ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы) <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса + "." + ПараметрыОтчета.ИмяТаблицы;
ЭтоТабличнаяЧасть = Истина;
КонецЕсли;
@@ -85,13 +76,13 @@
Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты"
Или ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда
ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода} ,{&КонецПериода} ,Авто)";
ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода}, {&КонецПериода}, Авто)";
ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда
ТекстЗапроса = ТекстЗапроса + "({&КонецПериода} ,)";
ТекстЗапроса = ТекстЗапроса + "({&КонецПериода},)";
ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "СрезПервых" Тогда
ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода} ,)";
ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода},)";
ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "СрезПоследних" Тогда
ТекстЗапроса = ТекстЗапроса + "({&КонецПериода} ,)";
ТекстЗапроса = ТекстЗапроса + "({&КонецПериода},)";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + " КАК ИсточникДанных";
@@ -102,28 +93,28 @@
Если ЭтоТабличнаяЧасть Тогда
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| (ИсточникДанных.Ссылка.Дата >= &НачалоПериода),(ИсточникДанных.Ссылка.Дата <= &КонецПериода)}";
| (ИсточникДанных.Ссылка.Дата >= &НачалоПериода), (ИсточникДанных.Ссылка.Дата <= &КонецПериода)}";
Иначе
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| (ИсточникДанных.Дата >= &НачалоПериода),(ИсточникДанных.Дата <= &КонецПериода)}";
| (ИсточникДанных.Дата >= &НачалоПериода), (ИсточникДанных.Дата <= &КонецПериода)}";
КонецЕсли;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" И ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| (ИсточникДанных.Период >= &НачалоПериода),(ИсточникДанных.Период <= &КонецПериода)}";
| (ИсточникДанных.Период >= &НачалоПериода), (ИсточникДанных.Период <= &КонецПериода)}";
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии"
И ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| (ИсточникДанных.Период >= &НачалоПериода),(ИсточникДанных.Период <= &КонецПериода)}";
| (ИсточникДанных.Период >= &НачалоПериода), (ИсточникДанных.Период <= &КонецПериода)}";
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда
ТекстЗапроса = ТекстЗапроса + "
|{ГДЕ
| ИсточникДанных.ПериодРегистрации >= &НачалоПериода И ИсточникДанных.ПериодРегистрации <= &КонецПериода}";
КонецЕсли;
Возврат ТекстЗапроса;
Возврат ТекстЗапроса;
КонецФункции
@@ -198,31 +189,31 @@
КонецФункции
Функция ДоступныеТаблицы(НастройкиКД, ТипОбъектаМетаданных = "", ПолноеИмяОбъектаМетаданных = "") Экспорт
Функция ДоступныеТаблицы(НастройкиКД, ТипОбъектаМетаданных = "", ИмяОбъектаМетаданных = "") Экспорт
ЗначенияДляВыбора = Новый СписокЗначений;
ЭтоЗагруженнаяСхема = НастройкиКД.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных");
ПараметрыОтчета = НастройкиКД.ПараметрыДанных.Элементы;
ПараметрИсточникДанных = ПараметрыОтчета.Найти("ИсточникДанных");
ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных");
ПараметрИмяОбъектаМетаданных = ПараметрыОтчета.Найти("ИмяОбъектаМетаданных");
Если ПустаяСтрока(ТипОбъектаМетаданных) Тогда
ПараметрыОтчета = НастройкиКД.ПараметрыДанных.Элементы;
ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных");
ТипОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение;
КонецЕсли;
Если ПустаяСтрока(ПолноеИмяОбъектаМетаданных) Тогда
ПараметрыОтчета = НастройкиКД.ПараметрыДанных.Элементы;
ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ПолноеИмяОбъектаМетаданных");
ПолноеИмяОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение;
Если ПустаяСтрока(ИмяОбъектаМетаданных) Тогда
Если ЗначениеЗаполнено(ПараметрИсточникДанных.Значение) Тогда
ИмяОбъектаМетаданных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрИсточникДанных.Значение, "Имя");
Иначе
ИмяОбъектаМетаданных = ПараметрИмяОбъектаМетаданных.Значение;
КонецЕсли;
КонецЕсли;
ПараметрыОтчета = НастройкиКД.ПараметрыДанных.Элементы;
ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных");
ПараметрПолноеИмяОбъектаМетаданных = ПараметрыОтчета.Найти("ПолноеИмяОбъектаМетаданных");
Если (НЕ ЗначениеЗаполнено(ТипОбъектаМетаданных)
ИЛИ НЕ ЗначениеЗаполнено(ПолноеИмяОбъектаМетаданных))
ИЛИ НЕ ЗначениеЗаполнено(ИмяОбъектаМетаданных))
И НЕ НастройкиКД.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") Тогда
Возврат ЗначенияДляВыбора;
КонецЕсли;
@@ -232,23 +223,23 @@
ИЛИ ТипОбъектаМетаданных = "Задачи"
ИЛИ ТипОбъектаМетаданных = "БизнесПроцессы"
ИЛИ ТипОбъектаМетаданных = "Справочники" Тогда
Для каждого ТабличнаяЧасть Из Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ТабличныеЧасти Цикл
Для каждого ТабличнаяЧасть Из Метаданные[ТипОбъектаМетаданных][ИмяОбъектаМетаданных].ТабличныеЧасти Цикл
ЗначенияДляВыбора.Добавить(ТабличнаяЧасть.Имя, ТабличнаяЧасть.Синоним);
КонецЦикла;
ИначеЕсли ТипОбъектаМетаданных = "РегистрыНакопления" Тогда
Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
Если Метаданные[ТипОбъектаМетаданных][ИмяОбъектаМетаданных].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
ЗначенияДляВыбора.Добавить("ОстаткиИОбороты", НСтр("ru = 'Остатки и обороты'"));
Иначе
ЗначенияДляВыбора.Добавить("Обороты", НСтр("ru = 'Обороты'"));
КонецЕсли;
ИначеЕсли ТипОбъектаМетаданных = "РегистрыСведений" Тогда
Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
Если Метаданные[ТипОбъектаМетаданных][ИмяОбъектаМетаданных].ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
Иначе
ЗначенияДляВыбора.Добавить("СрезПоследних", НСтр("ru = 'Срез последних'"));
ЗначенияДляВыбора.Добавить("СрезПервых", НСтр("ru = 'Срез первых'"));
КонецЕсли;
ИначеЕсли ТипОбъектаМетаданных = "РегистрыРасчета" Тогда
Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ПериодДействия Тогда
Если Метаданные[ТипОбъектаМетаданных][ИмяОбъектаМетаданных].ПериодДействия Тогда
ЗначенияДляВыбора.Добавить("ДанныеГрафика", НСтр("ru = 'Данные графика'"));
ЗначенияДляВыбора.Добавить("ФактическийПериодДействия", НСтр("ru = 'Фактический период действия'"));
КонецЕсли;
@@ -295,7 +286,7 @@
КонецФункции
Функция ПолноеИмяОбъектаМетаданныхПоУмолчанию(НастройкиКД, ТипОбъектаМетаданных)
Функция ИмяОбъектаМетаданныхПоУмолчанию(НастройкиКД, ТипОбъектаМетаданных)
ЗначенияДляВыбора = ДоступныеОбъектыМетаданных(НастройкиКД, ТипОбъектаМетаданных);
@@ -308,9 +299,9 @@
КонецФункции
Функция ИмяТаблицыПоУмолчанию(НастройкиКД, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных)
Функция ИмяТаблицыПоУмолчанию(НастройкиКД, ТипОбъектаМетаданных, ИмяОбъектаМетаданных)
ЗначенияДляВыбора = ДоступныеТаблицы(НастройкиКД, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных);
ЗначенияДляВыбора = ДоступныеТаблицы(НастройкиКД, ТипОбъектаМетаданных, ИмяОбъектаМетаданных);
ЭтоЗагруженнаяСхема = НастройкиКД.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных");
Если Не ЭтоЗагруженнаяСхема И ЗначенияДляВыбора.Количество() > 0 Тогда
@@ -342,7 +333,7 @@
Процедура ДобавитьИтогиОбъекта(Знач ПараметрыОтчета, Знач СхемаКомпоновкиДанных)
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных];
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных];
Если ПараметрыОтчета.ИмяТаблицы <> "" Тогда
ТабличнаяЧасть = ОбъектМетаданных.ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы);
Если ТабличнаяЧасть <> Неопределено Тогда
@@ -362,7 +353,7 @@
Процедура ДобавитьИтогиРегистра(Знач ПараметрыОтчета, Знач СхемаКомпоновкиДанных)
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных];
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных];
// Добавляем измерения
Для каждого Измерение Из ОбъектМетаданных.Измерения Цикл
@@ -683,12 +674,13 @@
ВыбранныеПоляКонечныйОстаток.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально;
КонецЕсли;
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных];
Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда
Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя);
Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя);
КонецЦикла;
Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл
Для Каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Оборот");
@@ -702,25 +694,25 @@
КонецЕсли;
КонецЦикла;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда
Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя);
Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя);
КонецЦикла;
Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл
Для Каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя);
КонецЦикла;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда
Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл
Для Каждого Измерение Из ОбъектМетаданных.Измерения Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя);
КонецЦикла;
Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл
Для Каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя);
КонецЦикла;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда
Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл
Для Каждого Ресурс Из ОбъектМетаданных.Ресурсы Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"));
@@ -762,10 +754,8 @@
ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи"
ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы"
ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" Тогда
Если ПараметрыОтчета.ИмяТаблицы = "" Тогда
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных];
Иначе
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти[ПараметрыОтчета.ИмяТаблицы];
Если ПараметрыОтчета.ИмяТаблицы <> "" Тогда
ОбъектМетаданных = ОбъектМетаданных.ТабличныеЧасти[ПараметрыОтчета.ИмяТаблицы];
КонецЕсли;
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, "Ссылка");
@@ -774,13 +764,11 @@
КонецЦикла;
ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда
Если ПараметрыОтчета.ИмяТаблицы = "" Тогда
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных];
Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Реквизит.Имя);
КонецЦикла;
Иначе
ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].СтандартныеТабличныеЧасти[ПараметрыОтчета.ИмяТаблицы];
Для каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл
ВыбранныеПоля = НастройкиКД.Выбор;
ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Реквизит.Имя);
@@ -790,75 +778,114 @@
КонецПроцедуры
// Формирует структуру настроек компоновки данных
//
// Параметры:
// ПараметрыОтчета - Структура - описание объекта метаданных - источника данных
// Схема - СхемаКомпоновкиДанных - основная схема компоновки данных отчета
// Настройки - НастройкиКомпоновкиДанных - настройки, чья структура формируется.
//
Процедура СформироватьСтруктуру(ПараметрыОтчета, Схема, Настройки)
Настройки.Структура.Очистить();
Структура = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ТипыПолей = СтрРазделить("Измерения@Ресурсы", "@", Ложь);
ТипыПолейИсточников = Новый Соответствие();
ТипыПолейИсточников.Вставить("РегистрыСведений", ТипыПолей);
ТипыПолейИсточников.Вставить("РегистрыНакопления", ТипыПолей);
ТипыПолейИсточников.Вставить("РегистрыБухгалтерии", ТипыПолей);
ТипыПолейИсточников.Вставить("РегистрыРасчета", ТипыПолей);
ТипыПолейИсточника = ТипыПолейИсточников[ПараметрыОтчета.ТипОбъектаМетаданных];
Если ТипыПолейИсточника <> Неопределено Тогда
Для Каждого ТипПолейИсточника Из ТипыПолейИсточника Цикл
ПоляГруппировки = Структура.ПоляГруппировки.Элементы;
МетаданныеИсточника = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных];
Для Каждого МетаданныеПоля Из МетаданныеИсточника[ТипПолейИсточника] Цикл
Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии"
И МетаданныеПоля.ПризнакУчета <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипПолейИсточника = "Ресурсы"
И МетаданныеПоля.Тип.СодержитТип(Тип("Число")) Тогда
Продолжить;
КонецЕсли;
ПолеГруппировки = ПоляГруппировки.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(МетаданныеПоля.Имя);
ПолеГруппировки.Использование = Истина;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Работа с типовой схемой, настраиваемой в пользовательских настройках.
Функция ПараметрыОтчета(НастройкиКД, ПользовательскиеНастройкиКД) Экспорт
Функция ПараметрыОтчета(Настройки, ПользовательскиеНастройки) Экспорт
ПараметрыОтчета = Новый Структура(
"ОчиститьСтруктуру, Период, ИсточникДанных, ТипОбъектаМетаданных, ИмяОбъектаМетаданных, ИмяТаблицы", Ложь);
Результат = Новый Структура("ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных, ИмяТаблицы, ОчиститьСтруктуру");
// Поиск параметров в настройках.
ПараметрТипОбъектаМетаданных = Неопределено;
ПараметрПолноеИмяОбъектаМетаданных = Неопределено;
ПараметрИмяТаблицы = Неопределено;
Результат.ОчиститьСтруктуру = Ложь;
Если НастройкиКД.ДополнительныеСвойства.Свойство("ОтчетИнициализирован") Тогда
Если ТипЗнч(ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
Для Каждого ЭлементКД Из ПользовательскиеНастройкиКД.Элементы Цикл
Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ИмяПараметра = Строка(ЭлементКД.Параметр);
Если ИмяПараметра = "ТипОбъектаМетаданных" Тогда
ПараметрТипОбъектаМетаданных = ЭлементКД;
ИначеЕсли ИмяПараметра = "ПолноеИмяОбъектаМетаданных" Тогда
ПараметрПолноеИмяОбъектаМетаданных = ЭлементКД;
ИначеЕсли ИмяПараметра = "ИмяТаблицы" Тогда
ПараметрИмяТаблицы = ЭлементКД;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ПараметрТипОбъектаМетаданных = Неопределено Тогда
ПараметрТипОбъектаМетаданных = НастройкиКД.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных");
КонецЕсли;
Если ПараметрПолноеИмяОбъектаМетаданных = Неопределено Тогда
ПараметрПолноеИмяОбъектаМетаданных = НастройкиКД.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных");
КонецЕсли;
Если ПараметрИмяТаблицы = Неопределено Тогда
ПараметрИмяТаблицы = НастройкиКД.ПараметрыДанных.Элементы.Найти("ИмяТаблицы");
КонецЕсли;
Если Настройки.ДополнительныеСвойства.Свойство("ОтчетИнициализирован")
И ТипЗнч(ПользовательскиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
Для Каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(Элемент) <> Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ИмяПараметра = Строка(Элемент.Параметр);
ЗначениеПараметра = Неопределено;
Если ПараметрыОтчета.Свойство(ИмяПараметра, ЗначениеПараметра)
И ЗначениеПараметра <> Неопределено Тогда
ПараметрыОтчета[ИмяПараметра] = ЗначениеПараметра;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Чтение значений параметров.
ПараметрыДанных = Настройки.ПараметрыДанных.Элементы;
Для Каждого Параметр Из ПараметрыОтчета Цикл
Если ЗначениеЗаполнено(Параметр.Значение) Тогда
Продолжить;
КонецЕсли;
НайденныйПараметр = ПараметрыДанных.Найти(Параметр.Ключ);
Если НайденныйПараметр <> Неопределено Тогда
ПараметрыОтчета[Параметр.Ключ] = НайденныйПараметр.Значение;
КонецЕсли;
КонецЦикла;
Если ПараметрТипОбъектаМетаданных <> Неопределено Тогда
Результат.ТипОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение;
КонецЕсли;
Если ПараметрПолноеИмяОбъектаМетаданных <> Неопределено Тогда
Результат.ПолноеИмяОбъектаМетаданных = ПараметрПолноеИмяОбъектаМетаданных.Значение;
КонецЕсли;
Если ПараметрИмяТаблицы <> Неопределено Тогда
Результат.ИмяТаблицы = ПараметрИмяТаблицы.Значение;
Если ЗначениеЗаполнено(ПараметрыОтчета.ИсточникДанных) Тогда
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ПараметрыОтчета.ИсточникДанных);
ПараметрыОтчета.ТипОбъектаМетаданных = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных);
ПараметрыОтчета.ИмяОбъектаМетаданных = ОбъектМетаданных.Имя;
КонецЕсли;
// Заполнение значениями по умолчанию.
Если Не ЗначениеЗаполнено(Результат.ТипОбъектаМетаданных) Тогда
Результат.ТипОбъектаМетаданных = ТипОбъектаМетаданныхПоУмолчанию();
Результат.ОчиститьСтруктуру = Истина;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ТипОбъектаМетаданных) Тогда
ПараметрыОтчета.ТипОбъектаМетаданных = ТипОбъектаМетаданныхПоУмолчанию();
ПараметрыОтчета.ОчиститьСтруктуру = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПолноеИмяОбъектаМетаданных) Тогда
Результат.ПолноеИмяОбъектаМетаданных = ПолноеИмяОбъектаМетаданныхПоУмолчанию(НастройкиКД, Результат.ТипОбъектаМетаданных);
Результат.ОчиститьСтруктуру = Истина;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИмяОбъектаМетаданных) Тогда
ПараметрыОтчета.ИмяОбъектаМетаданных = ИмяОбъектаМетаданныхПоУмолчанию(
Настройки, ПараметрыОтчета.ТипОбъектаМетаданных);
ПараметрыОтчета.ОчиститьСтруктуру = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ИмяТаблицы) Тогда
Результат.ИмяТаблицы = ИмяТаблицыПоУмолчанию(НастройкиКД, Результат.ТипОбъектаМетаданных, Результат.ПолноеИмяОбъектаМетаданных);
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИмяТаблицы) Тогда
ПараметрыОтчета.ИмяТаблицы = ИмяТаблицыПоУмолчанию(
Настройки, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыОтчета.ИсточникДанных) Тогда
ПараметрыОтчета.ИсточникДанных = ИсточникДанных(ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
КонецЕсли;
Возврат Результат;
Возврат ПараметрыОтчета;
КонецФункции
Функция ПолучитьТиповуюСхему(ПараметрыОтчета, НастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт
@@ -882,12 +909,12 @@
Если ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники"
Или ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета"
Или (ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений"
И Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ПериодичностьРегистраСведений
И Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ИмяОбъектаМетаданных].ПериодичностьРегистраСведений
= Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический) Тогда
СхемаКомпоновкиДанных.Параметры.Период.ОграничениеИспользования = Истина;
КонецЕсли;
ДоступныеТаблицы = ДоступныеТаблицы(НастройкиКД, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ПолноеИмяОбъектаМетаданных);
ДоступныеТаблицы = ДоступныеТаблицы(НастройкиКД, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ИмяОбъектаМетаданных);
Если ДоступныеТаблицы.Количество() <= 1 Тогда
СхемаКомпоновкиДанных.Параметры.ИмяТаблицы.ОграничениеИспользования = Истина;
КонецЕсли;
@@ -910,19 +937,17 @@
НастройкиКД.Структура.Очистить();
ДобавитьПоказатели(ПараметрыОтчета, НастройкиКД);
ПередКомпоновкойМакета(СхемаКД, НастройкиКД);
СформироватьСтруктуру(ПараметрыОтчета, СхемаКД, НастройкиКД);
ПараметрОтчета = НастройкиКД.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных");
ПараметрОтчета.Значение = ПараметрыОтчета.ТипОбъектаМетаданных;
ПараметрОтчета = НастройкиКД.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных");
ПараметрОтчета.Значение = ПараметрыОтчета.ПолноеИмяОбъектаМетаданных;
ПараметрОтчета = НастройкиКД.ПараметрыДанных.Элементы.Найти("ИмяТаблицы");
ПараметрОтчета.Значение = ПараметрыОтчета.ИмяТаблицы;
ПараметрыДанных = НастройкиКД.ПараметрыДанных.Элементы;
Для Каждого ПараметрОтчета Из ПараметрыОтчета Цикл
ПараметрДанных = ПараметрыДанных.Найти(ПараметрОтчета.Ключ);
Если ПараметрДанных <> Неопределено Тогда
ПараметрДанных.Значение = ПараметрОтчета.Значение;
КонецЕсли;
КонецЦикла;
НастройкиКД.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Истина);
КонецЕсли;
КонецПроцедуры
@@ -963,6 +988,165 @@
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Работа с источником данных варианта отчета.
// Устанавливает параметр "ИсточникДанных" настроек варианта отчета
//
// Параметры:
// Вариант - СправочникСсылка.ВариантыОтчетов - хранилище настроек варианта отчета.
//
Процедура УстановитьИсточникДанныхВарианта(Вариант) Экспорт
УниверсальныйОтчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Отчеты.УниверсальныйОтчет);
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(Вариант.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", Вариант);
Блокировка.Заблокировать();
ВариантОбъект = Вариант.ПолучитьОбъект();
НастройкиВарианта = Неопределено;
Если ВариантОбъект <> Неопределено
И ВариантОбъект.Отчет = УниверсальныйОтчет Тогда
НастройкиВарианта = НастройкиВарианта(ВариантОбъект);
КонецЕсли;
Если НастройкиВарианта = Неопределено Тогда
ОтменитьТранзакцию();
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Вариант);
Возврат;
КонецЕсли;
ВариантОбъект.Настройки = Новый ХранилищеЗначения(НастройкиВарианта);
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Возвращает настройки варианта отчета с установленным параметром ИсточникДанных.
//
// Параметры:
// Вариант - СправочникОбъект.ВариантыОтчетов - хранилище настроек варианта отчета.
//
// Возвращаемое значение:
// НастройкиКомпоновкиДанных, Неопределено - обновленные настройки или Неопределено,
// если обновить не удалось.
//
Функция НастройкиВарианта(Вариант)
НастройкиВарианта = Вариант.Настройки.Получить();
Если НастройкиВарианта = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ПараметрыДанных = НастройкиВарианта.ПараметрыДанных.Элементы;
ПараметрыИскомые = Новый Структура(
"ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных, ИмяОбъектаМетаданных, ИсточникДанных");
Для Каждого Параметр Из ПараметрыИскомые Цикл
НайденныйПараметр = ПараметрыДанных.Найти(Параметр.Ключ);
Если НайденныйПараметр <> Неопределено Тогда
ПараметрыИскомые[Параметр.Ключ] = НайденныйПараметр.Значение;
КонецЕсли;
КонецЦикла;
// Если в настройках варианта хранится параметр с неактуальным именем - выполнится его актуализация.
Если ЗначениеЗаполнено(ПараметрыИскомые.ПолноеИмяОбъектаМетаданных) Тогда
ПараметрыИскомые.ИмяОбъектаМетаданных = ПараметрыИскомые.ПолноеИмяОбъектаМетаданных;
КонецЕсли;
ПараметрыИскомые.Удалить("ПолноеИмяОбъектаМетаданных");
Если Не ЗначениеЗаполнено(ПараметрыИскомые.ИсточникДанных) Тогда
ПараметрыИскомые.ИсточникДанных = ИсточникДанных(
ПараметрыИскомые.ТипОбъектаМетаданных, ПараметрыИскомые.ИмяОбъектаМетаданных);
Если ПараметрыИскомые.ИсточникДанных = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
ПараметрыУстанавливаемые = Новый Структура("ИсточникДанных, ИмяОбъектаМетаданных");
ЗаполнитьЗначенияСвойств(ПараметрыУстанавливаемые, ПараметрыИскомые);
ИмяОбъекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыИскомые.ИсточникДанных, "Имя");
Если ИмяОбъекта <> ПараметрыУстанавливаемые.ИмяОбъектаМетаданных Тогда
ПараметрыУстанавливаемые.ИмяОбъектаМетаданных = ИмяОбъекта;
КонецЕсли;
Для Каждого Параметр Из ПараметрыУстанавливаемые Цикл
НайденныйПараметр = ПараметрыДанных.Найти(Параметр.Ключ);
Если НайденныйПараметр = Неопределено Тогда
ПараметрДанных = ПараметрыДанных.Добавить();
ПараметрДанных.Параметр = Новый ПараметрКомпоновкиДанных(Параметр.Ключ);
ПараметрДанных.Значение = Параметр.Значение;
ПараметрДанных.Использование = Истина;
Иначе
НастройкиВарианта.ПараметрыДанных.УстановитьЗначениеПараметра(Параметр.Ключ, Параметр.Значение);
КонецЕсли;
КонецЦикла;
Возврат НастройкиВарианта;
КонецФункции
// Возвращает источник данных отчета
//
// Параметры:
// ТипМенеджера - Строка - представление менеджера объекта метаданных,
// например, "Справочники" или "РегистрыСведений" и т.д.
// ИмяОбъекта - Строка - краткое имя объекта метаданных,
// например, "Валюты" или "КурсыВалют" и т.д.
//
// Возвращаемое значение:
// СправочникСсылка.ИдентификаторыОбъектовМетаданных, Неопределено -
// ссылка на найденный элемент справочника, иначе - Неопределено.
//
Функция ИсточникДанных(ТипМенеджера, ИмяОбъекта)
ТипОбъекта = ТипОбъектаПоТипуМенеджера(ТипМенеджера);
ПолноеИмяОбъекта = ТипОбъекта + "." + ИмяОбъекта;
Если Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта) = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяОбъекта);
КонецФункции
// Возвращает тип объекта метаданных по соответствующему типу менеджера
//
// Параметры:
// ТипМенеджера - Строка - представление менеджера объекта метаданных,
// например, "Справочники" или "РегистрыСведений" и т.д.
//
// Возвращаемое значение:
// Строка - тип объекта метаданных, например, "Справочник" или "РегистрСведений" и т.д.
//
Функция ТипОбъектаПоТипуМенеджера(ТипМенеджера)
Типы = Новый Соответствие;
Типы.Вставить("Справочники", "Справочник");
Типы.Вставить("Документы", "Документ");
Типы.Вставить("Обработки", "Обработка");
Типы.Вставить("ПланыВидовХарактеристик", "ПланВидовХарактеристик");
Типы.Вставить("РегистрыБухгалтерии", "РегистрБухгалтерии");
Типы.Вставить("РегистрыНакопления", "РегистрНакопления");
Типы.Вставить("РегистрыРасчета", "РегистрРасчета");
Типы.Вставить("РегистрыСведений", "РегистрСведений");
Типы.Вставить("БизнесПроцессы", "БизнесПроцесс");
Типы.Вставить("ЖурналыДокументов", "ЖурналДокументов");
Типы.Вставить("Задачи", "Задача");
Типы.Вставить("Отчеты", "Отчет");
Типы.Вставить("Константы", "Константа");
Типы.Вставить("Перечисления", "Перечисление");
Типы.Вставить("ПланыВидовРасчета", "ПланВидовРасчета");
Типы.Вставить("ПланыОбмена", "ПланОбмена");
Типы.Вставить("ПланыСчетов", "ПланСчетов");
Возврат Типы[ТипМенеджера];
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -198,7 +198,7 @@
Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" Тогда
СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина;
СвойстваНастройки.ЗначенияДляВыбора = Отчеты.УниверсальныйОтчет.ДоступныеТипыОбъектовМетаданных();
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" Тогда
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяОбъектаМетаданных" Тогда
СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина;
СвойстваНастройки.ЗначенияДляВыбора = Отчеты.УниверсальныйОтчет.ДоступныеОбъектыМетаданных(КомпоновщикНастроек.Настройки);
ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда
@@ -277,17 +277,17 @@
//
// // Схема зависит от значения параметра, выведенного в пользовательские настройки отчета:
// Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
// ПолноеИмяОбъектаМетаданных = "";
// ИмяОбъектаМетаданных = "";
// Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл
// Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
// ИмяПараметра = Строка(ЭлементКД.Параметр);
// Если ИмяПараметра = "ОбъектМетаданных" Тогда
// ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение;
// ИмяОбъектаМетаданных = ЭлементКД.Значение;
// КонецЕсли;
// КонецЕсли;
// КонецЦикла;
// Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда
// КлючСхемы = ПолноеИмяОбъектаМетаданных;
// Если КлючСхемы <> ИмяОбъектаМетаданных Тогда
// КлючСхемы = ИмяОбъектаМетаданных;
// СхемаКД = Новый СхемаКомпоновкиДанных;
// // Наполнение схемы...
// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы);
@@ -318,7 +318,7 @@
КонецЕсли;
КонецЕсли;
Если НовыйКлючСхемы = Неопределено Тогда// Не загруженная схема.
Если НовыйКлючСхемы = Неопределено Тогда // Не загруженная схема.
Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда
НастройкиКД = НовыеНастройкиКД;
@@ -329,7 +329,7 @@
ПараметрыОтчета = Отчеты.УниверсальныйОтчет.ПараметрыОтчета(НастройкиКД, НовыеПользовательскиеНастройкиКД);
НовыйКлючСхемы = ПараметрыОтчета.ТипОбъектаМетаданных
+ "/" + ПараметрыОтчета.ПолноеИмяОбъектаМетаданных
+ "/" + ПараметрыОтчета.ИмяОбъектаМетаданных
+ "/" + ПараметрыОтчета.ИмяТаблицы;
НовыйКлючСхемы = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой(НовыйКлючСхемы, 100);
@@ -55,12 +55,27 @@
<useRestriction>true</useRestriction>
<expression>&amp;Период.ДатаОкончания</expression>
</parameter>
<parameter>
<name>ИсточникДанных</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Источник данных</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d4p1:CatalogRef.ИдентификаторыОбъектовМетаданных</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>true</useRestriction>
<use>Always</use>
</parameter>
<parameter>
<name>ТипОбъектаМетаданных</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тип объекта метаданных</v8:content>
<v8:content>Тип объекта</v8:content>
</v8:item>
</title>
<valueType>
@@ -75,11 +90,11 @@
<use>Always</use>
</parameter>
<parameter>
<name>ПолноеИмяОбъектаМетаданных</name>
<name>ИмяОбъектаМетаданных</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Полное имя объекта метаданных</v8:content>
<v8:content>Имя объекта</v8:content>
</v8:item>
</title>
<valueType>
@@ -130,14 +145,16 @@
<dcsset:userSettingID>60febb46-2215-4d7a-ac48-eac4758847c6</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:use>false</dcscor:use>
<dcscor:parameter>ТипОбъектаМетаданных</dcscor:parameter>
<dcscor:value xsi:type="xs:string"/>
<dcsset:userSettingID>2c828e9b-e1cf-4bd7-9577-d8bc5ee2a609</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ПолноеИмяОбъектаМетаданных</dcscor:parameter>
<dcscor:use>false</dcscor:use>
<dcscor:parameter>ИмяОбъектаМетаданных</dcscor:parameter>
<dcscor:value xsi:type="xs:string"/>
<dcsset:userSettingID>c24fcd20-6347-4f90-9622-f0d39c9bad09</dcsset:userSettingID>
<dcsset:userSettingID>c000178b-3b77-477d-bd78-a3e60f29d7a8</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ИмяТаблицы</dcscor:parameter>
@@ -2509,58 +2509,6 @@
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.РазмерБлокаПередачиФайла</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.СообщениеОбменаДаннымиИзГлавногоУзла</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -2648,6 +2596,58 @@
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.РазмерБлокаПередачиФайла</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.СообщениеОбменаДаннымиИзГлавногоУзла</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.БуферОперацийСтатистики</name>
<right>
@@ -2831,6 +2831,25 @@
<value>true</value>
</right>
</object>
<object>
<name>Constant.КоличествоПотоковОбновленияИнформационнойБазы</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.УдалитьОбластиДанных</name>
<right>
@@ -1933,6 +1933,17 @@
<value>true</value>
</right>
</object>
<object>
<name>Constant.КоличествоПотоковОбновленияИнформационнойБазы</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно</name>
<right>
@@ -4837,6 +4837,45 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
@@ -4930,45 +4969,6 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>Document.СогласиеНаОбработкуПерсональныхДанных</name>
<right>
@@ -5263,6 +5263,17 @@
<value>false</value>
</right>
</object>
<object>
<name>Constant.КоличествоПотоковОбновленияИнформационнойБазы</name>
<right>
<name>Update</name>
<value>false</value>
</right>
<right>
<name>Edit</name>
<value>false</value>
</right>
</object>
<object>
<name>InformationRegister.УдалитьОбластиДанных</name>
<right>
@@ -3,13 +3,6 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -41,6 +34,13 @@
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.ЖурналРегистрации</name>
<right>
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<schedule:Schedule xmlns:schedule="http://g5.1c.ru/v8/dt/schedule" beginDate="0001-01-01" endDate="0001-01-01" daysRepeatPeriod="1" beginTime="00:00:00" endTime="00:00:00" completionTime="00:00:00" weeksPeriod="1">
<weekDays>Mon</weekDays>
<weekDays>Tue</weekDays>
<weekDays>Wed</weekDays>
<weekDays>Thu</weekDays>
<weekDays>Fri</weekDays>
<weekDays>Sat</weekDays>
<weekDays>Sun</weekDays>
<months>Jan</months>
<months>Feb</months>
<months>Mar</months>
<months>Apr</months>
<months>May</months>
<months>Jun</months>
<months>Jul</months>
<months>Aug</months>
<months>Sep</months>
<months>Oct</months>
<months>Nov</months>
<months>Dec</months>
</schedule:Schedule>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ScheduledJob xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1260b5dd-0a74-43df-bdbb-215b253da28e">
<name>ПолучениеСубъектовДляСкрытияПерсональныхДанных</name>
<synonym>
<key>ru</key>
<value>Получение субъектов для скрытия персональных данных</value>
</synonym>
<methodName>CommonModule.ЗащитаПерсональныхДанных.ПолучениеСубъектовДляСкрытияПерсональныхДанных</methodName>
<predefined>true</predefined>
<restartCountOnFailure>3</restartCountOnFailure>
<restartIntervalOnFailure>10</restartIntervalOnFailure>
</mdclass:ScheduledJob>
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<schedule:Schedule xmlns:schedule="http://g5.1c.ru/v8/dt/schedule" beginDate="0001-01-01" endDate="0001-01-01" daysRepeatPeriod="1" beginTime="00:00:00" endTime="00:00:00" completionTime="00:00:00" weeksPeriod="1">
<weekDays>Mon</weekDays>
<weekDays>Tue</weekDays>
<weekDays>Wed</weekDays>
<weekDays>Thu</weekDays>
<weekDays>Fri</weekDays>
<weekDays>Sat</weekDays>
<weekDays>Sun</weekDays>
<months>Jan</months>
<months>Feb</months>
<months>Mar</months>
<months>Apr</months>
<months>May</months>
<months>Jun</months>
<months>Jul</months>
<months>Aug</months>
<months>Sep</months>
<months>Oct</months>
<months>Nov</months>
<months>Dec</months>
</schedule:Schedule>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:ScheduledJob xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3b1d0974-6031-4841-b632-aadd4ff13b2c">
<name>СкрытиеПерсональныхДанныхСубъектов</name>
<synonym>
<key>ru</key>
<value>Скрытие персональных данных субъектов</value>
</synonym>
<methodName>CommonModule.ЗащитаПерсональныхДанных.СкрытиеПерсональныеДанныеСубъектов</methodName>
<predefined>true</predefined>
<restartCountOnFailure>3</restartCountOnFailure>
<restartIntervalOnFailure>10</restartIntervalOnFailure>
</mdclass:ScheduledJob>
Loaded 100 of 106 files, more files were not shown because too many files have changed in this diff. Show more