#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"ПрисоединитьДополнительныеТаблицы
|ЭтотСписок КАК Т
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК Т2
| ПО Т2.Подразделение = Т.Подразделение
|;
|РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Т2.ВышестоящееПодразделение)
| И ЗначениеРазрешено(Т.Владелец)";
КонецПроцедуры
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
БлокируемыеРеквизиты = Новый Массив;
БлокируемыеРеквизиты.Добавить("Владелец;Владелец");
БлокируемыеРеквизиты.Добавить("Подразделение");
БлокируемыеРеквизиты.Добавить("Должность");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОрганизационнаяСтруктура") Тогда
МодульОрганизационнаяСтруктура = ОбщегоНазначения.ОбщийМодуль("ОрганизационнаяСтруктура");
МодульОрганизационнаяСтруктура.ШтатноеРасписаниеПриПолученииБлокируемыхРеквизитов(БлокируемыеРеквизиты);
КонецЕсли;
Возврат БлокируемыеРеквизиты;
КонецФункции
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.КадровыйУчет.ДолжностнаяИнструкция") Тогда
МодульПечатьДолжностнойИнструкции = ОбщегоНазначения.ОбщийМодуль("Обработки.ПечатьДолжностнойИнструкции");
МодульПечатьДолжностнойИнструкции.ДобавитьКомандыПечати(КомандыПечати);
КонецЕсли;
Если ПравоДоступа("Чтение", Метаданные.РегистрыСведений.КадроваяИсторияСотрудников) Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "ШтатноеРасписаниеНаПодпись";
КомандаПечати.Представление = НСтр("ru = 'Штатное расписание на подпись'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписание";
КомандаПечати.Порядок = 20;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "СоблюдениеШтатногоРасписания";
КомандаПечати.Представление = НСтр("ru = 'Соблюдение штатного расписания'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетСостояниеШтатногоРасписания";
КомандаПечати.Порядок = 30;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "АнализШтатногоРасписания";
КомандаПечати.Представление = НСтр("ru = 'Анализ штатного расписания'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетСостояниеШтатногоРасписания";
КомандаПечати.Порядок = 40;
ФОИспользоватьВилкуСтавокВШтатномРасписании = ПолучитьФункциональнуюОпцию("ИспользоватьВилкуСтавокВШтатномРасписании");
Если ПравоДоступа("Чтение", Метаданные.РегистрыСведений.ИсторияНачисленийПоШтатномуРасписанию) Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "Т3";
КомандаПечати.Представление = НСтр("ru = 'Штатное расписание (Т-3)'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписаниеНачисления";
КомандаПечати.Порядок = 10;
Если ФОИспользоватьВилкуСтавокВШтатномРасписании Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "НачисленияПозицийШтатногоРасписанияИспользуетсяВилкаСтавок";
КомандаПечати.Представление = НСтр("ru = 'Начисления позиций штатного расписания'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписаниеНачисления";
КомандаПечати.Порядок = 50;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "ШтатноеРасписаниеКроссТаблицаИспользуетсяВилкаСтавок";
КомандаПечати.Представление = НСтр("ru = 'Оклады, надбавки и ФОТ по штатному расписанию'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписаниеНачисления";
КомандаПечати.Порядок = 60;
Иначе
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "НачисленияПозицийШтатногоРасписания";
КомандаПечати.Представление = НСтр("ru = 'Начисления позиций штатного расписания'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписаниеНачисления";
КомандаПечати.Порядок = 50;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = "ШтатноеРасписаниеКроссТаблица";
КомандаПечати.Представление = НСтр("ru = 'Оклады, надбавки и ФОТ по штатному расписанию'");
КомандаПечати.СписокФорм = "ФормаСписка";
КомандаПечати.Обработчик = "УправлениеШтатнымРасписаниемКлиент.ОткрытьОтчетШтатноеРасписаниеНачисления";
КомандаПечати.Порядок = 60;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
УправлениеШтатнымРасписаниемВызовСервера.ОбработкаПолученияДанныхВыбораСправочникаШтатноеРасписание(ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Функция ИмяПланаВидовПодключаемыхХарактеристикЗарплатаКадры() Экспорт
Возврат "ШтатноеРасписаниеПодключаемыеХарактеристики";
КонецФункции
Функция ДанныеПозицииШтатногоРасписания(ПозицияШтатногоРасписания) Экспорт
ДанныеПозиции = Новый Структура(
"Должность,
|Организация,
|Подразделение,
|ФОТ");
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ШтатноеРасписание.Ссылка КАК Ссылка,
| ШтатноеРасписание.Должность КАК Должность,
| ШтатноеРасписание.Владелец КАК Организация,
| ШтатноеРасписание.Подразделение КАК Подразделение,
| ШтатноеРасписание.ФОТ КАК ФОТ
|ИЗ
| Справочник.ШтатноеРасписание КАК ШтатноеРасписание
|ГДЕ
| ШтатноеРасписание.Ссылка = &Позиция");
Запрос.УстановитьПараметр("Позиция", ПозицияШтатногоРасписания);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ДанныеПозиции, Выборка);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОрганизационнаяСтруктура") Тогда
МодульОрганизационнаяСтруктура = ОбщегоНазначения.ОбщийМодуль("ОрганизационнаяСтруктура");
МодульОрганизационнаяСтруктура.ДополнитьДанныеПозицииШтатногоРасписания(ДанныеПозиции, ПозицияШтатногоРасписания);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ХарактеристикиПерсонала") Тогда
МодульХарактеристикиПерсонала = ОбщегоНазначения.ОбщийМодуль("ХарактеристикиПерсонала");
МодульХарактеристикиПерсонала.ДополнитьДанныеПозицииШтатногоРасписания(ДанныеПозиции, ПозицияШтатногоРасписания);
КонецЕсли;
Возврат ДанныеПозиции;
КонецФункции
Процедура РассчитатьФОТПозиции(ПозицияОбъект) Экспорт
КоллекцияПозиций = УправлениеШтатнымРасписанием.ПустаяТаблицаКоллекцииПозицийДляРасчетаФОТ();
КоллекцияНачислений = УправлениеШтатнымРасписанием.ПустаяТаблицаКоллекцииНачисленийДляРасчетаФОТ();
КоллекцияПоказателей = УправлениеШтатнымРасписанием.ПустаяТаблицаКоллекцииПоказателейДляРасчетаФОТ();
ЗаполнитьЗначенияСвойств(КоллекцияПозиций.Добавить(), ПозицияОбъект);
Для каждого СтрокаНачислений Из ПозицияОбъект.Начисления Цикл
ЗаполнитьЗначенияСвойств(КоллекцияНачислений.Добавить(), СтрокаНачислений);
КонецЦикла;
Для каждого СтрокаПоказателей Из ПозицияОбъект.Показатели Цикл
ЗаполнитьЗначенияСвойств(КоллекцияПоказателей.Добавить(), СтрокаПоказателей);
КонецЦикла;
ОписаниеПозиций = Новый Структура;
ОписаниеПозиций.Вставить("Организация", ПозицияОбъект.Владелец);
ОписаниеПозиций.Вставить("ДатаВступленияВСилу", ТекущаяДатаСеанса());
ОписаниеПозиций.Вставить("Позиции", КоллекцияПозиций);
ОписаниеПозиций.Вставить("Начисления", КоллекцияНачислений);
ОписаниеПозиций.Вставить("Показатели", КоллекцияПоказателей);
УправлениеШтатнымРасписанием.РассчитатьФОТНесколькихПозиций(ОписаниеПозиций);
Для каждого СтруктураПозиции Из ОписаниеПозиций.Позиции Цикл
ЗаполнитьЗначенияСвойств(ПозицияОбъект, СтруктураПозиции, "ОкладТариф,ОкладТарифМин,ОкладТарифМакс,ФОТ,ФОТМин,ФОТМакс,РайонныйКоэффициентРазмер,РайонныйКоэффициентРазмерМин,РайонныйКоэффициентРазмерМакс");
СтрокиНачислений = ОписаниеПозиций.Начисления.НайтиСтроки(Новый Структура("ИдентификаторСтрокиПозиции", СтруктураПозиции.ИдентификаторСтрокиПозиции));
Для каждого СтрокаНачислений Из СтрокиНачислений Цикл
СтрокиПозиции = ПозицияОбъект.Начисления.НайтиСтроки(Новый Структура("Начисление", СтрокаНачислений.Начисление));
Для каждого СтрокаПозиции Из СтрокиПозиции Цикл
ЗаполнитьЗначенияСвойств(СтрокаПозиции, СтрокаНачислений, "Размер,РазмерМин,РазмерМакс");
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОбновитьСтруктуруШтатногоРасписания(Организация = Неопределено, Подразделение = Неопределено) Экспорт
УстранитьКоллизииСтруктурыШтатногоРасписания(Организация, Подразделение);
ОбновитьСтруктуруШтатногоРасписанияПоДаннымПодразделений(Организация, Подразделение);
ОбновитьСтруктуруШтатногоРасписанияПоДаннымПозиций(Организация, Подразделение);
КонецПроцедуры
Процедура ОбновитьСтруктуруШтатногоРасписанияПослеОбменаДанными(Организация = Неопределено, Подразделение = Неопределено) Экспорт
ОбновитьСтруктуруШтатногоРасписания(Организация, Подразделение);
КонецПроцедуры
Процедура ОбновитьСтруктуруШтатногоРасписанияПоДаннымПодразделений(Организация = Неопределено, Подразделение = Неопределено) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СписокПозицийШтатногоРасписания = Новый Массив;
СчетчикИтераций = 0;
Пока СчетчикИтераций < 10 Цикл
СоздатьВТСтруктураШтатногоРасписания(Запрос.МенеджерВременныхТаблиц, Организация, Подразделение);
ИменаТаблицКУничтожению = Новый Массив;
ИменаТаблицКУничтожению.Добавить("ВТПодразделенияШтатногоРасписания");
ИменаТаблицКУничтожению.Добавить("ВТПодразделенияШтатногоРасписанияКСозданию");
ЗарплатаКадры.УничтожитьВТ(Запрос.МенеджерВременныхТаблиц, ИменаТаблицКУничтожению, Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ШтатноеРасписание.Подразделение КАК Подразделение,
| ШтатноеРасписание.Подразделение.Владелец КАК Владелец,
| ШтатноеРасписание.ВышестоящееПодразделение КАК ВышестоящееПодразделение
|ПОМЕСТИТЬ ВТПодразделенияШтатногоРасписания
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
|ГДЕ
| ШтатноеРасписание.Подразделение <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
| И ШтатноеРасписание.Подразделение.Владелец <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| И ШтатноеРасписание.Подразделение.Владелец = ШтатноеРасписание.Владелец
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПодразделенияШтатногоРасписания.Подразделение КАК Подразделение,
| ПодразделенияШтатногоРасписания.Владелец КАК Владелец,
| ПодразделенияШтатногоРасписания.ВышестоящееПодразделение КАК ВышестоящееПодразделение
|ПОМЕСТИТЬ ВТПодразделенияШтатногоРасписанияКСозданию
|ИЗ
| ВТПодразделенияШтатногоРасписания КАК ПодразделенияШтатногоРасписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ПО ПодразделенияШтатногоРасписания.Подразделение = ШтатноеРасписание.Подразделение
| И ПодразделенияШтатногоРасписания.Владелец = ШтатноеРасписание.Владелец
| И (ШтатноеРасписание.ГруппаПозицийПодразделения)
|ГДЕ
| ШтатноеРасписание.Ссылка ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПодразделенияШтатногоРасписания.ВышестоящееПодразделение,
| ПодразделенияШтатногоРасписания.Владелец,
| ВЫРАЗИТЬ(ПодразделенияШтатногоРасписания.ВышестоящееПодразделение КАК Справочник.ПодразделенияОрганизаций).Родитель
|ИЗ
| ВТПодразделенияШтатногоРасписания КАК ПодразделенияШтатногоРасписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ПО ПодразделенияШтатногоРасписания.ВышестоящееПодразделение = ШтатноеРасписание.Подразделение
| И ПодразделенияШтатногоРасписания.Владелец = ШтатноеРасписание.Владелец
| И (ШтатноеРасписание.ГруппаПозицийПодразделения)
|ГДЕ
| ШтатноеРасписание.Ссылка ЕСТЬ NULL
| И ПодразделенияШтатногоРасписания.ВышестоящееПодразделение <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПодразделенияШтатногоРасписанияКСозданию.Подразделение КАК Подразделение,
| ПРЕДСТАВЛЕНИЕ(ПодразделенияШтатногоРасписанияКСозданию.Подразделение) КАК Наименование,
| ЕСТЬNULL(ШтатноеРасписание.Ссылка, ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка)) КАК Родитель,
| ПодразделенияШтатногоРасписанияКСозданию.Владелец КАК Владелец
|ИЗ
| ВТПодразделенияШтатногоРасписанияКСозданию КАК ПодразделенияШтатногоРасписанияКСозданию
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ПО ПодразделенияШтатногоРасписанияКСозданию.ВышестоящееПодразделение = ШтатноеРасписание.Подразделение
| И ПодразделенияШтатногоРасписанияКСозданию.Владелец = ШтатноеРасписание.Владелец
| И (ШтатноеРасписание.ГруппаПозицийПодразделения)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписаниеТекущийУровень
| ПО ПодразделенияШтатногоРасписанияКСозданию.Подразделение = ШтатноеРасписаниеТекущийУровень.Подразделение
| И ПодразделенияШтатногоРасписанияКСозданию.Владелец = ШтатноеРасписаниеТекущийУровень.Владелец
| И (ШтатноеРасписаниеТекущийУровень.ГруппаПозицийПодразделения)
|ГДЕ
| ШтатноеРасписаниеТекущийУровень.Ссылка ЕСТЬ NULL";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Прервать;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяГруппа = Справочники.ШтатноеРасписание.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НоваяГруппа, Выборка);
НоваяГруппа.ГруппаПозицийПодразделения = Истина;
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(НоваяГруппа);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(НоваяГруппа);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиПубликации(НоваяГруппа);
НоваяГруппа.Записать();
СписокПозицийШтатногоРасписания.Добавить(НоваяГруппа.Ссылка);
КонецЦикла;
КонецЕсли;
СчетчикИтераций = СчетчикИтераций + 1;
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ
| ШтатноеРасписание.Ссылка КАК Ссылка,
| ЕСТЬNULL(МАКСИМУМ(ГруппыШтатногоРасписания.Ссылка), ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка)) КАК Родитель
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ГруппыШтатногоРасписания
| ПО ШтатноеРасписание.ВышестоящееПодразделение = ГруппыШтатногоРасписания.Подразделение
| И (ГруппыШтатногоРасписания.ГруппаПозицийПодразделения)
| И ШтатноеРасписание.Ссылка <> ГруппыШтатногоРасписания.Ссылка
| И ШтатноеРасписание.Владелец = ГруппыШтатногоРасписания.Владелец
| И (ГруппыШтатногоРасписания.Подразделение <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка))
|ГДЕ
| ШтатноеРасписание.ГруппаПозицийПодразделения
| И НЕ ШтатноеРасписание.Родитель В
| (ВЫБРАТЬ
| Т.Ссылка
| ИЗ
| ВТСтруктураШтатногоРасписания КАК Т
| ГДЕ
| ШтатноеРасписание.ВышестоящееПодразделение = Т.Подразделение
| И ШтатноеРасписание.Ссылка <> Т.Ссылка
| И ШтатноеРасписание.Владелец = Т.Владелец
| И Т.ГруппаПозицийПодразделения)
|
|СГРУППИРОВАТЬ ПО
| ШтатноеРасписание.Ссылка,
| ШтатноеРасписание.Родитель
|
|ИМЕЮЩИЕ
| ШтатноеРасписание.Родитель <> ЕСТЬNULL(МАКСИМУМ(ГруппыШтатногоРасписания.Ссылка), ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка))";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка= РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбновляемыйОбъект = Выборка.Ссылка.ПолучитьОбъект();
ОбновляемыйОбъект.Родитель = Выборка.Родитель;
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиПубликации(ОбновляемыйОбъект);
ОбновляемыйОбъект.Записать();
СписокПозицийШтатногоРасписания.Добавить(Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИсториюИзмененияШтатногоРасписания") Тогда
РегистрыСведений.ИсторияИспользованияШтатногоРасписания.ОбновитьСведенияПодразделенийПоСпискуПозиций(СписокПозицийШтатногоРасписания);
КонецЕсли;
УдалитьПустыеГруппыПозицийШтатногоРасписания();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ОбновитьСтруктуруШтатногоРасписанияПоДаннымПозиций(Организация = Неопределено, Подразделение = Неопределено) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СоздатьВТСтруктураШтатногоРасписания(Запрос.МенеджерВременныхТаблиц, Организация, Подразделение);
Запрос.Текст =
"ВЫБРАТЬ
| ШтатноеРасписание.Ссылка,
| ГруппыШтатногоРасписания.Ссылка КАК Родитель
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ГруппыШтатногоРасписания
| ПО ШтатноеРасписание.Подразделение = ГруппыШтатногоРасписания.Подразделение
| И ШтатноеРасписание.Владелец = ГруппыШтатногоРасписания.Владелец
| И (ГруппыШтатногоРасписания.ГруппаПозицийПодразделения)
|ГДЕ
| ШтатноеРасписание.Родитель <> ГруппыШтатногоРасписания.Ссылка
| И НЕ ШтатноеРасписание.ГруппаПозицийПодразделения";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка= РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбновляемыйОбъект = Выборка.Ссылка.ПолучитьОбъект();
ОбновляемыйОбъект.Родитель = Выборка.Родитель;
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиПубликации(ОбновляемыйОбъект);
ОбновляемыйОбъект.Записать();
КонецЦикла;
КонецЕсли;
СчетчикИтераций = 0;
Пока СчетчикИтераций < 10 Цикл
СоздатьВТСтруктураШтатногоРасписания(Запрос.МенеджерВременныхТаблиц, Организация, Подразделение);
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ШтатноеРасписаниеГруппы.Подразделение КАК Справочник.ПодразделенияОрганизаций) КАК Подразделение,
| ШтатноеРасписаниеГруппы.Владелец КАК Владелец,
| МАКСИМУМ(ШтатноеРасписание.Утверждена) КАК Утверждена,
| МИНИМУМ(ШтатноеРасписание.Закрыта) КАК Закрыта
|ПОМЕСТИТЬ ВТУтвержденностьЗакрытостьПодразделенийПредварительно
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписаниеГруппы
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ПО ШтатноеРасписаниеГруппы.Владелец = ШтатноеРасписание.Владелец
| И ШтатноеРасписаниеГруппы.Подразделение = ШтатноеРасписание.Подразделение
| И (НЕ ШтатноеРасписание.ГруппаПозицийПодразделения)
|ГДЕ
| ШтатноеРасписаниеГруппы.ГруппаПозицийПодразделения
|
|СГРУППИРОВАТЬ ПО
| ШтатноеРасписаниеГруппы.Подразделение,
| ШтатноеРасписаниеГруппы.Владелец
|;
|
|
|ВЫБРАТЬ
| ШтатноеРасписание.Подразделение КАК Подразделение,
| ШтатноеРасписание.Владелец КАК Владелец,
| МАКСИМУМ(ШтатноеРасписаниеПодчиненное.Утверждена) КАК Утверждена,
| МИНИМУМ(ШтатноеРасписаниеПодчиненное.Закрыта) КАК Закрыта
|ПОМЕСТИТЬ ВТУтвержденностьЗакрытостьПодразделений
|ИЗ
| ВТУтвержденностьЗакрытостьПодразделенийПредварительно КАК ШтатноеРасписание
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК ПодчиненностьПодразделенийОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУтвержденностьЗакрытостьПодразделенийПредварительно КАК ШтатноеРасписаниеПодчиненное
| ПО ПодчиненностьПодразделенийОрганизаций.Подразделение = ШтатноеРасписаниеПодчиненное.Подразделение
| И ПодчиненностьПодразделенийОрганизаций.Организация = ШтатноеРасписаниеПодчиненное.Владелец
| ПО ШтатноеРасписание.Подразделение = ПодчиненностьПодразделенийОрганизаций.ВышестоящееПодразделение
| И ШтатноеРасписание.Владелец = ПодчиненностьПодразделенийОрганизаций.Организация
|
|СГРУППИРОВАТЬ ПО
| ШтатноеРасписание.Подразделение,
| ШтатноеРасписание.Владелец
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ШтатноеРасписание.Ссылка КАК ГруппаШтатногоРасписания,
| ШтатноеРасписание.Родитель КАК Родитель,
| ШтатноеРасписание.Владелец КАК Владелец,
| УтвержденностьЗакрытостьПодразделений.Утверждена КАК Утверждена,
| УтвержденностьЗакрытостьПодразделений.Закрыта КАК Закрыта,
| УтвержденностьЗакрытостьПодразделений.Подразделение.Наименование КАК Наименование
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУтвержденностьЗакрытостьПодразделений КАК УтвержденностьЗакрытостьПодразделений
| ПО ШтатноеРасписание.Подразделение = УтвержденностьЗакрытостьПодразделений.Подразделение
| И ШтатноеРасписание.Владелец = УтвержденностьЗакрытостьПодразделений.Владелец
|ГДЕ
| ШтатноеРасписание.ГруппаПозицийПодразделения
| И НЕ УтвержденностьЗакрытостьПодразделений.Утверждена ЕСТЬ NULL
| И (ШтатноеРасписание.Наименование <> ЕСТЬNULL(УтвержденностьЗакрытостьПодразделений.Подразделение.Наименование, НЕОПРЕДЕЛЕНО)
| ИЛИ ШтатноеРасписание.Утверждена <> ЕСТЬNULL(УтвержденностьЗакрытостьПодразделений.Утверждена, НЕОПРЕДЕЛЕНО)
| ИЛИ ШтатноеРасписание.Закрыта <> ЕСТЬNULL(УтвержденностьЗакрытостьПодразделений.Закрыта, НЕОПРЕДЕЛЕНО))";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Прервать;
КонецЕсли;
Выборка= РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбновляемыйОбъект = Выборка.ГруппаШтатногоРасписания.ПолучитьОбъект();
ОбновляемыйОбъект.Наименование = Выборка.Наименование;
ОбновляемыйОбъект.Утверждена = Выборка.Утверждена;
ОбновляемыйОбъект.Закрыта = Выборка.Закрыта;
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(ОбновляемыйОбъект);
ОбновляемыйОбъект.Записать();
КонецЦикла;
ЗарплатаКадры.УничтожитьВТ(Запрос.МенеджерВременныхТаблиц, "ВТУтвержденностьЗакрытостьПодразделенийПредварительно");
ЗарплатаКадры.УничтожитьВТ(Запрос.МенеджерВременныхТаблиц, "ВТУтвержденностьЗакрытостьПодразделений");
СчетчикИтераций = СчетчикИтераций + 1;
КонецЦикла;
УдалитьПустыеГруппыПозицийШтатногоРасписания();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
Настройка = Настройки.Добавить();
Настройка.ПриОбработкеПослеИзменения = Истина;
Настройка.ПриОбработкеПередИзменением = Истина;
Настройка.ПослеОбработки = Истина;
КонецПроцедуры
Процедура ПриОбработкеПравилаРегистрацииПередИзменениемОбъекта(Объект, Отказ, Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.СинхронизацияДанных") Тогда
МодульСинхронизацияДанныхЗарплатаКадрыСервер
= ОбщегоНазначения.ОбщийМодуль("СинхронизацияДанныхЗарплатаКадрыСервер");
МодульСинхронизацияДанныхЗарплатаКадрыСервер.ОграничитьПоОрганизацииВладельцу(Объект, Отказ,
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Владелец"), Параметры);
МодульСинхронизацияДанныхЗарплатаКадрыСервер.ОграничитьПоПодразделениюПозицииВСтруктуреПредприятия(Объект,
Отказ, Параметры);
КонецЕсли;
КонецПроцедуры
Процедура ПриОбработкеПравилаРегистрацииПослеИзмененияОбъекта(Объект, Отказ, Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.СинхронизацияДанных") Тогда
МодульСинхронизацияДанныхЗарплатаКадрыСервер
= ОбщегоНазначения.ОбщийМодуль("СинхронизацияДанныхЗарплатаКадрыСервер");
МодульСинхронизацияДанныхЗарплатаКадрыСервер.ОграничитьПоОрганизацииВладельцу(Объект, Отказ, Объект.Владелец,
Параметры);
МодульСинхронизацияДанныхЗарплатаКадрыСервер.ОграничитьПоПодразделениюПозицииВСтруктуреПредприятия(Объект,
Отказ, Параметры);
КонецЕсли;
КонецПроцедуры
Процедура ПослеОбработкиПравилаРегистрации(Объект, Отказ, Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.СинхронизацияДанных") Тогда
МодульСинхронизацияДанныхБЗКПравилаОбъектыСПрисоединеннымиФайлами =
ОбщегоНазначения.ОбщийМодуль("СинхронизацияДанныхБЗКПравилаОбъектыСПрисоединеннымиФайлами");
МодульСинхронизацияДанныхБЗКПравилаОбъектыСПрисоединеннымиФайлами.ПослеОбработкиПравилаРегистрации(Объект,
Отказ, Параметры);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура СоздатьВТСтруктураШтатногоРасписания(МенеджерВременныхТаблиц, Организация, Подразделение)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЗарплатаКадры.УничтожитьВТ(Запрос.МенеджерВременныхТаблиц, "ВТСтруктураШтатногоРасписания", Истина);
Запрос.Текст =
"ВЫБРАТЬ
| ШтатноеРасписание.Ссылка КАК Ссылка,
| ШтатноеРасписание.Владелец КАК Владелец,
| ШтатноеРасписание.Родитель КАК Родитель,
| ШтатноеРасписание.Подразделение КАК Подразделение,
| ШтатноеРасписание.Подразделение.Родитель КАК ВышестоящееПодразделение,
| ШтатноеРасписание.ГруппаПозицийПодразделения КАК ГруппаПозицийПодразделения,
| ШтатноеРасписание.Утверждена КАК Утверждена,
| ШтатноеРасписание.ДатаУтверждения КАК ДатаУтверждения,
| ШтатноеРасписание.Закрыта КАК Закрыта,
| ШтатноеРасписание.ДатаЗакрытия КАК ДатаЗакрытия,
| ШтатноеРасписание.Наименование КАК Наименование
|ПОМЕСТИТЬ ВТСтруктураШтатногоРасписания
|ИЗ
| Справочник.ШтатноеРасписание КАК ШтатноеРасписание
|ГДЕ
| &УсловиеОтбора
|
|ИНДЕКСИРОВАТЬ ПО
| Подразделение,
| Владелец";
УсловияОтбора = Новый Массив;
Если ЗначениеЗаполнено(Организация) Тогда
УсловияОтбора.Добавить("ШтатноеРасписание.Владелец В (&Организация)");
Запрос.УстановитьПараметр("Организация", Организация);
КонецЕсли;
Если ЗначениеЗаполнено(Подразделение) Тогда
ЗапросПоРодителямПодразделений = Новый Запрос;
ЗапросПоРодителямПодразделений.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПодчиненностьПодразделенийОрганизаций.ВышестоящееПодразделение КАК ВышестоящееПодразделение
|ПОМЕСТИТЬ ВТВышестоящиеПодразделение
|ИЗ
| РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК ПодчиненностьПодразделенийОрганизаций
|ГДЕ
| ПодчиненностьПодразделенийОрганизаций.Подразделение В(&Подразделение)
|;
|
|
|ВЫБРАТЬ
| ВышестоящиеПодразделение.ВышестоящееПодразделение КАК ВышестоящееПодразделение
|ИЗ
| ВТВышестоящиеПодразделение КАК ВышестоящиеПодразделение
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПодчиненностьПодразделенийОрганизаций.Подразделение
|ИЗ
| РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК ПодчиненностьПодразделенийОрганизаций
|ГДЕ
| ПодчиненностьПодразделенийОрганизаций.ВышестоящееПодразделение В
| (ВЫБРАТЬ
| ВТВышестоящиеПодразделение.ВышестоящееПодразделение
| ИЗ
| ВТВышестоящиеПодразделение)";
ЗапросПоРодителямПодразделений.УстановитьПараметр("Подразделение", Подразделение);
УсловияОтбора.Добавить("ШтатноеРасписание.Подразделение В (&Подразделение)");
Запрос.УстановитьПараметр("Подразделение",
ЗапросПоРодителямПодразделений.Выполнить().Выгрузить().ВыгрузитьКолонку("ВышестоящееПодразделение"));
КонецЕсли;
Если УсловияОтбора.Количество() > 0 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", СтрСоединить(УсловияОтбора, Символы.ПС + Символы.Таб + "И "));
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", "(ИСТИНА)");
КонецЕсли;
Запрос.Выполнить();
КонецПроцедуры
Процедура УстранитьКоллизииСтруктурыШтатногоРасписания(Организация, Подразделение)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СоздатьВТСтруктураШтатногоРасписания(Запрос.МенеджерВременныхТаблиц, Организация, Подразделение);
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ШтатноеРасписание.Ссылка) КАК КоличествоСсылок,
| ШтатноеРасписание.Подразделение КАК Подразделение,
| ШтатноеРасписание.Владелец КАК Владелец
|ПОМЕСТИТЬ ВТКоличествоГруппПодразделений
|ИЗ
| ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
|ГДЕ
| ШтатноеРасписание.ГруппаПозицийПодразделения
| И ШтатноеРасписание.Подразделение <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| ШтатноеРасписание.Подразделение,
| ШтатноеРасписание.Владелец
|;
|
|
|ВЫБРАТЬ
| КоличествоГруппПодразделений.Подразделение КАК Подразделение,
| КоличествоГруппПодразделений.Владелец КАК Владелец
|ПОМЕСТИТЬ ВТГруппыСПовторяющимисяПодразделениями
|ИЗ
| ВТКоличествоГруппПодразделений КАК КоличествоГруппПодразделений
|ГДЕ
| КоличествоГруппПодразделений.КоличествоСсылок > 1
|;
|
|
|ВЫБРАТЬ
| ГруппыСПовторяющимисяПодразделениями.Подразделение КАК Подразделение,
| ГруппыСПовторяющимисяПодразделениями.Владелец КАК Владелец,
| ШтатноеРасписаниеРодители.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ШтатноеРасписаниеПодчиненные.Ссылка) КАК КоличествоПодчиненных
|ПОМЕСТИТЬ ВТКоличествоПодчиненныхЭлементов
|ИЗ
| ВТГруппыСПовторяющимисяПодразделениями КАК ГруппыСПовторяющимисяПодразделениями
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписаниеРодители
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписаниеПодчиненные
| ПО ШтатноеРасписаниеРодители.Ссылка = ШтатноеРасписаниеПодчиненные.Родитель
| И (ШтатноеРасписаниеРодители.Подразделение <> ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка))
| И ШтатноеРасписаниеРодители.Владелец = ШтатноеРасписаниеПодчиненные.Владелец
| ПО ГруппыСПовторяющимисяПодразделениями.Подразделение = ШтатноеРасписаниеРодители.Подразделение
| И ГруппыСПовторяющимисяПодразделениями.Владелец = ШтатноеРасписаниеРодители.Владелец
| И (ШтатноеРасписаниеРодители.ГруппаПозицийПодразделения)
|
|СГРУППИРОВАТЬ ПО
| ГруппыСПовторяющимисяПодразделениями.Подразделение,
| ГруппыСПовторяющимисяПодразделениями.Владелец,
| ШтатноеРасписаниеРодители.Ссылка
|;
|
|
|ВЫБРАТЬ
| КоличествоПодчиненныхЭлементов.Подразделение КАК Подразделение,
| КоличествоПодчиненныхЭлементов.Владелец КАК Владелец,
| МАКСИМУМ(КоличествоПодчиненныхЭлементов.КоличествоПодчиненных) КАК КоличествоПодчиненных
|ПОМЕСТИТЬ ВТОставляемыеГруппыПредварительно
|ИЗ
| ВТКоличествоПодчиненныхЭлементов КАК КоличествоПодчиненныхЭлементов
|
|СГРУППИРОВАТЬ ПО
| КоличествоПодчиненныхЭлементов.Подразделение,
| КоличествоПодчиненныхЭлементов.Владелец
|;
|
|
|ВЫБРАТЬ
| КоличествоПодчиненныхЭлементов.Подразделение КАК Подразделение,
| КоличествоПодчиненныхЭлементов.Владелец КАК Владелец,
| МАКСИМУМ(КоличествоПодчиненныхЭлементов.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ ВТОставляемыеПодразделения
|ИЗ
| ВТКоличествоПодчиненныхЭлементов КАК КоличествоПодчиненныхЭлементов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОставляемыеГруппыПредварительно КАК ОставляемыеГруппыПредварительно
| ПО (КоличествоПодчиненныхЭлементов.Подразделение = КоличествоПодчиненныхЭлементов.Подразделение)
| И (КоличествоПодчиненныхЭлементов.Владелец = КоличествоПодчиненныхЭлементов.Владелец)
| И (КоличествоПодчиненныхЭлементов.КоличествоПодчиненных = КоличествоПодчиненныхЭлементов.КоличествоПодчиненных)
|
|СГРУППИРОВАТЬ ПО
| КоличествоПодчиненныхЭлементов.Подразделение,
| КоличествоПодчиненныхЭлементов.Владелец
|;
|
|
|ВЫБРАТЬ
| ШтатноеРасписание.Ссылка КАК Ссылка,
| ОставляемыеПодразделения.Ссылка КАК Родитель
|ИЗ
| ВТОставляемыеПодразделения КАК ОставляемыеПодразделения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСтруктураШтатногоРасписания КАК ШтатноеРасписание
| ПО ОставляемыеПодразделения.Подразделение = ШтатноеРасписание.Подразделение
| И ОставляемыеПодразделения.Владелец = ШтатноеРасписание.Владелец
| И ОставляемыеПодразделения.Ссылка <> ШтатноеРасписание.Родитель
| И (НЕ ШтатноеРасписание.ГруппаПозицийПодразделения)";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбновляемыйОбъект = Выборка.Ссылка.ПолучитьОбъект();
ОбновляемыйОбъект.Родитель = Выборка.Родитель;
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(ОбновляемыйОбъект);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиПубликации(ОбновляемыйОбъект);
ОбновляемыйОбъект.Записать();
КонецЦикла;
КонецЕсли;
УдалитьПустыеГруппыПозицийШтатногоРасписания();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура УдалитьПустыеГруппыПозицийШтатногоРасписания()
ОбновляемыеПодразделения = Новый Массив;
ПроверитьНеобходимостьУдаленияЛишнихГрупп = Истина;
Пока ПроверитьНеобходимостьУдаленияЛишнихГрупп Цикл
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ШтатноеРасписание.Ссылка КАК Ссылка
|ИЗ
| Справочник.ШтатноеРасписание КАК ШтатноеРасписание
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ШтатноеРасписание.Ссылка КАК Ссылка,
| ШтатноеРасписание.Родитель КАК Родитель
| ИЗ
| Справочник.ШтатноеРасписание КАК ШтатноеРасписание) КАК ШтатноеРасписаниеПодчиненные
| ПО ШтатноеРасписание.Ссылка = ШтатноеРасписаниеПодчиненные.Родитель
|ГДЕ
| ШтатноеРасписание.ГруппаПозицийПодразделения
|
|СГРУППИРОВАТЬ ПО
| ШтатноеРасписание.Ссылка
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ШтатноеРасписаниеПодчиненные.Ссылка) = 0";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ПроверитьНеобходимостьУдаленияЛишнихГрупп = Ложь;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЛишняяГруппа = Выборка.Ссылка.ПолучитьОбъект();
Если ЛишняяГруппа <> Неопределено Тогда
ОбновляемыеПодразделения.Добавить(ЛишняяГруппа.Подразделение);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеСтруктурыШтатногоРасписания(ЛишняяГруппа);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиИспользованияСтраховыхВзносовПоКлассамУсловийТруда(ЛишняяГруппа);
УправлениеШтатнымРасписанием.ОтключитьОбновлениеНастройкиПубликации(ЛишняяГруппа);
ЛишняяГруппа.Удалить();
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИсториюИзмененияШтатногоРасписания") Тогда
УправлениеШтатнымРасписанием.ОбновитьСведенияПодразделений(ОбновляемыеПодразделения);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли