3_1_8_276

This commit is contained in:
Компания 1С committed 2023-04-13 23:19:00 +03:00
1 parent 1929c5637b
commit bf143472d7
1664 files changed
+135734 -75376

No files matched your search

@@ -14,6 +14,10 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат;
КонецЕсли;
ИспользоватьНапоминания = ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания;
СписокТекущихНапоминаний = ?(ИспользоватьНапоминания,
СписокТекущихНапоминанийПользователя(), Новый Массив);
@@ -567,6 +571,7 @@
Для Каждого СтрокаТаблицы Из ТаблицаРезультата Цикл
ДатаПредмета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТаблицы.Источник, СтрокаТаблицы.ИмяРеквизитаИсточника);
Если (ДатаПредмета - СтрокаТаблицы.ИнтервалВремениНапоминания) <> СтрокаТаблицы.ВремяСобытия Тогда
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
ОтключитьНапоминание(СтрокаТаблицы, Ложь);
СтрокаТаблицы.СрокНапоминания = ДатаПредмета - СтрокаТаблицы.ИнтервалВремениНапоминания;
СтрокаТаблицы.ВремяСобытия = ДатаПредмета;
@@ -576,6 +581,7 @@
ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицы);
ПараметрыНапоминания.Расписание = СтрокаТаблицы.Расписание.Получить();
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
Напоминание = СоздатьНапоминание(ПараметрыНапоминания);
ПодключитьНапоминание(Напоминание);
КонецЕсли;
@@ -936,7 +942,9 @@
Продолжить;
КонецЕсли;
// @skip-check query-in-loop - нет обращения к данным ИБ в запросе.
ГрафикСобытияНаГод = ГрафикСобытия(Расписание, Напоминание.ВремяСобытия, ДобавитьМесяц(Напоминание.ВремяСобытия, 12) - 1);
// @skip-check query-in-loop - нет обращения к данным ИБ в запросе.
ПодошедшееВремяСобытия = ГрафикСобытия(Расписание, Напоминание.ВремяСобытия + 1, ТекущаяДатаСеанса());
// - подошло следующее время события по расписанию;
@@ -950,22 +958,25 @@
НачатьТранзакцию();
Попытка
Если ПодошедшееВремяСобытия.Количество() > 0 Тогда
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
ОтключитьНапоминание(Напоминание, Ложь, ПриЗапуске);
ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание);
ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить();
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
Напоминание = СоздатьНапоминание(ПараметрыНапоминания);
Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()];
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание,, ПриЗапуске);
КонецЕсли;
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
ОтключитьНапоминание(Напоминание, Истина, ПриЗапуске);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Напоминания пользователя'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, Метаданные.РегистрыСведений.НапоминанияПользователя, , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
УровеньЖурналаРегистрации.Ошибка, Метаданные.РегистрыСведений.НапоминанияПользователя, , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецЦикла;
@@ -1025,4 +1036,285 @@
КонецФункции
// См. НапоминанияПользователя.ПриЧтенииНаСервере
Процедура ПриСозданииНаСервере(Форма, ПараметрыРазмещения) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НапоминанияПользователя) Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыРазмещения.ИмяРеквизитаСДатойСобытия) Тогда
Возврат;
КонецЕсли;
Объект = Неопределено;
Для Каждого Реквизит Из Форма.ПолучитьРеквизиты() Цикл
Если ТипЗнч(Форма[Реквизит.Имя]) = Тип("ДанныеФормыСтруктура") Тогда
Объект = Форма[Реквизит.Имя];
Прервать;
КонецЕсли;
КонецЦикла;
Если Объект = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяРеквизитаСДатойСобытия = ПараметрыРазмещения.ИмяРеквизитаСДатойСобытия;
Предмет = Объект.Ссылка;
ОбъектМетаданных = Предмет.Метаданные();
РеквизитСДатой = ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизитаСДатойСобытия);
Если РеквизитСДатой = Неопределено Тогда
ЗначенияСвойств = Новый Структура("ИмяРеквизитаСДатойСобытия");
ЗаполнитьЗначенияСвойств(ЗначенияСвойств, ОбъектМетаданных.СтандартныеРеквизиты);
РеквизитСДатой = ЗначенияСвойств.ИмяРеквизитаСДатойСобытия;
КонецЕсли;
Если РеквизитСДатой = Неопределено Тогда
Возврат;
КонецЕсли;
ВыводитьКороткиеИнтервалы = Истина;
ОписаниеТипаДата = РеквизитСДатой.Тип; // ОписаниеТипов
Если ОписаниеТипаДата.КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Дата Тогда
ВыводитьКороткиеИнтервалы = Ложь;
КонецЕсли;
ИмяПоляНастройкиНапоминания = НапоминанияПользователяКлиентСервер.ИмяПоляНастройкиНапоминания();
ИмяГруппыЭлементов = "НастройкаНапоминания";
ИмяПоляИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ИмяПоляИнтервалВремениНапоминания();
ИмяПоляНапоминатьОСобытии = ИмяПоляНапоминатьОСобытии();
НастройкиНапоминания = ПараметрыРазмещения();
НастройкиНапоминания.Удалить("Группа");
ЗаполнитьЗначенияСвойств(НастройкиНапоминания, ПараметрыРазмещения);
НастройкиНапоминания.Вставить("Предмет", Предмет);
Если Форма.Элементы.Найти(ИмяГруппыЭлементов) = Неопределено Тогда
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяПоляНастройкиНапоминания, Новый ОписаниеТипов));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяПоляНапоминатьОСобытии,
Новый ОписаниеТипов("Булево"), , НСтр("ru = 'Напомнить'"), Истина));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяПоляИнтервалВремениНапоминания,
Новый ОписаниеТипов("Строка"), , НСтр("ru = 'Интервал времени напоминания'"), Истина));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Группа = Форма.Элементы.Добавить(ИмяГруппыЭлементов, Тип("ГруппаФормы"), ПараметрыРазмещения.Группа);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа.ОтображатьЗаголовок = Ложь;
Группа.Заголовок = НСтр("ru = 'Настройка напоминания'");
Если НастройкиНапоминания.ДобавлятьФлажок Тогда
Флажок = Форма.Элементы.Добавить(ИмяПоляНапоминатьОСобытии, Тип("ПолеФормы"), Группа);
Флажок.ПутьКДанным = ИмяПоляНапоминатьОСобытии;
Флажок.Вид = ВидПоляФормы.ПолеФлажка;
Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
Флажок.Заголовок = НСтр("ru = 'Напомнить:'");
КонецЕсли;
ПолеВвода = Форма.Элементы.Добавить(ИмяПоляИнтервалВремениНапоминания, Тип("ПолеФормы"), Группа);
ПолеВвода.ПутьКДанным = ИмяПоляИнтервалВремениНапоминания;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.Подсказка = НСтр("ru = 'Время, за которое необходимо напомнить о событии'");
Если НастройкиНапоминания.ДобавлятьФлажок Тогда
ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Иначе
ПолеВвода.Заголовок = НСтр("ru = 'Напомнить'");
КонецЕсли;
ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииНастройкиНапоминания");
ПолеВвода.ОбновлениеТекстаРедактирования = ОбновлениеТекстаРедактирования.ПриИзмененииЗначения;
ПолеВвода.КнопкаВыпадающегоСписка = Истина;
ПолеВвода.Ширина = 12;
ПолеВвода.РастягиватьПоГоризонтали = Ложь;
НастройкиПодсистемы = НастройкиПодсистемы();
ИнтервалыВремени = НастройкиПодсистемы.СтандартныеИнтервалы;
ПолеВвода.СписокВыбора.Очистить();
Если Не НастройкиНапоминания.ДобавлятьФлажок Тогда
ПолеВвода.СписокВыбора.Добавить(НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияНеНапоминать());
КонецЕсли;
ПолеВвода.СписокВыбора.Добавить(НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияПриНаступлении());
Для Каждого Интервал Из ИнтервалыВремени Цикл
Если Не ВыводитьКороткиеИнтервалы И ИнтервалВремениИзСтроки(Интервал) < 24*60*60 Тогда
Продолжить;
КонецЕсли;
ПолеВвода.СписокВыбора.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'за %1'"), Интервал));
КонецЦикла;
Если НастройкиНапоминания.ИнтервалВремениНапоминания = Неопределено Тогда
ИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияПриНаступлении();
НастройкиНапоминания.ИнтервалВремениНапоминания = 0;
КонецЕсли;
Если НастройкиНапоминания.ДобавлятьФлажок Тогда
Если НастройкиНапоминания.ИнтервалВремениНапоминания = 0 Тогда
Форма[ИмяПоляИнтервалВремениНапоминания] = НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияПриНаступлении();
Иначе
Форма[ИмяПоляИнтервалВремениНапоминания] = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'за %1'"), ПредставлениеВремени(НастройкиНапоминания.ИнтервалВремениНапоминания, , Ложь));
КонецЕсли;
Иначе
Форма[ИмяПоляИнтервалВремениНапоминания] = НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияНеНапоминать();
КонецЕсли;
Форма[ИмяПоляНастройкиНапоминания] = НастройкиНапоминания;
КонецЕсли;
Если Не ЗначениеЗаполнено(Предмет) Тогда
Возврат;
КонецЕсли;
ПрочитатьНастройкиНапоминанияПоПредмету(Форма, Предмет);
КонецПроцедуры
// См. НапоминанияПользователя.ПриЧтенииНаСервере
Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НапоминанияПользователя) Тогда
Возврат;
КонецЕсли;
НастройкиНапоминания = НапоминанияПользователяКлиентСервер.НастройкиНапоминанияВФорме(Форма);
Если НастройкиНапоминания = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяПоляИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ИмяПоляИнтервалВремениНапоминания();
ИмяПоляНапоминатьОСобытии = ИмяПоляНапоминатьОСобытии();
Предмет = ТекущийОбъект.Ссылка;
ПрочитатьНастройкиНапоминанияПоПредмету(Форма, Предмет);
КонецПроцедуры
Процедура ПриЗаписиНаСервере(Форма, Отказ, ТекущийОбъект, ПараметрыЗаписи, Знач ТекстНапоминания) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НапоминанияПользователя) Тогда
Возврат;
КонецЕсли;
НастройкиНапоминания = НапоминанияПользователяКлиентСервер.НастройкиНапоминанияВФорме(Форма);
НапоминаниеВключено = Форма[ИмяПоляНапоминатьОСобытии()];
Предмет = ТекущийОбъект.Ссылка;
НастройкиНапоминания.Вставить("Предмет", Предмет);
ИмяРеквизитаСДатойСобытия = НастройкиНапоминания.ИмяРеквизитаСДатойСобытия;
ИнтервалВремениНапоминания = НастройкиНапоминания.ИнтервалВремениНапоминания;
Текст = ТекстНапоминания;
Если Не ЗначениеЗаполнено(Текст) Тогда
Текст = ОбщегоНазначения.ПредметСтрокой(Предмет);
КонецЕсли;
Если НапоминаниеВключено Тогда
ПереустановитьНапоминаниеПоПредмету(Предмет, ИмяРеквизитаСДатойСобытия, ИнтервалВремениНапоминания, Текст);
Иначе
УдалитьНапоминанияПоПредмету(Предмет, ИмяРеквизитаСДатойСобытия)
КонецЕсли;
КонецПроцедуры
// См. НапоминанияПользователя.ПараметрыРазмещения
Функция ПараметрыРазмещения() Экспорт
Результат = Новый Структура;
Результат.Вставить("Группа");
Результат.Вставить("ИмяРеквизитаСДатойСобытия");
Результат.Вставить("ИнтервалВремениНапоминания");
Результат.Вставить("ДобавлятьФлажок", Ложь);
Возврат Результат;
КонецФункции
// См. НапоминанияПользователяКлиентСервер.ПредставлениеВремени
Функция ПредставлениеВремени(Знач Время, ПолноеПредставление = Истина, ВыводитьСекунды = Истина)
Возврат НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Время, ПолноеПредставление, ВыводитьСекунды);
КонецФункции
Процедура УдалитьНапоминанияПоПредмету(Предмет, ИмяРеквизита)
НапоминанияПоПредмету = НапоминанияПользователя.НайтиНапоминания(Предмет);
Для Каждого Напоминание Из НапоминанияПоПредмету Цикл
Если НРег(Напоминание.ИмяРеквизитаИсточника) = НРег(ИмяРеквизита) Тогда
// @skip-check query-in-loop - запись данных набором с чтением в цикле.
ОтключитьНапоминание(Напоминание, Ложь);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПереустановитьНапоминаниеПоПредмету(Предмет, ИмяРеквизита, ИнтервалВремениНапоминания, Текст)
УдалитьНапоминанияПоПредмету(Предмет, ИмяРеквизита);
ПодключитьПроизвольноеНапоминание(Текст, ИмяРеквизита, ИнтервалВремениНапоминания, Предмет);
КонецПроцедуры
// См. НапоминанияПользователяКлиентСервер.ИнтервалВремениИзСтроки
Функция ИнтервалВремениИзСтроки(Знач СтрокаСоВременем) Экспорт
Возврат НапоминанияПользователяКлиентСервер.ИнтервалВремениИзСтроки(СтрокаСоВременем);
КонецФункции
Функция ИмяПоляНапоминатьОСобытии() Экспорт
Возврат НапоминанияПользователяКлиентСервер.ИмяПоляНапоминатьОСобытии();
КонецФункции
Процедура ПрочитатьНастройкиНапоминанияПоПредмету(Форма, Предмет)
НастройкиНапоминания = НапоминанияПользователяКлиентСервер.НастройкиНапоминанияВФорме(Форма);
Если НастройкиНапоминания = Неопределено Тогда
Возврат;
КонецЕсли;
НастройкиНапоминания.Вставить("Предмет", Предмет);
НапоминанияПоПредмету = НапоминанияПользователя.НайтиНапоминания(Предмет);
Для Каждого Напоминание Из НапоминанияПоПредмету Цикл
Если НРег(Напоминание.ИмяРеквизитаИсточника) = НРег(НастройкиНапоминания.ИмяРеквизитаСДатойСобытия) Тогда
ИмяПоляНапоминатьОСобытии = ИмяПоляНапоминатьОСобытии();
ИмяПоляИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ИмяПоляИнтервалВремениНапоминания();
Форма[ИмяПоляНапоминатьОСобытии] = Истина;
Если Напоминание.ИнтервалВремениНапоминания = 0 Тогда
Форма[ИмяПоляИнтервалВремениНапоминания] = НапоминанияПользователяКлиентСервер.ПредставлениеПеречисленияПриНаступлении();
Иначе
Форма[ИмяПоляИнтервалВремениНапоминания] = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'за %1'"), ПредставлениеВремени(Напоминание.ИнтервалВремениНапоминания, , Ложь));
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти