#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина);
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
Если НЕ ПравоДоступа("Изменение", Метаданные.Справочники.ВидыЦен) Тогда
ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа.
|
|Изменение свойств регламентного задания
|выполняется только пользователями с правом изменения видов цен.'");
КонецЕсли;
Действие = Параметры.Действие;
Если СтрНайти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда
ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'");
КонецЕсли;
Если Действие = "Добавить" Тогда
Расписание = Новый РасписаниеРегламентногоЗадания;
Задание = Метаданные.РегламентныеЗадания.ОбновлениеЦен;
ИмяМетаданных = Задание.Имя;
СинонимМетаданных = Задание.Синоним;
ИмяМетодаМетаданных = Задание.ИмяМетода;
Иначе
Задание = ПолучитьРегламентноеЗадание(Параметры.Идентификатор);
Идентификатор = Строка(Параметры.Идентификатор);
Если ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда
ЗаполнитьЗначенияСвойств(
ЭтотОбъект,
Задание,
"Ключ,
|Предопределенное,
|Использование,
|Наименование,
|ИмяПользователя,
|ИнтервалПовтораПриАварийномЗавершении,
|КоличествоПовторовПриАварийномЗавершении");
Если Задание.Метаданные = Неопределено Тогда
ИмяМетаданных = НСтр("ru = '<нет метаданных>'");
СинонимМетаданных = НСтр("ru = '<нет метаданных>'");
ИмяМетодаМетаданных = НСтр("ru = '<нет метаданных>'");
Иначе
ИмяМетаданных = Задание.Метаданные.Имя;
СинонимМетаданных = Задание.Метаданные.Синоним;
ИмяМетодаМетаданных = Задание.Метаданные.ИмяМетода;
КонецЕсли;
Расписание = Задание.Расписание;
Если Задание.Параметры.Количество() Тогда
ЗаполнитьРеквизитыПоПараметрам(Задание.Параметры);
КонецЕсли;
ИначеЕсли ТипЗнч(Задание) = Тип("СправочникСсылка.ОчередьЗаданий") Тогда
СтрутураЗадания = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Задание, "Ключ,
|Использование,
|ИмяПользователя,
|ИнтервалПовтораПриАварийномЗавершении,
|КоличествоПовторовПриАварийномЗавершении,
|Расписание,
|Параметры");
ЗаполнитьЗначенияСвойств(
ЭтотОбъект,
СтрутураЗадания,
"Ключ,
|Использование,
|ИмяПользователя,
|ИнтервалПовтораПриАварийномЗавершении,
|КоличествоПовторовПриАварийномЗавершении");
ИмяМетаданных = НСтр("ru = '<нет метаданных>'");
СинонимМетаданных = НСтр("ru = '<нет метаданных>'");
ИмяМетодаМетаданных = НСтр("ru = '<нет метаданных>'");
Расписание = СтрутураЗадания.Расписание.Получить();
ПараметрыЗадания = СтрутураЗадания.Параметры.Получить();
Если ПараметрыЗадания.Количество() Тогда
ЗаполнитьРеквизитыПоПараметрам(ПараметрыЗадания);
КонецЕсли;
КонецЕсли;
Если ЭтоПолноправныйПользователь И ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда
СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный.СообщенияИОписанияОшибокРегламентногоЗадания(Задание);
КонецЕсли;
КонецЕсли;
Если Действие <> "Изменить" Тогда
Идентификатор = НСтр("ru = '<будет создан при записи>'");
Использование = Ложь;
КонецЕсли;
Если Действие = "Добавить" Или ПустаяСтрока(Наименование) Тогда
Наименование = АвтоНаименование(ЭтотОбъект);
Иначе
АвтоНаименование(ЭтотОбъект);
КонецЕсли;
ОбновитьРеквизитыАвтонаименования();
Если ЭтоПолноправныйПользователь Тогда
МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для каждого Пользователь Из МассивПользователей Цикл
Элементы.ИмяПользователя.СписокВыбора.Добавить(Пользователь.Имя);
КонецЦикла;
КонецЕсли;
ВариантОбновленияЦенПриИзмененииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Действие = "Добавить" Тогда
ОбновитьЗаголовокФормы();
УстановитьВидимостьЭлементовФормы();
Иначе
ОбновитьЗаголовокФормы();
УстановитьВидимостьЭлементовФормы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьЗавершение", ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы);
ОбновитьАвтонаименование(Модифицированность);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
ИндексАвтонаименования = 0;
НаименованиеИзмененоПользователем = Истина;
ИспользуетсяАвтоНаименование = Ложь;
Для Каждого ЭлементСписка Из Элементы.Наименование.СписокВыбора Цикл
Если ЭлементСписка.Значение = Наименование Тогда
ИспользуетсяАвтоНаименование = Истина;
НаименованиеИзмененоПользователем = Ложь;
ИндексАвтонаименования = Элементы.Наименование.СписокВыбора.Индекс(ЭлементСписка);
КонецЕсли;
КонецЦикла;
ОбновитьЗаголовокФормы();
КонецПроцедуры
&НаКлиенте
Процедура ВариантОбновленияЦенПриИзменении(Элемент)
ВариантОбновленияЦенПриИзмененииНаСервере(ЭтотОбъект);
ОбновитьАвтонаименование();
КонецПроцедуры
&НаКлиенте
Процедура ВидыЦенПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ОбновитьАвтонаименование();
КонецПроцедуры
&НаКлиенте
Процедура ВидыЦенПослеУдаления(Элемент)
ОбновитьАвтонаименование();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Записать(Команда)
ЗаписатьРегламентноеЗадание();
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьИЗакрытьВыполнить()
ЗаписатьИЗакрытьЗавершение();
КонецПроцедуры
&НаКлиенте
Процедура НастроитьРасписаниеВыполнить()
Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
Диалог.Показать(Новый ОписаниеОповещения("ОткрытьРасписаниеЗавершение", ЭтотОбъект));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ЗаписатьИЗакрытьЗавершение(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
ЗаписатьРегламентноеЗадание();
Модифицированность = Ложь;
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьРасписаниеЗавершение(НовоеРасписание, Контекст) Экспорт
Если НовоеРасписание <> Неопределено Тогда
Расписание = НовоеРасписание;
Модифицированность = Истина;
Если РазделениеВключено
И Расписание.ПериодПовтораВТечениеДня > 0
И Расписание.ПериодПовтораВТечениеДня < 3600 Тогда
Расписание.ПериодПовтораВТечениеДня = 3600;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьРегламентноеЗадание()
Если НЕ ЗначениеЗаполнено(ИмяМетаданных) Тогда
Возврат;
КонецЕсли;
ТекущийИдентификатор = ?(Действие = "Изменить", Идентификатор, Неопределено);
ЗаписатьРегламентноеЗаданиеНаСервере();
ОбновитьЗаголовокФормы();
Оповестить("Запись_РегламентныеЗадания", ТекущийИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьРегламентноеЗаданиеНаСервере()
ПараметрыЗадания = Новый Структура();
ПараметрыЗадания.Вставить("Ключ");
ПараметрыЗадания.Вставить("Наименование");
ПараметрыЗадания.Вставить("Использование");
ПараметрыЗадания.Вставить("ИмяПользователя");
ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении");
ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении");
ПараметрыЗадания.Вставить("Параметры", Новый Массив());
ПараметрыЗадания.Вставить("Расписание");
Если Не Действие = "Изменить" Тогда
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеЦен);
КонецЕсли;
ЗаполнитьЗначенияСвойств(
ПараметрыЗадания,
ЭтотОбъект,
"Ключ,
|Наименование,
|Использование,
|ИмяПользователя,
|ИнтервалПовтораПриАварийномЗавершении,
|КоличествоПовторовПриАварийномЗавершении,
|Расписание");
ТаблицаВидовЦен = Новый ТаблицаЗначений();
ТаблицаВидовЦен.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
ТаблицаВидовЦен.Колонки.Добавить("ОбнулятьЦены",Новый ОписаниеТипов("Булево"));
Для Каждого Элемент Из ВидыЦен Цикл
СтрокаТаблицы = ТаблицаВидовЦен.Добавить();
СтрокаТаблицы.ВидЦены = Элемент.Значение;
СтрокаТаблицы.ОбнулятьЦены = Ложь;
КонецЦикла;
ПараметрыОбновления = Новый Структура("ВариантОбновленияЦен", ВариантОбновленияЦен);
ПараметрыЗадания.Параметры.Добавить(ТаблицаВидовЦен);
ПараметрыЗадания.Параметры.Добавить(ПараметрыОбновления);
УстановитьПривилегированныйРежим(Истина);
Если Действие = "Изменить" Тогда
ИзменитьЗадание(Идентификатор, ПараметрыЗадания);
Иначе
УникальныйИдентификаторЗадания = ДобавитьЗадание(ПараметрыЗадания);
Идентификатор = Строка(УникальныйИдентификаторЗадания);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Модифицированность = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗаголовокФормы()
Если НЕ ПустаяСтрока(Наименование) Тогда
Представление = Наименование;
ИначеЕсли НЕ ПустаяСтрока(СинонимМетаданных) Тогда
Представление = СинонимМетаданных;
Иначе
Представление = ИмяМетаданных;
КонецЕсли;
Если Действие = "Изменить" Тогда
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Регламентное задание)'"), Представление);
Иначе
Заголовок = НСтр("ru = 'Регламентное задание (создание)'");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВидимостьЭлементовФормы()
Элементы.ГруппаНастройкиВидовЦен.Видимость = Истина;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ВариантОбновленияЦенПриИзмененииНаСервере(Форма)
Форма.Элементы.ВидыЦенДляАвтоматическогоОбновления.Доступность = (Форма.ВариантОбновленияЦен<>0);
Если Форма.ВариантОбновленияЦен=0 и Форма.ВидыЦен.Количество() Тогда
Форма.ВидыЦен.Очистить();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРеквизитыПоПараметрам(Параметры)
ВидыЦен.Очистить();
Если (Параметры.Количество() > 0) Тогда
Для Каждого Строка Из Параметры[0] Цикл
ВидыЦен.Добавить(Строка.ВидЦены);
КонецЦикла;
ВариантОбновленияЦен = Параметры[1].ВариантОбновленияЦен;
КонецЕсли;
КонецПроцедуры
#Область РегламентныеЗадания
&НаСервере
Функция ПолучитьРегламентноеЗадание(Идентификатор)
УстановитьПривилегированныйРежим(Истина);
ЗаданиеРезультат = РегламентныеЗаданияСервер.Задание(Идентификатор);
УстановитьПривилегированныйРежим(Ложь);
Если ТипЗнч(ЗаданиеРезультат) = Тип("СтрокаТаблицыЗначений") Тогда
Задание = ЗаданиеРезультат.УникальныйИдентификатор;
Иначе
Задание = ЗаданиеРезультат;
КонецЕсли;
Возврат Задание;
КонецФункции
&НаСервере
Функция ДобавитьЗадание(ПараметрыЗадания)
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
УникальныйИдентификаторЗадания = РегламентныеЗаданияСервер.УникальныйИдентификатор(Задание);
УстановитьПривилегированныйРежим(Ложь);
Действие = "Изменить";
Возврат УникальныйИдентификаторЗадания;
КонецФункции
&НаСервере
Процедура ИзменитьЗадание(Идентификатор, ПараметрыЗадания) Экспорт
УстановитьПривилегированныйРежим(Истина);
РегламентныеЗаданияСервер.ИзменитьЗадание(Идентификатор, ПараметрыЗадания);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Функция АвтоНаименование(Форма)
Форма.Элементы.Наименование.СписокВыбора.Очистить();
СтрокаНаименования = "";
СтрокаНаименования = НСтр("ru = 'Обновление цен ('");
Если Форма.ВариантОбновленияЦен = 0 Тогда
СтрокаНаименования = СтрокаНаименования + НСтр("ru = 'Все)'");
ИначеЕсли Форма.ВариантОбновленияЦен = 1 Тогда
СтрокаНаименования = СтрокаНаименования + НСтр("ru = 'Только выбранные)'");
ИначеЕсли Форма.ВариантОбновленияЦен = 2 Тогда
СтрокаНаименования = СтрокаНаименования + НСтр("ru = 'Выбранные и зависимые)'");
ИначеЕсли Форма.ВариантОбновленияЦен = 3 Тогда
СтрокаНаименования = СтрокаНаименования + НСтр("ru = 'Все кроме выбранных)'");
КонецЕсли;
ЭтоПервыйЭлементСписка = Истина;
Для Каждого ВидЦены Из Форма.ВидыЦен Цикл
СтрокаНаименования = СтрокаНаименования + ?(ЭтоПервыйЭлементСписка," ",", ") + ВидЦены;
ЭтоПервыйЭлементСписка = Ложь;
КонецЦикла;
Форма.Элементы.Наименование.СписокВыбора.Добавить(СтрокаНаименования);
Если Форма.ИндексАвтонаименования <= Форма.Элементы.Наименование.СписокВыбора.Количество() - 1 Тогда
Возврат Форма.Элементы.Наименование.СписокВыбора.Получить(Форма.ИндексАвтонаименования).Значение;
Иначе
Возврат СтрокаНаименования;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОбновитьАвтонаименование(Обновить = Истина)
НаименованиеСтр = АвтоНаименование(ЭтотОбъект);
Если Не ЗначениеЗаполнено(Наименование)
ИЛИ (Обновить И ИспользуетсяАвтоНаименование И Не НаименованиеИзмененоПользователем) Тогда
Наименование = НаименованиеСтр;
ИспользуетсяАвтоНаименование = Истина;
ОбновитьЗаголовокФормы();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьРеквизитыАвтонаименования()
ИндексАвтонаименования = 0;
НаименованиеИзмененоПользователем = Истина;
ИспользуетсяАвтоНаименование = Ложь;
Для Каждого ЭлементСписка Из Элементы.Наименование.СписокВыбора Цикл
Если ЭлементСписка.Значение = ЭтотОбъект.Наименование Тогда
ИспользуетсяАвтоНаименование = Истина;
НаименованиеИзмененоПользователем = Ложь;
ИндексАвтонаименования = Элементы.Наименование.СписокВыбора.Индекс(ЭлементСписка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти