1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-21 21:17:24 +02:00

Восстановление после слияния с Features

This commit is contained in:
Anton Ivanov 2020-07-25 08:49:16 +03:00
parent 29b9c8bb4f
commit 80b0bc6fe4
19 changed files with 1241 additions and 809 deletions

View File

@ -33,9 +33,39 @@
СтрокаТЗСобытия.ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ЗакрытВопрос");
Конецесли;
Если ИзмененОтвет() Тогда
СтрокаТЗСобытия = ТЗСобытия.Добавить();
СтрокаТЗСобытия.ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененОтвет");
КонецЕсли;
Если ИзмененВопрос() Тогда
СтрокаТЗСобытия = ТЗСобытия.Добавить();
СтрокаТЗСобытия.ВидСобытия = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененВопрос");
КонецЕсли;
Возврат ТЗСобытия;
КонецФункции
Функция ИзмененОтвет()
пИзмененОтвет = Ложь;
Если Ссылка.Ответ <> Ответ Тогда
пИзмененОтвет = Истина;
КонецЕсли;
Возврат пИзмененОтвет;
КонецФункции
Функция ИзмененВопрос()
пИзмененВопрос = Ложь;
Если Ссылка.Вопрос <> Вопрос Тогда
пИзмененВопрос = Истина;
КонецЕсли;
Возврат пИзмененВопрос;
КонецФункции
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
@ -48,6 +78,10 @@
РегистрацияАктивностиПользователя(ДополнительныеСвойства.ТЗСобытия,Отказ);
// + #179 SZ 2020-06-07
ОтправитьУведомлениеНаПочту(ДополнительныеСвойства.ТЗСобытия);
// - #179 SZ 2020-06-07
ДополнительныеСвойства.Удалить("ТЗСобытия");
КонецПроцедуры
@ -56,3 +90,196 @@
ВТДопПараметры.Вставить("ТЗСобытия",ТЗСобытия);
РегистрыСведений.узАктивностиПользователей.ДобавитьАктивностьПользователя(ЭтотОбъект,ВТДопПараметры,Отказ);
КонецПроцедуры
// + #179 SZ 2020-06-07
Процедура ОтправитьУведомлениеНаПочту(СобытияВИстории) Экспорт
ВсегоСобытий = СобытияВИстории.Количество();
Если ВсегоСобытий = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого СтрСобытияВИстории из СобытияВИстории Цикл
ОтправитьУведомлениеНаПочтуПоВидуСобытия(СобытияВИстории, СтрСобытияВИстории.ВидСобытия);
КонецЦикла;
КонецПроцедуры // - #179 SZ 2020-06-07
// + #179 SZ 2020-06-07
Процедура ОтправитьУведомлениеНаПочтуПоВидуСобытия(СобытияВИстории, ВидСобытия)
ПараметрыПисьма = ПолучитьПараметрыПисьмаПоСобытию(ВидСобытия);
ДопПараметры = Новый Структура();
ДопПараметры.Вставить("ТекстПисьма",ПараметрыПисьма.ТекстПисьма);
ДопПараметры.Вставить("ТемаПисьма",ПараметрыПисьма.ТемаПисьма);
ДопПараметры.Вставить("ВажностьЗадачи",ПараметрыПисьма.ВажностьЗадачи);
ТекПользователь = Пользователи.ТекущийПользователь();
Исполнитель = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
МассивНаблюдателей = Новый Массив();
Если ЗначениеЗаполнено(Задача) Тогда
МассивНаблюдателей = РегистрыСведений.узНаблюдателиЗаЗадачами.ПолучитьМассивНаблюдателей(Задача);
Исполнитель = Задача.Исполнитель;
КонецЕсли;
МассивПользователейКомуПредварительный = Новый Массив();
МассивПользователейКомуПредварительный.Добавить(Автор);
МассивПользователейКомуПредварительный.Добавить(Исполнитель);
МассивПользователейКомуПредварительный.Добавить(КтоМожетОтветить);
Для каждого пНаблюдатель из МассивНаблюдателей Цикл
МассивПользователейКомуПредварительный.Добавить(пНаблюдатель);
КонецЦикла;
МассивПользователейКому = Новый Массив();
Для каждого пПользовательПредв из МассивПользователейКомуПредварительный Цикл
Если НЕ ЗначениеЗаполнено(пПользовательПредв) Тогда
Продолжить;
КонецЕсли;
Если пПользовательПредв.узНеОтправлятьУведомленияНаПочту Тогда
Продолжить;
КонецЕсли;
Если пПользовательПредв = ТекПользователь
И НЕ пПользовательПредв.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
КонецЕсли;
МассивПользователейКому.Добавить(пПользовательПредв);
КонецЦикла;
ДопПараметры.Вставить("МассивПользователейКому",МассивПользователейКому);
узОбщийМодульСервер.ОтправитьПисьмо(ДопПараметры);
КонецПроцедуры // - #179 SZ 2020-06-07
Функция ПолучитьПараметрыПисьмаПоСобытию(ВидСобытия)
ТемаПисьма = "";
ТекстПисьма = "";
ВажностьЗадачи = ПредопределенноеЗначение("Справочник.узВариантыВажностиЗадачи.Обычная");
ПараметрыПисьма = Новый Структура();
ПараметрыПисьма.Вставить("ТемаПисьма",ТемаПисьма);
ПараметрыПисьма.Вставить("ТекстПисьма",ТекстПисьма);
ПараметрыПисьма.Вставить("ВажностьЗадачи",ВажностьЗадачи);
ЗаполненаЗадача = Ложь;
НомерЗадачи = "";
ПредставлениеЗадачи = "";
Если ЗначениеЗаполнено(Задача) Тогда
ЗаполненаЗадача = Истина;
ВажностьЗадачи = Задача.Важность;
НомерЗадачи = ""+Формат(Задача.Код,"ЧГ=0");
ПредставлениеЗадачи = "#" + НомерЗадачи + " " + Задача.Наименование;
КонецЕсли;
ТемаПисьма = "Изменения по вопросу";
ТекстПисьма = "Изменения по вопросу ";
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
Если ВидСобытия = Перечисления.узВидыСобытий.ДобавленВопрос Тогда
ТемаПисьма = "Новый вопрос ";
ТекстПисьма = "" + Автор + " задал вопрос к " + КтоМожетОтветить;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Новый вопрос к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "К задаче " + ПредставлениеЗадачи + " " + Автор + " задал вопрос " + КтоМожетОтветить;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
КонецЕсли
ИначеЕсли ВидСобытия = Перечисления.узВидыСобытий.ИзмененОтвет Тогда
ТемаПисьма = "Изменен ответ ";
ТекстПисьма = "Изменен ответ ";
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Изменен ответ по вопросу к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Изменен ответ по вопросу к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
КонецЕсли
ИначеЕсли ВидСобытия = Перечисления.узВидыСобытий.ИзмененВопрос Тогда
ТемаПисьма = "Изменен вопрос ";
ТекстПисьма = "Изменен вопрос ";
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Изменен вопрос к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Изменен вопрос к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
КонецЕсли
ИначеЕсли ВидСобытия = Перечисления.узВидыСобытий.ЗакрытВопрос Тогда
ТемаПисьма = "Вопрос закрыт";
ТекстПисьма = "Вопрос закрыт";
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
Если ЗаполненаЗадача Тогда
ТемаПисьма = "Вопрос закрыт к задаче " + ПредставлениеЗадачи;
ТекстПисьма = "Вопрос закрыт к задаче " + ПредставлениеЗадачи;
ДобавитьВТекстПисьмаВопрос(ТекстПисьма);
ДобавитьВТекстПисьмаОтвет(ТекстПисьма);
КонецЕсли
Иначе
ТекстОшибки = "Ошибка! нет алгоритма для " + ВидСобытия;
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ПараметрыПисьма.ТемаПисьма = ТемаПисьма;
ПараметрыПисьма.ТекстПисьма = ТекстПисьма;
ПараметрыПисьма.ВажностьЗадачи = ВажностьЗадачи;
Возврат ПараметрыПисьма;
КонецФункции
Процедура ДобавитьВТекстПисьмаВопрос(ТекстПисьма)
ТекстПисьма = ТекстПисьма + Символы.ПС + "Вопрос: "
+ Символы.ПС + Вопрос + Символы.ПС;
КонецПроцедуры
Процедура ДобавитьВТекстПисьмаОтвет(ТекстПисьма)
ТекстПисьма = ТекстПисьма + Символы.ПС + "Ответ: "
+ Символы.ПС + Ответ + Символы.ПС;
КонецПроцедуры

View File

@ -27,8 +27,6 @@
// Объект.Наименование = Объект.Вопрос;
//КонецПроцедуры
//}milanse 31.05.2020 20:46:11
&НаСервере
//+ #201 Иванов А.Б. 2020-05-23 Изменения от Дениса Урянского @d-hurricane
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

View File

@ -693,95 +693,98 @@
КонецФункции
Функция ПолучитьМассивНаблюдателей()
пЗадача = Ссылка;
МассивНаблюдателей = Новый Массив();
Возврат РегистрыСведений.узНаблюдателиЗаЗадачами.ПолучитьМассивНаблюдателей(Ссылка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| узНаблюдателиЗаЗадачами.Пользователь
|ИЗ
| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
|ГДЕ
| узНаблюдателиЗаЗадачами.Задача = &Задача
| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
//+ #190 SZ 16.03.2020
// Убираем из запроса проверку на Текущего пользователя.
// Проверку сделаем в обработке результата запроса
//пЗадача = Ссылка;
//
// | И узНаблюдателиЗаЗадачами.Пользователь <> &ТекущийПользователь
//МассивНаблюдателей = Новый Массив();
//
//- #190 SZ 16.03.2020
ТекущийПользователь = Пользователи.ТекущийПользователь();
//+ #190 SZ 16.03.2020
// Убираем из запроса проверку на Текущего пользователя.
//Запрос = Новый Запрос;
//Запрос.Текст =
//"ВЫБРАТЬ
//| узНаблюдателиЗаЗадачами.Пользователь
//|ИЗ
//| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
//|ГДЕ
//| узНаблюдателиЗаЗадачами.Задача = &Задача
//| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
//| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
//
//Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
//
// Проверку сделаем в обработке результата запроса
//- #190 SZ 16.03.2020
Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
Запрос.УстановитьПараметр("Задача", пЗадача);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивНаблюдателей.Добавить(Выборка.Пользователь);
КонецЦикла;
Конецесли;
Для каждого СтрокаНаблюдатели из Статус.Наблюдатели цикл
Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
Продолжить;
Конецесли;
//+ #190 SZ 16.03.2020
//Если СтрокаНаблюдатели.Пользователь = Пользователи.ТекущийПользователь() Тогда
// Продолжить;
//Конецесли;
Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
Конецесли;
//- #190 SZ 16.03.2020
//Павлюков - отсеем ненужных наблюдателей, у которых явно задано, за кем наблюдать
Если Не СтрокаНаблюдатели.Контрагент.Пустая()
И Не пЗадача.Контрагент.Пустая()
И Не СтрокаНаблюдатели.Контрагент = пЗадача.Контрагент Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
Конеццикла;
пНаблюдателиЗаОснЗадачей = пЗадача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
Продолжить;
Конецесли;
//+ #190 SZ 16.03.2020
//Если пНаблюдатель = Пользователи.ТекущийПользователь() Тогда
// Продолжить;
//Конецесли;
Если пНаблюдатель = ТекущийПользователь
И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
Конецесли;
//- #190 SZ 16.03.2020
МассивНаблюдателей.Добавить(пНаблюдатель);
Конеццикла;
Возврат МассивНаблюдателей;
////+ #190 SZ 16.03.2020
//// Убираем из запроса проверку на Текущего пользователя.
//// Проверку сделаем в обработке результата запроса
////
//// | И узНаблюдателиЗаЗадачами.Пользователь <> &ТекущийПользователь
////
////- #190 SZ 16.03.2020
//
//
//ТекущийПользователь = Пользователи.ТекущийПользователь();
////+ #190 SZ 16.03.2020
//// Убираем из запроса проверку на Текущего пользователя.
////
////Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
////
//// Проверку сделаем в обработке результата запроса
////- #190 SZ 16.03.2020
//
//Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
//Запрос.УстановитьПараметр("Задача", пЗадача);
//
//РезультатЗапроса = Запрос.Выполнить();
//Если НЕ РезультатЗапроса.Пустой() Тогда
// Выборка = РезультатЗапроса.Выбрать();
// Пока Выборка.Следующий() Цикл
// МассивНаблюдателей.Добавить(Выборка.Пользователь);
// КонецЦикла;
//Конецесли;
//
//Для каждого СтрокаНаблюдатели из Статус.Наблюдатели цикл
// Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
// Продолжить;
// Конецесли;
//
// //+ #190 SZ 16.03.2020
// //Если СтрокаНаблюдатели.Пользователь = Пользователи.ТекущийПользователь() Тогда
// // Продолжить;
// //Конецесли;
// Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
// И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
// Продолжить;
// Конецесли;
// //- #190 SZ 16.03.2020
//
// //Павлюков - отсеем ненужных наблюдателей, у которых явно задано, за кем наблюдать
// Если Не СтрокаНаблюдатели.Контрагент.Пустая()
// И Не пЗадача.Контрагент.Пустая()
// И Не СтрокаНаблюдатели.Контрагент = пЗадача.Контрагент Тогда
// Продолжить;
// КонецЕсли;
// МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
//Конеццикла;
//
//пНаблюдателиЗаОснЗадачей = пЗадача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
//Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
// пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
// Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
// Продолжить;
// Конецесли;
// //+ #190 SZ 16.03.2020
// //Если пНаблюдатель = Пользователи.ТекущийПользователь() Тогда
// // Продолжить;
// //Конецесли;
// Если пНаблюдатель = ТекущийПользователь
// И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
// Продолжить;
// Конецесли;
// //- #190 SZ 16.03.2020
//
// МассивНаблюдателей.Добавить(пНаблюдатель);
//Конеццикла;
//
//Возврат МассивНаблюдателей;
КонецФункции
Функция ПолучитьТемаПисьмаСобытие(ДопПараметры,СобытияВИстории)

View File

@ -86,11 +86,11 @@
Возврат мЗначениеКонстанты;
КонецФункции //ПолучитьЗначениеКонстанты(ИмяКонстанты,ТипКонстанты)
Функция УстановитьЗначениеКонстанты(ИмяКонстанты,ЗначениеКонстанты) Экспорт
Процедура УстановитьЗначениеКонстанты(ИмяКонстанты,ЗначениеКонстанты) Экспорт
пКонстанта = ПредопределенноеЗначение("Справочник.узКонстанты."+ИмяКонстанты);
пКонстантаОбъект = пКонстанта.ПолучитьОбъект();
пКонстантаОбъект.Значение = ЗначениеКонстанты;
пКонстантаОбъект.Записать();
КонецФункции
КонецПроцедуры

View File

@ -160,46 +160,6 @@
ДиалогВыбораФайла.Показать (Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура КомандаСоздатьVBSФайлДляПланировщикаЗаданий(Команда)
//Если НЕ ЗначениеЗаполнено(Объект.КаталогДляЗагрузкиИзмененийИзХранилща) Тогда
// Сообщение = Новый СообщениеПользователю;
// Сообщение.Текст = "Ошибка! Необходимо заполнить реквизит КаталогДляЗагрузкиИзмененийИзХранилща";
// Сообщение.Поле = "Объект.КаталогДляЗагрузкиИзмененийИзХранилща";
// Сообщение.Сообщить();
// Возврат;
//Конецесли;
//Если Объект.Ссылка.Пустая() Тогда
// Сообщение = Новый СообщениеПользователю;
// Сообщение.Текст = "Ошибка! необходиом сначала записать элемент";
// Сообщение.Сообщить();
// Возврат;
//Конецесли;
//
//ТекстКоманды = ПолучитьТекстКомандыНаСервере();
//VBSФайл = Новый ТекстовыйДокумент();
//VBSФайл.УстановитьТекст(
//"
//|Set WshShell = CreateObject(""WScript.Shell"")
//|
//|TekDate = date
//|TekTime = Time
//|FileName = ""StorageHistory_"" & Replace(TekDate,""."","""") & ""_"" & Replace(TekTime,"":"","""") & "".mxl""
// |
//|WshShell.Run """ + ТекстКоманды + ",0,0
//|");
//ИмяСкриптФайла = Объект.КаталогДляЗагрузкиИзмененийИзХранилща + "DumpStorage.vbs";
//VBSФайл.Записать(ИмяСкриптФайла,КодировкаТекста.ANSI);
КонецПроцедуры
&НаСервере
Функция ПолучитьТекстКомандыНаСервере()
//ОбрОбъект = Обработки.узЗагрузкаИзмененийИзХранилища.Создать();
//ОбрОбъект.Конфигурация = Объект.Ссылка;
//ФайлВыгрузкиИзменений = ""+Объект.КаталогДляЗагрузкиИзмененийИзХранилща + "\"" & FileName &";
//РезультатФункции = ОбрОбъект.ПолучитьНастройкиЗапускаКонфигуратора(ФайлВыгрузкиИзменений);
//Возврат РезультатФункции.ТекстКоманды;
КонецФункции
&НаКлиенте
Процедура ИспользоватьАльтернативнуюЗагрузкуДанныхИзХранилищаПриИзменении(Элемент)

View File

@ -48,6 +48,8 @@
ДвоичныеДанные = Новый ДвоичныеДанные(АдресНаСервере);
ТекущийОбъект.ФайлШаблонаХранилищеЗначений = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
УдалитьФайлы(АдресНаСервере);
КонецПроцедуры
&НаКлиенте

View File

@ -1754,8 +1754,9 @@
&НаСервере
Процедура ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере()
//++ УправлениеЗадачами: типовой код приводит к ошибке, т.к. опирается на основную таблицу списка.
//++ УправлениеЗадачами: типовой код приводит к ошибке, т.к. опирается на основную таблицу списка.
// Основной таблицы у нас нет, поэтому всегда прячем все поля, связанные с криптографией.
//РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект);
Элементы.СписокНомерКартинкиПодписанЗашифрован.Видимость = Ложь;
Элементы.ФормаГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = Ложь;
@ -1763,7 +1764,7 @@
Возврат;
//-- УправлениеЗадачами
РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект);
КонецПроцедуры

View File

@ -1,6 +1,6 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "УправлениеЗадачами";
Описание.Версия = "1.0.5.003";
Описание.Версия = "1.0.5.004";
//+ УрянскийД 2020-06-22 (начало)
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";

View File

@ -1,11 +1,4 @@
Функция Удалить_ПолучитьТекстHTMLMarkdown(ТекстСодержания) Экспорт
//РезультатФункции = узОбщийМодульСервер.ПолучитьМакетыMardown(ТекстСодержания);
//
//ТекстHTMLМакет = РезультатФункции.ТекстHTMLМакет;
//Возврат ТекстHTMLМакет;
КонецФункции

Функция УстановитьТекстВБуферОбмена(ТекстДляКопирования) Экспорт
пОбъект = Новый COMОбъект("htmlfile");
пОбъект.ParentWindow.ClipboardData.Setdata("Text", ТекстДляКопирования);

View File

@ -95,7 +95,7 @@
Ресурс = "bot" + ТокенБота + "/sendMessage?chat_id=" + Формат(элемПолучатель.ИД, "ЧГ=") + "&text=" + ТекстПисьма+"&parse_mode=Markdown&disable_web_page_preview=true";
//Ресурс = "bot" + ТокенБота + "/sendMessage?chat_id=" + Формат(элемПолучатель.ИД, "ЧГ=") + "&text=" + ТекстПисьма+"&disable_web_page_preview=true";
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,30,Новый ЗащищенноеСоединениеOpenSSL());
ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(ЗапросHTTP);

View File

@ -49,7 +49,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
</DefaultRoles>
<Vendor>Управление задачами</Vendor>
<Version>1.0.5.003</Version>
<Version>1.0.5.004</Version>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>true</UseManagedFormInOrdinaryApplication>

View File

@ -750,6 +750,8 @@
НастройкиЗапускаКонфигуратора = ПолучитьНастройкиЗапускаКонфигуратора();
ТекстКоманды = НастройкиЗапускаКонфигуратора.ТекстКоманды;
Сообщить(ТекстКоманды);
Возврат ТекстКоманды;
Конецфункции

View File

@ -123,7 +123,7 @@
УдалитьВременныеФайлы(РезультатВыгрузки);
КонецПроцедуры
Функция ЗаполнитьТЧОбработки()
Процедура ЗаполнитьТЧОбработки()
ИсторияХранилища.Очистить();
ИзмененныеОбъекты.Очистить();
@ -176,7 +176,7 @@
Конеццикла;
ИсторияХранилища.Сортировать("Версия");
КонецФункции
КонецПроцедуры
Функция ПолучитьПолноеИмяМетаданных(ПолноеИмяМетаданных,СтрокамТЗHistory)
ИмяОбъекта = СтрокамТЗHistory.OBJNAME;

View File

@ -18,9 +18,11 @@
пМассивНастроекПроксиСерверов = РегистрыСведений.узПроксиСерверы.ПолучитьМассивНастроекПроксиСерверов();
пМассивНастроекПроксиСерверовКоличество = пМассивНастроекПроксиСерверов.Количество();
Если пМассивНастроекПроксиСерверовКоличество = 0 Тогда
пВсеНастройкиПолучены = Ложь;
КонецЕсли;
// + #232 Ruflex @RomanUpworksTeam
//Если пМассивНастроекПроксиСерверовКоличество = 0 Тогда
// пВсеНастройкиПолучены = Ложь;
//КонецЕсли;
// - #232 Ruflex @RomanUpworksTeam
пНастройкиДляРаботыСТелеграм.Вставить("ТокенТелеграмБота", пТокенТелеграмБота);
пНастройкиДляРаботыСТелеграм.Вставить("МассивНастроекПроксиСерверов", пМассивНастроекПроксиСерверов);
@ -85,6 +87,8 @@
МассивResult = ОтветСоответсвие["result"];
ИДПоследнегоПринятогоСообщения = Неопределено;
ТЗПользователиТелеграмм = ПолучитьТЗПользователиТелеграмм();
Для Каждого СоответсвиеMessange Из МассивResult Цикл
ИДПоследнегоПринятогоСообщения = Формат(СоответсвиеMessange["update_id"] + 1, "ЧГ=");
@ -100,32 +104,69 @@
Если СоответсвиеMessange_message.Получить("text") <> Неопределено Тогда
MessageText = СоответсвиеMessange_message.Получить("text");
Если Найти(MessageText, "/addwork") <> 0 Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Пользователи.Ссылка КАК Пользователь
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.узИДПользователяТелеграмм = &узИДПользователяТелеграмм";
Запрос.УстановитьПараметр("узИДПользователяТелеграмм", Число(пСhatИД));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Продолжить;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
ТекущиеДелаОбъект.Автор = Выборка.Пользователь;
ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
ТекущиеДелаОбъект.Записать();
КонецЦикла;
// + Иванов А.Б. 2020-07-11
// Если Найти(MessageText, "/addwork") <> 0 Тогда
// Запрос = Новый Запрос;
// Запрос.Текст =
// "ВЫБРАТЬ ПЕРВЫЕ 1
// | Пользователи.Ссылка КАК Пользователь
// |ИЗ
// | Справочник.Пользователи КАК Пользователи
// |ГДЕ
// | Пользователи.узИДПользователяТелеграмм = &узИДПользователяТелеграмм";
//
// Запрос.УстановитьПараметр("узИДПользователяТелеграмм", Число(пСhatИД));
//
// РезультатЗапроса = Запрос.Выполнить();
// Если РезультатЗапроса.Пустой() Тогда
// Продолжить;
// КонецЕсли;
//
// Выборка = РезультатЗапроса.Выбрать();
// Пока Выборка.Следующий() Цикл
// ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
// ТекущиеДелаОбъект.Автор = Выборка.Пользователь;
// ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
// ТекущиеДелаОбъект.Записать();
// КонецЦикла;
//
// КонецЕсли;
Если Найти(MessageText, "/addwork") = 0 Тогда
Продолжить;
КонецЕсли;
пузИДПользователяТелеграмм = Число(пСhatИД);
ПараметрыОтбора=Новый Структура();
ПараметрыОтбора.Вставить("узИДПользователяТелеграмм",пузИДПользователяТелеграмм);
НайденныеСтроки = ТЗПользователиТелеграмм.НайтиСтроки(ПараметрыОтбора);
ВсегоНайденныеСтроки = НайденныеСтроки.Количество();
ТекстОшибки = "";
Если ВсегоНайденныеСтроки = 1 тогда
СтрокаТЗПользователиТелеграмм = НайденныеСтроки[0];
ИначеЕсли ВсегоНайденныеСтроки > 1 Тогда
ТекстОшибки = "Ошибка! Найдено более 1 строки";
Иначе
ТекстОшибки = "Ошибка! Не найдена строка";
Конецесли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ТекстОшибки = ТекстОшибки
+" в ""ТЗПользователиТелеграмм"" для ";
Для каждого ЭлементОтбора из ПараметрыОтбора цикл
ТекстОшибки = ТекстОшибки
+" "+ ЭлементОтбора.Ключ + " = ["+ЭлементОтбора.Значение+"]";
Конеццикла;
ВызватьИсключение ТекстОшибки;
Конецесли;
ТекущиеДелаОбъект = Справочники.узТекущиеДела.СоздатьЭлемент();
ТекущиеДелаОбъект.Автор = СтрокаТЗПользователиТелеграмм.Пользователь;
ТекущиеДелаОбъект.ТекстСодержания = СтрЗаменить(MessageText, "/addwork", "");
ТекущиеДелаОбъект.Записать();
// - Иванов А.Б. 2020-07-11
ИначеЕсли СоответсвиеMessange_message.Получить("photo") <> Неопределено Тогда
@ -141,6 +182,26 @@
КонецПроцедуры
Функция ПолучитьТЗПользователиТелеграмм()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| МАКСИМУМ(Пользователи.Ссылка) КАК Пользователь,
| Пользователи.узИДПользователяТелеграмм КАК узИДПользователяТелеграмм
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.узИДПользователяТелеграмм <> 0
|
|СГРУППИРОВАТЬ ПО
| Пользователи.узИДПользователяТелеграмм";
ТЗПользователиТелеграмм = Запрос.Выполнить().Выгрузить();
Возврат ТЗПользователиТелеграмм;
КонецФункции
Процедура ОтправитьСообщениеTelegram(ТекстСообщения, МассивПользователейДляОтправки, УведомлятьОРезультате = Ложь) Экспорт
Если МассивПользователейДляОтправки.Количество() = 0 Тогда
@ -265,16 +326,32 @@
Процедура ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON = Ложь)
Ответ = Неопределено;
Если НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество() Тогда
Возврат;
// + #232 Ruflex @RomanUpworksTeam
///+Ruflex
///-Ruflex
//Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество()) ) Тогда
// Возврат;
//КонецЕсли;
Если (МассивНастроекПроксиСерверов.Количество()>0) Тогда
Если (НомерТекущейНастройкиПрокси >= МассивНастроекПроксиСерверов.Количество()) Тогда
Возврат;
КонецЕсли;
НастройкиПрокси = МассивНастроекПроксиСерверов[НомерТекущейНастройкиПрокси];
ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
ИнтернетПрокси.Установить("https",НастройкиПрокси.Адрес,НастройкиПрокси.Порт,НастройкиПрокси.Логин,НастройкиПрокси.Пароль,Ложь);
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,ИнтернетПрокси,30,Новый ЗащищенноеСоединениеOpenSSL());
Иначе
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,30,Новый ЗащищенноеСоединениеOpenSSL());
КонецЕсли;
НастройкиПрокси = МассивНастроекПроксиСерверов[НомерТекущейНастройкиПрокси];
ИнтернетПрокси = Новый ИнтернетПрокси(Ложь);
ИнтернетПрокси.Установить("https",НастройкиПрокси.Адрес,НастройкиПрокси.Порт,НастройкиПрокси.Логин,НастройкиПрокси.Пароль,Ложь);
// + #232 Ruflex @RomanUpworksTeam
Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL());
Попытка
Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
@ -305,9 +382,20 @@
КонецЕсли;
Исключение
НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);
// + #232 Ruflex @RomanUpworksTeam
//НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
//РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
//ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);
Если (МассивНастроекПроксиСерверов.Количество()>0) Тогда
НомерТекущейНастройкиПрокси = НомерТекущейНастройкиПрокси + 1;
РегистрыСведений.узПроксиСерверы.ИзменитьОценкуРаботоспособностиПроксиСервера(НастройкиПрокси.Адрес, НастройкиПрокси.Порт, -1);
ВыполнитьЗапросHTTP_Telegram(Ответ, ЗапросHTTP, МассивНастроекПроксиСерверов, НомерТекущейНастройкиПрокси, ВОтветОжидаемJSON);
Конецесли;
// - #232 Ruflex @RomanUpworksTeam
КонецПопытки
КонецПроцедуры

View File

@ -282,6 +282,38 @@
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="143f2600-1803-4f6d-a8fd-cd27d38321df">
<Properties>
<Name>ИзмененОтвет</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Изменен ответ</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Add question</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="5a3fab7e-5452-4a8e-8b30-9d531fa9839b">
<Properties>
<Name>ИзмененВопрос</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Изменен вопрос</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Add question</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
</ChildObjects>
</Enum>
</MetaDataObject>

View File

@ -25,6 +25,60 @@
</Synonym>
<Comment/>
<UseStandardCommands>false</UseStandardCommands>
<StandardAttributes>
<xr:StandardAttribute name="Order">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
<xr:StandardAttribute name="Ref">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
</StandardAttributes>
<Characteristics/>
<QuickChoice>true</QuickChoice>
<ChoiceMode>BothWays</ChoiceMode>

View File

@ -132,10 +132,14 @@
ВидыСобытий_ДобавленВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленВопрос");
ВидыСобытий_ЗакрытВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ЗакрытВопрос");
ВидыСобытий_ИзмененОтвет = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененОтвет");
ВидыСобытий_ИзмененВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененВопрос");
МассивВидовСобытияДляРегистрацииАктивности = Новый Массив();
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ДобавленВопрос);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ЗакрытВопрос);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ИзмененОтвет);
МассивВидовСобытияДляРегистрацииАктивности.Добавить(ВидыСобытий_ИзмененВопрос);
Для каждого СтрокаТЗСобытия из ТЗСобытия цикл
пВидСобытия = СтрокаТЗСобытия.ВидСобытия;

View File

@ -69,4 +69,72 @@
Функция ЕстьЛиСлежениеЗаЗадачейУТекущегоПользователя(Задача) Экспорт
Возврат ЕстьЛиСлежениеЗаЗадачейУПользователя(Задача, Пользователи.ТекущийПользователь());
КонецФункции
КонецФункции
Функция ПолучитьМассивНаблюдателей(Задача) Экспорт
МассивНаблюдателей = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| узНаблюдателиЗаЗадачами.Пользователь
|ИЗ
| РегистрСведений.узНаблюдателиЗаЗадачами КАК узНаблюдателиЗаЗадачами
|ГДЕ
| узНаблюдателиЗаЗадачами.Задача = &Задача
| И узНаблюдателиЗаЗадачами.Пользователь.узНеОтправлятьУведомленияНаПочту = ЛОЖЬ
| И узНаблюдателиЗаЗадачами.Пользователь <> &Исполнитель";
ТекущийПользователь = Пользователи.ТекущийПользователь();
Запрос.УстановитьПараметр("Исполнитель", Задача.Исполнитель);
Запрос.УстановитьПараметр("Задача", Задача);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивНаблюдателей.Добавить(Выборка.Пользователь);
КонецЦикла;
КонецЕсли;
ТЧСтатусНаблюдатели = Задача.Статус.Наблюдатели;
Для каждого СтрокаНаблюдатели из ТЧСтатусНаблюдатели цикл
Если МассивНаблюдателей.Найти(СтрокаНаблюдатели.Пользователь) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрокаНаблюдатели.Пользователь = ТекущийПользователь
И НЕ СтрокаНаблюдатели.Пользователь.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
КонецЕсли;
Если НЕ СтрокаНаблюдатели.Контрагент.Пустая()
И НЕ Задача.Контрагент.Пустая()
И НЕ СтрокаНаблюдатели.Контрагент = Задача.Контрагент Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(СтрокаНаблюдатели.Пользователь);
КонецЦикла;
пНаблюдателиЗаОснЗадачей = Задача.ОсновнаяЗадача.НаблюдателиЗаОсновнойЗадачей;
Для каждого СтрокапНаблюдателиЗаОснЗадачей из пНаблюдателиЗаОснЗадачей цикл
пНаблюдатель = СтрокапНаблюдателиЗаОснЗадачей.Пользователь;
Если МассивНаблюдателей.Найти(пНаблюдатель) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если пНаблюдатель = ТекущийПользователь
И НЕ пНаблюдатель.узОтправлятьУведомленияОДействияхПользователяЕмуНаПочту Тогда
Продолжить;
КонецЕсли;
МассивНаблюдателей.Добавить(пНаблюдатель);
КонецЦикла;
Возврат МассивНаблюдателей;
КонецФункции