mirror of
https://github.com/1C-Company/GitConverter.git
synced 2024-12-24 20:14:43 +02:00
Лицензия и участие в проекте
This commit is contained in:
parent
099bcb07f5
commit
36919ff93d
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
name: Сообщение об ошибке
|
||||
about: Сообщите нам об ошибке, чтобы помочь нам улучшить продукт
|
||||
|
||||
---
|
||||
|
||||
**Описание ошибки**
|
||||
что конкретно происходит
|
||||
|
||||
**Сценарий воспроизведения**
|
||||
Шаги по воспроизведению:
|
||||
1. Открыть '...'
|
||||
2. Нажать '....'
|
||||
3. Запустить '....'
|
||||
4. Опишите, что есть ошибка по вашему мнению и почему
|
||||
|
||||
**Ожидаемое поведение**
|
||||
какое правильное поведение
|
||||
|
||||
**Скриншоты, логи, ЖР**
|
||||
* скриншоты очень сильно помогают
|
||||
* добавте логи из Журнала Регистрации, из лог-файлов (убедитесь что они не содержат приватной информации)
|
||||
|
||||
**Дополнительная информация**
|
||||
|
||||
[что еще необходимо уточнить?]
|
25
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
25
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
name: Добавление новой функциональности
|
||||
about: предложение новой идеи или функциональности к разработке
|
||||
|
||||
---
|
||||
|
||||
**Существует проблема**
|
||||
Описание существующей проблемы [...]
|
||||
|
||||
**Хотелось бы иметь следующую функциональность**
|
||||
Вариант реализации [...]
|
||||
|
||||
**Расширение или улучшение?**
|
||||
|
||||
Это улучшение конфигурации 1С:ГитКонвертер потому что [...]
|
||||
|
||||
Это функциональность можно реализовать в расширении.
|
||||
|
||||
**Дополнительный контекст**
|
||||
Любая дополнительная информация
|
||||
|
||||
<!---
|
||||
Если вы предлагаете новую функциональность, но не собираетесь ее реализовывать самостоятельно, вы соглашаетесь с тем, что возможно никто другой не захочет ее реализовывать.
|
||||
|
||||
-->
|
16
.github/PULL_REQUEST_TEMPLATE/bug_fix.md
vendored
Normal file
16
.github/PULL_REQUEST_TEMPLATE/bug_fix.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
# Что делает этот запрос на объединение?
|
||||
|
||||
Исправление ошибки [...]
|
||||
|
||||
|
||||
# Этот PR соответствует критериям принятия?
|
||||
|
||||
- [ ] Я подтверждаю, что [являюсь правообладателем кода или публикую с его согласия](CONTRIBUTING.md#Лицензия)
|
||||
- [ ] Соответствует [Стандартам и методикам разработки](https://its.1c.ru/db/v8std)
|
||||
- [ ] Ветка не имеет конфликтов объединения с `develop` (если имеет - rebase пожалуйста)
|
||||
- [ ] [Squashed related commits together](https://git-scm.com/book/ru/v1/Инструменты-Git-Перезапись-истории#Уплотнение-коммитов)
|
||||
|
||||
|
||||
# Номера зависимых тикетов?
|
||||
|
||||
Closes #123
|
21
.github/PULL_REQUEST_TEMPLATE/feature.md
vendored
Normal file
21
.github/PULL_REQUEST_TEMPLATE/feature.md
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# Что делает этот запрос на объединение?
|
||||
|
||||
Новая функциональность [...]
|
||||
|
||||
# Скриншоты
|
||||
|
||||
- ?
|
||||
|
||||
# Этот PR соответствует критериям принятия?
|
||||
|
||||
- [ ] Я подтверждаю, что [являюсь правообладателем кода или публикую с его согласия](CONTRIBUTING.md#Лицензия)
|
||||
- [ ] [Changelog запись]() добавлена
|
||||
- [ ] [файл README.md]() обновлен
|
||||
- [ ] Соответствует [Стандартам и методикам разработки](https://its.1c.ru/db/v8std)
|
||||
- [ ] Ветка не имеет конфликтов объединения с `develop` (если имеет - rebase пожалуйста)
|
||||
- [ ] [Squashed related commits together](https://git-scm.com/book/ru/v1/Инструменты-Git-Перезапись-истории#Уплотнение-коммитов)
|
||||
|
||||
|
||||
# Номера зависимых тикетов?
|
||||
|
||||
Closes #123
|
100
CONTRIBUTING.md
Normal file
100
CONTRIBUTING.md
Normal file
@ -0,0 +1,100 @@
|
||||
# Участие в проекте 1С:ГитКонвертер
|
||||
|
||||
Вначале, хотим поблагодарить Вас за желание участвовать в проекте!
|
||||
|
||||
Далее описаны советы, как сделать свое участие наиболее эффективным для проекта и для себя. Это не жесткие правила, поэтому используйте свой разум, если здесь что-либо не описано.
|
||||
|
||||
## У меня есть вопрос
|
||||
|
||||
|
||||
1. Для начала убедитесь, что ответа нет в самой конфигурации 1С:ГитКонвертер в справке или подсказке к полям и командам.
|
||||
2. Расширенная информация есть в [Wiki](https://github.com/1C-Company/GitConverter/wiki) - стоит ее прочитать
|
||||
3. Так же есть [FAQ](https://github.com/1C-Company/GitConverter/wiki/Если-что-то-пошло-не-так-FAQ) с наиболее частыми вопросами
|
||||
|
||||
**Вопрос есть, но ответа не нашел?** Создай `issue`
|
||||
|
||||
## Сообщить об ошибке
|
||||
|
||||
Печально, что ошибка существует, но мы благодарны, что вы о ней нам сообщите!
|
||||
|
||||
#### Прежде чем зарегистрировать
|
||||
|
||||
* Проверьте [FAQ](https://github.com/1C-Company/GitConverter/wiki/Если-что-то-пошло-не-так-FAQ) и [Wiki](https://github.com/1C-Company/GitConverter/wiki) на наличие описания, что не является ошибкой
|
||||
* Проверьте раздел [Issues](https://github.com/1C-Company/GitConverter/issues), чтобы не создавать дубликатов
|
||||
|
||||
#### Как сообщить об ошибке эффективно
|
||||
|
||||
Следуйте простым правилам:
|
||||
|
||||
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий проблему
|
||||
* постарайтесь не допускать двойного смысла, сленга из других областей и т.д.
|
||||
* Не используйте "метки" в заголовке - для этого существуют сами метки (labels)
|
||||
2. Опишите сценарий воспроизведения ошибки.
|
||||
* скриншоты очень сильно помогают, но не заменяют сценарий
|
||||
* добавьте логи ЖР, из лог-файлов (убедитесь, что они не содержат приватной информации)
|
||||
3. Опишите, что есть ошибка по вашему мнению и почему
|
||||
4. Опишите ожидаемое поведение
|
||||
|
||||
|
||||
## Предложите улучшение функциональности
|
||||
|
||||
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий новую функциональность
|
||||
2. Опишите суть улучшений и обсудите в issue варианты реализации.
|
||||
3. Реализуйте Ваше улучшение функциональности проекта в отдельном форке и предложите его через [Pull/merge request](#Pull-Requests-Merge-Requests)
|
||||
|
||||
## Доработка кода
|
||||
|
||||
**Главная цель этого проекта** - помочь разработчикам 1С перейти на разработку в 1C:EDT и Git с сохранением истории разработки в хранилище 1С.
|
||||
|
||||
Доработка кода в конфигурации осуществляется только для улучшения существующей функциональности в соответствии с целями проекта.
|
||||
|
||||
Создание и развитие новой функциональности нужно реализовывать с помощью [расширений конфигураций 1С:Предприятия](http://v8.1c.ru/overview/Term_000000883.htm).
|
||||
|
||||
### Исправление ошибок
|
||||
|
||||
* Создайте `issue` в проекте с описанием ошибки. Убедитесь, что владельцы проекта так же считают текущее поведение ошибочным.
|
||||
* Создайте ветку в своем **форке** с именем `bugfix/issue-<Номер issue>-доп-название`
|
||||
* Создайте **pull-request** из своей ветки в ветку **`develop`** проекта GitConverter
|
||||
* Убедитесь, что модификация кода действительно исправляет ошибку, описанную в issue, и не привносит новую функциональность - новую функциональность следует делать отдельным issue и pull-request'ом.
|
||||
* Следуйте общим правилам [Pull/merge request](#Pull-Requests-Merge-Requests)
|
||||
|
||||
### Создайте Расширение конфигурации
|
||||
|
||||
Новая функциональность должна создаваться с помощью расширений для конфигурации 1С:ГитКонвертер.
|
||||
|
||||
Размещение кода расширений может быть двух типов:
|
||||
* в репозитории `1C-Company/GitConverter` вместе с проектом 1С:ГитКонвертер
|
||||
* в вашем репозитории на ГитХабе и ссылка в основном проект на ваш репозиторий, добавляемая вами по правилам `<Pull/merge request'а>`
|
||||
|
||||
Требования к расширениям:
|
||||
* Расширение должно быть в проекте в формате EDT
|
||||
* Наименование проекта расширения должно иметь формат `GitConverter.ИмяРасширения`
|
||||
* Код расширения должен соответствовать [общим требованиям разработки](https://its.1c.ru/db/v8std)
|
||||
* В расширении должны быть заполнены свойства `Vendor/Поставщик` и `Version/Версия`.
|
||||
|
||||
|
||||
### Pull Requests (Merge Requests)
|
||||
|
||||
* Создайте `issue` в проекте с описанием новой функциональности, желательно перед началом работы, чтобы исключить параллельную работу разных людей над одной задачей
|
||||
* Создайте ветку в своем **форке** с именем `feature/issue-<Номер issue>-доп-название`
|
||||
* Внесите изменения в конфигурацию или расширение
|
||||
* Создайте **pull-request** из своей ветки в ветку **`develop`** проекта GitConverter
|
||||
* Укажите ссылку на issue, которую закрывает данный pull-request
|
||||
* Установите в своем PR флажок "allow edits from maintainers"
|
||||
|
||||
#### Лицензия
|
||||
|
||||
1. Добавляя любой контент в этот репозиторий (в т.ч. код), вы соглашаетесь с тем, что Ваш контент будет поставляться по [лицензии проекта](LISENSE.md).
|
||||
2. Создавая "Запрос на объединение" текстов модулей, вы подтверждаете, что публикуете код с согласия правообладателя (это вы или ваша компания). **Внимание!** Если вы работаете в компании, убедитесь, что вы не публикуете код вашей компании без ее согласия.
|
||||
3. При модификации текстов модулей Вы должны добавить себя или свою компанию в секцию копирайта в заголовке модуля. Если в секции копирайта уже указан **один** дополнительный автор, необходимо заменить на `ООО 1С-Софт и другие.`
|
||||
4. При создании новых модулей, например в расширениях, в заголовок модуля необходимо добавить лицензию этого проекта и правообладателя.
|
||||
|
||||
```bsl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
```
|
@ -1,3 +1,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
|
@ -1,111 +1,119 @@
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
Отбор = Новый Структура();
|
||||
Если ЗначениеЗаполнено(ТекущийОбъект.Источник) Тогда
|
||||
Отбор.Вставить("Ключ", Строка(ТекущийОбъект.Источник.УникальныйИдентификатор()));
|
||||
Иначе
|
||||
Отбор.Вставить("Ключ", Строка(ТекущийОбъект.Ссылка.УникальныйИдентификатор()));
|
||||
КонецЕсли;
|
||||
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
|
||||
|
||||
МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
|
||||
|
||||
Если МассивФоновыхЗаданий.Количество() > 0 Тогда
|
||||
Задание = МассивФоновыхЗаданий[0];
|
||||
СостояниеЗадания = НСтр("ru='Выполняется обработка с %Дата%'");
|
||||
СостояниеЗадания = СтрЗаменить(СостояниеЗадания, "%Дата%", Задание.Начало);
|
||||
|
||||
Элементы.ГруппаСостояние.Видимость = Истина;
|
||||
ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(Задание.УникальныйИдентификатор);
|
||||
|
||||
Иначе
|
||||
СостояниеЗадания = "";
|
||||
Элементы.ГруппаСостояние.Видимость = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТекущийОбъект.Состояние = Перечисления.СостоянияВерсии.НачалоКоммита
|
||||
ИЛИ ТекущийОбъект.Состояние = Перечисления.СостоянияВерсии.ВерсияПомещена Тогда
|
||||
КаталогВыгрузкиВерсий = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Владелец, "КаталогВыгрузкиВерсий");
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаКоммитаВерсии(ТекущийОбъект.Код, КаталогВыгрузкиВерсий);
|
||||
Иначе
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаОбработкиВерсии(ТекущийОбъект.КаталогВременныхФайлов);
|
||||
КонецЕсли;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
Отбор = Новый Структура();
|
||||
Если ЗначениеЗаполнено(ТекущийОбъект.Источник) Тогда
|
||||
Отбор.Вставить("Ключ", Строка(ТекущийОбъект.Источник.УникальныйИдентификатор()));
|
||||
Иначе
|
||||
Отбор.Вставить("Ключ", Строка(ТекущийОбъект.Ссылка.УникальныйИдентификатор()));
|
||||
КонецЕсли;
|
||||
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
|
||||
|
||||
МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
|
||||
|
||||
Если МассивФоновыхЗаданий.Количество() > 0 Тогда
|
||||
Задание = МассивФоновыхЗаданий[0];
|
||||
СостояниеЗадания = НСтр("ru='Выполняется обработка с %Дата%'");
|
||||
СостояниеЗадания = СтрЗаменить(СостояниеЗадания, "%Дата%", Задание.Начало);
|
||||
|
||||
Элементы.ГруппаСостояние.Видимость = Истина;
|
||||
ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(Задание.УникальныйИдентификатор);
|
||||
|
||||
Иначе
|
||||
СостояниеЗадания = "";
|
||||
Элементы.ГруппаСостояние.Видимость = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТекущийОбъект.Состояние = Перечисления.СостоянияВерсии.НачалоКоммита
|
||||
ИЛИ ТекущийОбъект.Состояние = Перечисления.СостоянияВерсии.ВерсияПомещена Тогда
|
||||
КаталогВыгрузкиВерсий = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Владелец, "КаталогВыгрузкиВерсий");
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаКоммитаВерсии(ТекущийОбъект.Код, КаталогВыгрузкиВерсий);
|
||||
Иначе
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаОбработкиВерсии(ТекущийОбъект.КаталогВременныхФайлов);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиКомандФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗапуститьОбработкуВерсии(Команда)
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЗапуститьОбработкуВерсииНаСервере(Объект.Ссылка);
|
||||
|
||||
Прочитать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбновитьСостояние(Команда)
|
||||
|
||||
Прочитать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаЛогаОткрытие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
Если Не ЗначениеЗаполнено(ИмяФайлаЛога) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Новый ТекстовыйДокумент();
|
||||
|
||||
ИмяФайла = "";
|
||||
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаЛога, Текст, ИмяФайла);
|
||||
|
||||
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ЗапуститьОбработкуВерсииНаСервере(ВерсияХранилища)
|
||||
|
||||
КонвертацияХранилища.ЗапуститьОбработкуВерсииВФоне(ВерсияХранилища);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(ФоновоеЗаданиеИдентификатор)
|
||||
Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ФоновоеЗаданиеИдентификатор);
|
||||
Если Прогресс <> Неопределено Тогда
|
||||
ФоновоеЗаданиеПроцент = Прогресс.Процент;
|
||||
ФоновоеЗаданиеСостояние = Прогресс.Текст;
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ПрочитатьТекстовыйФайлНаСервере(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы = Ложь)
|
||||
|
||||
ОбщегоНазначения.ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиКомандФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗапуститьОбработкуВерсии(Команда)
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЗапуститьОбработкуВерсииНаСервере(Объект.Ссылка);
|
||||
|
||||
Прочитать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбновитьСостояние(Команда)
|
||||
|
||||
Прочитать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаЛогаОткрытие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
Если Не ЗначениеЗаполнено(ИмяФайлаЛога) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Новый ТекстовыйДокумент();
|
||||
|
||||
ИмяФайла = "";
|
||||
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаЛога, Текст, ИмяФайла);
|
||||
|
||||
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ЗапуститьОбработкуВерсииНаСервере(ВерсияХранилища)
|
||||
|
||||
КонвертацияХранилища.ЗапуститьОбработкуВерсииВФоне(ВерсияХранилища);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(ФоновоеЗаданиеИдентификатор)
|
||||
Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ФоновоеЗаданиеИдентификатор);
|
||||
Если Прогресс <> Неопределено Тогда
|
||||
ФоновоеЗаданиеПроцент = Прогресс.Процент;
|
||||
ФоновоеЗаданиеСостояние = Прогресс.Текст;
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ПрочитатьТекстовыйФайлНаСервере(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы = Ложь)
|
||||
|
||||
ОбщегоНазначения.ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,293 +1,301 @@
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает структуру последней версии хранилища
|
||||
//
|
||||
// Параметры:
|
||||
// Хранилище - СправочникСсылка.ХранилищаКонфигураций - ссылка на хранилище
|
||||
// Возвращаемое значение:
|
||||
// Структура - номер последней версии и ссылка на версию
|
||||
Функция ПоследняяВерсияХранилища(Знач Хранилище) Экспорт
|
||||
|
||||
Результат = Новый Структура("Версия, Ссылка", 0, Неопределено);
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ВложенныйЗапрос.Версия КАК Версия,
|
||||
| ЕСТЬNULL(ВерсииХранилища.Ссылка, ЗНАЧЕНИЕ(Справочник.ВерсииХранилища.ПустаяСсылка)) КАК Ссылка
|
||||
|ИЗ
|
||||
| (ВЫБРАТЬ
|
||||
| ЕСТЬNULL(МАКСИМУМ(ВерсииХранилища.Код), 0) КАК Версия
|
||||
| ИЗ
|
||||
| Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
| ГДЕ
|
||||
| ВерсииХранилища.Владелец = &Хранилище) КАК ВложенныйЗапрос
|
||||
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
| ПО ВложенныйЗапрос.Версия = ВерсииХранилища.Код
|
||||
| И (ВерсииХранилища.Владелец = &Хранилище)";
|
||||
|
||||
Запрос.УстановитьПараметр("Хранилище", Хранилище);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||
|
||||
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||
ЗаполнитьЗначенияСвойств(Результат, ВыборкаДетальныеЗаписи);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Загрузить версию отчета из файла
|
||||
//
|
||||
// Параметры:
|
||||
// Хранилище - СправочникСсылка.ХранилищаКонфигураций - ссылка на хранилище
|
||||
// ИмяФайлаОтчета - Строка - Имя файла отчета
|
||||
Процедура ЗагрузитьВерсииИзОтчета(Знач Хранилище, ИмяФайлаОтчета) Экспорт
|
||||
|
||||
Файл = Новый Файл(ИмяФайлаОтчета);
|
||||
Если НЕ Файл.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Отчет = Новый ТабличныйДокумент;
|
||||
Отчет.Прочитать(ИмяФайлаОтчета);
|
||||
|
||||
ВерсииХранилища = Новый Массив;
|
||||
|
||||
ПоляВерсии = Новый Соответствие;
|
||||
ПоляВерсии.Вставить("Версия:", "Версия");
|
||||
ПоляВерсии.Вставить("Дата создания:", "ДатаСоздания");
|
||||
ПоляВерсии.Вставить("Время создания:", "ВремяСоздания");
|
||||
ПоляВерсии.Вставить("Пользователь:", "Пользователь");
|
||||
ПоляВерсии.Вставить("Комментарий:", "Комментарий");
|
||||
ПоляВерсии.Вставить("Добавлены:", "Добавлены");
|
||||
ПоляВерсии.Вставить("Изменены:", "Изменены");
|
||||
ПоляВерсии.Вставить("Удалены:", "Удалены");
|
||||
ПоляВерсии.Вставить("Version:", "Версия");
|
||||
ПоляВерсии.Вставить("Creation date:", "ДатаСоздания");
|
||||
ПоляВерсии.Вставить("Creation time:", "ВремяСоздания");
|
||||
ПоляВерсии.Вставить("User:", "Пользователь");
|
||||
ПоляВерсии.Вставить("Comment:", "Комментарий");
|
||||
ПоляВерсии.Вставить("Added:", "Добавлены");
|
||||
ПоляВерсии.Вставить("Changed:", "Изменены");
|
||||
ПоляВерсии.Вставить("Deleted:", "Удалены");
|
||||
|
||||
КолонкаПоиска = Отчет.Область("C1");
|
||||
ОбластьСтроки = Неопределено;
|
||||
ОбластьСтроки = Отчет.НайтиТекст("Версия:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает структуру последней версии хранилища
|
||||
//
|
||||
// Параметры:
|
||||
// Хранилище - СправочникСсылка.ХранилищаКонфигураций - ссылка на хранилище
|
||||
// Возвращаемое значение:
|
||||
// Структура - номер последней версии и ссылка на версию
|
||||
Функция ПоследняяВерсияХранилища(Знач Хранилище) Экспорт
|
||||
|
||||
Результат = Новый Структура("Версия, Ссылка", 0, Неопределено);
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ВложенныйЗапрос.Версия КАК Версия,
|
||||
| ЕСТЬNULL(ВерсииХранилища.Ссылка, ЗНАЧЕНИЕ(Справочник.ВерсииХранилища.ПустаяСсылка)) КАК Ссылка
|
||||
|ИЗ
|
||||
| (ВЫБРАТЬ
|
||||
| ЕСТЬNULL(МАКСИМУМ(ВерсииХранилища.Код), 0) КАК Версия
|
||||
| ИЗ
|
||||
| Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
| ГДЕ
|
||||
| ВерсииХранилища.Владелец = &Хранилище) КАК ВложенныйЗапрос
|
||||
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
| ПО ВложенныйЗапрос.Версия = ВерсииХранилища.Код
|
||||
| И (ВерсииХранилища.Владелец = &Хранилище)";
|
||||
|
||||
Запрос.УстановитьПараметр("Хранилище", Хранилище);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||
|
||||
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||
ЗаполнитьЗначенияСвойств(Результат, ВыборкаДетальныеЗаписи);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Загрузить версию отчета из файла
|
||||
//
|
||||
// Параметры:
|
||||
// Хранилище - СправочникСсылка.ХранилищаКонфигураций - ссылка на хранилище
|
||||
// ИмяФайлаОтчета - Строка - Имя файла отчета
|
||||
Процедура ЗагрузитьВерсииИзОтчета(Знач Хранилище, ИмяФайлаОтчета) Экспорт
|
||||
|
||||
Файл = Новый Файл(ИмяФайлаОтчета);
|
||||
Если НЕ Файл.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Отчет = Новый ТабличныйДокумент;
|
||||
Отчет.Прочитать(ИмяФайлаОтчета);
|
||||
|
||||
ВерсииХранилища = Новый Массив;
|
||||
|
||||
ПоляВерсии = Новый Соответствие;
|
||||
ПоляВерсии.Вставить("Версия:", "Версия");
|
||||
ПоляВерсии.Вставить("Дата создания:", "ДатаСоздания");
|
||||
ПоляВерсии.Вставить("Время создания:", "ВремяСоздания");
|
||||
ПоляВерсии.Вставить("Пользователь:", "Пользователь");
|
||||
ПоляВерсии.Вставить("Комментарий:", "Комментарий");
|
||||
ПоляВерсии.Вставить("Добавлены:", "Добавлены");
|
||||
ПоляВерсии.Вставить("Изменены:", "Изменены");
|
||||
ПоляВерсии.Вставить("Удалены:", "Удалены");
|
||||
ПоляВерсии.Вставить("Version:", "Версия");
|
||||
ПоляВерсии.Вставить("Creation date:", "ДатаСоздания");
|
||||
ПоляВерсии.Вставить("Creation time:", "ВремяСоздания");
|
||||
ПоляВерсии.Вставить("User:", "Пользователь");
|
||||
ПоляВерсии.Вставить("Comment:", "Комментарий");
|
||||
ПоляВерсии.Вставить("Added:", "Добавлены");
|
||||
ПоляВерсии.Вставить("Changed:", "Изменены");
|
||||
ПоляВерсии.Вставить("Deleted:", "Удалены");
|
||||
|
||||
КолонкаПоиска = Отчет.Область("C1");
|
||||
ОбластьСтроки = Неопределено;
|
||||
ОбластьСтроки = Отчет.НайтиТекст("Версия:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
Если ОбластьСтроки = Неопределено Тогда
|
||||
ОбластьСтроки = Отчет.НайтиТекст("Version:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
КонецЕсли;
|
||||
Пока ОбластьСтроки <> Неопределено Цикл
|
||||
|
||||
ВерсияХранилища = Новый Структура("Версия, ДатаСоздания, ВремяСоздания, Пользователь, Комментарий, Добавлены, Изменены, Удалены", "", "", "", "", "", Новый Массив, Новый Массив, Новый Массив);
|
||||
|
||||
СтрокаНачалаВерсии = ОбластьСтроки.Верх;
|
||||
ОбластьСтрокиНаРусском = Отчет.НайтиТекст("Версия:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
Если ОбластьСтрокиНаРусском = Неопределено Тогда
|
||||
ОбластьСтроки = Отчет.НайтиТекст("Version:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
Иначе
|
||||
ОбластьСтроки = ОбластьСтрокиНаРусском;
|
||||
КонецЕсли;
|
||||
Если ОбластьСтроки = Неопределено Тогда
|
||||
|
||||
// Это последняя версия в файле, получаем конец документа
|
||||
СтрокаОкончанияВерсии = Отчет.ВысотаТаблицы;
|
||||
|
||||
Иначе
|
||||
|
||||
СтрокаОкончанияВерсии = ОбластьСтроки.Верх-1;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИмяТекущегоМассиваСтрок = "";
|
||||
|
||||
Пока СтрокаНачалаВерсии <= СтрокаОкончанияВерсии Цикл
|
||||
|
||||
Имя = "R"+Формат(СтрокаНачалаВерсии, "ЧДЦ=; ЧГ=0") + "C1";
|
||||
Ключ = ПоляВерсии.Получить(Отчет.Область(Имя).Текст);
|
||||
Имя = "R"+Формат(СтрокаНачалаВерсии, "ЧДЦ=; ЧГ=0") + "C2";
|
||||
Значение = Отчет.Область(Имя).Текст;
|
||||
Если ЗначениеЗаполнено(Значение) Тогда
|
||||
Если Ключ = Неопределено Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяТекущегоМассиваСтрок) И ЗначениеЗаполнено(Значение) Тогда
|
||||
ВерсияХранилища[ИмяТекущегоМассиваСтрок].Добавить(Значение);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Если ТипЗнч(ВерсияХранилища[Ключ]) = Тип("Массив") Тогда
|
||||
ИмяТекущегоМассиваСтрок = Ключ;
|
||||
ВерсияХранилища[ИмяТекущегоМассиваСтрок].Добавить(Значение);
|
||||
Иначе
|
||||
ВерсияХранилища[Ключ] = Значение;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаНачалаВерсии = СтрокаНачалаВерсии + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ВерсииХранилища.Добавить(ВерсияХранилища);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
// Сохраняем версии
|
||||
Если ВерсииХранилища.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Если в отчете есть пустые пользователи - не загружаем
|
||||
Для Каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Если Не ЗначениеЗаполнено(ВерсияХранилища.Пользователь) Тогда
|
||||
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Некорректный отчет из хранилища'", Метаданные.ОсновнойЯзык.КодЯзыка),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
,
|
||||
,
|
||||
ЗначениеВСтрокуВнутр(Отчет));
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
МассивКодов = Новый Массив;
|
||||
Для каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Версия = Число(ВерсияХранилища.Версия);
|
||||
Если Версия = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
МассивКодов.Добавить(Версия);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если МассивКодов.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
НачатьТранзакцию();
|
||||
|
||||
Попытка
|
||||
|
||||
Блокировка = Новый БлокировкаДанных;
|
||||
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииХранилища");
|
||||
ЭлементБлокировки.УстановитьЗначение("Владелец", Хранилище);
|
||||
Блокировка.Заблокировать();
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ВерсииХранилища.Ссылка,
|
||||
| ВерсииХранилища.Код
|
||||
|ИЗ
|
||||
| Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
|ГДЕ
|
||||
| ВерсииХранилища.Владелец = &Хранилище
|
||||
| И ВерсииХранилища.Код В(&Коды)";
|
||||
|
||||
Запрос.УстановитьПараметр("Коды", МассивКодов);
|
||||
Запрос.УстановитьПараметр("Хранилище", Хранилище);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ТаблицаВерсий = РезультатЗапроса.Выгрузить();
|
||||
ТаблицаВерсий.Индексы.Добавить("Код");
|
||||
|
||||
Для каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Версия = Число(ВерсияХранилища.Версия);
|
||||
Если Версия = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
НайденнаяСтрока = ТаблицаВерсий.Найти(Версия, "Код");
|
||||
Если НайденнаяСтрока = Неопределено Тогда
|
||||
|
||||
Объект = Справочники.ВерсииХранилища.СоздатьЭлемент();
|
||||
|
||||
Иначе
|
||||
|
||||
Объект = НайденнаяСтрока.Ссылка.ПолучитьОбъект();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Объект.Владелец = Хранилище;
|
||||
Объект.Код = Версия;
|
||||
|
||||
Попытка
|
||||
ВремяСоздания = СтрЗаменить(ВерсияХранилища.ВремяСоздания, ":", "");
|
||||
Если СтрДлина(ВремяСоздания) = 5 Тогда
|
||||
ВремяСоздания = "0" + ВремяСоздания;
|
||||
КонецЕсли;
|
||||
Объект.ДатаСоздания = Дата(Прав(СокрЛП(ВерсияХранилища.ДатаСоздания), 4) + Сред(ВерсияХранилища.ДатаСоздания,4,2) + Лев(ВерсияХранилища.ДатаСоздания, 2) + ВремяСоздания);
|
||||
Исключение
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Объект.Пользователь = ВерсияХранилища.Пользователь;
|
||||
Объект.Комментарий = ВерсияХранилища.Комментарий;
|
||||
|
||||
Объект.Состав.Очистить();
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Добавлены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Добавлено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Изменены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Изменено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Удалены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Удалено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Объект.Записать();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗафиксироватьТранзакцию();
|
||||
|
||||
Исключение
|
||||
ОтменитьТранзакцию();
|
||||
|
||||
ТекстОшибки = ОписаниеОшибки();
|
||||
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Загрузка версий хранилища конфигурации'", Метаданные.ОсновнойЯзык.КодЯзыка),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
Метаданные.Справочники.ХранилищаКонфигураций,
|
||||
Хранилище,
|
||||
ТекстОшибки);
|
||||
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Устанавливает новое состояние для версии хранилища
|
||||
// Параметры:
|
||||
// ВерсияХранилища - СправочникСсылка.ВерсииХранилища - Ссылка на версию
|
||||
// Состояние - ПеречислениеСсылка.СостоянияВерсии - новое состояние версии
|
||||
Процедура УстановитьСостояние(Знач ВерсияХранилища, Знач Состояние) Экспорт
|
||||
|
||||
Объект = ВерсияХранилища.ПолучитьОбъект();
|
||||
|
||||
Если Объект <> Неопределено И Объект.Состояние <> Состояние Тогда
|
||||
Объект.Состояние = Состояние;
|
||||
Объект.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
КонецЕсли;
|
||||
Пока ОбластьСтроки <> Неопределено Цикл
|
||||
|
||||
ВерсияХранилища = Новый Структура("Версия, ДатаСоздания, ВремяСоздания, Пользователь, Комментарий, Добавлены, Изменены, Удалены", "", "", "", "", "", Новый Массив, Новый Массив, Новый Массив);
|
||||
|
||||
СтрокаНачалаВерсии = ОбластьСтроки.Верх;
|
||||
ОбластьСтрокиНаРусском = Отчет.НайтиТекст("Версия:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
Если ОбластьСтрокиНаРусском = Неопределено Тогда
|
||||
ОбластьСтроки = Отчет.НайтиТекст("Version:", ОбластьСтроки, КолонкаПоиска, Ложь, Истина, Истина, Истина);
|
||||
Иначе
|
||||
ОбластьСтроки = ОбластьСтрокиНаРусском;
|
||||
КонецЕсли;
|
||||
Если ОбластьСтроки = Неопределено Тогда
|
||||
|
||||
// Это последняя версия в файле, получаем конец документа
|
||||
СтрокаОкончанияВерсии = Отчет.ВысотаТаблицы;
|
||||
|
||||
Иначе
|
||||
|
||||
СтрокаОкончанияВерсии = ОбластьСтроки.Верх-1;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИмяТекущегоМассиваСтрок = "";
|
||||
|
||||
Пока СтрокаНачалаВерсии <= СтрокаОкончанияВерсии Цикл
|
||||
|
||||
Имя = "R"+Формат(СтрокаНачалаВерсии, "ЧДЦ=; ЧГ=0") + "C1";
|
||||
Ключ = ПоляВерсии.Получить(Отчет.Область(Имя).Текст);
|
||||
Имя = "R"+Формат(СтрокаНачалаВерсии, "ЧДЦ=; ЧГ=0") + "C2";
|
||||
Значение = Отчет.Область(Имя).Текст;
|
||||
Если ЗначениеЗаполнено(Значение) Тогда
|
||||
Если Ключ = Неопределено Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяТекущегоМассиваСтрок) И ЗначениеЗаполнено(Значение) Тогда
|
||||
ВерсияХранилища[ИмяТекущегоМассиваСтрок].Добавить(Значение);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Если ТипЗнч(ВерсияХранилища[Ключ]) = Тип("Массив") Тогда
|
||||
ИмяТекущегоМассиваСтрок = Ключ;
|
||||
ВерсияХранилища[ИмяТекущегоМассиваСтрок].Добавить(Значение);
|
||||
Иначе
|
||||
ВерсияХранилища[Ключ] = Значение;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаНачалаВерсии = СтрокаНачалаВерсии + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ВерсииХранилища.Добавить(ВерсияХранилища);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
// Сохраняем версии
|
||||
Если ВерсииХранилища.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Если в отчете есть пустые пользователи - не загружаем
|
||||
Для Каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Если Не ЗначениеЗаполнено(ВерсияХранилища.Пользователь) Тогда
|
||||
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Некорректный отчет из хранилища'", Метаданные.ОсновнойЯзык.КодЯзыка),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
,
|
||||
,
|
||||
ЗначениеВСтрокуВнутр(Отчет));
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
МассивКодов = Новый Массив;
|
||||
Для каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Версия = Число(ВерсияХранилища.Версия);
|
||||
Если Версия = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
МассивКодов.Добавить(Версия);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если МассивКодов.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
НачатьТранзакцию();
|
||||
|
||||
Попытка
|
||||
|
||||
Блокировка = Новый БлокировкаДанных;
|
||||
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииХранилища");
|
||||
ЭлементБлокировки.УстановитьЗначение("Владелец", Хранилище);
|
||||
Блокировка.Заблокировать();
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ВерсииХранилища.Ссылка,
|
||||
| ВерсииХранилища.Код
|
||||
|ИЗ
|
||||
| Справочник.ВерсииХранилища КАК ВерсииХранилища
|
||||
|ГДЕ
|
||||
| ВерсииХранилища.Владелец = &Хранилище
|
||||
| И ВерсииХранилища.Код В(&Коды)";
|
||||
|
||||
Запрос.УстановитьПараметр("Коды", МассивКодов);
|
||||
Запрос.УстановитьПараметр("Хранилище", Хранилище);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ТаблицаВерсий = РезультатЗапроса.Выгрузить();
|
||||
ТаблицаВерсий.Индексы.Добавить("Код");
|
||||
|
||||
Для каждого ВерсияХранилища Из ВерсииХранилища Цикл
|
||||
Версия = Число(ВерсияХранилища.Версия);
|
||||
Если Версия = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
НайденнаяСтрока = ТаблицаВерсий.Найти(Версия, "Код");
|
||||
Если НайденнаяСтрока = Неопределено Тогда
|
||||
|
||||
Объект = Справочники.ВерсииХранилища.СоздатьЭлемент();
|
||||
|
||||
Иначе
|
||||
|
||||
Объект = НайденнаяСтрока.Ссылка.ПолучитьОбъект();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Объект.Владелец = Хранилище;
|
||||
Объект.Код = Версия;
|
||||
|
||||
Попытка
|
||||
ВремяСоздания = СтрЗаменить(ВерсияХранилища.ВремяСоздания, ":", "");
|
||||
Если СтрДлина(ВремяСоздания) = 5 Тогда
|
||||
ВремяСоздания = "0" + ВремяСоздания;
|
||||
КонецЕсли;
|
||||
Объект.ДатаСоздания = Дата(Прав(СокрЛП(ВерсияХранилища.ДатаСоздания), 4) + Сред(ВерсияХранилища.ДатаСоздания,4,2) + Лев(ВерсияХранилища.ДатаСоздания, 2) + ВремяСоздания);
|
||||
Исключение
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Объект.Пользователь = ВерсияХранилища.Пользователь;
|
||||
Объект.Комментарий = ВерсияХранилища.Комментарий;
|
||||
|
||||
Объект.Состав.Очистить();
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Добавлены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Добавлено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Изменены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Изменено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Для каждого ОбъектМетаданных Из ВерсияХранилища.Удалены Цикл
|
||||
|
||||
НоваяСтрока = Объект.Состав.Добавить();
|
||||
НоваяСтрока.Тип = "Удалено";
|
||||
НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных;
|
||||
|
||||
КонецЦикла;
|
||||
Объект.Записать();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗафиксироватьТранзакцию();
|
||||
|
||||
Исключение
|
||||
ОтменитьТранзакцию();
|
||||
|
||||
ТекстОшибки = ОписаниеОшибки();
|
||||
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Загрузка версий хранилища конфигурации'", Метаданные.ОсновнойЯзык.КодЯзыка),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
Метаданные.Справочники.ХранилищаКонфигураций,
|
||||
Хранилище,
|
||||
ТекстОшибки);
|
||||
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Устанавливает новое состояние для версии хранилища
|
||||
// Параметры:
|
||||
// ВерсияХранилища - СправочникСсылка.ВерсииХранилища - Ссылка на версию
|
||||
// Состояние - ПеречислениеСсылка.СостоянияВерсии - новое состояние версии
|
||||
Процедура УстановитьСостояние(Знач ВерсияХранилища, Знач Состояние) Экспорт
|
||||
|
||||
Объект = ВерсияХранилища.ПолучитьОбъект();
|
||||
|
||||
Если Объект <> Неопределено И Объект.Состояние <> Состояние Тогда
|
||||
Объект.Состояние = Состояние;
|
||||
Объект.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
@ -1,173 +1,179 @@
|
||||
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
УстановитьУсловноеОформление();
|
||||
|
||||
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КаталогВыгрузкиВерсий = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Владелец, "КаталогВыгрузкиВерсий");
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаКонвертацииХранилища(КаталогВыгрузкиВерсий);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
|
||||
|
||||
Если НЕ ВыгружатьВОтдельныйКаталог Тогда
|
||||
|
||||
ТекущийОбъект.КаталогВыгрузкиВерсий = "";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Использование", РегламентноеЗаданиеИспользуется);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РегламентноеЗаданиеИспользуетсяПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
ДиалогРасписания.Показать(Новый ОписаниеОповещения("РасписаниеСтрокойНажатиеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатиеЗавершение(РасписаниеОтвет, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если РасписаниеОтвет <> Неопределено Тогда
|
||||
|
||||
Модифицированность = Истина;
|
||||
Расписание = РасписаниеОтвет;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаЛогаОткрытие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
Если Не ЗначениеЗаполнено(ИмяФайлаЛога) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Новый ТекстовыйДокумент();
|
||||
|
||||
ИмяФайла = "";
|
||||
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаЛога, Текст, ИмяФайла);
|
||||
|
||||
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьУсловноеОформление()
|
||||
|
||||
УсловноеОформление.Элементы.Очистить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииСозданииНаСервере()
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
Задание = РегламентныеЗаданияСервер.Задание(Объект.РегламентноеЗадание);
|
||||
Если Задание <> Неопределено Тогда
|
||||
Расписание = Задание.Расписание;
|
||||
РегламентноеЗаданиеИспользуется = Задание.Использование;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
Иначе
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
РасписаниеСтрокой = РасписаниеСтрокой = Строка(Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
ВыгружатьВОтдельныйКаталог = ЗначениеЗаполнено(Объект.КаталогВыгрузкиВерсий);
|
||||
|
||||
ДругойПользователь = ЗначениеЗаполнено(Объект.ИмяПользователяХранилища);
|
||||
|
||||
УстановитьВидимость();
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьВидимость()
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиентеНаСервереБезКонтекста
|
||||
Процедура УстановитьДоступность(Форма)
|
||||
|
||||
Если Форма.РегламентноеЗаданиеИспользуется Тогда
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Истина;
|
||||
|
||||
Иначе
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Форма.Элементы.КаталогВыгрузкиВерсий.Доступность = Форма.ВыгружатьВОтдельныйКаталог;
|
||||
Форма.Элементы.ИмяПользователяХранилища.Доступность = Форма.ДругойПользователь;
|
||||
Форма.Элементы.ПарольПользователяХранилища.Доступность = Форма.ДругойПользователь;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
УстановитьУсловноеОформление();
|
||||
|
||||
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыгружатьВОтдельныйКаталогПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ДругойПользовательПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ПрочитатьТекстовыйФайлНаСервере(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы = Ложь)
|
||||
|
||||
ОбщегоНазначения.ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КаталогВыгрузкиВерсий = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Владелец, "КаталогВыгрузкиВерсий");
|
||||
ИмяФайлаЛога = КонвертацияХранилища.ИмяФайлаЛогаКонвертацииХранилища(КаталогВыгрузкиВерсий);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
|
||||
|
||||
Если НЕ ВыгружатьВОтдельныйКаталог Тогда
|
||||
|
||||
ТекущийОбъект.КаталогВыгрузкиВерсий = "";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Использование", РегламентноеЗаданиеИспользуется);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РегламентноеЗаданиеИспользуетсяПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
ДиалогРасписания.Показать(Новый ОписаниеОповещения("РасписаниеСтрокойНажатиеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатиеЗавершение(РасписаниеОтвет, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если РасписаниеОтвет <> Неопределено Тогда
|
||||
|
||||
Модифицированность = Истина;
|
||||
Расписание = РасписаниеОтвет;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаЛогаОткрытие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
Если Не ЗначениеЗаполнено(ИмяФайлаЛога) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Новый ТекстовыйДокумент();
|
||||
|
||||
ИмяФайла = "";
|
||||
ПрочитатьТекстовыйФайлНаСервере(ИмяФайлаЛога, Текст, ИмяФайла);
|
||||
|
||||
Текст.Показать(ИмяФайла, ИмяФайла);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьУсловноеОформление()
|
||||
|
||||
УсловноеОформление.Элементы.Очистить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииСозданииНаСервере()
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
Задание = РегламентныеЗаданияСервер.Задание(Объект.РегламентноеЗадание);
|
||||
Если Задание <> Неопределено Тогда
|
||||
Расписание = Задание.Расписание;
|
||||
РегламентноеЗаданиеИспользуется = Задание.Использование;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
Иначе
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
РасписаниеСтрокой = РасписаниеСтрокой = Строка(Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
ВыгружатьВОтдельныйКаталог = ЗначениеЗаполнено(Объект.КаталогВыгрузкиВерсий);
|
||||
|
||||
ДругойПользователь = ЗначениеЗаполнено(Объект.ИмяПользователяХранилища);
|
||||
|
||||
УстановитьВидимость();
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьВидимость()
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиентеНаСервереБезКонтекста
|
||||
Процедура УстановитьДоступность(Форма)
|
||||
|
||||
Если Форма.РегламентноеЗаданиеИспользуется Тогда
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Истина;
|
||||
|
||||
Иначе
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Форма.Элементы.КаталогВыгрузкиВерсий.Доступность = Форма.ВыгружатьВОтдельныйКаталог;
|
||||
Форма.Элементы.ИмяПользователяХранилища.Доступность = Форма.ДругойПользователь;
|
||||
Форма.Элементы.ПарольПользователяХранилища.Доступность = Форма.ДругойПользователь;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыгружатьВОтдельныйКаталогПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ДругойПользовательПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ПрочитатьТекстовыйФайлНаСервере(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы = Ложь)
|
||||
|
||||
ОбщегоНазначения.ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, КодировкаСистемы);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,116 +1,123 @@
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередЗаписью(Отказ)
|
||||
|
||||
Если Отказ Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Наименование = Адрес;
|
||||
|
||||
// Создание регламентного задания (получение уникального идентификатора)
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
|
||||
Задание = РегламентныеЗаданияСервер.Задание(РегламентноеЗадание);
|
||||
Если Задание = Неопределено Тогда
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ВыгрузкаВерсииИзКопииХранилища);
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
ПараметрыЗадания.Вставить("Расписание", Новый РасписаниеРегламентногоЗадания);
|
||||
ПараметрыЗадания.Вставить("Наименование", НСтр("ru = 'Выгрузка версий из копии'") + ": " + СокрЛП(Наименование));
|
||||
Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
|
||||
|
||||
РегламентноеЗадание = РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(КаталогВыгрузкиВерсий) Тогда
|
||||
|
||||
КаталогВыгрузкиВерсий = СокрЛП(КаталогВыгрузкиВерсий);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ДополнительныеСвойства.Вставить("Задание",Задание);
|
||||
УстановитьПривилегированныйРежим(Ложь);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриКопировании(ОбъектКопирования)
|
||||
|
||||
РегламентноеЗадание = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередУдалением(Отказ)
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РегламентныеЗаданияСервер.УдалитьЗадание(РегламентноеЗадание);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриЗаписи(Отказ)
|
||||
|
||||
Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ДополнительныеСвойства.Свойство("Задание") Тогда
|
||||
Задание = ДополнительныеСвойства.Задание;
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
|
||||
// Расписание устанавливается в форме элемента
|
||||
Если ДополнительныеСвойства.Свойство("Расписание")
|
||||
И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания")
|
||||
И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) Тогда
|
||||
ПараметрыЗадания.Вставить("Расписание", ДополнительныеСвойства.Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
// Использование устанавливается в форме элемента
|
||||
Если ПометкаУдаления И Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
|
||||
ИначеЕсли ДополнительныеСвойства.Свойство("Использование")
|
||||
И ДополнительныеСвойства.Использование <> Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", ДополнительныеСвойства.Использование);
|
||||
|
||||
КонецЕсли;
|
||||
НаименованиеЗадания = НСтр("ru = 'Выгрузка версий из копии'") + ": ";
|
||||
|
||||
НаименованиеЗадания = НаименованиеЗадания + СокрЛП(Наименование);
|
||||
ПараметрыЗадания.Вставить("Наименование", НаименованиеЗадания);
|
||||
ПараметрыЗадания.Вставить("Ключ", Строка(Ссылка.УникальныйИдентификатор()));
|
||||
|
||||
Если Задание.Параметры.Количество() <> 1 ИЛИ Задание.Параметры[0] <> Ссылка Тогда
|
||||
МассивПараметров = Новый Массив;
|
||||
МассивПараметров.Добавить(Ссылка);
|
||||
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередЗаписью(Отказ)
|
||||
|
||||
Если Отказ Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Наименование = Адрес;
|
||||
|
||||
// Создание регламентного задания (получение уникального идентификатора)
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
|
||||
Задание = РегламентныеЗаданияСервер.Задание(РегламентноеЗадание);
|
||||
Если Задание = Неопределено Тогда
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ВыгрузкаВерсииИзКопииХранилища);
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
ПараметрыЗадания.Вставить("Расписание", Новый РасписаниеРегламентногоЗадания);
|
||||
ПараметрыЗадания.Вставить("Наименование", НСтр("ru = 'Выгрузка версий из копии'") + ": " + СокрЛП(Наименование));
|
||||
Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
|
||||
|
||||
РегламентноеЗадание = РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(КаталогВыгрузкиВерсий) Тогда
|
||||
|
||||
КаталогВыгрузкиВерсий = СокрЛП(КаталогВыгрузкиВерсий);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ДополнительныеСвойства.Вставить("Задание",Задание);
|
||||
УстановитьПривилегированныйРежим(Ложь);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриКопировании(ОбъектКопирования)
|
||||
|
||||
РегламентноеЗадание = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередУдалением(Отказ)
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РегламентныеЗаданияСервер.УдалитьЗадание(РегламентноеЗадание);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриЗаписи(Отказ)
|
||||
|
||||
Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ДополнительныеСвойства.Свойство("Задание") Тогда
|
||||
Задание = ДополнительныеСвойства.Задание;
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
|
||||
// Расписание устанавливается в форме элемента
|
||||
Если ДополнительныеСвойства.Свойство("Расписание")
|
||||
И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания")
|
||||
И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) Тогда
|
||||
ПараметрыЗадания.Вставить("Расписание", ДополнительныеСвойства.Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
// Использование устанавливается в форме элемента
|
||||
Если ПометкаУдаления И Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
|
||||
ИначеЕсли ДополнительныеСвойства.Свойство("Использование")
|
||||
И ДополнительныеСвойства.Использование <> Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", ДополнительныеСвойства.Использование);
|
||||
|
||||
КонецЕсли;
|
||||
НаименованиеЗадания = НСтр("ru = 'Выгрузка версий из копии'") + ": ";
|
||||
|
||||
НаименованиеЗадания = НаименованиеЗадания + СокрЛП(Наименование);
|
||||
ПараметрыЗадания.Вставить("Наименование", НаименованиеЗадания);
|
||||
ПараметрыЗадания.Вставить("Ключ", Строка(Ссылка.УникальныйИдентификатор()));
|
||||
|
||||
Если Задание.Параметры.Количество() <> 1 ИЛИ Задание.Параметры[0] <> Ссылка Тогда
|
||||
МассивПараметров = Новый Массив;
|
||||
МассивПараметров.Добавить(Ссылка);
|
||||
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
@ -1,3 +1,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
|
||||
|
@ -1,3 +1,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
|
@ -1,129 +1,136 @@
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
УстановитьУсловноеОформление();
|
||||
|
||||
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
|
||||
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Использование", РегламентноеЗаданиеИспользуется);
|
||||
Если ТипОчереди = "" Тогда
|
||||
ТекущийОбъект.Хранилище = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РегламентноеЗаданиеИспользуетсяПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
ДиалогРасписания.Показать(Новый ОписаниеОповещения("РасписаниеСтрокойНажатиеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатиеЗавершение(РасписаниеОтвет, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если РасписаниеОтвет <> Неопределено Тогда
|
||||
|
||||
Модифицированность = Истина;
|
||||
Расписание = РасписаниеОтвет;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ТипОчередиПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьУсловноеОформление()
|
||||
|
||||
УсловноеОформление.Элементы.Очистить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииСозданииНаСервере()
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
Задание = РегламентныеЗаданияСервер.Задание(Объект.РегламентноеЗадание);
|
||||
Если Задание <> Неопределено Тогда
|
||||
Расписание = Задание.Расписание;
|
||||
РегламентноеЗаданиеИспользуется = Задание.Использование;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
Иначе
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
РасписаниеСтрокой = РасписаниеСтрокой = Строка(Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Объект.Хранилище) Тогда
|
||||
ТипОчереди = "Хранилище";
|
||||
Иначе
|
||||
ТипОчереди = "";
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьВидимость();
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьВидимость()
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиентеНаСервереБезКонтекста
|
||||
Процедура УстановитьДоступность(Форма)
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Форма.РегламентноеЗаданиеИспользуется;
|
||||
|
||||
Форма.Элементы.Хранилище.Доступность = Форма.ТипОчереди = "Хранилище";
|
||||
Форма.Элементы.ГруппаОграниченийНомеровВерсий.Доступность = Форма.ТипОчереди = "Хранилище";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
УстановитьУсловноеОформление();
|
||||
|
||||
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
|
||||
|
||||
ПриЧтенииСозданииНаСервере();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
|
||||
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
|
||||
ТекущийОбъект.ДополнительныеСвойства.Вставить("Использование", РегламентноеЗаданиеИспользуется);
|
||||
Если ТипОчереди = "" Тогда
|
||||
ТекущийОбъект.Хранилище = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РегламентноеЗаданиеИспользуетсяПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатие(Элемент, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
ДиалогРасписания.Показать(Новый ОписаниеОповещения("РасписаниеСтрокойНажатиеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура РасписаниеСтрокойНажатиеЗавершение(РасписаниеОтвет, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если РасписаниеОтвет <> Неопределено Тогда
|
||||
|
||||
Модифицированность = Истина;
|
||||
Расписание = РасписаниеОтвет;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ТипОчередиПриИзменении(Элемент)
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьУсловноеОформление()
|
||||
|
||||
УсловноеОформление.Элементы.Очистить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриЧтенииСозданииНаСервере()
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
Задание = РегламентныеЗаданияСервер.Задание(Объект.РегламентноеЗадание);
|
||||
Если Задание <> Неопределено Тогда
|
||||
Расписание = Задание.Расписание;
|
||||
РегламентноеЗаданиеИспользуется = Задание.Использование;
|
||||
РасписаниеСтрокой = Строка(Расписание);
|
||||
Иначе
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
РасписаниеСтрокой = РасписаниеСтрокой = Строка(Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Объект.Хранилище) Тогда
|
||||
ТипОчереди = "Хранилище";
|
||||
Иначе
|
||||
ТипОчереди = "";
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьВидимость();
|
||||
|
||||
УстановитьДоступность(ЭтаФорма);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура УстановитьВидимость()
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиентеНаСервереБезКонтекста
|
||||
Процедура УстановитьДоступность(Форма)
|
||||
|
||||
Форма.Элементы.РасписаниеСтрокой.Доступность = Форма.РегламентноеЗаданиеИспользуется;
|
||||
|
||||
Форма.Элементы.Хранилище.Доступность = Форма.ТипОчереди = "Хранилище";
|
||||
Форма.Элементы.ГруппаОграниченийНомеровВерсий.Доступность = Форма.ТипОчереди = "Хранилище";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,114 +1,121 @@
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередЗаписью(Отказ)
|
||||
|
||||
Если Отказ Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Создание регламентного задания (получение уникального идентификатора)
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
|
||||
Задание = РегламентныеЗаданияСервер.Задание(РегламентноеЗадание);
|
||||
Если Задание = Неопределено Тогда
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОбработкаОчереди);
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
ПараметрыЗадания.Вставить("Расписание", Новый РасписаниеРегламентногоЗадания);
|
||||
ПараметрыЗадания.Вставить("Наименование", НСтр("ru = 'Обработка очереди'") + ": " + СокрЛП(Наименование));
|
||||
Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
|
||||
|
||||
РегламентноеЗадание = РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ДополнительныеСвойства.Вставить("Задание",Задание);
|
||||
УстановитьПривилегированныйРежим(Ложь);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Хранилище) Тогда
|
||||
ПрефиксНачалаНомераВерсии = 0;
|
||||
ПрефиксОкончанияНомераВерсии = 0;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриКопировании(ОбъектКопирования)
|
||||
|
||||
РегламентноеЗадание = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередУдалением(Отказ)
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РегламентныеЗаданияСервер.УдалитьЗадание(РегламентноеЗадание);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриЗаписи(Отказ)
|
||||
|
||||
Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ДополнительныеСвойства.Свойство("Задание") Тогда
|
||||
Задание = ДополнительныеСвойства.Задание;
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
|
||||
// Расписание устанавливается в форме элемента
|
||||
Если ДополнительныеСвойства.Свойство("Расписание")
|
||||
И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания")
|
||||
И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) Тогда
|
||||
ПараметрыЗадания.Вставить("Расписание", ДополнительныеСвойства.Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
// Использование устанавливается в форме элемента
|
||||
Если ПометкаУдаления И Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
|
||||
ИначеЕсли ДополнительныеСвойства.Свойство("Использование")
|
||||
И ДополнительныеСвойства.Использование <> Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", ДополнительныеСвойства.Использование);
|
||||
|
||||
КонецЕсли;
|
||||
НаименованиеЗадания = НСтр("ru = 'Обработка очереди'") + ": ";
|
||||
|
||||
НаименованиеЗадания = НаименованиеЗадания + СокрЛП(Наименование);
|
||||
ПараметрыЗадания.Вставить("Наименование", НаименованиеЗадания);
|
||||
ПараметрыЗадания.Вставить("Ключ", Строка(Ссылка.УникальныйИдентификатор()));
|
||||
|
||||
Если Задание.Параметры.Количество() <> 1 ИЛИ Задание.Параметры[0] <> Ссылка Тогда
|
||||
МассивПараметров = Новый Массив;
|
||||
МассивПараметров.Добавить(Ссылка);
|
||||
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередЗаписью(Отказ)
|
||||
|
||||
Если Отказ Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Создание регламентного задания (получение уникального идентификатора)
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
|
||||
Задание = РегламентныеЗаданияСервер.Задание(РегламентноеЗадание);
|
||||
Если Задание = Неопределено Тогда
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОбработкаОчереди);
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
ПараметрыЗадания.Вставить("Расписание", Новый РасписаниеРегламентногоЗадания);
|
||||
ПараметрыЗадания.Вставить("Наименование", НСтр("ru = 'Обработка очереди'") + ": " + СокрЛП(Наименование));
|
||||
Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
|
||||
|
||||
РегламентноеЗадание = РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ДополнительныеСвойства.Вставить("Задание",Задание);
|
||||
УстановитьПривилегированныйРежим(Ложь);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Хранилище) Тогда
|
||||
ПрефиксНачалаНомераВерсии = 0;
|
||||
ПрефиксОкончанияНомераВерсии = 0;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриКопировании(ОбъектКопирования)
|
||||
|
||||
РегламентноеЗадание = Неопределено;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередУдалением(Отказ)
|
||||
|
||||
Если ОбменДанными.Загрузка Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
РегламентныеЗаданияСервер.УдалитьЗадание(РегламентноеЗадание);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПриЗаписи(Отказ)
|
||||
|
||||
Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ДополнительныеСвойства.Свойство("Задание") Тогда
|
||||
Задание = ДополнительныеСвойства.Задание;
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗадания = Новый Структура;
|
||||
|
||||
// Расписание устанавливается в форме элемента
|
||||
Если ДополнительныеСвойства.Свойство("Расписание")
|
||||
И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания")
|
||||
И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) Тогда
|
||||
ПараметрыЗадания.Вставить("Расписание", ДополнительныеСвойства.Расписание);
|
||||
КонецЕсли;
|
||||
|
||||
// Использование устанавливается в форме элемента
|
||||
Если ПометкаУдаления И Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", Ложь);
|
||||
|
||||
ИначеЕсли ДополнительныеСвойства.Свойство("Использование")
|
||||
И ДополнительныеСвойства.Использование <> Задание.Использование Тогда
|
||||
|
||||
ПараметрыЗадания.Вставить("Использование", ДополнительныеСвойства.Использование);
|
||||
|
||||
КонецЕсли;
|
||||
НаименованиеЗадания = НСтр("ru = 'Обработка очереди'") + ": ";
|
||||
|
||||
НаименованиеЗадания = НаименованиеЗадания + СокрЛП(Наименование);
|
||||
ПараметрыЗадания.Вставить("Наименование", НаименованиеЗадания);
|
||||
ПараметрыЗадания.Вставить("Ключ", Строка(Ссылка.УникальныйИдентификатор()));
|
||||
|
||||
Если Задание.Параметры.Количество() <> 1 ИЛИ Задание.Параметры[0] <> Ссылка Тогда
|
||||
МассивПараметров = Новый Массив;
|
||||
МассивПараметров.Добавить(Ссылка);
|
||||
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
@ -1,2 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:chm="http://v8.1c.ru/8.2/data/chart" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings">
|
||||
</Settings>
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийТаблицыФормыСписок
|
||||
|
||||
&НаСервереБезКонтекста
|
||||
|
@ -1,3 +1,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
@ -1,260 +1,268 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Поддержка работы длительных серверных операций в веб-клиенте.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Отменяет выполнение фонового задания по переданному идентификатору.
|
||||
//
|
||||
// Параметры:
|
||||
// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
|
||||
//
|
||||
Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
|
||||
Если Задание = Неопределено
|
||||
ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
|
||||
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Задание.Отменить();
|
||||
Исключение
|
||||
// Возможно задание как раз в этот момент закончилось и ошибки нет.
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет состояние фонового задания по переданному идентификатору.
|
||||
// При аварийном завершении задания вызывает исключение.
|
||||
//
|
||||
// Параметры:
|
||||
// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - состояние выполнения задания.
|
||||
//
|
||||
Функция ЗаданиеВыполнено(Знач ИдентификаторЗадания) Экспорт
|
||||
|
||||
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
|
||||
|
||||
Если Задание <> Неопределено
|
||||
И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
ОперацияНеВыполнена = Истина;
|
||||
ПоказатьПолныйТекстОшибки = Ложь;
|
||||
Если Задание = Неопределено Тогда
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , Строка(ИдентификаторЗадания));
|
||||
Иначе
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
|
||||
ОшибкаЗадания = Задание.ИнформацияОбОшибке;
|
||||
Если ОшибкаЗадания <> Неопределено Тогда
|
||||
ПоказатьПолныйТекстОшибки = Истина;
|
||||
КонецЕсли;
|
||||
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
|
||||
ЗаписьЖурналаРегистрации(
|
||||
НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
,
|
||||
,
|
||||
НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'"));
|
||||
Иначе
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если ПоказатьПолныйТекстОшибки Тогда
|
||||
ТекстОшибки = КраткоеПредставлениеОшибки(ПолучитьИнформациюОбОшибке(Задание.ИнформацияОбОшибке));
|
||||
ВызватьИсключение(ТекстОшибки);
|
||||
ИначеЕсли ОперацияНеВыполнена Тогда
|
||||
ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.
|
||||
|Подробности см. в Журнале регистрации.'"));
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Регистрирует в сообщениях информацию о ходе выполнения фонового задания.
|
||||
// В дальнейшем эту информацию можно считать с клиента при помощи функции ПрочитатьПрогресс.
|
||||
//
|
||||
// Параметры:
|
||||
// Процент - Число - Необязательный. Процент выполнения.
|
||||
// Текст - Строка - Необязательный. Информация о текущей операции.
|
||||
// ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация,
|
||||
// которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку).
|
||||
//
|
||||
Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ПередаваемоеЗначение = Новый Структура;
|
||||
Если Процент <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("Процент", Процент);
|
||||
КонецЕсли;
|
||||
Если Текст <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("Текст", Текст);
|
||||
КонецЕсли;
|
||||
Если ДополнительныеПараметры <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
|
||||
КонецЕсли;
|
||||
|
||||
ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение);
|
||||
|
||||
Текст = "{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст;
|
||||
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
|
||||
|
||||
ПолучитьСообщенияПользователю(Истина); // Удаление предыдущих сообщений.
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Находит фоновое задание и считывает из его сообщений информацию о ходе выполнения.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Информация о ходе выполнения фонового задания.
|
||||
// Ключи и значения структуры соответствуют именам и значениям параметров процедуры СообщитьПрогресс().
|
||||
//
|
||||
Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт
|
||||
Перем Результат;
|
||||
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
|
||||
Если МассивСообщений = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Количество = МассивСообщений.Количество();
|
||||
|
||||
Для Номер = 1 По Количество Цикл
|
||||
ОбратныйИндекс = Количество - Номер;
|
||||
Сообщение = МассивСообщений[ОбратныйИндекс];
|
||||
|
||||
Если СтрНачинаетсяС(Сообщение.Текст, "{") Тогда
|
||||
Позиция = СтрНайти(Сообщение.Текст, "}");
|
||||
Если Позиция > 2 Тогда
|
||||
ИдентификаторМеханизма = Сред(Сообщение.Текст, 2, Позиция - 2);
|
||||
Если ИдентификаторМеханизма = ИмяПодсистемы() Тогда
|
||||
ПолученныйТекст = Сред(Сообщение.Текст, Позиция + 1);
|
||||
Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПолученныйТекст);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Запускает выполнение процедуры в фоновом задании.
|
||||
Функция ЗапуститьВыполнениеВФонеСлужебный(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры,
|
||||
Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь, ОжидатьЗавершение = Истина) Экспорт
|
||||
|
||||
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы);
|
||||
|
||||
Результат = Новый Структура;
|
||||
Результат.Вставить("АдресХранилища", АдресХранилища);
|
||||
Результат.Вставить("ЗаданиеВыполнено", Ложь);
|
||||
Результат.Вставить("ИдентификаторЗадания", Неопределено);
|
||||
|
||||
Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда
|
||||
НаименованиеЗадания = ИмяЭкспортнойПроцедуры;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЭкспортнойПроцедуры = Новый Массив;
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(Параметры);
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища);
|
||||
|
||||
Если ИспользоватьДополнительноеВременноеХранилище Тогда
|
||||
АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы);
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный);
|
||||
КонецЕсли;
|
||||
|
||||
ЗапущеноЗаданий = 0;
|
||||
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
|
||||
Отбор = Новый Структура;
|
||||
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
|
||||
ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество();
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗапущеноЗаданий > 0 Тогда
|
||||
СтандартныеПодсистемыСервер.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры);
|
||||
Результат.ЗаданиеВыполнено = Истина;
|
||||
Иначе
|
||||
ПараметрыЗадания = Новый Массив;
|
||||
ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры);
|
||||
ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры);
|
||||
ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2);
|
||||
|
||||
Задание = СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры,
|
||||
ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания);
|
||||
|
||||
Если ОжидатьЗавершение Тогда
|
||||
Попытка
|
||||
Задание.ОжидатьЗавершения(ВремяОжидания);
|
||||
Исключение
|
||||
// Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания.
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор);
|
||||
Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИспользоватьДополнительноеВременноеХранилище Тогда
|
||||
Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания)
|
||||
|
||||
Если ТипЗнч(ИдентификаторЗадания) = Тип("Строка") Тогда
|
||||
ИдентификаторЗадания = Новый УникальныйИдентификатор(ИдентификаторЗадания);
|
||||
КонецЕсли;
|
||||
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
|
||||
|
||||
Возврат Задание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке)
|
||||
|
||||
Результат = ИнформацияОбОшибке;
|
||||
Если ИнформацияОбОшибке <> Неопределено Тогда
|
||||
Если ИнформацияОбОшибке.Причина <> Неопределено Тогда
|
||||
Результат = ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке.Причина);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяПодсистемы()
|
||||
Возврат "СтандартныеПодсистемы.ДлительныеОперации";
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Поддержка работы длительных серверных операций в веб-клиенте.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Отменяет выполнение фонового задания по переданному идентификатору.
|
||||
//
|
||||
// Параметры:
|
||||
// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
|
||||
//
|
||||
Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
|
||||
Если Задание = Неопределено
|
||||
ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
|
||||
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
Задание.Отменить();
|
||||
Исключение
|
||||
// Возможно задание как раз в этот момент закончилось и ошибки нет.
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет состояние фонового задания по переданному идентификатору.
|
||||
// При аварийном завершении задания вызывает исключение.
|
||||
//
|
||||
// Параметры:
|
||||
// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - состояние выполнения задания.
|
||||
//
|
||||
Функция ЗаданиеВыполнено(Знач ИдентификаторЗадания) Экспорт
|
||||
|
||||
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
|
||||
|
||||
Если Задание <> Неопределено
|
||||
И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
ОперацияНеВыполнена = Истина;
|
||||
ПоказатьПолныйТекстОшибки = Ложь;
|
||||
Если Задание = Неопределено Тогда
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , Строка(ИдентификаторЗадания));
|
||||
Иначе
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
|
||||
ОшибкаЗадания = Задание.ИнформацияОбОшибке;
|
||||
Если ОшибкаЗадания <> Неопределено Тогда
|
||||
ПоказатьПолныйТекстОшибки = Истина;
|
||||
КонецЕсли;
|
||||
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
|
||||
ЗаписьЖурналаРегистрации(
|
||||
НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка,
|
||||
,
|
||||
,
|
||||
НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'"));
|
||||
Иначе
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если ПоказатьПолныйТекстОшибки Тогда
|
||||
ТекстОшибки = КраткоеПредставлениеОшибки(ПолучитьИнформациюОбОшибке(Задание.ИнформацияОбОшибке));
|
||||
ВызватьИсключение(ТекстОшибки);
|
||||
ИначеЕсли ОперацияНеВыполнена Тогда
|
||||
ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.
|
||||
|Подробности см. в Журнале регистрации.'"));
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Регистрирует в сообщениях информацию о ходе выполнения фонового задания.
|
||||
// В дальнейшем эту информацию можно считать с клиента при помощи функции ПрочитатьПрогресс.
|
||||
//
|
||||
// Параметры:
|
||||
// Процент - Число - Необязательный. Процент выполнения.
|
||||
// Текст - Строка - Необязательный. Информация о текущей операции.
|
||||
// ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация,
|
||||
// которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку).
|
||||
//
|
||||
Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ПередаваемоеЗначение = Новый Структура;
|
||||
Если Процент <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("Процент", Процент);
|
||||
КонецЕсли;
|
||||
Если Текст <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("Текст", Текст);
|
||||
КонецЕсли;
|
||||
Если ДополнительныеПараметры <> Неопределено Тогда
|
||||
ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
|
||||
КонецЕсли;
|
||||
|
||||
ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение);
|
||||
|
||||
Текст = "{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст;
|
||||
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
|
||||
|
||||
ПолучитьСообщенияПользователю(Истина); // Удаление предыдущих сообщений.
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Находит фоновое задание и считывает из его сообщений информацию о ходе выполнения.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Информация о ходе выполнения фонового задания.
|
||||
// Ключи и значения структуры соответствуют именам и значениям параметров процедуры СообщитьПрогресс().
|
||||
//
|
||||
Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт
|
||||
Перем Результат;
|
||||
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
|
||||
Если Задание = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
|
||||
Если МассивСообщений = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Количество = МассивСообщений.Количество();
|
||||
|
||||
Для Номер = 1 По Количество Цикл
|
||||
ОбратныйИндекс = Количество - Номер;
|
||||
Сообщение = МассивСообщений[ОбратныйИндекс];
|
||||
|
||||
Если СтрНачинаетсяС(Сообщение.Текст, "{") Тогда
|
||||
Позиция = СтрНайти(Сообщение.Текст, "}");
|
||||
Если Позиция > 2 Тогда
|
||||
ИдентификаторМеханизма = Сред(Сообщение.Текст, 2, Позиция - 2);
|
||||
Если ИдентификаторМеханизма = ИмяПодсистемы() Тогда
|
||||
ПолученныйТекст = Сред(Сообщение.Текст, Позиция + 1);
|
||||
Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПолученныйТекст);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Запускает выполнение процедуры в фоновом задании.
|
||||
Функция ЗапуститьВыполнениеВФонеСлужебный(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры,
|
||||
Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь, ОжидатьЗавершение = Истина) Экспорт
|
||||
|
||||
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы);
|
||||
|
||||
Результат = Новый Структура;
|
||||
Результат.Вставить("АдресХранилища", АдресХранилища);
|
||||
Результат.Вставить("ЗаданиеВыполнено", Ложь);
|
||||
Результат.Вставить("ИдентификаторЗадания", Неопределено);
|
||||
|
||||
Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда
|
||||
НаименованиеЗадания = ИмяЭкспортнойПроцедуры;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЭкспортнойПроцедуры = Новый Массив;
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(Параметры);
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища);
|
||||
|
||||
Если ИспользоватьДополнительноеВременноеХранилище Тогда
|
||||
АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы);
|
||||
ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный);
|
||||
КонецЕсли;
|
||||
|
||||
ЗапущеноЗаданий = 0;
|
||||
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
|
||||
Отбор = Новый Структура;
|
||||
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
|
||||
ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество();
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗапущеноЗаданий > 0 Тогда
|
||||
СтандартныеПодсистемыСервер.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры);
|
||||
Результат.ЗаданиеВыполнено = Истина;
|
||||
Иначе
|
||||
ПараметрыЗадания = Новый Массив;
|
||||
ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры);
|
||||
ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры);
|
||||
ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2);
|
||||
|
||||
Задание = СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры,
|
||||
ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания);
|
||||
|
||||
Если ОжидатьЗавершение Тогда
|
||||
Попытка
|
||||
Задание.ОжидатьЗавершения(ВремяОжидания);
|
||||
Исключение
|
||||
// Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания.
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор);
|
||||
Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИспользоватьДополнительноеВременноеХранилище Тогда
|
||||
Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания)
|
||||
|
||||
Если ТипЗнч(ИдентификаторЗадания) = Тип("Строка") Тогда
|
||||
ИдентификаторЗадания = Новый УникальныйИдентификатор(ИдентификаторЗадания);
|
||||
КонецЕсли;
|
||||
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
|
||||
|
||||
Возврат Задание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке)
|
||||
|
||||
Результат = ИнформацияОбОшибке;
|
||||
Если ИнформацияОбОшибке <> Неопределено Тогда
|
||||
Если ИнформацияОбОшибке.Причина <> Неопределено Тогда
|
||||
Результат = ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке.Причина);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИмяПодсистемы()
|
||||
Возврат "СтандартныеПодсистемы.ДлительныеОперации";
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,40 +1,48 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Поддержка работы длительных серверных операций в веб-клиенте.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Заполняет структуру параметров значениями по умолчанию.
|
||||
//
|
||||
// Параметры:
|
||||
// ПараметрыОбработчикаОжидания - Структура - заполняется значениями по умолчанию.
|
||||
//
|
||||
//
|
||||
Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт
|
||||
|
||||
ПараметрыОбработчикаОжидания = Новый Структура;
|
||||
ПараметрыОбработчикаОжидания.Вставить("МинимальныйИнтервал", 1);
|
||||
ПараметрыОбработчикаОжидания.Вставить("МаксимальныйИнтервал", 15);
|
||||
ПараметрыОбработчикаОжидания.Вставить("ТекущийИнтервал", 1);
|
||||
ПараметрыОбработчикаОжидания.Вставить("КоэффициентУвеличенияИнтервала", 1.4);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Заполняет структуру параметров новыми расчетными значениями.
|
||||
//
|
||||
// Параметры:
|
||||
// ПараметрыОбработчикаОжидания - Структура - заполняется расчетными значениями.
|
||||
//
|
||||
//
|
||||
Процедура ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт
|
||||
|
||||
ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.ТекущийИнтервал * ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала;
|
||||
Если ПараметрыОбработчикаОжидания.ТекущийИнтервал > ПараметрыОбработчикаОжидания.МаксимальныйИнтервал Тогда
|
||||
ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.МаксимальныйИнтервал;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Поддержка работы длительных серверных операций в веб-клиенте.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Заполняет структуру параметров значениями по умолчанию.
|
||||
//
|
||||
// Параметры:
|
||||
// ПараметрыОбработчикаОжидания - Структура - заполняется значениями по умолчанию.
|
||||
//
|
||||
//
|
||||
Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт
|
||||
|
||||
ПараметрыОбработчикаОжидания = Новый Структура;
|
||||
ПараметрыОбработчикаОжидания.Вставить("МинимальныйИнтервал", 1);
|
||||
ПараметрыОбработчикаОжидания.Вставить("МаксимальныйИнтервал", 15);
|
||||
ПараметрыОбработчикаОжидания.Вставить("ТекущийИнтервал", 1);
|
||||
ПараметрыОбработчикаОжидания.Вставить("КоэффициентУвеличенияИнтервала", 1.4);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Заполняет структуру параметров новыми расчетными значениями.
|
||||
//
|
||||
// Параметры:
|
||||
// ПараметрыОбработчикаОжидания - Структура - заполняется расчетными значениями.
|
||||
//
|
||||
//
|
||||
Процедура ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт
|
||||
|
||||
ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.ТекущийИнтервал * ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала;
|
||||
Если ПараметрыОбработчикаОжидания.ТекущийИнтервал > ПараметрыОбработчикаОжидания.МаксимальныйИнтервал Тогда
|
||||
ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.МаксимальныйИнтервал;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Серверные процедуры и функции общего назначения для "Конвертации хранилища в Git"
|
||||
//
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
|
||||
|
@ -1,314 +1,322 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Серверные процедуры и функции общего назначения:
|
||||
// - для работы с данными в базе;
|
||||
// - для работы с прикладными типами и коллекциями значений;
|
||||
// - математические процедуры и функции;
|
||||
// - для работы с внешним соединением;
|
||||
// - для работы с формами;
|
||||
// - для работы с типами, объектами метаданных и их строковыми представлениями;
|
||||
// - функции определения типов объектов метаданных;
|
||||
// - сохранение, чтение и удаление настроек из хранилищ;
|
||||
// - для работы с табличными документами;
|
||||
// - для работы с журналом регистрации;
|
||||
// - для работы в режиме разделения данных;
|
||||
// - версионирование программных интерфейсов;
|
||||
// - вспомогательные процедуры и функции.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Процедура удаляет из массива МассивРеквизитов элементы, соответствующие именам
|
||||
// реквизитов объекта из массива МассивНепроверяемыхРеквизитов.
|
||||
// Для использования в обработчиках события ОбработкаПроверкиЗаполнения.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивРеквизитов - Массив - массив строк с именами реквизитов объекта.
|
||||
// МассивНепроверяемыхРеквизитов - Массив строк с именами реквизитов объекта, не требующих проверки.
|
||||
//
|
||||
Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт
|
||||
|
||||
Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл
|
||||
|
||||
ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива);
|
||||
Если ПорядковыйНомер <> Неопределено Тогда
|
||||
МассивРеквизитов.Удалить(ПорядковыйНомер);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Общие процедуры и функции для работы с данными в базе.
|
||||
|
||||
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
|
||||
// по ссылке на объект.
|
||||
//
|
||||
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
|
||||
//
|
||||
// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
|
||||
// требований к свойствам структуры.
|
||||
// Например, "Код, Наименование, Родитель".
|
||||
// - Структура, ФиксированнаяСтруктура - в качестве ключа передается
|
||||
// псевдоним поля для возвращаемой структуры с результатом, а в качестве
|
||||
// значения (опционально) фактическое имя поля в таблице.
|
||||
// Если значение не определено, то имя поля берется из ключа.
|
||||
// - Массив, ФиксированныйМассив - имена реквизитов в формате требований
|
||||
// к свойствам структуры.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - содержит имена (ключи) и значения затребованных реквизитов.
|
||||
// Если строка затребованных реквизитов пуста, то возвращается пустая структура.
|
||||
// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено.
|
||||
//
|
||||
Функция ЗначенияРеквизитовОбъекта(Знач Ссылка, Знач Реквизиты) Экспорт
|
||||
|
||||
Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
|
||||
Если ПустаяСтрока(Реквизиты) Тогда
|
||||
Возврат Новый Структура;
|
||||
КонецЕсли;
|
||||
Реквизиты = СтрРазделить(Реквизиты, ", ", Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураРеквизитов = Новый Структура;
|
||||
Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
|
||||
СтруктураРеквизитов = Реквизиты;
|
||||
ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
|
||||
Для Каждого Реквизит Из Реквизиты Цикл
|
||||
СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит);
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
|
||||
КонецЕсли;
|
||||
|
||||
ТекстПолей = "";
|
||||
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
|
||||
ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
|
||||
СокрЛП(КлючИЗначение.Значение),
|
||||
СокрЛП(КлючИЗначение.Ключ));
|
||||
|
||||
Псевдоним = СокрЛП(КлючИЗначение.Ключ);
|
||||
|
||||
ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
|
||||
| " + ИмяПоля + " КАК " + Псевдоним;
|
||||
КонецЦикла;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.УстановитьПараметр("Ссылка", Ссылка);
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
|" + ТекстПолей + "
|
||||
|ИЗ
|
||||
| " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
|
||||
|ГДЕ
|
||||
| ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
|
||||
|";
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Выборка.Следующий();
|
||||
|
||||
Результат = Новый Структура;
|
||||
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
|
||||
Результат.Вставить(КлючИЗначение.Ключ);
|
||||
КонецЦикла;
|
||||
ЗаполнитьЗначенияСвойств(Результат, Выборка);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект.
|
||||
//
|
||||
// Если доступа к реквизиту нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// Ссылка - ссылка на объект, - элемент справочника, документ, ...
|
||||
// ИмяРеквизита - Строка, например, "Код".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - зависит от типа значения прочитанного реквизита.
|
||||
//
|
||||
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
|
||||
|
||||
Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита);
|
||||
Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значения реквизитов, прочитанные из информационной базы
|
||||
// для нескольких объектов.
|
||||
//
|
||||
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивСсылок - массив ссылок на объекты одного типа.
|
||||
// ВАЖНО! значения массива должны быть ссылками на
|
||||
// объекты одного типа!
|
||||
// ИменаРеквизитов - Строка, имена реквизитов перечисленные через запятую,
|
||||
// в формате требований к свойствам структуры.
|
||||
// Например, "Код, Наименование, Родитель".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - где ключ - ссылка на объект, а Значение - структура, которая
|
||||
// содержит список свойств, как список имен в строке.
|
||||
// ИменаРеквизитов, со значениям реквизитов, прочитанными из информационной базы.
|
||||
//
|
||||
Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов) Экспорт
|
||||
|
||||
ЗначенияРеквизитов = Новый Соответствие;
|
||||
Если МассивСсылок.Количество() = 0 Тогда
|
||||
Возврат ЗначенияРеквизитов;
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| Ссылка КАК Ссылка, " + ИменаРеквизитов + "
|
||||
|ИЗ
|
||||
| " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
|
||||
|ГДЕ
|
||||
| Таблица.Ссылка В (&МассивСсылок)";
|
||||
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Результат = Новый Структура(ИменаРеквизитов);
|
||||
ЗаполнитьЗначенияСвойств(Результат, Выборка);
|
||||
ЗначенияРеквизитов[Выборка.Ссылка] = Результат;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов.
|
||||
//
|
||||
// Если доступа к реквизиту нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивСсылок - массив ссылок на объекты одного типа.
|
||||
// ВАЖНО! значения массива должны быть ссылками на
|
||||
// объекты одного типа!
|
||||
// ИмяРеквизита - Строка, например, "Код".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита.
|
||||
//
|
||||
Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита) Экспорт
|
||||
|
||||
ЗначенияРеквизитов = ЗначенияРеквизитовОбъектов(МассивСсылок, ИмяРеквизита);
|
||||
Для Каждого Элемент Из ЗначенияРеквизитов Цикл
|
||||
ЗначенияРеквизитов[Элемент.Ключ] = Элемент.Значение[ИмяРеквизита];
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь).
|
||||
// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если
|
||||
// нужно проверить строку соединения не текущей информационной базы.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево.
|
||||
//
|
||||
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
|
||||
|
||||
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
|
||||
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
|
||||
КонецЕсли;
|
||||
Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение в виде XML-строки.
|
||||
// Преобразованы в XML-строку (сериализованы) могут быть только те объекты,
|
||||
// для которых в описании указано, что они сериализуются.
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Произвольный. Значение, которое необходимо сериализовать в XML-строку.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - XML-строка представления значения в сериализованном виде.
|
||||
//
|
||||
Функция ЗначениеВСтрокуXML(Значение) Экспорт
|
||||
|
||||
ЗаписьXML = Новый ЗаписьXML;
|
||||
ЗаписьXML.УстановитьСтроку();
|
||||
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
|
||||
|
||||
Возврат ЗаписьXML.Закрыть();
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение, полученное из XML-строки.
|
||||
// Получены из XML-строки могут быть только те объекты,
|
||||
// для которых в описании указано, что они сериализуются.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаXML - строка представления значения в сериализованном виде.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Значение, полученное из переданной XML-строки.
|
||||
//
|
||||
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
|
||||
|
||||
ЧтениеXML = Новый ЧтениеXML;
|
||||
ЧтениеXML.УстановитьСтроку(СтрокаXML);
|
||||
|
||||
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
|
||||
КонецФункции
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Серверные процедуры и функции общего назначения:
|
||||
// - для работы с данными в базе;
|
||||
// - для работы с прикладными типами и коллекциями значений;
|
||||
// - математические процедуры и функции;
|
||||
// - для работы с внешним соединением;
|
||||
// - для работы с формами;
|
||||
// - для работы с типами, объектами метаданных и их строковыми представлениями;
|
||||
// - функции определения типов объектов метаданных;
|
||||
// - сохранение, чтение и удаление настроек из хранилищ;
|
||||
// - для работы с табличными документами;
|
||||
// - для работы с журналом регистрации;
|
||||
// - для работы в режиме разделения данных;
|
||||
// - версионирование программных интерфейсов;
|
||||
// - вспомогательные процедуры и функции.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Процедура удаляет из массива МассивРеквизитов элементы, соответствующие именам
|
||||
// реквизитов объекта из массива МассивНепроверяемыхРеквизитов.
|
||||
// Для использования в обработчиках события ОбработкаПроверкиЗаполнения.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивРеквизитов - Массив - массив строк с именами реквизитов объекта.
|
||||
// МассивНепроверяемыхРеквизитов - Массив строк с именами реквизитов объекта, не требующих проверки.
|
||||
//
|
||||
Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт
|
||||
|
||||
Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл
|
||||
|
||||
ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива);
|
||||
Если ПорядковыйНомер <> Неопределено Тогда
|
||||
МассивРеквизитов.Удалить(ПорядковыйНомер);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Общие процедуры и функции для работы с данными в базе.
|
||||
|
||||
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
|
||||
// по ссылке на объект.
|
||||
//
|
||||
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.
|
||||
//
|
||||
// Реквизиты - Строка - имена реквизитов, перечисленные через запятую, в формате
|
||||
// требований к свойствам структуры.
|
||||
// Например, "Код, Наименование, Родитель".
|
||||
// - Структура, ФиксированнаяСтруктура - в качестве ключа передается
|
||||
// псевдоним поля для возвращаемой структуры с результатом, а в качестве
|
||||
// значения (опционально) фактическое имя поля в таблице.
|
||||
// Если значение не определено, то имя поля берется из ключа.
|
||||
// - Массив, ФиксированныйМассив - имена реквизитов в формате требований
|
||||
// к свойствам структуры.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - содержит имена (ключи) и значения затребованных реквизитов.
|
||||
// Если строка затребованных реквизитов пуста, то возвращается пустая структура.
|
||||
// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено.
|
||||
//
|
||||
Функция ЗначенияРеквизитовОбъекта(Знач Ссылка, Знач Реквизиты) Экспорт
|
||||
|
||||
Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
|
||||
Если ПустаяСтрока(Реквизиты) Тогда
|
||||
Возврат Новый Структура;
|
||||
КонецЕсли;
|
||||
Реквизиты = СтрРазделить(Реквизиты, ", ", Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураРеквизитов = Новый Структура;
|
||||
Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
|
||||
СтруктураРеквизитов = Реквизиты;
|
||||
ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
|
||||
Для Каждого Реквизит Из Реквизиты Цикл
|
||||
СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит);
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
|
||||
КонецЕсли;
|
||||
|
||||
ТекстПолей = "";
|
||||
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
|
||||
ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
|
||||
СокрЛП(КлючИЗначение.Значение),
|
||||
СокрЛП(КлючИЗначение.Ключ));
|
||||
|
||||
Псевдоним = СокрЛП(КлючИЗначение.Ключ);
|
||||
|
||||
ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
|
||||
| " + ИмяПоля + " КАК " + Псевдоним;
|
||||
КонецЦикла;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.УстановитьПараметр("Ссылка", Ссылка);
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
|" + ТекстПолей + "
|
||||
|ИЗ
|
||||
| " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
|
||||
|ГДЕ
|
||||
| ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
|
||||
|";
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Выборка.Следующий();
|
||||
|
||||
Результат = Новый Структура;
|
||||
Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
|
||||
Результат.Вставить(КлючИЗначение.Ключ);
|
||||
КонецЦикла;
|
||||
ЗаполнитьЗначенияСвойств(Результат, Выборка);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект.
|
||||
//
|
||||
// Если доступа к реквизиту нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// Ссылка - ссылка на объект, - элемент справочника, документ, ...
|
||||
// ИмяРеквизита - Строка, например, "Код".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - зависит от типа значения прочитанного реквизита.
|
||||
//
|
||||
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита) Экспорт
|
||||
|
||||
Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита);
|
||||
Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значения реквизитов, прочитанные из информационной базы
|
||||
// для нескольких объектов.
|
||||
//
|
||||
// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивСсылок - массив ссылок на объекты одного типа.
|
||||
// ВАЖНО! значения массива должны быть ссылками на
|
||||
// объекты одного типа!
|
||||
// ИменаРеквизитов - Строка, имена реквизитов перечисленные через запятую,
|
||||
// в формате требований к свойствам структуры.
|
||||
// Например, "Код, Наименование, Родитель".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - где ключ - ссылка на объект, а Значение - структура, которая
|
||||
// содержит список свойств, как список имен в строке.
|
||||
// ИменаРеквизитов, со значениям реквизитов, прочитанными из информационной базы.
|
||||
//
|
||||
Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов) Экспорт
|
||||
|
||||
ЗначенияРеквизитов = Новый Соответствие;
|
||||
Если МассивСсылок.Количество() = 0 Тогда
|
||||
Возврат ЗначенияРеквизитов;
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| Ссылка КАК Ссылка, " + ИменаРеквизитов + "
|
||||
|ИЗ
|
||||
| " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
|
||||
|ГДЕ
|
||||
| Таблица.Ссылка В (&МассивСсылок)";
|
||||
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Результат = Новый Структура(ИменаРеквизитов);
|
||||
ЗаполнитьЗначенияСвойств(Результат, Выборка);
|
||||
ЗначенияРеквизитов[Выборка.Ссылка] = Результат;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов.
|
||||
//
|
||||
// Если доступа к реквизиту нет, возникнет исключение прав доступа.
|
||||
// Если необходимо зачитать реквизит независимо от прав текущего пользователя,
|
||||
// то следует использовать предварительный переход в привилегированный режим.
|
||||
//
|
||||
// Функция не предназначена для получения значений реквизитов пустых ссылок.
|
||||
//
|
||||
// Параметры:
|
||||
// МассивСсылок - массив ссылок на объекты одного типа.
|
||||
// ВАЖНО! значения массива должны быть ссылками на
|
||||
// объекты одного типа!
|
||||
// ИмяРеквизита - Строка, например, "Код".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - Ключ - ссылка на объект, Значение - значение прочитанного реквизита.
|
||||
//
|
||||
Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита) Экспорт
|
||||
|
||||
ЗначенияРеквизитов = ЗначенияРеквизитовОбъектов(МассивСсылок, ИмяРеквизита);
|
||||
Для Каждого Элемент Из ЗначенияРеквизитов Цикл
|
||||
ЗначенияРеквизитов[Элемент.Ключ] = Элемент.Значение[ИмяРеквизита];
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Определяет режим эксплуатации информационной базы файловый (Истина) или серверный (Ложь).
|
||||
// При проверке используется СтрокаСоединенияИнформационнойБазы, которую можно указать явно.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если
|
||||
// нужно проверить строку соединения не текущей информационной базы.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево.
|
||||
//
|
||||
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
|
||||
|
||||
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
|
||||
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
|
||||
КонецЕсли;
|
||||
Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение в виде XML-строки.
|
||||
// Преобразованы в XML-строку (сериализованы) могут быть только те объекты,
|
||||
// для которых в описании указано, что они сериализуются.
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Произвольный. Значение, которое необходимо сериализовать в XML-строку.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - XML-строка представления значения в сериализованном виде.
|
||||
//
|
||||
Функция ЗначениеВСтрокуXML(Значение) Экспорт
|
||||
|
||||
ЗаписьXML = Новый ЗаписьXML;
|
||||
ЗаписьXML.УстановитьСтроку();
|
||||
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
|
||||
|
||||
Возврат ЗаписьXML.Закрыть();
|
||||
КонецФункции
|
||||
|
||||
// Возвращает значение, полученное из XML-строки.
|
||||
// Получены из XML-строки могут быть только те объекты,
|
||||
// для которых в описании указано, что они сериализуются.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаXML - строка представления значения в сериализованном виде.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Значение, полученное из переданной XML-строки.
|
||||
//
|
||||
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
|
||||
|
||||
ЧтениеXML = Новый ЧтениеXML;
|
||||
ЧтениеXML.УстановитьСтроку(СтрокаXML);
|
||||
|
||||
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
|
||||
КонецФункции
|
||||
|
||||
// Счтитывает в память текстовый файл на сервере в объект "ТектовыйДокумент" для отображения на клиенте
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Путь к файлу на сервере
|
||||
// Текст - ТекстовыйДокумент- Текстовый документ, в который будет считан файл на сервере
|
||||
// ИмяФайла - Строка - Возвращаемое значение имени файла
|
||||
// ИспользоватьКодировкуСистемы - Булево - Истина - использовать кодировку системы,
|
||||
// ИспользоватьКодировкуСистемы - Булево - Истина - использовать кодировку системы,
|
||||
// Ложь - считать файл в кодировке UTF-8
|
||||
Процедура ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, ИспользоватьКодировкуСистемы = Ложь) Экспорт
|
||||
|
||||
Файл = новый Файл(ПутьКФайлу);
|
||||
ИмяФайла = Файл.Имя;
|
||||
Если Файл.Существует() Тогда
|
||||
Если ИспользоватьКодировкуСистемы Тогда
|
||||
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||||
ЭтоWindowsСервер = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
|
||||
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
|
||||
Если ЭтоWindowsСервер Тогда
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.OEM);
|
||||
Иначе
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.Системная);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
Процедура ПрочитатьТекстовыйФайл(ПутьКФайлу, Текст, ИмяФайла, ИспользоватьКодировкуСистемы = Ложь) Экспорт
|
||||
|
||||
Файл = новый Файл(ПутьКФайлу);
|
||||
ИмяФайла = Файл.Имя;
|
||||
Если Файл.Существует() Тогда
|
||||
Если ИспользоватьКодировкуСистемы Тогда
|
||||
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||||
ЭтоWindowsСервер = (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86
|
||||
Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64);
|
||||
Если ЭтоWindowsСервер Тогда
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.OEM);
|
||||
Иначе
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.Системная);
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Текст.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,16 +1,24 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Задает вопрос о продолжении действия, влекущего к потере изменений.
|
||||
//
|
||||
Процедура ПодтвердитьЗакрытиеФормыСейчас() Экспорт
|
||||
|
||||
ОбщегоНазначенияКлиент.ПодтвердитьЗакрытиеФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Задает вопрос о продолжении действия, влекущего к потере изменений.
|
||||
//
|
||||
Процедура ПодтвердитьЗакрытиеФормыСейчас() Экспорт
|
||||
|
||||
ОбщегоНазначенияКлиент.ПодтвердитьЗакрытиеФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,87 +1,95 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Клиентские процедуры и функции общего назначения:
|
||||
// - для работы со списками в формах;
|
||||
// - для работы с журналом регистрации;
|
||||
// - для обработки действий пользователя в процессе редактирования
|
||||
// многострочного текста, например комментария в документах;
|
||||
// - прочее.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Задает вопрос о продолжении действия, влекущего к потере изменений.
|
||||
// Для использования в обработчиках события ПередЗакрытием модулей форм.
|
||||
//
|
||||
// Параметры:
|
||||
// ОповещениеСохранитьИЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку OK.
|
||||
// Отказ - Булево - возвращаемый параметр, признак отказа от выполняемого действия.
|
||||
// ТекстПредупреждения - Строка - переопределяемый текст предупреждения, выводимый пользователю.
|
||||
//
|
||||
// Пример:
|
||||
// Оповещение = Новый ОписаниеОповещения("ВыбратьИЗакрыть", ЭтотОбъект);
|
||||
// ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ);
|
||||
//
|
||||
// &НаКлиенте
|
||||
// Процедура ВыбратьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||||
// // записываем данные формы.
|
||||
// // ...
|
||||
// Модифицированность = Ложь; // не выводить подтверждение о закрытии формы еще раз.
|
||||
// Закрыть(<РезультатВыбораВФорме>);
|
||||
// КонецПроцедуры
|
||||
//
|
||||
Процедура ПоказатьПодтверждениеЗакрытияФормы(ОповещениеСохранитьИЗакрыть, Отказ, ТекстПредупреждения = "") Экспорт
|
||||
|
||||
Форма = ОповещениеСохранитьИЗакрыть.Модуль;
|
||||
Если Не Форма.Модифицированность Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Отказ = Истина;
|
||||
|
||||
Параметры = Новый Структура();
|
||||
Параметры.Вставить("ОповещениеСохранитьИЗакрыть", ОповещениеСохранитьИЗакрыть);
|
||||
Параметры.Вставить("ТекстПредупреждения", ТекстПредупреждения);
|
||||
|
||||
ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы";
|
||||
Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено);
|
||||
КонецЕсли;
|
||||
ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Параметры;
|
||||
|
||||
ПодключитьОбработчикОжидания("ПодтвердитьЗакрытиеФормыСейчас", 0.1, Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПодтвердитьЗакрытиеФормы() Экспорт
|
||||
|
||||
ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы";
|
||||
Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено);
|
||||
КонецЕсли;
|
||||
|
||||
Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"];
|
||||
Если Параметры = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено;
|
||||
|
||||
Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры);
|
||||
Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда
|
||||
ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'");
|
||||
Иначе
|
||||
ТекстВопроса = Параметры.ТекстПредупреждения;
|
||||
КонецЕсли;
|
||||
|
||||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, ,
|
||||
КодВозвратаДиалога.Нет);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Клиентские процедуры и функции общего назначения:
|
||||
// - для работы со списками в формах;
|
||||
// - для работы с журналом регистрации;
|
||||
// - для обработки действий пользователя в процессе редактирования
|
||||
// многострочного текста, например комментария в документах;
|
||||
// - прочее.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Задает вопрос о продолжении действия, влекущего к потере изменений.
|
||||
// Для использования в обработчиках события ПередЗакрытием модулей форм.
|
||||
//
|
||||
// Параметры:
|
||||
// ОповещениеСохранитьИЗакрыть - ОписаниеОповещения - содержит имя процедуры, вызываемой при нажатии на кнопку OK.
|
||||
// Отказ - Булево - возвращаемый параметр, признак отказа от выполняемого действия.
|
||||
// ТекстПредупреждения - Строка - переопределяемый текст предупреждения, выводимый пользователю.
|
||||
//
|
||||
// Пример:
|
||||
// Оповещение = Новый ОписаниеОповещения("ВыбратьИЗакрыть", ЭтотОбъект);
|
||||
// ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ);
|
||||
//
|
||||
// &НаКлиенте
|
||||
// Процедура ВыбратьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||||
// // записываем данные формы.
|
||||
// // ...
|
||||
// Модифицированность = Ложь; // не выводить подтверждение о закрытии формы еще раз.
|
||||
// Закрыть(<РезультатВыбораВФорме>);
|
||||
// КонецПроцедуры
|
||||
//
|
||||
Процедура ПоказатьПодтверждениеЗакрытияФормы(ОповещениеСохранитьИЗакрыть, Отказ, ТекстПредупреждения = "") Экспорт
|
||||
|
||||
Форма = ОповещениеСохранитьИЗакрыть.Модуль;
|
||||
Если Не Форма.Модифицированность Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Отказ = Истина;
|
||||
|
||||
Параметры = Новый Структура();
|
||||
Параметры.Вставить("ОповещениеСохранитьИЗакрыть", ОповещениеСохранитьИЗакрыть);
|
||||
Параметры.Вставить("ТекстПредупреждения", ТекстПредупреждения);
|
||||
|
||||
ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы";
|
||||
Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено);
|
||||
КонецЕсли;
|
||||
ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Параметры;
|
||||
|
||||
ПодключитьОбработчикОжидания("ПодтвердитьЗакрытиеФормыСейчас", 0.1, Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПодтвердитьЗакрытиеФормы() Экспорт
|
||||
|
||||
ИмяПараметра = "СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы";
|
||||
Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
ПараметрыПриложения.Вставить(ИмяПараметра, Неопределено);
|
||||
КонецЕсли;
|
||||
|
||||
Параметры = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"];
|
||||
Если Параметры = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПодтвержденияЗакрытияФормы"] = Неопределено;
|
||||
|
||||
Оповещение = Новый ОписаниеОповещения("ПодтвердитьЗакрытиеФормыЗавершение", ЭтотОбъект, Параметры);
|
||||
Если ПустаяСтрока(Параметры.ТекстПредупреждения) Тогда
|
||||
ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'");
|
||||
Иначе
|
||||
ТекстВопроса = Параметры.ТекстПредупреждения;
|
||||
КонецЕсли;
|
||||
|
||||
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, ,
|
||||
КодВозвратаДиалога.Нет);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,247 +1,255 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Клиентские и серверные процедуры и функции общего назначения:
|
||||
// - для поддержки формирования печатных форм;
|
||||
// - для работы с файлами;
|
||||
// - для работы с управляемыми формами;
|
||||
// - для работы с почтовыми адресами;
|
||||
// - для работы с отборами динамических списков;
|
||||
// - прочее.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Формирует и выводит сообщение, которое может быть связано с элементом
|
||||
// управления формы.
|
||||
//
|
||||
// Параметры
|
||||
// ТекстСообщенияПользователю - Строка - текст сообщения.
|
||||
// КлючДанных - ЛюбаяСсылка - на объект информационной базы.
|
||||
// Ссылка на объект информационной базы, к которому это сообщение относится,
|
||||
// или ключ записи.
|
||||
// Поле - Строка - наименование реквизита формы.
|
||||
// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы).
|
||||
// Отказ - Булево - Выходной параметр.
|
||||
// Всегда устанавливается в значение Истина.
|
||||
//
|
||||
// Пример:
|
||||
//
|
||||
// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "ПолеВРеквизитеФормыОбъект",
|
||||
// "Объект");
|
||||
//
|
||||
// Альтернативный вариант использования в форме объекта:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "Объект.ПолеВРеквизитеФормыОбъект");
|
||||
//
|
||||
// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "ИмяРеквизитаФормы");
|
||||
//
|
||||
// 3. Для вывода сообщения связанного с объектом информационной базы.
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ);
|
||||
//
|
||||
// 4. Для вывода сообщения по ссылке на объект информационной базы.
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ);
|
||||
//
|
||||
// Случаи некорректного использования:
|
||||
// 1. Передача одновременно параметров КлючДанных и ПутьКДанным.
|
||||
// 2. Передача в параметре КлючДанных значения типа отличного от допустимых.
|
||||
// 3. Установка ссылки без установки поля (и/или пути к данным).
|
||||
//
|
||||
Процедура СообщитьПользователю(
|
||||
Знач ТекстСообщенияПользователю,
|
||||
Знач КлючДанных = Неопределено,
|
||||
Знач Поле = "",
|
||||
Знач ПутьКДанным = "",
|
||||
Отказ = Ложь) Экспорт
|
||||
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = ТекстСообщенияПользователю;
|
||||
Сообщение.Поле = Поле;
|
||||
|
||||
ЭтоОбъект = Ложь;
|
||||
|
||||
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
|
||||
Если КлючДанных <> Неопределено
|
||||
И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
|
||||
ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
|
||||
ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0;
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Если ЭтоОбъект Тогда
|
||||
Сообщение.УстановитьДанные(КлючДанных);
|
||||
Иначе
|
||||
Сообщение.КлючДанных = КлючДанных;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
|
||||
Сообщение.ПутьКДанным = ПутьКДанным;
|
||||
КонецЕсли;
|
||||
|
||||
Сообщение.Сообщить();
|
||||
|
||||
Отказ = Истина;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Дополняет структуру значениями из другой структуры.
|
||||
//
|
||||
// Параметры:
|
||||
// Приемник - Структура - коллекция, в которую будут добавляться новые значения.
|
||||
// Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения.
|
||||
// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника:
|
||||
// Истина - Заменять значения приемника (самый быстрый способ),
|
||||
// Ложь - Не заменять значения приемника (пропускать),
|
||||
// Неопределено - Значение по умолчанию. Бросать исключение.
|
||||
//
|
||||
Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт
|
||||
|
||||
Для Каждого Элемент Из Источник Цикл
|
||||
Если Заменять <> Истина И Приемник.Свойство(Элемент.Ключ) Тогда
|
||||
Если Заменять = Ложь Тогда
|
||||
Продолжить;
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ);
|
||||
КонецЕсли
|
||||
КонецЕсли;
|
||||
Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует.
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКаталога - Строка - путь к каталогу.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - путь к каталогу с конечным символом-разделителем.
|
||||
//
|
||||
// Примеры использования:
|
||||
// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\".
|
||||
// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\".
|
||||
// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\"
|
||||
//
|
||||
Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Удалить_Платформа = Неопределено) Экспорт
|
||||
Если ПустаяСтрока(ПутьКаталога) Тогда
|
||||
Возврат ПутьКаталога;
|
||||
КонецЕсли;
|
||||
|
||||
ДобавляемыйСимвол = ПолучитьРазделительПути();
|
||||
|
||||
Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда
|
||||
Возврат ПутьКаталога;
|
||||
Иначе
|
||||
Возврат ПутьКаталога + ДобавляемыйСимвол;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
// Преобразует РасписаниеРегламентногоЗадания в структуру.
|
||||
//
|
||||
// Параметры:
|
||||
// Расписание - РасписаниеРегламентногоЗадания -.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура.
|
||||
//
|
||||
Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт
|
||||
|
||||
ЗначениеРасписания = Расписание;
|
||||
Если ЗначениеРасписания = Неопределено Тогда
|
||||
ЗначениеРасписания = Новый РасписаниеРегламентногоЗадания();
|
||||
КонецЕсли;
|
||||
СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце,"
|
||||
+ "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней";
|
||||
Результат = Новый Структура(СписокПолей);
|
||||
ЗаполнитьЗначенияСвойств(Результат, ЗначениеРасписания, СписокПолей);
|
||||
ДетальныеРасписанияДня = Новый Массив;
|
||||
Для каждого РасписаниеДля Из Расписание.ДетальныеРасписанияДня Цикл
|
||||
ДетальныеРасписанияДня.Добавить(РасписаниеВСтруктуру(РасписаниеДля));
|
||||
КонецЦикла;
|
||||
Результат.Вставить("ДетальныеРасписанияДня", ДетальныеРасписанияДня);
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Преобразует структуру в РасписаниеРегламентногоЗадания.
|
||||
//
|
||||
// Параметры:
|
||||
// СтруктураРасписания - Структура -.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// РасписаниеРегламентногоЗадания.
|
||||
//
|
||||
Функция СтруктураВРасписание(Знач СтруктураРасписания) Экспорт
|
||||
|
||||
Если СтруктураРасписания = Неопределено Тогда
|
||||
Возврат Новый РасписаниеРегламентногоЗадания();
|
||||
КонецЕсли;
|
||||
СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце,"
|
||||
+ "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней";
|
||||
Результат = Новый РасписаниеРегламентногоЗадания;
|
||||
ЗаполнитьЗначенияСвойств(Результат, СтруктураРасписания, СписокПолей);
|
||||
ДетальныеРасписанияДня = Новый Массив;
|
||||
Для каждого Расписание Из СтруктураРасписания.ДетальныеРасписанияДня Цикл
|
||||
ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание));
|
||||
КонецЦикла;
|
||||
Результат.ДетальныеРасписанияДня = ДетальныеРасписанияДня;
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
// Возвращает код основного языка конфигурации, например "ru".
|
||||
Функция КодОсновногоЯзыка() Экспорт
|
||||
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
|
||||
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
|
||||
#Иначе
|
||||
Возврат "ru";
|
||||
#КонецЕсли
|
||||
КонецФункции
|
||||
|
||||
|
||||
// Сравнить две строки версий.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС.
|
||||
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
|
||||
//
|
||||
Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
|
||||
|
||||
Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1);
|
||||
Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2);
|
||||
Версия1 = СтрРазделить(Строка1, ".");
|
||||
Если Версия1.Количество() <> 4 Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1);
|
||||
КонецЕсли;
|
||||
Версия2 = СтрРазделить(Строка2, ".");
|
||||
Если Версия2.Количество() <> 4 Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2);
|
||||
КонецЕсли;
|
||||
|
||||
Результат = 0;
|
||||
Для Разряд = 0 По 3 Цикл
|
||||
Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]);
|
||||
Если Результат <> 0 Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Клиентские и серверные процедуры и функции общего назначения:
|
||||
// - для поддержки формирования печатных форм;
|
||||
// - для работы с файлами;
|
||||
// - для работы с управляемыми формами;
|
||||
// - для работы с почтовыми адресами;
|
||||
// - для работы с отборами динамических списков;
|
||||
// - прочее.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Формирует и выводит сообщение, которое может быть связано с элементом
|
||||
// управления формы.
|
||||
//
|
||||
// Параметры
|
||||
// ТекстСообщенияПользователю - Строка - текст сообщения.
|
||||
// КлючДанных - ЛюбаяСсылка - на объект информационной базы.
|
||||
// Ссылка на объект информационной базы, к которому это сообщение относится,
|
||||
// или ключ записи.
|
||||
// Поле - Строка - наименование реквизита формы.
|
||||
// ПутьКДанным - Строка - путь к данным (путь к реквизиту формы).
|
||||
// Отказ - Булево - Выходной параметр.
|
||||
// Всегда устанавливается в значение Истина.
|
||||
//
|
||||
// Пример:
|
||||
//
|
||||
// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "ПолеВРеквизитеФормыОбъект",
|
||||
// "Объект");
|
||||
//
|
||||
// Альтернативный вариант использования в форме объекта:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "Объект.ПолеВРеквизитеФормыОбъект");
|
||||
//
|
||||
// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ,
|
||||
// "ИмяРеквизитаФормы");
|
||||
//
|
||||
// 3. Для вывода сообщения связанного с объектом информационной базы.
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ);
|
||||
//
|
||||
// 4. Для вывода сообщения по ссылке на объект информационной базы.
|
||||
// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
|
||||
// НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ);
|
||||
//
|
||||
// Случаи некорректного использования:
|
||||
// 1. Передача одновременно параметров КлючДанных и ПутьКДанным.
|
||||
// 2. Передача в параметре КлючДанных значения типа отличного от допустимых.
|
||||
// 3. Установка ссылки без установки поля (и/или пути к данным).
|
||||
//
|
||||
Процедура СообщитьПользователю(
|
||||
Знач ТекстСообщенияПользователю,
|
||||
Знач КлючДанных = Неопределено,
|
||||
Знач Поле = "",
|
||||
Знач ПутьКДанным = "",
|
||||
Отказ = Ложь) Экспорт
|
||||
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = ТекстСообщенияПользователю;
|
||||
Сообщение.Поле = Поле;
|
||||
|
||||
ЭтоОбъект = Ложь;
|
||||
|
||||
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
|
||||
Если КлючДанных <> Неопределено
|
||||
И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
|
||||
ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
|
||||
ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0;
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Если ЭтоОбъект Тогда
|
||||
Сообщение.УстановитьДанные(КлючДанных);
|
||||
Иначе
|
||||
Сообщение.КлючДанных = КлючДанных;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
|
||||
Сообщение.ПутьКДанным = ПутьКДанным;
|
||||
КонецЕсли;
|
||||
|
||||
Сообщение.Сообщить();
|
||||
|
||||
Отказ = Истина;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Дополняет структуру значениями из другой структуры.
|
||||
//
|
||||
// Параметры:
|
||||
// Приемник - Структура - коллекция, в которую будут добавляться новые значения.
|
||||
// Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения.
|
||||
// Заменять - Булево, Неопределено - Что делать в местах пересечения ключей источника и приемника:
|
||||
// Истина - Заменять значения приемника (самый быстрый способ),
|
||||
// Ложь - Не заменять значения приемника (пропускать),
|
||||
// Неопределено - Значение по умолчанию. Бросать исключение.
|
||||
//
|
||||
Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт
|
||||
|
||||
Для Каждого Элемент Из Источник Цикл
|
||||
Если Заменять <> Истина И Приемник.Свойство(Элемент.Ключ) Тогда
|
||||
Если Заменять = Ложь Тогда
|
||||
Продолжить;
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ);
|
||||
КонецЕсли
|
||||
КонецЕсли;
|
||||
Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует.
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКаталога - Строка - путь к каталогу.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - путь к каталогу с конечным символом-разделителем.
|
||||
//
|
||||
// Примеры использования:
|
||||
// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\".
|
||||
// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\".
|
||||
// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\"
|
||||
//
|
||||
Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Удалить_Платформа = Неопределено) Экспорт
|
||||
Если ПустаяСтрока(ПутьКаталога) Тогда
|
||||
Возврат ПутьКаталога;
|
||||
КонецЕсли;
|
||||
|
||||
ДобавляемыйСимвол = ПолучитьРазделительПути();
|
||||
|
||||
Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда
|
||||
Возврат ПутьКаталога;
|
||||
Иначе
|
||||
Возврат ПутьКаталога + ДобавляемыйСимвол;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
// Преобразует РасписаниеРегламентногоЗадания в структуру.
|
||||
//
|
||||
// Параметры:
|
||||
// Расписание - РасписаниеРегламентногоЗадания -.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура.
|
||||
//
|
||||
Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт
|
||||
|
||||
ЗначениеРасписания = Расписание;
|
||||
Если ЗначениеРасписания = Неопределено Тогда
|
||||
ЗначениеРасписания = Новый РасписаниеРегламентногоЗадания();
|
||||
КонецЕсли;
|
||||
СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце,"
|
||||
+ "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней";
|
||||
Результат = Новый Структура(СписокПолей);
|
||||
ЗаполнитьЗначенияСвойств(Результат, ЗначениеРасписания, СписокПолей);
|
||||
ДетальныеРасписанияДня = Новый Массив;
|
||||
Для каждого РасписаниеДля Из Расписание.ДетальныеРасписанияДня Цикл
|
||||
ДетальныеРасписанияДня.Добавить(РасписаниеВСтруктуру(РасписаниеДля));
|
||||
КонецЦикла;
|
||||
Результат.Вставить("ДетальныеРасписанияДня", ДетальныеРасписанияДня);
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Преобразует структуру в РасписаниеРегламентногоЗадания.
|
||||
//
|
||||
// Параметры:
|
||||
// СтруктураРасписания - Структура -.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// РасписаниеРегламентногоЗадания.
|
||||
//
|
||||
Функция СтруктураВРасписание(Знач СтруктураРасписания) Экспорт
|
||||
|
||||
Если СтруктураРасписания = Неопределено Тогда
|
||||
Возврат Новый РасписаниеРегламентногоЗадания();
|
||||
КонецЕсли;
|
||||
СписокПолей = "ВремяЗавершения,ВремяКонца,ВремяНачала,ДатаКонца,ДатаНачала,ДеньВМесяце,ДеньНеделиВМесяце,"
|
||||
+ "ДниНедели,ИнтервалЗавершения,Месяцы,ПаузаПовтора,ПериодНедель,ПериодПовтораВТечениеДня,ПериодПовтораДней";
|
||||
Результат = Новый РасписаниеРегламентногоЗадания;
|
||||
ЗаполнитьЗначенияСвойств(Результат, СтруктураРасписания, СписокПолей);
|
||||
ДетальныеРасписанияДня = Новый Массив;
|
||||
Для каждого Расписание Из СтруктураРасписания.ДетальныеРасписанияДня Цикл
|
||||
ДетальныеРасписанияДня.Добавить(СтруктураВРасписание(Расписание));
|
||||
КонецЦикла;
|
||||
Результат.ДетальныеРасписанияДня = ДетальныеРасписанияДня;
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
// Возвращает код основного языка конфигурации, например "ru".
|
||||
Функция КодОсновногоЯзыка() Экспорт
|
||||
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
|
||||
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
|
||||
#Иначе
|
||||
Возврат "ru";
|
||||
#КонецЕсли
|
||||
КонецФункции
|
||||
|
||||
|
||||
// Сравнить две строки версий.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС.
|
||||
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
|
||||
//
|
||||
Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
|
||||
|
||||
Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1);
|
||||
Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2);
|
||||
Версия1 = СтрРазделить(Строка1, ".");
|
||||
Если Версия1.Количество() <> 4 Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Неправильный формат параметра СтрокаВерсии1: %1'"), СтрокаВерсии1);
|
||||
КонецЕсли;
|
||||
Версия2 = СтрРазделить(Строка2, ".");
|
||||
Если Версия2.Количество() <> 4 Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), СтрокаВерсии2);
|
||||
КонецЕсли;
|
||||
|
||||
Результат = 0;
|
||||
Для Разряд = 0 По 3 Цикл
|
||||
Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]);
|
||||
Если Результат <> 0 Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает массив квалифицированных имен метаданных
|
||||
|
@ -1,242 +1,250 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Серверные процедуры и функции общего назначения:
|
||||
// - Поддержка работы с включенными профилями безопасности.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации.
|
||||
// При включении профилей безопасности для вызова оператора Выполнить() используется
|
||||
// переход в безопасный режим с профилем безопасности, используемом для информационной базы
|
||||
// (если выше по стеку не был установлен другой безопасный режим).
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - имя экспортной процедуры в формате
|
||||
// <имя объекта>.<имя процедуры>, где <имя объекта> - это
|
||||
// общий модуль или модуль менеджера объекта.
|
||||
// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры>
|
||||
// в порядке расположения элементов массива.
|
||||
//
|
||||
// Пример:
|
||||
// Параметры = Новый Массив();
|
||||
// Параметры.Добавить("1");
|
||||
// РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации("МойОбщийМодуль.МояПроцедура", Параметры);
|
||||
//
|
||||
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
|
||||
|
||||
Попытка
|
||||
ПроверитьИмяМетодаКонфигурации(ИмяМетода);
|
||||
Исключение
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
ВызватьИсключение НСтр("ru = 'Ошибка при вызове процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.'")
|
||||
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецПопытки;
|
||||
|
||||
ПараметрыСтрока = "";
|
||||
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда
|
||||
Для Индекс = 0 По Параметры.ВГраница() Цикл
|
||||
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],";
|
||||
КонецЦикла;
|
||||
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет, что переданное имя является именем экспортной процедуры конфигурации.
|
||||
// Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма
|
||||
// на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить() и Вычислить()
|
||||
// при их использовании для динамического вызова методов код конфигурации.
|
||||
//
|
||||
// В случае, если переданная строка не соответствует имени метода конфигурации - генерируется.
|
||||
//
|
||||
Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяМетода) Экспорт
|
||||
|
||||
// Проверка предусловий на формат ИмяЭкспортнойПроцедуры.
|
||||
ЧастиИмени = СтрРазделить(ИмяМетода, ".");
|
||||
Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
ИмяОбъекта = ЧастиИмени[0];
|
||||
Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден общий модуль ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ИмяОбъекта);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() = 3 Тогда
|
||||
ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1];
|
||||
Попытка
|
||||
Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта);
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Если Менеджер = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден менеджер объекта ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ПолноеИмяОбъекта);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетодаОбъекта = ЧастиИмени[ЧастиИмени.ВГраница()];
|
||||
ВременнаяСтруктура = Новый Структура;
|
||||
Попытка
|
||||
// Проверка того, что ИмяМетодаОбъекта является допустимым идентификатором.
|
||||
// Например: МояПроцедура
|
||||
ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Имя метода ""%2"" не соответствует требованиям образования имен процедур и функций.'"),
|
||||
ИмяМетода,
|
||||
ИмяМетодаОбъекта);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Возвращает менеджер объекта по имени.
|
||||
// Ограничение: не обрабатываются точки маршрутов бизнес-процессов.
|
||||
//
|
||||
// Параметры:
|
||||
// Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникиМенеджер, СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ...
|
||||
//
|
||||
Функция МенеджерОбъектаПоИмени(Имя)
|
||||
Перем КлассОМ, ИмяОМ, Менеджер;
|
||||
|
||||
ЧастиИмени = СтрРазделить(Имя, ".");
|
||||
|
||||
Если ЧастиИмени.Количество() > 0 Тогда
|
||||
КлассОМ = ВРег(ЧастиИмени[0]);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() > 1 Тогда
|
||||
ИмяОМ = ЧастиИмени[1];
|
||||
КонецЕсли;
|
||||
|
||||
Если КлассОМ = "ПЛАНОБМЕНА"
|
||||
Или КлассОМ = "ПЛАНЫОБМЕНА" Тогда
|
||||
Менеджер = ПланыОбмена;
|
||||
|
||||
ИначеЕсли КлассОМ = "СПРАВОЧНИК"
|
||||
Или КлассОМ = "СПРАВОЧНИКИ" Тогда
|
||||
Менеджер = Справочники;
|
||||
|
||||
ИначеЕсли КлассОМ = "ДОКУМЕНТ"
|
||||
Или КлассОМ = "ДОКУМЕНТЫ" Тогда
|
||||
Менеджер = Документы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЖУРНАЛДОКУМЕНТОВ"
|
||||
Или КлассОМ = "ЖУРНАЛЫДОКУМЕНТОВ" Тогда
|
||||
Менеджер = ЖурналыДокументов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЕРЕЧИСЛЕНИЕ"
|
||||
Или КлассОМ = "ПЕРЕЧИСЛЕНИЯ" Тогда
|
||||
Менеджер = Перечисления;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОТЧЕТ"
|
||||
Или КлассОМ = "ОТЧЕТЫ" Тогда
|
||||
Менеджер = Отчеты;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОБРАБОТКА"
|
||||
Или КлассОМ = "ОБРАБОТКИ" Тогда
|
||||
Менеджер = Обработки;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВХАРАКТЕРИСТИК"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВХАРАКТЕРИСТИК" Тогда
|
||||
Менеджер = ПланыВидовХарактеристик;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНСЧЕТОВ"
|
||||
Или КлассОМ = "ПЛАНЫСЧЕТОВ" Тогда
|
||||
Менеджер = ПланыСчетов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВРАСЧЕТА"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВРАСЧЕТА" Тогда
|
||||
Менеджер = ПланыВидовРасчета;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРСВЕДЕНИЙ"
|
||||
Или КлассОМ = "РЕГИСТРЫСВЕДЕНИЙ" Тогда
|
||||
Менеджер = РегистрыСведений;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРНАКОПЛЕНИЯ"
|
||||
Или КлассОМ = "РЕГИСТРЫНАКОПЛЕНИЯ" Тогда
|
||||
Менеджер = РегистрыНакопления;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРБУХГАЛТЕРИИ"
|
||||
Или КлассОМ = "РЕГИСТРЫБУХГАЛТЕРИИ" Тогда
|
||||
Менеджер = РегистрыБухгалтерии;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРРАСЧЕТА"
|
||||
Или КлассОМ = "РЕГИСТРЫРАСЧЕТА" Тогда
|
||||
|
||||
Если ЧастиИмени.Количество() < 3 Тогда
|
||||
// Регистр расчета
|
||||
Менеджер = РегистрыРасчета;
|
||||
Иначе
|
||||
КлассПодчиненногоОМ = ВРег(ЧастиИмени[2]);
|
||||
Если ЧастиИмени.Количество() > 3 Тогда
|
||||
ИмяПодчиненногоОМ = ЧастиИмени[3];
|
||||
КонецЕсли;
|
||||
Если КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТ"
|
||||
Или КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТЫ" Тогда
|
||||
// Перерасчет
|
||||
Попытка
|
||||
Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты;
|
||||
ИмяОМ = ИмяПодчиненногоОМ;
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли КлассОМ = "БИЗНЕСПРОЦЕСС"
|
||||
Или КлассОМ = "БИЗНЕСПРОЦЕССЫ" Тогда
|
||||
Менеджер = БизнесПроцессы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЗАДАЧА"
|
||||
Или КлассОМ = "ЗАДАЧИ" Тогда
|
||||
Менеджер = Задачи;
|
||||
|
||||
ИначеЕсли КлассОМ = "КОНСТАНТА"
|
||||
Или КлассОМ = "КОНСТАНТЫ" Тогда
|
||||
Менеджер = Константы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТЬ"
|
||||
Или КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТИ" Тогда
|
||||
Менеджер = Последовательности;
|
||||
КонецЕсли;
|
||||
|
||||
Если Менеджер <> Неопределено Тогда
|
||||
Если ЗначениеЗаполнено(ИмяОМ) Тогда
|
||||
Попытка
|
||||
Возврат Менеджер[ИмяОМ];
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Иначе
|
||||
Возврат Менеджер;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
// Серверные процедуры и функции общего назначения:
|
||||
// - Поддержка работы с включенными профилями безопасности.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации.
|
||||
// При включении профилей безопасности для вызова оператора Выполнить() используется
|
||||
// переход в безопасный режим с профилем безопасности, используемом для информационной базы
|
||||
// (если выше по стеку не был установлен другой безопасный режим).
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - имя экспортной процедуры в формате
|
||||
// <имя объекта>.<имя процедуры>, где <имя объекта> - это
|
||||
// общий модуль или модуль менеджера объекта.
|
||||
// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры>
|
||||
// в порядке расположения элементов массива.
|
||||
//
|
||||
// Пример:
|
||||
// Параметры = Новый Массив();
|
||||
// Параметры.Добавить("1");
|
||||
// РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации("МойОбщийМодуль.МояПроцедура", Параметры);
|
||||
//
|
||||
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
|
||||
|
||||
Попытка
|
||||
ПроверитьИмяМетодаКонфигурации(ИмяМетода);
|
||||
Исключение
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
ВызватьИсключение НСтр("ru = 'Ошибка при вызове процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.'")
|
||||
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецПопытки;
|
||||
|
||||
ПараметрыСтрока = "";
|
||||
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда
|
||||
Для Индекс = 0 По Параметры.ВГраница() Цикл
|
||||
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],";
|
||||
КонецЦикла;
|
||||
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет, что переданное имя является именем экспортной процедуры конфигурации.
|
||||
// Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма
|
||||
// на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить() и Вычислить()
|
||||
// при их использовании для динамического вызова методов код конфигурации.
|
||||
//
|
||||
// В случае, если переданная строка не соответствует имени метода конфигурации - генерируется.
|
||||
//
|
||||
Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяМетода) Экспорт
|
||||
|
||||
// Проверка предусловий на формат ИмяЭкспортнойПроцедуры.
|
||||
ЧастиИмени = СтрРазделить(ИмяМетода, ".");
|
||||
Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
ИмяОбъекта = ЧастиИмени[0];
|
||||
Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден общий модуль ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ИмяОбъекта);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() = 3 Тогда
|
||||
ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1];
|
||||
Попытка
|
||||
Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта);
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Если Менеджер = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден менеджер объекта ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ПолноеИмяОбъекта);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетодаОбъекта = ЧастиИмени[ЧастиИмени.ВГраница()];
|
||||
ВременнаяСтруктура = Новый Структура;
|
||||
Попытка
|
||||
// Проверка того, что ИмяМетодаОбъекта является допустимым идентификатором.
|
||||
// Например: МояПроцедура
|
||||
ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Имя метода ""%2"" не соответствует требованиям образования имен процедур и функций.'"),
|
||||
ИмяМетода,
|
||||
ИмяМетодаОбъекта);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Возвращает менеджер объекта по имени.
|
||||
// Ограничение: не обрабатываются точки маршрутов бизнес-процессов.
|
||||
//
|
||||
// Параметры:
|
||||
// Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникиМенеджер, СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ...
|
||||
//
|
||||
Функция МенеджерОбъектаПоИмени(Имя)
|
||||
Перем КлассОМ, ИмяОМ, Менеджер;
|
||||
|
||||
ЧастиИмени = СтрРазделить(Имя, ".");
|
||||
|
||||
Если ЧастиИмени.Количество() > 0 Тогда
|
||||
КлассОМ = ВРег(ЧастиИмени[0]);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() > 1 Тогда
|
||||
ИмяОМ = ЧастиИмени[1];
|
||||
КонецЕсли;
|
||||
|
||||
Если КлассОМ = "ПЛАНОБМЕНА"
|
||||
Или КлассОМ = "ПЛАНЫОБМЕНА" Тогда
|
||||
Менеджер = ПланыОбмена;
|
||||
|
||||
ИначеЕсли КлассОМ = "СПРАВОЧНИК"
|
||||
Или КлассОМ = "СПРАВОЧНИКИ" Тогда
|
||||
Менеджер = Справочники;
|
||||
|
||||
ИначеЕсли КлассОМ = "ДОКУМЕНТ"
|
||||
Или КлассОМ = "ДОКУМЕНТЫ" Тогда
|
||||
Менеджер = Документы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЖУРНАЛДОКУМЕНТОВ"
|
||||
Или КлассОМ = "ЖУРНАЛЫДОКУМЕНТОВ" Тогда
|
||||
Менеджер = ЖурналыДокументов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЕРЕЧИСЛЕНИЕ"
|
||||
Или КлассОМ = "ПЕРЕЧИСЛЕНИЯ" Тогда
|
||||
Менеджер = Перечисления;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОТЧЕТ"
|
||||
Или КлассОМ = "ОТЧЕТЫ" Тогда
|
||||
Менеджер = Отчеты;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОБРАБОТКА"
|
||||
Или КлассОМ = "ОБРАБОТКИ" Тогда
|
||||
Менеджер = Обработки;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВХАРАКТЕРИСТИК"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВХАРАКТЕРИСТИК" Тогда
|
||||
Менеджер = ПланыВидовХарактеристик;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНСЧЕТОВ"
|
||||
Или КлассОМ = "ПЛАНЫСЧЕТОВ" Тогда
|
||||
Менеджер = ПланыСчетов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВРАСЧЕТА"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВРАСЧЕТА" Тогда
|
||||
Менеджер = ПланыВидовРасчета;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРСВЕДЕНИЙ"
|
||||
Или КлассОМ = "РЕГИСТРЫСВЕДЕНИЙ" Тогда
|
||||
Менеджер = РегистрыСведений;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРНАКОПЛЕНИЯ"
|
||||
Или КлассОМ = "РЕГИСТРЫНАКОПЛЕНИЯ" Тогда
|
||||
Менеджер = РегистрыНакопления;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРБУХГАЛТЕРИИ"
|
||||
Или КлассОМ = "РЕГИСТРЫБУХГАЛТЕРИИ" Тогда
|
||||
Менеджер = РегистрыБухгалтерии;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРРАСЧЕТА"
|
||||
Или КлассОМ = "РЕГИСТРЫРАСЧЕТА" Тогда
|
||||
|
||||
Если ЧастиИмени.Количество() < 3 Тогда
|
||||
// Регистр расчета
|
||||
Менеджер = РегистрыРасчета;
|
||||
Иначе
|
||||
КлассПодчиненногоОМ = ВРег(ЧастиИмени[2]);
|
||||
Если ЧастиИмени.Количество() > 3 Тогда
|
||||
ИмяПодчиненногоОМ = ЧастиИмени[3];
|
||||
КонецЕсли;
|
||||
Если КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТ"
|
||||
Или КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТЫ" Тогда
|
||||
// Перерасчет
|
||||
Попытка
|
||||
Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты;
|
||||
ИмяОМ = ИмяПодчиненногоОМ;
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли КлассОМ = "БИЗНЕСПРОЦЕСС"
|
||||
Или КлассОМ = "БИЗНЕСПРОЦЕССЫ" Тогда
|
||||
Менеджер = БизнесПроцессы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЗАДАЧА"
|
||||
Или КлассОМ = "ЗАДАЧИ" Тогда
|
||||
Менеджер = Задачи;
|
||||
|
||||
ИначеЕсли КлассОМ = "КОНСТАНТА"
|
||||
Или КлассОМ = "КОНСТАНТЫ" Тогда
|
||||
Менеджер = Константы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТЬ"
|
||||
Или КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТИ" Тогда
|
||||
Менеджер = Последовательности;
|
||||
КонецЕсли;
|
||||
|
||||
Если Менеджер <> Неопределено Тогда
|
||||
Если ЗначениеЗаполнено(ИмяОМ) Тогда
|
||||
Попытка
|
||||
Возврат Менеджер[ИмяОМ];
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Иначе
|
||||
Возврат Менеджер;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Регламентные задания".
|
||||
//
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,310 +1,318 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Запуск фонового задания с контекстом клиента. Например, передаются ПараметрыКлиентаНаСервере.
|
||||
// Запуск выполняется с помощью процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Параметры - Массив - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Ключ - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Наименование - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ФоновоеЗадание.
|
||||
//
|
||||
Функция ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетода, Параметры = Неопределено, Ключ = "", Наименование = "") Экспорт
|
||||
|
||||
Если ТекущийРежимЗапуска() = Неопределено Тогда
|
||||
ВызватьИсключение НСтр("ru = 'Запуск фонового задания с контекстом клиента возможен только при наличии клиента.'");
|
||||
КонецЕсли;
|
||||
|
||||
ВсеПараметры = Новый Структура;
|
||||
ВсеПараметры.Вставить("ИмяМетода", ИмяМетода);
|
||||
ВсеПараметры.Вставить("Параметры", Параметры);
|
||||
|
||||
ПараметрыПроцедурыФоновогоЗадания = Новый Массив;
|
||||
ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры);
|
||||
|
||||
Возврат ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.ПередЗапускомФоновогоЗаданияСКонтекстомКлиента",
|
||||
ПараметрыПроцедурыФоновогоЗадания, Ключ, Наименование);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации.
|
||||
// При включении профилей безопасности для вызова оператора Выполнить() используется
|
||||
// переход в безопасный режим с профилем безопасности, используемом для информационной базы
|
||||
// (если выше по стеку не был установлен другой безопасный режим).
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - имя экспортной процедуры в формате
|
||||
// <имя объекта>.<имя процедуры>, где <имя объекта> - это
|
||||
// общий модуль или модуль менеджера объекта.
|
||||
// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры>
|
||||
// в порядке расположения элементов массива.
|
||||
//
|
||||
// Пример:
|
||||
// Параметры = Новый Массив();
|
||||
// Параметры.Добавить("1");
|
||||
// РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации("МойОбщийМодуль.МояПроцедура", Параметры);
|
||||
//
|
||||
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
|
||||
|
||||
Попытка
|
||||
ПроверитьИмяМетодаКонфигурации(ИмяМетода);
|
||||
Исключение
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
ВызватьИсключение НСтр("ru = 'Ошибка при вызове процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.'")
|
||||
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецПопытки;
|
||||
|
||||
ПараметрыСтрока = "";
|
||||
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда
|
||||
Для Индекс = 0 По Параметры.ВГраница() Цикл
|
||||
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],";
|
||||
КонецЦикла;
|
||||
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Устанавливает размер шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2.
|
||||
//
|
||||
// Параметры:
|
||||
// Форма - УправляемаяФорма - Форма для изменения шрифта заголовков групп;
|
||||
// ИменаГрупп - Строка - Список имен групп формы, разделенных запятыми.
|
||||
//
|
||||
Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт
|
||||
|
||||
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
|
||||
ЖирныйШрифт = Новый Шрифт(,, Истина);
|
||||
Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда
|
||||
Для Каждого Элемент Из Форма.Элементы Цикл
|
||||
Если Тип(Элемент) = Тип("ГруппаФормы")
|
||||
И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа
|
||||
И Элемент.ОтображатьЗаголовок = Истина
|
||||
И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение
|
||||
Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда
|
||||
Элемент.ШрифтЗаголовка = ЖирныйШрифт;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина);
|
||||
Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл
|
||||
Элемент = Форма.Элементы[ИмяЗаголовка];
|
||||
Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда
|
||||
Элемент.ШрифтЗаголовка = ЖирныйШрифт;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Продолжение процедуры ЗапуститьФоновоеЗаданиеСКонтекстомКлиента.
|
||||
Процедура ПередЗапускомФоновогоЗаданияСКонтекстомКлиента(ВсеПараметры) Экспорт
|
||||
|
||||
РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ВсеПараметры.ИмяМетода, ВсеПараметры.Параметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет, что переданное имя является именем экспортной процедуры конфигурации.
|
||||
// Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма
|
||||
// на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить() и Вычислить()
|
||||
// при их использовании для динамического вызова методов код конфигурации.
|
||||
//
|
||||
// В случае, если переданная строка не соответствует имени метода конфигурации - генерируется.
|
||||
//
|
||||
Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяМетода) Экспорт
|
||||
|
||||
// Проверка предусловий на формат ИмяЭкспортнойПроцедуры.
|
||||
ЧастиИмени = СтрРазделить(ИмяМетода, ".");
|
||||
Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
ИмяОбъекта = ЧастиИмени[0];
|
||||
Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден общий модуль ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ИмяОбъекта);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() = 3 Тогда
|
||||
ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1];
|
||||
Попытка
|
||||
Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта);
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Если Менеджер = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден менеджер объекта ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ПолноеИмяОбъекта);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетодаОбъекта = ЧастиИмени[ЧастиИмени.ВГраница()];
|
||||
ВременнаяСтруктура = Новый Структура;
|
||||
Попытка
|
||||
// Проверка того, что ИмяМетодаОбъекта является допустимым идентификатором.
|
||||
// Например: МояПроцедура
|
||||
ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Имя метода ""%2"" не соответствует требованиям образования имен процедур и функций.'"),
|
||||
ИмяМетода,
|
||||
ИмяМетодаОбъекта);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
// Возвращает менеджер объекта по имени.
|
||||
// Ограничение: не обрабатываются точки маршрутов бизнес-процессов.
|
||||
//
|
||||
// Параметры:
|
||||
// Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникиМенеджер, СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ...
|
||||
//
|
||||
Функция МенеджерОбъектаПоИмени(Имя)
|
||||
Перем КлассОМ, ИмяОМ, Менеджер;
|
||||
|
||||
ЧастиИмени = СтрРазделить(Имя, ".");
|
||||
|
||||
Если ЧастиИмени.Количество() > 0 Тогда
|
||||
КлассОМ = ВРег(ЧастиИмени[0]);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() > 1 Тогда
|
||||
ИмяОМ = ЧастиИмени[1];
|
||||
КонецЕсли;
|
||||
|
||||
Если КлассОМ = "ПЛАНОБМЕНА"
|
||||
Или КлассОМ = "ПЛАНЫОБМЕНА" Тогда
|
||||
Менеджер = ПланыОбмена;
|
||||
|
||||
ИначеЕсли КлассОМ = "СПРАВОЧНИК"
|
||||
Или КлассОМ = "СПРАВОЧНИКИ" Тогда
|
||||
Менеджер = Справочники;
|
||||
|
||||
ИначеЕсли КлассОМ = "ДОКУМЕНТ"
|
||||
Или КлассОМ = "ДОКУМЕНТЫ" Тогда
|
||||
Менеджер = Документы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЖУРНАЛДОКУМЕНТОВ"
|
||||
Или КлассОМ = "ЖУРНАЛЫДОКУМЕНТОВ" Тогда
|
||||
Менеджер = ЖурналыДокументов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЕРЕЧИСЛЕНИЕ"
|
||||
Или КлассОМ = "ПЕРЕЧИСЛЕНИЯ" Тогда
|
||||
Менеджер = Перечисления;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОТЧЕТ"
|
||||
Или КлассОМ = "ОТЧЕТЫ" Тогда
|
||||
Менеджер = Отчеты;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОБРАБОТКА"
|
||||
Или КлассОМ = "ОБРАБОТКИ" Тогда
|
||||
Менеджер = Обработки;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВХАРАКТЕРИСТИК"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВХАРАКТЕРИСТИК" Тогда
|
||||
Менеджер = ПланыВидовХарактеристик;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНСЧЕТОВ"
|
||||
Или КлассОМ = "ПЛАНЫСЧЕТОВ" Тогда
|
||||
Менеджер = ПланыСчетов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВРАСЧЕТА"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВРАСЧЕТА" Тогда
|
||||
Менеджер = ПланыВидовРасчета;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРСВЕДЕНИЙ"
|
||||
Или КлассОМ = "РЕГИСТРЫСВЕДЕНИЙ" Тогда
|
||||
Менеджер = РегистрыСведений;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРНАКОПЛЕНИЯ"
|
||||
Или КлассОМ = "РЕГИСТРЫНАКОПЛЕНИЯ" Тогда
|
||||
Менеджер = РегистрыНакопления;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРБУХГАЛТЕРИИ"
|
||||
Или КлассОМ = "РЕГИСТРЫБУХГАЛТЕРИИ" Тогда
|
||||
Менеджер = РегистрыБухгалтерии;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРРАСЧЕТА"
|
||||
Или КлассОМ = "РЕГИСТРЫРАСЧЕТА" Тогда
|
||||
|
||||
Если ЧастиИмени.Количество() < 3 Тогда
|
||||
// Регистр расчета
|
||||
Менеджер = РегистрыРасчета;
|
||||
Иначе
|
||||
КлассПодчиненногоОМ = ВРег(ЧастиИмени[2]);
|
||||
Если ЧастиИмени.Количество() > 3 Тогда
|
||||
ИмяПодчиненногоОМ = ЧастиИмени[3];
|
||||
КонецЕсли;
|
||||
Если КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТ"
|
||||
Или КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТЫ" Тогда
|
||||
// Перерасчет
|
||||
Попытка
|
||||
Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты;
|
||||
ИмяОМ = ИмяПодчиненногоОМ;
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли КлассОМ = "БИЗНЕСПРОЦЕСС"
|
||||
Или КлассОМ = "БИЗНЕСПРОЦЕССЫ" Тогда
|
||||
Менеджер = БизнесПроцессы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЗАДАЧА"
|
||||
Или КлассОМ = "ЗАДАЧИ" Тогда
|
||||
Менеджер = Задачи;
|
||||
|
||||
ИначеЕсли КлассОМ = "КОНСТАНТА"
|
||||
Или КлассОМ = "КОНСТАНТЫ" Тогда
|
||||
Менеджер = Константы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТЬ"
|
||||
Или КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТИ" Тогда
|
||||
Менеджер = Последовательности;
|
||||
КонецЕсли;
|
||||
|
||||
Если Менеджер <> Неопределено Тогда
|
||||
Если ЗначениеЗаполнено(ИмяОМ) Тогда
|
||||
Попытка
|
||||
Возврат Менеджер[ИмяОМ];
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Иначе
|
||||
Возврат Менеджер;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Запуск фонового задания с контекстом клиента. Например, передаются ПараметрыКлиентаНаСервере.
|
||||
// Запуск выполняется с помощью процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Параметры - Массив - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Ключ - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
// Наименование - Строка - как в функции Выполнить менеджера фоновых заданий.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ФоновоеЗадание.
|
||||
//
|
||||
Функция ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетода, Параметры = Неопределено, Ключ = "", Наименование = "") Экспорт
|
||||
|
||||
Если ТекущийРежимЗапуска() = Неопределено Тогда
|
||||
ВызватьИсключение НСтр("ru = 'Запуск фонового задания с контекстом клиента возможен только при наличии клиента.'");
|
||||
КонецЕсли;
|
||||
|
||||
ВсеПараметры = Новый Структура;
|
||||
ВсеПараметры.Вставить("ИмяМетода", ИмяМетода);
|
||||
ВсеПараметры.Вставить("Параметры", Параметры);
|
||||
|
||||
ПараметрыПроцедурыФоновогоЗадания = Новый Массив;
|
||||
ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры);
|
||||
|
||||
Возврат ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.ПередЗапускомФоновогоЗаданияСКонтекстомКлиента",
|
||||
ПараметрыПроцедурыФоновогоЗадания, Ключ, Наименование);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Выполнить экспортную процедуру по имени с уровнем привилегий конфигурации.
|
||||
// При включении профилей безопасности для вызова оператора Выполнить() используется
|
||||
// переход в безопасный режим с профилем безопасности, используемом для информационной базы
|
||||
// (если выше по стеку не был установлен другой безопасный режим).
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - имя экспортной процедуры в формате
|
||||
// <имя объекта>.<имя процедуры>, где <имя объекта> - это
|
||||
// общий модуль или модуль менеджера объекта.
|
||||
// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры>
|
||||
// в порядке расположения элементов массива.
|
||||
//
|
||||
// Пример:
|
||||
// Параметры = Новый Массив();
|
||||
// Параметры.Добавить("1");
|
||||
// РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации("МойОбщийМодуль.МояПроцедура", Параметры);
|
||||
//
|
||||
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
|
||||
|
||||
Попытка
|
||||
ПроверитьИмяМетодаКонфигурации(ИмяМетода);
|
||||
Исключение
|
||||
ИнформацияОбОшибке = ИнформацияОбОшибке();
|
||||
ВызватьИсключение НСтр("ru = 'Ошибка при вызове процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме.'")
|
||||
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецПопытки;
|
||||
|
||||
ПараметрыСтрока = "";
|
||||
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда
|
||||
Для Индекс = 0 По Параметры.ВГраница() Цикл
|
||||
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],";
|
||||
КонецЦикла;
|
||||
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Устанавливает размер шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2.
|
||||
//
|
||||
// Параметры:
|
||||
// Форма - УправляемаяФорма - Форма для изменения шрифта заголовков групп;
|
||||
// ИменаГрупп - Строка - Список имен групп формы, разделенных запятыми.
|
||||
//
|
||||
Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт
|
||||
|
||||
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
|
||||
ЖирныйШрифт = Новый Шрифт(,, Истина);
|
||||
Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда
|
||||
Для Каждого Элемент Из Форма.Элементы Цикл
|
||||
Если Тип(Элемент) = Тип("ГруппаФормы")
|
||||
И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа
|
||||
И Элемент.ОтображатьЗаголовок = Истина
|
||||
И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение
|
||||
Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда
|
||||
Элемент.ШрифтЗаголовка = ЖирныйШрифт;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина);
|
||||
Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл
|
||||
Элемент = Форма.Элементы[ИмяЗаголовка];
|
||||
Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда
|
||||
Элемент.ШрифтЗаголовка = ЖирныйШрифт;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Продолжение процедуры ЗапуститьФоновоеЗаданиеСКонтекстомКлиента.
|
||||
Процедура ПередЗапускомФоновогоЗаданияСКонтекстомКлиента(ВсеПараметры) Экспорт
|
||||
|
||||
РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ВсеПараметры.ИмяМетода, ВсеПараметры.Параметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверяет, что переданное имя является именем экспортной процедуры конфигурации.
|
||||
// Может использоваться для проверки, что переданная строка не содержит произвольного алгоритма
|
||||
// на встроенном языке 1С:Предприятия перед использованием его в операторах Выполнить() и Вычислить()
|
||||
// при их использовании для динамического вызова методов код конфигурации.
|
||||
//
|
||||
// В случае, если переданная строка не соответствует имени метода конфигурации - генерируется.
|
||||
//
|
||||
Процедура ПроверитьИмяМетодаКонфигурации(Знач ИмяМетода) Экспорт
|
||||
|
||||
// Проверка предусловий на формат ИмяЭкспортнойПроцедуры.
|
||||
ЧастиИмени = СтрРазделить(ИмяМетода, ".");
|
||||
Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1)'"), ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
ИмяОбъекта = ЧастиИмени[0];
|
||||
Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден общий модуль ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ИмяОбъекта);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() = 3 Тогда
|
||||
ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1];
|
||||
Попытка
|
||||
Менеджер = МенеджерОбъектаПоИмени(ПолноеИмяОбъекта);
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Если Менеджер = Неопределено Тогда
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Не найден менеджер объекта ""%2"".'"),
|
||||
ИмяМетода,
|
||||
ПолноеИмяОбъекта);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетодаОбъекта = ЧастиИмени[ЧастиИмени.ВГраница()];
|
||||
ВременнаяСтруктура = Новый Структура;
|
||||
Попытка
|
||||
// Проверка того, что ИмяМетодаОбъекта является допустимым идентификатором.
|
||||
// Например: МояПроцедура
|
||||
ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
|
||||
УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
ВызватьИсключение СтрШаблон(
|
||||
НСтр("ru = 'Неправильный формат параметра ИмяМетода (%1):
|
||||
|Имя метода ""%2"" не соответствует требованиям образования имен процедур и функций.'"),
|
||||
ИмяМетода,
|
||||
ИмяМетодаОбъекта);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
// Возвращает менеджер объекта по имени.
|
||||
// Ограничение: не обрабатываются точки маршрутов бизнес-процессов.
|
||||
//
|
||||
// Параметры:
|
||||
// Имя - Строка - имя например, "Справочник", "Справочники", "Справочник.Организации".
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// СправочникиМенеджер, СправочникМенеджер, ДокументыМенеджер, ДокументМенеджер, ...
|
||||
//
|
||||
Функция МенеджерОбъектаПоИмени(Имя)
|
||||
Перем КлассОМ, ИмяОМ, Менеджер;
|
||||
|
||||
ЧастиИмени = СтрРазделить(Имя, ".");
|
||||
|
||||
Если ЧастиИмени.Количество() > 0 Тогда
|
||||
КлассОМ = ВРег(ЧастиИмени[0]);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧастиИмени.Количество() > 1 Тогда
|
||||
ИмяОМ = ЧастиИмени[1];
|
||||
КонецЕсли;
|
||||
|
||||
Если КлассОМ = "ПЛАНОБМЕНА"
|
||||
Или КлассОМ = "ПЛАНЫОБМЕНА" Тогда
|
||||
Менеджер = ПланыОбмена;
|
||||
|
||||
ИначеЕсли КлассОМ = "СПРАВОЧНИК"
|
||||
Или КлассОМ = "СПРАВОЧНИКИ" Тогда
|
||||
Менеджер = Справочники;
|
||||
|
||||
ИначеЕсли КлассОМ = "ДОКУМЕНТ"
|
||||
Или КлассОМ = "ДОКУМЕНТЫ" Тогда
|
||||
Менеджер = Документы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЖУРНАЛДОКУМЕНТОВ"
|
||||
Или КлассОМ = "ЖУРНАЛЫДОКУМЕНТОВ" Тогда
|
||||
Менеджер = ЖурналыДокументов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЕРЕЧИСЛЕНИЕ"
|
||||
Или КлассОМ = "ПЕРЕЧИСЛЕНИЯ" Тогда
|
||||
Менеджер = Перечисления;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОТЧЕТ"
|
||||
Или КлассОМ = "ОТЧЕТЫ" Тогда
|
||||
Менеджер = Отчеты;
|
||||
|
||||
ИначеЕсли КлассОМ = "ОБРАБОТКА"
|
||||
Или КлассОМ = "ОБРАБОТКИ" Тогда
|
||||
Менеджер = Обработки;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВХАРАКТЕРИСТИК"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВХАРАКТЕРИСТИК" Тогда
|
||||
Менеджер = ПланыВидовХарактеристик;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНСЧЕТОВ"
|
||||
Или КлассОМ = "ПЛАНЫСЧЕТОВ" Тогда
|
||||
Менеджер = ПланыСчетов;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПЛАНВИДОВРАСЧЕТА"
|
||||
Или КлассОМ = "ПЛАНЫВИДОВРАСЧЕТА" Тогда
|
||||
Менеджер = ПланыВидовРасчета;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРСВЕДЕНИЙ"
|
||||
Или КлассОМ = "РЕГИСТРЫСВЕДЕНИЙ" Тогда
|
||||
Менеджер = РегистрыСведений;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРНАКОПЛЕНИЯ"
|
||||
Или КлассОМ = "РЕГИСТРЫНАКОПЛЕНИЯ" Тогда
|
||||
Менеджер = РегистрыНакопления;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРБУХГАЛТЕРИИ"
|
||||
Или КлассОМ = "РЕГИСТРЫБУХГАЛТЕРИИ" Тогда
|
||||
Менеджер = РегистрыБухгалтерии;
|
||||
|
||||
ИначеЕсли КлассОМ = "РЕГИСТРРАСЧЕТА"
|
||||
Или КлассОМ = "РЕГИСТРЫРАСЧЕТА" Тогда
|
||||
|
||||
Если ЧастиИмени.Количество() < 3 Тогда
|
||||
// Регистр расчета
|
||||
Менеджер = РегистрыРасчета;
|
||||
Иначе
|
||||
КлассПодчиненногоОМ = ВРег(ЧастиИмени[2]);
|
||||
Если ЧастиИмени.Количество() > 3 Тогда
|
||||
ИмяПодчиненногоОМ = ЧастиИмени[3];
|
||||
КонецЕсли;
|
||||
Если КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТ"
|
||||
Или КлассПодчиненногоОМ = "ПЕРЕРАСЧЕТЫ" Тогда
|
||||
// Перерасчет
|
||||
Попытка
|
||||
Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты;
|
||||
ИмяОМ = ИмяПодчиненногоОМ;
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли КлассОМ = "БИЗНЕСПРОЦЕСС"
|
||||
Или КлассОМ = "БИЗНЕСПРОЦЕССЫ" Тогда
|
||||
Менеджер = БизнесПроцессы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ЗАДАЧА"
|
||||
Или КлассОМ = "ЗАДАЧИ" Тогда
|
||||
Менеджер = Задачи;
|
||||
|
||||
ИначеЕсли КлассОМ = "КОНСТАНТА"
|
||||
Или КлассОМ = "КОНСТАНТЫ" Тогда
|
||||
Менеджер = Константы;
|
||||
|
||||
ИначеЕсли КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТЬ"
|
||||
Или КлассОМ = "ПОСЛЕДОВАТЕЛЬНОСТИ" Тогда
|
||||
Менеджер = Последовательности;
|
||||
КонецЕсли;
|
||||
|
||||
Если Менеджер <> Неопределено Тогда
|
||||
Если ЗначениеЗаполнено(ИмяОМ) Тогда
|
||||
Попытка
|
||||
Возврат Менеджер[ИмяОМ];
|
||||
Исключение
|
||||
Менеджер = Неопределено;
|
||||
КонецПопытки;
|
||||
Иначе
|
||||
Возврат Менеджер;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьИсключение СтрШаблон(НСтр("ru = 'Не удалось получить менеджер для объекта ""%1""'"), Имя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,211 +1,219 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
|
||||
// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину.
|
||||
//
|
||||
// Параметры:
|
||||
// Строка - Строка - текст с разделителями;
|
||||
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
|
||||
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
|
||||
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
|
||||
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
|
||||
// включаются в результат.
|
||||
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
|
||||
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
|
||||
// при других разделителях результатом функции будет пустой массив.
|
||||
// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - массив строк.
|
||||
//
|
||||
// Примеры:
|
||||
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые
|
||||
// строки;
|
||||
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов;
|
||||
// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов;
|
||||
// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив;
|
||||
// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой);
|
||||
// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой);
|
||||
//
|
||||
// Примечание:
|
||||
// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
|
||||
// рекомендуется использовать функцию платформы СтрРазделить.
|
||||
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт
|
||||
|
||||
Результат = Новый Массив;
|
||||
|
||||
// Для обеспечения обратной совместимости.
|
||||
Если ПропускатьПустыеСтроки = Неопределено Тогда
|
||||
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
|
||||
Если ПустаяСтрока(Строка) Тогда
|
||||
Если Разделитель = " " Тогда
|
||||
Результат.Добавить("");
|
||||
КонецЕсли;
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
//
|
||||
|
||||
Позиция = СтрНайти(Строка, Разделитель);
|
||||
Пока Позиция > 0 Цикл
|
||||
Подстрока = Лев(Строка, Позиция - 1);
|
||||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
|
||||
Если СокращатьНепечатаемыеСимволы Тогда
|
||||
Результат.Добавить(СокрЛП(Подстрока));
|
||||
Иначе
|
||||
Результат.Добавить(Подстрока);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
|
||||
Позиция = СтрНайти(Строка, Разделитель);
|
||||
КонецЦикла;
|
||||
|
||||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
|
||||
Если СокращатьНепечатаемыеСимволы Тогда
|
||||
Результат.Добавить(СокрЛП(Строка));
|
||||
Иначе
|
||||
Результат.Добавить(Строка);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет, является ли строка уникальным идентификатором.
|
||||
// В качестве уникального идентификатора предполагается строка вида
|
||||
// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f].
|
||||
//
|
||||
// Параметры:
|
||||
// Строка - Строка - проверяемая строка.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если переданная строка является уникальным идентификатором.
|
||||
Функция ЭтоУникальныйИдентификатор(Знач Строка) Экспорт
|
||||
|
||||
Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
|
||||
|
||||
Если СтрДлина(Шаблон) <> СтрДлина(Строка) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
Для Позиция = 1 По СтрДлина(Строка) Цикл
|
||||
Если КодСимвола(Шаблон, Позиция) = 88 // X
|
||||
И ((КодСимвола(Строка, Позиция) < 48 Или КодСимвола(Строка, Позиция) > 57) // 0..9
|
||||
И (КодСимвола(Строка, Позиция) < 97 Или КодСимвола(Строка, Позиция) > 102) // a..f
|
||||
И (КодСимвола(Строка, Позиция) < 65 Или КодСимвола(Строка, Позиция) > 70)) // A..F
|
||||
Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Строка, Позиция) <> 45 Тогда // -
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Подставляет параметры в строку. Максимально возможное число параметров - 9.
|
||||
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра");
|
||||
// Параметр<n> - Строка - подставляемый параметр.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - текстовая строка с подставленными параметрами.
|
||||
//
|
||||
// Пример:
|
||||
// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк".
|
||||
//
|
||||
// Примечание:
|
||||
// В случаях, когда число используемых параметров в строке совпадает с числом переданных для подстановки параметров,
|
||||
// рекомендуется использовать функцию платформы СтрШаблон.
|
||||
Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки,
|
||||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
|
||||
|
||||
ИспользоватьАльтернативныйАлгоритм =
|
||||
СтрНайти(Параметр1, "%")
|
||||
Или СтрНайти(Параметр2, "%")
|
||||
Или СтрНайти(Параметр3, "%")
|
||||
Или СтрНайти(Параметр4, "%")
|
||||
Или СтрНайти(Параметр5, "%")
|
||||
Или СтрНайти(Параметр6, "%")
|
||||
Или СтрНайти(Параметр7, "%")
|
||||
Или СтрНайти(Параметр8, "%")
|
||||
Или СтрНайти(Параметр9, "%");
|
||||
|
||||
Если ИспользоватьАльтернативныйАлгоритм Тогда
|
||||
СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1,
|
||||
Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
|
||||
Иначе
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%4", Параметр4);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%5", Параметр5);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%6", Параметр6);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%7", Параметр7);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%8", Параметр8);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%9", Параметр9);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрокаПодстановки;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
|
||||
// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д.
|
||||
Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки,
|
||||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено)
|
||||
|
||||
Результат = "";
|
||||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||||
Пока Позиция > 0 Цикл
|
||||
Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1);
|
||||
СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1);
|
||||
ПодставляемыйПараметр = "";
|
||||
Если СимволПослеПроцента = "1" Тогда
|
||||
ПодставляемыйПараметр = Параметр1;
|
||||
ИначеЕсли СимволПослеПроцента = "2" Тогда
|
||||
ПодставляемыйПараметр = Параметр2;
|
||||
ИначеЕсли СимволПослеПроцента = "3" Тогда
|
||||
ПодставляемыйПараметр = Параметр3;
|
||||
ИначеЕсли СимволПослеПроцента = "4" Тогда
|
||||
ПодставляемыйПараметр = Параметр4;
|
||||
ИначеЕсли СимволПослеПроцента = "5" Тогда
|
||||
ПодставляемыйПараметр = Параметр5;
|
||||
ИначеЕсли СимволПослеПроцента = "6" Тогда
|
||||
ПодставляемыйПараметр = Параметр6;
|
||||
ИначеЕсли СимволПослеПроцента = "7" Тогда
|
||||
ПодставляемыйПараметр = Параметр7
|
||||
ИначеЕсли СимволПослеПроцента = "8" Тогда
|
||||
ПодставляемыйПараметр = Параметр8;
|
||||
ИначеЕсли СимволПослеПроцента = "9" Тогда
|
||||
ПодставляемыйПараметр = Параметр9;
|
||||
КонецЕсли;
|
||||
Если ПодставляемыйПараметр = "" Тогда
|
||||
Результат = Результат + "%";
|
||||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1);
|
||||
Иначе
|
||||
Результат = Результат + ПодставляемыйПараметр;
|
||||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2);
|
||||
КонецЕсли;
|
||||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||||
КонецЦикла;
|
||||
Результат = Результат + СтрокаПодстановки;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Подсистема "Базовая функциональность".
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
|
||||
// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину.
|
||||
//
|
||||
// Параметры:
|
||||
// Строка - Строка - текст с разделителями;
|
||||
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
|
||||
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
|
||||
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
|
||||
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
|
||||
// включаются в результат.
|
||||
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
|
||||
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
|
||||
// при других разделителях результатом функции будет пустой массив.
|
||||
// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив - массив строк.
|
||||
//
|
||||
// Примеры:
|
||||
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые
|
||||
// строки;
|
||||
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов;
|
||||
// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов;
|
||||
// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив;
|
||||
// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой);
|
||||
// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой);
|
||||
//
|
||||
// Примечание:
|
||||
// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
|
||||
// рекомендуется использовать функцию платформы СтрРазделить.
|
||||
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт
|
||||
|
||||
Результат = Новый Массив;
|
||||
|
||||
// Для обеспечения обратной совместимости.
|
||||
Если ПропускатьПустыеСтроки = Неопределено Тогда
|
||||
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
|
||||
Если ПустаяСтрока(Строка) Тогда
|
||||
Если Разделитель = " " Тогда
|
||||
Результат.Добавить("");
|
||||
КонецЕсли;
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
//
|
||||
|
||||
Позиция = СтрНайти(Строка, Разделитель);
|
||||
Пока Позиция > 0 Цикл
|
||||
Подстрока = Лев(Строка, Позиция - 1);
|
||||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
|
||||
Если СокращатьНепечатаемыеСимволы Тогда
|
||||
Результат.Добавить(СокрЛП(Подстрока));
|
||||
Иначе
|
||||
Результат.Добавить(Подстрока);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
|
||||
Позиция = СтрНайти(Строка, Разделитель);
|
||||
КонецЦикла;
|
||||
|
||||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
|
||||
Если СокращатьНепечатаемыеСимволы Тогда
|
||||
Результат.Добавить(СокрЛП(Строка));
|
||||
Иначе
|
||||
Результат.Добавить(Строка);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет, является ли строка уникальным идентификатором.
|
||||
// В качестве уникального идентификатора предполагается строка вида
|
||||
// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f].
|
||||
//
|
||||
// Параметры:
|
||||
// Строка - Строка - проверяемая строка.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если переданная строка является уникальным идентификатором.
|
||||
Функция ЭтоУникальныйИдентификатор(Знач Строка) Экспорт
|
||||
|
||||
Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
|
||||
|
||||
Если СтрДлина(Шаблон) <> СтрДлина(Строка) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
Для Позиция = 1 По СтрДлина(Строка) Цикл
|
||||
Если КодСимвола(Шаблон, Позиция) = 88 // X
|
||||
И ((КодСимвола(Строка, Позиция) < 48 Или КодСимвола(Строка, Позиция) > 57) // 0..9
|
||||
И (КодСимвола(Строка, Позиция) < 97 Или КодСимвола(Строка, Позиция) > 102) // a..f
|
||||
И (КодСимвола(Строка, Позиция) < 65 Или КодСимвола(Строка, Позиция) > 70)) // A..F
|
||||
Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Строка, Позиция) <> 45 Тогда // -
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Подставляет параметры в строку. Максимально возможное число параметров - 9.
|
||||
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
|
||||
//
|
||||
// Параметры:
|
||||
// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра");
|
||||
// Параметр<n> - Строка - подставляемый параметр.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - текстовая строка с подставленными параметрами.
|
||||
//
|
||||
// Пример:
|
||||
// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк".
|
||||
//
|
||||
// Примечание:
|
||||
// В случаях, когда число используемых параметров в строке совпадает с числом переданных для подстановки параметров,
|
||||
// рекомендуется использовать функцию платформы СтрШаблон.
|
||||
Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки,
|
||||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
|
||||
|
||||
ИспользоватьАльтернативныйАлгоритм =
|
||||
СтрНайти(Параметр1, "%")
|
||||
Или СтрНайти(Параметр2, "%")
|
||||
Или СтрНайти(Параметр3, "%")
|
||||
Или СтрНайти(Параметр4, "%")
|
||||
Или СтрНайти(Параметр5, "%")
|
||||
Или СтрНайти(Параметр6, "%")
|
||||
Или СтрНайти(Параметр7, "%")
|
||||
Или СтрНайти(Параметр8, "%")
|
||||
Или СтрНайти(Параметр9, "%");
|
||||
|
||||
Если ИспользоватьАльтернативныйАлгоритм Тогда
|
||||
СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1,
|
||||
Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
|
||||
Иначе
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%4", Параметр4);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%5", Параметр5);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%6", Параметр6);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%7", Параметр7);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%8", Параметр8);
|
||||
СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%9", Параметр9);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрокаПодстановки;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
|
||||
// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д.
|
||||
Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки,
|
||||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено)
|
||||
|
||||
Результат = "";
|
||||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||||
Пока Позиция > 0 Цикл
|
||||
Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1);
|
||||
СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1);
|
||||
ПодставляемыйПараметр = "";
|
||||
Если СимволПослеПроцента = "1" Тогда
|
||||
ПодставляемыйПараметр = Параметр1;
|
||||
ИначеЕсли СимволПослеПроцента = "2" Тогда
|
||||
ПодставляемыйПараметр = Параметр2;
|
||||
ИначеЕсли СимволПослеПроцента = "3" Тогда
|
||||
ПодставляемыйПараметр = Параметр3;
|
||||
ИначеЕсли СимволПослеПроцента = "4" Тогда
|
||||
ПодставляемыйПараметр = Параметр4;
|
||||
ИначеЕсли СимволПослеПроцента = "5" Тогда
|
||||
ПодставляемыйПараметр = Параметр5;
|
||||
ИначеЕсли СимволПослеПроцента = "6" Тогда
|
||||
ПодставляемыйПараметр = Параметр6;
|
||||
ИначеЕсли СимволПослеПроцента = "7" Тогда
|
||||
ПодставляемыйПараметр = Параметр7
|
||||
ИначеЕсли СимволПослеПроцента = "8" Тогда
|
||||
ПодставляемыйПараметр = Параметр8;
|
||||
ИначеЕсли СимволПослеПроцента = "9" Тогда
|
||||
ПодставляемыйПараметр = Параметр9;
|
||||
КонецЕсли;
|
||||
Если ПодставляемыйПараметр = "" Тогда
|
||||
Результат = Результат + "%";
|
||||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1);
|
||||
Иначе
|
||||
Результат = Результат + ПодставляемыйПараметр;
|
||||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2);
|
||||
КонецЕсли;
|
||||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||||
КонецЦикла;
|
||||
Результат = Результат + СтрокаПодстановки;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -40,7 +40,7 @@
|
||||
</detailedInformation>
|
||||
<copyright>
|
||||
<key>ru</key>
|
||||
<value>Copyright © ООО "1С-Софт"</value>
|
||||
<value>Copyright © ООО "1С-Софт", Все права защищены. Эта программа и сопроводительные материалы предоставляются в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) Текст лицензии доступен по ссылке: https://creativecommons.org/licenses/by-sa/4.0/legalcode</value>
|
||||
</copyright>
|
||||
<vendorInformationAddress>
|
||||
<key>ru</key>
|
||||
|
@ -1,36 +1,44 @@
|
||||
#Область ОписаниеПеременных
|
||||
|
||||
// СтандартныеПодсистемы
|
||||
|
||||
// Хранилище глобальных переменных.
|
||||
//
|
||||
// ПараметрыПриложения - Соответствие - хранилище переменных, где:
|
||||
// * Ключ - Строка - имя переменной в формате "ИмяБиблиотеки.ИмяПеременной";
|
||||
// * Значение - Произвольный - значение переменной.
|
||||
//
|
||||
// Инициализация (на примере СообщенияДляЖурналаРегистрации):
|
||||
// ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации";
|
||||
// Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
// ПараметрыПриложения.Вставить(ИмяПараметра, Новый СписокЗначений);
|
||||
// КонецЕсли;
|
||||
//
|
||||
// Использование (на примере СообщенияДляЖурналаРегистрации):
|
||||
// ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(...);
|
||||
// ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...;
|
||||
Перем ПараметрыПриложения Экспорт;
|
||||
|
||||
// Конец СтандартныеПодсистемы
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередНачаломРаботыСистемы(Отказ)
|
||||
|
||||
Если ПараметрыПриложения = Неопределено Тогда
|
||||
ПараметрыПриложения = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОписаниеПеременных
|
||||
|
||||
// СтандартныеПодсистемы
|
||||
|
||||
// Хранилище глобальных переменных.
|
||||
//
|
||||
// ПараметрыПриложения - Соответствие - хранилище переменных, где:
|
||||
// * Ключ - Строка - имя переменной в формате "ИмяБиблиотеки.ИмяПеременной";
|
||||
// * Значение - Произвольный - значение переменной.
|
||||
//
|
||||
// Инициализация (на примере СообщенияДляЖурналаРегистрации):
|
||||
// ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации";
|
||||
// Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
|
||||
// ПараметрыПриложения.Вставить(ИмяПараметра, Новый СписокЗначений);
|
||||
// КонецЕсли;
|
||||
//
|
||||
// Использование (на примере СообщенияДляЖурналаРегистрации):
|
||||
// ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(...);
|
||||
// ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...;
|
||||
Перем ПараметрыПриложения Экспорт;
|
||||
|
||||
// Конец СтандартныеПодсистемы
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередНачаломРаботыСистемы(Отказ)
|
||||
|
||||
Если ПараметрыПриложения = Неопределено Тогда
|
||||
ПараметрыПриложения = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1,3 +1,11 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
@ -1,3 +1,10 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
|
@ -1,14 +1,22 @@
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
|
||||
|
||||
ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма",
|
||||
,
|
||||
ПараметрыВыполненияКоманды.Источник,
|
||||
ПараметрыВыполненияКоманды.Уникальность,
|
||||
ПараметрыВыполненияКоманды.Окно);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
|
||||
|
||||
ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма",
|
||||
,
|
||||
ПараметрыВыполненияКоманды.Источник,
|
||||
ПараметрыВыполненияКоманды.Уникальность,
|
||||
ПараметрыВыполненияКоманды.Окно);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,254 +1,261 @@
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Действие = Параметры.Действие;
|
||||
|
||||
Если СтрНайти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда
|
||||
|
||||
ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'");
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие = "Добавить" Тогда
|
||||
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
|
||||
Для каждого РегламентноеЗаданиеМетаданные Из Метаданные.РегламентныеЗадания Цикл
|
||||
ОписанияМетаданныхРегламентныхЗаданий.Добавить(
|
||||
РегламентноеЗаданиеМетаданные.Имя
|
||||
+ Символы.ПС
|
||||
+ РегламентноеЗаданиеМетаданные.Синоним
|
||||
+ Символы.ПС
|
||||
+ РегламентноеЗаданиеМетаданные.ИмяМетода,
|
||||
?(ПустаяСтрока(РегламентноеЗаданиеМетаданные.Синоним),
|
||||
РегламентноеЗаданиеМетаданные.Имя,
|
||||
РегламентноеЗаданиеМетаданные.Синоним) );
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Параметры.Идентификатор);
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
Задание,
|
||||
"Ключ,
|
||||
|Предопределенное,
|
||||
|Использование,
|
||||
|Наименование,
|
||||
|ИмяПользователя,
|
||||
|ИнтервалПовтораПриАварийномЗавершении,
|
||||
|КоличествоПовторовПриАварийномЗавершении");
|
||||
|
||||
Идентификатор = Строка(Задание.УникальныйИдентификатор);
|
||||
Если Задание.Метаданные = Неопределено Тогда
|
||||
ИмяМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
СинонимМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
ИмяМетодаМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
Иначе
|
||||
ИмяМетаданных = Задание.Метаданные.Имя;
|
||||
СинонимМетаданных = Задание.Метаданные.Синоним;
|
||||
ИмяМетодаМетаданных = Задание.Метаданные.ИмяМетода;
|
||||
КонецЕсли;
|
||||
Расписание = Задание.Расписание;
|
||||
|
||||
СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный
|
||||
.СообщенияИОписанияОшибокРегламентногоЗадания(Задание);
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие <> "Изменить" Тогда
|
||||
Идентификатор = НСтр("ru = '<будет создан при записи>'");
|
||||
Использование = Ложь;
|
||||
|
||||
Наименование = ?(
|
||||
Действие = "Добавить",
|
||||
"",
|
||||
РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(Задание));
|
||||
КонецЕсли;
|
||||
|
||||
// Заполнение списка выбора имени пользователя.
|
||||
МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
|
||||
|
||||
Для каждого Пользователь Из МассивПользователей Цикл
|
||||
Элементы.ИмяПользователя.СписокВыбора.Добавить(Пользователь.Имя);
|
||||
КонецЦикла;
|
||||
|
||||
СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект);
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПриОткрытии(Отказ)
|
||||
|
||||
Если Действие = "Добавить" Тогда
|
||||
ПодключитьОбработчикОжидания("ВыборШаблонаНовогоРегламентногоЗадания", 0.1, Истина);
|
||||
Иначе
|
||||
ОбновитьЗаголовокФормы();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьЗавершение", ЭтотОбъект);
|
||||
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура НаименованиеПриИзменении(Элемент)
|
||||
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиКомандФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура Записать(Команда)
|
||||
|
||||
ЗаписатьРегламентноеЗадание();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьИЗакрытьВыполнить()
|
||||
|
||||
ЗаписатьИЗакрытьЗавершение();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура НастроитьРасписаниеВыполнить()
|
||||
|
||||
Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
Диалог.Показать(Новый ОписаниеОповещения("ОткрытьРасписаниеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьИЗакрытьЗавершение(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ЗаписатьРегламентноеЗадание();
|
||||
Модифицированность = Ложь;
|
||||
Закрыть();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыборШаблонаНовогоРегламентногоЗадания()
|
||||
|
||||
// Выбор шаблона регламентного задания (метаданные).
|
||||
ОписанияМетаданныхРегламентныхЗаданий.ПоказатьВыборЭлемента(
|
||||
Новый ОписаниеОповещения("ВыборШаблонаНовогоРегламентногоЗаданияЗавершение", ЭтотОбъект),
|
||||
НСтр("ru = 'Выберите шаблон регламентного задания'"));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыборШаблонаНовогоРегламентногоЗаданияЗавершение(ЭлементСписка, Неопределен) Экспорт
|
||||
|
||||
Если ЭлементСписка = Неопределено Тогда
|
||||
Закрыть();
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 1);
|
||||
СинонимМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 2);
|
||||
ИмяМетодаМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 3);
|
||||
Наименование = ЭлементСписка.Представление;
|
||||
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОткрытьРасписаниеЗавершение(НовоеРасписание, Неопределен) Экспорт
|
||||
|
||||
Если НовоеРасписание <> Неопределено Тогда
|
||||
Расписание = НовоеРасписание;
|
||||
Модифицированность = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьРегламентноеЗадание()
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИмяМетаданных) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийИдентификатор = ?(Действие = "Изменить", Идентификатор, Неопределено);
|
||||
|
||||
ЗаписатьРегламентноеЗаданиеНаСервере();
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
Оповестить("Запись_РегламентныеЗадания", ТекущийИдентификатор);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ЗаписатьРегламентноеЗаданиеНаСервере()
|
||||
|
||||
Если Действие = "Изменить" Тогда
|
||||
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Идентификатор);
|
||||
Иначе
|
||||
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(
|
||||
Метаданные.РегламентныеЗадания[ИмяМетаданных]);
|
||||
|
||||
Идентификатор = Строка(Задание.УникальныйИдентификатор);
|
||||
Действие = "Изменить";
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
Задание,
|
||||
ЭтотОбъект,
|
||||
"Ключ,
|
||||
|Наименование,
|
||||
|Использование,
|
||||
|ИмяПользователя,
|
||||
|ИнтервалПовтораПриАварийномЗавершении,
|
||||
|КоличествоПовторовПриАварийномЗавершении");
|
||||
|
||||
Задание.Расписание = Расписание;
|
||||
Задание.Записать();
|
||||
|
||||
Модифицированность = Ложь;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбновитьЗаголовокФормы()
|
||||
|
||||
Если НЕ ПустаяСтрока(Наименование) Тогда
|
||||
Представление = Наименование;
|
||||
|
||||
ИначеЕсли НЕ ПустаяСтрока(СинонимМетаданных) Тогда
|
||||
Представление = СинонимМетаданных;
|
||||
Иначе
|
||||
Представление = ИмяМетаданных;
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие = "Изменить" Тогда
|
||||
Заголовок = СтрШаблон(НСтр("ru = '%1 (Регламентное задание)'"), Представление);
|
||||
Иначе
|
||||
Заголовок = НСтр("ru = 'Регламентное задание (создание)'");
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Действие = Параметры.Действие;
|
||||
|
||||
Если СтрНайти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда
|
||||
|
||||
ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'");
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие = "Добавить" Тогда
|
||||
|
||||
Расписание = Новый РасписаниеРегламентногоЗадания;
|
||||
|
||||
Для каждого РегламентноеЗаданиеМетаданные Из Метаданные.РегламентныеЗадания Цикл
|
||||
ОписанияМетаданныхРегламентныхЗаданий.Добавить(
|
||||
РегламентноеЗаданиеМетаданные.Имя
|
||||
+ Символы.ПС
|
||||
+ РегламентноеЗаданиеМетаданные.Синоним
|
||||
+ Символы.ПС
|
||||
+ РегламентноеЗаданиеМетаданные.ИмяМетода,
|
||||
?(ПустаяСтрока(РегламентноеЗаданиеМетаданные.Синоним),
|
||||
РегламентноеЗаданиеМетаданные.Имя,
|
||||
РегламентноеЗаданиеМетаданные.Синоним) );
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Параметры.Идентификатор);
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
Задание,
|
||||
"Ключ,
|
||||
|Предопределенное,
|
||||
|Использование,
|
||||
|Наименование,
|
||||
|ИмяПользователя,
|
||||
|ИнтервалПовтораПриАварийномЗавершении,
|
||||
|КоличествоПовторовПриАварийномЗавершении");
|
||||
|
||||
Идентификатор = Строка(Задание.УникальныйИдентификатор);
|
||||
Если Задание.Метаданные = Неопределено Тогда
|
||||
ИмяМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
СинонимМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
ИмяМетодаМетаданных = НСтр("ru = '<нет метаданных>'");
|
||||
Иначе
|
||||
ИмяМетаданных = Задание.Метаданные.Имя;
|
||||
СинонимМетаданных = Задание.Метаданные.Синоним;
|
||||
ИмяМетодаМетаданных = Задание.Метаданные.ИмяМетода;
|
||||
КонецЕсли;
|
||||
Расписание = Задание.Расписание;
|
||||
|
||||
СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный
|
||||
.СообщенияИОписанияОшибокРегламентногоЗадания(Задание);
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие <> "Изменить" Тогда
|
||||
Идентификатор = НСтр("ru = '<будет создан при записи>'");
|
||||
Использование = Ложь;
|
||||
|
||||
Наименование = ?(
|
||||
Действие = "Добавить",
|
||||
"",
|
||||
РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(Задание));
|
||||
КонецЕсли;
|
||||
|
||||
// Заполнение списка выбора имени пользователя.
|
||||
МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
|
||||
|
||||
Для каждого Пользователь Из МассивПользователей Цикл
|
||||
Элементы.ИмяПользователя.СписокВыбора.Добавить(Пользователь.Имя);
|
||||
КонецЦикла;
|
||||
|
||||
СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект);
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПриОткрытии(Отказ)
|
||||
|
||||
Если Действие = "Добавить" Тогда
|
||||
ПодключитьОбработчикОжидания("ВыборШаблонаНовогоРегламентногоЗадания", 0.1, Истина);
|
||||
Иначе
|
||||
ОбновитьЗаголовокФормы();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьЗавершение", ЭтотОбъект);
|
||||
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовШапкиФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура НаименованиеПриИзменении(Элемент)
|
||||
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиКомандФормы
|
||||
|
||||
&НаКлиенте
|
||||
Процедура Записать(Команда)
|
||||
|
||||
ЗаписатьРегламентноеЗадание();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьИЗакрытьВыполнить()
|
||||
|
||||
ЗаписатьИЗакрытьЗавершение();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура НастроитьРасписаниеВыполнить()
|
||||
|
||||
Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
|
||||
Диалог.Показать(Новый ОписаниеОповещения("ОткрытьРасписаниеЗавершение", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьИЗакрытьЗавершение(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
|
||||
|
||||
ЗаписатьРегламентноеЗадание();
|
||||
Модифицированность = Ложь;
|
||||
Закрыть();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыборШаблонаНовогоРегламентногоЗадания()
|
||||
|
||||
// Выбор шаблона регламентного задания (метаданные).
|
||||
ОписанияМетаданныхРегламентныхЗаданий.ПоказатьВыборЭлемента(
|
||||
Новый ОписаниеОповещения("ВыборШаблонаНовогоРегламентногоЗаданияЗавершение", ЭтотОбъект),
|
||||
НСтр("ru = 'Выберите шаблон регламентного задания'"));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыборШаблонаНовогоРегламентногоЗаданияЗавершение(ЭлементСписка, Неопределен) Экспорт
|
||||
|
||||
Если ЭлементСписка = Неопределено Тогда
|
||||
Закрыть();
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 1);
|
||||
СинонимМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 2);
|
||||
ИмяМетодаМетаданных = СтрПолучитьСтроку(ЭлементСписка.Значение, 3);
|
||||
Наименование = ЭлементСписка.Представление;
|
||||
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОткрытьРасписаниеЗавершение(НовоеРасписание, Неопределен) Экспорт
|
||||
|
||||
Если НовоеРасписание <> Неопределено Тогда
|
||||
Расписание = НовоеРасписание;
|
||||
Модифицированность = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗаписатьРегламентноеЗадание()
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИмяМетаданных) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийИдентификатор = ?(Действие = "Изменить", Идентификатор, Неопределено);
|
||||
|
||||
ЗаписатьРегламентноеЗаданиеНаСервере();
|
||||
ОбновитьЗаголовокФормы();
|
||||
|
||||
Оповестить("Запись_РегламентныеЗадания", ТекущийИдентификатор);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Процедура ЗаписатьРегламентноеЗаданиеНаСервере()
|
||||
|
||||
Если Действие = "Изменить" Тогда
|
||||
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Идентификатор);
|
||||
Иначе
|
||||
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(
|
||||
Метаданные.РегламентныеЗадания[ИмяМетаданных]);
|
||||
|
||||
Идентификатор = Строка(Задание.УникальныйИдентификатор);
|
||||
Действие = "Изменить";
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
Задание,
|
||||
ЭтотОбъект,
|
||||
"Ключ,
|
||||
|Наименование,
|
||||
|Использование,
|
||||
|ИмяПользователя,
|
||||
|ИнтервалПовтораПриАварийномЗавершении,
|
||||
|КоличествоПовторовПриАварийномЗавершении");
|
||||
|
||||
Задание.Расписание = Расписание;
|
||||
Задание.Записать();
|
||||
|
||||
Модифицированность = Ложь;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОбновитьЗаголовокФормы()
|
||||
|
||||
Если НЕ ПустаяСтрока(Наименование) Тогда
|
||||
Представление = Наименование;
|
||||
|
||||
ИначеЕсли НЕ ПустаяСтрока(СинонимМетаданных) Тогда
|
||||
Представление = СинонимМетаданных;
|
||||
Иначе
|
||||
Представление = ИмяМетаданных;
|
||||
КонецЕсли;
|
||||
|
||||
Если Действие = "Изменить" Тогда
|
||||
Заголовок = СтрШаблон(НСтр("ru = '%1 (Регламентное задание)'"), Представление);
|
||||
Иначе
|
||||
Заголовок = НСтр("ru = 'Регламентное задание (создание)'");
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,61 +1,68 @@
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметры.СвойстваФоновогоЗадания = Неопределено Тогда
|
||||
|
||||
СвойстваФоновогоЗадания = РегламентныеЗаданияСлужебный
|
||||
.ПолучитьСвойстваФоновогоЗадания(Параметры.Идентификатор);
|
||||
|
||||
Если СвойстваФоновогоЗадания = Неопределено Тогда
|
||||
ВызватьИсключение(НСтр("ru = 'Фоновое задание не найдено.'"));
|
||||
КонецЕсли;
|
||||
|
||||
СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный
|
||||
.СообщенияИОписанияОшибокФоновогоЗадания(Параметры.Идентификатор);
|
||||
|
||||
Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания) Тогда
|
||||
|
||||
ИдентификаторРегламентногоЗадания
|
||||
= СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания;
|
||||
|
||||
НаименованиеРегламентногоЗадания
|
||||
= РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(
|
||||
СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания);
|
||||
Иначе
|
||||
НаименованиеРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено();
|
||||
ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено();
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
СвойстваФоновогоЗадания = Параметры.СвойстваФоновогоЗадания;
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
СвойстваФоновогоЗадания,
|
||||
"СообщенияПользователюИОписаниеИнформацииОбОшибке,
|
||||
|ИдентификаторРегламентногоЗадания,
|
||||
|НаименованиеРегламентногоЗадания");
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
СвойстваФоновогоЗадания,
|
||||
"Идентификатор,
|
||||
|Ключ,
|
||||
|Наименование,
|
||||
|Начало,
|
||||
|Конец,
|
||||
|Расположение,
|
||||
|Состояние,
|
||||
|ИмяМетода");
|
||||
|
||||
СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2017-2018, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ОбработчикиСобытийФормы
|
||||
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
|
||||
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметры.СвойстваФоновогоЗадания = Неопределено Тогда
|
||||
|
||||
СвойстваФоновогоЗадания = РегламентныеЗаданияСлужебный
|
||||
.ПолучитьСвойстваФоновогоЗадания(Параметры.Идентификатор);
|
||||
|
||||
Если СвойстваФоновогоЗадания = Неопределено Тогда
|
||||
ВызватьИсключение(НСтр("ru = 'Фоновое задание не найдено.'"));
|
||||
КонецЕсли;
|
||||
|
||||
СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный
|
||||
.СообщенияИОписанияОшибокФоновогоЗадания(Параметры.Идентификатор);
|
||||
|
||||
Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания) Тогда
|
||||
|
||||
ИдентификаторРегламентногоЗадания
|
||||
= СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания;
|
||||
|
||||
НаименованиеРегламентногоЗадания
|
||||
= РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(
|
||||
СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания);
|
||||
Иначе
|
||||
НаименованиеРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено();
|
||||
ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено();
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
СвойстваФоновогоЗадания = Параметры.СвойстваФоновогоЗадания;
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
СвойстваФоновогоЗадания,
|
||||
"СообщенияПользователюИОписаниеИнформацииОбОшибке,
|
||||
|ИдентификаторРегламентногоЗадания,
|
||||
|НаименованиеРегламентногоЗадания");
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(
|
||||
ЭтотОбъект,
|
||||
СвойстваФоновогоЗадания,
|
||||
"Идентификатор,
|
||||
|Ключ,
|
||||
|Наименование,
|
||||
|Начало,
|
||||
|Конец,
|
||||
|Расположение,
|
||||
|Состояние,
|
||||
|ИмяМетода");
|
||||
|
||||
СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
173
LICENSE.md
Normal file
173
LICENSE.md
Normal file
@ -0,0 +1,173 @@
|
||||
## creative commons
|
||||
|
||||
# Attribution-ShareAlike 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
### Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
|
||||
|
||||
* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
|
||||
|
||||
## Creative Commons Attribution-ShareAlike 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
### Section 1 – Definitions.
|
||||
|
||||
a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. __BY-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
|
||||
|
||||
h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
k. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
l. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
m. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
### Section 2 – Scope.
|
||||
|
||||
a. ___License grant.___
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. __Term.__ The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. __Downstream recipients.__
|
||||
|
||||
A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
|
||||
|
||||
C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. ___Other rights.___
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
|
||||
|
||||
### Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. ___Attribution.___
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
b. ___ShareAlike.___
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
|
||||
|
||||
### Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
### Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
|
||||
|
||||
b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
### Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
### Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
### Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the [CC0 Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
>
|
||||
> Creative Commons may be contacted at creativecommons.org.
|
51
README.md
51
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
Конфигурация предназначена для односторонней синхронизации хранилища конфигурации "1С:Предприятия" с репозиторием Git и последующим переходом на разработку в [1C:Enterprise Development Tools (1C:EDT)](http://v8.1c.ru/overview/release_EDT_17/) с сохранением истории.
|
||||
|
||||
### Основные возможности
|
||||
## Основные возможности
|
||||
|
||||
* Конвертирование существующего хранилища конфигурации 1С в репозиторий Git в формате 1C:EDT
|
||||
* Обновлять изменения из хранилища 1С в репозиторий Git
|
||||
@ -13,23 +13,62 @@
|
||||
* Выгружать только изменения конфигурации. Доступно для Платформы 8.3.10 и выше, требуется использовать "очереди"
|
||||
* Создание сквозной история изменений для "хранилищ исправительных версий" если вы используете [Технологию разветвленной разработки конфигураций](https://its.1c.ru/db/v8std/content/2149184358/hdoc) или аналогичный процесс - хранилище версии можно загружать в "ветку" Git, получив сквозную историю в ветке.
|
||||
|
||||
### Возможности добавляемые расширениями
|
||||
|
||||
Сторонние расширения:
|
||||
* [Конвертирование истории "Обычного приложения"](https://github.com/marmyshev/GitConverter-ordinary)
|
||||
* `<Ждем ваших pull-request'ов>`
|
||||
|
||||
### Необходимые компоненты
|
||||
|
||||
* Конфигурацию можно запустить, используя 1C:Enterprise Development Tools 1.8 (https://releases.1c.ru/project/DevelopmentTools10)
|
||||
* Конфигурацию можно запустить, используя 1C:Enterprise Development Tools 1.9 (https://releases.1c.ru/project/DevelopmentTools10)
|
||||
* Платформа 1С:Предприятия 8.3.12 и выше (https://releases.1c.ru/project/Platform83)
|
||||
* СУБД, поддерживаемая 1С:Предприятием
|
||||
* OS Windows 7 или выше, ОС Linux и macOS - в бета-режиме.
|
||||
|
||||
### Сборка и установка проекта
|
||||
|
||||
Выполните команды в Linux:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/1C-Company/GitConverter.git
|
||||
ring edt workspace export --workspace-location "${PWD}/w" --project "${PWD}/GitConverter/GitConverter" --configuration-files "${PWD}/xml"
|
||||
1cv8 CREATEINFOBASE File=${PWD}/db
|
||||
1cv8 DESIGNER /WA- /DisableStartupDialogs /IBConnectionString File="${PWD}/db" /LoadConfigFromFiles "${PWD}/xml" /UpdateDBCfg
|
||||
1cv8 DESIGNER /WA- /DisableStartupDialogs /IBConnectionString File="${PWD}/db" /CreateDistributionFiles -cffile "${PWD}/1cv8.cf"
|
||||
```
|
||||
|
||||
Выполните команды в Windows, указав корректный путь к версии 1С:
|
||||
|
||||
```cmd
|
||||
git clone https://github.com/1C-Company/GitConverter.git
|
||||
ring edt workspace export --workspace-location "%CD%/w" --project "%CD%/GitConverter/GitConverter" --configuration-files "%CD%/xml"
|
||||
"C:\Program files\1cv8\8.3.12.1714\bin\1cv8" CREATEINFOBASE File=%CD%/db
|
||||
"C:\Program files\1cv8\8.3.12.1714\bin\1cv8" DESIGNER /WA- /DisableStartupDialogs /IBConnectionString File="%CD%/db" /LoadConfigFromFiles "%CD%/xml" /UpdateDBCfg
|
||||
"C:\Program files\1cv8\8.3.12.1714\bin\1cv8" DESIGNER /WA- /DisableStartupDialogs /IBConnectionString File="%CD%/db" /CreateDistributionFiles -cffile "%CD%/1cv8.cf"
|
||||
```
|
||||
|
||||
## Начальная настройка
|
||||
|
||||
[Без настройки - никак. См. Wiki](https://github.com/1C-Company/GitConverter/wiki/Начальная-настройка)
|
||||
|
||||
## Документация
|
||||
|
||||
* Справка в конфигурации 1С:ГитКонвертер
|
||||
* Подсказки к полям и командам в конфигурации
|
||||
* Документация в [Wiki](https://github.com/1C-Company/GitConverter/wiki) и [сценарии применения конфигурации](https://github.com/1C-Company/GitConverter/wiki/Сценарии-применения)
|
||||
|
||||
### Если что-то пошло не так (FAQ)
|
||||
|
||||
[См. примеры Wiki](https://github.com/1C-Company/GitConverter/wiki/Если-что-то-пошло-не-так-FAQ)
|
||||
|
||||
## Участие в проекте
|
||||
|
||||
Добро пожаловать! [См. правила в соответствующем разделе](CONTRIBUTING.md)
|
||||
|
||||
## Обновление с версии 1.0.4
|
||||
|
||||
**Внимание!** Конвертация хранилища 1С в формат выгрузки xml 1С:Предприятия является [устаревшей функциональностью](https://github.com/1C-Company/GitConverter/wiki/Обновление-с-версии-1.0.4) и не доступна для новых настроек конвертации хранилища.
|
||||
Текущие настройки синхронизации хранилища, конвертирующие в формат выгрузки xml 1С:Предприятия будут работать корректно, но рекомендуется выполнить разовую конвертацию в формат 1C:EDT и продолжить синхронизацию в этом формате. [См. Wiki](https://github.com/1C-Company/GitConverter/wiki/Конвертация-выгрузки-1С-Предприятия-в-формат-1C-Enterprise-Development-Tools)
|
||||
|
||||
## Если что-то пошло не так (FAQ)
|
||||
|
||||
[См. примеры Wiki](https://github.com/1C-Company/GitConverter/wiki/Если-что-то-пошло-не-так-FAQ)
|
||||
|
||||
Функциональность конвертирования в формат xml 1С:Предприятия **будет удалена в 1.0.6**.
|
||||
|
Loading…
Reference in New Issue
Block a user