This commit is contained in:
Компания 1С committed 2017-04-26 23:46:00 +03:00
1 parent b458757a20
commit 2ee27ea267
1717 files changed
+159617 -464719

No files matched your search

@@ -27,7 +27,7 @@
// Процедура ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Источник, МассивРеквизитов) Экспорт
//
// (То же, что
// НапоминанияПользователяКлиентСерверПереопределяемый.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания).
// НапоминанияПользователяПереопределяемый.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания).
//
СерверныеСобытия.Добавить("СтандартныеПодсистемы.НапоминанияПользователя\ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания");
@@ -40,7 +40,7 @@
КлиентскиеОбработчики[
"СтандартныеПодсистемы.БазоваяФункциональность\ПослеНачалаРаботыСистемы"].Добавить(
"НапоминанияПользователяКлиент");
"НапоминанияПользователяКлиент");
// СЕРВЕРНЫЕ ОБРАБОТЧИКИ.
@@ -52,14 +52,74 @@
"СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить(
"НапоминанияПользователяСлужебный");
СерверныеОбработчики[
"СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить(
"НапоминанияПользователяСлужебный");
КонецПроцедуры
// Заполняет структуру параметров, необходимых для работы клиентского кода
// при запуске конфигурации.
//
// Параметры:
// Параметры - Структура - структура параметров запуска.
//
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура("ИспользоватьНапоминания", ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания));
КонецПроцедуры
// Заполняет структуру параметров, необходимых для работы клиентского кода
// конфигурации.
//
// Параметры:
// Параметры - Структура - структура параметров.
//
Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний()));
КонецПроцедуры
// Заполняет переименования тех объектов метаданных, которые невозможно
// автоматически найти по типу, но ссылки на которые требуется сохранять
// в базе данных (например: подсистемы, роли).
//
// См. также:
// ОбщегоНазначения.ДобавитьПереименование().
//
Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт
Библиотека = "СтандартныеПодсистемы";
СтароеИмя = "Роль.ИспользованиеНапоминаний";
НовоеИмя = "Роль.ДобавлениеИзменениеНапоминаний";
ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.11", СтароеИмя, НовоеИмя, Библиотека);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НастройкиПодсистемы() Экспорт
Настройки = Новый Структура;
Настройки.Вставить("Расписания", ПолучитьСтандартныеРасписанияДляНапоминания());
Настройки.Вставить("СтандартныеИнтервалы", НапоминанияПользователяКлиентСервер.ПолучитьСтандартныеИнтервалыОповещения());
НапоминанияПользователяПереопределяемый.ПриОпределенииНастроек(Настройки);
// Поддержка обратной совместимости.
НапоминанияПользователяКлиентСерверПереопределяемый.ПриПолученииСтандартныхРасписанийДляНапоминания(Настройки.Расписания);
НапоминанияПользователяКлиентСерверПереопределяемый.ПриПолученииСтандартныхИнтерваловОповещения(Настройки.СтандартныеИнтервалы);
Возврат Настройки;
КонецФункции
// Возвращает стандартные расписания для периодических напоминаний.
Функция ПолучитьСтандартныеРасписанияДляНапоминания() Экспорт
Функция ПолучитьСтандартныеРасписанияДляНапоминания()
Результат = Новый Соответствие;
@@ -90,9 +150,6 @@
Расписание.ВремяНачала = '00010101090000';
Результат.Вставить(НСтр("ru = 'каждый день, в 9:00'"), Расписание);
// для изменения списка
НапоминанияПользователяКлиентСерверПереопределяемый.ПриПолученииСтандартныхРасписанийДляНапоминания(Результат);
Возврат Результат;
КонецФункции
@@ -128,12 +185,14 @@
Функция ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПредыдущаяДата = '000101010000') Экспорт
Результат = Неопределено;
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ДатаОтсчета = ПредыдущаяДата;
Если Не ЗначениеЗаполнено(ДатаОтсчета) Тогда
ДатаОтсчета = ТекущаяДатаСеанса();
ДатаОтсчета = ТекущаяДатаСеанса;
КонецЕсли;
ДатаОтсчета = Макс(ДатаОтсчета, ТекущаяДатаСеанса);
Календарь = ПолучитьКалендарьНаБудущее(365*4+1, ДатаОтсчета, Расписание.ДатаНачала, Расписание.ПериодПовтораДней, Расписание.ПериодНедель);
ДниНедели = Расписание.ДниНедели;
@@ -219,10 +278,9 @@
Если Выборка.Следующий() Тогда
БлижайшаяДата = Выборка.Дата;
ВремяОтсчета = '00010101';
Если НачалоДня(БлижайшаяДата) = НачалоДня(ТекущаяДатаСеанса()) Тогда
ВремяОтсчета = ВремяОтсчета + (ТекущаяДатаСеанса()-НачалоДня(ТекущаяДатаСеанса()));
Если НачалоДня(БлижайшаяДата) = НачалоДня(ДатаОтсчета) Тогда
ВремяОтсчета = ВремяОтсчета + (ДатаОтсчета-НачалоДня(ДатаОтсчета));
КонецЕсли;
БлижайшееВремя = ПолучитьБлижайшееВремяИзРасписания(Расписание, ВремяОтсчета);
@@ -438,7 +496,8 @@
| Напоминания.СпособУстановкиВремениНапоминания,
| Напоминания.ИнтервалВремениНапоминания,
| Напоминания.ИмяРеквизитаИсточника,
| Напоминания.Расписание
| Напоминания.Расписание,
| ЛОЖЬ КАК ПовторятьЕжегодно
|ИЗ
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
@@ -452,10 +511,17 @@
Для Каждого СтрокаТаблицы Из ТаблицаРезультата Цикл
ДатаПредмета = ПолучитьЗначениеРеквизитаПредмета(СтрокаТаблицы.Источник, СтрокаТаблицы.ИмяРеквизитаИсточника);
Если (ДатаПредмета - СтрокаТаблицы.ИнтервалВремениНапоминания) <> СтрокаТаблицы.ВремяСобытия Тогда
ОтключитьНапоминание(СтрокаТаблицы);
ОтключитьНапоминание(СтрокаТаблицы, Ложь);
СтрокаТаблицы.СрокНапоминания = ДатаПредмета - СтрокаТаблицы.ИнтервалВремениНапоминания;
СтрокаТаблицы.ВремяСобытия = ДатаПредмета;
ПодключитьНапоминание(СтрокаТаблицы);
Если СтрокаТаблицы.Расписание.Получить() <> Неопределено Тогда
СтрокаТаблицы.ПовторятьЕжегодно = Истина;
КонецЕсли;
ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицы);
ПараметрыНапоминания.Расписание = СтрокаТаблицы.Расписание.Получить();
Напоминание = СоздатьНапоминание(ПараметрыНапоминания);
ПодключитьНапоминание(Напоминание);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -483,19 +549,26 @@
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Если Не ОбновитьСрокНапоминания Тогда
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания);
Если ОбновитьСрокНапоминания Тогда
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Иначе
Для Каждого Запись Из НаборЗаписей Цикл
ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания,,?(ОбновитьСрокНапоминания,"","СрокНапоминания"));
ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания);
КонецЦикла;
Иначе
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
ЗанятоеВремя = НаборЗаписей.Выгрузить(,"ВремяСобытия").ВыгрузитьКолонку("ВремяСобытия");
Пока ЗанятоеВремя.Найти(ПараметрыНапоминания.ВремяСобытия) <> Неопределено Цикл
ПараметрыНапоминания.ВремяСобытия = ПараметрыНапоминания.ВремяСобытия + 1;
КонецЦикла;
КонецЕсли;
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания);
КонецЕсли;
НаборЗаписей.Записать();
@@ -516,7 +589,9 @@
| НапоминанияПользователя.СрокНапоминания,
| НапоминанияПользователя.Описание,
| НапоминанияПользователя.СпособУстановкиВремениНапоминания,
| НапоминанияПользователя.Расписание
| НапоминанияПользователя.Расписание,
| НапоминанияПользователя.ИнтервалВремениНапоминания,
| НапоминанияПользователя.ИмяРеквизитаИсточника
|ИЗ
| РегистрСведений.НапоминанияПользователя КАК НапоминанияПользователя
|ГДЕ
@@ -549,28 +624,32 @@
// Подключаем следующее напоминание по расписанию.
Если ПодключатьПоРасписанию И Напоминание <> Неопределено Тогда
Если Напоминание.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.Периодически") Тогда
Расписание = Напоминание.Расписание.Получить();
Расписание = Напоминание.Расписание.Получить();
Если Расписание <> Неопределено Тогда
Если Расписание.ПериодПовтораДней > 0 Тогда
СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание);
СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПараметрыНапоминания.ВремяСобытия + 1);
КонецЕсли;
ОпределенаСледующаяДатаПоРасписанию = СледующаяДатаПоРасписанию <> Неопределено;
КонецЕсли;
Если ОпределенаСледующаяДатаПоРасписанию Тогда
Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Создает новое напоминание на указанное время.
Функция ПодключитьНапоминаниеВУказанноеВремя(Текст, Время, Предмет = Неопределено) Экспорт
Функция ПодключитьПроизвольноеНапоминание(Текст, ВремяСобытия = Неопределено, ИнтервалДоСобытия = 0, Предмет = Неопределено) Экспорт
ПараметрыНапоминания = Новый Структура;
ПараметрыНапоминания.Вставить("Описание", Текст);
ПараметрыНапоминания.Вставить("ВремяСобытия", Время);
Если ТипЗнч(ВремяСобытия) = Тип("РасписаниеРегламентногоЗадания") Тогда
ПараметрыНапоминания.Вставить("Расписание", ВремяСобытия);
Иначе
ПараметрыНапоминания.Вставить("ВремяСобытия", ВремяСобытия);
КонецЕсли;
ПараметрыНапоминания.Вставить("ИнтервалВремениНапоминания", ИнтервалДоСобытия);
ПараметрыНапоминания.Вставить("Источник", Предмет);
Напоминание = СоздатьНапоминание(ПараметрыНапоминания);
@@ -579,13 +658,13 @@
Возврат Напоминание;
КонецФункции
// Создает новое напоминание на время, рассчитанное относительно времени в предмете.
Функция ПодключитьНапоминаниеДоВремениПредмета(Текст, Интервал, Предмет, ИмяРеквизита) Экспорт
Функция ПодключитьНапоминаниеДоВремениПредмета(Текст, Интервал, Предмет, ИмяРеквизита, ПовторятьЕжегодно = Ложь) Экспорт
ПараметрыНапоминания = Новый Структура;
ПараметрыНапоминания.Вставить("Описание", Текст);
ПараметрыНапоминания.Вставить("Источник", Предмет);
ПараметрыНапоминания.Вставить("ИмяРеквизитаИсточника", ИмяРеквизита);
ПараметрыНапоминания.Вставить("ИнтервалВремениНапоминания", Интервал);
ПараметрыНапоминания.Вставить("ПовторятьЕжегодно", ПовторятьЕжегодно);
Напоминание = СоздатьНапоминание(ПараметрыНапоминания);
ПодключитьНапоминание(Напоминание);
@@ -593,10 +672,25 @@
Возврат Напоминание;
КонецФункции
Функция ЕжегодноеРасписание(ДатаСобытия)
Месяцы = Новый Массив;
Месяцы.Добавить(Месяц(ДатаСобытия));
ДеньВМесяце = День(ДатаСобытия);
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодНедель = 1;
Расписание.Месяцы = Месяцы;
Расписание.ДеньВМесяце = ДеньВМесяце;
Расписание.ВремяНачала = '000101010000' + (ДатаСобытия - НачалоДня(ДатаСобытия));
Возврат Расписание;
КонецФункции
// Возвращает структуру нового напоминания для последующего подключения.
Функция СоздатьНапоминание(ПараметрыНапоминания)
Напоминание = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(ПараметрыНапоминания, Истина);
Напоминание = НапоминанияПользователяКлиентСервер.ОписаниеНапоминания(ПараметрыНапоминания, Истина);
Если Не ЗначениеЗаполнено(Напоминание.Пользователь) Тогда
Напоминание.Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
@@ -605,6 +699,10 @@
Если Не ЗначениеЗаполнено(Напоминание.СпособУстановкиВремениНапоминания) Тогда
Если ЗначениеЗаполнено(Напоминание.Источник) И Не ПустаяСтрока(Напоминание.ИмяРеквизитаИсточника) Тогда
Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета;
ИначеЕсли Напоминание.Расписание <> Неопределено Тогда
Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.Периодически;
ИначеЕсли Не ЗначениеЗаполнено(Напоминание.ВремяСобытия) Тогда
Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени;
Иначе
Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
КонецЕсли;
@@ -616,43 +714,29 @@
ИначеЕсли Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени Тогда
Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя;
Напоминание.ВремяСобытия = ТекущаяДатаСеанса() + Напоминание.ИнтервалВремениНапоминания;
ИначеЕсли Напоминание.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя Тогда
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
КонецЕсли;
Если Не ЗначениеЗаполнено(Напоминание.СрокНапоминания) Тогда
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия;
КонецЕсли;
Если Напоминание.ПовторятьЕжегодно Тогда
Если ЗначениеЗаполнено(Напоминание.ВремяСобытия) Тогда
Напоминание.Расписание = ЕжегодноеРасписание(Напоминание.ВремяСобытия);
КонецЕсли;
КонецЕсли;
Если Напоминание.Расписание <> Неопределено Тогда
Напоминание.ВремяСобытия = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Напоминание.Расписание);
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
КонецЕсли;
Напоминание.Расписание = Новый ХранилищеЗначения(Напоминание.Расписание, Новый СжатиеДанных(9));
Возврат Напоминание;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Обработчики служебных событий подсистем БСП.
// Заполняет структуру параметров, необходимых для работы клиентского кода
// при запуске конфигурации.
//
// Параметры:
// Параметры - Структура - структура параметров запуска.
//
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура("ИспользоватьНапоминания", ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания));
КонецПроцедуры
// Заполняет структуру параметров, необходимых для работы клиентского кода
// конфигурации.
//
// Параметры:
// Параметры - Структура - структура параметров.
//
Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний()));
КонецПроцедуры
#КонецОбласти