Загрузка данных


	
&НаСервере
Процедура ДневнаяСменаД()

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Для Каждого ТекСтр Из Объект.График Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеДня = "Д" Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.Продл;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

КонецПроцедуры
&НаСервере
Процедура КоличествоСменНаСервере1Смена()

	Объект.КоличествоСмен.Очистить();

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Для Каждого ТекСтр Из Объект.График Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеДня = "1" Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.ПерваяСмена;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

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

&НаСервере
Процедура КоличествоСменНаСервере2Смена()

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Для Каждого ТекСтр Из Объект.График Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеДня = "2" Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.ВтораяСмена;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

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

&НаСервере
Процедура КоличествоРезервНаСервере1Смена()

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Для Каждого ТекСтр Из Объект.График Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеДня = "Р" Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.РезервПерваяСмена;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

КонецПроцедуры
&НаСервере
Процедура КоличествоРезервНаСервере2Смена()

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Для Каждого ТекСтр Из Объект.График Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеДня = "С" Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.РезервВтораяСмена;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

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


&НаСервере
Процедура ВернутьКоличествоСмен_(ТекИндекс)

	НормоЧасыДни = ВернутьЧасыНорм();
	ТекСтрока1 = Объект.График.Получить(ТекИндекс);

	КолСмен = 0;
	ИдОтпуска = Ложь;

	Для стр = 1 По 31 Цикл
		
		ЗначениеДня = ТекСтрока1["ЧислоМесяца" + Строка(стр)];
		
		Если ЗначениеДня = "1" 
			Или ЗначениеДня = "2" 
			Или ЗначениеДня = "Д" Тогда
			
			КолСмен = КолСмен + 1;
			
		ИначеЕсли ЗначениеДня = "О" Тогда
			ИдОтпуска = Истина;
		КонецЕсли;
		
	КонецЦикла;	

	Если ИдОтпуска Тогда
		НормоЧасы = НормоЧасыДни.НормоЧасы / НормоЧасыДни.НормоДни * КолСмен;
	Иначе
		НормоЧасы = НормоЧасыДни.НормоЧасы;
	КонецЕсли;	

	ТекСтрока1.КоличествоСмен = КолСмен;
	ТекСтрока1.ЧасыНорм = НормоЧасы;

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

&НаКлиенте
Процедура КоличествоСменК()
	
	//ТекИндекс=Элементы.График.ТекущиеДанные.НомерСтроки-1;
	
	//ВернутьКоличествоСмен_(ТекИндекс);
	
	КоличествоСменНаСервере1Смена();
	КоличествоСменНаСервере2Смена();
	ДневнаяСменаД();
	//ДневнаяСмена();
	КоличествоРезервНаСервере1Смена();
	КоличествоРезервНаСервере2Смена();

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

&НаКлиенте
Процедура ГрафикПриИзменени(Элемент)
	
	ТекИндекс=Элементы.График.ТекущиеДанные.НомерСтроки-1;
	
	ВернутьКоличествоСмен_(ТекИндекс);
	
	КоличествоСменНаСервере1Смена();
	КоличествоСменНаСервере2Смена();
	ДневнаяСменаД();
	//ДневнаяСмена();
	КоличествоРезервНаСервере1Смена();
	КоличествоРезервНаСервере2Смена();

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


Процедура ДневнаяСмена()
	
	ТекСписокТН = Новый СписокЗначений;
	ном = 0;
	
	Для Каждого ТекстрРасш Из Объект.График Цикл
		ном = ном + 1;
		ТекСписокТН.Вставить(ном - 1, ТекстрРасш.Расшифровка);
	КонецЦикла;

	КолСмен = Новый Массив;
	Для i = 1 По 31 Цикл
		КолСмен.Добавить(0);
	КонецЦикла;

	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	РасшифровкаРаботыКондуктораРасшифровка.ВидДеятельности КАК ВидДеятельности,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца1 КАК ЧислоМесяца1,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца2 КАК ЧислоМесяца2,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца3 КАК ЧислоМесяца3,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца4 КАК ЧислоМесяца4,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца5 КАК ЧислоМесяца5,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца6 КАК ЧислоМесяца6,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца7 КАК ЧислоМесяца7,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца8 КАК ЧислоМесяца8,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца9 КАК ЧислоМесяца9,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца10 КАК ЧислоМесяца10,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца11 КАК ЧислоМесяца11,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца12 КАК ЧислоМесяца12,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца13 КАК ЧислоМесяца13,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца14 КАК ЧислоМесяца14,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца15 КАК ЧислоМесяца15,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца16 КАК ЧислоМесяца16,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца17 КАК ЧислоМесяца17,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца18 КАК ЧислоМесяца18,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца19 КАК ЧислоМесяца19,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца20 КАК ЧислоМесяца20,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца21 КАК ЧислоМесяца21,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца22 КАК ЧислоМесяца22,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца23 КАК ЧислоМесяца23,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца24 КАК ЧислоМесяца24,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца25 КАК ЧислоМесяца25,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца26 КАК ЧислоМесяца26,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца27 КАК ЧислоМесяца27,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца28 КАК ЧислоМесяца28,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца29 КАК ЧислоМесяца29,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца30 КАК ЧислоМесяца30,
	|	РасшифровкаРаботыКондуктораРасшифровка.ЧислоМесяца31 КАК ЧислоМесяца31
	|ИЗ
	|	Документ.РасшифровкаРаботыКондуктора.Расшифровка КАК РасшифровкаРаботыКондуктораРасшифровка
	|ГДЕ
	|	РасшифровкаРаботыКондуктораРасшифровка.Ссылка В(&СписокРасшифровок)
	|	И РасшифровкаРаботыКондуктораРасшифровка.ВидДеятельности = &ТекРасписание";

	Запрос.УстановитьПараметр("СписокРасшифровок", ТекСписокТН);
	Запрос.УстановитьПараметр("ТекРасписание", Перечисления.ВидДеятельности.Расписание);

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

	Пока ТекСтр.Следующий() Цикл
		
		Для i = 1 По 31 Цикл
			
			ЗначениеДня = ТекСтр["ЧислоМесяца" + Строка(i)];
			
			Если ЗначениеЗаполнено(ЗначениеДня) Тогда
				КолСмен[i - 1] = КолСмен[i - 1] + 1;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;

	КСНоваяСтрока = Объект.КоличествоСмен.Добавить();
	КСНоваяСтрока.ВидСменыДок = Перечисления.ВидСмены.Продл;

	Для i = 1 По 31 Цикл
		КСНоваяСтрока["КСЧислоМесяца" + Строка(i)] = КолСмен[i - 1];
	КонецЦикла;

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



&НаКлиенте
Процедура ИтогоКоличествоСмен()
    ТекИндекс=Элементы.ГрафикКондуктора.ТекущиеДанные.НомерСтроки-1;
	ВернутьКоличествоСмен_(ТекИндекс);
	КоличествоСменНаСервере1Смена();
	КоличествоСменНаСервере2Смена();
	ДневнаяСмена();
	//ДневнаяСменаД();
	КоличествоРезервНаСервере1Смена();
	КоличествоРезервНаСервере2Смена();
КонецПроцедуры


&НаКлиенте
Процедура КоличествоСмен(Команда)
	
	КоличествоСменНаСервере1Смена();
	КоличествоСменНаСервере2Смена();
	КоличествоРезервНаСервере1Смена();
	КоличествоРезервНаСервере2Смена();

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


&НаСервереБезКонтекста
Функция ГрафикСотрудникПриИзмененииНаСервере(ТекущСтр)
	ТекущТабНомер="";
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Кондукторы.Код КАК Код
		|ИЗ
		|	Справочник.Кондукторы КАК Кондукторы
		|ГДЕ
		|	Кондукторы.Ссылка = &Ссылка";
	
	Запрос.УстановитьПараметр("Ссылка", ТекущСтр);
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		ТекущТабНомер = Выборка.ТабельныйНомер;
	КонецЦикла;
	Возврат ТекущТабНомер;

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


&НаКлиенте
Процедура ГрафикСотрудникПриИзменении(Элемент)
	ТекущСтр=ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.Сотрудник;
	ТекТабНом=ГрафикСотрудникПриИзмененииНаСервере(ТекущСтр);
	ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.Код=ТекТабНом;
	ЭтотОбъект.Записать();
КонецПроцедуры



&НаСервере
Процедура ГрафикРасшифровкаСоздать() Экспорт
    // Получаем текущую строку графика
    ТекущаяСтрока = Объект.График.Получить(Элементы.График.ТекущаяСтрока);
    ТекущийМесяц = Объект.Месяц;
    ТекущийГод = Объект.Год;
    ТекущийСотрудник = ТекущаяСтрока.Сотрудник;
    ТекРасшифровка = ТекущаяСтрока.Расшифровка;
    
    Если НЕ ЗначениеЗаполнено(ТекРасшифровка) Тогда
        ТекущаяРасшифровка = Документы.РасшифровкаРаботыКондуктора.СоздатьДокумент();
        ТекущаяРасшифровка.Дата = ТекущаяДата();
        ТекущаяРасшифровка.Сотрудник = ТекущийСотрудник;
        ТекущаяРасшифровка.Месяц = ТекущийМесяц;
        ТекущаяРасшифровка.Год = ТекущийГод;

        НоваяСтр = ТекущаяРасшифровка.Расшифровка.Добавить();
        НоваяСтр.ВидДеятельности = Перечисления.ВидДеятельности.Режим;

        // Копируем все дни месяца через цикл
        Для i = 1 По 31 Цикл
            ИмяПоля = "ЧислоМесяца" + Строка(i);
            НоваяСтр[ИмяПоля] = ТекущаяСтрока[ИмяПоля];
        КонецЦикла;

        ТекущаяРасшифровка.Записать(РежимЗаписиДокумента.Проведение);
        ТекущаяСтрока.Расшифровка = ТекущаяРасшифровка.Ссылка;
        ЭтотОбъект.Записать();
    Иначе
        ТекущаяРасшифровка = ТекРасшифровка;
    КонецЕсли;
КонецПроцедуры


&НаСервере
Процедура ГрафикРасшифровкаНачалоВыбораНаСервере()
	ГрафикРасшифровкаСоздать();
КонецПроцедуры

&НаКлиенте
Процедура ГрафикРасшифровкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	//ГрафикРасшифровкаНачалоВыбораНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗаполнитьГрафикЧетыреЧерезДва(НоваяСтрока,ОтсутствиеС,ОтсутствиеПо,РежимПослеВыходногоДня,РежимПервогоЧисла,ПорядковыйНомерДня,ГрафикРаботы,Признак,ТекМесяц,ТекГод)

    ЧислоКонцаМесяца = СпектрДоработки.ВернутьКоличествоДнейМесяца(ТекМесяц, ТекГод);
    ТекСтр = НоваяСтрока;

    Если ГрафикРаботы <> Перечисления.ГрафикРаботы.ЧетыреЧерезДва Тогда
        Возврат;
    КонецЕсли;

    // Смещение старта
    Смещение = ПорядковыйНомерДня - 1;

    Для стр = 1 По ЧислоКонцаМесяца Цикл

        ДеньЦикла = (стр + Смещение - 1) % 6;

        // 0-3 рабочие, 4-5 выходные
        Если ДеньЦикла <= 3 Тогда
            
            Если РежимПослеВыходногоДня = Перечисления.РежимРаботыПослеВыходногоДня.Один Тогда
                ТекСтр["ЧислоМесяца" + стр] = "1";
            Иначе                                            
                ТекСтр["ЧислоМесяца" + стр] = "2";
            КонецЕсли;

        Иначе
            ТекСтр["ЧислоМесяца" + стр] = "В";
        КонецЕсли;

    КонецЦикла;

    // Отсутствия
    Если ЗначениеЗаполнено(ОтсутствиеС) Тогда
        НачПериода = Число(Сред(ОтсутствиеС,1,2));
        КонПериода = Число(Сред(ОтсутствиеПо,1,2));

        Для стр = НачПериода По КонПериода Цикл
            ТекСтр["ЧислоМесяца" + стр] = "О";
        КонецЦикла;
    КонецЕсли;

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



&НаСервере
Процедура ЗаполнитьГрафикПятьЧерезДва(НоваяСтрока,ОтсутствиеС,ОтсутствиеПо,РежимПослеВыходногоДня,РежимПервогоЧисла,ПорядковыйНомерДня,ГрафикРаботы,Признак,ТекМесяц,ТекГод)

	ЧислоКонцаМесяца = СпектрДоработки.ВернутьКоличествоДнейМесяца(ТекМесяц,ТекГод);
	ТекСтр = НоваяСтрока;

	Если ГрафикРаботы <> Перечисления.ГрафикРаботы.ПятьЧерезДва Тогда
		Возврат;
	КонецЕсли;

	// Смещение старта
	Смещение = ПорядковыйНомерДня - 1;

	Для стр = 1 По ЧислоКонцаМесяца Цикл
		
		ДеньЦикла = (стр + Смещение - 1) % 7;

		// 0-4 рабочие, 5-6 выходные
		Если ДеньЦикла <= 4 Тогда
			
			Если РежимПервогоЧисла = Перечисления.РежимРаботыПервогоЧисла.Выходной Тогда
				
				// После выходного
				Если РежимПослеВыходногоДня = Перечисления.РежимРаботыПослеВыходногоДня.Один Тогда
					ТекСтр["ЧислоМесяца"+стр] = "1";
				Иначе
					ТекСтр["ЧислоМесяца"+стр] = "2";
				КонецЕсли;
				
			ИначеЕсли РежимПервогоЧисла = Перечисления.РежимРаботыПервогоЧисла.Один Тогда
				
				// Чередование 1/2
				Если (Цел(ДеньЦикла / 5) % 2) = 0 Тогда
					ТекСтр["ЧислоМесяца"+стр] = "1";
				Иначе
					ТекСтр["ЧислоМесяца"+стр] = "2";
				КонецЕсли;
				
			ИначеЕсли РежимПервогоЧисла = Перечисления.РежимРаботыПервогоЧисла.Два Тогда
				
				Если (Цел(ДеньЦикла / 5) % 2) = 0 Тогда
					ТекСтр["ЧислоМесяца"+стр] = "2";
				Иначе
					ТекСтр["ЧислоМесяца"+стр] = "1";
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			ТекСтр["ЧислоМесяца"+стр] = "В";
		КонецЕсли;

	КонецЦикла;

	// Отсутствия
	Если ЗначениеЗаполнено(ОтсутствиеС) Тогда
		
		НачПериода = Число(Сред(ОтсутствиеС,1,2));
		КонПериода = Число(Сред(ОтсутствиеПо,1,2)); 
		
		Для стр = НачПериода По КонПериода Цикл
			ТекСтр["ЧислоМесяца"+стр] = Признак;
		КонецЦикла;
		
	КонецЕсли;

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

&НаСервере
Функция СоздатьРасшифровку(ТекСотрудник,ТекМесяц,ТекГод,ТекГрафикРабот,ОтсутствиеС,ОтсутствиеПо,ТекРежимПослеВыходногоДня,ТекРежимПервогоЧисла,ТекПорядковыйНомерДня)
	
	ТекРасшифровкаВ = Документы.РасшифровкаРаботы.ПустаяСсылка();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РасшифровкаРаботыКондуктора.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.РасшифровкаРаботыКондуктора КАК РасшифровкаРаботыКондуктора
		|ГДЕ
		|	РасшифровкаРаботыКондуктора.Месяц = &Месяц
		|	И РасшифровкаРаботыКондуктора.Год = &Год
		|	И РасшифровкаРаботыКондуктора.Сотрудник = &Сотрудник";
	
	Запрос.УстановитьПараметр("Год", ТекГод);
	Запрос.УстановитьПараметр("Месяц", ТекМесяц);
	Запрос.УстановитьПараметр("Сотрудник", ТекСотрудник);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		ТекРасшифровкаВ = Выборка.Ссылка;
	КонецЦикла;
	ТекПризнак="";
	Если ЗначениеЗаполнено(ТекРасшифровкаВ) Тогда
		ТекРасшифровка = ТекРасшифровкаВ.ПолучитьОбъект();
	Иначе
		ТекРасшифровка = Документы.РасшифровкаРаботыКондуктора.СоздатьДокумент();
		ТекРасшифровка.Год=ТекГод;
		ТекРасшифровка.Месяц=ТекМесяц;
		ТекРасшифровка.Сотрудник=ТекСотрудник;
		ТекРасшифровка.Дата=ТекущаяДата();
		НоваяСтрока = ТекРасшифровка.Расшифровка.Добавить();
		НоваяСтрока.ВидДеятельности=Перечисления.ВидДеятельности.Режим;
		//Если ТекРежимПервогоЧисла=Перечисления.РежимРаботыПервогоЧисла.ОдинДваВ Тогда
		Если ТекГрафикРабот=Перечисления.ГрафикРаботы.ПятьЧерезДва Тогда
			ЗаполнитьГрафикПятьЧерезДва(НоваяСтрока,ОтсутствиеС,ОтсутствиеПо,ТекРежимПослеВыходногоДня,ТекРежимПервогоЧисла,ТекПорядковыйНомерДня,ТекГрафикРабот,ТекПризнак,ТекМесяц,ТекГод); //Сучков
		Иначе
			ЗаполнитьГрафикЧетыреЧерезДва(НоваяСтрока,ОтсутствиеС,ОтсутствиеПо,ТекРежимПослеВыходногоДня,ТекРежимПервогоЧисла,ТекПорядковыйНомерДня,ТекГрафикРабот,ТекПризнак,ТекМесяц,ТекГод); //Сучков
		КонецЕсли;
		НоваяСтрокаРасписание= ТекРасшифровка.Расшифровка.Добавить();
		НоваяСтрокаРасписание.ВидДеятельности=Перечисления.ВидДеятельности.Расписание;
		НоваяСтрокаРасписание= ТекРасшифровка.Расшифровка.Добавить();
		НоваяСтрокаРасписание.ВидДеятельности=Перечисления.ВидДеятельности.Время;
		//КонецЕсли;
		ТекРасшифровка.Записать(РежимЗаписиДокумента.Проведение);
	КонецЕсли;

	Возврат ТекРасшифровка;
КонецФункции

&НаСервере
Функция ВернутьЧасыНорм()
	ТекНормоЧасы=0;
	ТекНормоДни = 0;
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	НормоЧасы.НормЧас КАК НормЧас,
	|	НормоЧасы.КолСмен КАК КолСмен
	|ИЗ
	|	РегистрСведений.НормоЧасы КАК НормоЧасы
	|ГДЕ
	|	НормоЧасы.Год = &Год
	|	И НормоЧасы.Месяц = &Месяц";
	
	Запрос.УстановитьПараметр("Год", Объект.Год);
	Запрос.УстановитьПараметр("Месяц", Объект.Месяц);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ТекНормоДни = Выборка.КолСмен;
		ТекНормоЧасы = Выборка.НормЧас;
	КонецЦикла;
	НормоДниЧасы = Новый Структура;
	НормоДниЧасы.Вставить("НормоДни", ТекНормоДни);
	НормоДниЧасы.Вставить("НормоЧасы", ТекНормоЧасы);
	Возврат НормоДниЧасы;
	
КонецФункции


&НаСервере
Функция ВернутьКоличествоСмен(НоваяСтрока)
	ИдОтпуска = Ложь;
	КолСмен=0;
	НормоЧасыДни = ВернутьЧасыНорм();
	ТекСтр = НоваяСтрока;
	Для стр=1 по 31 Цикл
		Если (ТекСтр["ЧислоМесяца"+стр]="1") или (ТекСтр["ЧислоМесяца"+стр]="2") или (ТекСтр["ЧислоМесяца"+стр]="Д") Тогда
			КолСмен=КолСмен+1;
		КонецЕсли;
		Если (ТекСтр["ЧислоМесяца"+стр]="О") Тогда
			ИдОтпуска = Истина
		КонецЕсли;	
	КонецЦикла;
	Если ИдОтпуска = Истина Тогда
		НормоЧасы = НормоЧасыДни.НормоЧасы / НормоЧасыДни.НормоДни * КолСмен
	Иначе	
		НормоЧасы = НормоЧасыДни.НормоЧасы 
	КонецЕсли;
	НормоДниЧасы = Новый Структура;
	НормоДниЧасы.Вставить("НормоДни", КолСмен);
	НормоДниЧасы.Вставить("НормоЧасы",НормоЧасы);
	
	Возврат НормоДниЧасы;

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



&НаСервере
Процедура ЗаполнитьНаСервере(ТекТабНомер)
	
	Объект.КоличествоСмен.Очистить();
	Объект.График.Очистить();
	
	ТекСписокТН= Новый СписокЗначений;
	ном=0;
	Реквизиты = СтрЗаменить(ТекТабНомер,",",Символы.ПС);
	
	Для ТекСтр=1 По СтрЧислоСтрок(Реквизиты) Цикл
		ТекСтрока = СтрПолучитьСтроку(Реквизиты,ТекСтр);
		ном=ном+1;
		ТекСписокТН.Вставить(ном-1,ТекСтрока);
	КонецЦикла;
		
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РежимРаботыКондуктораСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
		|	РежимРаботыКондуктораСрезПоследних.ТабНомер КАК ТабНомер,
		|	Сотрудники.Ссылка КАК Сотрудник,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимРаботы КАК РежимРаботы,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.ОтсутствиеС КАК ОтсутствиеС,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимПослеВыходногоДня КАК РежимПослеВыходногоДня,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.ПорядковыйНомерДня КАК ПорядковыйНомерДня,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимРаботыПервогоЧисла КАК РежимПервогоЧисла,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.ОтсутствиеПо КАК ОтсутствиеПо,
		|	РежимРаботыКондуктораСрезПоследних.Регистратор.Признак КАК Признак
		|ИЗ
		|	РегистрСведений.РежимРаботыКондуктора.СрезПоследних(&ТекДата, ) КАК РежимРаботыКондуктораСрезПоследних
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
		|		ПО РежимРаботыКондуктораСрезПоследних.ТабНомер = Сотрудники.Код
		|ГДЕ
		|	РежимРаботыКондуктораСрезПоследних.ТабНомер В(&ТабНомер)
		|	И РежимРаботыКондуктораСрезПоследних.Год = &Год
		|	И РежимРаботыКондуктораСрезПоследних.Месяц = &Месяц";
	
	Запрос.УстановитьПараметр("ТабНомер", ТекСписокТН);
	Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
	Запрос.УстановитьПараметр("Месяц", Объект.Месяц);
	Запрос.УстановитьПараметр("Год", Объект.Год);

	
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = Объект.График.Добавить();	
		НоваяСтрока.Код= Выборка.Код;
		НоваяСтрока.Сотрудник = Выборка.Сотрудник;
		Если Выборка.ГрафикРаботы=Перечисления.ГрафикРаботы.ПятьЧерезДва Тогда
			ЗаполнитьГрафикПятьЧерезДва(НоваяСтрока,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня,Выборка.ГрафикРаботы,Выборка.Признак,Объект.Месяц,Объект.Год); //Сучков
		Иначе
			ЗаполнитьГрафикЧетыреЧерезДва(НоваяСтрока,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня,Выборка.ГрафикРаботы,Выборка.Признак,Объект.Месяц,Объект.Год); //Сучков
		КонецЕсли;
		
		ТекРасшифровка = СоздатьРасшифровку(Выборка.Сотрудник,Объект.Месяц,Объект.Год,Выборка.ГрафикРаботы,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня);
		НоваяСтрока.Расшифровка = ТекРасшифровка.ссылка;
		
		
		КоличествоСтр= Объект.График.Количество();
		
		НоваяСтрока.ЧасыНорм = ВернутьЧасыНорм();
		
		НоваяСтрока.КоличествоСмен = ВернутьКоличествоСмен(НоваяСтрока);
		
	КонецЦикла;
	
	
КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)
	
ТекТабНомер=0;
Если ВвестиСтроку(ТекТабНомер," Введите список таб. номеров через запятую ! ",0,Истина) Тогда
	ТекущаяСтрока = Объект.График.Получить(Элементы.График.ТекущаяСтрока);
	ТекущийСотрудник=ТекущаяСтрока.Сотрудник;
	Сообщить(ТекТабНомер);
КонецЕсли;	

ЗаполнитьНаСервере(ТекТабНомер);


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

&НаСервере
Процедура ГрафикПриОкончанииРедактированияНаСервере()
	//КолСмен=0;
	//Для стр=1 По 31 Цикл
	//	ТекСтр=Объект.График.Получить(Элементы.График.ТекущаяСтрока);
	//	Если ТекСтр["ЧислоМесяца"+Строка(стр)]<>"В" Тогда
	//		КолСмен = КолСмен+1;
	//	КонецЕсли;
	//КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ГрафикПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	ГрафикПриОкончанииРедактированияНаСервере();
КонецПроцедуры

///////////При нажатии на кнопки заполнить
&НаСервере
Процедура ЗаполнитьГрафикНаСервере()
	Объект.КоличествоСмен.Очистить();
	Объект.График.Очистить();
	
	//ТекСписокТН= Новый СписокЗначений;
	//ном=0;
	//Реквизиты = СтрЗаменить(ТекТабНомер,",",Символы.ПС);
	//
	//Для ТекСтр=1 По СтрЧислоСтрок(Реквизиты) Цикл
	//	ТекСтрока = СтрПолучитьСтроку(Реквизиты,ТекСтр);
	//	ном=ном+1;
	//	ТекСписокТН.Вставить(ном-1,ТекСтрока);
	//КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	РежимРаботыКондуктораСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
	|	РежимРаботыКондуктораСрезПоследних.ТабНомер КАК ТабНомер,
	|	Сотрудники.Ссылка КАК Сотрудник,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимРаботы КАК РежимРаботы,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.ОтсутствиеС КАК ОтсутствиеС,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимПослеВыходногоДня КАК РежимПослеВыходногоДня,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.ПорядковыйНомерДня КАК ПорядковыйНомерДня,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.ОтсутствиеПо КАК ОтсутствиеПо,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.РежимРаботыПервогоЧисла КАК РежимПервогоЧисла,
	|	Сотрудники.Наименование КАК Наименование,
	|	РежимРаботыКондуктораСрезПоследних.Регистратор.Признак КАК Признак
	|ИЗ
	|	РегистрСведений.РежимРаботыКондуктора.СрезПоследних(&ТекДата, ) КАК РежимРаботыКондуктораСрезПоследних
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
	|		ПО РежимРаботыКондуктораСрезПоследних.ТабНомер = Сотрудники.Код
	|ГДЕ
	|	РежимРаботыКондуктораСрезПоследних.Месяц = &Месяц
	|	И РежимРаботыКондуктораСрезПоследних.Год = &Год
	|
	|УПОРЯДОЧИТЬ ПО
	|	Наименование";
	
	//Запрос.УстановитьПараметр("ТабНомер", ТекСписокТН);
	Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
	Запрос.УстановитьПараметр("Месяц", Объект.Месяц);
	Запрос.УстановитьПараметр("Год", Объект.Год);

	
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = Объект.График.Добавить();	
		НоваяСтрока.Код= Выборка.Код;
		НоваяСтрока.Сотрудник = Выборка.Сотрудник;
		Если Выборка.ГрафикРаботы=Перечисления.ГрафикРаботы.ПятьЧерезДва Тогда
			ЗаполнитьГрафикПятьЧерезДва(НоваяСтрока,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня,Выборка.ГрафикРаботы,Выборка.Признак,Объект.Месяц,Объект.Год); //Сучков);
		Иначе
			ЗаполнитьГрафикЧетыреЧерезДва(НоваяСтрока,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня,Выборка.ГрафикРаботы,Выборка.Признак,Объект.Месяц,Объект.Год); //Сучков);
		КонецЕсли;
		
		ТекРасшифровка = СоздатьРасшифровку(Выборка.Сотрудник,Объект.Месяц,Объект.Год,Выборка.ГрафикРаботы,Выборка.ОтсутствиеС,Выборка.ОтсутствиеПо,Выборка.РежимПослеВыходногоДня,Выборка.РежимПервогоЧисла,Выборка.ПорядковыйНомерДня);
		НоваяСтрока.Расшифровка = ТекРасшифровка.ссылка;
		
		
		КоличествоСтр= Объект.График.Количество();
		
		//НоваяСтрока.КоличествоСмен=КолСмен;
		НормаДниЧасы = ВернутьКоличествоСмен(НоваяСтрока);
		НоваяСтрока.КоличествоСмен = НормаДниЧасы.НормоДни;
		НоваяСтрока.ЧасыНорм = НормаДниЧасы.НормоЧасы;

	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьГрафик(Команда)
	ЗаполнитьГрафикНаСервере();
	КоличествоСменК();
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
	
	ТекДатаЗапретаРедактирования = КонецДня(Константы.ДатаЗапретаРедактирования.Получить());
	ДатаДокумента = Объект.Дата;
	
	Если ДатаДокумента<=ТекДатаЗапретаРедактирования Тогда
		ЭтотОбъект.ТолькоПросмотр=Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ГрафикПередУдалением(Элемент, Отказ)
	Режим = РежимДиалогаВопрос.ДаНет;
	Ответ = Вопрос("Удалить строку документа ?",Режим,0);
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		Отказ= Истина;
	КонецЕсли;

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