Создание автоматизированной системы кадрового учета строительного предприятия

Принципы программирования в системе "1С: Предприятие": конфигуратор, синтакс-помощник, описание встроенного языка. Организация кадрового учета на предприятии, его документальное оформление. Автоматизация кадрового учета средствами системы программ "1С".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.07.2011
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Предупреждение("Не указано ФИО !");

Возврат 1;

ИначеЕсли Число(ДатаПриема) = 0 Тогда

Предупреждение("Не указана ДАТА ПРИЕМА");

Возврат 1;

ИначеЕсли Категория.Выбран()=0 Тогда

Предупреждение("Не указана КАТЕГОРИЯ");

Возврат 1;

ИначеЕсли Объект.Выбран()=0 Тогда

Предупреждение("Не указан ОБЪЕКТ");

Возврат 1;

ИначеЕсли (Должность.Выбран()=0) Тогда

Предупреждение("Не указана ДОЛЖНОСТЬ / СПЕЦИАЛЬНОСТЬ");

Возврат 1;

ИначеЕсли ГрафикРаботы.Выбран()=0 Тогда

Предупреждение("Не указан ГРАФИК РАБОТЫ");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Объект=ОбъектИТР) Тогда

Предупреждение("При данной категории не может быть указан объект ИТР");

Возврат 1;

ИначеЕсли ((КодКатег=1) ИЛИ (КодКатег=2)) И (ДолжностьШтРасп.Выбран()=0) Тогда

Предупреждение("При данной категории должна быть выбрана должность из штатного расписания!");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (КодКатег<>3) И (Число(КонецКонтракта)=0) Тогда

Предупреждение("Не указан КОНЕЦ КОНТРАКТА");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Разряд.Выбран()=0) Тогда

Предупреждение("При данной категории должен быть указан РАЗРЯД");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Должность.Родитель<>ГруппаСпециальностей) Тогда

Предупреждение("При данной категории должна быть указана СПЕЦИАЛЬНОСТЬ, а не должность!");

Возврат 1;

ИначеЕсли (КодКатег<>5) И (ГрафикРаботы.Часов = 4) Тогда

Предупреждение("График работы 'Табель 4 часа' может быть только у совместителей");

Возврат 1;

ИначеЕсли (Число(КонецКонтракта)<>0) И (КонецКонтракта < ДатаПриема) Тогда

Предупреждение("Конец контракта должен быть больше дата приема!");

Возврат 1;

ИначеЕсли (ДолжностьШтРасп.Выбран()=1) И (Ставка = 0) Тогда

Предупреждение("Не указана СТАВКА");

Возврат 1;

ИначеЕсли (ДолжностьШтРасп.Выбран()=1) Тогда

Если БылаДолжностьШтРасп = ДолжностьШтРасп Тогда

Если (Ставка > ДолжностьШтРасп.Вакантно + БылаСтавка) Тогда

Предупреждение("Недостаточно вакансий в штатном расписании!");

Возврат 1;

КонецЕсли;

Иначе

Если (Ставка > ДолжностьШтРасп.Вакантно) Тогда

Предупреждение("Недостаточно вакансий в штатном расписании!");

Возврат 1;

КонецЕсли;

КонецЕсли;

КонецЕсли;

Возврат 0;//ошибок нет

КонецФункции

//--------------------------------------------------------------------------------

Процедура Приказ()

Если ЕстьЛиОшибки()=1 Тогда

Возврат;

КонецЕсли;

//если требуется, то нужно назначить ТН новому сотруднику

Если Проведен()=0 Тогда

ТН = НовыйТН();

КонецЕсли;

Приказ = СоздатьОбъект("Таблица");

Приказ.ИсходнаяТаблица("Приказ");

Приказ.Вывести();

Приказ.Опции(0);//убрать сетку

Приказ.Показать("Приказ о приеме на работу");

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура ПриЗаписи()

Если ЕстьЛиОшибки()=1 Тогда

статусВозврата(0);

Возврат;

КонецЕсли;

//при записи автором документа становится тек. пользователь

Автор = ИмяПользователя();

//отражаем изменения в спр. ДокументыПоФИО

ОбновитьДокументыПоФИО(ТекущийДокумент());

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура СменаКатегории()

Если Категория.Выбран()=0 Тогда

Форма.Оклад.Доступность(0);Форма.Оклад_надпись.Доступность(0);

Форма.Разряд.Доступность(0);Форма.Разряд_надпись.Доступность(0);

Форма.Ставка.Доступность(0);Форма.Ставка_надпись.Доступность(0);

Форма.Объект.Доступность(0); Форма.Объект_надпись.Доступность(0);

Форма.Должность.Доступность(0);Форма.Должность_надпись.Доступность(0);

Форма.ДолжностьШтРасп.Доступность(0);

Форма.КонецКонтракта.Доступность(0);Форма.КонецКонтракта_надпись.Доступность(0);

Форма.ИспытСрок.Доступность(0);Форма.ИспытСрок_надпись.Доступность(0);

Форма.ГрафикРаботы.Доступность(0); Форма.ГрафикРаботы_надпись.Доступность(0);

Возврат;

КонецЕсли;

КодКатег = Число(Категория.Код);

//Рук. и спец.+ лин.ИТР

Если (КодКатег = 1) ИЛИ (КодКатег = 2) Тогда

Объект = ОбъектИТР;

Разряд = 0;Тариф = 0;

Если Ставка = 0 Тогда

Ставка = 1;

КонецЕсли;

Форма.Оклад.Доступность(1);Форма.Оклад_надпись.Доступность(1);

Форма.Объект.Доступность(0);Форма.Объект_надпись.Доступность(0);

Форма.Разряд.Видимость(0);Форма.Разряд_надпись.Видимость(0);

Форма.Разряд.Доступность(0);Форма.Разряд_надпись.Доступность(0);

Форма.Ставка.Видимость(1);Форма.Ставка_надпись.Видимость(1);

Форма.Ставка.Доступность(1);Форма.Ставка_надпись.Доступность(1);

Форма.Должность.Видимость(0);

Форма.Должность.Доступность(0);

Форма.ДолжностьШтРасп.Видимость(1);

Форма.ДолжностьШтРасп.Доступность(1);Форма.Должность_надпись.Доступность(1);

Иначе

Оклад = 0; Ставка = 0;

Объект = ?(Объект=ОбъектИТР,0,Объект);

ДолжностьШтРасп = 0;

Форма.Оклад.Доступность(0);Форма.Оклад_надпись.Доступность(0);

Форма.Объект.Доступность(1);Форма.Объект_надпись.Доступность(1);

Форма.Разряд.Видимость(1);Форма.Разряд_надпись.Видимость(1);

Форма.Разряд.Доступность(1);Форма.Разряд_надпись.Доступность(1);

Форма.Ставка.Видимость(0);Форма.Ставка_надпись.Видимость(0);

Форма.Ставка.Доступность(0);Форма.Ставка_надпись.Доступность(0);

Форма.ДолжностьШтРасп.Видимость(0);

Форма.ДолжностьШтРасп.Доступность(0);

Форма.Должность.Видимость(1);

Форма.Должность.Доступность(1);Форма.Должность_надпись.Доступность(1);

КонецЕсли;

//рук.и спец. + лин. ИТР + пост. раб.

Если (КодКатег = 1) ИЛИ (КодКатег = 2) ИЛИ (КодКатег = 3) Тогда

КонецКонтракта = 0;

Форма.КонецКонтракта.Доступность(0);Форма.КонецКонтракта_надпись.Доступность(0);

Форма.ИспытСрок.Доступность(1);Форма.ИспытСрок_надпись.Доступность(1);

Иначе

ИспытСрок = 0;

Форма.КонецКонтракта.Доступность(1);Форма.КонецКонтракта_надпись.Доступность(1);

Форма.ИспытСрок.Доступность(0);Форма.ИспытСрок_надпись.Доступность(0);

КонецЕсли;

//совместители

Если КодКатег = 5 Тогда

ГрафикРаботы = ПолучитьГрафикРаботы(4);

Форма.ГрафикРаботы.Доступность(0); Форма.ГрафикРаботы_надпись.Доступность(0);

Иначе

Форма.ГрафикРаботы.Доступность(1);Форма.ГрафикРаботы_надпись.Доступность(1);

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВводНового()

ГрафикРаботы = ПолучитьГрафикРаботы(8);

Автор = ИмяПользователя();

КонецПроцедуры

//---------------------------------------------------------------------

Процедура ВыборДолжностиШтРасп()

Должность = ДолжностьШтРасп.Должность;

Если Оклад = 0 Тогда

Оклад = ДолжностьШтРасп.Оклад;

Иначе

//есть какой-то оклад

Если Оклад <> ДолжностьШтРасп.Оклад Тогда

Если Вопрос("Поменять оклад согласно штатному расписанию?","Да+Нет") = "Да" Тогда

Оклад = ДолжностьШтРасп.Оклад;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

УстТариф();

СменаКатегории();

ПриЗаписиПерепроводить(1);

Документ «Кадровое перемещение»

//--------------------------------------------------------------------------------

Функция ЕстьЛиОшибки()

ДокПеремещ = СоздатьОбъект("Документ.КадровоеПеремещение");

Попытка

ДокПеремещ.НайтиДокумент(ТекущийДокумент());

БылаСтавка = ДокПеремещ.Ставка;

БылаДолжностьШтРасп = ДокПеремещ.ДолжностьШтРасп;

Исключение

//Документ только создается и еще не записан

КонецПопытки;

КодКатег = Число(Категория.Код);

Если Сотрудник.Выбран() = 0 Тогда

Предупреждение("Не указан СОТРУДНИК");

Возврат 1;

ИначеЕсли Число(Начало) = 0 Тогда

Предупреждение("Не указана ДАТА ПЕРЕМЕЩЕНИЯ");

Возврат 1;

ИначеЕсли Категория.Выбран()=0 Тогда

Предупреждение("Не указана КАТЕГОРИЯ");

Возврат 1;

ИначеЕсли Объект.Выбран()=0 Тогда

Предупреждение("Не указан ОБЪЕКТ");

Возврат 1;

ИначеЕсли (Должность.Выбран()=0) Тогда

Предупреждение("Не указана ДОЛЖНОСТЬ / СПЕЦИАЛЬНОСТЬ");

Возврат 1;

ИначеЕсли ГрафикРаботы.Выбран()=0 Тогда

Предупреждение("Не указан ГРАФИК РАБОТЫ");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (КодКатег<>3) И (Число(КонецКонтракта)=0) Тогда

Предупреждение("Не указан КОНЕЦ КОНТРАКТА");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Объект=ОбъектИТР) Тогда

Предупреждение("При данной категории не может быть указан объект ИТР");

Возврат 1;

ИначеЕсли ((КодКатег=1) ИЛИ (КодКатег=2)) И (ДолжностьШтРасп.Выбран()=0) Тогда

Предупреждение("При данной категории должна быть выбрана должность из штатного расписания!");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Разряд.Выбран()=0) Тогда

Предупреждение("При данной категории должен быть указан РАЗРЯД");

Возврат 1;

ИначеЕсли (КодКатег<>1) И (КодКатег<>2) И (Должность.Родитель<>ГруппаСпециальностей) Тогда

Предупреждение("При данной категории должна быть указана СПЕЦИАЛЬНОСТЬ, а не должность!");

Возврат 1;

ИначеЕсли (КодКатег<>5) И (ГрафикРаботы.Часов = 4) Тогда

Предупреждение("График работы 'Табель 4 час' может быть только у совместителей");

Возврат 1;

ИначеЕсли (Число(КонецКонтракта) <> 0) И (КонецКонтракта < Сотрудник.КонецКонтракта.Получить(Начало-1)) Тогда

Предупреждение("Новый КОНЕЦ КОНТРАКТА не может быть меньше старого!");

Возврат 1;

ИначеЕсли (ДолжностьШтРасп.Выбран()=1) И (Ставка = 0) Тогда

Предупреждение("Не указана СТАВКА");

Возврат 1;

ИначеЕсли (ДолжностьШтРасп.Выбран()=1) Тогда

БылаДолжностьШтРасп_сотр = Сотрудник.ДолжностьШтРасп.Получить(Начало-1);

БылаСтавка_сотр = Сотрудник.Ставка.Получить(Начало-1);

Если БылаДолжностьШтРасп_сотр = ДолжностьШтРасп Тогда

Если (Ставка > ДолжностьШтРасп.Вакантно + БылаСтавка_сотр) Тогда

Предупреждение("Недостаточно вакансий в штатном расписании!");

Возврат 1;

КонецЕсли;

Иначе

Если (Ставка > ДолжностьШтРасп.Вакантно) Тогда

Предупреждение("Недостаточно вакансий в штатном расписании!");

Возврат 1;

КонецЕсли;

КонецЕсли;

ИначеЕсли (СокрЛП(Основание) = "") Тогда

Предупреждение("Не указано ОСНОВАНИЕ");

Возврат 1;

КонецЕсли;

Возврат 0;//ошибок нет

КонецФункции

//--------------------------------------------------------------------------------

Процедура УстТариф()

Тариф = ЧислоВОтчет(?(Разряд.Выбран()=1,Разряд.Тариф.Получить(ДатаДок),0));

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура Приказ()

Если ЕстьЛиОшибки()=1 Тогда

Возврат;

КонецЕсли;

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.ИспользоватьДату(Начало-1);

СпрСотр.НайтиЭлемент(Сотрудник);

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Приказ");

Таб.Вывести();

Таб.Опции(0);//убрать сетку

Таб.Показать("Кадровое перемещение")

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура ВводНового()

Автор = ИмяПользователя();

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура ПриЗаписи()

Если ЕстьЛиОшибки()=1 Тогда

статусВозврата(0);

КонецЕсли;

Автор = ИмяПользователя();

//отражаем изменения в спр. ДокументыПоФИО

ОбновитьДокументыПоФИО(ТекущийДокумент());

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура СменаКатегории()

Если Категория.Выбран() = 0 Тогда

Форма.Оклад.Доступность(0);

Форма.Объект.Доступность(0);

Форма.Разряд.Доступность(0);

Форма.Ставка.Доступность(0);

Форма.Должность.Доступность(0);

Форма.ДолжностьШтРасп.Доступность(0);

Форма.КонецКонтракта.Доступность(0);

Форма.ГрафикРаботы.Доступность(0);

КонецЕсли;

КодКатег = Число(Категория.Код);

//Рук. и спец.+ лин.ИТР

Если (КодКатег = 1) ИЛИ (КодКатег = 2) Тогда

Объект = ОбъектИТР;

Разряд = 0;Тариф = 0;

Если Ставка = 0 Тогда

Ставка = 1;

КонецЕсли;

Форма.Оклад.Доступность(1);

Форма.Объект.Доступность(0);

Форма.Разряд.Доступность(0);

Форма.Ставка.Доступность(1);

Форма.Должность.Видимость(0);

Форма.Должность.Доступность(0);

Форма.ДолжностьШтРасп.Видимость(1);

Форма.ДолжностьШтРасп.Доступность(1);

Иначе

Оклад = 0;

ДолжностьШтРасп = 0;

Ставка = 0;

Объект = ?(Объект=ОбъектИТР,0,Объект);

Форма.Оклад.Доступность(0);

Форма.Объект.Доступность(1);

Форма.Разряд.Доступность(1);

Форма.Ставка.Доступность(0);

Форма.ДолжностьШтРасп.Видимость(0);

Форма.ДолжностьШтРасп.Доступность(0);

Форма.Должность.Видимость(1);

Форма.Должность.Доступность(1);

КонецЕсли;

//рук.и спец. + лин. ИТР + пост. раб.

Если (КодКатег = 1) ИЛИ (КодКатег = 2) ИЛИ (КодКатег = 3) Тогда

КонецКонтракта = 0;

Форма.КонецКонтракта.Доступность(0);

Иначе

ИспытСрок = 0;

Форма.КонецКонтракта.Доступность(1);

КонецЕсли;

//совместители

Если КодКатег = 5 Тогда

ГрафикРаботы = ПолучитьГрафикРаботы(4);

Форма.ГрафикРаботы.Доступность(0);

Иначе

Форма.ГрафикРаботы.Доступность(1);

КонецЕсли;

Форма.Обновить();

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура Заполнить()

Если Число(Начало) <> 0 Тогда

Категория= Сотрудник.Категория.Получить (Начало-1);

Объект= Сотрудник.Объект.Получить (Начало-1);

Оклад= Сотрудник.Оклад.Получить (Начало-1);

Должность= Сотрудник.Должность.Получить (Начало-1);

ДолжностьШтРасп= Сотрудник.ДолжностьШтРасп.Получить (Начало-1);

Разряд= Сотрудник.Разряд.Получить (Начало-1);

Ставка= Сотрудник.Ставка.Получить (Начало-1);

ГрафикРаботы= Сотрудник.ГрафикРаботы.Получить (Начало-1);

КонецКонтракта= Сотрудник.КонецКонтракта.Получить (Начало-1);

УстТариф();

СменаКатегории();

КонецЕсли;

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура СменитьДату()

// при смене даты данные о прежнем месте работы заполняются

//именно на эту дату, т.е. где сотрудник в тот момент работал

Заполнить();

КонецПроцедуры

//--------------------------------------------------------------------------------

Процедура ПриВыбореСотра()

//при выборе сотрудника заполняем на него прежнее место работы

//и теми же данными новое место работы

Заполнить();

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВыборДолжностиШтРасп()

Должность = ДолжностьШтРасп.Должность;

Если Оклад = 0 Тогда

Оклад = ДолжностьШтРасп.Оклад;

Иначе

//есть какой-то оклад

Если Оклад <> ДолжностьШтРасп.Оклад Тогда

Если Вопрос("Поменять оклад согласно штатному расписанию?","Да+Нет") = "Да" Тогда

Оклад = ДолжностьШтРасп.Оклад;

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

ПриЗаписиПерепроводить(1);

СменаКатегории();

УстТариф();

Документ «Приказ об увольнении»

Функция ЕстьЛиОшибки()

Если Сотрудник.Выбран() = 0 Тогда

Предупреждение("Не указан СОТРУДНИК");

Возврат 1;

КонецЕсли;

КодКатег = Число(Сотрудник.Категория.Получить(ДатаУвольнения).Код);

Если Число(ДатаУвольнения) = 0 Тогда

Предупреждение("Не указана ДАТА УВОЛЬНЕНИЯ");

Возврат 1;

ИначеЕсли ДатаУвольнения < Сотрудник.ДатаПриема Тогда

Предупреждение("ДАТА УВОЛЬНЕНИЯ должна быть больше даты приема");

Возврат 1;

ИначеЕсли Основание.Выбран() = 0 Тогда

Предупреждение("Не указано ОСНОВАНИЕ");

Возврат 1;

ИначеЕсли (Компенсация <> 0) И (НеОтработано <> 0) Тогда

Предупреждение("Не может быть одновременно указана 'Компенсация' и 'Не отработано'!");

Возврат 1;

КонецЕсли;

Возврат 0;//ошибок нет

КонецФункции

//------------------------------------------------------------------------

Процедура ПечатьФормыТ8()

Если ЕстьЛиОшибки()=1 Тогда

Возврат;

КонецЕсли;

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.ИспользоватьДату(ДатаУвольнения);

СпрСотр.НайтиЭлемент(Сотрудник);

ФормаТ8 = СоздатьОбъект("Таблица");

ФормаТ8.ИсходнаяТаблица("Приказ");

ФормаТ8.Вывести();

ФормаТ8.Опции(0);//убрать сетку

ФормаТ8.Показать("Приказ об увольнении");

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПриЗаписи()

Если ЕстьЛиОшибки()=1 Тогда

статусВозврата(0);

КонецЕсли;

Автор = ИмяПользователя();

//отражаем изменения в спр. ДокументыПоФИО

ОбновитьДокументыПоФИО(ТекущийДокумент());

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВводНового()

Автор = ИмяПользователя();

КонецПроцедуры

Документ «Приказ по отпуску»

Перем ПоШестидневке; //1 если отпуск по шестидневке

Перем ПоКалендДням;//1 если отпуск по календ. дням

//------------------------------------------------------------------------

Процедура УстРабГод()

КонРабГода = ДобавитьМесяц(НачРабГода,12)-1;

КонецПроцедуры

//------------------------------------------------------------------------

Функция ЕстьЛиОшибки()

//возвращает 1, если есть ошибки, иначе 0

Если Сотрудник.Выбран()=0 Тогда

Предупреждение("Не указан сотрудник!");

Возврат 1;

КонецЕсли;

Если (ПустоеЗначение(Начало) = 1) ИЛИ (ПустоеЗначение(Окончание) = 1) Тогда

Предупреждение("Не указана дата начала или окончания отпуска!");

Возврат 1;

КонецЕсли;

Если (Сотрудник.Родитель=Уволенные) И (Сотрудник.ДатаУвольнения < Окончание) Тогда

Сообщить("Сотрудник " + Сотрудник + " уволен " + Сотрудник.ДатаУвольнения + ", проверьте даты!", "!");

Возврат 1;

КонецЕсли;

Если Сотрудник.ДатаПриема > Начало Тогда

Сообщить("Сотрудник " + Сотрудник + " принят " + Сотрудник.ДатаПриема + ", проверьте даты!", "!");

Возврат 1;

КонецЕсли;

Если Окончание < Начало Тогда

Сообщить("Дата окончания должна быть больше даты начала!");

Возврат 1;

КонецЕсли;

Если ТипОтпуска = Перечисление.ТипОтпуска.Очередной Тогда

Если (ПустоеЗначение(НачРабГода) = 1) ИЛИ (ПустоеЗначение(КонРабГода) = 1) Тогда

Предупреждение("Не указан рабочий год, за который предоставляется отпуска!");

Возврат 1;

КонецЕсли;

КонецЕсли;

Если СокрЛП(Основание) = "" Тогда

Предупреждение("Не указано основание отпуска!");

Возврат 1;

КонецЕсли;

Если (ДнейДополнительного<>0) И (СокрЛП(ПричинаДоп) = "") Тогда

Предупреждение("Не указано основание дополнительного отпуска!");

Возврат 1;

КонецЕсли;

Возврат 0;//ошибок нет

КонецФункции

//------------------------------------------------------------------------

Процедура СменаТипаОтпуска();

Если ТипОтпуска = Перечисление.ТипОтпуска.Очередной Тогда

Форма.НадпРабГод.Видимость(1);

Форма.НачРабГода.Видимость(1);

Форма.КонРабГода.Видимость(1);

ТипРасчета = Перечисление.ТипРасчетаОтпуска.ПоШестидневке;

Форма.ТипРасчета.Доступность(1);

Иначе

Форма.НадпРабГод.Видимость(0);

Форма.НачРабГода.Видимость(0);

Форма.КонРабГода.Видимость(0);

ТипРасчета = Перечисление.ТипРасчетаОтпуска.ПоКалендарнымДням;

Форма.ТипРасчета.Доступность(0);

КонецЕсли

КонецПроцедуры

//------------------------------------------------------------------------

Процедура РасчетДнейОтпуска()

Если ТипРасчета = Перечисление.ТипРасчетаОтпуска.ПоШестидневке Тогда

Календ = Календари.УчетСуббот;

Иначе

Календ = Календари.КалендДни;

КонецЕсли;

Если (Число(Начало)<>0) И

((ДнейОтпуска <> 0) Или (ДнейДополнительного <> 0)) Тогда

Окончание = Календ.ПолучитьДату(Начало,

ДнейОтпуска+ДнейДополнительного);

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВводНового()

ТипРасчета = Перечисление.ТипРасчетаОтпуска.ПоШестидневке;

ТипОтпуска = Перечисление.ТипОтпуска.Очередной;

СменаТипаОтпуска();

Автор = ИмяПользователя();

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПриЗаписи()

Если ЕстьЛиОшибки() = 1 Тогда

статусВозврата(0);

КонецЕсли;

Автор = ИмяПользователя();

//отражаем изменения в спр. ДокументыПоФИО

ОбновитьДокументыПоФИО(ТекущийДокумент());

КонецПроцедуры

//------------------------------------------------------------------------

Процедура Приказ()

Если ЕстьЛиОшибки() = 1 Тогда

Возврат;

КонецЕсли;

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Приказ");

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.ИспользоватьДату(ДатаДок);

СпрСотр.НайтиЭлемент(Сотрудник);

Таб.Вывести();

Таб.Опции(0);//убрать сетку

Таб.Показать();

КонецПроцедуры

//------------------------------------------------------------------------

Документ «Больничный лист»

//------------------------------------------------------------------------

Функция ЕстьЛиОшибки()

//возвращает 1, если есть ошибки, иначе 0

Если Сотрудник.Выбран()=0 Тогда

Предупреждение("Не выбран сотрудник!");

Возврат(1);

КонецЕсли;

Если ПустоеЗначение(Начало) = 1 Тогда

Предупреждение("Не указана дата начала!");

Возврат 1;

КонецЕсли;

Если ПустоеЗначение(Окончание) = 1 Тогда

Предупреждение("Не указана дата окончания!");

Возврат 1;

КонецЕсли;

Если (Сотрудник.Родитель = Уволенные) И (Сотрудник.ДатаУвольнения < Окончание) Тогда

Предупреждение("Сотрудник " + Сотрудник + " уволен " + Сотрудник.ДатаУвольнения + ", проверьте даты!", "!");

Возврат 1;

КонецЕсли;

Если Сотрудник.ДатаПриема > Начало Тогда

Предупреждение("Сотрудник " + Сотрудник + " принят " + Сотрудник.ДатаПриема + ", проверьте даты!", "!");

Возврат 1;

КонецЕсли;

Если Окончание < Начало Тогда

Предупреждение("Дата окончания должна быть больше даты начала!");

Возврат 1;

КонецЕсли;

Если ПроцентОплаты = 0 Тогда

Предупреждение("Не указан процент оплаты!");

Возврат 1;

КонецЕсли;

Возврат 0;//ошибок нет

КонецФункции

//------------------------------------------------------------------------

Процедура ВводНового()

Автор = ИмяПользователя();

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПриЗаписи()

Если ЕстьЛиОшибки() = 1 Тогда

статусВозврата(0);

КонецЕсли;

Автор = ИмяПользователя();

КонецПроцедуры

//------------------------------------------------------------------------

Процедура РассчитатьПроцент()

Если Сотрудник.Выбран()=0 Тогда

Предупреждение("Не указан сотрудник!");

Возврат;

КонецЕсли;

НепрСтаж = Сотрудник.КадровыеДанные.НепрСтаж;

Если Число(НепрСтаж)=0 Тогда

Предупреждение("У сотрудника в кадровых данных не указан непрерывный стаж!");

Возврат;

КонецЕсли;

ЧислоЛет = Цел((Начало - НепрСтаж)/365.25);

Если (ЧислоЛет >= 0) И (ЧислоЛет < 5) Тогда

ПроцентОплаты = 60;

ИначеЕсли (ЧислоЛет >= 5) И (ЧислоЛет < 8) Тогда

ПроцентОплаты = 80;

ИначеЕсли (ЧислоЛет >= 8) Тогда

ПроцентОплаты = 100;

Иначе

Предупреждение("Проверьте дату непрерывного стажа в кадровых данных сотрудника и дату начала больничного листа!");

Возврат;

КонецЕсли;

КонецПроцедуры

Мастер отчетов по документам

//*******************************************

Процедура ЗаполнитьСписокГраф()

СписокГраф.УдалитьВсе();

СпрСпр = СоздатьОбъект("Справочник.Справочники");

Атрибуты = СоздатьОбъект("Справочник.АтрибутыСпр");

Атрибуты.ПорядокКодов();

//справочник Сотрудники

СпрСпр.НайтиПоНаименованию("Сотрудники");

Атрибуты.ИспользоватьВладельца(СпрСпр.ТекущийЭлемент());

Атрибуты.ВыбратьЭлементы();

Пока Атрибуты.ПолучитьЭлемент()=1 Цикл

СписокГраф.ДобавитьЗначение(Атрибуты.Код, "Сотр." + Атрибуты.Наименование);

КонецЦикла;

//кадровые данные

СпрСпр.НайтиПоНаименованию("КадровыеДанные");

Атрибуты.ИспользоватьВладельца(СпрСпр.ТекущийЭлемент());

Атрибуты.ВыбратьЭлементы();

Пока Атрибуты.ПолучитьЭлемент()=1 Цикл

СписокГраф.ДобавитьЗначение(Атрибуты.Код, "КД." + Атрибуты.Наименование);

КонецЦикла;

СпрДок = СоздатьОбъект("Справочник.Документы");

Реквизиты = СоздатьОбъект("Справочник.РеквизитыДок");

Реквизиты.ПорядокКодов();

СпрДок.ВыбратьЭлементы();

Пока СпрДок.ПолучитьЭлемент()=1 Цикл

Реквизиты.ИспользоватьВладельца(СпрДок.ТекущийЭлемент());

Реквизиты.ВыбратьЭлементы();

Пока Реквизиты.ПолучитьЭлемент()=1 Цикл

СписокГраф.ДобавитьЗначение(Реквизиты.Код, СокрЛП(СпрДок.КраткоеИмя) + "." + СокрЛП(Реквизиты.Наименование));

КонецЦикла;

КонецЦикла;

//снять все пометки

Для Ном = 1 По СписокГраф.РазмерСписка() Цикл

СписокГраф.Пометка(Ном,0);

КонецЦикла;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ЗаполнитьСписокТиповДоков()

СпрДок = СоздатьОбъект("Справочник.Документы");

СпрДок.ВыбратьЭлементы();

Пока СпрДок.ПолучитьЭлемент()=1 Цикл

ТипыДоков.ДобавитьЗначение(СокрЛП(СпрДок.Наименование), СокрЛП(СпрДок.Представление));

КонецЦикла;

//установить всем пометку

Для НомТипа = 1 По ТипыДоков.РазмерСписка() Цикл

ТипыДоков.Пометка(НомТипа,1);

КонецЦикла;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура Сформировать()

Запрос = 0;

Запрос = СоздатьОбъект("Запрос");

Таб = СоздатьОбъект("Таблица");

СпрДок = СоздатьОбъект("Справочник.Документы");

ТекстЗапроса = "

|Период с НачалоИнтервала по КонецИнтервала;

|

|Функция Колво = Счётчик();

|

|";

//---------------------------------------------------------------------------

//формирование списка документов для выборки

//документы в запросе должны быть перечислены через запятую.

//---------------------------------------------------------------------------

СтрТипыДоков = ""; ОчерТип = ""; СтрОчерТип = "";

Для НомТипа = 1 По ТипыДоков.РазмерСписка() Цикл

Если ТипыДоков.Пометка(НомТипа) = 1 Тогда

ТипыДоков.ПолучитьЗначение(НомТипа,СтрОчерТип);

ОчерТип = ТипыДоков.Получить(СтрОчерТип);

СтрТипыДоков = СтрТипыДоков + "Документ." + ОчерТип + ".ТекущийДокумент" + ",";

КонецЕсли;

КонецЦикла;

Если СтрТипыДоков = "" Тогда

Предупреждение("Укажите хотя бы один тип документов для выборки!");

Возврат;

Иначе

//удаляем последнюю запятую

СтрТипыДоков = Сред(СтрТипыДоков,1,СтрДлина(СтрТипыДоков)-1);

КонецЕсли;

ТекстЗапроса = ТекстЗапроса + "Док = " + СтрТипыДоков + ";";

ТекстЗапроса = ТекстЗапроса + "Группировка Док;";

Если Фл_Помеченные = 0 Тогда

ТекстЗапроса = ТекстЗапроса + "Обрабатывать НеПомеченныеНаУдаление;";

КонецЕсли;

Если Фл_Непроведенные = 0 Тогда

ТекстЗапроса = ТекстЗапроса + "ОбрабатыватьДокументы Проведенные;";

Иначе

ТекстЗапроса = ТекстЗапроса + "ОбрабатыватьДокументы Все;";

КонецЕсли;

Если ВыбрСотрудник.Выбран()=1 Тогда

//ТекстЗапроса = ТекстЗапроса + "Сотрудник = Док.Сотрудник;" + РазделительСтрок;

ТекстЗапроса = ТекстЗапроса + "Условие(Док.Сотрудник = ВыбрСотрудник);" + РазделительСтрок;

КонецЕсли;

//Сообщить(ТекстЗапроса);

//УстановитьТАна(РабочаяДата());

//---------------------------------------------------------------------------

Запрос.Выполнить(ТекстЗапроса);

//---------------------------------------------------------------------------

Сч = 0; Всего = Запрос.Колво;

Таб.ВывестиСекцию("Шапка");

//заголовок таблицы

Таб.ВывестиСекцию("Заголовки|НомерПП");

Таб.ПрисоединитьСекцию("Заголовки|ОснГрафы");

//заголовки дополнительных граф

Для Ном = 1 По СписокГраф.РазмерСписка() Цикл

Если СписокГраф.Пометка(Ном) = 1 Тогда

Графа = "";

СписокГраф.ПолучитьЗначение(Ном,Графа);

НазваниеРеквизита = Графа;

Таб.ПрисоединитьСекцию("Заголовки|Реквизит");

КонецЕсли;

КонецЦикла;

наДату = РабочаяДата();

//строки таблицы

Пока Запрос.Группировка("Док")=1 Цикл

Сч = Сч + 1;

Таб.ВывестиСекцию("Док|НомерПП");

СостояниеПроцесса(Сч,Всего,50);

Док = Запрос.Док;

Таб.ПрисоединитьСекцию("Док|ОснГрафы");

//дополнительные графы

Для Ном = 1 По СписокГраф.РазмерСписка() Цикл

Если СписокГраф.Пометка(Ном) = 1 Тогда

Графа = "";

СписокГраф.ПолучитьЗначение(Ном,Графа);

//---------------------------------------------------

Графа = СтрЗаменить(Графа,"Сотр.","Сотрудник.");

Графа = СтрЗаменить(Графа,"КД.","Сотрудник.КадровыеДанные.");

СпрДок.НайтиПоНаименованию(Док.Вид());

Графа = СтрЗаменить(Графа,СокрЛП(СпрДок.КраткоеИмя) + ".","");

//---------------------------------------------------

Попытка

Значение = ПолучитьСложныйАтрибут(Док,Графа,наДату);

Исключение

Значение = "";

КонецПопытки;

Таб.ПрисоединитьСекцию("Док|Реквизит");

КонецЕсли; //графа помечена

КонецЦикла;//по графам

КонецЦикла;

Таб.ВывестиСекцию("Подвал");

Таб.Показать();

КонецПроцедуры

//--------------------------------------------------------------------------

НачалоИнтервала = НачГода(РабочаяДата());

КонецИнтервала = КонГода(РабочаяДата());

ЗаполнитьСписокГраф();

ЗаполнитьСписокТиповДоков();

Фл_Помеченные = 1;

Фл_Непроведенные = 1;

ВыбрСотрудник.ВыборГруппы(0);

Справочник «Сотрудники»

Процедура УстТариф()

Тариф = Разряд.Тариф.Получить(РабочаяДата());

КонецПроцедуры

Процедура ПриОткрытии()

Форма.Заголовок(Наименование);

//изменение большинства реквизитов для обычного пользователя

//возможно только документом "Кадровое перемещение"

Если РаботаетАдмин = Да Тогда

//все доступно

Иначе

//работает кадровик

Форма.Наименование.Доступность(1);

Форма.Календарь.Доступность(0);

Форма.Категория.Доступность(0);

Форма.Должность.Доступность(0);

Форма.Объект.Доступность(0);

Форма.Разряд.Доступность(0);

Форма.Оклад.Доступность(0);

Форма.ДатаПриема.Доступность(0);

Форма.ДатаУвольнения.Доступность(0);

Форма.КонецКонтракта.Доступность(1);

КонецЕсли;

КонецПроцедуры

Процедура ВызватьКД()

Перем Конт;

ОткрытьФорму(КадровыеДанные.ТекущийЭлемент(),Конт,Форма.ТолькоПросмотр());

КонецПроцедуры

Тариф = Разряд.Тариф.Получить(РабочаяДата());

Функция УстановитьСотрудника()

Если ЭтоГруппа() = 1 Тогда

ТекСотр = "";

Иначе

ТекСотр = ТекущийЭлемент();

КонецЕсли;

КонецФункции

процедура ПриВыбореСтроки()

Если ЭтоГруппа()=1 Тогда

ИспользоватьРодителя(ТекущийЭлемент());

Иначе

Конт = 0;

ОткрытьФорму(ТекущийЭлемент(),Конт,-1);

КонецЕсли;

конецПроцедуры

Процедура ВызватьМастерСотрудников()

Конт = 0;

ОткрытьФорму("Отчет.МастерСотрудников",Конт);

КонецПроцедуры

Форма.ОбработкаВыбораСтроки(1);

Справочник «Кадровые данные»

Процедура ВызватьСправочник(Какой)

Конт = 0;

ОткрытьФорму("Справочник."+Какой+"#"+СокрЛП(Строка(Владелец.Код)),Конт);

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПриЗаписи()

Если (Число(ДокументДатаВыдачи)<>0) И (Число(ДатаРождения)<>0) Тогда

Если (Число(ДокументВид.Код)=1) ИЛИ (Число(ДокументВид.Код)=21) Тогда//паспорт и паспорт образца 1997 г.

Если ДатаГод(ДокументДатаВыдачи) - ДатаГод(ДатаРождения) < 14 Тогда

Предупреждение("Дата выдачи паспорта должна быть больше даты рождения не меньше, чем на 14 лет!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

КонецЕсли;

КонецЕсли;

СтрНомер = Строка(СтраховойНомерПФ);

ДлинаНомера = СтрДлина(СтрНомер);

Если СтрНомер = " - - " Тогда

Сообщить("Не указан страховой номер ПФ");

Иначе

//проверка страхового номера

Если (ДлинаНомера <> 14) Тогда

Предупреждение("В страховом номере должно быть 11 цифр, 2 дефиса и 1 пробел!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

//расчет контрольного числа

СтрНомерБезКЧ = Сред(СтрНомер,1,ДлинаНомера - 3); //без контр. числа и пробела

Позиция = СтрДлина(СтрНомерБезКЧ);

ДлинаНомераБезКЧ = СтрДлина(СтрНомерБезКЧ);

Сумма = 0; Вес = 1;

Пока Позиция <> 0 Цикл

ОчерСимв = Сред(СтрНомерБезКЧ,Позиция,1);

Если ОчерСимв="-" Тогда

Позиция = Позиция - 1;

Продолжить;

КонецЕсли;

Сумма = Сумма + Число(ОчерСимв) * Вес;

Позиция = Позиция - 1;

Вес = Вес + 1;

КонецЦикла;

Остаток = Сумма % 101;

КонтрЧисло = ?(Остаток=100,"00",Строка(Остаток));

Если Число(Сред(СтрНомер, ДлинаНомера - 1)) <> Число(КонтрЧисло) Тогда

Предупреждение("Неверный страховой номер! Не сходится контрольное число!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПриВыбореЗакладки(НомЗакл, ЗначЗакл)

Если ЗначЗакл = "Основные данные" Тогда

Форма.ИспользоватьСлой("ОсновныеДанные",1);

Форма.ИспользоватьСлой("ДругиеДанные",0);

ИначеЕсли ЗначЗакл = "Другие данные" Тогда

Форма.ИспользоватьСлой("ОсновныеДанные",0);

Форма.ИспользоватьСлой("ДругиеДанные",1);

КонецЕсли;

КонецПроцедуры

//------------------------------------------------------------------------

Форма.ИспользоватьЗакладки(1);

Форма.Закладки.ДобавитьЗначение("Основные данные");

Форма.Закладки.ДобавитьЗначение("Другие данные");

Форма.ИспользоватьСлой("Постоянный",1);

Форма.ИспользоватьСлой("ОсновныеДанные",1);

Форма.ИспользоватьСлой("ДругиеДанные",0);

Форма.Заголовок(Владелец.Наименование);

Справочник «Штатное расписание»

Перем Уровень,Режим;

// массив, определяющий нужно ли выводить вертикальную черту соответствующего уровня вложенности

Перем Уровни[10]; // не более 10-ти уровней вложенности в справочнике подразделений!

Перем ШР;

Перем Таб;

Перем ВсегоЗанято;

Перем ВсегоВакантно;

Перем ВсегоСтавок;

Перем Процент;

//------------------------------------------------------------------------

Процедура ПриЗаписи()

Если Занято <> 0 Тогда

Если Ставки < Занято Тогда

предупреждение("По этой должности работают сотрудники!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

КонецЕсли;

Вакантно = Ставки - Занято;

Наименование = Должность.Наименование;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВывестиПодразделение(Элемент,Последний)

// вывод заглавия подразделения

//

// если это первый уровень...

Если Уровень=1 Тогда

//...выведем Г-образную линию...

Если Последний=1 Тогда

Таб.ВывестиСекцию("DivHook|Lines");

// ...или Т-образную линию

Иначе

Таб.ВывестиСекцию("DivTSect|Lines");

КонецЕсли;

Иначе

// для первого уровня выведем линию или пустоту

Если Уровни[1]=1 Тогда

Таб.ВывестиСекцию("DivLine|Lines");

Иначе

Таб.ВывестиСекцию("DivEmpty|Lines");

КонецЕсли;

// для остальных уровней присоединим линию или пустоту

Для Сч=2 По Уровень-1 Цикл

Если Уровни[Сч]=1 Тогда

Таб.ПрисоединитьСекцию("DivLine|Lines");

Иначе

Таб.ПрисоединитьСекцию("DivEmpty|Lines");

КонецЕсли;

КонецЦикла;

Если Последний=1 Тогда

Таб.ПрисоединитьСекцию("DivHook|Lines");

Иначе

Таб.ПрисоединитьСекцию("DivTSect|Lines");

КонецЕсли;

КонецЕсли;

// только теперь - присоединим секцию заглавия

// только теперь - присоединим секцию группы

Название = Элемент.Наименование;

Начальник = Элемент.Начальник.Наименование;

Таб.ПрисоединитьСекцию("Division<|Body");

ШР.ИспользоватьВладельца(Элемент);

ШР.ВыбратьЭлементы();

ИтогоСтавок = 0;

ИтогоЗанято = 0;

ИтогоВакантно = 0;

Пока ШР.ПолучитьЭлемент()=1 Цикл

Если (ШР.Ставки <> 0) и (((Режим = "Вакансии") И (ШР.Вакантно <> 0)) ИЛИ (Режим = "Структура")) Тогда

ИтогоСтавок = ИтогоСтавок+ШР.Ставки;

ИтогоЗанято = ИтогоЗанято+ШР.Занято;

ИтогоВакантно = ИтогоВакантно+ШР.Вакантно;

// ------------------------------------------------------

// вывод строки штатного расписания

Если Уровень=1 Тогда

Если Последний=1 Тогда

Таб.ВывестиСекцию("Empty|Lines");

Иначе

Таб.ВывестиСекцию("Line|Lines");

КонецЕсли;

Иначе

// для первого уровня выведем линию или пустоту

Если Уровни[1]=1 Тогда

Таб.ВывестиСекцию("Line|Lines");

Иначе

Таб.ВывестиСекцию("Empty|Lines");

КонецЕсли;

// для остальных уровней присоединим линию или пустоту

Для Сч=2 По Уровень-1 Цикл

Если Уровни[Сч]=1 Тогда

Таб.ПрисоединитьСекцию("Line|Lines");

Иначе

Таб.ПрисоединитьСекцию("Empty|Lines");

КонецЕсли;

КонецЦикла;

Если Последний=1 Тогда

Таб.ПрисоединитьСекцию("Empty|Lines");

Иначе

Таб.ПрисоединитьСекцию("Line|Lines");

КонецЕсли;

КонецЕсли;

// только теперь - присоединим секцию строки штатного расписания

Таб.ПрисоединитьСекцию("EmplKind|Body");

КонецЕсли

КонецЦикла;

ВсегоЗанято = ВсегоЗанято+ИтогоЗанято;

ВсегоВакантно = ВсегоВакантно+ИтогоВакантно;

ВсегоСтавок = ВсегоСтавок+ИтогоСтавок;

// ------------------------------------------------------

// вывод подвала подразделения

Если Уровень=1 Тогда

Если Последний=1 Тогда

Таб.ВывестиСекцию("Empty|Lines");

Иначе

Таб.ВывестиСекцию("Line|Lines");

КонецЕсли;

Иначе

// для первого уровня выведем линию или пустоту

Если Уровни[1]=1 Тогда

Таб.ВывестиСекцию("Line|Lines");

Иначе

Таб.ВывестиСекцию("Empty|Lines");

КонецЕсли;

// для остальных уровней присоединим линию или пустоту

Для Сч=2 По Уровень-1 Цикл

Если Уровни[Сч]=1 Тогда

Таб.ПрисоединитьСекцию("Line|Lines");

Иначе

Таб.ПрисоединитьСекцию("Empty|Lines");

КонецЕсли;

КонецЦикла;

Если Последний=1 Тогда

Таб.ПрисоединитьСекцию("Empty|Lines");

Иначе

Таб.ПрисоединитьСекцию("Line|Lines");

КонецЕсли;

КонецЕсли;

// только теперь - присоединим секцию подвала

Таб.ПрисоединитьСекцию("Division>|Body");

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ВывестиГруппу(Группа,Последний)

// каждый раз локально!!! создаем справочник подразделений

Подр = СоздатьОбъект("Справочник.Подразделения");

// для проверки наличия следующего элемента в выборке справочника подразделений

// создадим еще один объект!

ПровПодр = СоздатьОбъект("Справочник.Подразделения");

// если это первый уровень...

Если Уровень=1 Тогда

//...выведем Г-образную линию...

Если Последний=1 Тогда

Таб.ВывестиСекцию("GrHook|Lines");

// ...или Т-образную линию

Иначе

Таб.ВывестиСекцию("GrTSect|Lines");

КонецЕсли;

Иначе

// для первого уровня выведем линию или пустоту

Если Уровни[1]=1 Тогда

Таб.ВывестиСекцию("GrLine|Lines");

Иначе

Таб.ВывестиСекцию("GrEmpty|Lines");

КонецЕсли;

// для остальных уровней присоединим линию или пустоту

Для Сч=2 По Уровень-1 Цикл

Если Уровни[Сч]=1 Тогда

Таб.ПрисоединитьСекцию("GrLine|Lines");

Иначе

Таб.ПрисоединитьСекцию("GrEmpty|Lines");

КонецЕсли;

КонецЦикла;

Если Последний=1 Тогда

Таб.ПрисоединитьСекцию("GrHook|Lines");

Иначе

Таб.ПрисоединитьСекцию("GrTSect|Lines");

КонецЕсли;

КонецЕсли;

// только теперь - присоединим секцию группы

Название = Группа.Наименование;

Начальник = Группа.Начальник.Наименование;

Таб.ПрисоединитьСекцию("Group|Body");

Уровень = Уровень+1;

Подр.ВключатьПодчиненные(0);

Подр.ИспользоватьРодителя(Группа);

Подр.ПорядокНаименований();

Подр.ВыбратьЭлементы();

ПровПодр.ВключатьПодчиненные(0);

ПровПодр.ИспользоватьРодителя(Группа);

ПровПодр.ПорядокНаименований();

ПровПодр.ВыбратьЭлементы();

Начало = 1;

Пока Подр.ПолучитьЭлемент()=1 Цикл

Если Начало=1 Тогда

А=ПровПодр.ПолучитьЭлемент();

Начало=0;

КонецЕсли;

Если ПровПодр.ПолучитьЭлемент()=1 Тогда

Уровни[Уровень] = 1;

Последний = 0;

Иначе

Уровни[Уровень] = 0;

Последний = 1;

КонецЕсли;

Если Подр.ЭтоГруппа()=1 Тогда

ВывестиГруппу(Подр.ТекущийЭлемент(),Последний);

Иначе

ВывестиПодразделение(Подр.ТекущийЭлемент(),Последний);

КонецЕсли;

КонецЦикла;

Уровень = Уровень-1;

КонецПроцедуры

//------------------------------------------------------------------------

Процедура Печатать(Рж)

Режим = Рж;

// сначала заполним массив уровней нулями

Уровень = 0;

Сч=1;

Пока Сч<=10 Цикл

Уровни[Сч]=0;

Сч=Сч+1;

КонецЦикла;

// справочник подразделений

Подр = СоздатьОбъект("Справочник.Подразделения");

// для проверки наличия следующего элемента в выборке справочника подразделений

// создадим еще один объект!

ПровПодр = СоздатьОбъект("Справочник.Подразделения");

ШР = СоздатьОбъект("Справочник.ШтатноеРасписание");

ШР.ИспользоватьДату(РабочаяДата());

Таб = СоздатьОбъект("Таблица");

Подр.ВключатьПодчиненные(0);

Подр.ВыбратьЭлементы();

ПровПодр.ВключатьПодчиненные(0);

ПровПодр.ВыбратьЭлементы();

Уровень = 1;

Таб.ВывестиСекцию("Header");

Начало=1;

ВсегоСтавок = 0;

ВсегоЗанято = 0;

ВсегоВакантно = 0;

Пока Подр.ПолучитьЭлемент()=1 Цикл

Если Начало = 1 Тогда

А=ПровПодр.ПолучитьЭлемент();

Начало=0;

КонецЕсли;

Если ПровПодр.ПолучитьЭлемент()=1 Тогда

Уровни[1] = 1;

Последний = 0;

Иначе

Уровни[1] = 0;

Последний = 1;

КонецЕсли;

Если Подр.ЭтоГруппа()=1 Тогда

ВывестиГруппу(Подр.ТекущийЭлемент(),Последний);

Иначе

ВывестиПодразделение(Подр.ТекущийЭлемент(),Последний);

КонецЕсли;

КонецЦикла;

Если (Режим = "Структура") и (ВсегоСтавок>0) Тогда

Процент = Формат(ВсегоЗанято/ВсегоСтавок*100,"Ч3");

Таб.ВывестиСекцию("Footer");

КонецЕсли;

// Вывод заполненной формы

Таб.Опции(0,0,0,0, "PO0005");

Таб.ТолькоПросмотр(1);

Если Режим = "Структура" Тогда

Таб.Показать("Структура штатного расписания",);

Иначе

Таб.Показать("Вакансии штатного расписания",);

КонецЕсли;

КонецПроцедуры

Процедура ПрописатьНаименование()

Наименование = Должность.Наименование+" ("+Владелец.Наименование+")";

КонецПроцедуры

Процедура ПриЗаписи()

Вакантно = Ставки - Занято;

КонецПроцедуры

Процедура ПриОткрытии()

СохранениеПериодическихРеквизитов(2,"*");

КонецПроцедуры

Журнал «Кадровые документы»

Перем СтатусСтрока;

//------------------------------------------------------------------------

Процедура УстИнтервал()

Если Флажок1=1 Тогда

НачалоИнтервалаЖурналаПриказыКадровые = '01.01.1900';

КонецИнтервалаЖурналаПриказыКадровые = '31.12.2100';

ИначеЕсли Флажок2=1 Тогда

НачалоИнтервалаЖурналаПриказыКадровые = НачГода(РабочаяДата());

КонецИнтервалаЖурналаПриказыКадровые = КонГода(РабочаяДата());

ИначеЕсли Флажок3=1 Тогда

НачалоИнтервалаЖурналаПриказыКадровые = НачМесяца(РабочаяДата());

КонецИнтервалаЖурналаПриказыКадровые = КонМесяца(РабочаяДата());

КонецЕсли;

УстановитьИнтервал(НачалоИнтервалаЖурналаПриказыКадровые,КонецИнтервалаЖурналаПриказыКадровые);

КонецПроцедуры

//------------------------------------------------------------------------

Процедура ПоискПоФИО()

Конт = 0;

ОткрытьФорму("Справочник.ДокументыПоФИО",Конт,-1);

КонецПроцедуры

//------------------------------------------------------------------------

Процедура Печать()

Конт = 0;

ОткрытьФорму("Отчет.МастерДокументов",Конт);

КонецПроцедуры

//------------------------------------------------------------------------

Флажок2=1;

УстИнтервал();

СтатусСтрока = "";

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.