From 28f5f6c774a660980cc4a27aa407bceb7e62689e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D1=8F=201=D0=A1?= Date: Thu, 4 Jul 2019 01:10:00 +0300 Subject: [PATCH] 3_1_1_151 --- .../ВерсииРасширений/ManagerModule.bsl | 3 +- .../Календари/Forms/ФормаЭлемента/Module.bsl | 10 +- SSL/src/Catalogs/Календари/ManagerModule.bsl | 602 --- SSL/src/Catalogs/Календари/ObjectModule.bsl | 4 +- .../Forms/ФормаЭлемента/Help/ru.html | 149 +- SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html | 27 +- .../СтраныМира/Forms/Классификатор/Module.bsl | 2 +- .../Templates/Классификатор/Template.txt | 862 ++++- .../Forms/ЗависимостьРеквизитов/Module.bsl | 10 +- .../УстановленныеИсправления/Form.form | 2 +- .../УстановленныеИсправления/Module.bsl | 4 +- .../ФормаНастроекОтчета/Module.bsl | 10 +- SSL/src/CommonForms/ФормаОтчета/Module.bsl | 25 +- .../АдресныйКлассификаторСлужебный/Module.bsl | 1000 +++-- .../CommonModules/ГрафикиРаботы/Module.bsl | 28 +- .../ИнтеграцияПодсистемБСП/Module.bsl | 884 ++--- .../КалендарныеГрафики/Module.bsl | 7 + .../ОбменДаннымиXDTOСервер/Module.bsl | 117 +- .../ОбменДаннымиВМоделиСервиса/Module.bsl | 263 +- .../Module.bsl | 52 +- .../ОбменДаннымиПовтИсп/Module.bsl | 24 - .../ОбменДаннымиСервер/Module.bsl | 21 +- .../ОбновлениеИнформационнойБазы/Module.bsl | 4 +- .../Module.bsl | 2 +- .../Module.bsl | 16 +- SSL/src/CommonModules/ОтправкаSMS/Module.bsl | 3 + SSL/src/CommonModules/ОтчетыСервер/Module.bsl | 6 +- .../РаботаСАдресамиКлиентСервер/Module.bsl | 15 +- .../Module.bsl | 90 +- .../РаботаСФайламиСлужебный/Module.bsl | 24 +- .../УправлениеДоступом/Module.bsl | 13 +- .../УправлениеДоступомСлужебный/Module.bsl | 1131 ++++-- .../Module.bsl | 30 +- .../Module.bsl | 7 +- .../Module.bsl | 2 +- SSL/src/Configuration/Configuration.mdo | 18 +- .../Configuration/ParentConfigurations.bin | 2 +- .../ValueManagerModule.bsl | 6 +- .../ValueManagerModule.bsl | 6 +- .../Forms/Форма/Module.bsl | 10 +- .../ManagerModule.bsl | 4 +- .../Template.txt | 5 + .../КонвертацияОбъектовXDTO/ObjectModule.bsl | 4 + .../ManagerModule.bsl | 4 +- .../ИнтернетПоддержкаИСервисы/Module.bsl | 4 +- .../НастройкиПользователейИПрав/Form.form | 3 + .../Forms/ВводАдреса/Module.bsl | 12 +- .../ВыборАдресаПоПочтовомуИндексу/Module.bsl | 8 +- .../Forms/НаселенныйПунктАдреса/Module.bsl | 21 +- .../ManagerModule.bsl | 12 +- .../РезервноеКопированиеДанных/Module.bsl | 6 +- .../КалендарныеГрафики/ManagerModule.bsl | 759 ++++ .../КурсыВалют/RecordSetModule.bsl | 12 +- .../Form.form | 13 - .../Module.bsl | 131 +- .../ОбновлениеКлючейДоступаПользователей.mdo | 44 +- .../РезультатыОбменаДанными/ManagerModule.bsl | 19 +- .../СостоянияОбменовДанными/ManagerModule.bsl | 12 + .../Roles/АдминистраторСистемы/Rights.rights | 174 +- SSL/src/Roles/БазовыеПраваБСП/Rights.rights | 3266 +---------------- .../Rights.rights | 296 +- .../Rights.rights | 3266 +---------------- .../ДобавлениеИзменениеЗаданий/Rights.rights | 148 +- .../ДобавлениеИзменениеЗаметок/Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 210 +- .../Rights.rights | 3118 +--------------- .../ИзменениеВыполнениеЗадач/Rights.rights | 148 +- .../Rights.rights | 148 +- .../Rights.rights | 296 +- SSL/src/Roles/ПолныеПрава/Rights.rights | 78 +- .../Rights.rights | 148 +- .../Rights.rights | 148 +- SSL/src/Roles/ЧтениеЗаданий/Rights.rights | 148 +- SSL/src/Roles/ЧтениеЗадач/Rights.rights | 148 +- .../Rights.rights | 148 +- 80 files changed, 6022 insertions(+), 13318 deletions(-) create mode 100644 SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl diff --git a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl index 14d7faaef..f707b4c91 100644 --- a/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииРасширений/ManagerModule.bsl @@ -784,7 +784,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); + МодульУправлениеДоступомСлужебный.ЗапланироватьОбновлениеПараметровОграниченияДоступа( + "ОбновитьПоследнююВерсиюРасширений"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 7fbe3a1a2..f7fb42742 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -139,7 +139,7 @@ // то записываем их как есть, остальные периоды обновляем по шаблону. Если МодифицированностьРезультата Тогда - Справочники.Календари.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); + РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); КонецЕсли; ЗаписатьПризнакРучногоРедактирования(ТекущийОбъект, НомерГода); @@ -700,7 +700,7 @@ &НаСервере Процедура ЗаполнитьПоШаблонуНаСервере(СохранятьРучноеРедактирование = Ложь) - ДниВключенныеВГрафик = Справочники.Календари.ДниВключенныеВГрафик( + ДниВключенныеВГрафик = РегистрыСведений.КалендарныеГрафики.ДниВключенныеВГрафик( Объект.ДатаНачала, Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, @@ -765,13 +765,13 @@ КонецЕсли; ДниГрафика = Новый ФиксированноеСоответствие( - Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(ГрафикСсылка, НомерТекущегоГода)); + РегистрыСведений.КалендарныеГрафики.ПрочитатьДанныеГрафикаИзРегистра(ГрафикСсылка, НомерТекущегоГода)); ПрочитатьПризнакРучногоРедактирования(Объект, НомерТекущегоГода); // Если нет ручных корректировок и данных тоже нет, то формируем результат по шаблону за выбранный год. Если ДниГрафика.Количество() = 0 И ДниИзмененные.Количество() = 0 Тогда - ДниВключенныеВГрафик = Справочники.Календари.ДниВключенныеВГрафик( + ДниВключенныеВГрафик = РегистрыСведений.КалендарныеГрафики.ДниВключенныеВГрафик( Объект.ДатаНачала, Объект.СпособЗаполнения, Объект.ШаблонЗаполнения, @@ -839,7 +839,7 @@ &НаСервере Процедура ЗаписатьДанныеГрафикаРаботыНаГод(НомерГода) - Справочники.Календари.ЗаписатьДанныеГрафикаВРегистр(Объект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); + РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр(Объект.Ссылка, ДниГрафика, Дата(НомерГода, 1, 1), Дата(НомерГода, 12, 31), Истина); ЗаписатьПризнакРучногоРедактирования(Объект, НомерГода); КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 2b55df712..e69de29bb 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -1,602 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2019, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныеПроцедурыИФункции - -// Функция читает данные графика работы из регистра. -// -// Параметры: -// ГрафикРаботы - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо прочитать график. -// -// Возвращаемое значение - соответствие, где Ключ - дата. -// -Функция ПрочитатьДанныеГрафикаИзРегистра(ГрафикРаботы, НомерГода) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | КалендарныеГрафики.ДатаГрафика КАК ДатаКалендаря - |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - |ГДЕ - | КалендарныеГрафики.Календарь = &ГрафикРаботы - | И КалендарныеГрафики.Год = &ТекущийГод - | И КалендарныеГрафики.ДеньВключенВГрафик - | - |УПОРЯДОЧИТЬ ПО - | ДатаКалендаря"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы); - Запрос.УстановитьПараметр("ТекущийГод", НомерГода); - - ДниВключенныеВГрафик = Новый Соответствие; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ДниВключенныеВГрафик.Вставить(Выборка.ДатаКалендаря, Истина); - КонецЦикла; - - Возврат ДниВключенныеВГрафик; - -КонецФункции - -// Процедура записывает данные графика в регистр. -// -// Параметры: -// ГрафикРаботы - Ссылка на текущий элемент справочника. -// НомерГода - Номер года, за который необходимо записать график. -// ДниВключенныеВГрафик - соответствие даты и данных к ней относящихся. -// -// Возвращаемое значение -// Нет -// -Процедура ЗаписатьДанныеГрафикаВРегистр(ГрафикРаботы, ДниВключенныеВГрафик, ДатаНачала, ДатаОкончания, ЗамещатьРучныеИзменения = Ложь) Экспорт - - НаборДни = РегистрыСведений.КалендарныеГрафики.СоздатьНаборЗаписей(); - НаборДни.Отбор.Календарь.Установить(ГрафикРаботы); - - // Запись оптимальнее выполнять по годам. - // Выбираем используемые годы - // Для каждого года - // - считываем набор, - // - модифицируем его с учетом записываемых данных - // - записываем. - - ДанныеПоГодам = Новый Соответствие; - - ДатаДня = ДатаНачала; - Пока ДатаДня <= ДатаОкончания Цикл - ДанныеПоГодам.Вставить(Год(ДатаДня), Истина); - ДатаДня = ДатаДня + 86400; - КонецЦикла; - - РучныеИзменения = Неопределено; - Если Не ЗамещатьРучныеИзменения Тогда - РучныеИзменения = РучныеИзмененияГрафика(ГрафикРаботы); - КонецЕсли; - - // Обрабатываем данные по годам. - Для Каждого КлючИЗначение Из ДанныеПоГодам Цикл - Год = КлючИЗначение.Ключ; - - // Считываем наборы на год - НаборДни.Отбор.Год.Установить(Год); - НаборДни.Прочитать(); - - // Заполняем содержимое набора в соответствие по датам для быстрого доступа. - СтрокиНабораДни = Новый Соответствие; - Для Каждого СтрокаНабора Из НаборДни Цикл - СтрокиНабораДни.Вставить(СтрокаНабора.ДатаГрафика, СтрокаНабора); - КонецЦикла; - - НачалоГода = Дата(Год, 1, 1); - КонецГода = Дата(Год, 12, 31); - - НачалоОбхода = ?(ДатаНачала > НачалоГода, ДатаНачала, НачалоГода); - КонецОбхода = ?(ДатаОкончания < КонецГода, ДатаОкончания, КонецГода); - - // Для периода обхода данные в наборе должны быть заменены. - ДатаДня = НачалоОбхода; - Пока ДатаДня <= КонецОбхода Цикл - - Если РучныеИзменения <> Неопределено И РучныеИзменения[ДатаДня] <> Неопределено Тогда - // Оставляем без изменений в наборе ручные корректировки. - ДатаДня = ДатаДня + 86400; - Продолжить; - КонецЕсли; - - // Если строки на дату нет в наборе - создаем ее. - СтрокаНабораДни = СтрокиНабораДни[ДатаДня]; - Если СтрокаНабораДни = Неопределено Тогда - СтрокаНабораДни = НаборДни.Добавить(); - СтрокаНабораДни.Календарь = ГрафикРаботы; - СтрокаНабораДни.Год = Год; - СтрокаНабораДни.ДатаГрафика = ДатаДня; - СтрокиНабораДни.Вставить(ДатаДня, СтрокаНабораДни); - КонецЕсли; - - // Если день включен в график, то заполним его интервалы. - ДанныеДня = ДниВключенныеВГрафик.Получить(ДатаДня); - Если ДанныеДня = Неопределено Тогда - // Удаляем строку из набора, если день - нерабочий. - НаборДни.Удалить(СтрокаНабораДни); - СтрокиНабораДни.Удалить(ДатаДня); - Иначе - СтрокаНабораДни.ДеньВключенВГрафик = Истина; - КонецЕсли; - ДатаДня = ДатаДня + 86400; - КонецЦикла; - - // Заполняем вторичные данные для оптимизации расчетов по календарям. - ДатаОбхода = НачалоГода; - КоличествоДнейВГрафикеСНачалаГода = 0; - Пока ДатаОбхода <= КонецГода Цикл - СтрокаНабораДни = СтрокиНабораДни[ДатаОбхода]; - Если СтрокаНабораДни <> Неопределено Тогда - // День включен в график - КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода + 1; - Иначе - // День не включен в график - СтрокаНабораДни = НаборДни.Добавить(); - СтрокаНабораДни.Календарь = ГрафикРаботы; - СтрокаНабораДни.Год = Год; - СтрокаНабораДни.ДатаГрафика = ДатаОбхода; - КонецЕсли; - СтрокаНабораДни.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода; - ДатаОбхода = ДатаОбхода + 86400; - КонецЦикла; - - НаборДни.Записать(); - - КонецЦикла; - -КонецПроцедуры - -// Выполняет обновление графиков работы по данным производственных календарей, -// на основании которых они заполняются. -// -// Параметры: -// - УсловияОбновления - таблица значений с колонками. -// - КодПроизводственногоКалендаря - код производственного календаря, данные которого изменились, -// - Год - год, за который нужно обновить данные. -// -Процедура ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления) Экспорт - - // Выявим графики, которые нужно обновить - // получаем данные этих графиков - // последовательно обновляем за каждый год. - - ТекстЗапроса = - "ВЫБРАТЬ - | УсловияОбновления.КодПроизводственногоКалендаря, - | УсловияОбновления.Год, - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, УсловияОбновления.Год - 1) КАК НачалоГода, - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 12, 31), ГОД, УсловияОбновления.Год - 1) КАК КонецГода - |ПОМЕСТИТЬ УсловияОбновления - |ИЗ - | &УсловияОбновления КАК УсловияОбновления - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Календари.Ссылка КАК ГрафикРаботы, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники, - | Календари.ДатаНачала, - | Календари.ДатаОкончания - |ПОМЕСТИТЬ ВТГрафикиРаботыЗависимыеОтКалендарей - |ИЗ - | Справочник.Календари КАК Календари - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО (ПроизводственныеКалендари.Ссылка = Календари.ПроизводственныйКалендарь) - | И (Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоНеделям)) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | Календари.Ссылка, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники, - | Календари.ДатаНачала, - | Календари.ДатаОкончания - |ИЗ - | Справочник.Календари КАК Календари - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО (ПроизводственныеКалендари.Ссылка = Календари.ПроизводственныйКалендарь) - | И (Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоЦикламПроизвольнойДлины)) - | И (Календари.УчитыватьПраздники) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Календари.ГрафикРаботы, - | УсловияОбновления.Год, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | ВЫБОР - | КОГДА Календари.ДатаНачала < УсловияОбновления.НачалоГода - | ТОГДА УсловияОбновления.НачалоГода - | ИНАЧЕ Календари.ДатаНачала - | КОНЕЦ КАК ДатаНачала, - | ВЫБОР - | КОГДА Календари.ДатаОкончания > УсловияОбновления.КонецГода - | ТОГДА УсловияОбновления.КонецГода - | ИНАЧЕ Календари.ДатаОкончания - | КОНЕЦ КАК ДатаОкончания, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники - |ПОМЕСТИТЬ ВТГрафикиРаботыПоУсловиюОбновления - |ИЗ - | ВТГрафикиРаботыЗависимыеОтКалендарей КАК Календари - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ УсловияОбновления КАК УсловияОбновления - | ПО (УсловияОбновления.КодПроизводственногоКалендаря = Календари.ПроизводственныйКалендарь.Код) - | И Календари.ДатаНачала <= УсловияОбновления.КонецГода - | И Календари.ДатаОкончания >= УсловияОбновления.НачалоГода - | И (Календари.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1)) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | Календари.ГрафикРаботы, - | УсловияОбновления.Год, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | ВЫБОР - | КОГДА Календари.ДатаНачала < УсловияОбновления.НачалоГода - | ТОГДА УсловияОбновления.НачалоГода - | ИНАЧЕ Календари.ДатаНачала - | КОНЕЦ, - | УсловияОбновления.КонецГода, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники - |ИЗ - | ВТГрафикиРаботыЗависимыеОтКалендарей КАК Календари - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ УсловияОбновления КАК УсловияОбновления - | ПО (УсловияОбновления.КодПроизводственногоКалендаря = Календари.ПроизводственныйКалендарь.Код) - | И Календари.ДатаНачала <= УсловияОбновления.КонецГода - | И (Календари.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Календари.ГрафикРаботы, - | Календари.Год, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | Календари.ДатаНачала, - | Календари.ДатаОкончания, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники - |ПОМЕСТИТЬ ВТОбновляемыеГрафикиРаботы - |ИЗ - | ВТГрафикиРаботыПоУсловиюОбновления КАК Календари - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РучныеИзмененияГрафиковРаботы КАК РучныеИзмененияПоВсемГодам - | ПО (РучныеИзмененияПоВсемГодам.ГрафикРаботы = Календари.ГрафикРаботы) - | И (РучныеИзмененияПоВсемГодам.Год = 0) - |ГДЕ - | РучныеИзмененияПоВсемГодам.ГрафикРаботы ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ОбновляемыеГрафикиРаботы.ГрафикРаботы, - | ОбновляемыеГрафикиРаботы.Год, - | ОбновляемыеГрафикиРаботы.СпособЗаполнения, - | ОбновляемыеГрафикиРаботы.ПроизводственныйКалендарь, - | ОбновляемыеГрафикиРаботы.ДатаНачала, - | ОбновляемыеГрафикиРаботы.ДатаОкончания, - | ОбновляемыеГрафикиРаботы.ДатаОтсчета, - | ОбновляемыеГрафикиРаботы.УчитыватьПраздники - |ИЗ - | ВТОбновляемыеГрафикиРаботы КАК ОбновляемыеГрафикиРаботы - | - |УПОРЯДОЧИТЬ ПО - | ОбновляемыеГрафикиРаботы.ГрафикРаботы, - | ОбновляемыеГрафикиРаботы.Год - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ШаблонЗаполнения.Ссылка КАК ГрафикРаботы, - | ШаблонЗаполнения.НомерСтроки КАК НомерСтроки, - | ШаблонЗаполнения.ДеньВключенВГрафик - |ИЗ - | Справочник.Календари.ШаблонЗаполнения КАК ШаблонЗаполнения - |ГДЕ - | ШаблонЗаполнения.Ссылка В - | (ВЫБРАТЬ - | ВТОбновляемыеГрафикиРаботы.ГрафикРаботы - | ИЗ - | ВТОбновляемыеГрафикиРаботы) - | - |УПОРЯДОЧИТЬ ПО - | ГрафикРаботы, - | НомерСтроки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | РасписаниеРаботы.Ссылка КАК ГрафикРаботы, - | РасписаниеРаботы.НомерДня КАК НомерДня, - | РасписаниеРаботы.ВремяНачала, - | РасписаниеРаботы.ВремяОкончания - |ИЗ - | Справочник.Календари.РасписаниеРаботы КАК РасписаниеРаботы - |ГДЕ - | РасписаниеРаботы.Ссылка В - | (ВЫБРАТЬ - | ВТОбновляемыеГрафикиРаботы.ГрафикРаботы - | ИЗ - | ВТОбновляемыеГрафикиРаботы) - | - |УПОРЯДОЧИТЬ ПО - | ГрафикРаботы, - | РасписаниеРаботы.НомерДня"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("УсловияОбновления", УсловияОбновления); - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - ВыборкаПоГрафикам = РезультатыЗапроса[РезультатыЗапроса.ВГраница() - 2].Выбрать(); - ВыборкаПоШаблону = РезультатыЗапроса[РезультатыЗапроса.ВГраница() - 1].Выбрать(); - ВыборкаПоРасписанию = РезультатыЗапроса[РезультатыЗапроса.ВГраница()].Выбрать(); - - ШаблонЗаполнения = Новый ТаблицаЗначений; - ШаблонЗаполнения.Колонки.Добавить("ДеньВключенВГрафик", Новый ОписаниеТипов("Булево")); - - РасписаниеРаботы = Новый ТаблицаЗначений; - РасписаниеРаботы.Колонки.Добавить("НомерДня", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(7))); - РасписаниеРаботы.Колонки.Добавить("ВремяНачала", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Время))); - РасписаниеРаботы.Колонки.Добавить("ВремяОкончания", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Время))); - - Пока ВыборкаПоГрафикам.СледующийПоЗначениюПоля("ГрафикРаботы") Цикл - ШаблонЗаполнения.Очистить(); - Пока ВыборкаПоШаблону.НайтиСледующий(ВыборкаПоГрафикам.ГрафикРаботы, "ГрафикРаботы") Цикл - НоваяСтрока = ШаблонЗаполнения.Добавить(); - НоваяСтрока.ДеньВключенВГрафик = ВыборкаПоШаблону.ДеньВключенВГрафик; - КонецЦикла; - РасписаниеРаботы.Очистить(); - Пока ВыборкаПоРасписанию.НайтиСледующий(ВыборкаПоГрафикам.ГрафикРаботы, "ГрафикРаботы") Цикл - НовыйИнтервал = РасписаниеРаботы.Добавить(); - НовыйИнтервал.НомерДня = ВыборкаПоРасписанию.НомерДня; - НовыйИнтервал.ВремяНачала = ВыборкаПоРасписанию.ВремяНачала; - НовыйИнтервал.ВремяОкончания = ВыборкаПоРасписанию.ВремяОкончания; - КонецЦикла; - Пока ВыборкаПоГрафикам.СледующийПоЗначениюПоля("ДатаНачала") Цикл - // Если дата окончания не указана, она будет подобрана по производственному календарю. - ДатаОкончанияЗаполнения = ВыборкаПоГрафикам.ДатаОкончания; - ДниВключенныеВГрафик = ДниВключенныеВГрафик( - ВыборкаПоГрафикам.ДатаНачала, - ВыборкаПоГрафикам.СпособЗаполнения, - ШаблонЗаполнения, - ДатаОкончанияЗаполнения, - ВыборкаПоГрафикам.ПроизводственныйКалендарь, - ВыборкаПоГрафикам.УчитыватьПраздники, - ВыборкаПоГрафикам.ДатаОтсчета); - ЗаписатьДанныеГрафикаВРегистр(ВыборкаПоГрафикам.ГрафикРаботы, ДниВключенныеВГрафик, ВыборкаПоГрафикам.ДатаНачала, ДатаОкончанияЗаполнения); - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -// Составляет коллекцию дат, являющихся рабочими с учетом производственного календаря, -// способа заполнения и других настроек. -// -// Параметры: -// - Год - номер года -// - ПроизводственныйКалендарь - производственный календарь, по которому определяются дни. -// - СпособЗаполнения - способ заполнения. -// - ШаблонЗаполнения - шаблон заполнения по дням. -// - УчитыватьПраздники - булево, если Истина, то дни, выпадающие на праздники, будут исключаться. -// - ДатаНачала - необязательный, указывается только для заполнения по циклам произвольной длины. -// -// Возвращаемое значение - соответствие, где Ключ - дата, значение массив структур с описанием интервалов времени для -// указанной даты. -// -Функция ДниВключенныеВГрафик(ДатаНачала, СпособЗаполнения, ШаблонЗаполнения, ДатаОкончания, ПроизводственныйКалендарь, УчитыватьПраздники, Знач ДатаОтсчета = Неопределено) Экспорт - - ДниВключенныеВГрафик = Новый Соответствие; - - Если ШаблонЗаполнения.Количество() = 0 Тогда - Возврат ДниВключенныеВГрафик; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ДатаОкончания) Тогда - // Если дата окончания не указана, то заполняем до конца года. - ДатаОкончания = КонецГода(ДатаНачала); - Если ЗначениеЗаполнено(ПроизводственныйКалендарь) Тогда - // Если указан производственный календарь, то заполняем до "конца" его заполненности. - ДатаОкончанияЗаполнения = Справочники.ПроизводственныеКалендари.ДатаОкончанияЗаполненияПроизводственногоКалендаря(ПроизводственныйКалендарь); - Если ДатаОкончанияЗаполнения <> Неопределено - И ДатаОкончанияЗаполнения > ДатаОкончания Тогда - ДатаОкончания = ДатаОкончанияЗаполнения; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Заполнение данных производится по годам. - ТекущийГод = Год(ДатаНачала); - Пока ТекущийГод <= Год(ДатаОкончания) Цикл - ДатаНачалаВГоду = ДатаНачала; - ДатаОкончанияВГоду = ДатаОкончания; - СкорректироватьДатыНачалаОкончания(ТекущийГод, ДатаНачалаВГоду, ДатаОкончанияВГоду); - // Получаем данные графика за год. - Если СпособЗаполнения = Перечисления.СпособыЗаполненияГрафикаРаботы.ПоНеделям Тогда - ДниЗаГод = ДниВключенныеВГрафикПоНеделям(ТекущийГод, ПроизводственныйКалендарь, ШаблонЗаполнения, УчитыватьПраздники, ДатаНачалаВГоду, ДатаОкончанияВГоду); - Иначе - ДниЗаГод = ДниВключенныеВГрафикПроизвольнойДлины(ТекущийГод, ПроизводственныйКалендарь, ШаблонЗаполнения, УчитыватьПраздники, ДатаОтсчета, ДатаНачалаВГоду, ДатаОкончанияВГоду); - КонецЕсли; - // Дополняем общую коллекцию - Для Каждого КлючИЗначение Из ДниЗаГод Цикл - ДниВключенныеВГрафик.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - ТекущийГод = ТекущийГод + 1; - КонецЦикла; - - Возврат ДниВключенныеВГрафик; - -КонецФункции - -Функция ДниВключенныеВГрафикПоНеделям(Год, ПроизводственныйКалендарь, ШаблонЗаполнения, УчитыватьПраздники, Знач ДатаНачала = Неопределено, Знач ДатаОкончания = Неопределено) - - // Заполнение графика работы по неделям. - - ДниВключенныеВГрафик = Новый Соответствие; - - ЗаполнятьПоПроизводственномуКалендарю = ЗначениеЗаполнено(ПроизводственныйКалендарь); - - ДнейВГоду = ДеньГода(Дата(Год, 12, 31)); - ДанныеПроизводственногоКалендаря = Справочники.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, Год); - Если ЗаполнятьПоПроизводственномуКалендарю - И ДанныеПроизводственногоКалендаря.Количество() <> ДнейВГоду Тогда - // Если производственный календарь указан, но заполнен неправильно, заполнение по неделям не поддерживается. - Возврат ДниВключенныеВГрафик; - КонецЕсли; - - ДанныеПроизводственногоКалендаря.Индексы.Добавить("Дата"); - - ДлинаСуток = 24 * 3600; - - ДатаДня = ДатаНачала; - Пока ДатаДня <= ДатаОкончания Цикл - ПраздничныйДень = Ложь; - НерабочийДень = Ложь; - НомерДня = ДеньНедели(ДатаДня); - Если ЗаполнятьПоПроизводственномуКалендарю И УчитыватьПраздники Тогда - ДанныеДня = ДанныеПроизводственногоКалендаря.НайтиСтроки(Новый Структура("Дата", ДатаДня))[0]; - Если ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота Тогда - НомерДня = 6; - ИначеЕсли ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье Тогда - НомерДня = 7; - Иначе - Если ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда - ПраздничныйДень = Истина; - ИначеЕсли ДанныеДня.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий Тогда - НерабочийДень = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Не ПраздничныйДень И Не НерабочийДень Тогда - СтрокаДня = ШаблонЗаполнения[НомерДня - 1]; - Если СтрокаДня.ДеньВключенВГрафик Тогда - ДниВключенныеВГрафик.Вставить(ДатаДня, Истина); - КонецЕсли; - КонецЕсли; - ДатаДня = ДатаДня + ДлинаСуток; - КонецЦикла; - - Возврат ДниВключенныеВГрафик; - -КонецФункции - -Функция ДниВключенныеВГрафикПроизвольнойДлины(Год, ПроизводственныйКалендарь, ШаблонЗаполнения, УчитыватьПраздники, ДатаОтсчета, Знач ДатаНачала = Неопределено, Знач ДатаОкончания = Неопределено) - - ДниВключенныеВГрафик = Новый Соответствие; - - ДлинаСуток = 24 * 3600; - - ДатаДня = ДатаОтсчета; - Пока ДатаДня <= ДатаОкончания Цикл - Для Каждого СтрокаДня Из ШаблонЗаполнения Цикл - Если СтрокаДня.ДеньВключенВГрафик - И ДатаДня >= ДатаНачала Тогда - ДниВключенныеВГрафик.Вставить(ДатаДня, Истина); - КонецЕсли; - ДатаДня = ДатаДня + ДлинаСуток; - КонецЦикла; - КонецЦикла; - - Если Не УчитыватьПраздники Тогда - Возврат ДниВключенныеВГрафик; - КонецЕсли; - - // Исключаем даты праздничных дней. - - ДанныеПроизводственногоКалендаря = Справочники.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, Год); - Если ДанныеПроизводственногоКалендаря.Количество() = 0 Тогда - Возврат ДниВключенныеВГрафик; - КонецЕсли; - - ОтборСтрок = Новый Структура("ВидДня"); - ОтборСтрок.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник; - ДанныеПраздничныхДней = ДанныеПроизводственногоКалендаря.НайтиСтроки(ОтборСтрок); - Для Каждого ДанныеДня Из ДанныеПраздничныхДней Цикл - ДниВключенныеВГрафик.Удалить(ДанныеДня.Дата); - КонецЦикла; - ОтборСтрок.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Нерабочий; - ДанныеПраздничныхДней = ДанныеПроизводственногоКалендаря.НайтиСтроки(ОтборСтрок); - Для Каждого ДанныеДня Из ДанныеПраздничныхДней Цикл - ДниВключенныеВГрафик.Удалить(ДанныеДня.Дата); - КонецЦикла; - - Возврат ДниВключенныеВГрафик; - -КонецФункции - -Процедура СкорректироватьДатыНачалаОкончания(Год, ДатаНачала, ДатаОкончания) - - НачалоГода = Дата(Год, 1, 1); - КонецГода = Дата(Год, 12, 31); - - Если ДатаНачала <> Неопределено Тогда - ДатаНачала = Макс(ДатаНачала, НачалоГода); - Иначе - ДатаНачала = НачалоГода; - КонецЕсли; - - Если ДатаОкончания <> Неопределено Тогда - ДатаОкончания = Мин(ДатаОкончания, КонецГода); - Иначе - ДатаОкончания = КонецГода; - КонецЕсли; - -КонецПроцедуры - -// Определяет даты ручных изменений указанного графика. -// -Функция РучныеИзмененияГрафика(ГрафикРаботы) - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | РучныеИзменения.ГрафикРаботы, - | РучныеИзменения.Год, - | РучныеИзменения.ДатаГрафика, - | ЕСТЬNULL(КалендарныеГрафики.ДеньВключенВГрафик, ЛОЖЬ) КАК ДеньВключенВГрафик - |ИЗ - | РегистрСведений.РучныеИзмененияГрафиковРаботы КАК РучныеИзменения - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - | ПО (КалендарныеГрафики.Календарь = РучныеИзменения.ГрафикРаботы) - | И (КалендарныеГрафики.Год = РучныеИзменения.Год) - | И (КалендарныеГрафики.ДатаГрафика = РучныеИзменения.ДатаГрафика) - |ГДЕ - | РучныеИзменения.ГрафикРаботы = &ГрафикРаботы - | И РучныеИзменения.ДатаГрафика <> ДАТАВРЕМЯ(1, 1, 1)"); - - Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы); - - Выборка = Запрос.Выполнить().Выбрать(); - - РучныеИзменения = Новый Соответствие; - Пока Выборка.Следующий() Цикл - РучныеИзменения.Вставить(Выборка.ДатаГрафика, Выборка.ДеньВключенВГрафик); - КонецЦикла; - - Возврат РучныеИзменения; - -КонецФункции - -#КонецОбласти - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/ObjectModule.bsl b/SSL/src/Catalogs/Календари/ObjectModule.bsl index c8bf27a57..500a330be 100644 --- a/SSL/src/Catalogs/Календари/ObjectModule.bsl +++ b/SSL/src/Catalogs/Календари/ObjectModule.bsl @@ -54,7 +54,7 @@ // Если дата окончания не указана, она будет подобрана по производственному календарю. ДатаОкончанияЗаполнения = ДатаОкончания; - ДниВключенныеВГрафик = Справочники.Календари.ДниВключенныеВГрафик( + ДниВключенныеВГрафик = РегистрыСведений.КалендарныеГрафики.ДниВключенныеВГрафик( ДатаНачала, СпособЗаполнения, ШаблонЗаполнения, @@ -63,7 +63,7 @@ УчитыватьПраздники, ДатаОтсчета); - Справочники.Календари.ЗаписатьДанныеГрафикаВРегистр( + РегистрыСведений.КалендарныеГрафики.ЗаписатьДанныеГрафикаВРегистр( Ссылка, ДниВключенныеВГрафик, ДатаНачала, ДатаОкончанияЗаполнения); КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index 8fd40ae88..ca76160dd 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -4,71 +4,116 @@

Основные сведения

Отчеты

Расписание

+ +
  • С помощью кнопки Просмотр можно сформировать выбранный отчет. +
  • +
  • Настройки отчета - выводятся настройки отчета, с помощью флажков можно выбрать нужные настройки и указать значения, по которым будет выведен отчет. При необходимости можно изменить настройки выбранного отчета. Для этого выберите нужное значение из списков. +
  • +
  • Если выбран вид рассылки Свой отчет для каждого получателя, то с помощью соответствующей кнопки в настройках каждого отчета можно Указать получателя рассылки из списка Пользователи, для того чтобы для каждого получателя формировался свой отчет с показателями, доступными только для этого получателя. +
  • +
  • В заголовке вкладки ведется количество отчетов, входящих в рассылку.
  • Расписание

    +
  •  Напишите Время начала запуска рассылки. +
  • +
  • В поле Автор выберите пользователя из списка. По умолчанию программа выбирает в качестве автора текущего пользователя, который создает рассылку.
  • Доставка

    +
  • Проверить - проверка публикации путем записи и удаления тестового файла. Тест считается успешным, если ошибок не возникло. +
  • +
  • Отправлять по электронной почте - признак использования электронной почты для отправки отчетов (или уведомлений). +
  • +
  • Укажите получателей - перейдите по ссылке, для того чтобы заполнить список получателей и исключений из получателей рассылки. Можно выбирать элементы или группы получателей. После заполнения ссылка принимает вид списка получателей: указывается первый получатель списка. +
  • +
  • В поле От из выпадающего списка выберите учетную запись для отправки. Поле является обязательным для заполнения. Выпадающий список для выбора содержит только элементы списка учетных записей, ввести учетную запись в поле вручную невозможно. +
  • +
  • Проверить - проверка учетной записи электронной почты путем отправки тестового сообщения. Тест считается успешным, если ошибок не возникло. +
  • +
  • Если используются оба способа доставки (и публикация, и отправка по почте), то можно указать, что по почте нужно Отправлять только уведомление о том, что отчет сформирован. Сами отчеты не будут присоединяться к письму, а будут помещаться в каталог публикации. В этом случае письмо-уведомление будет содержать адрес, по которому находится сформированный отчет. +
  • +
  • После установки флажка Отправлять по электронной почте становятся доступными Тема и текст письма. Могут содержать шаблоны параметров рассылки. По умолчанию шаблон письма уже сформирован автоматически. Для добавления параметров в письмо нажмите Параметр, выберите нужное значение:
  • +
  • +
  • +
    [СпособДоставки] - представление ресурса, на котором был опубликован отчет.
  • +
  • По умолчанию установлен формат письма HTML, можно изменить его на Обычный. В формате HTML доступны стандартные команды форматирования текста (часть из них размещена в виде кнопок, остальные можно найти в меню Еще).
    -
  • +
  • +
  • С помощью соответствующего флажка можно Транслитерировать имена файлов. В этом случае сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл Отчет.mxl будет сохранен с именем Otchet.mxl.
  • Дополнительно

    Выполнение рассылки

    + +
  • Наименование рассылки.
  • +
  • При необходимости напишите Пароль архива.
  • +
  • В поле Адрес ответа укажите E-mail адрес, на который будут высылаться ответы на рассылку. +
  • +
  • Включите флажок Отправлять письма через скрытые копии, для того чтобы получатели не знали, кто еще получает отчеты из данной рассылки. +
  • +
  • Группа - рассылки можно сгруппировать по различным признакам. Для того чтобы поместить рассылку в группу, выберите ее из списка.
  • Выполнение рассылки

    Просмотр событий рассылки

    +
  • Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.
  • См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index 78413de3a..5d310403e 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html @@ -8,20 +8,29 @@

    Подготовленные рассылки отчетов могут выполняться автоматически по расписанию с помощью регламентного задания "Рассылка отчетов" или запускаться вручную.

    В списке выводится:

    Ввод рассылки

    + +
  • Состояние - результат последнего запуска рассылки (принимает значение Выполнена или Не выполнена); +
  • +
  • Архивировать - в поле проставляется флажок, если в рассылке установлен флажок Архивировать в ZIP; +
  • +
  • Кому - указывается справочник, из которого выбирались получатели рассылки; +
  • +
  • Почтовый адрес - если отправлялось по электронной почте, в поле проставляется значение Электронная почта.
  • Ввод рассылки

    Группировка рассылок

    Запуск рассылок

    Просмотр событий рассылки