3_1_5_180

This commit is contained in:
Компания 1С committed 2021-09-03 23:08:00 +03:00
1 parent 09e68ae35b
commit ebd39458e4
104 files changed
+4088 -2249

No files matched your search

@@ -86,28 +86,6 @@
КонецПроцедуры
Процедура ПередУдалением(Отказ)
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске
И НЕ Том.Пустая() Тогда
СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ЭтотОбъект);
РаботаСФайламиВТомахСлужебный.УдалитьФайл(
РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла));
КонецЕсли;
// Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки.
// Сначала требуется физически удалить файл, а потом уже сведения о нем в информационной базе.
// Иначе данные о расположении файла будут недоступны.
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Иначе
@@ -36,7 +36,7 @@
<div>Включите флажок <strong>Обязательное заполнение</strong>, для того чтобы программа проверяла заполнение поля контактной информации при вводе документов или списков. Сохранение данных без заполнения этого поля будет невозможно.</div>
</li>
<li>Настройка <strong>Редактировать</strong> используется для типов контактной информации <strong>Адрес</strong>, <strong>Телефон</strong>, <strong>Факс</strong>. Такая настройка позволяет выбрать способ ввода этих видов контактной информации:</li>
<ul><li><b>В диалоге</b> - позволяет ограничить ввод нового и редактирование существующего адреса, телефона или факса шаблоном ввода, а также выбором адреса из адресного классификатора. При выбранном значении предусмотрена возможность ввести адрес в свободной форме. Это может понадобиться в исключительных случаях, например, если данные адреса в каких либо документах приводятся с ошибкой, но для печати необходимо их проставить. При этом такой адрес будет храниться в программе с пометкой, что он введен в свободной форме, и использоваться с ограничениями. После уточнения адрес можно будет исправить, заполнив по шаблону.</li>
<ul><li><b>В диалоге</b> - позволяет ограничить ввод нового и редактирование существующего адреса, телефона или факса шаблоном ввода, а также выбором адреса из адресного классификатора. При выбранном значении предусмотрена возможность ввести адрес в свободной форме. Это может понадобиться в исключительных случаях, например, если данные адреса в каких-либо документах приводятся с ошибкой, но для печати необходимо их проставить. При этом такой адрес будет храниться в программе с пометкой, что он введен в свободной форме, и использоваться с ограничениями. После уточнения адрес можно будет исправить, заполнив по шаблону.</li>
<li><b>В поле ввода</b> - если для адресов и телефонов не требуется ввод по шаблону (например, для иностранных адресов), то можно отключить ввод в диалоге;</li>
<li><b>В диалоге и в поле ввода</b> - позволяет использовать оба способа ввода. Если правильный ввод адреса не вызывает затруднений, можно будет ввести адрес прямо в поле ввода не открывая диалога, в случае затруднений можно будет открыть шаблон и ввести адрес с помощью шаблона.</li></ul><li>
<div>Настройка <strong>Запрещать ввод некорректного адреса</strong> используется для полей <strong>Адрес</strong>, <strong>Телефон</strong> или <strong>Адрес электронной почты</strong>. Такая настройка позволяет запретить ввод российских адресов, телефонов или адресов электронной почты, которые заполнены не по установленным правилам.</div></li>
@@ -51,6 +51,7 @@
<ul><li><strong>Запрещать ввод некорректного адреса</strong> - если флажок включен, то при некорректном вводе российского адреса невозможно будет ввести данные в программу (имеет смысл только при использовании шаблонов ввода и адресного классификатора - для использования этой возможности включите флажок <strong>Редактировать только в диалоге</strong>). Адрес проверяется по ФИАС.
</li>
<li><strong>Указывать ОКТМО</strong> - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО. По ОКТМО нужно получать адрес муниципального образования, в том числе и код - получение особенностей налогообложения выполняется именно по коду. При необходимости поле можно отредактировать.</li>
<a name="СтандартныеПодсистемы.КонтрольВеденияУчета"></a>
<li><b>Автоматически исправлять устаревшие адреса</b> - можно включить автоматическую проверку и исправление адресов. В этом случае регламентное задание 1 раз в неделю проверяет и исправляет адреса, ставшие устаревшими.</li></ul></li></ul><h3>Особенности настройки поля Телефон и факс</h3>
<div>
<ul><li>Для того чтобы использовать <strong>Телефон с добавочным номером</strong>, включите соответствующий флажок. Для некоторых типов телефонов (например, мобильный телефон) не предусмотрено добавочных номеров.</li></ul></div>
@@ -65,8 +66,7 @@
<li><b>^</b> - недопустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;</li>
<li><b>@</b> - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.</li></ul><li>Например, при маске "<b>+7(999)999-99-99</b>" текст "<b>9001234567</b>" преобразуется в "<b>+7(900)123-45-67</b>".</li>
<li>Для того чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ "<b>\</b>".</li>
<li>Допускается указание нескольких масок в одном параметре. Маски разделяются символом "<b>;</b>". В этом случае использоваться будет та маска, к которой подходит введенный текст.</li>
<div><br></div></ul><h3>Особенности настройки поля Адрес электронной почты</h3>
<li>Допускается указание нескольких масок в одном параметре. Маски разделяются символом "<b>;</b>". В этом случае использоваться будет та маска, к которой подходит введенный текст.</li></ul><h3>Особенности настройки поля Адрес электронной почты</h3>
<ul><li>Если у поля установлен тип <strong>Адрес электронной почты</strong>, то программа проверяет правильность ввода адреса электронной почты. Включите флажок <strong>Запрещать ввод некорректных адресов</strong>, в этом случае ввести некорректный адрес электронной почты будет невозможно.</li></ul><h3>Особенности настройки поля Другое</h3>
<ul><li>
<div>С помощью переключателя можно указать <strong>Вид поля</strong>, для того чтобы более точно расположить поле в окне объекта:</div>
@@ -64,6 +64,7 @@
#Область СлужебныеПроцедурыИФункции
// См. ЭлектроннаяПодписьСлужебный.ПоставляемыеНастройкиПрограмм
Функция ПоставляемыеНастройкиПрограмм() Экспорт
Настройки = ЭлектроннаяПодписьСлужебный.ПоставляемыеНастройкиПрограмм();
@@ -4,22 +4,31 @@
<p>В списке выводится:</p>
<ul><li>
<div><img src="StdPicture.MoveLeft"></img> - загрузка (получение данных);</div>
</li><li>
</li>
<li>
<div><img src="StdPicture.MoveRight"></img> - выгрузка (отправка данных);</div>
</li><li>
<div><strong>Наименование</strong> - полное наименование сценария; </div></li></ul><p>Жирным шрифтом в списке выделяются сценарии, которые выполняются автоматически по расписанию.</p>
<p>По команде <strong>Еще - Изменить форму</strong> можно добавить дополнительные поля, такие как <strong>Версия данных</strong>, <strong>Комментарий</strong> и т.д.</p>
</li>
<li>
<div><strong>Наименование</strong> - полное наименование сценария;</div></li>
<li><img src="StdPicture.ScheduledJob"></img> - выполняется автоматически по расписанию.</li></ul><p>По команде <strong>Еще - Изменить форму</strong> можно добавить дополнительные поля, такие как <strong>Версия данных</strong>, <strong>Комментарий</strong> и т.д.</p>
<h3>Настройка сценария</h3>
<ul><li>Нажмите <img src="StdPicture.CreateListItem"></img><strong>Добавить</strong>, введите необходимые <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">поля</a>.
<p>Настройка сценария синхронизации данных состоит из следующих этапов:</p>
<ul><li>Настроить расписание выполнения сценария синхронизации данных.
</li><li>Выбрать информационные базы, для которых будет выполняться сценарий синхронизации данных.
</li><li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li><li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.НастройкиСинхронизацииДанных/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3>
</li>
<li>Выбрать информационные базы, для которых будет выполняться сценарий синхронизации данных.
</li>
<li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li>
<li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.НастройкиСинхронизацииДанных/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3>
<ul><li>
<div>С помощью выпадающего меню <strong>Включить/Отключить</strong> можно управлять выгрузкой и загрузкой данных.</div>
</li><li>
</li>
<li>
<div>Если выгрузка или загрузка включена, в соответствующей колонке появляется флажок.</div>
</li><li>
</li>
<li>
<div>Не рекомендуется выполнять только выгрузку данных или только загрузку данных, хотя сценарий позволяет это сделать. Надо выполнять полноценную синхронизацию данных в одном сценарии.</div></li></ul><h3>Включение расписания</h3>
<ul><li>Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img>, для того чтобы <strong>Включить/Отключить </strong><strong>расписание </strong><strong>синхронизации данных</strong>. Если расписание включено, сценарий выделяется в списке жирным шрифтом. </li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
<ul><li>Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img>, для того чтобы <strong>Включить/Отключить </strong><strong>расписание </strong><strong>синхронизации данных</strong>. Если расписание включено, в колонке <img src="StdPicture.ScheduledJob" width="16" height="16"></img> появляется флажок. </li></ul><h3>Выполнение сценария</h3>
<div>
<ul><li>С помощью кнопки <b>Выполнить сценарий</b> можно запустить синхронизацию по выбранному сценарию и проверить настройки.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></div></body></html>
@@ -441,7 +441,7 @@
КонецЦикла;
РаботаСФайламиВТомахСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ТомХраненияФайлов);
РаботаСФайламиВТомахСлужебный.ЗаполнитьЛишниеФайлы(ТаблицаФайловНаДиске, ТомХраненияФайлов);
ТаблицаФайловНаДиске.Индексы.Добавить("СтатусПроверки");
МассивЛишнихФайлов = ТаблицаФайловНаДиске.НайтиСтроки(
Новый Структура("СтатусПроверки", НСтр("ru = 'Лишние файлы (есть на диске, но сведения о них отсутствуют)'")));
@@ -219,6 +219,32 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ПроверитьЦелостность</name>
<id>79</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПроверитьЦелостностьРасширеннаяПодсказка</name>
<id>80</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ПроверитьЦелостность</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -885,6 +911,24 @@
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ПроверитьЦелостность</name>
<title>
<key>ru</key>
<value>Проверить целостность</value>
</title>
<id>3</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ПроверитьЦелостность</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -1,3 +1,4 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
@@ -42,6 +43,22 @@
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьЦелостность(Команда)
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если НЕ СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(ТекущиеДанные) Тогда
Возврат;
КонецЕсли;
ПараметрыОтчета = Новый Структура();
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("Отбор", Новый Структура("Том", ТекущиеДанные.Ссылка));
ОткрытьФорму("Отчет.ПроверкаЦелостностиТома.ФормаОбъекта", ПараметрыОтчета);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -235,6 +235,22 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ec966ef2-b291-4937-a164-5c2b461871f8">
<name>ВремяПоследнейОчисткиФайлов</name>
<synonym>
<key>ru</key>
<value>Время последней очистки файлов</value>
</synonym>
<type>
<types>Date</types>
<dateQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<forms uuid="db15f8eb-4736-4b47-9cee-3e6883f0888c">
<name>ФормаЭлемента</name>
<synonym>
@@ -73,7 +73,7 @@
УстановитьДоступностьКомандСпискаЭП();
УстановитьДоступностьКомандСпискаШифрования();
ПрочитатьСертификатыПодписей();
РаботаСФайламиСлужебныйКлиент.ПрочитатьСертификатыПодписей(ЭтотОбъект);
ОтображатьВкладкиДополнительныхДанных();
КонецПроцедуры
@@ -1349,143 +1349,6 @@
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьСертификатыПодписей()
Если ЭлектронныеПодписи.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
Если МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда
Возврат;
КонецЕсли;
НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеПодключенияРасширения", ЭтотОбъект, Контекст));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейПослеПодключенияРасширения(Подключено, Контекст) Экспорт
Если Не Подключено Тогда
Возврат;
КонецЕсли;
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
МодульЭлектроннаяПодписьКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПолучениеСертификатов", Ложь);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда
Возврат;
КонецЕсли;
Контекст.Вставить("Индекс", -1);
Контекст.Вставить("МенеджерКриптографии", Результат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
//
// Параметры:
// Контекст - Структура
//
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклНачало(Контекст)
Если ЭлектронныеПодписи.Количество() <= Контекст.Индекс + 1 Тогда
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
Контекст.Вставить("СтрокаТаблицы", ЭлектронныеПодписи[Контекст.Индекс]);
Если ЗначениеЗаполнено(Контекст.СтрокаТаблицы.Отпечаток) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
// Подпись не была прочитана при записи объекта.
Подпись = ПолучитьИзВременногоХранилища(Контекст.СтрокаТаблицы.АдресПодписи);
Если Не ЗначениеЗаполнено(Подпись) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект),
Подпись);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Экспорт
Если Сертификаты.Количество() = 0 Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Сертификат = Сертификаты[0];// СертификатКриптографии
Контекст.Вставить("Сертификат", Сертификат);
Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата", ЭтотОбъект));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата(ДанныеСертификата, Контекст) Экспорт
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
СтрокаТаблицы = Контекст.СтрокаТаблицы;
СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток);
СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор);
СтрокаТаблицы.КомуВыданСертификат = МодульЭлектроннаяПодписьКлиент.ПредставлениеСубъекта(Контекст.Сертификат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
&НаКлиенте
Функция ЭтоНовый()
@@ -18,7 +18,8 @@
<ul><li>Вкладки могут включать и другие списки, например, список партнеров.
</li>
<li>Если в списке много элементов, можно использовать команду <strong>Найти</strong>. Можно работать со списком и использовать его возможности, вводить элементы. </li></ul></li>
<li><strong>Контакты по предмету -</strong> вкладка становится доступной, если в исходящем электронном письме заполнено поле <strong>Предмет</strong>. Программа автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документах взаимодействий</a>, где этот предмет указан.</li></ul><li>Двойной щелчок мыши по нужному контакту добавит запись о нем в правую часть адресной книги. Также можно использовать стрелки "<strong>&gt;</strong>" и "<strong>&lt;</strong>" или "<strong>&lt;&lt;</strong>" для добавления или удаления контактов.</li></ul></li>
<li><strong>Контакты по предмету -</strong> вкладка становится доступной, если в исходящем электронном письме заполнено поле <strong>Предмет</strong>. Программа автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документах взаимодействий</a>, где этот предмет указан.</li></ul><li>Включите флажок в нижней части списка, для того чтобы показывать <b>Только контакты с адресами</b>. Применяется только к тем спискам, в которых есть колонка <b>Адрес</b>. Такая возможность может быть полезна, если в списках много контактов, при этом не все заполнены.</li>
<li>Двойной щелчок мыши по нужному контакту добавит запись о нем в правую часть адресной книги. Также можно использовать стрелки "<strong>&gt;</strong>" и "<strong>&lt;</strong>" или "<strong>&lt;&lt;</strong>" для добавления или удаления контактов.</li></ul></li>
<li>Правая часть содержит список контактов для добавления в исходящее электронное письмо.
<ul><li>Список состоит из колонок:
<ul><li>В колонке <strong>Группа</strong> можно изменить поле письма, в которое будут добавлены контакты (<strong>Кому</strong>, <strong>Копии</strong>, <strong>Скрытые</strong>, <strong>Получатели ответа</strong>). По умолчанию установлена группа <strong>Кому</strong>.
@@ -27,7 +28,7 @@
</li>
<li>В колонке <strong>Представление</strong> проставляется наименование контакта. </li></ul></li>
<li>С помощью контекстного меню правой части адресной книги нужные контакты можно <strong>Найти в списке</strong>, <strong>Найти по адресу</strong>, <strong>Найти по представлению</strong>, <strong>Выбрать адрес, указанный в контакте</strong> (поиск осуществляется в левой части адресной книги), а также разместить адреса в нужные группы. </li></ul></li>
<li>Если контакт не найден в программе, то его можно <strong>Добавить</strong> в список вручную, указав адрес электронной почты и представление контакта. Добавить строку в список можно также клавишей <strong>Ins</strong>.
<li>Если контакт не найден в программе, то его можно вставить в правый список вручную с помощью кнопки <b>Добавить получателя</b>, указав адрес электронной почты и представление контакта. Добавить строку в список можно также клавишей <strong>Ins</strong>.
</li>
<li>С помощью команд меню <strong>Еще</strong> можно <img src="StdPicture.Delete"></img> <strong>Удалить контакт</strong> из списка или поменять контакты местами. </li></ul><h3>Добавление контактов в исходящее электронное письмо</h3>
<ul><li>Для того чтобы добавить контакт в соответствующее поле исходящего письма, выделите нужную строку, нажмите кнопку <strong>Выбрать</strong>. Также можно воспользоваться двойным щелчком мыши.
@@ -0,0 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Предназначена для вызова дополнительных отчетов и обработок из разделов программы.
<div>Размещается обычно в панелях действий <b>Отчеты</b> и <b>Сервис</b> разделов программы.<br><div>С помощью команд из списка можно:</div>
<div>
<ul><li>выполнять обработку произвольных данных программы;</li>
<li>формировать произвольные отчеты, не привязанные к конкретным спискам и документам.</li></ul><h3>Выполнение команд</h3></div>
<div>
<ul><li>Выберите команду, нажмите <b>Выполнить</b>.</li>
<li>Также можно выполнить команду двойным щелчком мыши.</li></ul></div>
<h3>Настройка списка команд</h3>
<div>
<ul><li>Для просмотра доступных в списке дополнительных отчетов и обработок перейдите по <a href="CommonForm.НастройкаМоихОтчетовИОбработок/Help">ссылке</a> <b>Настроить список</b>.</li>
<li>В списке можно включать и выключать команды, предусмотренные при настройке дополнительных отчетов и обработок, с помощью флажков.</li></ul></div>
<h3>Как добавляются команды в список команд</h3>
<div>Список команд зависит от настроек глобальных <a href="Catalog.ДополнительныеОтчетыИОбработки/Help">дополнительных отчетов и обработок</a>:<br><ul><li>Настройка текста и состава команд производится разработчиком при создании дополнительного отчета или обработки.</li>
<li>Для того чтобы можно было с помощью данных команд вызвать <a href="Catalog.ДополнительныеОтчетыИОбработки.Form.ФормаЭлемента/Help">дополнительный отчет или обработку</a>, администратор программы при настройке дополнительного отчета или обработки должен сначала включить имя данного пользователя в список для быстрого доступа. Иначе список доступных по этим командам дополнительных отчетов и обработок может быть пустым.</li></ul></div></div>
<div><br></div></body></html>
@@ -5,6 +5,11 @@
<key>ru</key>
<value>Дополнительные отчеты и обработки</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</mdclass:CommonForm>
@@ -0,0 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Предназначен для просмотра и управления доступными командами текущим пользователем. 
<div><br></div>
<div>В списке можно включать или выключать предусмотренные команды с помощью флажков.
<div><br><div>Для того чтобы в списке были доступны команды, администратор программы при настройке <a href="Catalog.ДополнительныеОтчетыИОбработки.Form.ФормаЭлемента/Help">дополнительного отчета или обработки</a> должен сначала включить имя данного пользователя в список для быстрого доступа, иначе список доступных команд может быть пустым.  При этом состав и текст команд в дополнительных отчетах и обработках определяется разработчиком.</div></div></div></body></html>
@@ -5,6 +5,11 @@
<key>ru</key>
<value>Настройка моих отчетов и обработок</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</mdclass:CommonForm>
@@ -41,16 +41,14 @@
<li>
<div><strong>Получены данные для сопоставления</strong> - для анализа и сопоставления полученных данных нажмите кнопку <strong>Запустить синхронизацию</strong>.</div></li></ul></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка синхронизации данных</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для настройки новой синхронизации данных с другой программой выберите соответствующую команду из подменю <strong>Новая синхронизация данных</strong>. Откроется <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">настройка синхронизации данных</a>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Просмотр информации о настройке</h3>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для настройки новой синхронизации данных с другой программой или создания распределенной базы нажмите кнопку <b>Создать</b>, выберите команду из подменю <strong>Новая синхронизация данных</strong>. Откроется <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">настройка синхронизации данных</a>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Синхронизация данных</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для того чтобы получить информацию об особенностях ведения учета в программах, между которыми настроена синхронизация данных и получить рекомендации по настройке синхронизации данных, нажмите <strong>Еще - Подробнее о синхронизации данных с этой программой</strong>. </div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Синхронизация данных</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Выделите нужную настройку, нажмите <img src="CommonPicture.СинхронизацияДанныхВыполнение"></img> <strong>Запустить синхронизацию</strong>, для того чтобы начать синхронизацию данных. </div>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Выделите нужную настройку, нажмите <img src="CommonPicture.СинхронизацияДанныхВыполнение"></img> <strong>Синхронизировать</strong>, для того чтобы начать синхронизацию данных. </div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для синхронизации данных между двумя программами запускается <a href="DataProcessor.ПомощникИнтерактивногоОбменаДанными/Help">сопоставление одинаковых данных</a>. Такая процедура полезна в тех случаях, когда в обеих программах по каким-то причинам были независимо друг от друга введены одни и те же данные. Для снижения вероятности таких ситуаций можно настроить частую синхронизацию данных по расписанию.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Изменение синхронизации данных</h3>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для синхронизации данных между двумя программами с помощью кнопки <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> или команды <b>Еще - Синхронизировать с дополнительными параметрами </b>запускается <a href="DataProcessor.ПомощникИнтерактивногоОбменаДанными/Help">сопоставление одинаковых данных</a>.  Такая процедура полезна в тех случаях, когда в обеих программах по каким-то причинам были независимо друг от друга введены одни и те же данные. Для снижения вероятности таких ситуаций можно настроить частую синхронизацию данных по расписанию. </div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Изменение синхронизации данных</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для того чтобы изменить или продолжить настройку синхронизации данных, нажмите кнопку <strong>Настроить</strong>.</div>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Для того чтобы изменить или продолжить настройку синхронизации данных, нажмите кнопку <strong>Изменить настройки</strong>.</div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Также можно воспользоваться двойным щелчком мыши.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Просмотр состава отправляемых данных</h3>
@@ -59,10 +57,7 @@
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Выполните команду меню <strong>Еще - Выгрузка данных для сопоставления</strong>. </div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Настройка синхронизации по расписанию</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">С помощью команды <strong>Еще</strong> - <strong>Сценарии синхронизации данных </strong>можно <img src="StdPicture.ScheduledJob" width="16" height="16"></img> <strong>Настроить</strong> синхронизацию данных по <a href="Catalog.СценарииОбменовДанными/Help">заданному расписанию</a>. В этом случае в клиент-серверном режиме работы синхронизация данных будет выполняться в фоне, с помощью регламентного задания <strong>Синхронизация данных</strong>, а в файловом режиме дополнительно потребуется запустить отдельный сеанс для выполнения <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентных заданий</a>.</div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Также команду можно найти в контекстном меню по правой кнопке мыши.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Просмотр журнала регистрации</h3>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">С помощью ссылки в нижней части окна <b>Синхронизация по расписанию</b><strong> </strong>можно <img src="StdPicture.ScheduledJob" width="16" height="16"></img> настроить синхронизацию данных по <a href="Catalog.СценарииОбменовДанными/Help">заданному расписанию</a>. В этом случае в клиент-серверном режиме работы синхронизация данных будет выполняться в фоне, с помощью регламентного задания <strong>Синхронизация данных</strong>, а в файловом режиме дополнительно потребуется запустить отдельный сеанс для выполнения <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентных заданий</a>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Просмотр журнала регистрации</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">С помощью команд меню <strong>Еще - </strong><strong>События отправки данных</strong> или <strong>События получения данных</strong> можно подробно узнать, как проходила синхронизация данных, из <a href="DataProcessor.ЖурналРегистрации/Help">журнала регистрации</a> программы, отфильтрованного по событиям синхронизации, а также просмотреть каждое <a href="DataProcessor.ЖурналРегистрации.Form.Событие/Help">событие</a>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Замена правил для синхронизации из внешнего файла</h3>
<ul dir="ltr"><li>
@@ -75,7 +70,7 @@
</li>
<li style="MARGIN-RIGHT: 0px">Нажать на кнопку <strong>Записать и закрыть</strong>. Загруженные правила будут применены немедленно.</li></ul></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Удаление настройки синхронизации</h3>
<ul><li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Выделите настройку, нажмите <strong>Еще - <img src="StdPicture.Delete" width="16" height="16"></img> Удалить настройку синхронизации.</strong> </div>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Выделите настройку, нажмите <strong>Еще - <img src="StdPicture.Delete" width="16" height="16"></img> Удалить настройку.</strong> </div>
</li>
<li>
<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><strong>Внимание! Настройка будет удалена безвозвратно.</strong></div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Действия при восстановлении информационной базы из резервной копии</h3>
@@ -2,12 +2,16 @@
<p>Описание обновлений включает в себя список изменений в последней версии программы, а также историю изменений в предыдущих версиях. </p>
<p>Выводится однократно после завершения обновления на новую версию. Описание обновлений можно просмотреть позднее по команде <strong>Описание изменений программы </strong>в <font color="#000000">панели <strong>Информация</strong> в разделе <strong>Главное</strong>. </font></p>
<h3>Доступные действия</h3>
<ul><li>Сведения о последних изменениях и улучшениях в программе можно сохранить в файл. Для этого нажмите <strong>Сохранить как</strong>, укажите путь к файлу на компьютере. Также можно их распечатать с помощью соответствующей кнопки.
</li><li>Для удобства навигации по тексту можно свернуть или <img src="StdPicture.ExpandAll"></img> <strong>Развернуть все группы</strong> (заголовки).
</li><li>Также предусмотрена команда поиска, с помощью которой можно быстро найти нужную информацию о новой версии.</li></ul><h3>Информация о ходе обновления версии ИБ</h3>
<ul><li>Сведения о последних изменениях и улучшениях в программе можно сохранить в файл. Для этого нажмите <strong>Сохранить как</strong>, укажите путь к файлу на компьютере. Также можно их распечатать с помощью кнопки <b>Печать</b>.
</li>
<li>Для удобства навигации по тексту можно свернуть или <img src="StdPicture.ExpandAll"></img> <strong>Развернуть все группы</strong> (заголовки).
</li>
<li>Также предусмотрена команда поиска, с помощью которой можно быстро найти нужную информацию о новой версии.</li></ul><h3>Информация о ходе обновления версии ИБ</h3>
<ul><li>Если в программе после обновления версии еще проводится обработка данных, то для всех <a href="Catalog.Пользователи/Help">пользователей</a> выводится предупреждение <strong><img src="CommonPicture.Предупреждение"></img> Выполняются дополнительные процедуры обработки данных</strong>. В это время работа в программе временно ограничена, так как еще не завершен переход на новую версию.</li></ul><h3>Возможности для администратора</h3>
<ul><li>Администратор может ознакомиться со списком дополнительных инструкций, которые рекомендуется выполнить после обязательной части процесса <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновления ИБ</a>. Перейти к выполнению инструкций можно с помощью ссылок, расположенных в тексте описания новой версии.
</li><li>По ссылке <strong>Выполняются дополнительные процедуры обработки данных</strong> перейдите, для того чтобы узнать о <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">ходе дополнительной обработки данных</a>.
</li><li>Перейдите по ссылке <strong>Техническая информация о результатах обновления</strong>, для того чтобы просмотреть события в <a href="DataProcessor.ЖурналРегистрации/Help">журнале регистрации</a>, возникшие в процессе обновления.</li></ul><h3>См. также:</h3>
</li>
<li>По ссылке <strong>Выполняются дополнительные процедуры обработки данных</strong> перейдите, для того чтобы узнать о <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">ходе дополнительной обработки данных</a>.
</li>
<li>Перейдите по ссылке <strong>Техническая информация о результатах обновления</strong>, для того чтобы просмотреть события в <a href="DataProcessor.ЖурналРегистрации/Help">журнале регистрации</a>, возникшие в процессе обновления.</li></ul><h3>См. также:</h3>
<ul><li>
<div><a href="v8help://frame/form_common">Работа с формами.</a></div></li></ul></body></html>
@@ -511,6 +511,7 @@
| И (ГруппыДоступаПользователи.Пользователь = &Пользователь)
|ГДЕ
| НЕ Профили.ПометкаУдаления
| И НЕ Профили.ЭтоГруппа
| И НЕ(&ОтборПрофилейТолькоТекущегоПользователя = ИСТИНА
| И ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL)
|;
@@ -666,6 +667,7 @@
| И (ГруппыДоступаПользователи.Пользователь = &Пользователь)
|ГДЕ
| НЕ Профили.ПометкаУдаления
| И НЕ Профили.ЭтоГруппа
|;
|
|////////////////////////////////////////////////////////////////////////////////
@@ -1,7 +1,21 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>Предназначен для управления исправлениями (патчами).</p>
<p>Открывается с помощью ссылки <strong>Установленные исправления (патчи)</strong> в разделе <strong>Администрирование - Обновление программы</strong>.</p>
<h3>Установка исправлений</h3>
<ul><li>Нажмите кнопку <strong>Установить исправление</strong>, для того чтобы открыть помощник <a href="DataProcessor.УстановкаОбновлений/Help">Установка обновлений</a>. Следуйте указаниям программы.</li></ul><h3>Удаление исправлений</h3>
<ul><li>Нажмите кнопку <strong>Удалить исправление</strong>, если установленное исправление (патч) по каким-либо причинам не устраивает.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
<p>Исправление (патч) позволяет оперативно исправлять ошибки в программе, не дожидаясь следующего исправительного релиза. Установка патчей также не требует обязательного завершения сеансов пользователей, работающих с программой. Для применения исправлений достаточно перезапустить программу в удобный момент времени.</p>
<p><span style="font-size: 13.4399995803833px; font-weight: bold;">Автоматическая установка патчей</span></p>
<p></p>
<ul><li>Загрузка и установка патчей выполняется <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ИнтернетПоддержкаИСервисы/Help">автоматически</a> при наличии подписки 1С:ИТС  и доступа к сети Интернет. Это рекомендуемый режим работы. </li>
<li>Для настройки автоматической загрузки необходимо перейти в раздел <b>Администрирование - Интернет-поддержка и сервисы - Обновление программы</b> и включить флажок <b>Загружать и устанавливать исправления (патчи) автоматически</b>. Потребуется подключение Интернет-поддержки.</li></ul><p></p>
<p><span style="font-size: 13.4399995803833px; font-weight: bold;">Установка исправлений вручную</span></p>
<p>Если на компьютере не доступен Интернет, но есть возможность скачать патч с 1С:ИТС:</p>
<ul><li>На сайте 1С:ИТС можно прочитать, какую ошибку каждый патч исправляет.</li>
<li>Загрузить архив с патчами с сайта для интересующей версии программы.</li>
<li>Распаковать загруженный архив в произвольный каталог на компьютере.</li>
<li>В данном списке нажать кнопку <strong>Установить исправление</strong>, для того чтобы открыть помощник <a href="DataProcessor.УстановкаОбновлений/Help">Установка обновлений</a>. Следуйте указаниям программы, при выборе файла обновления или исправления укажите ранее распакованные файлы.</li>
<li>После установки патчей перезапустить сеанс, для того чтобы они применились и появились в данном списке.</li></ul><h3>Удаление исправлений</h3>
<ul><li>Нажмите кнопку <strong>Удалить исправление</strong>, если установленное исправление (патч) по каким-либо причинам не устраивает.</li>
</ul><h3>Сохранение на компьютер</h3>
<div>
<ul><li>С помощью команды <b>Еще - Сохранить как</b> можно выгрузить установленные исправления в папку на компьютере.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></div></body></html>
@@ -4816,7 +4816,7 @@
КонецЕсли;
Если СтрНачинаетсяС(ВРег(Параметр.Имя), "ОТБОР.") Тогда
ПараметрыЗаполнения.Отбор.Вставить(Сред(Параметр.Имя, 7), Параметр.Значение);
ПараметрыЗаполнения.Отбор.Вставить(СтрРазделить(Параметр.Имя, ".")[1], Параметр.Значение);
Иначе
ПараметрыЗаполнения.Вставить(Параметр.Имя, Параметр.Значение);
КонецЕсли;
@@ -1835,6 +1835,15 @@
&НаКлиенте
Функция ПодходящиеЗначенияУниверсальногоПоиска(Запрос)
ИспользуемыеПоляПоискаПоТипам = НастройкиОтчета.ИспользуемыеПоляУниверсальногоПоискаПоТипам;
Если ВариантМодифицирован
Или ИспользуемыеПоляПоискаПоТипам.Количество() = 0 Тогда
НайтиПоляУниверсальногоПоискаПоТипам(Отчет.КомпоновщикНастроек, НастройкиОтчета);
ИспользуемыеПоляПоискаПоТипам = НастройкиОтчета.ИспользуемыеПоляУниверсальногоПоискаПоТипам;
КонецЕсли;
ПодходящиеЗначения = Новый СписокЗначений;
МаксимальноеКоличествоПодходящихЗначений = 50;
@@ -1847,8 +1856,6 @@
ОформитьПолеУниверсальногоПоиска(ПараметрыПоиска.УправляющиеСимволы);
ИспользуемыеПоляПоискаПоТипам = НастройкиОтчета.ИспользуемыеПоляУниверсальногоПоискаПоТипам;
Если ИспользуемыеПоляПоискаПоТипам.Количество() = 0 Тогда
Возврат ПодходящиеЗначения;
КонецЕсли;
@@ -2504,15 +2511,15 @@
КонецФункции
&НаСервере
Процедура НайтиПоляУниверсальногоПоискаПоТипам()
&НаСервереБезКонтекста
Процедура НайтиПоляУниверсальногоПоискаПоТипам(КомпоновщикНастроек, НастройкиОтчета)
ИспользуемыеПоляПоискаПоТипам = Новый Соответствие;
Коллекции = Новый Массив;
Коллекции.Добавить(ОписаниеПараметровОтчета());
Коллекции.Добавить(ОписаниеОтборовОтчета());
Коллекции.Добавить(ОписаниеПолейОтчета());
Коллекции.Добавить(ОписаниеПараметровОтчета(КомпоновщикНастроек));
Коллекции.Добавить(ОписаниеОтборовОтчета(КомпоновщикНастроек));
Коллекции.Добавить(ОписаниеПолейОтчета(КомпоновщикНастроек));
Для Каждого Коллекция Из Коллекции Цикл
@@ -2541,12 +2548,12 @@
КонецПроцедуры
&НаСервере
Функция ОписаниеПараметровОтчета()
&НаСервереБезКонтекста
Функция ОписаниеПараметровОтчета(КомпоновщикНастроек)
ОписаниеПараметров = Новый Массив;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Настройки = КомпоновщикНастроек.Настройки;
ПоляПараметровДанных = Настройки.ДоступныеПоляПараметровДанных.Элементы;
ПараметрыДанных = Настройки.ПараметрыДанных;
@@ -2584,14 +2591,14 @@
КонецФункции
&НаСервере
Функция ОписаниеОтборовОтчета(Отбор = Неопределено, ОписаниеОтборов = Неопределено)
&НаСервереБезКонтекста
Функция ОписаниеОтборовОтчета(КомпоновщикНастроек, Отбор = Неопределено, ОписаниеОтборов = Неопределено)
Если ОписаниеОтборов = Неопределено Тогда
ОписаниеОтборов = Новый Массив;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Настройки = КомпоновщикНастроек.Настройки;
Если Отбор = Неопределено Тогда
Отбор = Настройки.Отбор;
@@ -2601,7 +2608,7 @@
Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
ОписаниеОтборовОтчета(Элемент, ОписаниеОтборов);
ОписаниеОтборовОтчета(КомпоновщикНастроек, Элемент, ОписаниеОтборов);
Иначе
@@ -2619,19 +2626,18 @@
КонецФункции
&НаСервере
Функция ОписаниеПолейОтчета()
&НаСервереБезКонтекста
Функция ОписаниеПолейОтчета(КомпоновщикНастроек)
ОписаниеПолей = Новый Массив;
ИндексСтруктурыОтчета = ВариантыОтчетовСлужебный.ИндексСтруктурыОтчета(ЭтотОбъект);
ИндексСтруктурыОтчета = ВариантыОтчетовСлужебный.ИндексСтруктурыОтчетаБезКонтекста(КомпоновщикНастроек);
ИндексПолейОтчета = ИндексСтруктурыОтчета.Скопировать(, "Поле");
ИндексПолейОтчета.Свернуть("Поле");
ПоляОтчета = ИндексПолейОтчета.ВыгрузитьКолонку("Поле");
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Настройки = КомпоновщикНастроек.Настройки;
Для Каждого ПолеОтчета Из ПоляОтчета Цикл
@@ -3507,7 +3513,8 @@
КлючТекущегоВарианта = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, "");
Если Не ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда
Если Не ЗначениеЗаполнено(КлючТекущегоВарианта)
Или (ЗначениеЗаполнено(Параметры.КлючВарианта) И КлючТекущегоВарианта <> Параметры.КлючВарианта) Тогда
Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда
КлючТекущегоВарианта = Параметры.КлючВарианта;
@@ -3684,7 +3691,6 @@
ОтчетыСервер.ВосстановитьЗначенияОтборов(ЭтотОбъект);
НайтиПоляУниверсальногоПоискаПоТипам();
УстановитьВидимостьДоступность();
КонецПроцедуры
@@ -206,7 +206,7 @@
Результат = АдресныйКлассификаторСлужебный.СведенияОЗагруженномРегионе();
СведенияОРегионе = АдресныйКлассификаторСлужебный.НаименованиеИСокращение(НаименованиеРегиона);
СведенияОРегионе = АдресныйКлассификаторСлужебный.НаименованиеИСокращение(НаименованиеРегиона, Истина);
РезультатЗапроса = АдресныйКлассификаторСлужебный.АктуальныеДанныеОРегионе(СведенияОРегионе);
Если РезультатЗапроса.Пустой() Тогда
@@ -1714,7 +1714,8 @@
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Классификатор.Наименование + "" "" + Классификатор.Сокращение КАК Представление,
| Классификатор.Наименование КАК Наименование,
| Классификатор.Сокращение КАК Сокращение,
| Классификатор.КодСубъектаРФ КАК КодСубъектаРФ,
| Классификатор.ОКТМО КАК ОКТМО,
| ЗагруженныеВерсииАдресныхСведений.Версия КАК Версия,
@@ -1773,10 +1774,14 @@
ЗагруженныеСведения.Индексы.Добавить("КодСубъектаРФ");
ЗагруженныеСведения.Индексы.Добавить("Загружено");
ЗагруженныеСведения.Индексы.Добавить("ОКТМО");
ЗагруженныеСведения.Колонки.Добавить("Представление", ОбщегоНазначения.ОписаниеТипаСтрока(250));
// Корректируем идентификаторы из-за особенностей платформы по передаче уникального
// идентификатора в таблицу-параметр запроса.
// Формируем наименования регионов по правилам их написания.
Для Каждого Строка Из ЗагруженныеСведения Цикл
Строка.Представление = СоединитьНаименованиеИТипАдресногоОбъекта(Строка.Наименование, Строка.Сокращение, Истина);
Если Не ЗначениеЗаполнено(Строка.Идентификатор) Тогда
СтрокаКлассификатора = Классификатор.Найти(Строка.КодСубъектаРФ, "КодСубъектаРФ");
Если СтрокаКлассификатора <> Неопределено Тогда
@@ -2631,6 +2636,11 @@
КонецЕсли;
Если ЭтоРегион Тогда
Если НаименованиеРегионаБезТипа(Наименование) Тогда
Возврат Наименование;
КонецЕсли;
Возврат Наименование + " " + ТипАдресногоОбъекта;
КонецЕсли;
@@ -3623,26 +3633,50 @@
Функция АктуальныеДанныеОРегионе(Знач СведенияОРегионе) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ,
| ВЫБОР
| КОГДА НЕ ЗагруженныеДанные.Идентификатор ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК РегионЗагружен
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ЗагруженныеДанные
| ПО (ЗагруженныеДанные.Уровень > 1)
| И АдресныеОбъекты.КодСубъектаРФ = ЗагруженныеДанные.КодСубъектаРФ
|ГДЕ
| АдресныеОбъекты.Наименование = &Наименование
| И АдресныеОбъекты.Сокращение = &Сокращение
| И АдресныеОбъекты.Уровень = 1";
Если ЗначениеЗаполнено(СведенияОРегионе.Сокращение) Тогда
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ,
| ВЫБОР
| КОГДА НЕ ЗагруженныеДанные.Идентификатор ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК РегионЗагружен
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ЗагруженныеДанные
| ПО (ЗагруженныеДанные.Уровень > 1)
| И АдресныеОбъекты.КодСубъектаРФ = ЗагруженныеДанные.КодСубъектаРФ
|ГДЕ
| АдресныеОбъекты.Наименование = &Наименование
| И АдресныеОбъекты.Сокращение = &Сокращение
| И АдресныеОбъекты.Уровень = 1";
Запрос.УстановитьПараметр("Сокращение", СведенияОРегионе.Сокращение);
Иначе
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ,
| ВЫБОР
| КОГДА НЕ ЗагруженныеДанные.Идентификатор ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК РегионЗагружен
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ЗагруженныеДанные
| ПО (ЗагруженныеДанные.Уровень > 1)
| И АдресныеОбъекты.КодСубъектаРФ = ЗагруженныеДанные.КодСубъектаРФ
|ГДЕ
| АдресныеОбъекты.Наименование = &Наименование
| И АдресныеОбъекты.Уровень = 1";
КонецЕсли;
Запрос.УстановитьПараметр("Наименование", СведенияОРегионе.Наименование);
Запрос.УстановитьПараметр("Сокращение", СведенияОРегионе.Сокращение);
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса;
@@ -3834,15 +3868,14 @@
НаборПредставление = Новый Массив;
Для Позиция = 0 По 5 Цикл
Наименование = СтрокаАдреса["Наименование" + Строка(Позиция)];
ПозицияСтрокой = Строка(Позиция);
Наименование = СтрокаАдреса["Наименование" + ПозицияСтрокой];
Если ПустаяСтрока(Наименование) Тогда
Прервать;
КонецЕсли;
Если СтрокаАдреса["Уровень" + Строка(Позиция)] = 1 Тогда
НаборПредставление.Добавить(Наименование + " " + СтрокаАдреса["Сокращение" + Строка(Позиция)]);
Иначе
НаборПредставление.Добавить(СтрокаАдреса["Сокращение" + Строка(Позиция)] + " " + Наименование);
КонецЕсли;
НаборПредставление.Добавить(СоединитьНаименованиеИТипАдресногоОбъекта(Наименование,
СтрокаАдреса["Сокращение" + ПозицияСтрокой], СтрокаАдреса["Уровень" + ПозицияСтрокой] = 1))
КонецЦикла;
@@ -4390,6 +4423,8 @@
Запрос = Новый Запрос();
ТекстЗапроса = "ВЫБРАТЬ
| &Представление КАК Представление,
| АдресныеОбъекты.Наименование КАК Наименование,
| АдресныеОбъекты.Сокращение КАК Сокращение,
| АдресныеОбъекты.Идентификатор КАК Идентификатор,
| АдресныеОбъекты.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения,
| ДополнительныеСведения.ПочтовыйИндекс КАК ПочтовыйИндекс,
@@ -4448,7 +4483,11 @@
Данные = Результат.Данные;
Для Каждого Строка Из РезультатЗапроса.Выгрузить() Цикл
Если ЗначениеЗаполнено(Строка.ПочтовыйИндекс) Тогда
Если Уровень = 1 Тогда
Если НаименованиеРегионаБезТипа(Строка.Наименование) Тогда
Строка.Представление = Строка.Наименование;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Строка.ПочтовыйИндекс) Тогда
Строка.Представление = Строка.Представление + " (" + Формат(Строка.ПочтовыйИндекс, "ЧГ=0") + ")";
КонецЕсли;
@@ -7498,9 +7537,18 @@
// * Наименование - Строка - наименование, например "Москва". Если сокращение выделить не удалось, то исходное название.
// * Сокращение - Строка - сокращение, например "г". Если сокращение выделить не удалось, то пустая строка.
//
Функция НаименованиеИСокращение(Название) Экспорт
Функция НаименованиеИСокращение(Название, ЭтоРегион = Ложь) Экспорт
Результат = НовыйНаименованиеИСокращение();
ТекстПоиска = СокрП(Название);
Результат = Новый Структура("Наименование, Сокращение");
Если ЭтоРегион И НаименованиеРегионаБезТипа(Название) Тогда
Результат.Наименование = Название;
Возврат Результат;
КонецЕсли;
ТекстВерхнийРегистр = ВРег(ТекстПоиска);
Если СтрЗаканчиваетсяНа(ТекстВерхнийРегистр, "ТЕР. СНТ")
@@ -7529,6 +7577,20 @@
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Наименование - Строка
// * Сокращение - Строка
//
Функция НовыйНаименованиеИСокращение()
Результат = Новый Структура;
Результат.Вставить("Наименование", "");
Результат.Вставить("Сокращение", "");
Возврат Результат;
КонецФункции
// Набор уровней для запросов ФИАС.
//
// Возвращаемое значение:
@@ -10611,6 +10673,12 @@
КонецПроцедуры
Функция НаименованиеРегионаБезТипа(Наименование)
// АПК: 1297-выкл Данные ФИАС, не локализуются
Возврат СтрНачинаетсяС(ВРег(Наименование), ВРег("Ханты-Мансийский Автономный округ - Югра")); // @Non-NLS-1
// АПК: 1297-вкл
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -3037,7 +3037,6 @@
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока Выборка.Следующий() Цикл
Если Выборка.Наименование = Наименование Тогда
@@ -320,6 +320,9 @@
//
Функция Параметры() Экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы();
Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы(ПолноеИмяПодсистемы);
Если Параметры = Неопределено Тогда
@@ -330,17 +333,13 @@
Если ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда
ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы);
Если ПараметрыРасширений = Неопределено Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ВариантыОтчетов.ПриЗаполненииВсехПараметровРаботыРасширений();
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
ПараметрыРасширений = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы);
КонецЕсли;
Если ПараметрыРасширений <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Параметры.ОтчетыСНастройками, ПараметрыРасширений.ОтчетыСНастройками);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.ТаблицаФункциональныхОпций, ПараметрыРасширений.ТаблицаФункциональныхОпций);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ПараметрыРасширений.ТаблицаФункциональныхОпций, Параметры.ТаблицаФункциональныхОпций);
КонецЕсли;
КонецЕсли;
@@ -348,6 +347,9 @@
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
МодульДополнительныеОтчетыИОбработки.ПриОпределенииОтчетовСНастройками(Параметры.ОтчетыСНастройками);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Возврат Параметры;
@@ -87,6 +87,7 @@
ГраницыРазделов = ГраницыРазделовОтчета(РезультатОтчета, РазрезСвойствЗаголовков);
ИндексСтруктурыОтчета = ИндексСтруктурыОтчета(Форма);
ДополнитьСвойстваЗаголовковОтчета(Форма, РезультатОтчета, Заголовки, РазрезСвойствЗаголовков, ИндексСтруктурыОтчета, ГраницыРазделов);
Ячейка = Элементы.ОтчетТабличныйДокумент.ТекущаяОбласть;
@@ -191,12 +192,17 @@
Для Каждого Элемент Из Поля.Элементы Цикл
Если Не Элемент.Использование
Или ТипЗнч(Элемент) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда
Если Не Элемент.Использование Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда
ПредставлениеПолей.Добавить(НСтр("ru = 'Авто'"));
Продолжить;
КонецЕсли;
ОписаниеПоля = Поля.ДоступныеПоляПолейГруппировок.НайтиПоле(Элемент.Поле);
Если ОписаниеПоля = Неопределено Тогда
@@ -351,9 +357,24 @@
Функция ИндексСтруктурыОтчета(Форма) Экспорт
НастройкиОтчета = Форма.НастройкиОтчета;
АдресИндексаСтруктурыОтчета = НастройкиОтчета.СвойстваРезультата.АдресИндексаСтруктурыОтчета;
ИндексСтруктурыОтчета = Неопределено;
Если ЭтоАдресВременногоХранилища(АдресИндексаСтруктурыОтчета) Тогда
ИндексСтруктурыОтчета = ПолучитьИзВременногоХранилища(АдресИндексаСтруктурыОтчета);
КонецЕсли;
Если ИндексСтруктурыОтчета <> Неопределено И Не Форма.ВариантМодифицирован Тогда
Возврат ИндексСтруктурыОтчета;
КонецЕсли;
СвойстваРезультата = НастройкиОтчета.СвойстваРезультата;
ИтоговыеНастройки = Форма.Отчет.КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикНастроекОтчета = Форма.Отчет.КомпоновщикНастроек;
КомпоновщикНастроекОтчета.РазвернутьАвтоПоля();
ИтоговыеНастройки = КомпоновщикНастроекОтчета.ПолучитьНастройки();
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
ОтчетыСервер.ИнициализироватьКомпоновщикНастроек(КомпоновщикНастроек, НастройкиОтчета.АдресСхемы);
@@ -365,12 +386,8 @@
СвойстваРезультата.КомпоновщикНастроек = КомпоновщикНастроек;
СвойстваРезультата.РолиПолей = РолиПолейОтчета(НастройкиОтчета.АдресСхемы);
ИндексСтруктурыОтчета = НовыйИндексСтруктурыОтчета();
ИндексироватьРазделыОтчета(СвойстваРезультата, СвойстваРезультата.ИтоговыеНастройки, ИндексСтруктурыОтчета);
ИндексироватьГруппировкиОтчета(СвойстваРезультата, ИндексСтруктурыОтчета);
ИндексСтруктурыОтчета = ИндексСтруктурыОтчетаБезКонтекста(КомпоновщикНастроекОтчета, ИтоговыеНастройки);
УдалитьНеидентифицированныеПоля(ИндексСтруктурыОтчета);
УточнитьПорядокРазделов(ИндексСтруктурыОтчета);
ОпределитьРолиПолей(ИндексСтруктурыОтчета, СвойстваРезультата.РолиПолей);
УстановитьИдентификаторыИндексаСтруктурыОтчета(ИндексСтруктурыОтчета);
ОпределитьДоступныеДействияПолейОтчета(ИндексСтруктурыОтчета);
@@ -385,6 +402,26 @@
КонецФункции
Функция ИндексСтруктурыОтчетаБезКонтекста(КомпоновщикНастроек, ИтоговыеНастройки = Неопределено) Экспорт
Если ИтоговыеНастройки = Неопределено Тогда
КомпоновщикНастроек.РазвернутьАвтоПоля();
ИтоговыеНастройки = КомпоновщикНастроек.ПолучитьНастройки();
КонецЕсли;
ИндексСтруктурыОтчета = НовыйИндексСтруктурыОтчета();
ИндексироватьРазделыОтчета(ИтоговыеНастройки, ИтоговыеНастройки, ИндексСтруктурыОтчета);
ИндексироватьГруппировкиОтчета(ИтоговыеНастройки, ИндексСтруктурыОтчета);
УдалитьНеидентифицированныеПоля(ИндексСтруктурыОтчета);
УточнитьПорядокРазделов(ИндексСтруктурыОтчета);
Возврат ИндексСтруктурыОтчета;
КонецФункции
Процедура СкопироватьДополнительныеСвойстваНастроек(Приемник, Источник)
ВидыНастроек = СтрРазделить("Настройки, ПользовательскиеНастройки", ", ", Ложь);
@@ -404,7 +441,7 @@
КонецПроцедуры
Процедура ИндексироватьРазделыОтчета(СвойстваРезультата, Настройки, ИндексСтруктурыОтчета, ПорядокРаздела = 0)
Процедура ИндексироватьРазделыОтчета(ИтоговыеНастройки, Настройки, ИндексСтруктурыОтчета, ПорядокРаздела = 0)
Для Каждого Раздел Из Настройки.Структура Цикл
@@ -416,7 +453,7 @@
Если ТипЗнч(Раздел) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
ИндексироватьРазделыОтчета(СвойстваРезультата, Раздел.Настройки, ИндексСтруктурыОтчета, ПорядокРаздела);
ИндексироватьРазделыОтчета(ИтоговыеНастройки, Раздел.Настройки, ИндексСтруктурыОтчета, ПорядокРаздела);
Иначе
@@ -424,7 +461,7 @@
ИндексРаздела = ИндексСтруктурыОтчета.Добавить();
ИндексРаздела.ПорядокРаздела = ПорядокРаздела;
ИндексРаздела.ИдентификаторНастроек = СвойстваРезультата.ИтоговыеНастройки.ПолучитьИдентификаторПоОбъекту(Настройки);
ИндексРаздела.ИдентификаторНастроек = ИтоговыеНастройки.ПолучитьИдентификаторПоОбъекту(Настройки);
ИндексРаздела.ИдентификаторРаздела = Настройки.ПолучитьИдентификаторПоОбъекту(Раздел);
КонецЕсли;
@@ -433,13 +470,13 @@
КонецПроцедуры
Процедура ИндексироватьГруппировкиОтчета(СвойстваРезультата, ИндексСтруктурыОтчета)
Процедура ИндексироватьГруппировкиОтчета(ИтоговыеНастройки, ИндексСтруктурыОтчета)
ИндексРазделовОтчетов = ИндексСтруктурыОтчета.Скопировать();
Для Каждого ИндексРаздела Из ИндексРазделовОтчетов Цикл
Настройки = СвойстваРезультата.ИтоговыеНастройки.ПолучитьОбъектПоИдентификатору(ИндексРаздела.ИдентификаторНастроек);
Настройки = ИтоговыеНастройки.ПолучитьОбъектПоИдентификатору(ИндексРаздела.ИдентификаторНастроек);
Раздел = Настройки.ПолучитьОбъектПоИдентификатору(ИндексРаздела.ИдентификаторРаздела); // ГруппировкаКомпоновкиДанных, ТаблицаКомпоновкиДанных
Если ТипЗнч(Раздел) = Тип("ДиаграммаКомпоновкиДанных") Тогда
@@ -552,16 +589,8 @@
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("АвтоЭлементПорядкаКомпоновкиДанных")
И ТипГруппировки <> Тип("НастройкиКомпоновкиДанных") Тогда
ПоляСортировки(Настройки, Настройки, ПоляСортировки, Ложь);
ИначеЕсли ТипЗнч(Элемент) <> Тип("АвтоЭлементПорядкаКомпоновкиДанных")
И (Замещать Или ПоляСортировки[Элемент.Поле] = Неопределено) Тогда
Если Замещать Или ПоляСортировки[Элемент.Поле] = Неопределено Тогда
ПоляСортировки.Вставить(Элемент.Поле, Элемент.ТипУпорядочивания);
КонецЕсли;
КонецЦикла;
@@ -624,7 +653,6 @@
ИспользуемыеПоляГруппировки = Новый Соответствие;
ИспользуетсяАвтоПоле = ИспользуетсяАвтоПоле(Группировка.Выбор);
ИспользуемыеНастройки = ИспользуемыеНастройкиГруппировкиОтчета(Настройки, Группировка);
ПоляГруппировки = Группировка.ПоляГруппировки;
@@ -639,8 +667,7 @@
ИспользуемыеПоляГруппировки.Вставить(Элемент.Поле, Элемент);
Если ИспользуетсяАвтоПоле
И Не ВариантыОтчетовСлужебныйКлиентСервер.ПолеСодержитсяВГруппировкеОтчета(Группировка.Выбор, Элемент.Поле)
Если Не ВариантыОтчетовСлужебныйКлиентСервер.ПолеСодержитсяВГруппировкеОтчета(Группировка.Выбор, Элемент.Поле)
И Не ВариантыОтчетовСлужебныйКлиентСервер.ПолеСодержитсяВГруппировкеОтчета(ИспользуемыеНастройки.Выбор, Элемент.Поле) Тогда
ДобавитьПолеОтчетаВИндекс(ИндексСтруктурыОтчета, ИндексГруппировки, ПоляГруппировки,
@@ -655,22 +682,6 @@
КонецПроцедуры
Функция ИспользуетсяАвтоПоле(Поля)
Для Каждого Элемент Из Поля.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("АвтоВыбранноеПолеКомпоновкиДанных")
Или ТипЗнч(Элемент) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда
Возврат Элемент.Использование;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Процедура ИндексироватьВыбранныеПоляГруппировкиОтчета(ИндексСтруктурыОтчета, ИндексГруппировки, Настройки,
Группировка, ПорядокПоля, ПоляСортировки, ИспользуемыеПоляГруппировки, Поля = Неопределено, Родитель = Неопределено) // АПК:134 реализация сложной логики для формирования индекса структуры отчета.
@@ -684,18 +695,7 @@
Для Каждого Элемент Из Поля.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда
ИндексироватьВыбранныеПоляНастроекОтчета(
ИндексСтруктурыОтчета,
ИндексГруппировки,
Настройки,
Группировка,
ПорядокПоля,
ПоляСортировки,
ИспользуемыеПоляГруппировки);
ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
Если ТипЗнч(Элемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
ИндексироватьВыбранныеПоляГруппировкиОтчета(ИндексСтруктурыОтчета, ИндексГруппировки, Настройки,
Группировка, ПорядокПоля, ПоляСортировки, ИспользуемыеПоляГруппировки, Элемент, Родитель);
@@ -740,9 +740,8 @@
ИндексироватьВыбранныеПоляНастроекОтчета(ИндексСтруктурыОтчета, ИндексГруппировки, Настройки,
Группировка, ПорядокПоля, ПоляСортировки, ИспользуемыеПоляГруппировки, Элемент, Родитель);
ИначеЕсли ТипЭлемента <> Тип("АвтоВыбранноеПолеКомпоновкиДанных")
И РазрешеноИспользоватьПолеВГруппировке(Группировка, Элемент.Поле)
ИначеЕсли РазрешеноИспользоватьПолеВГруппировке(Группировка, Элемент.Поле)
И Не ВариантыОтчетовСлужебныйКлиентСервер.ПолеСодержитсяВГруппировкеОтчета(Группировка.Выбор, Элемент.Поле, Ложь) Тогда
ДобавитьПолеОтчетаВИндекс(ИндексСтруктурыОтчета, ИндексГруппировки, Родитель, Элемент, ПорядокПоля, ПоляСортировки, ИспользуемыеПоляГруппировки);
@@ -1149,6 +1149,12 @@
ПоляОтчета.Использование = Ложь;
КонецЕсли;
ПоляОтчета = ВариантыОтчетовСлужебныйКлиентСервер.ПолеОтчета(Группировка.Порядок, Поле);
Если ПоляОтчета <> Неопределено Тогда
ПоляОтчета.Использование = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура СкрытьГруппировку(Настройки, Группировка, Поле)
@@ -3162,13 +3168,20 @@
Если СтрЗаканчиваетсяНа(Форма.ИмяФормы, "КонтекстнаяНастройкаОтчета")
Или СтрЗаканчиваетсяНа(Форма.ИмяФормы, "КонтекстнаяНастройкаОтчета") Тогда
Возврат Форма.КомпоновщикНастроек;
КомпоновщикНастроек = Форма.КомпоновщикНастроек;
Иначе
НастройкиОтчета = Форма.НастройкиОтчета; // см. ВариантыОтчетов.НастройкиФормыОтчета
СвойстваРезультата = НастройкиОтчета.СвойстваРезультата; // см. ВариантыОтчетовСлужебный.СвойстваРезультатаОтчета
КомпоновщикНастроек = СвойстваРезультата.КомпоновщикНастроек;
КонецЕсли;
НастройкиОтчета = Форма.НастройкиОтчета; // см. ВариантыОтчетов.НастройкиФормыОтчета
СвойстваРезультата = НастройкиОтчета.СвойстваРезультата; // см. ВариантыОтчетовСлужебный.СвойстваРезультатаОтчета
КомпоновщикНастроек.РазвернутьАвтоПоля();
Возврат СвойстваРезультата.КомпоновщикНастроек;
Возврат КомпоновщикНастроек;
КонецФункции
@@ -3177,8 +3177,10 @@
КонецЕсли;
ИдентификаторОшибки = "ОшибкаПроведения";
КонецЕсли;
ЗаписатьДанныеТекущейВерсии(Ссылка);
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
ЗаписатьДанныеТекущейВерсии(Ссылка);
КонецЕсли;
ВыполняетсяЗаписьОбъекта(Истина);
Если ЗначениеЗаполнено(РежимЗаписи) Тогда
@@ -129,7 +129,7 @@
// для отображения в ней подробных данных выбранного события.
//
// Параметры:
// Данные - ДанныеФормыЭлементКоллекции из см. Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации.Журнал
// Данные - ДанныеФормыЭлементКоллекции: см. Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации.Журнал
//
Процедура ПросмотрТекущегоСобытияВОтдельномОкне(Данные, ХранилищеДанных) Экспорт
@@ -4961,6 +4961,24 @@
#КонецОбласти
#Область УдалениеПомеченныхОбъектов
// см. УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов
Процедура ПередУдалениемГруппыОбъектов(Контекст, СвязанныеОбъекты, СтандартнаяОбработка) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
МодульРаботаСФайламиСлужебный.ПередУдалениемГруппыОбъектов(Контекст, СвязанныеОбъекты, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
// см. УдалениеПомеченныхОбъектовПереопределяемый.ПослеУдаленияГруппыОбъектов
Процедура ПослеУдаленияГруппыОбъектов(Контекст, Успешно) Экспорт
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
МодульРаботаСФайламиСлужебный.ПослеУдаленияГруппыОбъектов(Контекст, Успешно);
КонецПроцедуры
#КонецОбласти
#Область ЦентрМониторинга
// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации.
@@ -3084,16 +3084,6 @@
КонецФункции
Функция СхемаРасширенияФормата(УзелОбмена) Экспорт
МенеджерЗаписи = РегистрыСведений.НастройкиОбменаДаннымиXDTO.СоздатьМенеджерЗаписи();
МенеджерЗаписи.УзелИнформационнойБазы = УзелОбмена;
МенеджерЗаписи.Прочитать();
Возврат МенеджерЗаписи.РасширениеФормата;
КонецФункции
// Возвращает строку с номером версии формата обмена, поддерживаемой получателем данных.
//
// Параметры:
@@ -8062,4 +8052,4 @@
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -11080,7 +11080,7 @@
УстановитьПривилегированныйРежим(Истина);
Возврат Строка(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена));
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Наименование");
КонецФункции
Процедура ОбработчикПриВыгрузкеДанныхБСП(
@@ -404,33 +404,11 @@
Если ДополнительныеПараметры.ЭтоДвижения Тогда
Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей();
Если ТипЗнч(Данные) = Тип("Массив") Тогда
Для Каждого СтрокаМассива Из Данные Цикл
Набор.Отбор.Регистратор.Установить(СтрокаМассива);
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
КонецЦикла;
Иначе
Набор.Отбор.Регистратор.Установить(Данные);
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
КонецЕсли;
УдалитьРегистрациюИзмененийПодчиненногоРегистра(Узел, Данные, ДополнительныеПараметры.ПолноеИмяРегистра);
ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда
Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра);
УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные);
Для Каждого СтрокаТаблицы Из Данные Цикл
Для Каждого Колонка Из Данные.Колонки Цикл
Набор.Отбор[Колонка.Имя].Значение = СтрокаТаблицы[Колонка.Имя];
Набор.Отбор[Колонка.Имя].Использование = Истина;
КонецЦикла;
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
КонецЦикла;
УдалитьРегистрациюИзмененийНезависимогоРегистра(Узел, Данные, ДополнительныеПараметры.ПолноеИмяРегистра);
Иначе
Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда
@@ -466,9 +444,7 @@
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
КопияДанных = Набор;
Иначе
Для Каждого ЭлементМассива Из Данные Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, ЭлементМассива);
КонецЦикла;
УдалитьРегистрациюИзмененийОбъекта(Узел, Данные);
КонецЕсли;
КонецЕсли;
@@ -726,9 +702,10 @@
КонецЦикла;
Если Несуществующие.Количество() <> 0 Тогда
ТекстИсключения = НСтр("ru = 'В свойстве ПараметрыВыборки процедуры заполнения данных отложенного обработчика указаны несуществующие объекты:
|%1.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, СтрСоединить(Несуществующие, ", "));
ТекстИсключения = НСтр("ru = 'В свойстве %1 процедуры заполнения данных отложенного обработчика указаны несуществующие объекты:
|%2.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
"ПараметрыВыборки", СтрСоединить(Несуществующие, ", "));
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -738,7 +715,7 @@
Если ДополнительныеПараметры.ЭтоДвижения Тогда
Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей();
ПолноеИмяРегистра = ДополнительныеПараметры.ПолноеИмяРегистра;
Если ДополнительныеПараметры.ОтметитьВсеРегистраторы Тогда
@@ -764,87 +741,29 @@
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Для Каждого ЭлементМассива Из МассивСсылок Цикл
Набор.Отбор.Регистратор.Установить(ЭлементМассива);
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра);
КонецЦикла;
Регистраторы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
Если ТипЗнч(Данные) = Тип("Массив") Тогда
Итератор = 0;
Попытка
Для Каждого ЭлементМассива Из Данные Цикл
Если Итератор = 0 Тогда
НачатьТранзакцию();
КонецЕсли;
Набор.Отбор.Регистратор.Установить(ЭлементМассива);
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра);
Итератор = Итератор + 1;
Если Итератор = 1000 Тогда
Итератор = 0;
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецЦикла;
Если Итератор <> 0 Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки
Иначе
Набор.Отбор.Регистратор.Установить(Данные);
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра);
КонецЕсли;
Регистраторы = Данные;
КонецЕсли;
ЗарегистрироватьИзмененияПодчиненногоРегистра(ОсновныеПараметры,
Узел,
Регистраторы,
"ПодчиненныйРегистр",
ПолноеИмяРегистра);
ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда
Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра);
УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные);
ЗарегистрироватьИзмененияНезависимогоРегистра(ОсновныеПараметры,
Узел,
Данные,
"НезависимыйРегистр",
ДополнительныеПараметры.ПолноеИмяРегистра);
Для Каждого СтрокаТаблицы Из Данные Цикл
Для Каждого Колонка Из Данные.Колонки Цикл
Набор.Отбор[Колонка.Имя].Значение = СтрокаТаблицы[Колонка.Имя];
Набор.Отбор[Колонка.Имя].Использование = Истина;
КонецЦикла;
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "НезависимыйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра);
КонецЦикла;
Иначе
Если ТипЗнч(Данные) = Тип("Массив") Тогда
Итератор = 0;
Попытка
Для Каждого ЭлементМассива Из Данные Цикл
Если Итератор = 0 Тогда
НачатьТранзакцию();
КонецЕсли;
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, ЭлементМассива, "Ссылка");
Итератор = Итератор + 1;
Если Итератор = 1000 Тогда
Итератор = 0;
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецЦикла;
Если Итератор <> 0 Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки
ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда
ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Данные, "Ссылка");
Если ТипЗнч(Данные) = Тип("Массив") Или ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда
ЗарегистрироватьИзмененияОбъекта(ОсновныеПараметры, Узел, Данные, "Ссылка");
Иначе
Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда
ТекстИсключения = НСтр("ru = 'Не поддерживается регистрация к обновлению целиком объекта метаданных. Нужно обновлять конкретные данные.'");
@@ -3970,9 +3889,190 @@
КонецЕсли;
КонецПроцедуры
// Зарегистрировать изменения одного элемента данных, как это было до оптимизации.
//
// Параметры:
// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Данные - ЛюбаяСсылка
// - РегистрСведенийНаборЗаписей
// - РегистрНакопленияНаборЗаписей
// - РегистрБухгалтерииНаборЗаписей
// - РегистрРасчетаНаборЗаписей.
// ВидДанных - Строка.
// ПолноеИмяОбъекта - Строка.
//
Процедура ЗарегистрироватьИзменения(Параметры, Узел, Данные, ВидДанных, ПолноеИмяОбъекта = "")
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Данные);
ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта);
ЗарегистрироватьИзмененияЭлементаДанных(Данные, ПараметрыРегистрации);
ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации);
КонецПроцедуры
// Зарегистрировать изменения одной или нескольких ссылок.
//
// Параметры:
// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Ссылки - ЛюбаяСсылка
// - Массив из ЛюбаяСсылка.
// ВидДанных - Строка.
// ПолноеИмяОбъекта - Строка.
//
Процедура ЗарегистрироватьИзмененияОбъекта(Параметры, Узел, Ссылки, ВидДанных, ПолноеИмяОбъекта = "")
ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта);
Для Каждого Ссылка Из МассивЭлементов(Ссылки) Цикл
ЗарегистрироватьИзмененияЭлементаДанных(Ссылка, ПараметрыРегистрации);
КонецЦикла;
ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации);
КонецПроцедуры
// Зарегистрировать изменения подчиненного регистра по указанным регистраторам.
//
// Параметры:
// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Регистраторы - ЛюбаяСсылка
// - Массив из ЛюбаяСсылка.
// ВидДанных - Строка.
// ПолноеИмяОбъекта - Строка.
//
Процедура ЗарегистрироватьИзмененияПодчиненногоРегистра(Параметры, Узел, Регистраторы, ВидДанных, ПолноеИмяОбъекта)
ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта);
Для Каждого Регистратор Из МассивЭлементов(Регистраторы) Цикл
Набор = ПолучитьПереиспользуемыйНабор(ПараметрыРегистрации.ПереиспользуемыеНаборы);
Набор.Отбор.Регистратор.Установить(Регистратор);
ЗарегистрироватьИзмененияЭлементаДанных(Набор, ПараметрыРегистрации);
КонецЦикла;
ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации);
КонецПроцедуры
// Зарегистрировать изменения независимого регистра по таблице значений,
// где колонки - это измерения, а строки - это регистрируемые записи.
//
// Параметры:
// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Записи - ТаблицаЗначений.
// ВидДанных - Строка.
// ПолноеИмяОбъекта - Строка.
//
Процедура ЗарегистрироватьИзмененияНезависимогоРегистра(Параметры, Узел, Записи, ВидДанных, ПолноеИмяОбъекта)
ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта);
МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
Для Каждого Запись Из Записи Цикл
Набор = ПолучитьПереиспользуемыйНабор(ПараметрыРегистрации.ПереиспользуемыеНаборы);
УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеРегистра, Записи);
Для Каждого Колонка Из Записи.Колонки Цикл
Набор.Отбор[Колонка.Имя].Значение = Запись[Колонка.Имя];
Набор.Отбор[Колонка.Имя].Использование = Истина;
КонецЦикла;
ЗарегистрироватьИзмененияЭлементаДанных(Набор, ПараметрыРегистрации);
КонецЦикла;
ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации);
КонецПроцедуры
// Зарегистрировать элемент данных в таблице регистрации изменений,
// увеличить счетчик зарегистрированных данных
// и записать данные для обновления в файл рИБ (необходимо в случае РИБ с фильтрами).
//
// Параметры:
// Данные - ЛюбаяСсылка
// - РегистрСведенийНаборЗаписей
// - РегистрНакопленияНаборЗаписей
// - РегистрБухгалтерииНаборЗаписей
// - РегистрРасчетаНаборЗаписей.
// ПараметрыРегистрации - см. НовыеПараметрыРегистрации.
//
Процедура ЗарегистрироватьИзмененияЭлементаДанных(Данные, ПараметрыРегистрации)
Если ПараметрыРегистрации.ДоступнаПакетнаяРегистрация Тогда
ПараметрыРегистрации.ДанныеДляРегистрации.Добавить(Данные);
ЗарегистрироватьПакетДанных(ПараметрыРегистрации, ПараметрыРегистрации.ДанныеДляРегистрации);
Иначе
ПланыОбмена.ЗарегистрироватьИзменения(ПараметрыРегистрации.Узел, Данные);
КонецЕсли;
УвеличитьКоличествоЗарегистрированныхДанных(ПараметрыРегистрации.Параметры,
Данные,
ПараметрыРегистрации.ПолноеИмяОбъекта);
Если ПараметрыРегистрации.ЗаписыватьДанныеДляОбновленияВФайл Тогда
ПараметрыРегистрации.МодульОбменДаннымиСервер.ЗаписатьДанныеДляОбновленияВФайл(ПараметрыРегистрации.Параметры,
Данные,
ПараметрыРегистрации.ВидДанных,
ПараметрыРегистрации.ПолноеИмяОбъекта);
КонецЕсли;
КонецПроцедуры
// Зарегистрировать пакет данных, если он уже достаточно большой
// или это нужно сделать принудительно в конце регистрации порции данных.
//
// Параметры:
// ПараметрыРегистрации - см. НовыеПараметрыРегистрации.
// Данные - Массив из ЛюбаяСсылка
// - Массив из РегистрСведенийНаборЗаписей
// - Массив из РегистрНакопленияНаборЗаписей
// - Массив из РегистрБухгалтерииНаборЗаписей
// - Массив из РегистрРасчетаНаборЗаписей.
// Принудительно - Булево - Истина, если нужно зарегистрировать, даже если пакет мал.
// РазмерПакета - Число - если в пакете столько же или больше записей, то он записывается.
//
Процедура ЗарегистрироватьПакетДанных(ПараметрыРегистрации, Данные, Принудительно = Ложь, РазмерПакета = 1000)
Если Данные.Количество() >= РазмерПакета Или Принудительно И Данные.Количество() > 0 Тогда
ПланыОбмена.ЗарегистрироватьИзменения(ПараметрыРегистрации.Узел, Данные);
Данные.Очистить();
Если ПараметрыРегистрации.Свойство("ПереиспользуемыеНаборы") Тогда
ОсвободитьПереиспользуемыеНаборы(ПараметрыРегистрации.ПереиспользуемыеНаборы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Записать оставшуюся порцию данных в конце процесса регистрации, если доступна пакетная регистрация.
//
// Параметры:
// ПараметрыРегистрации - см. НовыеПараметрыРегистрации.
//
Процедура ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации)
Если ПараметрыРегистрации.ДоступнаПакетнаяРегистрация Тогда
ЗарегистрироватьПакетДанных(ПараметрыРегистрации, ПараметрыРегистрации.ДанныеДляРегистрации, Истина);
КонецЕсли;
КонецПроцедуры
// Увеличить количество зарегистрированных данных в статистике.
//
// Параметры:
// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// Данные - ЛюбаяСсылка
// - РегистрСведенийНаборЗаписей
// - РегистрНакопленияНаборЗаписей
// - РегистрБухгалтерииНаборЗаписей
// - РегистрРасчетаНаборЗаписей.
// ПолноеИмяОбъекта - Строка.
//
Процедура УвеличитьКоличествоЗарегистрированныхДанных(Параметры, Данные, ПолноеИмяОбъекта)
Если Параметры.Свойство("ДанныеОбработчика") Тогда
Если Не ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда
@@ -3982,26 +4082,385 @@
КонецЕсли;
ДанныеПоОбъекту = Параметры.ДанныеОбработчика[ПолноеИмя];
Если ДанныеПоОбъекту = Неопределено Тогда
ДанныеПоОбъекту = Новый Структура;
ДанныеПоОбъекту.Вставить("Количество", 1);
ДанныеПоОбъекту.Вставить("Очередь", Параметры.Очередь);
Параметры.ДанныеОбработчика.Вставить(ПолноеИмя, ДанныеПоОбъекту);
Иначе
Параметры.ДанныеОбработчика[ПолноеИмя].Количество = ДанныеПоОбъекту.Количество + 1;
ДанныеПоОбъекту.Количество = ДанныеПоОбъекту.Количество + 1;
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными")
И СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром")
И Не Параметры.ПовторнаяРегистрация
И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ЗаписатьДанныеДляОбновленияВФайл(Параметры, Данные, ВидДанных, ПолноеИмяОбъекта);
КонецПроцедуры
// Удалить регистрацию изменений одной или нескольких ссылок.
//
// Параметры:
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Ссылки - ЛюбаяСсылка
// - Массив из ЛюбаяСсылка.
//
Процедура УдалитьРегистрациюИзмененийОбъекта(Узел, Ссылки)
ПараметрыУдаления = НовыеПараметрыУдаленияРегистрации(Узел);
Для Каждого Ссылка Из МассивЭлементов(Ссылки) Цикл
УдалитьРегистрациюИзмененийЭлементаДанных(Ссылка, ПараметрыУдаления);
КонецЦикла;
ЗавершитьУдалениеРегистрацииПорцииДанных(ПараметрыУдаления);
КонецПроцедуры
// Удалить регистрацию изменений подчиненного регистра по указанным регистраторам.
//
// Параметры:
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Регистраторы - ЛюбаяСсылка
// - Массив из ЛюбаяСсылка.
// ПолноеИмяОбъекта - Строка.
//
Процедура УдалитьРегистрациюИзмененийПодчиненногоРегистра(Узел, Регистраторы, ПолноеИмяОбъекта)
ПараметрыУдаления = НовыеПараметрыУдаленияРегистрации(Узел, ПолноеИмяОбъекта);
Для Каждого Регистратор Из МассивЭлементов(Регистраторы) Цикл
Набор = ПолучитьПереиспользуемыйНабор(ПараметрыУдаления.ПереиспользуемыеНаборы);
Набор.Отбор.Регистратор.Установить(Регистратор);
УдалитьРегистрациюИзмененийЭлементаДанных(Набор, ПараметрыУдаления);
КонецЦикла;
ЗавершитьУдалениеРегистрацииПорцииДанных(ПараметрыУдаления);
КонецПроцедуры
// Удалить регистрацию изменений независимого регистра по таблице значений.
//
// Параметры:
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// Записи - ТаблицаЗначений.
// ПолноеИмяОбъекта - Строка.
//
Процедура УдалитьРегистрациюИзмененийНезависимогоРегистра(Узел, Записи, ПолноеИмяОбъекта)
ПараметрыУдаления = НовыеПараметрыУдаленияРегистрации(Узел, ПолноеИмяОбъекта);
МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
Для Каждого Запись Из Записи Цикл
Набор = ПолучитьПереиспользуемыйНабор(ПараметрыУдаления.ПереиспользуемыеНаборы);
УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеРегистра, Записи);
Для Каждого Колонка Из Записи.Колонки Цикл
Набор.Отбор[Колонка.Имя].Значение = Запись[Колонка.Имя];
Набор.Отбор[Колонка.Имя].Использование = Истина;
КонецЦикла;
УдалитьРегистрациюИзмененийЭлементаДанных(Набор, ПараметрыУдаления);
КонецЦикла;
ЗавершитьУдалениеРегистрацииПорцииДанных(ПараметрыУдаления);
КонецПроцедуры
// Удалить регистрацию пакета данных, если он уже достаточно большой
// или это нужно сделать принудительно в конце удаления регистрации порции данных.
//
// Параметры:
// ПараметрыУдаления - см. НовыеПараметрыУдаленияРегистрации.
// Данные - Массив из ЛюбаяСсылка
// - Массив из РегистрСведенийНаборЗаписей
// - Массив из РегистрНакопленияНаборЗаписей
// - Массив из РегистрБухгалтерииНаборЗаписей
// - Массив из РегистрРасчетаНаборЗаписей.
// Принудительно - Булево - Истина, если нужно удалить, даже если пакет мал.
// РазмерПакета - Число - если в пакете столько же или больше записей, то он удаляется.
//
Процедура УдалитьРегистрациюИзмененийПакетаДанных(ПараметрыУдаления, Данные, Принудительно = Ложь, РазмерПакета = 1000)
Если Данные.Количество() >= РазмерПакета Или Принудительно И Данные.Количество() > 0 Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(ПараметрыУдаления.Узел, Данные);
Данные.Очистить();
Если ПараметрыУдаления.Свойство("ПереиспользуемыеНаборы") Тогда
ОсвободитьПереиспользуемыеНаборы(ПараметрыУдаления.ПереиспользуемыеНаборы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Удалить регистрацию элемента данных в таблице регистрации изменений.
//
// Параметры:
// Данные - ЛюбаяСсылка
// - РегистрСведенийНаборЗаписей
// - РегистрНакопленияНаборЗаписей
// - РегистрБухгалтерииНаборЗаписей
// - РегистрРасчетаНаборЗаписей.
// ПараметрыУдаления - см. НовыеПараметрыУдаленияРегистрации.
//
Процедура УдалитьРегистрациюИзмененийЭлементаДанных(Данные, ПараметрыУдаления)
Если ПараметрыУдаления.ДоступнаПакетнаяРегистрация Тогда
ПараметрыУдаления.ДанныеДляУдаления.Добавить(Данные);
УдалитьРегистрациюИзмененийПакетаДанных(ПараметрыУдаления, ПараметрыУдаления.ДанныеДляУдаления);
Иначе
ПланыОбмена.УдалитьРегистрациюИзменений(ПараметрыУдаления.Узел, Данные);
КонецЕсли;
КонецПроцедуры
// Удалить оставшуюся порцию данных в конце процесса удаления регистрации, если доступна пакетная регистрация.
//
// Параметры:
// ПараметрыУдаления - см. НовыеПараметрыУдаленияРегистрации.
//
Процедура ЗавершитьУдалениеРегистрацииПорцииДанных(ПараметрыУдаления)
Если ПараметрыУдаления.ДоступнаПакетнаяРегистрация Тогда
УдалитьРегистрациюИзмененийПакетаДанных(ПараметрыУдаления, ПараметрыУдаления.ДанныеДляУдаления, Истина);
КонецЕсли;
КонецПроцедуры
// Доступна ли платформа с оптимизированной пакетной регистрацией.
//
// Возвращаемое значение:
// Булево - Истина - быстрая пакетная регистрация доступна.
//
Функция ДоступнаПакетнаяРегистрация()
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.19.725") >= 0;
КонецФункции
// Необходимо ли записывать данные для обновления в файл при использовании РИБ с фильтрами.
//
// Возвращаемое значение:
// Булево - Истина - необходимо записывать данные в файл для РИБ.
//
Функция ЗаписыватьДанныеДляОбновленияВФайл(Параметры)
Возврат ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными")
И СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром")
И Не Параметры.ПовторнаяРегистрация
И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ();
КонецФункции
// Получить общий модуль ОбменДаннымиСервер, если он доступен.
//
// Возвращаемое значение:
// ОбщийМодуль.
//
Функция МодульОбменДаннымиСервер(ЗаписыватьДанныеДляОбновленияВФайл)
Возврат ?(ЗаписыватьДанныеДляОбновленияВФайл, ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"), Неопределено);
КонецФункции
// Вернуть массив элементов, даже если передан один элемент.
//
// Параметры:
// Элементы - Массив
// - Произвольный.
//
// Возвращаемое значение:
// Массив.
//
Функция МассивЭлементов(Элементы)
Если ТипЗнч(Элементы) <> Тип("Массив") Тогда
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить(Элементы);
Иначе
МассивЭлементов = Элементы;
КонецЕсли;
Возврат МассивЭлементов;
КонецФункции
// Структура с контекстом регистрации данных на плане обмена.
//
// Параметры:
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// ВидДанных - Строка.
// ПолноеИмяОбъекта - Строка.
//
// Возвращаемое значение:
// Структура:
// * Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке.
// * Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// * ВидДанных - Строка.
// * ПолноеИмяОбъекта - Строка.
// * ДанныеДляРегистрации - Массив.
// * МенеджерОбъекта - ДокументМенеджер
// - СправочникМенеджер
// - ПланВидовХарактеристикМенеджер
// - ПланСчетовМенеджер
// - ПланыВидовРасчетаМенеджер
// - БизнесПроцессМенеджер
// - ЗадачаМенеджер
// - РегистрСведенийМенеджер
// - РегистрНакопленияМенеджер
// - РегистрБухгалтерииМенеджер
// - РегистрРасчетаМенеджер.
// * ДоступнаПакетнаяРегистрация - Булево.
// * ЗаписыватьДанныеДляОбновленияВФайл - Булево.
// * МодульОбменДаннымиСервер - ОбщийМодуль.
//
Функция НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта)
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Параметры", Параметры);
ПараметрыРегистрации.Вставить("Узел", Узел);
ПараметрыРегистрации.Вставить("ВидДанных", ВидДанных);
ПараметрыРегистрации.Вставить("ПолноеИмяОбъекта", ПолноеИмяОбъекта);
ПараметрыРегистрации.Вставить("ДанныеДляРегистрации", Новый Массив);
ПараметрыРегистрации.Вставить("ДоступнаПакетнаяРегистрация", ДоступнаПакетнаяРегистрация());
ПараметрыРегистрации.Вставить("ЗаписыватьДанныеДляОбновленияВФайл", ЗаписыватьДанныеДляОбновленияВФайл(Параметры));
ПараметрыРегистрации.Вставить("МодульОбменДаннымиСервер",
МодульОбменДаннымиСервер(ПараметрыРегистрации.ЗаписыватьДанныеДляОбновленияВФайл));
МенеджерОбъекта = Неопределено;
Если ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта);
Если ОбщегоНазначения.ЭтоРегистр(Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта)) Тогда
ПараметрыРегистрации.Вставить("ПереиспользуемыеНаборы", НовыеПереиспользуемыеНаборы(МенеджерОбъекта));
КонецЕсли;
КонецЕсли;
ПараметрыРегистрации.Вставить("МенеджерОбъекта", МенеджерОбъекта);
Возврат ПараметрыРегистрации;
КонецФункции
// Структура с контекстом удаления регистрации данных с плана обмена.
//
// Параметры:
// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// ПолноеИмяОбъекта - Строка.
//
// Возвращаемое значение:
// Структура:
// * Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы.
// * ПолноеИмяОбъекта - Строка.
// * ДанныеДляУдаления - Массив.
// * МенеджерОбъекта - ДокументМенеджер
// - СправочникМенеджер
// - ПланВидовХарактеристикМенеджер
// - ПланСчетовМенеджер
// - ПланыВидовРасчетаМенеджер
// - БизнесПроцессМенеджер
// - ЗадачаМенеджер
// - РегистрСведенийМенеджер
// - РегистрНакопленияМенеджер
// - РегистрБухгалтерииМенеджер
// - РегистрРасчетаМенеджер.
// * ДоступнаПакетнаяРегистрация - Булево.
//
Функция НовыеПараметрыУдаленияРегистрации(Узел, ПолноеИмяОбъекта = "")
ПараметрыУдаления = Новый Структура;
ПараметрыУдаления.Вставить("Узел", Узел);
ПараметрыУдаления.Вставить("ПолноеИмяОбъекта", ПолноеИмяОбъекта);
ПараметрыУдаления.Вставить("ДанныеДляУдаления", Новый Массив);
ПараметрыУдаления.Вставить("ДоступнаПакетнаяРегистрация", ДоступнаПакетнаяРегистрация());
МенеджерОбъекта = Неопределено;
Если ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта);
Если ОбщегоНазначения.ЭтоРегистр(Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта)) Тогда
ПараметрыУдаления.Вставить("ПереиспользуемыеНаборы", НовыеПереиспользуемыеНаборы(МенеджерОбъекта));
КонецЕсли;
КонецЕсли;
ПараметрыУдаления.Вставить("МенеджерОбъекта", МенеджерОбъекта);
Возврат ПараметрыУдаления;
КонецФункции
// Новая коллекция переиспользуемых наборов.
//
// Параметры:
// Менеджер - РегистрСведенийМенеджер
// - РегистрНакопленияМенеджер
// - РегистрРасчетаМенеджер
// - РегистрБухгалтерииМенеджер - менеджер для создания наборов.
// Размер - Число - начальное количество хранилища переиспользуемых наборов.
//
// Возвращаемое значение:
// Структура:
// * Наборы - Массив - переиспользуемые наборы.
// * Создано - Число - количество созданных наборов.
// * Выдано - Число - количество выданных наборов.
//
Функция НовыеПереиспользуемыеНаборы(Менеджер, Размер = 1000)
ПереиспользуемыеОбъекты = Новый Структура;
ПереиспользуемыеОбъекты.Вставить("Менеджер", Менеджер);
ПереиспользуемыеОбъекты.Вставить("Наборы", Новый Массив(Размер));
ПереиспользуемыеОбъекты.Вставить("Создано", 0);
ПереиспользуемыеОбъекты.Вставить("Выдано", 0);
Возврат ПереиспользуемыеОбъекты;
КонецФункции
// Получить ранее созданный переиспользуемый набор или создать новый и получить его.
//
// Параметры:
// ПереиспользуемыеНаборы - см. НовыеПереиспользуемыеНаборы.
//
// Возвращаемое значение:
// - РегистрСведенийНаборЗаписей
// - РегистрНакопленияНаборЗаписей
// - РегистрРасчетаНаборЗаписей
// - РегистрБухгалтерииНаборЗаписей - готовый к работе набор.
//
Функция ПолучитьПереиспользуемыйНабор(ПереиспользуемыеНаборы)
Если ПереиспользуемыеНаборы.Создано = ПереиспользуемыеНаборы.Выдано Тогда
НовыйНабор = ПереиспользуемыеНаборы.Менеджер.СоздатьНаборЗаписей();
Если ПереиспользуемыеНаборы.Создано > ПереиспользуемыеНаборы.Наборы.ВГраница() Тогда
ПереиспользуемыеНаборы.Наборы.Добавить(НовыйНабор);
Иначе
ПереиспользуемыеНаборы.Наборы[ПереиспользуемыеНаборы.Создано] = НовыйНабор;
КонецЕсли;
ПереиспользуемыеНаборы.Создано = ПереиспользуемыеНаборы.Создано + 1;
КонецЕсли;
ВозвращаемыйНабор = ПереиспользуемыеНаборы.Наборы[ПереиспользуемыеНаборы.Выдано];
ПереиспользуемыеНаборы.Выдано = ПереиспользуемыеНаборы.Выдано + 1;
Возврат ВозвращаемыйНабор;
КонецФункции
// Освободить ранее занятые переиспользуемые наборы.
//
// Параметры:
// ПереиспользуемыеНаборы - см. НовыеПереиспользуемыеНаборы.
//
Процедура ОсвободитьПереиспользуемыеНаборы(ПереиспользуемыеНаборы)
ПереиспользуемыеНаборы.Выдано = 0;
КонецПроцедуры
Функция УзлыМеньшейОчереди(Очередь)
Возврат ПланыОбмена.ОбновлениеИнформационнойБазы.УзлыМеньшейОчереди(Очередь);
КонецФункции
@@ -41,7 +41,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.5.171";
Описание.Версия = "3.1.5.180";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -7295,6 +7295,7 @@
ДополнитьКонтекстМногопоточногоОбработчика(КонтекстОбработчика);
ОбрабатываемыеДанные = ОбработчикОбновления.ОбрабатываемыеДанные.Получить();
ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки;
ПроверитьПараметрыВыборки(ПараметрыВыборки);
ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке();
ПараметрыПоиска = НовыеПараметрыПоискаПорции();
ПараметрыПоиска.ПараметрыВыборки = ПараметрыВыборки;
@@ -7355,6 +7356,7 @@
ОбработатьИсключениеОбработчика(КонтекстОбработчика, ОбработчикОбновления, ИнформацияОбОшибке());
// Если обработчик вызвал исключение, то вызываем процедуру завершения обработчика.
Если Не ОбработчикВыполнилсяБезОшибок Тогда
КонтекстОбработчика.Вставить("ОбработкаИсключенияОбработчика");
ЗавершитьВыполнениеОтложенногоОбработчика(КонтекстОбработчика, АдресРезультата);
КонецЕсли;
КонецПопытки;
@@ -7672,7 +7674,8 @@
СтатистикаВыполнения = ОбработчикОбновления.СтатистикаВыполнения.Получить();
ДобавитьКоличествоЗапусков = Истина;
Если Параметры.ОбработкаЗавершена Тогда
Если Параметры.ОбработкаЗавершена
И Не КонтекстОбработчика.Свойство("ОбработкаИсключенияОбработчика") Тогда
СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса());
УстанавливаемыеСвойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполнен);
@@ -685,6 +685,7 @@
Для Каждого ЗначениеРеквизита Из Значения Цикл
Значение = ЗначениеРеквизита.Значение;
Если ТипЗнч(Значение) = Тип("Строка") И СтрокаВВидеНСтр(Значение) Тогда
//@skip-warning
Значение = НСтр(ЗначениеРеквизита.Значение);
КонецЕсли;
Объект[ЗначениеРеквизита.Ключ] = Значение;
@@ -8,15 +8,21 @@
#Область ПрограммныйИнтерфейс
// Открывает форму для отправки нового SMS.
// Вызывается перед открытием формы отправки SMS.
//
// Параметры:
// НомераПолучателей - Массив - номера получателей в формате +<КодСтраны><КодDEF><номер>(строкой);
// Текст - Строка - текст сообщения, длиной не более 1000 символов;
// ДополнительныеПараметры - Структура - дополнительные параметры отправки SMS:
// * ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера у получателей.
// * ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой.
// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки отправки SMS.
// НомераПолучателей - Массив из Структура:
// * Телефон - Строка - номер получателя в формате +<КодСтраны><КодDEF><номер>;
// * Представление - Строка - представление номера телефона;
// * ИсточникКонтактнойИнформации - СправочникСсылка - владелец номера телефона.
//
// Текст - Строка - текст сообщения, длиной не более 1000 символов.
//
// ДополнительныеПараметры - Структура - дополнительные параметры отправки SMS:
// * ИмяОтправителя - Строка - имя отправителя, которое будет отображаться вместо номера у получателей;
// * ПеревестиВТранслит - Булево - Истина, если требуется переводить текст сообщения в транслит перед отправкой.
//
// СтандартнаяОбработка - Булево - флаг необходимости выполнения стандартной обработки отправки SMS.
//
Процедура ПриОтправкеSMS(НомераПолучателей, Текст, ДополнительныеПараметры, СтандартнаяОбработка) Экспорт
@@ -1740,6 +1740,12 @@
КонецЕсли;
ЭлементФлажка = ЭлементФлажка[0];
Если ТипЗнч(ЭлементФлажка.ДоступныеЗначения) = Тип("СписокЗначений")
И ЭлементФлажка.ДоступныеЗначения.Количество() > 0 Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементФлажка.Поле) <> Тип("ДекорацияФормы") Тогда
Продолжить;
КонецЕсли;
@@ -1934,7 +1940,11 @@
ИначеЕсли РасширенноеОписаниеТипа.СодержитТипДата Тогда
Поле.МаксимальнаяШирина = 25;
ИначеЕсли РасширенноеОписаниеТипа.СодержитТипБулево Тогда
Поле.МаксимальнаяШирина = 5;
Если Поле.СписокВыбора.Количество() = 0 Тогда
Поле.МаксимальнаяШирина = 5;
Иначе
Поле.РастягиватьПоГоризонтали = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -616,9 +616,12 @@
ПрисоединенныйФайл.ДатаСоздания = ТекущаяДатаСеанса();
ПрисоединенныйФайл.Описание = Описание;
ПрисоединенныйФайл.Наименование = ИмяБезРасширения;
ПрисоединенныйФайл.Расширение = РасширениеБезТочки;
ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов();
ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер();
ПрисоединенныйФайл.Расширение = РасширениеБезТочки;
ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(
ПрисоединенныйФайл.Размер,
ПрисоединенныйФайл.Расширение);
ПрисоединенныйФайл.Изменил = ПараметрыФайла.Автор;
ПрисоединенныйФайл.ХранитьВерсии = ХранитьВерсии;
@@ -648,33 +651,25 @@
ПрисоединенныйФайл.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
КонецЕсли;
СохраняетсяПредварительноНаДиск = Ложь;
Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
СохраняетсяПредварительноНаДиск = (РаботаСФайламиВТомахСлужебный.ТипХраненияФайла(РасширениеБезТочки, ПрисоединенныйФайл.Размер) = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске);
// Сохранение файла на диск выполняется вне транзакции
Если СохраняетсяПредварительноНаДиск Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанные);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда
ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь();
КонецЕсли;
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(ПрисоединенныйФайл, АдресФайлаВоВременномХранилище, НоваяСсылкаНаФайл);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайлов(ПрисоединенныйФайл);
МенеджерФайла.ПередОбновлениемДанныхФайла(Контекст);
НачатьТранзакцию();
Попытка
Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда
ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь();
КонецЕсли;
МенеджерФайла.ПередЗаписьюДанныхФайла(Контекст, ПрисоединенныйФайл);
ПрисоединенныйФайл.Записать();
Если ХранитьВерсии Тогда
// Файлы с поддержкой версий
Если СохраняетсяПредварительноНаДиск Тогда
АдресФайлаВоВременномХранилище = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(ПрисоединенныйФайл);
Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(ПрисоединенныйФайл.Ссылка);
АдресФайлаВоВременномХранилище = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла);
ИсходныйФайл = Новый Файл(АдресФайлаВоВременномХранилище);
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ИсходныйФайл);
Иначе
@@ -684,30 +679,17 @@
СведенияОФайле.Размер = ПрисоединенныйФайл.Размер;
КонецЕсли;
СведенияОФайле.АдресВременногоХранилищаФайла = АдресФайлаВоВременномХранилище;
СведенияОФайле.АдресВременногоХранилищаФайла = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Контекст,
"ПутьКФайлу",
АдресФайлаВоВременномХранилище);
СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста;
СведенияОФайле.ЗаписатьВИсторию = Истина;
Версия = РаботаСФайламиСлужебный.СоздатьВерсию(ПрисоединенныйФайл.Ссылка, СведенияОФайле);
РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ПрисоединенныйФайл.Ссылка, Версия, АдресВременногоХранилищаТекста);
Иначе
// Присоединенные файлы без версий
Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(ПрисоединенныйФайл.Ссылка, ДвоичныеДанные);
Иначе
Если Не СохраняетсяПредварительноНаДиск Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанные);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
КонецЕсли;
ПрисоединенныйФайл.Записать();
МенеджерФайла.ПриОбновленииДанныхФайла(Контекст, ПрисоединенныйФайл.Ссылка);
КонецЕсли;
ЗафиксироватьТранзакцию();
@@ -715,6 +697,7 @@
Исключение
ОтменитьТранзакцию();
ИнформацияОбОшибке = ИнформацияОбОшибке();
ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"":
@@ -731,10 +714,8 @@
,
,
КомментарийЖурналаРегистрации);
Если СохраняетсяПредварительноНаДиск Тогда
РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(ПрисоединенныйФайл));
КонецЕсли;
МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Ложь);
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСообщения,
@@ -743,6 +724,8 @@
КонецПопытки;
МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Истина);
РаботаСФайламиПереопределяемый.ПриСозданииФайла(ПрисоединенныйФайл.Ссылка);
Возврат ПрисоединенныйФайл.Ссылка;
@@ -91,9 +91,11 @@
// Перед добавлением файла должны быть заполнены свойства:
// * Ссылка - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлами.
// * Наименование - Строка - наименование добавляемого файла.
// * Размер - Число - размер файла.
// * Расширение - Строка - расширение добавляемого файла.
// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - ссылка на владельца файла.
// * ДатаМодификацииУниверсальная - Дата - дата изменения файла.
// * ДополнительныеСвойства - Структура
// После добавления можно анализировать свойства:
// * ТипХраненияФайла - ПеречислениеСсылка.ТипыХраненияФайлов - тип хранения данных файла.
// * Том - СправочникСсылка.ТомаХраненияФайлов - том, в который был добавлен файл.
@@ -107,11 +109,13 @@
ПараметрыФайла.Вставить("Том", Справочники.ТомаХраненияФайлов.ПустаяСсылка());
ПараметрыФайла.Вставить("ПутьКФайлу", "");
ПараметрыФайла.Вставить("Расширение", Неопределено);
ПараметрыФайла.Вставить("Размер", 0);
ПараметрыФайла.Вставить("Наименование", "");
ПараметрыФайла.Вставить("ХранимыйФайл", Неопределено);
ПараметрыФайла.Вставить("ВладелецФайла", Неопределено);
ПараметрыФайла.Вставить("ТипХраненияФайла", Неопределено);
ПараметрыФайла.Вставить("ДатаМодификацииУниверсальная", Неопределено);
ПараметрыФайла.Вставить("ДополнительныеСвойства", Новый Структура);
Возврат ПараметрыФайла;
@@ -142,7 +146,7 @@
Процедура ДобавитьФайл(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть,
ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь, ТомДляРазмещения = Неопределено) Экспорт
ЗаполнитьСведенияОФайле(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть, ДатаДляРазмещенияВТоме, ЗаполнятьСлужебныйРеквизитХранилище, ТомДляРазмещения);
ЗаполнитьСведенияОФайле(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть, ДатаДляРазмещенияВТоме, ЗаполнятьСлужебныйРеквизитХранилище);
Если НЕ ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
ЗаписатьДанныеФайлаВТом(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть);
@@ -177,7 +181,7 @@
// иначе - том будет выбран автоматически.
//
Процедура ЗаполнитьСведенияОФайле(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть,
ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь, ТомДляРазмещения = Неопределено) Экспорт
ДатаДляРазмещенияВТоме = Неопределено, ЗаполнятьСлужебныйРеквизитХранилище = Ложь) Экспорт
ОжидаемыеТипы = Новый Массив;
ОжидаемыеТипы.Добавить(Тип("ДвоичныеДанные"));
@@ -220,10 +224,9 @@
КонецЕсли;
РазмерФайла = ПрисоединенныйФайл.Размер;
РасширениеФайла = ПрисоединенныйФайл.Расширение;
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов();
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
ТипХраненияФайла = ТипХраненияФайла(РасширениеФайла, РазмерФайла);
ТипХраненияФайла = ПрисоединенныйФайл.ТипХраненияФайла;
Если НЕ ЗначениеЗаполнено(ТипХраненияФайла) Тогда
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Расширение);
КонецЕсли;
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
@@ -248,7 +251,7 @@
Иначе
ТомХранения = ?(ЗначениеЗаполнено(ТомДляРазмещения), ТомДляРазмещения, СвободныйТом(РазмерФайла));
ТомХранения = СвободныйТом(РазмерФайла);
Если ТомХранения = Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
@@ -281,95 +284,11 @@
КонецПроцедуры
// Сохраняет двоичные данные файла в том или копирует данные из файла по переданному пути.
// Перед вызовом необходимо заполнить сведения о файле (см. ЗаполнитьСведенияОФайле).
//
// Не может вызываться с включенным безопасным режимом.
//
// Выбрасывает исключения.
//
// Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// ДвоичныеДанныеИлиПуть - ДвоичныеДанные
// - Строка - двоичные данные файла или полный путь
// к файлу на диске.
//
Процедура ЗаписатьДанныеФайлаВТом(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть) Экспорт
УстановитьПривилегированныйРежим(Истина);
ШаблонОписанияОшибки = "";
СтрокаИсключения = "";
ПутьКТому = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПрисоединенныйФайл.ДополнительныеСвойства, "ПутьКТому", "");
СвойстваФайла = СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайл);
ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла);
Если ЗначениеЗаполнено(ПрисоединенныйФайл.Ссылка) Тогда
РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ПрисоединенныйФайл.Ссылка);
КонецЕсли;
Попытка
Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка") Тогда
КопироватьФайл(ДвоичныеДанныеИлиПуть, ПутьКФайлу);
Иначе
ДвоичныеДанныеИлиПуть.Записать(ПутьКФайлу);
КонецЕсли;
ФайлНаДиске = Новый Файл(ПутьКФайлу);
ФайлНаДиске.УстановитьУниверсальноеВремяИзменения(ПрисоединенныйФайл.ДатаМодификацииУниверсальная);
ФайлНаДиске.УстановитьТолькоЧтение(Истина);
Исключение
ШаблонОписанияОшибки = НСтр("ru = 'Ошибка при добавлении файла ""%1""
|в том ""%2"" (%3):
|""%4"".'");
ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияОшибки,
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение,
Строка(ПрисоединенныйФайл.Том),
ПутьКТому,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияОшибки,
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение,
Строка(ПрисоединенныйФайл.Том),
ПутьКТому,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Иначе
// Сообщение обычному пользователю.
СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл:
|""%1.%2"".
|
|Обратитесь к администратору.'"),
ПрисоединенныйФайл.Наименование,
ПрисоединенныйФайл.Расширение);
КонецЕсли;
ВызватьИсключение СтрокаИсключения;
КонецПопытки;
КонецПроцедуры
// Копирует данные присоединенного файла по указанному пути.
//
// Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом.
// ВызыватьИсключение - Путь - полный путь (включая имя файла), куда будет скопирован файл из тома.
// Путь - Строка - полный путь (включая имя файла), куда будет скопирован файл из тома.
//
Процедура СкопироватьФайл(ПрисоединенныйФайл, Путь) Экспорт
@@ -387,79 +306,15 @@
КонецПроцедуры
// Обновляет данные файла в томе.
//
// Параметры:
// ПрисоединенныйФайлОбъект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника с файлом.
// ДвоичныеДанные - данные, которые будут помещены в том.
//
Процедура ОбновитьФайл(ПрисоединенныйФайлОбъект, ДвоичныеДанные) Экспорт
Попытка
СвойстваФайла = СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайлОбъект);
ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла);
УдалитьФайл(ПутьКФайлу);
ДобавитьФайл(ПрисоединенныйФайлОбъект, ДвоичныеДанные);
ПрисоединенныйФайлОбъект.Записать();
Исключение
ПрисоединенныйФайлСсылка = ПрисоединенныйФайлОбъект.Ссылка;
ТекстОшибки = НСтр("ru = 'Ошибка, при сохранении файла в томе:
|""%1"".
|
|Ссылка на файл: ""%2"".'");
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Файлы.Запись файла на диск'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Справочники[ПрисоединенныйФайлСсылка.Метаданные().Имя],
ПрисоединенныйФайлСсылка,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ПрисоединенныйФайлСсылка));
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ПрисоединенныйФайлСсылка);
КонецПопытки;
КонецПроцедуры
// Удаляет файл из тома и обновляет информацию о хранении файла в информационной базе.
//
// Параметры:
// ПрисоединенныйФайлОбъект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника с файлом.
// ТекстКомментария - Строка - комментарий, который будет помещен в элемент справочника, данные
// которого удаляются из тома.
//
Процедура УдалитьДанныеФайла(ПрисоединенныйФайлОбъект, ТекстКомментария = "") Экспорт
СвойстваФайла = СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайлОбъект);
ПрисоединенныйФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка();
ПрисоединенныйФайлОбъект.ПутьКФайлу = "";
ПрисоединенныйФайлОбъект.ПометкаУдаления = Истина;
Если ТипЗнч(ПрисоединенныйФайлОбъект) = Тип("СправочникОбъект.ВерсииФайлов") Тогда
ПрисоединенныйФайлОбъект.Комментарий = ТекстКомментария + ПрисоединенныйФайлОбъект.Комментарий;
Иначе
ПрисоединенныйФайлОбъект.Описание = ТекстКомментария + ПрисоединенныйФайлОбъект.Описание;
КонецЕсли;
ПрисоединенныйФайлОбъект.Записать();
УдалитьФайл(ПолноеИмяФайлаВТоме(СвойстваФайла));
КонецПроцедуры
// Удаляет файл из тома.
//
// Параметры:
// ПутьКФайлу - Строка - путь к удаляемому файлу.
//
// Возвращаемое значение:
// Структура:
// * Успешно - Булево
// * ИнформацияОбОшибке - ИнформацияОбОшибке
//
Функция УдалитьФайл(ПутьКФайлу) Экспорт
Результат = Новый Структура("Успешно, ИнформацияОбОшибке", Истина, Неопределено);
@@ -606,7 +461,6 @@
Если ТипЗнч(СсылкаНаВерсию) = Тип("СправочникСсылка.ВерсииФайлов") Тогда
РеквизитыФайла.Добавить("Владелец");
РеквизитыФайла.Добавить("НомерВерсии");
Иначе
РеквизитыФайла.Добавить("ВладелецФайла");
КонецЕсли;
@@ -634,11 +488,19 @@
//
// Параметры:
// СвойстваФайла - см. СвойстваФайлаВТоме.
// ДатаДляРазмещенияВТоме - Дата
//
// Возвращаемое значение:
// Строка
//
Функция ПолноеИмяФайлаВТоме(СвойстваФайла, ДатаДляРазмещенияВТоме = Неопределено) Экспорт
Разделитель = ПолучитьРазделительПути();
Если НЕ ЗначениеЗаполнено(СвойстваФайла.Том) Тогда
Возврат "";
КонецЕсли;
КорневойКаталог = ПолныйПутьТома(СвойстваФайла.Том);
Если Не ПустаяСтрока(СвойстваФайла.ПутьКФайлу) Тогда
Возврат КорневойКаталог + СвойстваФайла.ПутьКФайлу;
@@ -872,6 +734,333 @@
#Область СлужебныеПроцедурыИФункции
// Сохраняет двоичные данные файла в том или копирует данные из файла по переданному пути.
// Перед вызовом необходимо заполнить сведения о файле (см. ЗаполнитьСведенияОФайле).
//
// Не может вызываться с включенным безопасным режимом.
//
// Выбрасывает исключения.
//
// Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// ДвоичныеДанныеИлиПуть - ДвоичныеДанные
// - Строка - двоичные данные файла или полный путь
// к файлу на диске.
//
Процедура ЗаписатьДанныеФайлаВТом(ПрисоединенныйФайл, ДвоичныеДанныеИлиПуть)
УстановитьПривилегированныйРежим(Истина);
ШаблонОписанияОшибки = "";
СтрокаИсключения = "";
ПутьКТому = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПрисоединенныйФайл.ДополнительныеСвойства, "ПутьКТому", "");
СвойстваФайла = СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ПрисоединенныйФайл);
ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла);
Если ЗначениеЗаполнено(ПрисоединенныйФайл.Ссылка) Тогда
РаботаСФайламиСлужебный.УдалитьЗаписьИзРегистраДвоичныеДанныеФайлов(ПрисоединенныйФайл.Ссылка);
КонецЕсли;
Попытка
Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка") Тогда
КопироватьФайл(ДвоичныеДанныеИлиПуть, ПутьКФайлу);
Иначе
ДвоичныеДанныеИлиПуть.Записать(ПутьКФайлу);
КонецЕсли;
ФайлНаДиске = Новый Файл(ПутьКФайлу);
ФайлНаДиске.УстановитьУниверсальноеВремяИзменения(ПрисоединенныйФайл.ДатаМодификацииУниверсальная);
ФайлНаДиске.УстановитьТолькоЧтение(Истина);
Исключение
ШаблонОписанияОшибки = НСтр("ru = 'Ошибка при добавлении файла ""%1""
|в том ""%2"" (%3):
|""%4"".'");
ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияОшибки,
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение,
Строка(ПрисоединенныйФайл.Том),
ПутьКТому,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияОшибки,
ПрисоединенныйФайл.Наименование + "." + ПрисоединенныйФайл.Расширение,
Строка(ПрисоединенныйФайл.Том),
ПутьКТому,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Иначе
// Сообщение обычному пользователю.
СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл:
|""%1.%2"".
|
|Обратитесь к администратору.'"),
ПрисоединенныйФайл.Наименование,
ПрисоединенныйФайл.Расширение);
КонецЕсли;
ВызватьИсключение СтрокаИсключения;
КонецПопытки;
КонецПроцедуры
Процедура ОчиститьУдаленныеФайлы() Экспорт
Если НЕ (ХранитьФайлыВТомахНаДиске()) Тогда
Возврат;
КонецЕсли;
Для Каждого Том Из ДоступныеТома() Цикл
ОчиститьУдаленныеФайлыВТоме(Том);
КонецЦикла;
КонецПроцедуры
// Параметры:
// Том - СправочникСсылка.ТомаХраненияФайлов
//
Процедура ОчиститьУдаленныеФайлыВТоме(Том)
ВремяПоследнейОчистки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Том, "ВремяПоследнейОчисткиФайлов");
КорневойКаталог = ПолныйПутьТома(Том);
ФайлыДляУдаления = ФайлыДляУдаления(КорневойКаталог, ВремяПоследнейОчистки);
Для Каждого Файл Из УдаленныеФайлы(Том, КорневойКаталог, ФайлыДляУдаления) Цикл
УдалитьФайл(Файл);
КонецЦикла;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных();
Элемент = Блокировка.Добавить(Том.Метаданные().ПолноеИмя());
Элемент.УстановитьЗначение("Ссылка", Том);
Блокировка.Заблокировать();
ТомОбъект = Том.ПолучитьОбъект();
ТомОбъект.ВремяПоследнейОчисткиФайлов = ТекущаяУниверсальнаяДата();
ТомОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Ошибка = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(НСтр("ru='Работа с файлами.Очистка файлов'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
Том.Метаданные(),
Том,
ПодробноеПредставлениеОшибки(Ошибка));
КонецПопытки;
КонецПроцедуры
// Удаленные файлы.
//
// Параметры:
// Том - СправочникСсылка.ТомаХраненияФайлов
// КорневойКаталог - Строка
// ФайлыДляУдаления - Массив из Файл - файлы для удаления
//
// Возвращаемое значение:
// Массив из Файл
//
Функция УдаленныеФайлы(Том, КорневойКаталог, ФайлыДляУдаления)
Результат = Новый Массив;
ТаблицаФайлы = Новый ТаблицаЗначений();
ДлинаСтроки = Метаданные.Справочники.Файлы.Реквизиты.ПутьКФайлу.Тип;
ТаблицаФайлы.Колонки.Добавить("Путь", ДлинаСтроки);
Для Каждого Файл Из ФайлыДляУдаления Цикл
ОтносительныйПуть = СтрЗаменить(Файл, КорневойКаталог, "");
ТаблицаФайлы.Добавить().Путь = ОтносительныйПуть;
КонецЦикла;
Запрос = ЗапросПроверкиСуществованияФайлов(ТаблицаФайлы);
Запрос.УстановитьПараметр("Том", Том);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Добавить(КорневойКаталог + СокрЛП(Выборка.Путь));
КонецЦикла;
Возврат Результат;
КонецФункции
// Длина файлов в запросе ограничена:
// Имя метаданного (80) + дата (6) + подтом для исключения повторения (6 символов) + имя файла (150).
// Итого: 242.
//
Функция ЗапросПроверкиСуществованияФайлов(Знач ТаблицаФайлы)
МенеджерТаблиц = Новый МенеджерВременныхТаблиц();
Запрос = Новый Запрос("ВЫБРАТЬ
| ВЫРАЗИТЬ(Файлы.Путь КАК Строка(1024)) КАК Путь
|ПОМЕСТИТЬ Файлы
|ИЗ
| &Файлы КАК Файлы");
Запрос.МенеджерВременныхТаблиц = МенеджерТаблиц;
Запрос.УстановитьПараметр("Файлы", ТаблицаФайлы);
Запрос.Выполнить();
ЧастиЗапроса = Новый Массив;
ШапкаЗапроса = "ВЫБРАТЬ
| """" КАК Путь
|ПОМЕСТИТЬ СуществующиеФайлы
|ГДЕ
| ЛОЖЬ";
ЧастиЗапроса.Добавить(ШапкаЗапроса);
ШаблонЗапроса = "
|ВЫБРАТЬ
| Файлы.Путь КАК Путь
|ИЗ
| Файлы КАК Файлы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ &СправочникПрисоединенныхФайлов КАК ПрисоединенныеФайлы
| ПО ПрисоединенныеФайлы.Том = &Том
| И ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПутьКФайлу КАК Строка(1024)) = Файлы.Путь";
ТипыПрисоединенныхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();
Для Каждого Тип Из ТипыПрисоединенныхФайлов Цикл
МетаданныеПрисоединенныеФайлы = Метаданные.НайтиПоТипу(Тип);
ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&СправочникПрисоединенныхФайлов", МетаданныеПрисоединенныеФайлы.ПолноеИмя());
ЧастиЗапроса.Добавить(ТекстЗапроса);
КонецЦикла;
Разделитель = "
|ОБЪЕДИНИТЬ ВСЕ
|";
ТекстЗапроса = СтрСоединить(ЧастиЗапроса, Разделитель);
ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + "
|ВЫБРАТЬ
| Файлы.Путь КАК Путь
|ИЗ
| Файлы КАК Файлы
|ГДЕ
| НЕ Файлы.Путь В (
| ВЫБРАТЬ
| СуществующиеФайлы.Путь КАК Путь
| ИЗ
| СуществующиеФайлы КАК СуществующиеФайлы)";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = МенеджерТаблиц;
Возврат Запрос;
КонецФункции
Функция ФайлыДляУдаления(Каталог, ВремяПоследнейОчистки)
ФайлыДляУдаления = Новый Массив;
ОписаниеКаталога = Новый Файл(Каталог);
ПроверятьФайлыВТекущемКаталоге = ВремяПоследнейОчистки <= ОписаниеКаталога.ПолучитьУниверсальноеВремяИзменения();
Для Каждого Файл Из НайтиФайлы(Каталог, ПолучитьМаскуВсеФайлы(), Ложь) Цикл
Если Файл.ЭтоКаталог() Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
ФайлыДляУдаления,
ФайлыДляУдаления(Файл.ПолноеИмя, ВремяПоследнейОчистки));
Иначе
Если ПроверятьФайлыВТекущемКаталоге И НЕ Файл.ЭтоКаталог() Тогда
ФайлыДляУдаления.Добавить(Файл.ПолноеИмя);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ФайлыДляУдаления;
КонецФункции
// Вызывается до начала транзакции.
// Для новых файлов все данные файлы должны быть заполнены.
//
// Параметры:
// Контекст - см. РаботаСФайламиСлужебный.КонтекстОбновленияФайла
//
Процедура ПередОбновлениемДанныхФайла(Контекст) Экспорт
Контекст.ИзменяемыеРеквизиты.Вставить("ПутьКФайлу", "");
Контекст.ИзменяемыеРеквизиты.Вставить("Том", Справочники.ТомаХраненияФайлов.ПустаяСсылка());
Если НЕ Контекст.ЭтоНовый Тогда
СвойстваФайла = СвойстваФайлаВТоме(Контекст.ПрисоединенныйФайл);
Контекст.СтарыйПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла);
КонецЕсли;
КонтейнерСвойствФайла = ПараметрыДобавленияФайла();
КонтейнерСвойствФайла.Ссылка = Контекст.ПрисоединенныйФайл;
ЗаполнитьЗначенияСвойств(КонтейнерСвойствФайла, Контекст.ПараметрыДобавленияФайла,,"Ссылка");
КонтейнерСвойствФайла.ПутьКФайлу = ""; // Всегда будем создавать новую версию на диске, не затирая старую.
УстановитьОтключениеБезопасногоРежима(Истина);
ДобавитьФайл(КонтейнерСвойствФайла, Контекст.ДанныеФайла);
УстановитьОтключениеБезопасногоРежима(Ложь);
Контекст.ИзменяемыеРеквизиты.ПутьКФайлу = КонтейнерСвойствФайла.ПутьКФайлу;
Контекст.ИзменяемыеРеквизиты.Том = КонтейнерСвойствФайла.Том;
КонецПроцедуры
// Вызывается в транзакции модификации.
// Параметры:
// Контекст - см. РаботаСФайламиСлужебный.КонтекстОбновленияФайла
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайлОбъект
//
Процедура ПередЗаписьюДанныхФайла(Контекст, ПрисоединенныйФайл) Экспорт
ЗаполнитьЗначенияСвойств(ПрисоединенныйФайл, Контекст.ИзменяемыеРеквизиты);
КонецПроцедуры
// Вызывается в транзакции модификации.
// Параметры:
// Контекст - см. РаботаСФайламиСлужебный.КонтекстОбновленияФайла
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл
//
Процедура ПриОбновленииДанныхФайла(Контекст, ПрисоединенныйФайл) Экспорт
Возврат; // Не используется
КонецПроцедуры
// Вызывается после фиксации или отката транзакции.
//
// Параметры:
// Контекст - см. РаботаСФайламиСлужебный.КонтекстОбновленияФайла
// Успешно - Булево - Истина, если транзакция успешно зафиксирована.
//
Процедура ПослеОбновленияДанныхФайла(Контекст, Успешно) Экспорт
Если НЕ Успешно Тогда
СвойстваФайла = СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, Контекст.ПараметрыДобавленияФайла);
ЗаполнитьЗначенияСвойств(СвойстваФайла, Контекст.ИзменяемыеРеквизиты);
НовыйПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла);
УдаляемыйФайл = Новый Файл(НовыйПутьКФайлу);
Если УдаляемыйФайл.Существует() Тогда
УдалитьФайл(НовыйПутьКФайлу);
КонецЕсли;
Иначе
ПрисоединенныйФайл = Контекст.ПрисоединенныйФайл;
ЭтоВерсия = ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.ВерсииФайлов");
ОсновнойФайл = ?(ЭтоВерсия, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрисоединенныйФайл, "Владелец"), ПрисоединенныйФайл);
ЭтоЗашифрованныйФайл = ОбщегоНазначения.ЕстьРеквизитОбъекта("Зашифрован", ОсновнойФайл.Метаданные())
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнойФайл, "Зашифрован");
// Для зашифрованных файлов всегда будем пытаться удалять старый файл,
// т.к. внешняя транзакция всегда будет активна.
// см. РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании.
Если ЭтоЗашифрованныйФайл ИЛИ НЕ ТранзакцияАктивна() Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УдалитьФайл(Контекст.СтарыйПутьКФайлу);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#Область НастройкиХраненияФайловВТомах
// Возвращает признак того, что файлы могут храниться и в томах на диске и в информационной базе.
@@ -1070,8 +1259,8 @@
// * ДатаРедактирования - Строка
//
Функция ЛишниеФайлыНаДиске() Экспорт
ТаблицаФайловНаДиске = Новый ТаблицаЗначений;
ТаблицаФайловНаДиске.Колонки.Добавить("Имя");
ТаблицаФайловНаДиске.Колонки.Добавить("Файл");
ТаблицаФайловНаДиске.Колонки.Добавить("ИмяБезРасширения");
@@ -1085,14 +1274,13 @@
ТаблицаФайловНаДиске.Колонки.Добавить("ДатаРедактирования");
Возврат ТаблицаФайловНаДиске;
КонецФункции
// Параметры:
// ТаблицаФайловНаДиске - см. РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске
// Том - СправочникСсылка.ТомаХраненияФайлов - ссылка на том.
//
Процедура ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, Том) Экспорт
Процедура ЗаполнитьЛишниеФайлы(ТаблицаФайловНаДиске, Том) Экспорт
ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();
@@ -1202,7 +1390,7 @@
#Область КонтрольВеденияУчета
Функция ДоступныеТома(ПараметрыПроверки)
Функция ДоступныеТома(ПараметрыПроверки = Неопределено) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
@@ -1269,6 +1457,10 @@
Процедура ЗафиксироватьПроблемуСТомом(Том, УточнениеПроблемы, ПараметрыПроверки)
Если ПараметрыПроверки = Неопределено Тогда
Возврат;
КонецЕсли;
МодульКонтрольВеденияУчета = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчета");
Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(Том, ПараметрыПроверки);
File diff suppressed because it is too large. Load diff
@@ -710,7 +710,7 @@
ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить();
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла);
ДвоичныеДанные = РаботаСФайламиСлужебный.ДвоичныеДанныеИзСведенийОФайле(СведенияОФайле);
Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда
Возврат Неопределено; // Файл бинарно не изменен - вернем Ложь.
КонецЕсли;
@@ -725,6 +725,17 @@
ЭлементБлокировки = Блокировка.Добавить(СсылкаНаВерсию.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию);
Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(Расширение, СведенияОФайле.Размер);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайловПоТипу(ТипХраненияФайлов);
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(
СсылкаНаВерсию,
СведенияОФайле.АдресВременногоХранилищаФайла,
,
ТипХраненияФайлов);
МенеджерФайла.ПередОбновлениемДанныхФайла(Контекст);
НачатьТранзакцию();
Попытка
@@ -735,12 +746,6 @@
ВерсияЗаблокирована = Истина;
Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов();
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
ТипХраненияФайлов = РаботаСФайламиВТомахСлужебный.ТипХраненияФайла(Расширение, СведенияОФайле.Размер);
КонецЕсли;
Версия.ТипХраненияФайла = ТипХраненияФайлов;
Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
@@ -760,7 +765,7 @@
Версия.Расширение = Расширение;
Если ДвоичныеДанные = Неопределено Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); // ДвоичныеДанные
ДвоичныеДанные = РаботаСФайламиСлужебный.ДвоичныеДанныеИзСведенийОФайле(СведенияОФайле);
КонецЕсли;
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
@@ -820,27 +825,29 @@
Версия.Заполнить(Неопределено);
МенеджерФайла.ПередЗаписьюДанныхФайла(Контекст, Версия);
Версия.Записать();
МенеджерФайла.ПриОбновленииДанныхФайла(Контекст, Версия.Ссылка);
Если ВерсияЗаблокирована Тогда
РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификаторФормы);
КонецЕсли;
РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии);
Если СведенияОФайле.ХранитьВерсии Тогда
РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, Версия.Ссылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
Иначе
РаботаСФайламиСлужебный.ОбновитьТекстВФайле(ФайлСсылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Ложь);
ВызватьИсключение;
КонецПопытки;
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла);
Иначе // хранение на диске
РаботаСФайламиВТомахСлужебный.УдалитьФайл(РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваВерсии));
РаботаСФайламиВТомахСлужебный.ЗаписатьДанныеФайлаВТом(Версия, ДвоичныеДанные);
КонецЕсли;
МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Истина);
Если ЕстьПравоСохранения Тогда
НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка);
@@ -852,6 +859,8 @@
КонецФункции
// Обновляет или создает версию файла и снимает блокировку.
//
// Выбрасывает исключение.
//
// Параметры:
// ДанныеФайла - Структура - структура с данными файла.
@@ -873,47 +882,30 @@
ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'");
КонецЕсли;
НачатьТранзакцию();
Попытка
ПредыдущаяВерсия = ДанныеФайла.ТекущаяВерсия;
СведенияОФайле.Зашифрован = ДанныеФайла.Зашифрован;
СведенияОФайле.Кодировка = ДанныеФайла.Кодировка;
Если ТипЗнч(ДанныеФайла.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда
НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
Иначе
НоваяВерсия = ОбновитьОбъектФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
КонецЕсли;
Если НоваяВерсия <> Неопределено Тогда
Если СведенияОФайле.ХранитьВерсии Тогда
РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ДанныеФайла.Ссылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
Иначе
ОбновитьТекстВФайле(ДанныеФайла.Ссылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
КонецЕсли;
ДанныеФайла.ТекущаяВерсия = НоваяВерсия;
КонецЕсли;
ОсвободитьФайл(ДанныеФайла, УникальныйИдентификаторФормы);
Если СведенияОФайле.Кодировка <> Неопределено Тогда
Если Не ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда
РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, СведенияОФайле.Кодировка);
КонецЕсли;
КонецЕсли;
Если НоваяВерсия <> Неопределено И НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда
УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр(ПредыдущаяВерсия, НоваяВерсия,
ПолныйПутьКФайлу, РабочийКаталогПользователя, ДанныеФайла.РабочийКаталогВладельца <> "");
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
ПредыдущаяВерсия = ДанныеФайла.ТекущаяВерсия;
СведенияОФайле.Зашифрован = ДанныеФайла.Зашифрован;
СведенияОФайле.Кодировка = ДанныеФайла.Кодировка;
Возврат НоваяВерсия <> Неопределено;
Если ТипЗнч(ДанныеФайла.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда
НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
Иначе
НоваяВерсия = ОбновитьОбъектФайла(ДанныеФайла.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
КонецЕсли;
ОсвободитьФайл(ДанныеФайла, УникальныйИдентификаторФормы);
Если НоваяВерсия = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ДанныеФайла.ТекущаяВерсия = НоваяВерсия;
Если НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда
УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр(ПредыдущаяВерсия, НоваяВерсия,
ПолныйПутьКФайлу, РабочийКаталогПользователя, ДанныеФайла.РабочийКаталогВладельца <> "");
КонецЕсли;
Возврат Истина;
КонецФункции
@@ -945,7 +937,7 @@
// Предназначена для записи изменений файла без его освобождения.
//
// Параметры:
// ДанныеФайла - Структура - структура с данными файла.
// ФайлСсылка - ОпределяемыйТип.ПрисоединенныйФайл - присоединенный файл.
// СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле
// НеМенятьЗаписьВРабочемКаталоге - Булево - не менять запись в регистре сведений ФайлыВРабочемКаталоге.
// ОтносительныйПутьКФайлу - Строка - относительный путь без пути рабочего каталога, например
@@ -968,101 +960,32 @@
ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'");
КонецЕсли;
ТекущаяВерсия = ДанныеФайлаТекущие.ТекущаяВерсия;
СтараяВерсия = ?(СведенияОФайле.ХранитьВерсии, ФайлСсылка.ТекущаяВерсия, ФайлСсылка);
СведенияОФайле.Зашифрован = ДанныеФайлаТекущие.Зашифрован;
НачатьТранзакцию();
Попытка
СтараяВерсия = ?(СведенияОФайле.ХранитьВерсии, ФайлСсылка.ТекущаяВерсия, ФайлСсылка);
СведенияОФайле.Зашифрован = ДанныеФайлаТекущие.Зашифрован;
Если ТипЗнч(ФайлСсылка.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда
НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы, СведенияОФайле.НоваяВерсияАвтор);
Иначе
НоваяВерсия = ОбновитьОбъектФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
КонецЕсли;
Если НоваяВерсия <> Неопределено Тогда
ТекущаяВерсия = НоваяВерсия;
Если СведенияОФайле.ХранитьВерсии Тогда
РаботаСФайламиСлужебный.ОбновитьВерсиюВФайле(ФайлСсылка, НоваяВерсия, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
Если НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда
УдалитьИзРегистра(СтараяВерсия);
ЗаписатьПолноеИмяФайлаВРегистр(НоваяВерсия, ОтносительныйПутьКФайлу, Ложь, ВРабочемКаталогеВладельца);
КонецЕсли;
Иначе
ОбновитьТекстВФайле(ФайлСсылка, СведенияОФайле.АдресВременногоХранилищаТекста, УникальныйИдентификаторФормы);
КонецЕсли;
КонецЕсли;
Если СведенияОФайле.Кодировка <> Неопределено Тогда
Если Не ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ТекущаяВерсия)) Тогда
РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, СведенияОФайле.Кодировка);
КонецЕсли;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(ФайлСсылка.Ссылка) = Тип("СправочникСсылка.Файлы") Тогда
НоваяВерсия = РаботаСФайламиСлужебный.ОбновитьВерсиюФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы, СведенияОФайле.НоваяВерсияАвтор);
Иначе
НоваяВерсия = ОбновитьОбъектФайла(ФайлСсылка.Ссылка, СведенияОФайле,, УникальныйИдентификаторФормы);
КонецЕсли;
Возврат НоваяВерсия <> Неопределено;
Если НоваяВерсия = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если СведенияОФайле.ХранитьВерсии Тогда
Если НЕ ОбщегоНазначения.ЭтоВебКлиент() И Не НеМенятьЗаписьВРабочемКаталоге Тогда
УдалитьИзРегистра(СтараяВерсия);
ЗаписатьПолноеИмяФайлаВРегистр(НоваяВерсия, ОтносительныйПутьКФайлу, Ложь, ВРабочемКаталогеВладельца);
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
// Обновляет текстовую порцию из файла в карточке файла.
//
// Параметры:
// ФайлСсылка - СправочникСсылка.Файлы - файл, в котором создается версия.
// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с
// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные
// данные с файлом текста.
// УникальныйИдентификатор - уникальный идентификатор формы.
//
Процедура ОбновитьТекстВФайле(ФайлСсылка,
Знач АдресВременногоХранилищаТекста,
УникальныйИдентификатор = Неопределено)
ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать;
НачатьТранзакцию();
Попытка
МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка));
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(МетаданныеСправочника.ПолноеИмя());
ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ФайлСсылка);
БлокировкаДанных.Заблокировать();
ФайлОбъект = ФайлСсылка.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор);
Если МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда
РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста);
ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста;
ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище;
Иначе
ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения("");
КонецЕсли;
ФайлОбъект.Записать();
РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Создает новый файл по аналогии с указанным и возвращает ссылку на него.
// Параметры:
// ИсходныйФайл - СправочникСсылка.Файлы - существующий файл.
@@ -1946,6 +1869,14 @@
ИмяКаталога,
ВРабочемКаталогеВладельца)
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НоваяВерсия) Тогда
Возврат;
КонецЕсли;
УдалитьИзРегистра(СтараяВерсия);
НаЧтение = Истина;
ЗанестиИнформациюФайлаВРегистр(НоваяВерсия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, 0, ВРабочемКаталогеВладельца);
@@ -2409,6 +2340,7 @@
СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваФайла, ФайлИлиВерсияОбъект);
// Исправить
РаботаСФайламиВТомахСлужебный.УдалитьФайл(
РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла));
@@ -8257,7 +8257,145 @@
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Рассылает оповещение о завершении шифрования или расшифровки файла.
// Процедуры и функции для работы с криптографией из формы файла.
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура ПрочитатьСертификатыПодписей(Форма) Экспорт
Если Форма.ЭлектронныеПодписи.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("Форма", Форма);
Контекст.Вставить("МодульЭлектроннаяПодписьКлиент",
ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"));;
Если Контекст.МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда
Возврат;
КонецЕсли;
НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеПодключенияРасширения", ЭтотОбъект, Контекст));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
Процедура ПрочитатьСертификатыПодписейПослеПодключенияРасширения(Подключено, Контекст) Экспорт
Если Не Подключено Тогда
Возврат;
КонецЕсли;
Контекст.МодульЭлектроннаяПодписьКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПолучениеСертификатов", Ложь);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
Процедура ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда
Возврат;
КонецЕсли;
Контекст.Вставить("Индекс", -1);
Контекст.Вставить("МенеджерКриптографии", Результат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
//
// Параметры:
// Контекст - Структура:
// * Форма - ФормаКлиентскогоПриложения
//
Процедура ПрочитатьСертификатыПодписейЦиклНачало(Контекст)
Если Контекст.Форма.ЭлектронныеПодписи.Количество() <= Контекст.Индекс + 1 Тогда
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
Контекст.Вставить("СтрокаТаблицы", Контекст.Форма.ЭлектронныеПодписи[Контекст.Индекс]);
Если ЗначениеЗаполнено(Контекст.СтрокаТаблицы.Отпечаток) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
// Подпись не была прочитана при записи объекта.
Подпись = ПолучитьИзВременногоХранилища(Контекст.СтрокаТаблицы.АдресПодписи);
Если Не ЗначениеЗаполнено(Подпись) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект),
Подпись);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
Процедура ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Экспорт
Если Сертификаты.Количество() = 0 Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Сертификат = Сертификаты[0]; // СертификатКриптографии
Контекст.Вставить("Сертификат", Сертификат);
Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата", ЭтотОбъект));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
//
// Параметры:
// Контекст - Структура:
// * Форма - ФормаКлиентскогоПриложения
//
Процедура ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата(ДанныеСертификата, Контекст) Экспорт
СтрокаТаблицы = Контекст.СтрокаТаблицы;
СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток);
СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, Контекст.Форма.УникальныйИдентификатор);
СтрокаТаблицы.КомуВыданСертификат = Контекст.МодульЭлектроннаяПодписьКлиент.ПредставлениеСубъекта(Контекст.Сертификат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// По окончании Зашифровать нотифицирует.
// Параметры:
@@ -694,12 +694,12 @@
ТипДокумента = ПолучитьТипДанныхДокумента(СтрокаМассива.Содержание);
НоваяСтрока = Новый Структура("Content, Name, Type, OriginalContent, ВернутьКак");
НоваяСтрока.Content = СтрокаМассива.Содержание;
НоваяСтрока.Name = СтрокаМассива.ИмяДокумента;
НоваяСтрока.Type = СтрокаМассива.ТипДокумента;
НоваяСтрока.OriginalContent = СтрокаМассива.ИсходноеСодержание;
НоваяСтрока.ВернутьКак = ТипДокумента;
НоваяСтрока = Новый Структура();
НоваяСтрока.Вставить("Content", СтрокаМассива.Содержание);
НоваяСтрока.Вставить("Name", СтрокаМассива.ИмяДокумента);
НоваяСтрока.Вставить("Type", СтрокаМассива.ТипДокумента);
НоваяСтрока.Вставить("OriginalContent", СтрокаМассива.ИсходноеСодержание);
НоваяСтрока.Вставить("ВернутьКак", ТипДокумента);
Результат.Добавить(НоваяСтрока);
@@ -828,7 +828,9 @@
ИсходныйДокумент = Неопределено,
ИндексПодписи = Неопределено) Экспорт
ВсеТипы = ПолучитьТипыПодписей();
Результат = ПолучитьСвойствоПодписиCAdES("BES", ОтделеннаяПодпись, ХешДокумента, ВариантПодписи, "", ИсходныйДокумент);
Результат.Вставить("SignatureType", ВсеТипы["CMS"]);
Возврат Результат;
@@ -182,6 +182,7 @@
// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки.
Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт
Типы.Добавить(Метаданные.РегистрыСведений.НеудаленныеОбъекты);
Типы.Добавить(Метаданные.РегистрыСведений.УдаляемыеОбъекты);
Типы.Добавить(Метаданные.Константы.ПроверятьИспользованиеУдаляемыхОбъектов);
@@ -408,6 +408,11 @@
КонецЕсли;
Если ЭтоРегион Тогда
Если НаименованиеРегионаБезТипа(Наименование) Тогда
Возврат Наименование;
КонецЕсли;
Возврат СокрЛП(Наименование + " " + ТипАдресногоОбъекта);
КонецЕсли;
@@ -590,6 +595,12 @@
Возврат "e1cib/app/Обработка.ВводКонтактнойИнформации.Форма.ВебСайт";
КонецФункции
Функция НаименованиеРегионаБезТипа(Наименование)
// АПК: 1297-выкл Данные ФИАС, не локализуются
Возврат СтрНачинаетсяС(ВРег(Наименование), ВРег("Ханты-Мансийский Автономный округ - Югра")); // @Non-NLS-1
// АПК: 1297-вкл
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -2691,7 +2691,7 @@
#Область СлужебныеПроцедурыИФункцииДляСовместимости
// Возвращаемое значение:
// см. XDTOПакет.КонтактнаяИнформация
// см. XDTOПакет.КонтактнаяИнформация.КонтактнаяИнформация
//
Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, Знач Представление = "") Экспорт
@@ -2728,7 +2728,7 @@
Попытка
Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); // см. XDTOПакет.КонтактнаяИнформация
Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); // см. XDTOПакет.КонтактнаяИнформация.КонтактнаяИнформация
Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес И КонтактнаяИнформацияXDTOПустая(Результат) Тогда
НеобходимоВосстановитьКонтактнуюИнформацию = Истина;
@@ -4205,8 +4205,10 @@
КонецФункции
Функция ПреобразованиеXSLT_ТипКонтактнойИнформацииПоСтрокеXML()
Преобразователь = Новый ПреобразованиеXSL;
Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки("
Шаблон = "
|<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""
| xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
| xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo""
@@ -4216,7 +4218,7 @@
| <xsl:template match=""/"">
| <EnumRef.ТипыКонтактнойИнформации xmlns=""http://v8.1c.ru/8.1/data/enterprise/current-config"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""EnumRef.ТипыКонтактнойИнформации"">
| <xsl:call-template name=""enum-by-type"" >
| <xsl:with-param name=""type"" select=""ci:КонтактнаяИнформация/ci:Состав/@xsi:type"" />
| <xsl:with-param name=""type"" select=""ci:[КонтактнаяИнформация]/ci:[Состав]/@xsi:type"" />
| </xsl:call-template>
| </EnumRef.ТипыКонтактнойИнформации>
| </xsl:template>
@@ -4224,29 +4226,45 @@
| <xsl:template name=""enum-by-type"">
| <xsl:param name=""type"" />
| <xsl:choose>
| <xsl:when test=""$type='Адрес'"">
| <xsl:when test=""$type='[Адрес]'"">
| <xsl:text>Адрес</xsl:text>
| </xsl:when>
| <xsl:when test=""$type='НомерТелефона'"">
| <xsl:when test=""$type='[НомерТелефона]'"">
| <xsl:text>Телефон</xsl:text>
| </xsl:when>
| <xsl:when test=""$type='НомерФакса'"">
| <xsl:when test=""$type='[НомерФакса]'"">
| <xsl:text>Факс</xsl:text>
| </xsl:when>
| <xsl:when test=""$type='ЭлектроннаяПочта'"">
| <xsl:when test=""$type='[ЭлектроннаяПочта]'"">
| <xsl:text>АдресЭлектроннойПочты</xsl:text>
| </xsl:when>
| <xsl:when test=""$type='ВебСайт'"">
| <xsl:when test=""$type='[ВебСайт]'"">
| <xsl:text>ВебСтраница</xsl:text>
| </xsl:when>
| <xsl:when test=""$type='Прочее'"">
| <xsl:when test=""$type='[Прочее]'"">
| <xsl:text>Другое</xsl:text>
| </xsl:when>
| </xsl:choose>
| </xsl:template>
|
|</xsl:stylesheet>
|");
|";
ИменаСвойствXDTOПакета = Новый Структура();
ИменаСвойствXDTOПакета.Вставить("КонтактнаяИнформация", "КонтактнаяИнформация"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("Состав", "Состав"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("Адрес", "Адрес"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("НомерТелефона", "НомерТелефона"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("НомерФакса", "НомерФакса"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("ЭлектроннаяПочта", "ЭлектроннаяПочта"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("ВебСайт", "ВебСайт"); // @Non-NLS-2
ИменаСвойствXDTOПакета.Вставить("Прочее", "Прочее"); // @Non-NLS-2
Шаблон = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ИменаСвойствXDTOПакета);
Преобразователь.ЗагрузитьТаблицуСтилейXSLИзСтроки(Шаблон);
Возврат Преобразователь;
КонецФункции
@@ -749,28 +749,38 @@
ПроверкаЗаписьСостоянияОригинала.Отбор.Владелец.Установить(ДанныеЗаписи.Ссылка);
ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Истина);
ПроверкаЗаписьСостоянияОригинала.Прочитать();
Если ПроверкаЗаписьСостоянияОригинала.Количество()> 0 Тогда
ТЧ = ТабличнаяЧастьМногосотрудниковаДокумента(ДанныеЗаписи.Ссылка);
Если ТЧ <> "" Тогда
Для Каждого Сотрудник Из ДанныеЗаписи.Ссылка[ТЧ] Цикл
Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл
Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда
Изменено = Истина;
РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(ДанныеЗаписи.Ссылка,
ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне,Сотрудник.Сотрудник);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл
Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда
Изменено = Истина;
РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(ДанныеЗаписи.Ссылка,
ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне);
КонецЕсли;
КонецЦикла;
Если ПроверкаЗаписьСостоянияОригинала.Количество()> 0 Тогда
Если СокрЛП(ПроверкаЗаписьСостоянияОригинала[0].Состояние) <> ИмяСостояния Тогда
ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь);
ПроверкаЗаписьСостоянияОригинала.Прочитать();
Если ПроверкаЗаписьСостоянияОригинала.Количество()>0 Тогда
ТЧ = ТабличнаяЧастьМногосотрудниковаДокумента(ДанныеЗаписи.Ссылка);
Если ТЧ <> "" Тогда
Для Каждого Сотрудник Из ДанныеЗаписи.Ссылка[ТЧ] Цикл
ПроверкаЗаписьСостоянияОригинала.Отбор.Сотрудник.Установить(Сотрудник.Сотрудник);
ПроверкаЗаписьСостоянияОригинала.Прочитать();
Если ПроверкаЗаписьСостоянияОригинала.Количество()>0 Тогда
Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл
Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда
Изменено = Истина;
РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(ДанныеЗаписи.Ссылка,
ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне,Сотрудник.Сотрудник);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого ПрошлаяЗапись Из ПроверкаЗаписьСостоянияОригинала Цикл
Если СокрЛП(ПрошлаяЗапись.Состояние) <> ИмяСостояния Тогда
Изменено = Истина;
РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(ДанныеЗаписи.Ссылка,
ПрошлаяЗапись.ПервичныйДокумент,ПрошлаяЗапись.ПервичныйДокументПредставление,ИмяСостояния,ПрошлаяЗапись.ФормаИзвне);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Изменено = Истина;
РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(ДанныеЗаписи.Ссылка,ИмяСостояния);
@@ -86,12 +86,13 @@
Идентификатор = "";
АлгоритмыПроверкиПодписи = Новый Массив;
Иначе
Идентификатор = Строки[0].Идентификатор;
АлгоритмыПроверкиПодписи = Строки[0].АлгоритмыПроверкиПодписи;
Если АлгоритмыПроверкиПодписи.Найти(Строки[0].АлгоритмПодписи) = Неопределено Тогда
АлгоритмыПроверкиПодписи.Вставить(0, Строки[0].АлгоритмПодписи);
Строка = Строки[0]; // СтрокаТаблицыЗначений: см. ЭлектроннаяПодписьСлужебный.ПоставляемыеНастройкиПрограмм
Идентификатор = Строка.Идентификатор;
АлгоритмыПроверкиПодписи = Строка.АлгоритмыПроверкиПодписи;
Если АлгоритмыПроверкиПодписи.Найти(Строка.АлгоритмПодписи) = Неопределено Тогда
АлгоритмыПроверкиПодписи.Вставить(0, Строка.АлгоритмПодписи);
КонецЕсли;
Для Каждого АлгоритмПодписи Из Строки[0].АлгоритмыПодписи Цикл
Для Каждого АлгоритмПодписи Из Строка.АлгоритмыПодписи Цикл
Если АлгоритмыПроверкиПодписи.Найти(АлгоритмПодписи) = Неопределено Тогда
АлгоритмыПроверкиПодписи.Добавить(АлгоритмПодписи);
КонецЕсли;
+12 -10
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="1867d104-06a7-11ec-8986-0242ac110002">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bcd40b64-0cf0-11ec-d08f-0242ac110002">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="1867d10e-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="1867d136-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="1867d140-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="1867d141-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="1867d142-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="1867d14a-06a7-11ec-8986-0242ac110002"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="2b0e8014-08b0-4a19-a561-06a2c83b7a1f"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="bcd40b65-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="bcd40b96-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="bcd40b97-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="bcd40ba0-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="bcd40ba1-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="bcd40baa-0cf0-11ec-d08f-0242ac110002"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="73ddf94f-5b41-42e9-b7b6-91ee67097b59"/>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>3.1.5.171</version>
<version>3.1.5.180</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1185,7 +1185,7 @@
<xDTOPackages>XDTOPackage.DataArtefacts_Files_1_0_0_1</xDTOPackages>
<xDTOPackages>XDTOPackage.DataArtefacts_ServiceUsers_1_0_0_1</xDTOPackages>
<xDTOPackages>XDTOPackage.DataDump_1_0_2_1</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_10_1</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_10_2</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_2_3</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_3_20</xDTOPackages>
<xDTOPackages>XDTOPackage.EnterpriseData_1_4_20</xDTOPackages>
@@ -1656,6 +1656,7 @@
<constants>Constant.ПроверятьЭлектронныеПодписиНаСервере</constants>
<constants>Constant.ПрофильБезопасностиИнформационнойБазы</constants>
<constants>Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса</constants>
<constants>Constant.РежимОчисткиФайлов</constants>
<constants>Constant.СведенияОБлокируемыхОбъектах</constants>
<constants>Constant.СведенияОбОбновленииИБ</constants>
<constants>Constant.СервисПереводаТекста</constants>
@@ -1881,6 +1882,7 @@
<enums>Enum.РежимыВыгрузкиОбъектовОбмена</enums>
<enums>Enum.РежимыВыполненияОбработчиков</enums>
<enums>Enum.РежимыВыполненияОтложенныхОбработчиков</enums>
<enums>Enum.РежимыОчисткиФайлов</enums>
<enums>Enum.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок</enums>
<enums>Enum.РезультатыВыполненияОбмена</enums>
<enums>Enum.СервисыПереводаТекста</enums>
@@ -1 +1 @@
{6,1,1,5e836194-06a7-11ec-b291-0242ac110002,1,4dbca118-06a7-11ec-8e83-0242ac110002,"3.1.5.171","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6460,1,0,1867d104-06a7-11ec-8986-0242ac110002,1867d104-06a7-11ec-8986-0242ac110002,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63Line truncated
{6,1,1,1e8813be-0cf1-11ec-9d8d-0242ac110002,1,058a5bec-0cf1-11ec-319a-0242ac110002,"3.1.5.180","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6466,1,0,bcd40b64-0cf0-11ec-d08f-0242ac110002,bcd40b64-0cf0-11ec-d08f-0242ac110002,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63Line truncated
@@ -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="99c5e87a-f096-4315-8fbe-f596ea9c176f">
<producedTypes>
<managerType typeId="87e9375e-8559-4b7f-8614-2a91f942a770" valueTypeId="1ff72e73-5f27-482c-8a26-3ff7d41e8d22"/>
<valueManagerType typeId="a329ea36-d474-4c95-9aaa-6e3c02a688b9" valueTypeId="2b600d3c-0cb2-48a4-b4c0-6e91338fcdee"/>
<valueKeyType typeId="a47c72e6-d299-49f8-b211-1f709f797efa" valueTypeId="7b11e1fa-d466-4acb-9f10-b0c5d9798db9"/>
</producedTypes>
<name>РежимОчисткиФайлов</name>
<synonym>
<key>ru</key>
<value>Режим очистки файлов</value>
</synonym>
<type>
<types>EnumRef.РежимыОчисткиФайлов</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>
@@ -2066,45 +2066,36 @@
Возврат Новый Массив;
КонецЕсли;
ДоступностьОбъектов = ДоступностьОбъектов();
Для Каждого ИмяТипа Из СтрРазделить(ВидыИзменяемыхОбъектов, ",", Ложь) Цикл
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяТипа);
ФильтруемыеРеквизиты = ФильтрРедактированияПоТипу(ОбъектМетаданных);
ЗакрытыеФункциональнымиОпциями = Новый ТаблицаЗначений;
ЗакрытыеФункциональнымиОпциями.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка"));
ЗакрытыеФункциональнымиОпциями = Новый Соответствие;
Для Каждого ОписаниеФО Из Метаданные.ФункциональныеОпции Цикл
Если СтрРазделить(ОписаниеФО.Хранение.ПолноеИмя(), ".")[0] = "Константа" Тогда
ЗначениеФО = ПолучитьФункциональнуюОпцию(ОписаниеФО.Имя);
Если ТипЗнч(ЗначениеФО) = Тип("Булево") И ЗначениеФО = Истина Тогда
Продолжить;
КонецЕсли;
Иначе
// Не фильтруем реквизиты, которые входят в параметризуемые функциональные опции.
Продолжить;
ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// массив из ОбъектМетаданныхРеквизит
Для Каждого Реквизит Из ОписаниеРеквизитов Цикл
Если ДоступностьОбъектов[Реквизит] = Ложь Тогда
ЗакрытыеФункциональнымиОпциями.Вставить(Реквизит.Имя, Истина);
КонецЕсли;
ОписаниеРеквизитов = ОбъектМетаданных.Реквизиты;// массив из ОбъектМетаданныхРеквизит
Для Каждого РеквизитОМ Из ОписаниеРеквизитов Цикл
Если ОписаниеФО.Состав.Содержит(РеквизитОМ) Тогда
НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить();
НоваяСтрока.ИмяРеквизита = РеквизитОМ.Имя;
КонецЕсли;
КонецЦикла;
ОписаниеТабличныхЧастей = ОбъектМетаданных.ТабличныеЧасти;// массив из ОбъектМетаданныхТабличнаяЧасть
Для Каждого ТабличнаяЧасть Из ОписаниеТабличныхЧастей Цикл
Если ОписаниеФО.Состав.Содержит(ТабличнаяЧасть) Тогда
НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить();
НоваяСтрока.ИмяРеквизита = ТабличнаяЧасть.Имя + ".*";
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗакрытыеФункциональнымиОпциями.Свернуть("ИмяРеквизита");
ОписаниеТабличныхЧастей = ОбъектМетаданных.ТабличныеЧасти;// массив из ОбъектМетаданныхТабличнаяЧасть
Для Каждого ТабличнаяЧасть Из ОписаниеТабличныхЧастей Цикл
Если ДоступностьОбъектов[ТабличнаяЧасть] = Ложь Тогда
ЗакрытыеФункциональнымиОпциями.Вставить(ТабличнаяЧасть.Имя + ".*", Истина);
Иначе
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Если ДоступностьОбъектов[Реквизит] = Ложь Тогда
ЗакрытыеФункциональнымиОпциями.Вставить(ТабличнаяЧасть.Имя + "." + Реквизит.Имя, Истина);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого РеквизитЗакрытыйФункциональнымиОпциями Из ЗакрытыеФункциональнымиОпциями Цикл
ФильтруемыеРеквизиты[РеквизитЗакрытыйФункциональнымиОпциями.ИмяРеквизита] = Истина;
ФильтруемыеРеквизиты.Вставить(РеквизитЗакрытыйФункциональнымиОпциями.Ключ, Истина);
КонецЦикла;
КонецЦикла;
@@ -2113,8 +2104,9 @@
Для Каждого Реквизит Из ФильтруемыеРеквизиты Цикл
Результат.Добавить(Реквизит.Ключ);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
@@ -4666,4 +4658,32 @@
КонецФункции
&НаСервере
Функция ДоступностьОбъектов()
ДоступностьОбъектов = Новый Соответствие;
Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл
Если Не Метаданные.Константы.Содержит(ФункциональнаяОпция.Хранение) Тогда
Продолжить;
КонецЕсли;
Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Новый Структура);
Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл
Если Элемент.Объект = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Значение = Истина Тогда
ДоступностьОбъектов.Вставить(Элемент.Объект, Истина);
Иначе
Если ДоступностьОбъектов[Элемент.Объект] = Неопределено Тогда
ДоступностьОбъектов.Вставить(Элемент.Объект, Ложь);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ДоступностьОбъектов;
КонецФункции
#КонецОбласти
@@ -391,7 +391,7 @@
ДатаНачала = Неопределено; // Дата
ДатаОкончания = Неопределено; // Дата
ДатыОтбораУказаны = ОтборЖурналаРегистрации.Свойство("ДатаНачала", ДатаНачала) И ОтборЖурналаРегистрации.Свойство("ДатаОкончания", ДатаОкончания)
И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ОтборЖурналаРегистрации.ДатаОкончания);
И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания);
Если ДатыОтбораУказаны И ДатаНачала > ДатаОкончания Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать");
@@ -6,35 +6,58 @@
<p>С помощью кнопки выберите, как будут загружаться данные: </p>
<ul><li>
<div><a href="#1">заполнение таблицы в программе</a>; </div>
</li><li>
<div><a href="#2">загрузка из внешнего файла</a>.</div></li></ul><h3><a name="#1">Заполнение таблицы</a></h3>
</li>
<li>
<div><a href="#2">загрузка из внешнего файла</a>.</div></li></ul><h3><a name="1">Заполнение таблицы</a></h3>
<ul><li>С помощью кнопки <strong>Заполнение таблицы</strong> (включена по умолчанию) можно перейти к вводу данных в таблицу для последующей загрузки в документ непосредственно в программе.
</li><li>Таблицу можно заполнить, скопировав данные в таблицу из внешнего файла через буфер обмена.
</li><li>В таблице имеются обязательные для заполнения колонки. Они перечисляются над таблицей.
</li><li>С помощью ссылки <strong>Изменить бланк</strong> можно открыть список полей таблицы для ввода и с помощью флажков изменить ее структуру. Необходимо учитывать, что поля, выделенные в таблице жирным шрифтом, являются обязательными для заполнения и трогать их нельзя.
<ul><li>Укажите с помощью флажков необходимые колонки. Можно настроить наименование колонок, их отображение и порядок следования для упрощения загрузки. </li></ul></li><li>После заполнения таблицы для перехода к <a href="#4">сопоставлению данных</a> нажмите <strong>Далее</strong>.</li></ul><h3><a name="#2">Загрузка из внешнего файла</a></h3>
</li>
<li>Таблицу можно заполнить, скопировав данные в таблицу из внешнего файла через буфер обмена.
</li>
<li>В таблице имеются обязательные для заполнения колонки. Они перечисляются над таблицей.
</li>
<li>С помощью ссылки <strong>Изменить бланк</strong> можно открыть список полей таблицы для ввода и с помощью флажков изменить ее структуру. Необходимо учитывать, что поля, выделенные в таблице жирным шрифтом, являются обязательными для заполнения и трогать их нельзя.
<ul><li>Укажите с помощью флажков необходимые колонки. Можно настроить наименование колонок, их отображение и порядок следования для упрощения загрузки. </li></ul></li>
<li>После заполнения таблицы для перехода к <a href="#4">сопоставлению данных</a> нажмите <strong>Далее</strong>.</li></ul><h3><a name="2">Загрузка из внешнего файла</a></h3>
<ul><li>Нажав кнопку <strong>Из внешнего файла</strong>, можно загрузить данные из ранее подготовленного файла, сохраненного на компьютере, или сохранить бланк для заполнения и заполнить данные позже.
</li><li>
</li>
<li>
<div style="MARGIN-RIGHT: 0px">С помощью кнопки <strong>Сохранить бланк для заполнения</strong> можно сохранить таблицу для ввода данных в файле выбранного формата. Необходимо учитывать, что в данном файле имеются колонки, обязательные для заполнения. Укажите путь к файлу на компьютере. Программа присваивает имя файлу по умолчанию.</div>
</li><li>Можно заполнить внешние файлы для загрузки в документы. Заполните файл по рекомендованным правилам (обязательные для заполнения поля выделены в таблице жирным шрифтом).
</li><li>С помощью кнопки <strong>Загрузить таблицу из файла</strong> можно загрузить данные из внешнего файла. Выберите путь к файлу на компьютере.</li></ul><h3><a name="#4">Сопоставление данных</a></h3>
</li>
<li>Можно заполнить внешние файлы для загрузки в документы. Заполните файл по рекомендованным правилам (обязательные для заполнения поля выделены в таблице жирным шрифтом).
</li>
<li>С помощью кнопки <strong>Загрузить таблицу из файла</strong> можно загрузить данные из внешнего файла. Выберите путь к файлу на компьютере.</li></ul><h3><a name="4">Сопоставление данных</a></h3>
<ul><li>После загрузки данных программа производит автоматическое сопоставление данных. Если автоматическое сопоставление не состоялось, то данные выводятся для сопоставления вручную.
</li><li>Для того чтобы просмотреть сопоставленные или несопоставленные данные, можно использовать отбор с помощью поля <strong>Показывать</strong>. Несопоставленные данные помечаются красным. С помощью соответствующей кнопки можно <strong>Разрешить неоднозначность</strong>.
</li><li>Для того чтобы вручную сопоставить данные, откройте соответствующий список программы, найдите в нем подходящее значение или введите новое, затем нажмите <strong>Выбрать</strong>.
</li><li>Кроме обязательных полей, сопоставляться могут также и необязательные. При загрузке поле можно сопоставить и включить в документ с помощью кнопки <strong>Выбрать из списка</strong>. Если нужного элемента в списке нет, то его можно <strong>Создать</strong> с помощью соответствующей кнопки.
</li><li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля.</li></ul><h2><a name="#3">Загрузка данных в произвольный список</a> программы (только для администратора)</h2>
</li>
<li>Для того чтобы просмотреть сопоставленные или несопоставленные данные, можно использовать отбор с помощью поля <strong>Показывать</strong>. Несопоставленные данные помечаются красным. </li>
<li>С помощью соответствующей кнопки можно <strong>Разрешить неоднозначность</strong>. Для этого в таблице выводятся совпадающие элементы. Необходимо выбрать один из них для загрузки.</li>
<li>Для того чтобы вручную сопоставить данные, откройте соответствующий список программы, найдите в нем подходящее значение или введите новое, затем нажмите <strong>Выбрать</strong>.
</li>
<li>Кроме обязательных полей, сопоставляться могут также и необязательные. При загрузке поле можно сопоставить и включить в документ с помощью кнопки <strong>Выбрать из списка</strong>. Если нужного элемента в списке нет, то его можно <strong>Создать</strong> с помощью соответствующей кнопки.
</li>
<li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля.</li></ul><h2><a name="3">Загрузка данных в произвольный список</a> программы (только для администратора)</h2>
<ul><li><strong>Загрузку данных из файла</strong> в произвольный список администратору можно произвести по соответствующей команде.
</li><li>В этом случае для загрузки данных можно выбрать один из списков программы. Можно загружать в списки контактную информацию, а также дополнительные реквизиты и сведения.
</li>
<li>В этом случае для загрузки данных можно выбрать один из списков программы. Можно загружать в списки контактную информацию, а также дополнительные реквизиты и сведения.
<ul><li>После выбора списка для загрузки данных нажмите кнопку <strong>Далее</strong>. Выберите с помощью кнопок, как будут загружаться данные:
<ul><li>Программа предлагает <a href="#1">таблицу для заполнения</a>.
</li><li>Также можно загрузить <a href="#2">данные из внешнего файла</a>. </li></ul></li></ul></li></ul><h3>Сопоставление данных (только для администратора)</h3>
</li>
<li>Также можно загрузить <a href="#2">данные из внешнего файла</a>. </li></ul></li></ul></li></ul><h3>Сопоставление данных (только для администратора)</h3>
<ul><li>Заполнив таблицу или скачав данные из файла, нажмите кнопку <strong>Далее</strong>. Необходимо провести сопоставление данных.
</li><li>Поведение программы при сопоставлении данных можно настроить:
</li>
<li>Поведение программы при сопоставлении данных можно настроить:
<ul><li>С помощью переключателя выбрать, как поступать с <strong>Сопоставленными</strong> элементами: <strong>Обновлять</strong> или <strong>Пропускать</strong> (по умолчанию).
</li><li>С помощью переключателя выбрать, как поступать с <strong>Несопоставленными</strong> элементами: <strong>Создавать</strong> (по умолчанию) или <strong>Пропускать</strong>.</li></ul></li><li>Данные будут автоматически сопоставлены, если соответствия не будет найдено, таблица выводится с предложением сопоставить данные.
<ul><li>В некоторых списках существует возможность автоматического создания несопоставленных данных. Такие данные помечаются надписью <strong>&lt;Новый&gt;</strong>. Для автоматического создания в списке выберите <strong>Создавать</strong> с помощью переключателя (выбрано по умолчанию).
</li><li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. </li></ul></li><li>После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля. Результаты загрузки выводятся на просмотр.
</li>
<li>С помощью переключателя выбрать, как поступать с <strong>Несопоставленными</strong> элементами: <strong>Создавать</strong> (по умолчанию) или <strong>Пропускать</strong>.</li></ul></li>
<li>Данные будут автоматически сопоставлены, если соответствия не будет найдено, таблица выводится с предложением сопоставить данные.
<ul><li>В некоторых списках существует возможность автоматического создания несопоставленных данных. Такие данные помечаются надписью <strong>&lt;Создан&gt;</strong>. Для автоматического создания в списке выберите <strong>Создавать</strong> с помощью переключателя (выбрано по умолчанию).
</li>
<li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. </li></ul></li>
<li>После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля. Результаты загрузки выводятся на просмотр.
<ul><li>С помощью поля <strong>Показывать</strong> можно вывести <strong>Все</strong>, <strong>Новые</strong>, <strong>Обновленные</strong> и <strong>Пропущенные</strong> элементы.
</li><li>Несколько выделенных строк <strong>Сохранить</strong> в файл, подкорректировать и позднее загрузить повторно.
</li><li>В списке можно изменить введенные элементы, если они не устраивают. Для изменения нескольких выделенных элементов нажмите кнопку <strong>Изменить реквизиты</strong>.
</li><li>При необходимости включите флажок <strong>Открыть справочник по кнопке "Готово"</strong>. </li></ul></li><li>Если в таблице все данные корректны, нажмите кнопку <strong>Готово</strong> для подтверждения. Если был включен флажок, открывается список с введенными элементами.</li></ul></body></html>
</li>
<li>Несколько выделенных строк можно <strong>Сохранить</strong> в файл, подкорректировать и позднее загрузить повторно.
</li>
<li>В списке можно изменить введенные элементы, если они не устраивают. Для изменения нескольких выделенных элементов нажмите кнопку <strong>Изменить реквизиты</strong>.
</li>
<li>При необходимости включите флажок <strong>Открыть справочник по кнопке "Готово"</strong>. </li></ul></li>
<li>Если в таблице все данные корректны, нажмите кнопку <strong>Готово</strong> для подтверждения. Если был включен флажок, открывается список с введенными элементами.</li></ul></body></html>
@@ -1595,7 +1595,7 @@
ИЛИ МодульУправлениеСвойствами.ИспользоватьДопСведения(ПустаяСсылкаНаОбъект) Тогда
СписокСвойств = МодульУправлениеСвойствами.СвойстваОбъекта(ПустаяСсылкаНаОбъект);
Для каждого Свойство Из СписокСвойств Цикл
Свойства.Вставить(Свойство.Наименование, Свойство);
Свойства.Вставить(Строка(Свойство), Свойство);
КонецЦикла;
КонецЕсли;
КонецЕсли;
@@ -673,10 +673,14 @@
Если Контекст.ЕстьПравоБезвозвратногоУдаления Тогда
Если Контекст.ТекущийВариантУдаления = "Пометка" Тогда
ТекстПодсказки = НСтр("ru = 'Выбранные элементы (%1) будут заменены на ""%2""
|и <a href = ""ПереключениеРежимаУдаления"">помечены на удаление</a>.'");
|и <a href = ""[Действие]"">помечены на удаление</a>.'");
ПараметрыСтроки = Новый Структура("Действие", "ПереключениеРежимаУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
Иначе
ТекстПодсказки = НСтр("ru = 'Выбранные элементы (%1) будут заменены на ""%2""
|и <a href = ""ПереключениеРежимаУдаления"">удалены безвозвратно</a>.'");
|и <a href = ""[Действие]"">удалены безвозвратно</a>.'");
ПараметрыСтроки = Новый Структура("Действие", "ПереключениеРежимаУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
КонецЕсли;
Иначе
ТекстПодсказки = НСтр("ru = 'Выбранные элементы (%1) будут заменены на ""%2""
@@ -832,11 +832,15 @@
Если ЕстьПравоБезвозвратногоУдаления Тогда
Если ТекущийВариантУдаления = "Пометка" Тогда
ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут <a href = ""ПереключениеРежимаУдаления"">помечены на удаление</a> и заменены во всех местах
ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут <a href = ""[Действие]"">помечены на удаление</a> и заменены во всех местах
|использования на ""%2"" (отмечен стрелкой).'");
ПараметрыСтроки = Новый Структура("Действие", "ПереключениеРежимаУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
Иначе
ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут <a href = ""ПереключениеРежимаУдаления"">удалены безвозвратно</a> и заменены во всех местах
ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут <a href = ""[Действие]"">удалены безвозвратно</a> и заменены во всех местах
|использования на ""%2"" (отмечен стрелкой).'");
ПараметрыСтроки = Новый Структура("Действие", "ПереключениеРежимаУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
КонецЕсли;
Иначе
ТекстПодсказки = НСтр("ru = 'Элементы (%1) будут помечены на удаление и заменены во всех местах
@@ -402,6 +402,12 @@
ЗапоминатьВыгруженные = Ложь;
ИначеЕсли ПКО.Владелец().Колонки.Найти("ОбъектСДвижениями") <> Неопределено
И ПКО.ОбъектСДвижениями = Истина Тогда
// Если объект выгружаем с движениями по регистрам - проводить не нужно
РежимЗаписи = "Запись";
КонецЕсли;
СсылкаНаИсточник = Неопределено;
@@ -5560,6 +5566,10 @@
НоваяСтрока.ПоляТаблицы = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока);
ИначеЕсли ИмяУзла = "ОбъектСДвижениями" Тогда
НоваяСтрока.ОбъектСДвижениями = одЗначениеЭлемента(ПравилаОбмена, ТипБулево);
ИначеЕсли (ИмяУзла = "Правило") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда
Прервать;
@@ -13379,6 +13389,8 @@
Колонки.Добавить("СтрокаПолейПоиска");
Колонки.Добавить("ОбъектСДвижениями", одОписаниеТипа("Булево"));
КонецПроцедуры
Функция СоздатьТаблицуВыгруженныхОбъектов()
@@ -19,7 +19,7 @@ TD {
<h3>Классификаторы и курсы валют</h3>
<p></p>
<table><tbody><tr><td colspan="2">
<ul><li><b>Обновление классификаторов</b> - переход к загрузке и <a href="../id5ef8446c-c380-4782-9297-9ccef9972174/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">обновлению классификаторов</a> банков, валют, стран мира, производственных календарей, а также других классификаторов . Обновление можно произвести на портале 1С:ИТС или из файла на компьютере.</li>
<ul><li><b>Обновление классификаторов</b> - переход к загрузке и <a href="../id5ef8446c-c380-4782-9297-9ccef9972174/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">обновлению классификаторов</a> банков, валют, стран мира, производственных календарей, а также других классификаторов. Обновление можно произвести на портале 1С:ИТС или из файла на компьютере.</li>
</ul></td>
</tr><tr><td colspan="2">
<ul><li><b>Автоматическое обновление классификаторов</b> - c помощью переключателя можно выбрать настройки:</li>
@@ -72,7 +72,9 @@ TD {
</li>
<li><strong>По заданному расписанию</strong> - при выборе этого значения становится доступной команда:
</li>
<li><strong>Настроить расписание</strong> - с помощью ссылки можно перейти к настройке расписания автоматической проверки обновлений.</li></ul></td></tr><tr><td>
<li><strong>Настроить расписание</strong> - с помощью ссылки можно перейти к <a href="v8help://mngbase/jobschedule.lf">настройке расписания</a> автоматической проверки обновлений.</li></ul></td></tr><tr><td>
<li><strong>Загружать и устанавливать исправления (патчи) автоматически</strong></li></td>
<td>Включите флажок, для того чтобы получать информацию, загружать и устанавливать доступные исправления (патчи) конфигурации в "тихом режиме" без участия пользователя. <br>При выборе становится доступной ссылка <b>Настроить расписание</b>, например <b>Каждый день, один раз в день</b>.<br><br></td></tr><tr><td>
<li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">Результаты обновления и дополнительная обработка данных</a></li></td>
<td>Сведения о ходе обновления версии программы, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td>
<li><strong>Детализировать ход обновления в журнале регистрации</strong></li></td>
@@ -29,9 +29,9 @@ TD {
<p><a name="СтандартныеПодсистемы.АнализЖурналаРегистрации"></a><a href="Report.АнализЖурналаРегистрации/Help">Отчеты по журналу регистрации</a>. </p>
<p>Отчеты для администрирования программы.</p></td></tr><tr><td>
<li><strong>Дополнительные</strong><strong> отчеты по администрированию</strong></li></td>
<td>Команды <a href="Catalog.ДополнительныеОтчетыИОбработки/Help">дополнительных отчетов</a>, подключенных к программе.</td></tr><tr><td>
<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных отчетов</a>, подключенных к программе.</td></tr><tr><td>
<li><strong>Дополнительные </strong><strong>обработки по администрированию</strong></li></td>
<td>Команды <a href="Catalog.ДополнительныеОтчетыИОбработки/Help">дополнительных обработок</a>, подключенных к программе.</td></tr></tbody></table><h3>Регламентные операции</h3>
<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных обработок</a>, подключенных к программе.</td></tr></tbody></table><h3>Регламентные операции</h3>
<p>В подразделе доступны команды по управлению регламентными операциями:</p>
<a name="СтандартныеПодсистемы.РегламентныеЗадания">
</a>
@@ -45,7 +45,8 @@ TD {
<td>Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность программы.</td></tr></tbody></table><h3>Резервное копирование и восстановление</h3>
<p>С целью уменьшения риска потери данных необходимо регулярно выполнять резервное копирование программы. Частота создания резервных копий зависит от интенсивности ввода новых данных.</p>
<a name="СтандартныеПодсистемы.РезервноеКопированиеИБ"></a>
<table><tbody><tr><td><a href="DataProcessor.РезервноеКопированиеИБ.Form.РезервноеКопированиеДанных/Help">Создание резервной копии</a> </td>
<table><tbody><tr><td>
<li><a href="DataProcessor.РезервноеКопированиеИБ.Form.РезервноеКопированиеДанных/Help">Создание резервной копии</a></li></td>
<td>Выполнение резервного копирования программы: прямо сейчас, через некоторое время или при завершении работы.</td></tr><tr><td>
<li><a href="DataProcessor.НастройкаРезервногоКопированияИБ/Help">Настройка резервного копирования</a></li></td>
<td>Настройка автоматического резервного копирования по расписанию, или отключение контроля резервного копирования, если оно выполняется сторонними средствами.</td></tr><tr><td>
@@ -73,7 +74,7 @@ TD {
<li><a href="DataProcessor.УстановкаОбновлений/Help">Установка обновлений и исправлений (патчей</a>)</li></td>
<td>Переход к установке обновлений программы или исправлений (патчей).</td>
</tr><tr><td>
<li>Установленные исправления (патчи)</li></td>
<li><a href="CommonForm.УстановленныеИсправления/Help">Установленные исправления (патчи)</a></li></td>
<td>Переход к просмотру списка установленных в программе исправлений (патчей).</td></tr><tr><td>
<li><a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений программы</a></li></td>
<td>Просмотр списка изменений в установленной версии программы и рекомендаций по обновлению программы.</td></tr><tr><td>
@@ -7,8 +7,9 @@ TD {
</style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>В данной панели осуществляется настройка основных параметров программы.</p>
<ul><li><strong>Заголовок программы</strong> - введите текст, который будет отображаться в заголовке окна программы.
</li>
<li><strong>Часовой пояс</strong> - часовой пояс, в котором ведется учет в программе. Все даты документов и других данных в программе хранятся в этом часовом поясе.
</li></ul><h3>Региональные настройки</h3>
<div>С помощью ссылки <b>Региональные настройки</b> можно указать:</div>
<ul><li><strong>Часовой пояс</strong> - часовой пояс, в котором ведется учет в программе. Все даты документов и других данных в программе хранятся в этом часовом поясе.
</li>
<li><strong>Время текущего сеанса</strong> - с помощью этой команды можно узнать, насколько время клиента отличается от времени сервера с поправкой на часовой пояс.</li></ul><h3>Публикация информационной базы</h3>
<ul><li>
@@ -53,5 +54,11 @@ TD {
<a name="СтандартныеПодсистемы.ЭлектроннаяОблачнаяПодпись"></a>
<li><b>Использовать сервис облачной подписи</b> - включите флажок, для того чтобы разрешить использовать облачную электронную подпись и для операций криптографии сервисы облачной подписи. После этого в списке <b>Настройки электронной подписи и шифрования</b> можно добавить учетные записи облачной подписи, а также становятся доступными команды:</li>
<li><a href="DataProcessor.УправлениеПодключениемDSS.Form.СписокЭкземпляровСервераDSS/Help">Серверы облачной подписи</a> - переход к настройке серверов облачной подписи.</li>
<li><a href="DataProcessor.УправлениеПодключениемDSS.Form.СписокУчетныхЗаписей/Help">Учетные записи облачной подписи</a> - настройка учетных записей облачной подписи, используемых для криптоопераций.</li></ul><h3>См. также: </h3>
<li><a href="DataProcessor.УправлениеПодключениемDSS.Form.СписокУчетныхЗаписей/Help">Учетные записи облачной подписи</a> - настройка учетных записей облачной подписи, используемых для криптоопераций.</li></ul><h3>Удаление помеченных объектов</h3>
<div>
<ul><li><b>Автоматически удалять помеченные</b> - включите флажок, после этого становится доступной ссылка:</li>
<li><b>Настроить расписание</b> - перейдите по ссылке, для того чтобы настроить <a href="v8help://mngbase/jobschedule.lf">расписание</a> автоматического удаления помеченных объектов с помощью регламентного задания;</li>
<a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов">
</a><li><a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"></a><a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">Посмотреть помеченные на удаление</a> - переход к окончательному удалению тех объектов в программе, которым была присвоена пометка на удаление. Можно также настроить расписание автоматического удаления помеченных объектов.</li></ul></div>
<h3>См. также: </h3>
<ul><li><a href="DataProcessor.ПанельАдминистрированияБСП/Help">Настройки программы</a>.</li></ul></body></html>
@@ -10,7 +10,9 @@ TD {
</a>
<li><a name="СтандартныеПодсистемы.Печать"></a><a href="InformationRegister.ПользовательскиеМакетыПечати/Help">Макеты печатных форм</a> - переход к списку макетов для настройки печатных форм, формируемых из программы.
</li>
<li><b>Языки печатных форм</b> - Иногда бывает необходимо, чтобы пользователь, работающий на одном языке, мог при этом сформировать печатную форму на другом языке, например, напечатать документы для иностранных контрагентов. Перейдя по ссылке, можно выбрать несколько других языков для печатных форм, которые будут использоваться параллельно с основным при печати. После этого становится доступным:</li>
<li>
<a name="СтандартныеПодсистемы.Мультиязычность"></a><a href="Catalog.ЯзыкиПечатныхФорм/Help">Языки печатных форм</a> - Иногда бывает необходимо, чтобы пользователь, работающий на одном языке, мог при этом сформировать печатную форму на другом языке, например, напечатать документы для иностранных контрагентов. Перейдя по ссылке, можно выбрать несколько других языков для печатных форм, которые будут использоваться параллельно с основным при печати. После этого становится доступным:</li>
<li><b>Перевод текста с помощью внешнего сервиса</b> - если включен вывод печатных форм на другом языке, с помощью флажка можно включить возможность автоматического перевода текста при редактировании макетов печатных форм и вводе реквизитов на выбранных языках.</li>
<li><a href="CommonForm.НастройкаКомандПечати/Help">Подменю "Печать"</a> - переход к настройке команд подменю <strong>Печать</strong>.</li><a name="СтандартныеПодсистемы.ВариантыОтчетов">
</a>
@@ -1235,9 +1235,13 @@
Если ЕстьПодсистемаУдаленияПомеченных Тогда
Если СпособУдаления = "Пометка" Тогда
ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут <a href = ""СпособУдаления"">помечены на удаление</a> и заменены на оригиналы (отмечены стрелкой).'");
ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут <a href = ""[Действие]"">помечены на удаление</a> и заменены на оригиналы (отмечены стрелкой).'");
ПараметрыСтроки = Новый Структура("Действие", "СпособУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
Иначе
ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут <a href = ""СпособУдаления"">безвозвратно удалены</a> и заменены на оригиналы (отмечены стрелкой).'");
ТекстПодсказки = НСтр("ru = 'Выбранные элементы будут <a href = ""[Действие]"">безвозвратно удалены</a> и заменены на оригиналы (отмечены стрелкой).'");
ПараметрыСтроки = Новый Структура("Действие", "СпособУдаления");
ТекстПодсказки = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПодсказки, ПараметрыСтроки);
КонецЕсли;
Иначе
@@ -66,7 +66,7 @@
УстановитьДоступностьКомандСпискаЭП();
УстановитьДоступностьКомандСпискаШифрования();
ПрочитатьСертификатыПодписей();
РаботаСФайламиСлужебныйКлиент.ПрочитатьСертификатыПодписей(ЭтотОбъект);
ОтображатьВкладкиДополнительныхДанных();
КонецПроцедуры
@@ -1483,146 +1483,6 @@
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьСертификатыПодписей()
Если ЭлектронныеПодписи.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
Если МодульЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() Тогда
Возврат;
КонецЕсли;
НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеПодключенияРасширения", ЭтотОбъект, Контекст));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейПослеПодключенияРасширения(Подключено, Контекст) Экспорт
Если Не Подключено Тогда
Возврат;
КонецЕсли;
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
МодульЭлектроннаяПодписьКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"ПолучениеСертификатов", Ложь);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда
Возврат;
КонецЕсли;
Контекст.Вставить("Индекс", -1);
Контекст.Вставить("МенеджерКриптографии", Результат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
//
// Параметры:
// Контекст - Структура - контекст операции.
//
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклНачало(Контекст)
Если ЭлектронныеПодписи.Количество() <= Контекст.Индекс + 1 Тогда
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
Контекст.Вставить("СтрокаТаблицы", ЭлектронныеПодписи[Контекст.Индекс]);
Если ЗначениеЗаполнено(Контекст.СтрокаТаблицы.Отпечаток) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
// Подпись не была прочитана при записи объекта.
Подпись = ПолучитьИзВременногоХранилища(Контекст.СтрокаТаблицы.АдресПодписи);
Если Не ЗначениеЗаполнено(Подпись) Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект),
Подпись);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиПолученияСертификатовИзПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
//
// Параметры:
// Контекст - Структура:
// * Сертификат - СертификатКриптографии
//
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Экспорт
Если Сертификаты.Количество() = 0 Тогда
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.Вставить("Сертификат", Сертификаты[0]);
Контекст.Сертификат.НачатьВыгрузку(Новый ОписаниеОповещения(
"ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата", ЭтотОбъект, Контекст,
"ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата", ЭтотОбъект));
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеОшибкиВыгрузкиСертификата(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ПрочитатьСертификатыПодписей.
&НаКлиенте
Процедура ПрочитатьСертификатыПодписейЦиклПослеВыгрузкиСертификата(ДанныеСертификата, Контекст) Экспорт
СтрокаТаблицы = Контекст.СтрокаТаблицы;
СтрокаТаблицы.Отпечаток = Base64Строка(Контекст.Сертификат.Отпечаток);
СтрокаТаблицы.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификата, УникальныйИдентификатор);
СтрокаТаблицы.КомуВыданСертификат = Контекст.МодульЭлектроннаяПодпись.ПредставлениеСубъекта(Контекст.Сертификат);
ПрочитатьСертификатыПодписейЦиклНачало(Контекст);
КонецПроцедуры
&НаКлиенте
Функция ЭтоНовый()
@@ -23,7 +23,7 @@
</li>
<li>Также можно <img src="StdPicture.CreateListItem"></img> <strong>Добавить</strong> дополнительные поля для ввода других предопределенных частей адреса, таких как <strong>Строение</strong>, <strong>Литера</strong>, <strong>Сооружение</strong>, <strong>Участок</strong>, <strong>Офис</strong>, <strong>Бокс</strong>, <strong>Помещение</strong>, <strong>Комната, А/я</strong>.
</li>
<li>Для ввода номера дома нажмите кнопку <img src="StdPicture.InputFieldSelect" width="12" height="12"></img>, в окне <strong>Выбор дома</strong> выводится список всех возможных домов и строений для введенного адреса.Дополнительные части адреса, например, корпус, также выбираются из списка.
<li>Для ввода номера дома нажмите кнопку <img src="StdPicture.InputFieldSelect" width="12" height="12"></img>, в окне <strong>Выбор дома</strong> выводится список всех возможных домов и строений для введенного адреса. Дополнительные части адреса, например, корпус, также выбираются из списка.
</li>
<li>Поле <strong>Представление адреса</strong> при заполнении адреса по шаблону недоступно, заполняется программой автоматически по мере заполнения полей адреса. </li></ul><h3>Примеры заполнения адреса</h3>
<ul><li>Для ввода адреса <b>"Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345"</b> необходимо:
@@ -663,6 +663,10 @@
</items>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<handlers>
<event>ChoiceProcessing</event>
<name>ОбработкаВыбора</name>
</handlers>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
@@ -6,12 +6,17 @@
<div>Перед заполнением адреса с помощью флажка можно выбрать:</div>
<ul><li>
<div><strong>Муниципальное деление</strong>;</div>
</li><li>
</li>
<li>
<div><strong>Административно-территориальное деление.</strong></div></li></ul></li></ul><h3>Ввод населенного пункта</h3>
<ul><li>В поле <strong>Субъект РФ</strong> необходимо ввести наименование субъекта Российской Федерации, к которому относится населенный пункт.
</li><li>Если адресный классификатор для этого субъекта Российской Федерации не заполнен, будет выведено сообщение.
</li><li>Поля <strong>Округ</strong>, <strong>Район</strong>, <strong>Город</strong>, <strong>Внутр.район</strong>, <strong>Нас.пункт</strong> и т.д. предназначены для ввода частей адреса. Поля, которые должны быть заполнены, зависят от адреса. Например, в некоторых адресах может не быть района, в других - города или населенного пункта. Если выбрано устаревшее наименование, программа выводит сообщение. Подтвердите свой выбор, нажав кнопку <strong>Да</strong> для продолжения ввода. Для того чтобы программа не показывала в списках устаревшие адреса, при настройке данного <a href="Catalog.ВидыКонтактнойИнформации/Help">вида контактной информации</a> включите флажок <strong>Скрывать неактуальные адреса</strong>.
</li><li>После окончания ввода города или населенного пункта нажмите <strong>ОК</strong> для продолжения ввода адреса.
</li><li>Если для региона адреса загружен адресный классификатор, то по мере набора в каждом поле будут предлагаться варианты соответствующей части адреса с учетом полей, заполненных ранее.</li></ul><h3>См. также:</h3>
<ul><li>В поле <strong>Регион</strong> необходимо ввести наименование субъекта Российской Федерации, к которому относится населенный пункт.
</li>
<li>Если адресный классификатор для этого субъекта Российской Федерации не заполнен, будет выведено сообщение.
</li>
<li>Поля <strong>Округ</strong>, <strong>Район</strong>, <strong>Город</strong>, <strong>Внутр.район</strong>, <strong>Нас.пункт</strong> и т.д. предназначены для ввода частей адреса. Поля, которые должны быть заполнены, зависят от адреса. Например, в некоторых адресах может не быть района, в других - города или населенного пункта.</li>
<li>После окончания ввода города или населенного пункта нажмите <strong>ОК</strong> для продолжения ввода адреса.
</li>
<li>Если для региона адреса загружен адресный классификатор, то по мере набора в каждом поле будут предлагаться варианты соответствующей части адреса с учетом полей, заполненных ранее.</li></ul><h3>См. также:</h3>
<ul><li><a href="DataProcessor.РасширенныйВводКонтактнойИнформации/Help">Ввод контактной информации</a>;
</li><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
</li>
<li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -79,6 +79,8 @@
ТипАдреса = Параметры.ТипАдреса;
КонецЕсли;
Элементы.ВнутригородскойРайон.Видимость = ЗначениеЗаполнено(ВнутригородскойРайон);
КонецПроцедуры
&НаКлиенте
@@ -3,4 +3,5 @@
<p>Открывается из <a href="Catalog.ВидыКонтактнойИнформации.Form.ФормаЭлемента/Help">окна настройки</a> адреса в списке <a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a> по команде <strong>Дополнительные настройки адреса</strong>.</p>
<p>При включенном флажке <strong>Только российский адрес</strong> становятся активными дополнительные флажки:</p>
<ul><li><strong>Запрещать ввод некорректного адреса</strong> - если флажок включен, то при некорректном вводе российского адреса невозможно будет ввести данные в программу (имеет смысл только при использовании шаблонов ввода и адресного классификатора). Данные проверяются по ФИАС.
</li><li><strong>Указывать ОКТМО</strong> - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО.</li></ul></body></html>
</li>
<li><strong>Указывать ОКТМО</strong> - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО.</li></ul></body></html>
@@ -10,7 +10,7 @@
// Информация о текущем выполняемом фоновом задании
&НаКлиенте
Перем ВыполняемаяОперация;// см. Неопределено, ДлительныеОперации.ВыполнитьФункцию
Перем ВыполняемаяОперация;// Неопределено, см. ДлительныеОперации.ВыполнитьФункцию
&НаКлиенте
Перем ПредставлениеОперации;// Строка
@@ -1457,7 +1457,7 @@
НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина;
НастройкиОжидания.ОповещениеОПрогрессеВыполнения = Новый ОписаниеОповещения("ПриОбновленииПрогрессаФоновогоЗадания", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ВыполняемаяОперация, Обработчик, НастройкиОжидания);
Если ВыполняемаяОперация <> Неопределено Тогда
Если ВыполняемаяОперация <> Неопределено И ВыполняемаяОперация.Статус = "Выполняется" Тогда
ПоказатьДиалогПередЗакрытием = Истина;
КонецЕсли;
КонецПроцедуры
@@ -286,12 +286,25 @@
МестаИспользования = МестаИспользованияЭлементовПакета(ПараметрыУдаления, Пакет);
ОсновнойИПодчиненныеОбъекты = Новый Массив;
СсылкиНаУдаляемыеОбъекты = Новый Массив;
Для Каждого Элемент Из Пакет Цикл
ОсновнойИПодчиненныеОбъекты.Добавить(Элемент);
СсылкиНаУдаляемыеОбъекты.Добавить(Элемент.УдаляемыйСсылка);
Если НЕ Элемент.ЭтоОсновнойОбъект Тогда
Продолжить;
КонецЕсли;
СтандартнаяОбработка = Истина;
Контекст = Новый Структура;
ПередУдалениемГруппыОбъектов(
Контекст,
ОбщегоНазначения.ФиксированныеДанные(СсылкиНаУдаляемыеОбъекты),
СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Продолжить;
КонецЕсли;
НельзяУдалятьОсновнойОбъект = Ложь;
НеудаленныеЭлементы = Новый Массив;
НачатьТранзакцию();
@@ -342,8 +355,10 @@
Если НЕ НельзяУдалятьОсновнойОбъект Тогда
ЗафиксироватьТранзакцию();
ПослеУдаленияГруппыОбъектов(Контекст, Истина);
Иначе
ОтменитьТранзакцию();
ПослеУдаленияГруппыОбъектов(Контекст, Ложь);
КонецЕсли;
Исключение
@@ -352,6 +367,7 @@
КонецПопытки;
ОсновнойИПодчиненныеОбъекты.Очистить();
СсылкиНаУдаляемыеОбъекты.Очистить();
КонецЦикла;
@@ -361,19 +377,27 @@
Возврат РезультатОбработкиПакета;
КонецФункции
// см. УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов
Процедура ПередУдалениемГруппыОбъектов(Контекст, СвязанныеОбъекты, СтандартнаяОбработка)
ИнтеграцияПодсистемБСП.ПередУдалениемГруппыОбъектов(Контекст, СвязанныеОбъекты, СтандартнаяОбработка);
КонецПроцедуры
// см. УдалениеПомеченныхОбъектовПереопределяемый.ПослеУдаленияГруппыОбъектов
Процедура ПослеУдаленияГруппыОбъектов(Контекст, Успешно)
ИнтеграцияПодсистемБСП.ПослеУдаленияГруппыОбъектов(Контекст, Успешно);
КонецПроцедуры
Функция РезультатУдаленияЭлемента(Знач Элемент)
Перем Результат;
Результат = Новый Структура();
Результат.Вставить("УдаляемыйСсылка", Элемент.УдаляемыйСсылка);
Результат.Вставить("Код", КодыРезультатаУдаления().Успешно);
Результат.Вставить("МестаИспользования", МестаИспользования());
Результат.Вставить("Сообщения", Новый ФиксированныйМассив(Новый Массив));
Результат.Вставить("ЭтоОсновнойОбъект", Элемент.ЭтоОсновнойОбъект);
Результат.Вставить("ИнформацияОбОшибке");
Возврат Результат;
КонецФункции
#Область ОчисткаСсылокНаУдаляемыеОбъекты
@@ -765,9 +789,27 @@
Возврат Результат;
КонецФункции
// Обработать пакет в одной транзакции.
//
// Параметры:
// ПараметрыУдаления - см. ПараметрыУдаления
// Пакет - см. ПакетУдаляемыхОбъектов
//
// Возвращаемое значение:
// см. РезультатОбработки
//
Функция ОбработатьПакетВОднойТранзакции(ПараметрыУдаления, Пакет)
Результат = РезультатОбработки();
СтандартнаяОбработка = Истина;
Контекст = Новый Структура;
УдаляемыеОбъекты = Пакет.ВыгрузитьКолонку("УдаляемыйСсылка");
ПередУдалениемГруппыОбъектов(Контекст, УдаляемыеОбъекты, СтандартнаяОбработка);
Если НЕ СтандартнаяОбработка Тогда
Возврат РезультатОбработки();
КонецЕсли;
НачатьТранзакцию();
Попытка
Для Каждого ЭлементПакета Из Пакет Цикл
@@ -784,11 +826,13 @@
КонецЦикла;
ЗафиксироватьТранзакцию();
ПослеУдаленияГруппыОбъектов(Контекст, Истина);
Исключение
// Не смогли удалить ни один объект
// Будем отображать ошибку, произошедшую на предыдущем этапе удаления
ОтменитьТранзакцию();
Результат.НеудаленныеОбъекты = Пакет.Скопировать();
ПослеУдаленияГруппыОбъектов(Контекст, Истина);
КонецПопытки;
Возврат Результат;
@@ -1532,6 +1576,10 @@
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
УдаляемыеОбъекты, ПодчиненныеОбъекты);
Контекст = Новый Структура;
СтандартнаяОбработка = Истина;
ПередУдалениемГруппыОбъектов(Контекст, УдаляемыеОбъекты, СтандартнаяОбработка);
Пока УдаляемыеОбъекты.Количество() > 0 Цикл
ПрепятствующиеУдалению = Новый ТаблицаЗначений;
@@ -1553,6 +1601,8 @@
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + Сообщение.Текст;
КонецЦикла;
ПослеУдаленияГруппыОбъектов(Контекст, Ложь);
ВызватьИсключение ОписаниеОшибки;
КонецПопытки;
@@ -1569,6 +1619,12 @@
ВсеСвязиВИсключениях = Истина;
Если ПрепятствующиеУдалению.Количество() = 0 Тогда
ПослеУдаленияГруппыОбъектов(Контекст, Истина);
Иначе
ПослеУдаленияГруппыОбъектов(Контекст, Ложь);
КонецЕсли;
// Анализ причин не удаления (мест использования помеченных на удаление).
Для Каждого СтрокаТаблицы Из ПрепятствующиеУдалению Цикл
// Проверка исключающих правил.
@@ -1604,6 +1660,7 @@
Если ВсеСвязиВИсключениях Тогда
УстановитьПривилегированныйРежим(Истина);
УдалитьОбъекты(УдаляемыеОбъекты, Ложь);
ПослеУдаленияГруппыОбъектов(Контекст, Истина);
УстановитьПривилегированныйРежим(Ложь);
Прервать; // Выход из цикла.
КонецЕсли;
@@ -1,6 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>Предназначена для задания параметров перестроения использования агрегатов и получения списка оптимальных агрегатов.</p>
<ul><li>
<div><strong>Максимальный относительный размер</strong> - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если параметр неуказан или равен нулю, то нет ограничения размера агрегатов.</div>
</li><li>
<div><strong>Максимальный относительный размер</strong> - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если параметр не указан или равен нулю, то нет ограничения размера агрегатов.</div>
</li>
<li>
<div><strong>Минимальный эффект от перестроения</strong> - процент, на который необходимо увеличить эффект старой сети при перестроении, если новая сеть увеличивает эффект на <strong>Минимальный эффект от перестроения %</strong>, то метод реально перестраивает сеть. Если параметр не указан или равен нулю, то нет требований к эффекту. Данный параметр недоступен для получения списка оптимальных агрегатов.</div></li></ul></body></html>
@@ -5,26 +5,31 @@
<p>Открывается по соответствующей команде в разделе <strong>Администрирование - Обслуживание - Регламентные операции</strong>.</p>
<p>Управление итогами и агрегатами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:</p>
<ul><li><strong><a href="#Simple">Часто используемые возможности</a></strong> - режим предоставляет простые средства для выполнения наиболее часто используемых действий с итогами регистров. Позволяет "одним нажатием" выполнить наиболее частые действия, возникающие при обслуживании программы.
</li><li><strong><a href="#Full">Полные возможности</a></strong> - предоставляет полный доступ к возможностям управления итогами и агрегатами программы. Режим позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.</li></ul><p>Для переключения режимов служит ссылка в правом нижнем углу окна. Программа запоминает режим открытия окна.</p>
</li>
<li><strong><a href="#Full">Полные возможности</a></strong> - предоставляет полный доступ к возможностям управления итогами и агрегатами программы. Режим позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.</li></ul><p>Для переключения режимов служит ссылка в правом нижнем углу окна. Программа запоминает режим открытия окна.</p>
<p>Некоторые операции с регистрами и агрегатами можно выполнять по заданному расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентных заданий</a>.</p>
<h2><a name="#Simple">Часто используемые возможности</a></h2>
<h2><a name="Simple">Часто используемые возможности</a></h2>
<h3>Операции с итогами</h3>
<ul><li>
<div><strong>Установить период рассчитанных итогов</strong> - для ускорения работы программы выполняет установку периода рассчитанных итогов для всех регистров накопления и бухгалтерии с включенными итогами. Для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца. Команду можно использовать в начале каждого месяца для повышения производительности регистров.</div>
</li><li>
</li>
<li>
<div><strong>Включить использование итогов</strong> - включает использование итогов для всех регистров, у которых этот режим выключен (например, в результате аварийного завершения какой-либо процедуры, отключающей использование итогов).</div></li></ul><h3>Операции с агрегатами</h3>
<ul><li>
<div><strong>Перестроить и заполнить</strong> - для всех оборотных регистров накопления, для которых включен режим агрегатов и установлено их использование, выполняет операцию перестроения использования агрегатов и выполняет заполнение агрегатов. Операция может выполняться продолжительное время. Данную операцию, как правило, нужно выполнять периодически, для этого можно воспользоваться регламентным заданием.</div>
</li><li>
</li>
<li>
<div><strong>Получить оптимальные агрегаты</strong> - выполняет получение списка оптимальных агрегатов для всех оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты. Будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван именем соответствующего регистра. Так, для регистра <strong>Продажи</strong> файл будет называться <strong>Продажи.xml</strong>. Файлы используются для загрузки и создания оптимальных агрегатов в Конфигураторе. При загрузке оптимальных агрегатов может возникнуть ситуация, когда необходимо будет изменить список оптимальных агрегатов, а для этого потребуется снять с поддержки конфигурацию. Операция не является регулярной. Данная операция наиболее ресурсоемкая и продолжительная, поэтому рекомендуется выполнять ее в случаях, когда с программой не работают другие пользователи. </div>
<ul><li>
<div>Выполнение расчета оптимальных агрегатов может потребоваться в следующих случаях:</div>
<ul><li>
<div>существенное падение скорости формирования отчетов на текущем списке агрегатов;</div>
</li><li>
</li>
<li>
<div>существенное изменение характера хранимых данных в программе;</div>
</li><li>
<div>существенное изменение характера отчетов, которые необходимы пользователям.</div></li></ul></li></ul></li></ul><h2><a name="#Full">Полные возможности</a></h2>
</li>
<li>
<div>существенное изменение характера отчетов, которые необходимы пользователям.</div></li></ul></li></ul></li></ul><h2><a name="Full">Полные возможности</a></h2>
<p>Режим позволяет получить доступ ко всем инструментам администрирования итогов регистров (вкладка <strong>Итоги</strong>) и агрегатов (вкладка <strong>Агрегаты</strong>). В режиме полных возможностей доступен режим множественного выделения. Любое действие применяется ко всем выделенным объектам, либо к тому, на котором установлен курсор.</p>
<p>Список показывает текущее состояние регистров программы.</p>
<h3>Итоги</h3>
@@ -33,41 +38,59 @@
<p>Список показывает текущее состояние регистров программы.</p>
<p>В списке выводится:</p>
<ul><li><strong>Итоги</strong> - флажок установлен, если для регистра ведутся итоги, отсутствие флажка означает, что итоги по регистру не рассчитываются;
</li><li><strong>Регистр и режим использования</strong> - наименование регистра и, в виде подсказки, режим работы регистра: <strong>Просто итоговый регистр</strong> (когда у регистра есть остатки), <strong>Итоги</strong> или <strong>Агрегаты</strong> (когда у регистра есть только обороты);
</li><li><strong>Период</strong> - дата, по которую рассчитаны итоги регистра (для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца);
</li><li><strong>Текущие</strong> - наличие флажка означает, что для регистра рассчитываются не только общие итоги на указанную дату, но еще и оперативные итоги на дату последнего движения, отсутствие флажка - что оперативные итоги по регистру не рассчитываются. Этот режим имеет смысл применять для регистров, движения которых анализируются в оперативном учете перед проведением документов;
</li><li><strong>Разделение</strong> - наличие флажка означает, что для регистра задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр.</li></ul><p>Серым цветом отмечены те режимы, которые невозможно изменить при текущем состоянии программы. Переключать режимы можно на вкладке <strong>Агрегаты</strong>.</p>
</li>
<li><strong>Регистр и режим использования</strong> - наименование регистра и, в виде подсказки, режим работы регистра: <strong>Просто итоговый регистр</strong> (когда у регистра есть остатки), <strong>Итоги</strong> или <strong>Агрегаты</strong> (когда у регистра есть только обороты);
</li>
<li><strong>Период</strong> - дата, по которую рассчитаны итоги регистра (для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца);
</li>
<li><strong>Текущие</strong> - наличие флажка означает, что для регистра рассчитываются не только общие итоги на указанную дату, но еще и оперативные итоги на дату последнего движения, отсутствие флажка - что оперативные итоги по регистру не рассчитываются. Этот режим имеет смысл применять для регистров, движения которых анализируются в оперативном учете перед проведением документов;
</li>
<li><strong>Разделение</strong> - наличие флажка означает, что для регистра задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр.</li></ul><p>Серым цветом отмечены те режимы, которые невозможно изменить при текущем состоянии программы. Переключать режимы можно на вкладке <strong>Агрегаты</strong>.</p>
<p>На данной вкладке можно выполнять следующие операции:</p>
<ul><li>
<div>с помощью соответствующей кнопки <strong>Обновить</strong> информацию о состоянии итогов;</div>
</li><li>
</li>
<li>
<div>с помощью кнопки <strong>Итоги</strong> - включение и выключение использования итогов,</div>
</li><li>
</li>
<li>
<div>с помощью кнопки <strong>Текущие итоги</strong> - включение и выключение использования текущих итогов,</div>
</li><li>
</li>
<li>
<div>с помощью соответствующей кнопки - включение и выключение <strong>Разделения итогов</strong>,</div>
</li><li>
</li>
<li>
<div>с помощью соответствующей кнопки <strong>Установить</strong> выбранный <strong>период</strong> рассчитанных <strong>итогов</strong>,</div>
</li><li>
</li>
<li>
<div>С помощью кнопки <strong>Пересчет</strong> - пересчитать итоги, пересчитать текущие итоги, пересчитать итоги за выбранный период.</div></li></ul><h3>Агрегаты</h3>
<ul><li>На вкладке в верхнем списке содержится перечень оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты, а в нижнем списке - перечень этих агрегатов. В списке агрегатов содержится признак использования агрегата и статистическая информация о нем.
</li><li>В колонке <strong>Регистр</strong> кроме наименования регистра выводится информация о режиме использования регистра: <strong>Используются данные итогов</strong> или <strong>Используются данные агрегатов</strong>.
</li><li>В список попадают только те оборотные регистры накопления, у которых для текущего пользователя установлено право <strong>Управление итогами</strong> и в Конфигураторе заданы агрегаты.</li></ul><p>На данной вкладке можно выполнять следующие операции:</p>
</li>
<li>В колонке <strong>Регистр</strong> кроме наименования регистра выводится информация о режиме использования регистра: <strong>Используются данные итогов</strong> или <strong>Используются данные агрегатов</strong>.
</li>
<li>В список попадают только те оборотные регистры накопления, у которых для текущего пользователя установлено право <strong>Управление итогами</strong> и в Конфигураторе заданы агрегаты.</li></ul><p>На данной вкладке можно выполнять следующие операции:</p>
<ul><li>
<div>установка <strong>Режима</strong> использования регистра: итоги или агрегаты,</div>
</li><li>
</li>
<li>
<div>включение и выключение <strong>Использования</strong> агрегатов,</div>
</li><li>
</li>
<li>
<div>С помощью кнопки <strong>Перестроить</strong> выполнить перестроение использования агрегатов,</div>
<ul><li>
<div>Для этого задайте <a href="DataProcessor.УправлениеИтогамиИАгрегатами.Form.ФормаПараметровПерестроения/Help">параметры перестроения</a>.</div></li></ul></li><li>
<div>Для этого задайте <a href="DataProcessor.УправлениеИтогамиИАгрегатами.Form.ФормаПараметровПерестроения/Help">параметры перестроения</a>.</div></li></ul></li>
<li>
<div>С помощью кнопки <strong>Обновить</strong> заполнить агрегаты,</div>
</li><li>
</li>
<li>
<div>С помощью соответствующей кнопки <strong>Очистить</strong> агрегаты,</div>
</li><li>
<div>С помощью команды <strong>Оптимальные</strong> выполнить расчет списка оптимальных агрегатов. Для этого необходимо задать <a href="DataProcessor.УправлениеИтогамиИАгрегатами.Form.ФормаПараметровПерестроения/Help">параметр расчета оптимальных агрегатов</a>. После этого будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван идентификатором соответствующего регистра. Так, для регистра <strong>Продажи</strong> файл будет называться <strong>Продажи.xml</strong>. После выполнения операции, в списке регистров жирным шрифтом будут выделены те регистры, для которых необходимо обновить список агрегатов на рассчитанные оптимальные агрегаты. Обновление необходимо выполнять в Конфигураторе.</div>
</li>
<li>
<div>С помощью кнопки <strong>Оптимальные</strong> выполнить расчет списка оптимальных агрегатов. Для этого необходимо задать <a href="DataProcessor.УправлениеИтогамиИАгрегатами.Form.ФормаПараметровПерестроения/Help">параметр расчета оптимальных агрегатов</a>. После этого будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван идентификатором соответствующего регистра. Так, для регистра <strong>Продажи</strong> файл будет называться <strong>Продажи.xml</strong>. После выполнения операции, в списке регистров жирным шрифтом будут выделены те регистры, для которых необходимо обновить список агрегатов на рассчитанные оптимальные агрегаты. Обновление необходимо выполнять в Конфигураторе.</div>
<ul><li>
<div>Задайте <strong>Параметр расчета оптимальных агрегатов</strong>.</div></li></ul></li><li>
<div>Задайте <strong>Параметр расчета оптимальных агрегатов</strong>.</div></li></ul></li>
<li>С помощью кнопки <b>Выделить все</b> можно сделать активными все строки в списке, для того чтобы затем выполнить над ними предусмотренные остальными кнопками операции.</li>
<li>
<div>С помощью кнопки <img src="StdPicture.Refresh"></img> или клавиши <strong>F5</strong> можно <strong>Обновить</strong> информацию об агрегатах.</div></li></ul><p>В нижней части окна отображается список агрегатов регистра, на котором установлен курсор в верхнем списке.</p>
<h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -3,8 +3,12 @@
<p>Открывается с помощью ссылки <strong>Установка обновлений и исправлений (патчей)</strong> раздела <strong>Администрирование - Обслуживание - Обновление программы</strong>.</p>
<p>Программа позволяет обновлять конфигурацию ИБ в режиме 1С:Предприятия. Обновление производится по требованию или в указанное время.</p>
<p>Внимание! Помощник не следует использовать, если в программе включена возможность изменения объектов метаданных. В таких случаях рекомендуется выполнять обновление в режиме <strong>Конфигуратор</strong>. </p>
<p>На первом шаге выбирается источник установки обновления. Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu) или файла поставки конфигурации (.cf) из локального или сетевого каталога. Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.</p>
<h3><a name="#2">Получение обновлений из файла в локальном или сетевом каталоге</a></h3>
<p>На первом шаге выбирается источник установки обновления:</p>
<p></p>
<ul><li>Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu), файла исправления (.cfe или .zip) или файла поставки конфигурации (.cf) из локального или сетевого каталога. </li>
<li>Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.</li>
<li>С помощью ссылки <b>Поиск и установка обновлений</b> можно перейти к поиску обновления в Интернете.</li></ul>Программа определяет необходимость обновления. Если обновление не требуется, об этом выводится сообщение.<br><p></p>
<h3>Получение обновлений из файла в локальном или сетевом каталоге</h3>
<p>В случае если файл обновления уже имеется, то следует воспользоваться режимом обновления конфигурации из файла. </p>
<ul><li>На первой странице помощник просит указать, где именно находится файл с обновлениями:
<ul><li>
@@ -15,9 +19,8 @@
<p><strong>Укажите файл обновления</strong> - с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> укажите путь к файлу на компьютере. </p>
<ul><li>В качестве файла может быть указан cfu-файл обновления конфигурации или cf-файл поставки конфигурации, например, <strong>E:\1Cits\EXE\Migration\1Cv8.cf</strong>. </li></ul></li>
<li>Нажмите <strong>Далее</strong>, для того чтобы продолжить установку обновлений.</li></ul></li>
<li>После нажатия на кнопку <strong>Далее</strong> программа получает файл обновления из локального или сетевого каталога, например, с диска 1С:ИТС локально на компьютер. </li></ul><p>Получение файла обновления с диска 1С:ИТС может занять продолжительное время, в зависимости от объема конкретного файла и производительности компьютера.</p>
<h3>Установка обновлений </h3>
<p>После того, как обновление было получено локально на компьютер, помощник предлагает его установить.</p>
<li>После нажатия на кнопку <strong>Далее</strong> программа получает файл обновления из локального или сетевого каталога.</li></ul><h3>Установка обновлений </h3>
<p>После того, как обновление было получено локально на компьютер, помощник предлагает его установить. </p>
<ul><li>Установка обновления выполняется от имени текущего пользователя. Введите <strong>Параметры администрирования информационной базы - Имя пользователя</strong> и <strong>Пароль</strong>, если для доступа к информационной базе необходима авторизация. В случае клиент-серверного варианта работы программы также может потребоваться ввести имя и пароль администратора кластера серверов.
</li>
<li>Перед началом обновления версии программы рекомендуется создавать <a href="DataProcessor.УстановкаОбновлений.Form.НастройкаРезервнойКопии/Help">резервную копию</a> информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации. К настройке автоматического создания резервной копии в файловом варианте работы можно перейти по ссылке <strong>Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации</strong>.
@@ -46,7 +49,7 @@
</li>
<li>Помощник выводит сообщение об успешном завершении обновления программы. Перейдите по ссылке <strong>Новое в этой версии</strong>, для того чтобы просмотреть <a href="CommonForm.ОписаниеИзмененийПрограммы/Help">описание изменений программы</a>. Нажмите <strong>Готово</strong>, для того чтобы приступить к работе в программе.
</li>
<li>Если в программе предусмотрено <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">отложенное обновление</a>, выводится предупреждение о необходимости ознакомиться <strong>с дополнительными инструкциями</strong> для завершения обновления. Перейдите по соответствующей ссылке.</li></ul><h3><a name="#3">Планирование обновлений</a></h3>
<li>Если в программе предусмотрено <a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ИндикацияХодаОтложенногоОбновленияИБ/Help">отложенное обновление</a>, выводится предупреждение о необходимости ознакомиться <strong>с дополнительными инструкциями</strong> для завершения обновления. Перейдите по соответствующей ссылке.</li></ul><h3><a name="3">Планирование обновлений</a></h3>
<ul><li>При работе в клиент-серверном варианте работы программы можно задавать отложенное по времени обновление, например, можно отложить обновление конфигурации на ночь.
</li>
<li>Для этого при обновлении конфигурации в помощнике выберите с помощью переключателя <strong>Запланировать установку обновления на указанное время</strong> и укажите время и дату обновления.
@@ -62,5 +65,14 @@
<ul><ul><li>Результат обновления информационной базы записывается в <strong>Журнал событий Windows</strong> (Event Log).<br></li></ul><li>Если в результате нештатной ситуации при обновлении база оказалась заблокированной, то ее можно разблокировать с помощью консоли <strong>Администрирование серверов 1С:Предприятия</strong>, либо из командной строки, запустив 1С:Предприятие от имени администратора с ключом <strong>РазрешитьРаботуПользователей</strong> и указав код разблокировки <strong>ПакетноеОбновлениеКонфигурацииИБ</strong>. Например:</li></ul><p class="SourceCode">"C:\Program Files\1cv82\bin\1cv8.exe"ENTERPRISE /S"server\base" /N"Администратор" /P"" /WA- /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ</p>
<ul><li>Если обновление конфигурации завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента <strong>comcntr.dll</strong> на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту <strong>comcntr.dll</strong> из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:</li></ul><p class="SourceCode">regsvr32 &lt;каталог 64-разрядного comcntr.dll&gt;\comcntr.dll</p>
<p>Выяснив причины ошибки, произведите соответствующие настройки компьютера, затем нажмите <strong>Далее</strong> для повторения попытки. </p>
<h3>Обновление не подходит</h3>
<p></p>
<ul><li>Программа анализирует файл обновления, и если он не подходит (файл поставки от другой версии или от другой программы), то об этом выводится предупреждение. Нажмите <b>Закрыть</b>.</li>
<li>В этом случае следует найти нужный файл и повторить попытку обновления.</li></ul><p></p>
<h3>Если в программе установлены расширения</h3>
<p></p>
<ul><li>Если в программе имеются расширения, об этом выводится сообщение. </li>
<li>По ссылке в сообщении можно <b>Перейти к списку расширений</b>.</li>
<li>Необходимо учитывать, что расширения могут быть несовместимы с новой версией программы. Можно предварительно выполнить обновление на резервной копии, для того чтобы проверить их совместимость. </li></ul><p></p>
<h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -95,7 +95,11 @@
<li>Если в поле установлено значение <strong>Рассмотренные</strong>, то в списке показываются взаимодействия с установленным флажком <strong>Рассмотрено</strong>.</li></ul></li>
<li>С помощью команды <strong>Еще - Установить период</strong> можно выбрать период просмотра документов взаимодействий.
</li>
<li>Установленные отборы запоминаются.</li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591b">
<li>Установленные отборы запоминаются.</li></ul><h3>Учет отборов в панели группировки по предметам или контактам</h3>
<div>
<ul><li>С помощью ссылки под панелью навигации можно <b>Изменить</b> группировку - включить или отключить учет отборов в панели группировки по предметам или контактам. </li>
<li>Если учет отборов в панели группировки отключен, то показываются все предметы (контакты).</li></ul></div>
<div><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591b">
<h3 style="MARGIN-LEFT: 0px">Полнотекстовый поиск в переписке или во вложениях</h3></a>
<ul><li>
<div>Введите строку поиска в поле <strong>Найти</strong>, расположенное в правой верхней части окна.</div>
@@ -263,4 +267,4 @@
</li>
<li><strong>Переслать как вложение</strong> - по команде контекстного меню по правой кнопке мыши будет сформировано исходящее письмо, включающее в себя как вложение выбранные входящие или отправленные письма.</li></ul></li></ul><h3><a name="8">Персональные настройки</a></h3>
<ul><li>С помощью команды <strong>Еще</strong> <strong>- Персональные настройки</strong> можно перейти к настройке персональной учетной записи электронной почты.</li></ul><h3>См. также</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></div></body></html>
@@ -80,7 +80,8 @@
Возврат;
КонецЕсли;
Если РазделениеВключено Тогда
Если РазделениеВключено
И Не ОтправкаПолучениеПисемВыполняется Тогда
ОтправитьПолучитьПочтуПользователяКлиент();
КонецЕсли;
@@ -1577,7 +1578,13 @@
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус", ДатаДляОтбора);
ШаблонЗаголовка = НСтр("ru = 'Статус: %1'");
ПредставлениеСтатуса = Взаимодействия.СписокСтатусов().НайтиПоЗначению(Статус).Представление;
НайденныйСтатус = Взаимодействия.СписокСтатусов().НайтиПоЗначению(Статус);
Если НайденныйСтатус = Неопределено Тогда
Статус = "Все";
ПредставлениеСтатуса = НСтр("ru = 'Все'");
Иначе
ПредставлениеСтатуса = НайденныйСтатус.Представление;
КонецЕсли;
Элементы.СписокСтатус.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеСтатуса);
Для Каждого ЭлементПодменю Из Элементы.СписокСтатус.ПодчиненныеЭлементы Цикл
Если ЭлементПодменю.Имя = ("УстановитьОтборСтатус_" + Статус) Тогда
@@ -2932,8 +2939,8 @@
Если ЗначенияПараметровМакета.Количество() = 0 Тогда
Возврат "";
ИначеЕсли ЗначенияПараметровМакета.Количество() = 2
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.ДатаНачала.Значение))
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.ДатаОкончания.Значение)) Тогда
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.НачалоПериодаОтбора.Значение))
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.КонецПериодаОтбора.Значение)) Тогда
Возврат "";
КонецЕсли;
@@ -4248,6 +4255,8 @@
УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(УникальныйИдентификатор, ЭтотОбъект, Элементы.Список, ВыводитьПрогресс);
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОтправкиПолученияПочты", 30, Истина);
КонецПроцедуры
&НаКлиенте
@@ -175,46 +175,8 @@
ПО ПредметыВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет
ПО ЖурналДокументовВзаимодействия.Ссылка = ПредметыВзаимодействий.Взаимодействие}
{ГДЕ
(ЖурналДокументовВзаимодействия.Дата МЕЖДУ &amp;ДатаНачала И &amp;ДатаОкончания)}</query>
(ЖурналДокументовВзаимодействия.Дата МЕЖДУ &amp;НачалоПериодаОтбора И &amp;КонецПериодаОтбора)}</query>
</dataSet>
<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>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;Интервал.ДатаНачала</expression>
<availableAsField>false</availableAsField>
</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>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>true</useRestriction>
<expression>&amp;Интервал.ДатаОкончания</expression>
<availableAsField>false</availableAsField>
</parameter>
<parameter>
<name>Интервал</name>
<title xsi:type="v8:LocalStringType">
@@ -234,6 +196,32 @@
<useRestriction>false</useRestriction>
<availableAsField>false</availableAsField>
</parameter>
<parameter>
<name>КонецПериодаОтбора</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Конец периода отбора</v8:content>
</v8:item>
</title>
<value xsi:type="xs:string">1/1/0001, 12:00:00 AM</value>
<useRestriction>true</useRestriction>
<expression>&amp;Интервал.ДатаОкончания</expression>
<availableAsField>false</availableAsField>
</parameter>
<parameter>
<name>НачалоПериодаОтбора</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Начало периода отбора</v8:content>
</v8:item>
</title>
<value xsi:type="xs:string">1/1/0001, 12:00:00 AM</value>
<useRestriction>true</useRestriction>
<expression>&amp;Интервал.ДатаНачала</expression>
<availableAsField>false</availableAsField>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
@@ -1,18 +1,23 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>Предназначен для хранения согласий на обработку ПДн и отзывов согласий.</p>
<p>Открывается по соответствующей команде в разделе <strong>Интегрируемые подсистемы</strong>.</p>
<h3>Ввод новых документов</h3>
<ul><li>Согласно закону от 27.06.2006 № 152-ФЗ "О персональных данных" необходимо получить письменное согласие субъекта на обработку персональных данных (например, на регистрацию данных субъекта в списках программы).
</li><li>В программе предусмотрена регистрация согласий субъектов во избежание повторного истребования согласия, когда это не требуется, и с целью повторного истребования, когда срок действия согласия уже истек.
</li><li>Субъект персональных данных в любой момент может отозвать свое согласие на обработку персональных данных. Для документирования этого события в программе имеется документ <strong>Отзыв согласия на обработку ПДн</strong>.
</li><li>С помощью кнопки <strong>Создать</strong> можно ввести:
</li>
<li>В программе предусмотрена регистрация согласий субъектов во избежание повторного истребования согласия, когда это не требуется, и с целью повторного истребования, когда срок действия согласия уже истек.
</li>
<li>Субъект персональных данных в любой момент может отозвать свое согласие на обработку персональных данных. Для документирования этого события в программе имеется документ <strong>Отзыв согласия на обработку ПДн</strong>.
</li>
<li>С помощью кнопки <strong>Создать</strong> можно ввести:
<ul><li><a href="Document.СогласиеНаОбработкуПерсональныхДанных/Help">Согласие на обработку ПДн</a>;
</li><li><a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul></li></ul><h3>Печать</h3>
</li>
<li><a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul></li></ul><h3>Печать</h3>
<p>С помощью кнопки <strong>Печать</strong> можно распечатать выделенные согласия. Печать возможна:</p>
<ul><li>в виде табличных документов формата MXL (для печати в этом формате не требуется специальных программ);
</li><li>в виде офисных документов в форматах Microsoft Word OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.</li></ul><h3>Проведение документов</h3>
</li>
<li>в виде офисных документов в форматах Microsoft Word OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.</li></ul><h3>Проведение документов</h3>
<p>С помощью команд меню <strong>Еще</strong> можно:</p>
<ul><li><strong>Провести</strong> согласие или отзыв согласия;
</li><li>Отменить проведение с помощью команды <strong>Отмена проведения</strong>.</li></ul><h3>См. также:</h3>
</li>
<li>Отменить проведение с помощью команды <strong>Отмена проведения</strong>.</li></ul><h3>См. также:</h3>
<ul><li>
<div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html>
@@ -2,31 +2,47 @@
<p>Вводится при получении согласия на обработку персональных данных.</p>
<p>С помощью программы можно проводить проверку персональных данных, например, при приеме на работу сотрудника:</p>
<ul><li>Проверяется наличие зарегистрированных физических лиц;
</li><li>Если физическое лицо было обнаружено, выполняется проверка наличия действующего согласия на обработку ПДн;
</li><li>Если согласия на обработку ПДн не обнаружено, предлагается его ввести.</li></ul><p>Предусмотрен ввод согласия на обработку ПДн из списков программы, в которых хранятся персональные данные, по соответствующей кнопке. Также можно ввести документ из списка <a href="DocumentJournal.СогласияНаОбработкуПерсональныхДанных/Help">Согласия на обработку ПДн</a>.</p>
</li>
<li>Если физическое лицо было обнаружено, выполняется проверка наличия действующего согласия на обработку ПДн;
</li>
<li>Если согласия на обработку ПДн не обнаружено, предлагается его ввести.</li></ul><p>Предусмотрен ввод согласия на обработку ПДн из списков программы, в которых хранятся персональные данные, по соответствующей кнопке. Также можно ввести документ из списка <a href="DocumentJournal.СогласияНаОбработкуПерсональныхДанных/Help">Согласия на обработку ПДн</a>.</p>
<p>Укажите <strong>Дату</strong> согласия.</p>
<h3>Оператор персональных данных</h3>
<ul><a name="СтандартныеПодсистемы.Организации">
<li>Выберите <strong>Организацию</strong> из </li></a>списка;
<ul><li>Выберите <strong>Организацию</strong> из списка;</li>
<li>После этого автоматически заполняется <strong>Адрес</strong> (если он заполнен в карточке организации); <a name="СтандартныеПодсистемы.Пользователи">
</a></li><li><a name="СтандартныеПодсистемы.Пользователи">Выберите из </a><a href="Catalog.Пользователи/Help">списка пользователей</a> <strong>Ответственного за обработку персональных данных</strong>.</li></ul><h3>Субъект персональных данных </h3>
</a></li>
<li><a name="СтандартныеПодсистемы.Пользователи">Выберите из </a><a href="Catalog.Пользователи/Help">списка пользователей</a> <strong>Ответственного за обработку персональных данных</strong>.</li></ul><h3>Субъект персональных данных </h3>
<ul><li>Персональные данные субъектов выбираются из нескольких списков;
</li><li>Рекомендуется заносить все данные субъектов в соответствующий список, а не только в окне согласия, т.к. этим облегчается последующая работа. Если согласие формируется из списка, данные выбранного субъекта заполняются автоматически;
</li><li>В поле <strong>Субъект</strong> сначала выберите список, затем выберите субъекта персональных данных из соответствующего списка;
</li><li>Сведения о субъекте персональных данных (<strong>ФИО</strong> и <strong>Паспортные данные</strong>) заполняются автоматически, если они заполнены в самом списке;
</li><li>Напишите <strong>Адрес</strong> субъекта.</li></ul><h3>Остальные поля</h3>
</li>
<li>Рекомендуется заносить все данные субъектов в соответствующий список, а не только в окне согласия, т.к. этим облегчается последующая работа. Если согласие формируется из списка, данные выбранного субъекта заполняются автоматически;
</li>
<li>В поле <strong>Субъект</strong> сначала выберите список, затем выберите субъекта персональных данных из соответствующего списка;
</li>
<li>Сведения о субъекте персональных данных (<strong>ФИО</strong> и <strong>Паспортные данные</strong>) заполняются автоматически, если они заполнены в самом списке;
</li>
<li>Напишите <strong>Адрес</strong> субъекта.</li></ul><h3>Остальные поля</h3>
<ul><li>Поле <strong>Согласие получено</strong> заполняется автоматически текущей датой.
</li><li>Проставьте <strong>Срок действия</strong> согласия. Если срок действия не заполнен, то согласие на обработку персональных данных будет выдано бессрочно.
</li><li>В поле <strong>Комментарий</strong> можно написать дополнительную информацию. <a name="СтандартныеПодсистемы.Пользователи">
</a></li><li><a name="СтандартныеПодсистемы.Пользователи">В поле <strong>Ответственный</strong> программа автоматически проставляет текущего </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</li></ul><h3>Печать</h3>
</li>
<li>Проставьте <strong>Срок действия</strong> согласия. Если срок действия не заполнен, то согласие на обработку персональных данных будет выдано бессрочно.
</li>
<li>В поле <strong>Комментарий</strong> можно написать дополнительную информацию. <a name="СтандартныеПодсистемы.Пользователи">
</a></li>
<li><a name="СтандартныеПодсистемы.Пользователи">В поле <strong>Ответственный</strong> программа автоматически проставляет текущего </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</li></ul><h3>Печать</h3>
<ul><li>С помощью кнопки <strong>Печать</strong> можно распечатать выделенные согласия. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных программ);
</li><li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.</li></ul><h3>Предупреждение</h3>
</li>
<li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие программы, установленные на компьютере.</li></ul><h3>Предупреждение</h3>
<ul><li>При выборе субъекта программа проводит поиск зарегистрированных согласий на обработку ПДн.
</li><li>Если уже имеется действующее согласие этого субъекта в той же организации, выводится предупреждение.
</li><li>В этот момент можно:
</li>
<li>Если уже имеется действующее согласие этого субъекта в той же организации, выводится предупреждение.
</li>
<li>В этот момент можно:
<ul><li>отказаться от регистрации документа, сообщив субъекту, что согласие уже не требуется;
</li><li>предложить субъекту оформить согласие на более длительный срок.</li></ul></li><li>С помощью ссылки, имеющейся в предупреждении, можно просмотреть согласие, зарегистрированное ранее.
</li><li>Если необходимо ввести новое <strong>Согласие на обработку персональных данных</strong> (данные субъекта изменились и т.д.) то сначала нужно отозвать ранее полученное согласие. Нажмите кнопку <strong>Создать на основании</strong>, выберите <a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul><h3>Проведение документа</h3>
</li>
<li>предложить субъекту оформить согласие на более длительный срок.</li></ul></li>
<li>С помощью ссылки, имеющейся в предупреждении, можно просмотреть согласие, зарегистрированное ранее.
</li>
<li>Если необходимо ввести новое <strong>Согласие на обработку персональных данных</strong> (данные субъекта изменились и т.д.) то сначала нужно отозвать ранее полученное согласие. Нажмите кнопку <strong>Создать на основании</strong>, выберите <a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul><h3>Проведение документа</h3>
<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>, для того чтобы зарегистрировать в программе согласие на обработку ПДн.
</li><li>Второе такое же согласие на обработку персональных данных провести (т.е. зарегистрировать) невозможно. Программа выводит сообщение об ошибке.</li></ul><h3>См. также:</h3>
</li>
<li>Второе такое же согласие на обработку персональных данных провести (т.е. зарегистрировать) невозможно. Программа выводит сообщение об ошибке.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -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="be75d0b2-c9db-4dab-9e32-dbe26d667508">
<producedTypes>
<refType typeId="334a73bf-9c7f-4ab2-9385-e45f095b19e0" valueTypeId="e4a94be7-56ac-4ea6-a1eb-b0c87cdd5196"/>
<listType typeId="c0c04645-239b-4bfa-b647-ffa6a95a3327" valueTypeId="556a6626-d3f2-45cb-ab48-91413bafdd2b"/>
<managerType typeId="eee442ae-5137-4712-9b7b-f268562ccb30" valueTypeId="8125ff4d-29f1-4b28-b25d-8a5a534400bc"/>
</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="299c014f-996a-4a99-a5be-a7cfd5ee45e4">
<name>НеОчищать</name>
<synonym>
<key>ru</key>
<value>Не очищать</value>
</synonym>
</enumValues>
<enumValues uuid="2569b69d-006f-478e-83b7-9163048b34bb">
<name>ОчищатьУдаленные</name>
<synonym>
<key>ru</key>
<value>Очищать удаленные</value>
</synonym>
</enumValues>
<enumValues uuid="1ee47933-8117-4d47-9245-476c0ed3a373">
<name>ОчищатьУдаленныеИНенужные</name>
<synonym>
<key>ru</key>
<value>Очищать удаленные и ненужные</value>
</synonym>
</enumValues>
</mdclass:Enum>
@@ -38,6 +38,14 @@
//
Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт
Если НЕ ЗначениеЗаполнено(Кодировка) Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(РегистрыСведений.КодировкиФайлов.КодировкаВерсииФайла(ВерсияСсылка)) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
МенеджерЗаписи = РегистрыСведений.КодировкиФайлов.СоздатьМенеджерЗаписи();
@@ -2,7 +2,7 @@
<p>В программе можно вводить напоминания, указав время и предмет, по поводу которого в программе в указанное время будет выведен <a href="InformationRegister.НапоминанияПользователя.Form.ФормаОповещения/Help">список напоминаний</a>.</p>
<p>Предметом напоминаний могут быть различные справочники, документы и другие объекты программы. Например, напоминание можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.</p>
<p>Открывается по кнопке <img src="CommonPicture.Напоминание" width="16" height="16"></img> <strong>Органайзер - Напомнить</strong> из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.</p>
<p>Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a> по команде <strong>Создать</strong>.Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения.</p>
<p>Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a> по команде <strong>Создать</strong>. Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения.</p>
<h3>Ввод напоминания</h3>
<ul><li>Откорректируйте или напишите текст напоминания.
</li>
@@ -1,8 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body>
<p>Предназначен для вывода сработавших <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">напоминаний</a>.</p>
<p>Предназначена для вывода сработавших <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">напоминаний</a>.</p>
<p>В указанное в напоминании время в программе открывается список <strong>Напоминания</strong>. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. </p>
<p>По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета, например, со сроком по задаче, то в напоминании указывается, сколько времени осталось до этого события. В списке можно:</p>
<ul><li>Перейти к элементу справочника или другому объекту программы, с которым связано напоминание (с помощью кнопки <strong>Открыть</strong> или двойному щелчку мыши). Если напоминание не связано с объектом программы, то открывается само напоминание.
</li><li>С помощью кнопки <strong>Прекратить</strong> отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку <strong>Прекратить</strong> продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">списке</a> <strong>Мои напоминания</strong>.
</li><li>С помощью кнопки <strong>Отложить все</strong> напоминания в списке отложить на время, указанное в поле <strong>Напомнить через</strong>. Для заполнения поля выберите значение из списка, или с помощью клавиатуры, указав произвольное значение времени.</li></ul><h3>См. также:</h3>
</li>
<li>С помощью кнопки <strong>Прекратить</strong> отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку <strong>Прекратить</strong> продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">списке</a> <strong>Мои напоминания</strong>.
</li>
<li>С помощью кнопки <strong>Отложить все</strong> напоминания в списке отложить на время, указанное в поле <strong>Напомнить через</strong>. Для заполнения поля выберите значение из списка, или с помощью клавиатуры, указав произвольное значение времени.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -2,10 +2,13 @@
<p>В программе можно вводить напоминания, указав время и предмет, по поводу которого в программе в указанное время будет выведен список напоминаний.</p>
<p>Предметом напоминаний могут быть различные справочники, документы и другие объекты программы. Например, <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">напоминание</a> можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.</p>
<p>Открывается по кнопке <img src="CommonPicture.Органайзер"></img> <strong>Органайзер - Напомнить</strong> из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.</p>
<p>Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a> по команде <strong>Создать</strong>.Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения. Совместно с <a href="Catalog.Заметки/Help">заметками</a> напоминания хорошо подходят как электронная замена "стикеров на краях монитора".</p>
<p>Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a> по команде <strong>Создать</strong>. Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения. Совместно с <a href="Catalog.Заметки/Help">заметками</a> напоминания хорошо подходят как электронная замена "стикеров на краях монитора".</p>
<h3>Список напоминаний</h3>
<ul><li>В указанное в напоминании время в программе открывается список <strong>Напоминания</strong>. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета (например, со сроком по задаче), то в напоминании указывается, сколько времени осталось до этого события.
</li><li>Из списка можно перейти к элементу справочника или документу, с которым связано напоминание (по команде <strong>Открыть</strong> или двойному щелчку мыши). Если напоминание не связано с объектом программы, то открывается само напоминание.
</li><li>С помощью кнопки <strong>Прекратить</strong> можно отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку <strong>Прекратить</strong> продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a>.
</li><li>По команде <strong>Отложить все</strong> напоминания в списке можно отложить на время, указанное в поле <strong>Напомнить через</strong>. Поле <strong>Напомнить через</strong> можно заполнить, выбрав значение из списка, или с помощью клавиатуры, указав произвольное значение времени.</li></ul><h3>См. также:</h3>
</li>
<li>Из списка можно перейти к элементу справочника или документу, с которым связано напоминание (по команде <strong>Открыть</strong> или двойному щелчку мыши). Если напоминание не связано с объектом программы, то открывается само напоминание.
</li>
<li>С помощью кнопки <strong>Прекратить</strong> можно отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку <strong>Прекратить</strong> продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в списке <a href="InformationRegister.НапоминанияПользователя.Form.МоиНапоминания/Help">Мои напоминания</a>.
</li>
<li>По команде <strong>Отложить все</strong> напоминания в списке можно отложить на время, указанное в поле <strong>Напомнить через</strong>. Поле <strong>Напомнить через</strong> можно заполнить, выбрав значение из списка, или с помощью клавиатуры, указав произвольное значение времени.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -433,155 +433,80 @@
<autoMaxCardHeight>true</autoMaxCardHeight>
</items>
<items xsi:type="form:FormGroup">
<name>ОчисткаНенужныхФайлов</name>
<id>57</id>
<items xsi:type="form:Button">
<name>ОбъемНенужныхФайлов</name>
<id>74</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОбъемНенужныхФайловРасширеннаяПодсказка</name>
<id>75</id>
<name>СтраницыИтогиУдаляемыеФайлы</name>
<id>114</id>
<items xsi:type="form:FormGroup">
<name>СтраницаПодсчетИтоговУдаляемыеФайлы</name>
<id>116</id>
<items xsi:type="form:Decoration">
<name>КартинкаРасчетИтогов</name>
<id>120</id>
<title>
<key>ru</key>
<value>Картинка расчет итогов</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КартинкаРасчетИтоговРасширеннаяПодсказка</name>
<id>122</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КартинкаРасчетИтоговКонтекстноеМеню</name>
<id>121</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.НезавершившаясяПроверка</picture>
</picture>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>НадписьРасчетовИтогов</name>
<id>125</id>
<title>
<key>ru</key>
<value>Вычисляется размер файлов для удаления...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НадписьРасчетовИтоговРасширеннаяПодсказка</name>
<id>127</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НадписьРасчетовИтоговКонтекстноеМеню</name>
<id>126</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<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>
<items xsi:type="form:FormGroup">
<name>ОчисткаФайлов</name>
<id>90</id>
<items xsi:type="form:FormGroup">
<name>Очистка</name>
<id>92</id>
<items xsi:type="form:Button">
<name>Очистить</name>
<id>69</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОчиститьРасширеннаяПодсказка</name>
<id>70</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<commandName>Form.Command.Очистить</commandName>
<buttonImportance>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>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Очистка</value>
</title>
<extendedTooltip>
<name>ОчисткаРасширеннаяПодсказка</name>
<id>93</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>СтатусФоновогоЗадания</name>
<id>94</id>
<items xsi:type="form:Decoration">
<name>ИнформацияОФоновомЗадании</name>
<id>96</id>
<title>
<key>ru</key>
<value>Выполняется очистка ненужных файлов...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ИнформацияОФоновомЗаданииРасширеннаяПодсказка</name>
<id>98</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИнформацияОФоновомЗаданииКонтекстноеМеню</name>
<id>97</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Статус фонового задания</value>
</title>
<extendedTooltip>
<name>СтатусФоновогоЗаданияРасширеннаяПодсказка</name>
<id>95</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>
@@ -590,11 +515,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Очистка файлов</value>
<value>Страница подсчет итогов удаляемые файлы</value>
</title>
<extendedTooltip>
<name>ОчисткаФайловРасширеннаяПодсказка</name>
<id>91</id>
<name>СтраницаПодсчетИтоговУдаляемыеФайлыРасширеннаяПодсказка</name>
<id>117</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -602,9 +527,314 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Pages</type>
<extInfo xsi:type="form:PagesGroupExtInfo">
<currentRowUse>Auto</currentRowUse>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>AlwaysHorizontal</group>
<verticalAlign>Center</verticalAlign>
<showTitle>auto</showTitle>
<backColor xsi:type="core:ColorRef">
<color>Style.ИтогиФонГруппы</color>
</backColor>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>СтраницаОтображениеИтоговУдаляемыеФайлы</name>
<id>118</id>
<items xsi:type="form:FormGroup">
<name>ОчисткаНенужныхФайлов</name>
<id>57</id>
<items xsi:type="form:FormGroup">
<name>ОчисткаФайлов</name>
<id>90</id>
<items xsi:type="form:FormGroup">
<name>Очистка</name>
<id>92</id>
<items xsi:type="form:Button">
<name>Очистить</name>
<id>69</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОчиститьРасширеннаяПодсказка</name>
<id>70</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<commandName>Form.Command.Очистить</commandName>
<buttonImportance>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>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Очистка</value>
</title>
<extendedTooltip>
<name>ОчисткаРасширеннаяПодсказка</name>
<id>93</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>СтатусФоновогоЗадания</name>
<id>94</id>
<items xsi:type="form:Decoration">
<name>ИнформацияОФоновомЗадании</name>
<id>96</id>
<title>
<key>ru</key>
<value>Выполняется очистка ненужных файлов...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ИнформацияОФоновомЗаданииРасширеннаяПодсказка</name>
<id>98</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИнформацияОФоновомЗаданииКонтекстноеМеню</name>
<id>97</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Статус фонового задания</value>
</title>
<extendedTooltip>
<name>СтатусФоновогоЗаданияРасширеннаяПодсказка</name>
<id>95</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>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Очистка файлов</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ОчисткаФайловРасширеннаяПодсказка</name>
<id>91</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Pages</type>
<extInfo xsi:type="form:PagesGroupExtInfo">
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ИнформацияОРазмереФайлов</name>
<id>130</id>
<items xsi:type="form:Button">
<name>ОбъемУдаленныхФайлов</name>
<id>128</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОбъемУдаленныхФайловРасширеннаяПодсказка</name>
<id>129</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>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>
<items xsi:type="form:Button">
<name>ОбъемНенужныхФайлов</name>
<id>74</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОбъемНенужныхФайловРасширеннаяПодсказка</name>
<id>75</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>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Информация о размере файлов</value>
</title>
<extendedTooltip>
<name>ИнформацияОРазмереФайловРасширеннаяПодсказка</name>
<id>131</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Очистка ненужных файлов</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ОчисткаНенужныхФайловРасширеннаяПодсказка</name>
<id>58</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<verticalAlign>Center</verticalAlign>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Страница отображение итогов удаляемые файлы</value>
</title>
<extendedTooltip>
<name>СтраницаОтображениеИтоговУдаляемыеФайлыРасширеннаяПодсказка</name>
<id>119</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>
<backColor xsi:type="core:ColorRef">
<color>Style.ИтогиФонГруппы</color>
</backColor>
<scrollOnCompress>false</scrollOnCompress>
</extInfo>
</items>
<visible>true</visible>
@@ -614,11 +844,12 @@
</userVisible>
<title>
<key>ru</key>
<value>Очистка ненужных файлов</value>
<value>Страницы итоги удаляемые файлы</value>
</title>
<groupVerticalAlign>Center</groupVerticalAlign>
<extendedTooltip>
<name>ОчисткаНенужныхФайловРасширеннаяПодсказка</name>
<id>58</id>
<name>СтраницыИтогиУдаляемыеФайлыРасширеннаяПодсказка</name>
<id>115</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -626,15 +857,8 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<verticalAlign>Center</verticalAlign>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<type>Pages</type>
<extInfo xsi:type="form:PagesGroupExtInfo">
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
@@ -655,7 +879,7 @@
<dataPath xsi:type="form:DataPath">
<segments>АвтоматическиОчищатьНенужныеФайлы</segments>
</dataPath>
<titleLocation>Right</titleLocation>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>АвтоматическиОчищатьНенужныеФайлыПриИзменении</name>
@@ -676,12 +900,237 @@
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<readOnly>true</readOnly>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<items xsi:type="form:FormGroup">
<name>НастройкаОчисткиФайла</name>
<id>132</id>
<items xsi:type="form:FormField">
<name>РежимОчисткиФайловНеОчищать</name>
<id>134</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>136</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РежимОчисткиФайловНеОчищатьКонтекстноеМеню</name>
<id>135</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">
<radioButtonsType>RadioButtons</radioButtonsType>
<choiceList>
<presentation>
<key>ru</key>
<value>Не очищать</value>
</presentation>
<value xsi:type="core:ReferenceValue">
<value>Enum.РежимыОчисткиФайлов.EnumValue.НеОчищать</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>РежимОчисткиФайловОчищатьУдаленные</name>
<id>146</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>148</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РежимОчисткиФайловОчищатьУдаленныеКонтекстноеМеню</name>
<id>147</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">
<radioButtonsType>RadioButtons</radioButtonsType>
<choiceList>
<presentation>
<key>ru</key>
<value>Очищать удаленные</value>
</presentation>
<value xsi:type="core:ReferenceValue">
<value>Enum.РежимыОчисткиФайлов.EnumValue.ОчищатьУдаленные</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>РежимОчисткиФайловОчищатьУдаленныеИНенужные</name>
<id>143</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>145</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РежимОчисткиФайловОчищатьУдаленныеИНенужныеКонтекстноеМеню</name>
<id>144</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">
<radioButtonsType>RadioButtons</radioButtonsType>
<choiceList>
<presentation>
<key>ru</key>
<value>Очищать удаленные и ненужные</value>
</presentation>
<value xsi:type="core:ReferenceValue">
<value>Enum.РежимыОчисткиФайлов.EnumValue.ОчищатьУдаленныеИНенужные</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Настройка</value>
</title>
<titleTextColor xsi:type="core:ColorRef">
<color>Style.ГиперссылкаЦвет</color>
</titleTextColor>
<extendedTooltip>
<name>НастройкаОчисткиФайлаРасширеннаяПодсказка</name>
<id>133</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>PopUp</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>НадписьНастройкаОчистки</name>
<id>137</id>
<title>
<key>ru</key>
<value>Автоматически очищать удаленные файлы</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>НадписьНастройкаОчисткиРасширеннаяПодсказка</name>
<id>139</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НадписьНастройкаОчисткиКонтекстноеМеню</name>
<id>138</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>URLProcessing</event>
<name>НадписьНастройкаОчисткиОбработкаНавигационнойСсылки</name>
</handlers>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>НастроитьРасписание</name>
<id>76</id>
@@ -1157,6 +1606,10 @@
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
@@ -1416,6 +1869,47 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ОписаниеРасчетаИтогов</name>
<id>9</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>РежимОчисткиФайлов</name>
<title>
<key>ru</key>
<value>Режим очистки файлов</value>
</title>
<id>10</id>
<valueType>
<types>EnumRef.РежимыОчисткиФайлов</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ИспользоватьТома</name>
<id>11</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>УстановитьДействиеОчиститьФайлыИВерсии</name>
<title>
@@ -1636,6 +2130,24 @@
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОбъемУдаленныхФайлов</name>
<title>
<key>ru</key>
<value>Объем удаленных файлов</value>
</title>
<id>12</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОбъемУдаленныхФайлов</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -28,6 +28,25 @@
Элементы.Расписание.Видимость = Ложь;
КонецЕсли;
Элементы.СтраницыИтогиУдаляемыеФайлы.ТекущаяСтраница = Элементы.СтраницаПодсчетИтоговУдаляемыеФайлы;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ОписаниеРасчетаИтогов = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "РаботаСФайламиСлужебный.СведенияОбОчищаемыхФайлах");
РежимОчисткиФайлов = РаботаСФайламиСлужебный.РежимОчисткиФайлов();
НастроитьРежимОчисткиФайлов();
ОтобразитьИзмененияРежимОчисткиФайлов(ЭтотОбъект);
ИспользоватьТома = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Обработчик = Новый ОписаниеОповещения("ПриЗавершенииРасчетаИтогов", ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(ОписаниеРасчетаИтогов, Обработчик, ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
@@ -39,6 +58,21 @@
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
&НаКлиенте
Процедура РежимОчисткиФайловПриИзменении(Элемент)
ОтобразитьИзмененияРежимОчисткиФайлов(ЭтотОбъект);
РежимОчисткиФайловПриИзмененииСервер();
КонецПроцедуры
&НаСервере
Процедура РежимОчисткиФайловПриИзмененииСервер()
РаботаСФайламиСлужебный.УстановитьРежимОчисткиФайлов(РежимОчисткиФайлов);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных
&НаКлиенте
@@ -247,10 +281,84 @@
ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 2, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбъемУдаленныхФайлов(Команда)
ОткрытьФорму("Справочник.ТомаХраненияФайлов.Форма.ФормаСписка");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура НастроитьРежимОчисткиФайлов()
Элементы.ОбъемУдаленныхФайлов.Видимость = ИспользоватьТома;
Элементы.РежимОчисткиФайловОчищатьУдаленные.Видимость = ИспользоватьТома;
Элементы.РежимОчисткиФайловОчищатьУдаленныеИНенужные.СписокВыбора[0].Представление = ?(ИспользоватьТома,
НСтр("ru='Очищать удаленные и ненужные'"),
НСтр("ru='Очищать ненужные'"));
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьИзмененияРежимОчисткиФайлов(Форма)
Если Форма.РежимОчисткиФайлов = ПредопределенноеЗначение("Перечисление.РежимыОчисткиФайлов.НеОчищать") Тогда
Заголовок = НСтр("ru='Автоматически не очищать файлы'");
Форма.АвтоматическиОчищатьНенужныеФайлы = Ложь;
ИначеЕсли Форма.РежимОчисткиФайлов = ПредопределенноеЗначение("Перечисление.РежимыОчисткиФайлов.ОчищатьУдаленные") Тогда
Заголовок = НСтр("ru='Автоматически очищать удаленные файлы'");
Форма.АвтоматическиОчищатьНенужныеФайлы = Истина;
ИначеЕсли Форма.РежимОчисткиФайлов = ПредопределенноеЗначение("Перечисление.РежимыОчисткиФайлов.ОчищатьУдаленныеИНенужные") Тогда
Заголовок = ?(Форма.ИспользоватьТома,
НСтр("ru='Автоматически очищать удаленные и ненужные файлы'"),
НСтр("ru='Автоматически очищать ненужные файлы'"));
Форма.АвтоматическиОчищатьНенужныеФайлы = Истина;
Иначе
ВызватьИсключение НСтр("ru='Неизвестный режим очистки файлов.'");
КонецЕсли;
Форма.Элементы.НастройкаОчисткиФайла.Заголовок = Заголовок;
Форма.Элементы.Расписание.Доступность = Форма.АвтоматическиОчищатьНенужныеФайлы;
Форма.Элементы.НастроитьРасписание.Доступность = Форма.АвтоматическиОчищатьНенужныеФайлы;
Форма.Элементы.НастройкаОчисткиФайла.Скрыть();
КонецПроцедуры
&НаКлиенте
Процедура НадписьНастройкаОчисткиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Элементы.НастройкаОчисткиФайла.Показать();
КонецПроцедуры
&НаКлиенте
Процедура ПриЗавершенииРасчетаИтогов(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
Итоги = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); // см. РаботаСФайламиСлужебный.СведенияОбОчищаемыхФайлах
ОтобразитьИтоги(Итоги.ОбъемУдаляемыхФайлов, Итоги.ОбъемНенужныхФайлов);
Иначе
ОтобразитьИтоги(0,0);
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Возникла ошибка при подсчете объема удаляемых файлов:
|%1'"),
Результат.КраткоеПредставлениеОшибки);
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецЕсли;
Элементы.СтраницыИтогиУдаляемыеФайлы.ТекущаяСтраница = Элементы.СтраницаОтображениеИтоговУдаляемыеФайлы;
КонецПроцедуры
&НаКлиенте
Процедура ОтобразитьИтоги(ОбъемУдаляемыхФайлов, ОбъемНенужныхФайлов)
Элементы.ОбъемУдаленныхФайлов.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Удаляемые файлы: %1 Мб'"),
Формат(ОбъемУдаляемыхФайлов, "ЧДЦ=2; ЧН=0;"));
Элементы.ОбъемНенужныхФайлов.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ненужные файлы: %1 Мб'"),
Формат(ОбъемНенужныхФайлов, "ЧДЦ=2; ЧН=0;"));
КонецПроцедуры
&НаСервере
Функция ПутьФормыВыбора(ВладелецФайла)
@@ -653,7 +761,7 @@
Иначе
ПараметрыЗадания = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыЗадания.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним);
РезультатЗадания = ДлительныеОперации.ВыполнитьВФоне(РегламентноеЗаданиеМетаданные.ИмяМетода, Новый Структура, ПараметрыЗадания);
РезультатЗадания = ДлительныеОперации.ВыполнитьВФоне(РегламентноеЗаданиеМетаданные.ИмяМетода, Новый Структура("РучнойЗапуск", Истина), ПараметрыЗадания);
Если ЗначениеЗаполнено(ИдентификаторФоновогоЗадания) Тогда
ИдентификаторФоновогоЗадания = РезультатЗадания.ИдентификаторЗадания;
КонецЕсли;
@@ -308,110 +308,108 @@
Процедура ЗаполнитьПервоначальныйСписокПечатныхФорм()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Иначе
Возврат;
КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Владелец));
СписокОбъектов = Новый Массив;
СписокОбъектов.Добавить(ОбъектМетаданных);
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Владелец));
СписокОбъектов = Новый Массив;
СписокОбъектов.Добавить(ОбъектМетаданных);
КоллекцияПечатныхФорм = УправлениеПечатью.КомандыПечатиОбъекта(ОбъектМетаданных);
СписокПечатныхФорм = Новый СписокЗначений;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
СписокПечатныхФорм.Добавить(ПечатнаяФорма.Идентификатор, ПечатнаяФорма.Представление);
КоллекцияПечатныхФорм = МодульУправлениеПечатью.КомандыПечатиОбъектаДоступныеДляВложений(ОбъектМетаданных);
СписокПечатныхФорм = Новый СписокЗначений;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
СписокПечатныхФорм.Добавить(ПечатнаяФорма.Идентификатор, ПечатнаяФорма.Представление);
КонецЦикла;
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(Запись.Владелец);
УчетОригиналовПервичныхДокументов.ПриОпределенииСпискаПечатныхФорм(ОбъектыПечати, СписокПечатныхФорм);
ОбъектМетаданных = ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Владелец);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
ЗапросТаблицаКоманд = МодульДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(
Перечисления["ВидыДополнительныхОтчетовИОбработок"].ПечатнаяФорма,ОбъектМетаданных, Истина);
ТаблицаКоманд = ЗапросТаблицаКоманд.Выполнить().Выгрузить();
КонецЕсли;
МодульФизическиеЛицаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛицаКлиентСервер");
ТабличнаяЧасть = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьМногосотрудниковаДокумента(Запись.Владелец);
Если ТабличнаяЧасть <> "" Тогда
Для Каждого Сотрудник Из Запись.Владелец[ТабличнаяЧасть] Цикл
Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда
ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Сотрудник.Наименование);
Иначе
ФИО = Сотрудник.Сотрудник.Наименование;
КонецЕсли;
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление,ФИО);
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Значение;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник.Сотрудник;
КонецЦикла;
КонецЦикла;
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(Запись.Владелец);
УчетОригиналовПервичныхДокументов.ПриОпределенииСпискаПечатныхФорм(ОбъектыПечати, СписокПечатныхФорм);
ОбъектМетаданных = ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Владелец);
Если ПравоДоступа("Чтение",Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда
ЗапросТаблицаКоманд = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма,ОбъектМетаданных, Истина);
ТаблицаКоманд = ЗапросТаблицаКоманд.Выполнить().Выгрузить();
Иначе
ТаблицаКоманд = Новый ТаблицаЗначений;
КонецЕсли;
ТЧ = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьМногосотрудниковаДокумента(Запись.Владелец);
Если ТЧ <> "" Тогда
Для Каждого Сотрудник Из Запись.Владелец[ТЧ] Цикл
МодульФизическиеЛицаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛицаКлиентСервер");
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого Сотрудник Из Запись.Владелец[ТабличнаяЧасть] Цикл
Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда
ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Сотрудник.Наименование);
Иначе
ФИО = Сотрудник.Сотрудник.Наименование;
КонецЕсли;
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление,ФИО);
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Значение;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник.Сотрудник;
КонецЦикла;
КонецЦикла;
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого Сотрудник Из Запись.Владелец[ТЧ] Цикл
МодульФизическиеЛицаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛицаКлиентСервер");
Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда
ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Сотрудник.Наименование);
Иначе
ФИО = Сотрудник.Сотрудник.Наименование;
КонецЕсли;
Для Каждого ТекСтрока Из ТаблицаКоманд Цикл
Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление,ФИО);
Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Значение;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник.Сотрудник;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Иначе
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
Идентификатор = ТекСтрока.Значение;
НоваяСтрока.ИмяМакета = Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЦикла;
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого ТекСтрока Из ТаблицаКоманд Цикл
Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление,ФИО);
Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда
НоваяСтрока = КомплектПечатныхФорм.Добавить();
Идентификатор = ТекСтрока.Значение;
НоваяСтрока.ИмяМакета = Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.ИмяМакета = ТекСтрока.Значение;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник.Сотрудник;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов на принтер"));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов с настройкой..."));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
Иначе
Возврат;
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
Идентификатор = ТекСтрока.Значение;
НоваяСтрока.ИмяМакета = Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЦикла;
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого ТекСтрока Из ТаблицаКоманд Цикл
Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда
НоваяСтрока = КомплектПечатныхФорм.Добавить();
Идентификатор = ТекСтрока.Значение;
НоваяСтрока.ИмяМакета = Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов на принтер"));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление","Комплект документов с настройкой..."));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
КонецПроцедуры
&НаСервере
@@ -34,4 +34,68 @@
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Формирует таблицу ненужных файлов.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * ВладелецФайла - ОпределяемыйТип.ВладелецФайлов
// * ОбъемНенужныхФайлов - Число
//
Функция ТаблицаНенужныхФайлов() Экспорт
НастройкиОчистки = РегистрыСведений.НастройкиОчисткиФайлов.ТекущиеНастройкиОчистки();
ТаблицаНенужныхФайлов = Новый ТаблицаЗначений;
ТаблицаНенужныхФайлов.Колонки.Добавить("ВладелецФайла");
ТаблицаНенужныхФайлов.Колонки.Добавить("ОбъемНенужныхФайлов", Новый ОписаниеТипов("Число"));
НастройкиОчисткиФайлов = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоНастройкаДляЭлементаСправочника", Ложь));
Для Каждого Настройка Из НастройкиОчисткиФайлов Цикл
МассивИсключений = Новый Массив;
ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура(
"ИдентификаторВладельца, ЭтоНастройкаДляЭлементаСправочника",
Настройка.ВладелецФайла,
Истина));
Если ДетализированныеНастройки.Количество() > 0 Тогда
Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл
МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла);
ДополнитьТаблицуНенужныхФайлов(ТаблицаНенужныхФайлов, ЭлементИсключение, МассивИсключений);
КонецЦикла;
КонецЕсли;
ДополнитьТаблицуНенужныхФайлов(ТаблицаНенужныхФайлов, Настройка, МассивИсключений);
КонецЦикла;
Возврат ТаблицаНенужныхФайлов;
КонецФункции
Процедура ДополнитьТаблицуНенужныхФайлов(ТаблицаНенужныхФайлов, НастройкаОчистки, МассивИсключений)
Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать Тогда
Возврат;
КонецЕсли;
Если МассивИсключений = Неопределено Тогда
МассивИсключений = Новый Массив;
КонецЕсли;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаЗначений = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
НенужныеФайлы = РаботаСФайламиСлужебный.ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений, ПроцессорВывода);
Для Каждого Стр Из НенужныеФайлы Цикл
НоваяСтрока = ТаблицаНенужныхФайлов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -12,30 +12,7 @@
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
НастройкиОчистки = РегистрыСведений.НастройкиОчисткиФайлов.ТекущиеНастройкиОчистки();
ТаблицаНенужныхФайлов = Новый ТаблицаЗначений;
ТаблицаНенужныхФайлов.Колонки.Добавить("ВладелецФайла");
ТаблицаНенужныхФайлов.Колонки.Добавить("ОбъемНенужныхФайлов", Новый ОписаниеТипов("Число"));
НастройкиОчисткиФайлов = НастройкиОчистки.НайтиСтроки(Новый Структура("ЭтоНастройкаДляЭлементаСправочника", Ложь));
Для Каждого Настройка Из НастройкиОчисткиФайлов Цикл
МассивИсключений = Новый Массив;
ДетализированныеНастройки = НастройкиОчистки.НайтиСтроки(Новый Структура(
"ИдентификаторВладельца, ЭтоНастройкаДляЭлементаСправочника",
Настройка.ВладелецФайла,
Истина));
Если ДетализированныеНастройки.Количество() > 0 Тогда
Для Каждого ЭлементИсключение Из ДетализированныеНастройки Цикл
МассивИсключений.Добавить(ЭлементИсключение.ВладелецФайла);
ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, ЭлементИсключение, , Истина);
КонецЦикла;
КонецЕсли;
ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, Настройка, МассивИсключений, Ложь);
КонецЦикла;
ТаблицаНенужныхФайлов = Отчеты.ОбъемНенужныхФайлов.ТаблицаНенужныхФайлов();
СтандартнаяОбработка = Ложь;
@@ -68,128 +45,6 @@
#Область СлужебныеПроцедурыИФункции
// Параметры:
// ТаблицаНенужныхФайлов - ТаблицаЗначений:
// * ВладелецФайла - ЛюбаяСсылка
// * ОбъемНенужныхФайлов - Число
// НастройкаОчистки - СтрокаТаблицыЗначений:
// * Действие - ПеречислениеСсылка.ВариантыОчисткиФайлов
// МассивИсключений - Неопределено
// - Массив
// ЭтоНастройкаДляЭлементаСправочника - Булево
//
Процедура ПолучитьОбъемНенужныхФайлов(ТаблицаНенужныхФайлов, НастройкаОчистки, МассивИсключений = Неопределено, ЭтоНастройкаДляЭлементаСправочника = Ложь)
Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.НеОчищать Тогда
Возврат;
КонецЕсли;
Если МассивИсключений = Неопределено Тогда
МассивИсключений = Новый Массив;
КонецЕсли;
НенужныеФайлы = ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений);
Для Каждого Стр Из НенужныеФайлы Цикл
НоваяСтрока = ТаблицаНенужныхФайлов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
КонецЦикла;
КонецПроцедуры
Функция ВыбратьДанныеПоПравилу(НастройкаОчистки, МассивИсключений)
ВременныйКомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
ОчищатьПоПравилу = НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.ПоПравилу;
Если ОчищатьПоПравилу Тогда
НастройкиКомпоновщика = НастройкаОчистки.ПравилоОтбора.Получить();
Если НастройкиКомпоновщика <> Неопределено Тогда
ВременныйКомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновщика);
КонецЕсли;
КонецЕсли;
ВременнаяСхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = ВременнаяСхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = ВременнаяСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
ВременнаяСхемаКомпоновкиДанных.ПоляИтога.Очистить();
Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда
ВладелецФайла = НастройкаОчистки.ИдентификаторВладельца;
ЭлементИсключение = НастройкаОчистки.ВладелецФайла;
Иначе
ВладелецФайла = НастройкаОчистки.ВладелецФайла;
ЭлементИсключение = Неопределено;
КонецЕсли;
ВременнаяСхемаКомпоновкиДанных.НаборыДанных[0].Запрос = РаботаСФайламиСлужебный.ТекстЗапросаДляОчисткиФайлов(
ВладелецФайла, НастройкаОчистки, МассивИсключений, ЭлементИсключение);
Структура = ВременныйКомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ВладелецФайла");
ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ОбъемНенужныхФайлов");
ВременныйКомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ВременнаяСхемаКомпоновкиДанных));
Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца");
Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки);
Параметр.Использование = Истина;
Если МассивИсключений.Количество() > 0 И Не НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда
Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("МассивИсключений");
Параметр.Значение = МассивИсключений;
Параметр.Использование = Истина;
КонецЕсли;
ПараметрТекущаяДата = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТекущаяДата");
Если ПараметрТекущаяДата <> Неопределено Тогда
ПараметрТекущаяДата.Значение = ТекущаяДатаСеанса();
ПараметрТекущаяДата.Использование = Истина;
КонецЕсли;
Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодОчистки");
Если Параметр <> Неопределено Тогда
Если НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеМесяца Тогда
ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -1);
ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеГода Тогда
ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -12);
ИначеЕсли НастройкаОчистки.ПериодОчистки = Перечисления.ПериодОчисткиФайлов.СтаршеШестиМесяцев Тогда
ЗначениеПериодаОчистки = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -6);
КонецЕсли;
Параметр.Значение = ЗначениеПериодаОчистки;
Параметр.Использование = Истина;
КонецЕсли;
Если НастройкаОчистки.ЭтоНастройкаДляЭлементаСправочника Тогда
Параметр = ВременныйКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ЭлементИсключение");
Параметр.Значение = ЭлементИсключение;
Параметр.Использование = Истина;
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаЗначений = Новый ТаблицаЗначений;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ВременнаяСхемаКомпоновкиДанных, ВременныйКомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Возврат ТаблицаЗначений;
КонецФункции
Функция ОбъемДанныхВсего()
УстановитьПривилегированныйРежим(Истина);
@@ -36,7 +36,7 @@
НоваяСтрока.Том = ПараметрТом.Значение;
КонецЦикла;
РаботаСФайламиВТомахСлужебный.ПроверитьЦелостностьФайлов(ТаблицаФайловНаДиске, ПараметрТом.Значение);
РаботаСФайламиВТомахСлужебный.ЗаполнитьЛишниеФайлы(ТаблицаФайловНаДиске, ПараметрТом.Значение);
СтандартнаяОбработка = Ложь;
@@ -423,7 +423,7 @@
<dcscor:value xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Лишние файлы (есть на диске, но сведения о них отсутствуют)</v8:content>
<v8:content>Удаленные файлы (есть на диске, но сведения о них отсутствуют)</v8:content>
</v8:item>
</dcscor:value>
</dcscor:item>
@@ -0,0 +1,2 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>Выводит статистические данные о выполнении процедур отложенного обновления.
<div><br></div></body></html>
@@ -15,6 +15,11 @@
<defaultSettingsForm>CommonForm.ФормаНастроекОтчета</defaultSettingsForm>
<defaultVariantForm>CommonForm.ФормаВариантаОтчета</defaultVariantForm>
<variantsStorage>SettingsStorage.ХранилищеВариантовОтчетов</variantsStorage>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<templates uuid="07e81872-afac-4720-86b4-91e7bf4a2881">
<name>ОсновнаяСхемаКомпоновкиДанных</name>
<synonym>
@@ -2,16 +2,24 @@
<p>Предназначен для просмотра и устранения выявленных проблем с документами, регистрами и любыми данными в программе, для просмотра результатов <a href="Catalog.ПравилаПроверкиУчета/Help">проверок ведения учета</a>.</p>
<p>В отчете выводится:</p>
<ul><li><strong>Вид проверки</strong> - сведения о проверке и перечень проблемных объектов;
</li><li>итоговая колонка.</li></ul><p>Сведения о проверке выделены цветом. В этой части выводятся:</p>
</li>
<li>итоговая колонка.</li></ul><p>Сведения о проверке выделены цветом. В этой части выводятся:</p>
<ul><li>Наименование проблемы и ее важность;
</li><li>Возможные причины;
</li><li>Рекомендации по исправлению;
</li><li>Решение - в некоторых проверках может быть предусмотрена ссылка, по которой можно перейти к автоматическому исправлению проблемы.</li></ul><p>Затем следует перечень обнаруженных в ходе этой проверки проблемных объектов программы, который состоит из колонок:</p>
</li>
<li>Возможные причины;
</li>
<li>Рекомендации по исправлению;
</li>
<li>Решение - в некоторых проверках может быть предусмотрена ссылка, по которой можно перейти к автоматическому исправлению проблемы.</li></ul><p>Затем следует перечень обнаруженных в ходе этой проверки проблемных объектов программы, который состоит из колонок:</p>
<ul><li>Данные о проблемном объекте;
</li><li>Обнаруженная проблема;
</li><li>Дата проведения проверки.</li></ul><h3>Отбор по ответственным</h3>
<ul><li>Нажмите кнопку <strong>Настройки</strong>.
</li><li>В окне <a href="CommonForm.ФормаНастроекОтчета/Help">Настройки</a> режиме <strong>Простой</strong> включите флажок <strong>Выводить ответственного</strong>.
</li><li>После этого проверенные объекты в отчете будут сгруппированы по ответственным, в специальных колонках по каждому ответственному выводится, сколько проблемных объектов обнаружено.</li></ul><h3>Просмотр объекта</h3>
</li>
<li>Обнаруженная проблема;
</li>
<li>Дата проведения проверки.</li></ul><h3>Отборы и настройки</h3>
<ul><li>В шапке отчета предусмотрены быстрые отборы по периоду, правилу проверки, ответственному, важности проблемы. </li>
<li>Управлять отборами (добавить, включить, выключить) можно в шапке отчета и с помощью кнопки <img src="CommonPicture.Закрепить"></img>. </li>
<li>С помощью флажка <b>Выводить ответственного</b>:</li>
<ul><li>в отчете выводится колонка <b>Ответственный</b>; </li>
<li>в специальных колонках по каждому ответственному выводится, сколько проблемных объектов обнаружено.</li></ul><li>С помощью кнопки <b>Настройки</b> можно <a href="CommonForm.ФормаНастроекОтчета/Help">перейти</a> к более сложным отборам (предусмотрен расширенный режим).</li></ul><h3>Просмотр объекта</h3>
<ul><li>Дважды щелкните по объекту для перехода к просмотру. Можно исправить обнаруженные в ходе проверки проблемы.</li></ul><h3>См. также:</h3>
<ul><li><a href="CommonForm.ФормаОтчета/Help">Работа с отчетом</a>.</li></ul></body></html>
@@ -624,93 +624,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -2187,6 +2100,13 @@
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.РезервноеКопированиеИБ.Command.ПоказатьРезультат</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ИзвлекатьТекстыФайловНаСервере</name>
<right>
@@ -3932,6 +3852,93 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
@@ -14,37 +14,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.РассылкиОтчетов.Command.СобытияРассылки</name>
<right>
@@ -107,6 +76,37 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляОбъекта(ПолеОбъекта)</name>
<condition>// ДляОбъекта(ПолеОбъекта = "")
@@ -937,45 +937,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>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -5446,6 +5407,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>
@@ -278,17 +278,6 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НеудаленныеОбъекты</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма</name>
<right>
@@ -1863,6 +1852,17 @@
<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>
</object>
<object>
<name>InformationRegister.ГруппыЗначенийДоступа</name>
<right>
@@ -21,10 +21,6 @@
<command>DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных</command>
<visible/>
</visibilityFragments>
<visibilityFragments>
<command>CommonCommand.ПанельОтчетовАдминистрирование</command>
<visible/>
</visibilityFragments>
<visibilityFragments>
<command>Catalog.ВариантыОтчетов.StandardCommand.OpenList</command>
<visible/>
@@ -219,10 +215,6 @@
<command>Report.АнализПравДоступа.StandardCommand.Open</command>
<visible/>
</visibilityFragments>
<visibilityFragments>
<command>CommonCommand.ДополнительныеОтчетыАдминистрирование</command>
<visible/>
</visibilityFragments>
<visibilityFragments>
<command>Report.ОбъемНенужныхФайлов.StandardCommand.Open</command>
<visible/>
@@ -444,7 +436,6 @@
<commands>Catalog.ВнешниеПользователи.StandardCommand.OpenList</commands>
<commands>DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации</commands>
<commands>DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных</commands>
<commands>CommonCommand.ПанельОтчетовАдминистрирование</commands>
<commands>Catalog.ВариантыОтчетов.StandardCommand.OpenList</commands>
<commands>Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList</commands>
<commands>Catalog.РассылкиОтчетов.StandardCommand.OpenList</commands>
@@ -466,6 +457,10 @@
<commands>DataProcessor.ПоискИУдалениеДублей.Command.ПоискИУдалениеДублей</commands>
<commands>Catalog.УчетныеЗаписиЭлектроннойПочты.StandardCommand.OpenList</commands>
</placementFragments>
<placementFragments>
<group>ActionsPanelReports</group>
<commands>CommonCommand.ПанельОтчетовАдминистрирование</commands>
</placementFragments>
</commandsPlacement>
<commandsOrder>
<orderFragments>
@@ -475,7 +470,6 @@
<commands>Catalog.ВнешниеПользователи.StandardCommand.OpenList</commands>
<commands>DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации</commands>
<commands>DataProcessor.ЗащитаПерсональныхДанных.Command.ЗащитаПерсональныхДанных</commands>
<commands>CommonCommand.ПанельОтчетовАдминистрирование</commands>
<commands>Catalog.ВариантыОтчетов.StandardCommand.OpenList</commands>
<commands>Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.OpenList</commands>
<commands>Catalog.РассылкиОтчетов.StandardCommand.OpenList</commands>
@@ -584,5 +578,17 @@
<commands>CommonForm.ВосстановлениеПаролей.StandardCommand.Open</commands>
<commands>DataProcessor.ПодключениеОбсуждений.Command.НастройкиСообщенийИзДругихПрограмм</commands>
</orderFragments>
<orderFragments>
<group>ActionsPanelReports</group>
<commands>CommonCommand.ПанельОтчетовАдминистрирование</commands>
<commands>CommonCommand.ДополнительныеОтчетыАдминистрирование</commands>
<commands>Report.АнализЖурналаРегистрации.StandardCommand.Open</commands>
<commands>Report.АнализПравДоступа.StandardCommand.Open</commands>
<commands>Report.ОбъемНенужныхФайлов.StandardCommand.Open</commands>
<commands>Report.ОценкаПроизводительности.StandardCommand.Open</commands>
<commands>Report.ПрогрессОтложенногоОбновления.StandardCommand.Open</commands>
<commands>Report.СведенияОПользователях.StandardCommand.Open</commands>
<commands>Report.УниверсальныйОтчет.StandardCommand.Open</commands>
</orderFragments>
</commandsOrder>
</cmi:CommandInterface>
Loaded 100 of 104 files, more files were not shown because too many files have changed in this diff. Show more