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