Выработка сотрудников / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ЗначениеРазрешено(Подразделение)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

#КонецОбласти

#Область Проведение

// Описывает учетные механизмы используемые в документе для регистрации в механизме проведения.
//
// Параметры:
//  МеханизмыДокумента - Массив - список имен учетных механизмов, для которых будет выполнена
//              регистрация в механизме проведения.
//
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
	
	//++ Локализация
	МеханизмыДокумента.Добавить("ИнтеграцияБЗК");
	//-- Локализация
	МеханизмыДокумента.Добавить("Производство");
	МеханизмыДокумента.Добавить("РеестрДокументов");
	МеханизмыДокумента.Добавить("УчетНЗП");
	
КонецПроцедуры

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

#КонецОбласти

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	ИсправлениеДокументов.ДобавитьКомандуИсправление(КомандыСозданияНаОсновании, ПустаяСсылка().Метаданные());
	ИсправлениеДокументов.ДобавитьКомандуСторно(КомандыСозданияНаОсновании, ПустаяСсылка().Метаданные());
	
КонецПроцедуры

// Добавляет команду создания документа "Выработка сотрудников".
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
// Возвращаемое значение:
// 	Неопределено, СтрокаТаблицыЗначений - описание добавленной команды
//
Функция ДобавитьКомандуСоздатьНаОснованииСозданиеВыработкиСотрудников(КомандыСозданияНаОсновании) Экспорт
	
	Если ПравоДоступа("Добавление", Метаданные.Документы.ВыработкаСотрудников) Тогда
		КомандаСоздатьНаОсновании						= КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Обработчик			= "СозданиеНаОснованииУТКлиент.СозданиеВыработкиСотрудников";
		КомандаСоздатьНаОсновании.Менеджер				= "Документ.ВыработкаСотрудников";
		КомандаСоздатьНаОсновании.Идентификатор			= "СозданиеВыработкиСотрудников";
		КомандаСоздатьНаОсновании.Представление			= НСтр("ru = 'Выработка сотрудников'");
		КомандаСоздатьНаОсновании.РежимЗаписи			= "Проводить";
		КомандаСоздатьНаОсновании.ФункциональныеОпции	= "ИспользоватьПроизводство,ИспользоватьУправлениеРемонтами,ИспользоватьУчетПрочихДоходовРасходов";
		КомандаСоздатьНаОсновании.МножественныйВыбор	= Истина;
		
		Возврат КомандаСоздатьНаОсновании;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
//   Параметры - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
КонецПроцедуры

// Формирует документы Выработка сотрудников за период по переданным организациям. Выполняет диагностику и регистрирует
// проблему, если обработаны не все распоряжения. Вызывается из формы закрытия месяца.
//
// Параметры:
//   ПараметрыОбработчика - Структура - параметры закрытия месяца.
//
Процедура ОформитьПриЗакрытииМесяца(ПараметрыОбработчика) Экспорт
	
	СтруктураОтбора = Новый Структура();
	СтруктураОтбора.Вставить("Организация", ПараметрыОбработчика.ПараметрыРасчета.МассивОрганизаций);
	СтруктураОтбора.Вставить("НачалоПериода", НачалоМесяца(ПараметрыОбработчика.ПараметрыРасчета.ПериодРегистрации));
	СтруктураОтбора.Вставить("КонецПериода", КонецМесяца(ПараметрыОбработчика.ПараметрыРасчета.ПериодРегистрации));
	СтруктураОтбора.Вставить("ВключатьВПериодВыполненияРабот", Истина);
	
	АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено);
	СформироватьДокументы(СтруктураОтбора, АдресВХранилище, Истина);
	Результат = ПолучитьИзВременногоХранилища(АдресВХранилище);
	
	Для Каждого Строка Из Результат.СписокОшибок Цикл 
		
		ПараметрыРегистрации = ЗакрытиеМесяцаСервер.ИнициализироватьПараметрыРегистрацииПроблемыРасчета(
			Справочники.ОперацииЗакрытияМесяца.ОформлениеВыработкиСотрудников,
			Строка.Организация,
			НачалоМесяца(ПараметрыОбработчика.ПараметрыРасчета.ПериодРегистрации));
		
		ЗакрытиеМесяцаСервер.ЗарегистрироватьПроблемуВыполненияРасчета(
			ПараметрыРегистрации,
			НСтр("ru='Рекомендуется оформить вручную из списка к оформлению. При автоматическом оформлении диагностированы ошибки'", ОбщегоНазначения.КодОсновногоЯзыка()),
			,
			Строка.ТекстОшибки);
			
	КонецЦикла;
	
КонецПроцедуры

// Формирует документы по переданному отбору и помещает их в безопасное хранилище
// 
// Параметры:
// 	СтруктураОтбора - Структура - Описание:
// * Организация - СправочникСсылка.Организации - отбор по организации
// * Подразделение - СправочникСсылка.СтруктураПредприятия - отбор по подразделению
// * ВидНаряда - ПеречислениеСсылка.ВидыБригадныхНарядов - отбор по виду наряда
// * Бригада - СправочникСсылка.Бригады - отбор по бригаде
// * НачалоПериода - Дата
// 	АдресРезультата - Строка - адрес, по которому помещается служебная информация: список ошибок и количество документов
// 	УдалятьДокументыСОшибками - Булево- если Истина, то документы, которые не удалось провести, удаляются
//
Процедура СформироватьДокументы(СтруктураОтбора, АдресРезультата, УдалятьДокументыСОшибками = Неопределено) Экспорт
	
	Замер = ОценкаПроизводительности.НачатьЗамерДлительнойОперации("Документ.ВыработкаСотрудников.МодульМенеджера.СформироватьДокументы");
	
	Результат = Новый Структура;
	
	СписокДокументов = Новый СписокЗначений;
	СписокОшибок = Новый Массив;
	
	СтруктураШапки = Новый Структура("Бригада,ВидНаряда,Организация,НачалоПериода,КонецПериода,Подразделение");
	ТекущийДокумент = Неопределено;
	
	Выборка = ТрудозатратыКОформлению(СтруктураОтбора).Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		Если (СтруктураШапки.Бригада <> Выборка.Бригада И ЗначениеЗаполнено(Выборка.Бригада))
			Или СтруктураШапки.ВидНаряда <> Выборка.ВидНаряда
			Или СтруктураШапки.Организация <> Выборка.Организация
			Или СтруктураШапки.НачалоПериода <> Выборка.НачалоПериода
			Или СтруктураШапки.КонецПериода <> Выборка.КонецПериода
			Или СтруктураШапки.Подразделение <> Выборка.Подразделение Тогда
			
			ЗаполнитьЗначенияСвойств(СтруктураШапки, Выборка);
			
			ЗаписатьНовыйДокумент(ТекущийДокумент, СписокДокументов, СписокОшибок);
			
			ТекущийДокумент = Документы.ВыработкаСотрудников.СоздатьДокумент();
			ТекущийДокумент.ПолучитьСсылкуНового();
			
			ТекущийДокумент.Заполнить(Выборка);
			
			Если СтруктураОтбора.Свойство("ВключатьВПериодВыполненияРабот") 
				И СтруктураОтбора.ВключатьВПериодВыполненияРабот Тогда
				ТекущийДокумент.Дата = Выборка.КонецПериода;
				ТекущийДокумент.Месяц = НачалоМесяца(Выборка.ДатаВыполненияРабот);
			Иначе
				ТекущийДокумент.Дата = ТекущаяДатаСеанса();
				ТекущийДокумент.Месяц = НачалоМесяца(ТекущаяДатаСеанса());
			КонецЕсли;
			
			ТекущийДокумент.УчетТрудозатратВРазрезеСотрудников = ПроизводствоСервер.ИспользуетсяУчетТрудозатратВРазрезеСотрудников(ТекущийДокумент.Месяц);
			
		КонецЕсли;
		
		НоваяСтрока = ТекущийДокумент.ВидыРабот.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
		
	КонецЦикла;
	
	ЗаписатьНовыйДокумент(ТекущийДокумент, СписокДокументов, СписокОшибок);
	
	Если УдалятьДокументыСОшибками = Истина Тогда
		
		ОбработанныеДокументы = Новый Соответствие;
		Для Каждого Строка Из СписокОшибок Цикл
			
			Если Строка.ТипОшибки = "ДокументСуществует"
				Или Не ОбработанныеДокументы[Строка.Документ] = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			ОбработанныеДокументы.Вставить(Строка.Документ, Истина);
			
			НачатьТранзакцию();
			
			Попытка
				
				Блокировка = Новый БлокировкаДанных;
				ЭлементБлокировки = Блокировка.Добавить("Документ.ВыработкаСотрудников");
				ЭлементБлокировки.УстановитьЗначение("Ссылка", Строка.Документ);
				ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
				
				Блокировка.Заблокировать();
				ДокументОбъект = Строка.Документ.ПолучитьОбъект(); // ДокументОбъект.ВыработкаСотрудников
				ДокументОбъект.Удалить();
				ЗафиксироватьТранзакцию();
				
			Исключение
				
				ОтменитьТранзакцию();
				ДобавитьОшибкуАвтоматическогоСоздания(ДокументОбъект, СписокОшибок, "Заполнение", ОписаниеОшибки());
				
			КонецПопытки;
			
		КонецЦикла;
		
	КонецЕсли;
	
	ПолучитьСообщенияПользователю(Истина);
	
	Владелец = Пользователи.АвторизованныйПользователь();
	
	УстановитьПривилегированныйРежим(Истина);
	ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, СписокДокументов.ВыгрузитьЗначения(), "ФормаСозданияВыработкиСотрудников");
	УстановитьПривилегированныйРежим(Ложь);
	
	Результат.Вставить("СписокОшибок", СписокОшибок);
	Результат.Вставить("КоличествоДокументов", СписокДокументов.Количество());
	ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
	
	ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(Замер, СписокДокументов.Количество());
	
КонецПроцедуры

// Заполняет таблицу выполненных работ по остаткам к оформлению в соответствии с отбором.
//
// Параметры:
//  Объект			- ДокументОбъект.ВыработкаСотрудников, ДанныеФормыСтруктура - Документ, который нужно заполнить
//  СтруктураОтбора - Структура - структура параметров заполнения.
//
Процедура ЗаполнитьВидыРаботПоОстаткам(Объект, СтруктураОтбора) Экспорт
	
	КОформлению = ТрудозатратыКОформлению(СтруктураОтбора);
	
	Объект.ВидыРабот.Загрузить(КОформлению.Выгрузить());
	
КонецПроцедуры

// Возвращает результат запроса по остаткам трудозатрат к оформлению в соответствии с отбором.
//
// Параметры:
// 	СтруктураОтбора	- Структура - Описание:
// * Организация	- СправочникСсылка.Организации - отбор по организации
// * Подразделения	- СправочникСсылка.СтруктураПредприятия - отбор по подразделению
// * ВидНаряда		- ПеречислениеСсылка.ВидыБригадныхНарядов - отбор по виду наряда
// * Бригада		- СправочникСсылка.Бригады - отбор по бригаде
// * Работник		- СправочникСсылка.ФизическиеЛица - отбор по бригаде
// * Сотрудник		- СправочникСсылка - отбор по сотрудникам
// * Сотрудники		- Массив из СправочникСсылка - отбор по сотрудникам
// * Распоряжения	- Массив - отбор по распоряжениям
// * ВидыРабот		- Массив - отбор по видам работ
//	МенеджерВременныхТаблиц	- МенеджерВременныхТаблиц - менеджер, если результат требуется поместить во временную таблицу.
//
// Возвращаемое значение:
// 	РезультатЗапроса   - трудозатраты к оформлению.
//
Функция ТрудозатратыКОформлению(СтруктураОтбора, МенеджерВременныхТаблиц = Неопределено) Экспорт
	
	Перем Организации, Подразделения, Бригады, Работники, ВидыНарядов, Распоряжения, ВидыРабот,
		Периоды, НачалоПериода, КонецПериода, Периодичность, СворачиватьРаспоряжения;
	
	Если СтруктураОтбора.Свойство("Организация") И ЗначениеЗаполнено(СтруктураОтбора.Организация) Тогда
		Если ТипЗнч(СтруктураОтбора.Организация) = Тип("Массив") Тогда
			Организации = СтруктураОтбора.Организация;
		Иначе
			Организации = Новый Массив;
			Организации.Добавить(СтруктураОтбора.Организация);
		КонецЕсли;
	ИначеЕсли НЕ СтруктураОтбора.Свойство("Организации", Организации) Тогда
		Организации = Новый Массив;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Подразделение") И ЗначениеЗаполнено(СтруктураОтбора.Подразделение) Тогда
		Подразделения = Новый Массив;
		Подразделения.Добавить(СтруктураОтбора.Подразделение);
	ИначеЕсли НЕ СтруктураОтбора.Свойство("Подразделения", Подразделения) Тогда
		Подразделения = Новый Массив;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("ВидНаряда") Тогда
		ВидыНарядов = Новый Массив;
		ВидыНарядов.Добавить(СтруктураОтбора.ВидНаряда);
	ИначеЕсли НЕ СтруктураОтбора.Свойство("ВидыНарядов", ВидыНарядов) Тогда
		ВидыНарядов = Новый Массив;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Бригада") И ЗначениеЗаполнено(СтруктураОтбора.Бригада) Тогда
		Бригады = Новый Массив;
		Бригады.Добавить(СтруктураОтбора.Бригада);
	ИначеЕсли НЕ СтруктураОтбора.Свойство("Бригады", Бригады) Тогда
		Бригады = Новый Массив;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Работник") И ЗначениеЗаполнено(СтруктураОтбора.Работник) Тогда
		Работники = Новый Массив;
		Работники.Добавить(СтруктураОтбора.Работник);
	ИначеЕсли НЕ СтруктураОтбора.Свойство("Работники", Работники) Тогда
		Работники = Новый Массив;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Сотрудник") И ЗначениеЗаполнено(СтруктураОтбора.Сотрудник) Тогда
		Работники.Добавить(СтруктураОтбора.Сотрудник);
	ИначеЕсли СтруктураОтбора.Свойство("Сотрудники") Тогда
		Для Каждого Сотрудник Из СтруктураОтбора.Сотрудники Цикл
			Работники.Добавить(Сотрудник);
		КонецЦикла;
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("Распоряжения", Распоряжения) Тогда
		Распоряжения = Новый Массив;
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("ВидыРабот", ВидыРабот) Тогда
		ВидыРабот = Новый Массив;
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("Периоды", Периоды) Тогда
		Периоды = Новый Массив;
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("НачалоПериода", НачалоПериода) Тогда
		НачалоПериода = Дата(1,1,1);
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("КонецПериода", КонецПериода) Тогда
		КонецПериода = Дата(3999,1,1);
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("Периодичность", Периодичность) Тогда
		Периодичность = Перечисления.ПериодичностьОформленияВыработкиСотрудников.ПустаяСсылка();
	КонецЕсли;
	
	Если НЕ СтруктураОтбора.Свойство("СворачиватьРаспоряжения", СворачиватьРаспоряжения) Тогда
		СворачиватьРаспоряжения = Ложь;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	
	Если МенеджерВременныхТаблиц <> Неопределено Тогда
		Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Иначе
		Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("ДокументИсключение") Тогда
		Запрос.УстановитьПараметр("ДокументИсключение", СтруктураОтбора.ДокументИсключение);
	Иначе
		Запрос.УстановитьПараметр("ДокументИсключение", Неопределено);
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("ВключатьВПериодВыполненияРабот") Тогда
		Запрос.УстановитьПараметр("ВключатьВПериодВыполненияРабот", СтруктураОтбора.ВключатьВПериодВыполненияРабот);
	Иначе
		Запрос.УстановитьПараметр("ВключатьВПериодВыполненияРабот", Истина);
	КонецЕсли;
	
	СтруктурныйОтбор = Новый ТаблицаЗначений();
	СтруктурныйОтбор.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
	СтруктурныйОтбор.Колонки.Добавить("ВидНаряда", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыБригадныхНарядов"));
	СтруктурныйОтбор.Колонки.Добавить("Бригада", Новый ОписаниеТипов("СправочникСсылка.Бригады"));
	
	Если СтруктураОтбора.Свойство("СтруктурныйОтбор") Тогда
		
		Для Каждого Структура Из СтруктураОтбора.СтруктурныйОтбор Цикл
			Строка = СтруктурныйОтбор.Добавить();
			ЗаполнитьЗначенияСвойств(Строка, Структура);
		КонецЦикла;
		
		Запрос.УстановитьПараметр("БезОтбораПоВидамНарядовИПодразделениям", НЕ ЗначениеЗаполнено(СтруктураОтбора.СтруктурныйОтбор));
	Иначе
		Запрос.УстановитьПараметр("БезОтбораПоВидамНарядовИПодразделениям", Истина);
	КонецЕсли;
	
	Запрос.УстановитьПараметр("СтруктурныйОтбор", СтруктурныйОтбор);
	
	Запрос.УстановитьПараметр("Организации",                   Организации);
	Запрос.УстановитьПараметр("БезОтбораПоОрганизациям",       Организации.Количество() = 0);
	
	Запрос.УстановитьПараметр("Подразделения",                 Подразделения);
	Запрос.УстановитьПараметр("БезОтбораПоПодразделениям",     Подразделения.Количество() = 0);
	
	Запрос.УстановитьПараметр("ВидыНарядов",                   ВидыНарядов);
	Запрос.УстановитьПараметр("БезОтбораПоВидамНарядов",       ВидыНарядов.Количество() = 0);
	
	Запрос.УстановитьПараметр("Бригады",                       Бригады);
	Запрос.УстановитьПараметр("БезОтбораПоБригадам",           Бригады.Количество() = 0);
	
	Запрос.УстановитьПараметр("Работники",                     Работники);
	Запрос.УстановитьПараметр("БезОтбораПоРаботникам",         Работники.Количество() = 0);
	
	Запрос.УстановитьПараметр("Периоды",                       Периоды);
	Запрос.УстановитьПараметр("БезОтбораПоПериодам",           Периоды.Количество() = 0);
	
	Запрос.УстановитьПараметр("Распоряжения",                  Распоряжения);
	Запрос.УстановитьПараметр("БезОтбораПоРаспоряжениям",      Распоряжения.Количество() = 0);
	
	Запрос.УстановитьПараметр("ВидыРабот",                     ВидыРабот);
	Запрос.УстановитьПараметр("БезОтбораПоВидамРабот",         ВидыРабот.Количество() = 0);
	
	Запрос.УстановитьПараметр("НачалоПериода",                 НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода",                  КонецПериода);
	
	Запрос.УстановитьПараметр("Периодичность",                 Периодичность);
	Запрос.УстановитьПараметр("СворачиватьРаспоряжения",       СворачиватьРаспоряжения);
	
	Запрос.УстановитьПараметр("АналитическийУчетПоГруппамПродукции", ПолучитьФункциональнуюОпцию("АналитическийУчетПоГруппамПродукции"));
	Запрос.УстановитьПараметр("ХранитьОперацииВРесурсныхСпецификациях", ПолучитьФункциональнуюОпцию("ХранитьОперацииВРесурсныхСпецификациях"));
	Запрос.УстановитьПараметр("УчетТрудозатратВРазрезеСотрудников", ПроизводствоСервер.ИспользуетсяУчетТрудозатратВРазрезеСотрудников(
		?(ЗначениеЗаполнено(НачалоПериода), НачалоПериода, ТекущаяДатаСеанса())));
	Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
	
	ИспользоватьРазрядыРасценокРаботСотрудников = Истина;
	Запрос.УстановитьПараметр("ИспользоватьРазрядыРасценокРаботСотрудников", ИспользоватьРазрядыРасценокРаботСотрудников);
	
	//++ Локализация
	
	
	//-- Локализация
	
	#Область Остатки
	
	ТекстЗапроса = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ДД.Организация КАК Организация,
	|	ДД.ПартияПроизводства КАК ПартияПроизводства,
	|	ДД.Распоряжение КАК Распоряжение,
	|	ДД.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|	ДД.ВидРабот КАК ВидРабот,
	|	ДД.Подразделение КАК Подразделение,
	|	ДД.Исполнитель КАК Исполнитель,
	|	СУММА(ДД.КоличествоПриход - ДД.КоличествоРасход) КАК КоличествоОборот
	|ПОМЕСТИТЬ Обороты
	|ИЗ
	|	РегистрНакопления.ТрудозатратыКОформлению.Обороты(
	|			&НачалоПериода,
	|			&КонецПериода,,
	|			(&БезОтбораПоОрганизациям
	|					ИЛИ Организация В (&Организации))
	|				И (&БезОтбораПоРаспоряжениям
	|					ИЛИ Распоряжение В (&Распоряжения))
	|				И (&БезОтбораПоВидамРабот
	|					ИЛИ ВидРабот В (&ВидыРабот))
	|				И (&БезОтбораПоПодразделениям
	|					ИЛИ Подразделение В (&Подразделения))
	|				И (&БезОтбораПоБригадам
	|					ИЛИ Исполнитель В (&Бригады)
	|					ИЛИ ТИПЗНАЧЕНИЯ(Исполнитель) В(
	//++ Локализация
	|							ТИП(Справочник.Сотрудники),
	//-- Локализация
	|							ТИП(Справочник.ФизическиеЛица)))
	|				И (&БезОтбораПоРаботникам
	|					ИЛИ Исполнитель В (&Работники)
	|					ИЛИ ТИПЗНАЧЕНИЯ(Исполнитель) = ТИП(Справочник.Бригады))
	|	) КАК ДД
	|
	|СГРУППИРОВАТЬ ПО
	|	ДД.Организация,
	|	ДД.ПартияПроизводства,
	|	ДД.Распоряжение,
	|	ДД.КодСтрокиРаспоряжения,
	|	ДД.ВидРабот,
	|	ДД.Подразделение,
	|	ДД.Исполнитель
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Организация,
	|	ПартияПроизводства,
	|	Распоряжение,
	|	КодСтрокиРаспоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	// Получим распоряжения, по которым были оформлены исправления с сохранением партии производства.
	// Если исправлений не было, то количество к оформлению получается по актуальным остаткам,
	// если было, то по оборотам за период.
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Обороты.Организация           КАК Организация,
	|	Обороты.ПартияПроизводства    КАК ПартияПроизводства,
	|	Обороты.Распоряжение          КАК Распоряжение,
	|	Обороты.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения
	|ПОМЕСТИТЬ РаспоряженияСИсправлением
	|ИЗ
	|	Обороты КАК Обороты
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПроизводствоБезЗаказа КАК РеквизитыПбЗ
	|	ПО РеквизитыПбЗ.Ссылка = Обороты.Распоряжение
	|	И РеквизитыПбЗ.ИсправлениеСохраняетПартииПроизводства
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТрудозатратыКОформлению КАК ТрудозатратыКОформлению
	|	ПО ТрудозатратыКОформлению.Организация = Обороты.Организация
	|	И ТрудозатратыКОформлению.ПартияПроизводства = Обороты.ПартияПроизводства
	|	И ТрудозатратыКОформлению.Распоряжение = Обороты.Распоряжение
	|	И ТрудозатратыКОформлению.КодСтрокиРаспоряжения = Обороты.КодСтрокиРаспоряжения
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК ДокументыСторно
	|	ПО ДокументыСторно.Ссылка = ТрудозатратыКОформлению.Регистратор
	|	И ДокументыСторно.СторноИсправление
	|	И ДокументыСторно.Проведен
	|	И НЕ ДокументыСторно.ДополнительнаяЗапись
	|
	|ГДЕ
	|	НЕ ТрудозатратыКОформлению.Количество = 0
	|
	|СГРУППИРОВАТЬ ПО
	|	Обороты.Организация,
	|	Обороты.ПартияПроизводства,
	|	Обороты.Распоряжение,
	|	Обороты.КодСтрокиРаспоряжения
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Организация,
	|	ПартияПроизводства,
	|	Распоряжение,
	|	КодСтрокиРаспоряжения
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ТрудозатратыКОформлению.Периодичность КАК Периодичность,
	|	ТрудозатратыКОформлению.ВидРабот КАК ВидРабот,
	|	ТрудозатратыКОформлению.Организация КАК Организация,
	|	ТрудозатратыКОформлению.Распоряжение КАК Распоряжение,
	|	ТрудозатратыКОформлению.Исполнитель КАК Исполнитель,
	|	ТрудозатратыКОформлению.Подразделение КАК Подразделение,
	|	ТрудозатратыКОформлению.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|	ТрудозатратыКОформлению.Статус КАК Статус,
	|	МАКСИМУМ(ТрудозатратыКОформлению.ЕстьИсправления) КАК ЕстьИсправления,
	|	СУММА(ТрудозатратыКОформлению.Количество) КАК Количество
	|ПОМЕСТИТЬ Остатки
	|ИЗ
	|	(ВЫБРАТЬ
	|		ВЫБОР
	|			КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПустаяСсылка)
	|				ТОГДА СпрПодразделения.ПериодичностьОформленияВыработки
	|			ИНАЧЕ &Периодичность
	|		КОНЕЦ КАК Периодичность,
	|		ТрудозатратыКОформлению.ВидРабот КАК ВидРабот,
	|		ТрудозатратыКОформлению.КоличествоОстаток КАК Количество,
	|		ТрудозатратыКОформлению.Организация КАК Организация,
	|		ТрудозатратыКОформлению.Распоряжение КАК Распоряжение,
	|		ТрудозатратыКОформлению.Исполнитель КАК Исполнитель,
	|		ТрудозатратыКОформлению.Подразделение КАК Подразделение,
	|		ТрудозатратыКОформлению.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|		ВЫБОР
	|			КОГДА ИСТИНА
	|				ТОГДА НЕОПРЕДЕЛЕНО
	|		КОНЕЦ КАК Статус,
	|		ЛОЖЬ КАК ЕстьИсправления
	|	ИЗ
	|		РегистрНакопления.ТрудозатратыКОформлению.Остатки(
	|			,
	|			(Организация, Распоряжение, ВидРабот, Подразделение, Исполнитель) В(
	|				ВЫБРАТЬ
	|					Обороты.Организация,
	|					Обороты.Распоряжение,
	|					Обороты.ВидРабот,
	|					Обороты.Подразделение,
	|					Обороты.Исполнитель
	|				ИЗ
	|					Обороты КАК Обороты)) КАК ТрудозатратыКОформлению
	|		
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтруктураПредприятия КАК СпрПодразделения
	|		ПО СпрПодразделения.Ссылка = ТрудозатратыКОформлению.Подразделение
	|		
	// Исключаем распоряжения с исправлениями.
	|		ЛЕВОЕ СОЕДИНЕНИЕ РаспоряженияСИсправлением КАК РаспоряженияСИсправлением
	|		ПО РаспоряженияСИсправлением.Организация = ТрудозатратыКОформлению.Организация
	|		И РаспоряженияСИсправлением.ПартияПроизводства = ТрудозатратыКОформлению.ПартияПроизводства
	|		И РаспоряженияСИсправлением.Распоряжение = ТрудозатратыКОформлению.Распоряжение
	|		И РаспоряженияСИсправлением.КодСтрокиРаспоряжения = ТрудозатратыКОформлению.КодСтрокиРаспоряжения
	|		
	|	ГДЕ
	// Исключаем распоряжения с исправлениями.
	|		РаспоряженияСИсправлением.ПартияПроизводства ЕСТЬ NULL
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	// Распоряжения с исправлениями.
	|	ВЫБРАТЬ
	|		ВЫБОР
	|			КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПустаяСсылка)
	|				ТОГДА СпрПодразделения.ПериодичностьОформленияВыработки
	|			ИНАЧЕ &Периодичность
	|		КОНЕЦ КАК Периодичность,
	|		ТрудозатратыКОформлению.ВидРабот КАК ВидРабот,
	|		ТрудозатратыКОформлению.КоличествоОборот КАК Количество,
	|		ТрудозатратыКОформлению.Организация КАК Организация,
	|		ТрудозатратыКОформлению.Распоряжение КАК Распоряжение,
	|		ТрудозатратыКОформлению.Исполнитель КАК Исполнитель,
	|		ТрудозатратыКОформлению.Подразделение КАК Подразделение,
	|		ТрудозатратыКОформлению.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|		ВЫБОР
	|			КОГДА ИСТИНА
	|				ТОГДА НЕОПРЕДЕЛЕНО
	|		КОНЕЦ КАК Статус,
	|		ИСТИНА КАК ЕстьИсправления
	|	ИЗ
	|		Обороты КАК ТрудозатратыКОформлению
	|		
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтруктураПредприятия КАК СпрПодразделения
	|		ПО СпрПодразделения.Ссылка = ТрудозатратыКОформлению.Подразделение
	|		
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РаспоряженияСИсправлением КАК РаспоряженияСИсправлением
	|		ПО РаспоряженияСИсправлением.Организация = ТрудозатратыКОформлению.Организация
	|		И РаспоряженияСИсправлением.ПартияПроизводства = ТрудозатратыКОформлению.ПартияПроизводства
	|		И РаспоряженияСИсправлением.Распоряжение = ТрудозатратыКОформлению.Распоряжение
	|		И РаспоряженияСИсправлением.КодСтрокиРаспоряжения = ТрудозатратыКОформлению.КодСтрокиРаспоряжения
	|	
	|	ГДЕ
	|		НЕ ТрудозатратыКОформлению.КоличествоОборот = 0
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	// Восстанавливаем остатки движениями текущего документа
	|	ВЫБРАТЬ
	|		ВЫБОР
	|			КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПустаяСсылка)
	|				ТОГДА СпрПодразделения.ПериодичностьОформленияВыработки
	|			ИНАЧЕ &Периодичность
	|		КОНЕЦ КАК Периодичность,
	|		ТрудозатратыКОформлению.ВидРабот КАК ВидРабот,
	|		ТрудозатратыКОформлению.Количество КАК Количество,
	|		ТрудозатратыКОформлению.Организация КАК Организация,
	|		ТрудозатратыКОформлению.Распоряжение КАК Распоряжение,
	|		ТрудозатратыКОформлению.Исполнитель КАК Исполнитель,
	|		ТрудозатратыКОформлению.Подразделение КАК Подразделение,
	|		ТрудозатратыКОформлению.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|		ВЫБОР
	|			КОГДА ИСТИНА
	|				ТОГДА НЕОПРЕДЕЛЕНО
	|		КОНЕЦ КАК Статус,
	|		РаспоряженияСИсправлением.Распоряжение ЕСТЬ НЕ NULL КАК ЕстьИсправления
	|	ИЗ
	|		РегистрНакопления.ТрудозатратыКОформлению КАК ТрудозатратыКОформлению
	|	
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтруктураПредприятия КАК СпрПодразделения
	|		ПО СпрПодразделения.Ссылка = ТрудозатратыКОформлению.Подразделение
	|	
	|		ЛЕВОЕ СОЕДИНЕНИЕ РаспоряженияСИсправлением КАК РаспоряженияСИсправлением
	|		ПО РаспоряженияСИсправлением.Организация = ТрудозатратыКОформлению.Организация
	|		И РаспоряженияСИсправлением.ПартияПроизводства = ТрудозатратыКОформлению.ПартияПроизводства
	|		И РаспоряженияСИсправлением.Распоряжение = ТрудозатратыКОформлению.Распоряжение
	|		И РаспоряженияСИсправлением.КодСтрокиРаспоряжения = ТрудозатратыКОформлению.КодСтрокиРаспоряжения
	|	
	|	ГДЕ
	|		(&БезОтбораПоОрганизациям
	|			ИЛИ ТрудозатратыКОформлению.Организация В (&Организации))
	|		И (&БезОтбораПоРаспоряжениям
	|			ИЛИ ТрудозатратыКОформлению.Распоряжение В (&Распоряжения))
	|		И (&БезОтбораПоВидамРабот
	|			ИЛИ ТрудозатратыКОформлению.ВидРабот В (&ВидыРабот))
	|		И (&БезОтбораПоПодразделениям
	|			ИЛИ ТрудозатратыКОформлению.Подразделение В (&Подразделения))
	|		И (&БезОтбораПоБригадам
	|			ИЛИ ТрудозатратыКОформлению.Исполнитель В (&Бригады)
	|			ИЛИ ТИПЗНАЧЕНИЯ(Исполнитель) = ТИП(Справочник.Бригады))
	|		И (&БезОтбораПоРаботникам
	|			ИЛИ ТрудозатратыКОформлению.Исполнитель В (&Работники)
	|			ИЛИ ТИПЗНАЧЕНИЯ(Исполнитель) = ТИП(Справочник.Бригады))
	|		И ТрудозатратыКОформлению.Регистратор = &ДокументИсключение
	|	) КАК ТрудозатратыКОформлению
	|
	|СГРУППИРОВАТЬ ПО
	|	ТрудозатратыКОформлению.Периодичность,
	|	ТрудозатратыКОформлению.ВидРабот,
	|	ТрудозатратыКОформлению.Организация,
	|	ТрудозатратыКОформлению.Распоряжение,
	|	ТрудозатратыКОформлению.Исполнитель,
	|	ТрудозатратыКОформлению.Подразделение,
	|	ТрудозатратыКОформлению.КодСтрокиРаспоряжения,
	|	ТрудозатратыКОформлению.Статус
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Распоряжение
	|";
	
	Запрос.Текст = ТекстЗапроса;
	Запрос.Выполнить();
	
	#КонецОбласти
	
	#Область ВспомогательныеДанные
	
	ТекстыЗапросов = Новый Массив;
	
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ВЫБОР
	|		КОГДА НЕ ТрудозатратыКОформлению.ЕстьИсправления
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата
	|		КОГДА ТрудозатратыКОформлению.ЕстьИсправления
	|			И ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата
	|		ИНАЧЕ &КонецПериода
	|	КОНЕЦ                                               КАК ДатаВыполнения,
	|	ТрудозатратыПроизводстваБезЗаказа.СтатьяКалькуляции КАК СтатьяКалькуляции,
	|	ТрудозатратыПроизводстваБезЗаказа.Ссылка            КАК Распоряжение,
	|	ТрудозатратыПроизводстваБезЗаказа.КодСтроки         КАК КодСтроки,
	|	ВЫБОР
	|		КОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Исправление
	|			И ТрудозатратыПроизводстваБезЗаказа.Ссылка.ИсправлениеСохраняетПартииПроизводства
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.ИсправляемыйДокумент
	|		ИНАЧЕ ТрудозатратыПроизводстваБезЗаказа.Ссылка
	|	КОНЕЦ                                               КАК ДокументПартии,
	|	ТрудозатратыПроизводстваБезЗаказа.НомерГруппыЗатрат КАК НомерГруппыЗатрат
	|ПОМЕСТИТЬ ВтПартииПроизводстваБезЗаказаПодготовительная
	|ИЗ
	|	Остатки КАК ТрудозатратыКОформлению
	|	
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПроизводствоБезЗаказа.Трудозатраты КАК ТрудозатратыПроизводстваБезЗаказа
	|	ПО ТрудозатратыПроизводстваБезЗаказа.Ссылка = ТрудозатратыКОформлению.Распоряжение
	|	И ТрудозатратыПроизводстваБезЗаказа.КодСтроки = ТрудозатратыКОформлению.КодСтрокиРаспоряжения
	|
	|СГРУППИРОВАТЬ ПО
	|	ВЫБОР
	|		КОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Исправление
	|			И ТрудозатратыПроизводстваБезЗаказа.Ссылка.ИсправлениеСохраняетПартииПроизводства
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.ИсправляемыйДокумент
	|		ИНАЧЕ ТрудозатратыПроизводстваБезЗаказа.Ссылка
	|	КОНЕЦ,
	|	ТрудозатратыПроизводстваБезЗаказа.Ссылка,
	|	ТрудозатратыПроизводстваБезЗаказа.КодСтроки,
	|	ТрудозатратыПроизводстваБезЗаказа.НомерГруппыЗатрат,
	|	ТрудозатратыПроизводстваБезЗаказа.СтатьяКалькуляции,
	|	ВЫБОР
	|		КОГДА НЕ ТрудозатратыКОформлению.ЕстьИсправления
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата
	|		КОГДА ТрудозатратыКОформлению.ЕстьИсправления
	|			И ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	|			ТОГДА ТрудозатратыПроизводстваБезЗаказа.Ссылка.Дата
	|		ИНАЧЕ &КонецПериода
	|	КОНЕЦ
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ДокументПартии,
	|	НомерГруппыЗатрат
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ТрудозатратыПроизводстваБезЗаказа.ДатаВыполнения	КАК ДатаВыполнения,
	|	ТрудозатратыПроизводстваБезЗаказа.СтатьяКалькуляции	КАК СтатьяКалькуляции,
	|	ТрудозатратыПроизводстваБезЗаказа.Распоряжение		КАК Распоряжение,
	|	ТрудозатратыПроизводстваБезЗаказа.КодСтроки			КАК КодСтрокиРаспоряжения,
	|	СпрПартииПроизводства.ГруппаПродукции				КАК ГруппаПродукции
	|ПОМЕСТИТЬ ВтПартииПроизводстваБезЗаказа
	|ИЗ
	|	ВтПартииПроизводстваБезЗаказаПодготовительная КАК ТрудозатратыПроизводстваБезЗаказа
	|
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПартииПроизводства КАК СпрПартииПроизводства
	|	ПО СпрПартииПроизводства.Документ = ТрудозатратыПроизводстваБезЗаказа.ДокументПартии
	|	И СпрПартииПроизводства.Код = ТрудозатратыПроизводстваБезЗаказа.НомерГруппыЗатрат
	|	И НЕ СпрПартииПроизводства.ПометкаУдаления
	|
	|СГРУППИРОВАТЬ ПО
	|	ТрудозатратыПроизводстваБезЗаказа.Распоряжение,
	|	ТрудозатратыПроизводстваБезЗаказа.ДатаВыполнения,
	|	ТрудозатратыПроизводстваБезЗаказа.СтатьяКалькуляции,
	|	ТрудозатратыПроизводстваБезЗаказа.КодСтроки,
	|	СпрПартииПроизводства.ГруппаПродукции
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Распоряжение,
	|	КодСтрокиРаспоряжения
	|;
	|
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ВЫБОР
	|		КОГДА ТрудозатратыКОформлению.Исполнитель Ссылка Справочник.Бригады
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Бригадный)
	|		ИНАЧЕ
	|			ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Персональный)
	|	КОНЕЦ											КАК ВидНаряда,
	|	ПартииПроизводстваБезЗаказа.ДатаВыполнения		КАК ДатаВыполнения,
	|	ТрудозатратыКОформлению.Периодичность			КАК Периодичность,
	|	ТрудозатратыКОформлению.КодСтрокиРаспоряжения	КАК КодСтрокиРаспоряжения,
	|	ТрудозатратыКОформлению.ВидРабот				КАК ВидРабот,
	|	ТрудозатратыКОформлению.Количество				КАК КоличествоКОформлению,
	|	ТрудозатратыКОформлению.Количество				КАК КоличествоКОплате,
	|	ТрудозатратыКОформлению.Организация				КАК Организация,
	|	ТрудозатратыКОформлению.Распоряжение			КАК Распоряжение,
	|	ТрудозатратыКОформлению.Исполнитель				КАК Исполнитель,
	|	ТрудозатратыКОформлению.Подразделение			КАК Подразделение,
	|	ПартииПроизводстваБезЗаказа.ГруппаПродукции		КАК ГруппаПродукции,
	|	ПартииПроизводстваБезЗаказа.СтатьяКалькуляции	КАК СтатьяКалькуляции
	//++ Локализация
	|	,ЗНАЧЕНИЕ(Справочник.СпособыОтраженияЗарплатыВБухУчете.ПустаяСсылка) КАК СпособОтраженияЗарплаты
	//-- Локализация
	|ПОМЕСТИТЬ втТрудозатратыКОформлению
	|ИЗ
	|	Остатки КАК ТрудозатратыКОформлению
	|
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтПартииПроизводстваБезЗаказа КАК ПартииПроизводстваБезЗаказа
	|	ПО ПартииПроизводстваБезЗаказа.Распоряжение = ТрудозатратыКОформлению.Распоряжение
	|	И ПартииПроизводстваБезЗаказа.КодСтрокиРаспоряжения = ТрудозатратыКОформлению.КодСтрокиРаспоряжения
	|;
	|
	|ВЫБРАТЬ
	|	Расценки.ВидРабот КАК ВидРабот,
	|	Расценки.КвалификационныйРазряд КАК КвалификационныйРазряд,
	|	Расценки.Расценка КАК Расценка
	|ПОМЕСТИТЬ ВТРасценки
	|ИЗ
	|	РегистрСведений.РасценкиРаботСотрудников.СрезПоследних(&КонецПериода, ВидРабот В (ВЫБРАТЬ ДД.ВидРабот ИЗ втТрудозатратыКОформлению КАК ДД)) КАК Расценки
	|ИНДЕКСИРОВАТЬ ПО
	|	ВидРабот
	|
	//++ Локализация
	|;
	|
	|ВЫБРАТЬ
	|	РазрядыКатегорииСотрудников.Сотрудник КАК Сотрудник,
	|	РазрядыКатегорииСотрудников.РазрядКатегория КАК РазрядКатегория
	|ПОМЕСТИТЬ ВТРазрядыСотрудников
	|ИЗ
	|	РегистрСведений.РазрядыКатегорииСотрудников.СрезПоследних(&ТекущаяДата, Сотрудник В (ВЫБРАТЬ ДД.Исполнитель ИЗ втТрудозатратыКОформлению КАК ДД)) КАК РазрядыКатегорииСотрудников
	|ГДЕ
	|	НЕ РазрядыКатегорииСотрудников.РазрядКатегория = ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка)
	|ИНДЕКСИРОВАТЬ ПО
	|	Сотрудник
	
	//-- Локализация
	|";
	ТекстыЗапросов.Добавить(ТекстЗапроса);
	
	УстановитьПривилегированныйРежим(Истина);
	Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
	Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	
	#КонецОбласти
	
	#Область ТрудозатратыКОформлению
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Отбор.Подразделение КАК Подразделение,
	|	Отбор.Бригада КАК Бригада,
	|	Отбор.ВидНаряда КАК ВидНаряда
	|ПОМЕСТИТЬ ВТОтборПоСтруктуре
	|ИЗ
	|	&СтруктурныйОтбор КАК Отбор
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДД.ВидНаряда КАК ВидНаряда,
	|	ДД.ДатаВыполнения КАК ДатаВыполнения,
	|	ДД.Периодичность КАК Периодичность,
	|	ВЫБОР
	|		КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.День)
	|			ТОГДА НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ)
	|		ИНАЧЕ
	|			НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, МЕСЯЦ)
	|	КОНЕЦ КАК Период,
	|	ВЫБОР
	|		КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.День)
	|			ТОГДА НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ)
	|		КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.Месяц)
	|			ТОГДА НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, МЕСЯЦ)
	|		ИНАЧЕ
	|			ДД.ДатаВыполнения
	|	КОНЕЦ КАК НачалоПериода,
	|	ВЫБОР
	|		КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.День)
	|			ТОГДА КОНЕЦПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ)
	|		КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.Месяц)
	|			ТОГДА КОНЕЦПЕРИОДА(ДД.ДатаВыполнения, МЕСЯЦ)
	|		ИНАЧЕ
	|			ДД.ДатаВыполнения
	|	КОНЕЦ КАК КонецПериода,
	|	ДД.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|	ДД.ВидРабот КАК ВидРабот,
	|	ДД.КоличествоКОформлению,
	|	ДД.КоличествоКОплате,
	|	ВЫБОР
	//++ Локализация
	
	
	//-- Локализация
	|		КОГДА НЕ Расценки.Расценка ЕСТЬ NULL
	|			ТОГДА Расценки.Расценка * ВЫБОР
	|										КОГДА ВидыРабот.РасценкаЗаЧасРаботы
	|											ТОГДА ВидыРабот.Трудоемкость / ВидыРабот.КратностьТрудоемкости
	|										ИНАЧЕ 1
	|									КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК Расценка,
	|	ДД.КоличествоКОплате * ВЫБОР
	//++ Локализация
	
	
	//-- Локализация
	|		КОГДА НЕ Расценки.Расценка ЕСТЬ NULL
	|			ТОГДА Расценки.Расценка * ВЫБОР
	|										КОГДА ВидыРабот.РасценкаЗаЧасРаботы
	|											ТОГДА ВидыРабот.Трудоемкость / ВидыРабот.КратностьТрудоемкости
	|										ИНАЧЕ 1
	|									КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК Сумма,
	|	ДД.Организация КАК Организация,
	|	ДД.Распоряжение КАК Распоряжение,
	|	ДД.Исполнитель КАК Исполнитель,
	|	ВЫБОР
	|		КОГДА ДД.Исполнитель Ссылка Справочник.Бригады
	|			ТОГДА ДД.Исполнитель
	|	КОНЕЦ КАК Бригада,
	|	ВЫБОР
	|		КОГДА ДД.Исполнитель Ссылка Справочник.ФизическиеЛица
	|			ТОГДА ДД.Исполнитель
	//++ Локализация
	|		КОГДА ДД.Исполнитель Ссылка Справочник.Сотрудники
	|			ТОГДА Сотрудники.ФизическоеЛицо
	//-- Локализация
	|	КОНЕЦ КАК Работник,
	//++ Локализация
	|	ВЫБОР
	|		КОГДА ДД.Исполнитель Ссылка Справочник.Сотрудники
	|			ТОГДА ДД.Исполнитель
	|	КОНЕЦ КАК Сотрудник,
	|	РазрядыСотрудников.РазрядКатегория КАК КвалификацияИсполнителя,
	//-- Локализация
	|	ДД.Подразделение КАК Подразделение,
	|	ДД.ГруппаПродукции КАК ГруппаПродукции,
	|	ДД.СтатьяКалькуляции КАК СтатьяКалькуляции
	//++ Локализация
	|	,ДД.СпособОтраженияЗарплаты КАК СпособОтраженияЗарплаты
	//-- Локализация
	|ПОМЕСТИТЬ ТрудозатратыКОформлению
	|ИЗ
	|	втТрудозатратыКОформлению КАК ДД
	//++ Локализация
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
	|	ПО ДД.Исполнитель Ссылка Справочник.Сотрудники
	|	И ДД.Исполнитель = Сотрудники.Ссылка
	|	ЛЕВОЕ СОЕДИНЕНИЕ ВТРазрядыСотрудников КАК РазрядыСотрудников
	|	ПО ДД.Исполнитель = РазрядыСотрудников.Сотрудник
	//-- Локализация
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыРаботСотрудников КАК ВидыРабот
	|	ПО ДД.ВидРабот = ВидыРабот.Ссылка
	|	ЛЕВОЕ СОЕДИНЕНИЕ ВТРасценки КАК Расценки
	|	ПО ДД.ВидРабот = Расценки.ВидРабот
	|	И НЕ ВидыРабот.РасценкаПоТарифнойСетке
	|	И ((НЕ &ИспользоватьРазрядыРасценокРаботСотрудников ИЛИ ВидыРабот.КвалификационныйРазряд = Расценки.КвалификационныйРазряд)
	//++ Локализация
	|	И РазрядыСотрудников.РазрядКатегория ЕСТЬ NULL
	|	ИЛИ НЕ РазрядыСотрудников.РазрядКатегория ЕСТЬ NULL
	|	И (НЕ &ИспользоватьРазрядыРасценокРаботСотрудников ИЛИ РазрядыСотрудников.РазрядКатегория = Расценки.КвалификационныйРазряд)
	//-- Локализация
	|	)
	//++ Локализация
		
	
	//-- Локализация
	|
	|ГДЕ
	|	(&БезОтбораПоПериодам ИЛИ
	|		ВЫБОР
	|			КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.День)
	|				ТОГДА НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ) В (&Периоды)
	|			КОГДА ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.Месяц)
	|				ТОГДА НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, МЕСЯЦ) В (&Периоды)
	|			ИНАЧЕ
	|				ИСТИНА
	|		КОНЕЦ)
	|	И (&НачалоПериода = ДАТАВРЕМЯ(1,1,1) ИЛИ НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ) >= &НачалоПериода)
	|	И (&КонецПериода = ДАТАВРЕМЯ(1,1,1) ИЛИ НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ) <= &КонецПериода)
	|	И (&БезОтбораПоВидамНарядов ИЛИ ДД.ВидНаряда В (&ВидыНарядов))
	|	И (&БезОтбораПоВидамНарядовИПодразделениям ИЛИ (ДД.Подразделение, ДД.ВидНаряда,
	|		ВЫБОР
	|			КОГДА ТИПЗНАЧЕНИЯ(ДД.Исполнитель) = ТИП(Справочник.Бригады)
	|				ТОГДА ДД.Исполнитель
	|			ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Бригады.ПустаяСсылка)
	|		КОНЕЦ) В (
	|		ВЫБРАТЬ
	|			Отбор.Подразделение КАК Подразделение,
	|			Отбор.ВидНаряда КАК ВидНаряда,
	|			Отбор.Бригада КАК Бригада
	|		ИЗ ВТОтборПоСтруктуре КАК Отбор))
	|
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДД.ВидНаряда КАК ВидНаряда,
	|	ДД.Период КАК Период,
	|	МИНИМУМ(НАЧАЛОПЕРИОДА(ДД.НачалоПериода, ДЕНЬ)) КАК НачалоПериода,
	|	МАКСИМУМ(КОНЕЦПЕРИОДА(ДД.КонецПериода, ДЕНЬ)) КАК КонецПериода,
	|	ДД.Организация КАК Организация,
	|	ВЫБОР
	|		КОГДА ТИПЗНАЧЕНИЯ(ДД.Исполнитель) = ТИП(Справочник.Бригады)
	|			ТОГДА ДД.Исполнитель
	|		ИНАЧЕ НЕОПРЕДЕЛЕНО
	|	КОНЕЦ КАК Исполнитель,
	|	ДД.Подразделение КАК Подразделение
	|ПОМЕСТИТЬ ПериодыКОформлению
	|ИЗ
	|	ТрудозатратыКОформлению КАК ДД
	|	
	|ГДЕ
	|	&СворачиватьРаспоряжения ИЛИ ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПроизвольныйПериод)
	|
	|СГРУППИРОВАТЬ ПО
	|	ДД.ВидНаряда,
	|	ДД.Период,
	|	ДД.Подразделение,
	|	ВЫБОР
	|		КОГДА ТИПЗНАЧЕНИЯ(ДД.Исполнитель) = ТИП(Справочник.Бригады)
	|			ТОГДА ДД.Исполнитель
	|		ИНАЧЕ НЕОПРЕДЕЛЕНО
	|	КОНЕЦ,
	|	ДД.Организация
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДД.ВидНаряда КАК ВидНаряда,
	|	ДД.Период КАК Период,
	|	МИНИМУМ(НАЧАЛОПЕРИОДА(ДД.НачалоПериода, ДЕНЬ)) КАК НачалоПериода,
	|	МАКСИМУМ(КонецПериода(ДД.КонецПериода, ДЕНЬ)) КАК КонецПериода,
	|	ДД.Организация КАК Организация,
	|	ДД.Исполнитель КАК Исполнитель,
	|	ДД.Подразделение КАК Подразделение
	|ИЗ
	|	ТрудозатратыКОформлению КАК ДД
	|	
	|ГДЕ
	|	НЕ &СворачиватьРаспоряжения И ДД.Периодичность <> ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПроизвольныйПериод)
	|
	|СГРУППИРОВАТЬ ПО
	|	ДД.ВидНаряда,
	|	ДД.Период,
	|	ДД.Подразделение,
	|	ДД.Исполнитель,
	|	ДД.Организация
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДД.ВидНаряда КАК ВидНаряда,
	|	ДАТАВРЕМЯ(1,1,1) КАК ДатаВыполнения,
	|	ДД.Период КАК Период,
	|	ПериодыКОформлению.НачалоПериода КАК НачалоПериода,
	|	ПериодыКОформлению.КонецПериода КАК КонецПериода,
	|	0 КАК КодСтрокиРаспоряжения,
	|	ЗНАЧЕНИЕ(Справочник.ВидыРаботСотрудников.ПустаяСсылка) КАК ВидРабот,
	|	СУММА(ДД.КоличествоКОформлению) КАК КоличествоКОформлению,
	|	СУММА(ДД.КоличествоКОплате) КАК КоличествоКОплате,
	|	0 КАК Расценка,
	|	СУММА(ДД.Сумма) КАК Сумма,
	|	ДД.Организация КАК Организация,
	|	НЕОПРЕДЕЛЕНО КАК Распоряжение,
	|	НЕОПРЕДЕЛЕНО КАК Исполнитель,
	|	ДД.Бригада КАК Бригада,
	|	НЕОПРЕДЕЛЕНО КАК Работник,
	//++ Локализация
	|	НЕОПРЕДЕЛЕНО КАК Сотрудник,
	|	НЕОПРЕДЕЛЕНО КАК КвалификацияИсполнителя,
	//-- Локализация
	|	ДД.Подразделение КАК Подразделение,
	|	ЗНАЧЕНИЕ(Справочник.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка) КАК ГруппаПродукции,
	|	НЕОПРЕДЕЛЕНО КАК СтатьяКалькуляции
	//++ Локализация
	|	,НЕОПРЕДЕЛЕНО КАК СпособОтраженияЗарплаты
	//-- Локализация
	|ПОМЕСТИТЬ втВидыРабот
	|ИЗ
	|	ТрудозатратыКОформлению КАК ДД
	|	ЛЕВОЕ СОЕДИНЕНИЕ ПериодыКОформлению КАК ПериодыКОформлению
	|		ПО ДД.ВидНаряда = ПериодыКОформлению.ВидНаряда
	|		И ДД.Период = ПериодыКОформлению.Период
	|		И ДД.Подразделение = ПериодыКОформлению.Подразделение
	|		И ДД.Организация = ПериодыКОформлению.Организация
	|		И (ДД.Исполнитель = ПериодыКОформлению.Исполнитель ИЛИ ПериодыКОформлению.Исполнитель = НЕОПРЕДЕЛЕНО)
	|		
	|ГДЕ
	|	&СворачиватьРаспоряжения
	|	
	|СГРУППИРОВАТЬ ПО
	|	ДД.ВидНаряда,
	|	ДД.Период,
	|	ДД.Подразделение,
	|	ДД.Организация,
	|	ПериодыКОформлению.НачалоПериода,
	|	ПериодыКОформлению.КонецПериода,
	|	ДД.Бригада
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДД.ВидНаряда,
	|	ДД.ДатаВыполнения КАК ДатаВыполнения,
	|	ДД.Период КАК Период,
	|	ПериодыКОформлению.НачалоПериода КАК НачалоПериода,
	|	ПериодыКОформлению.КонецПериода КАК КонецПериода,
	|	ДД.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|	ДД.ВидРабот КАК ВидРабот,
	|	СУММА(ДД.КоличествоКОформлению) КАК КоличествоКОформлению,
	|	СУММА(ДД.КоличествоКОплате) КАК КоличествоКОплате,
	|	МАКСИМУМ(ДД.Расценка) КАК Расценка,
	|	СУММА(ДД.Сумма) КАК Сумма,
	|	ДД.Организация КАК Организация,
	|	ДД.Распоряжение КАК Распоряжение,
	|	ДД.Исполнитель КАК Исполнитель,
	|	ДД.Бригада КАК Бригада,
	|	ДД.Работник КАК Работник,
	//++ Локализация
	|	ДД.Сотрудник КАК Сотрудник,
	|	ДД.КвалификацияИсполнителя КАК КвалификацияИсполнителя,
	//-- Локализация
	|	ДД.Подразделение КАК Подразделение,
	|	ДД.ГруппаПродукции КАК ГруппаПродукции,
	|	ДД.СтатьяКалькуляции КАК СтатьяКалькуляции
	//++ Локализация
	|	,ДД.СпособОтраженияЗарплаты КАК СпособОтраженияЗарплаты
	//-- Локализация
	|ИЗ
	|	ТрудозатратыКОформлению КАК ДД
	|	ЛЕВОЕ СОЕДИНЕНИЕ ПериодыКОформлению КАК ПериодыКОформлению
	|		ПО ДД.ВидНаряда = ПериодыКОформлению.ВидНаряда
	|		И ДД.Период = ПериодыКОформлению.Период
	|		И ДД.Подразделение = ПериодыКОформлению.Подразделение
	|		И ДД.Организация = ПериодыКОформлению.Организация
	|		И (ДД.Исполнитель = ПериодыКОформлению.Исполнитель ИЛИ
	|		ПериодыКОформлению.Исполнитель = НЕОПРЕДЕЛЕНО И ДД.Периодичность = ЗНАЧЕНИЕ(Перечисление.ПериодичностьОформленияВыработкиСотрудников.ПроизвольныйПериод))
	|		
	|ГДЕ
	|	НЕ &СворачиватьРаспоряжения
	|	
	|СГРУППИРОВАТЬ ПО
	|	ДД.ВидНаряда,
	|	ДД.ДатаВыполнения,
	|	ДД.Период,
	|	ПериодыКОформлению.НачалоПериода,
	|	ПериодыКОформлению.КонецПериода,
	|	ДД.КодСтрокиРаспоряжения,
	|	ДД.ВидРабот,
	|	ДД.Организация,
	|	ДД.Распоряжение,
	|	ДД.Исполнитель,
	|	ДД.Бригада,
	|	ДД.Работник,
	//++ Локализация
	|	ДД.Сотрудник,
	|	ДД.КвалификацияИсполнителя,
	//-- Локализация
	|	ДД.ГруппаПродукции,
	|	ДД.Подразделение,
	|	ДД.СтатьяКалькуляции
	//++ Локализация
	|	,ДД.СпособОтраженияЗарплаты
	//-- Локализация
	|
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ДД.ВидНаряда КАК ВидНаряда,
	|	ДД.Организация КАК Организация,
	|	ДД.НачалоПериода КАК НачалоПериода,
	|	ДД.КонецПериода КАК КонецПериода,
	|	ДД.Бригада КАК Бригада,
	|	ДД.Подразделение КАК Подразделение,
	|	ДД.Подразделение.ИспользоватьКТУ КАК ИспользоватьКТУ,
	|	ДД.Подразделение.ИспользоватьТарифныеСтавки КАК ИспользоватьТарифныеСтавки,
	|	ДД.Подразделение.ИспользоватьОтработанноеВремя КАК ИспользоватьОтработанноеВремя,
	|	ДД.ДатаВыполнения КАК ДатаВыполнения,
	|	НАЧАЛОПЕРИОДА(ВЫБОР
	|		КОГДА &ВключатьВПериодВыполненияРабот
	|			ТОГДА ДД.ДатаВыполнения
	|		ИНАЧЕ &ТекущаяДата
	|	КОНЕЦ, ДЕНЬ) КАК ДатаВыполненияРабот,
	|	ДД.Период КАК Период,
	|	ДД.КодСтрокиРаспоряжения КАК КодСтрокиРаспоряжения,
	|	ДД.ВидРабот КАК ВидРабот,
	|	ДД.КоличествоКОформлению КАК КоличествоКОформлению,
	|	ДД.КоличествоКОплате КАК КоличествоКОплате,
	|	ДД.Расценка КАК Расценка,
	|	ДД.Сумма КАК Сумма,
	|	ДД.ГруппаПродукции КАК ГруппаПродукции,
	|	ДД.Распоряжение КАК Распоряжение,
	|	ДД.Исполнитель КАК Исполнитель,
	|	ДД.Работник КАК Работник,
	//++ Локализация
	|	ДД.Сотрудник КАК Сотрудник,
	|	ДД.КвалификацияИсполнителя КАК КвалификацияИсполнителя,
	//-- Локализация
	|	ДД.СтатьяКалькуляции КАК СтатьяКалькуляции
	//++ Локализация
	|	,ДД.СпособОтраженияЗарплаты КАК СпособОтраженияЗарплаты
	//-- Локализация
	|ПОМЕСТИТЬ ВидыРабот
	|ИЗ
	|	втВидыРабот КАК ДД
	|";
	
	ТекстУпорядочивания =
	"УПОРЯДОЧИТЬ ПО
	|	ДД.ВидНаряда,
	|	ДД.Организация,
	|	ДД.НачалоПериода,
	|	ДД.КонецПериода,
	|	ДД.Бригада,
	|	ДД.Подразделение,
	|	НАЧАЛОПЕРИОДА(ДД.ДатаВыполнения, ДЕНЬ),
	|	ДД.Исполнитель,
	|	ДД.Распоряжение
	|";
	
	#КонецОбласти
	
	Если МенеджерВременныхТаблиц <> Неопределено Тогда
		Запрос.Выполнить();
		Возврат Истина;
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПОМЕСТИТЬ ВидыРабот", "");
		Запрос.Текст = Запрос.Текст + ТекстУпорядочивания;
		Возврат Запрос.Выполнить();
	КонецЕсли;
	
КонецФункции

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

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

// Распределяет количества и суммы видов работ по исполнителям.
//
// Параметры:
//	Объект - ДокументОбъект.ВыработкаСотрудников - документ, в котором выполняется распределение.
//
Процедура РаспределитьСуммуПоУчастникам(Объект) Экспорт
	
	Если Не Объект.ИспользоватьКТУ
		И Не Объект.ИспользоватьТарифныеСтавки
		И Не Объект.ИспользоватьОтработанноеВремя Тогда
		Возврат;
	КонецЕсли;
	
	Результат = РаспределениеВидовРаботПоСотрудникам(Объект, Ложь, Ложь, Ложь);
	Результат.Свернуть("Индекс", "НормативнаяСтоимость");
	
	Для Каждого ТекущиеДанные Из Результат Цикл
		Объект.Работники[ТекущиеДанные.Индекс].Сумма = ТекущиеДанные.НормативнаяСтоимость;
	КонецЦикла;
	
КонецПроцедуры

#Область ЗагрузкаИзФайлаВТЧ

// Устанавливает параметры загрузки.
//
// Параметры:
//   Параметры - Структура - параметры загрузки из файла.
//
Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт
	
	ТипДанныхКолонки = Параметры.ТипДанныхКолонки;
	
	ТипДанныхКолонки.Вставить("КодРаботника",    Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
	ТипДанныхКолонки.Вставить("Работник",        Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
	ТипДанныхКолонки.Вставить("КТУ",             Новый ОписаниеТипов("Число",,  Новый КвалификаторыЧисла(15, 2)));
	ТипДанныхКолонки.Вставить("ТарифнаяСтавка",  Новый ОписаниеТипов("Число",,  Новый КвалификаторыЧисла(15, 2)));
	ТипДанныхКолонки.Вставить("ОтработаноЧасов", Новый ОписаниеТипов("Число",,  Новый КвалификаторыЧисла(15, 2)));
	
КонецПроцедуры

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

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

#КонецОбласти

#КонецОбласти

#КонецЕсли

#Область ОбработчикиСобытий

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
	
	Если ВидФормы = "ФормаСписка" Тогда
		СтандартнаяОбработка = Ложь;
		Если ПравоДоступа("Добавление", Метаданные.Документы.ВыработкаСотрудников)
			И (ПолучитьФункциональнуюОпцию("УправлениеПредприятием")
				ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством2_2")) Тогда
			ВыбраннаяФорма = "ФормаСпискаДокументов";
		Иначе
			ВыбраннаяФорма = "ФормаСписка";
		КонецЕсли; 
	КонецЕсли; 
	
КонецПроцедуры

#КонецОбласти

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныйПрограммныйИнтерфейс

Функция ИнициализироватьХозяйственныеОперацииИДокументы(ХозяйственныеОперацииИДокументы) Экспорт
	
	Строка = ХозяйственныеОперацииИДокументы.Добавить();
	Строка.ХозяйственнаяОперация        = Перечисления.ХозяйственныеОперации.РегистрацияСдельныхРабот;
	Строка.ПолноеИмяДокумента           = Метаданные.Документы.ВыработкаСотрудников.ПолноеИмя();
	Строка.КлючНазначенияИспользования  = "ВыработкаСотрудников";
	Строка.ЗаголовокРабочегоМеста       = НСтр("ru = 'Выработка сотрудников'");
	Строка.ПравоДоступаДобавление       = Истина;
	Строка.Порядок                      = 1;
	
	ТаблицаЗначенийДоступно = ОбщегоНазначенияУТ.ДоступныеХозяйственныеОперацииИДокументы(
							ХозяйственныеОперацииИДокументы, 
							Новый СписокЗначений, 
							Новый СписокЗначений, 
							"");
	
	Возврат ТаблицаЗначенийДоступно;
	
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область Проведение

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

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
	
	ИсточникиДанных = Новый Соответствие;
	ИсточникиДанных.Вставить("ВидыРабот.Распоряжение");
	
	Возврат ИсточникиДанных; 
	
КонецФункции

Процедура УстановитьПараметрЗапросаТаблицаВидыРаботСотрудников(Запрос, ИмяРегистра, ДетальныеЗаписи)
	
	Если Запрос.Параметры.Свойство(ИмяРегистра) Тогда
		Возврат;
	КонецЕсли;
	
	УстаревшиеНаСтатьи = Новый Массив;
	УстаревшиеНаСтатьи.Добавить(Перечисления.ВидыБригадныхНарядов.Ремонт);
	УстаревшиеНаСтатьи.Добавить(Перечисления.ВидыБригадныхНарядов.ПрочиеРаботы);
	
	УстаревшиеНаПроизводство = Новый Массив;
	УстаревшиеНаПроизводство.Добавить(Перечисления.ВидыБригадныхНарядов.БригадныйПоЗаказу21);
	УстаревшиеНаПроизводство.Добавить(Перечисления.ВидыБригадныхНарядов.БригадныйБезЗаказа21);
	
	Если Запрос.Параметры.ВидНаряда = Перечисления.ВидыБригадныхНарядов.Персональный
		Или УстаревшиеНаСтатьи.Найти(Запрос.Параметры.ВидНаряда) <> Неопределено 
		Или Не Запрос.Параметры.Автораспределение И УстаревшиеНаПроизводство.Найти(Запрос.Параметры.ВидНаряда) <> Неопределено Тогда
		Запрос.УстановитьПараметр(ИмяРегистра, НоваяТаблицаВидовРаботСотрудников(ДетальныеЗаписи));
		Возврат;
	КонецЕсли;
	
	Запрос.УстановитьПараметр(ИмяРегистра, РаспределениеВидовРаботПоСотрудникам(Запрос.Параметры.Ссылка, ДетальныеЗаписи));
	
КонецПроцедуры

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

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

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

#Область ВременныеТаблицы

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

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

#КонецОбласти

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

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


	//-- Устарело_Производство21
	|	ВидыРабот.СтатьяКалькуляции            КАК СтатьяКалькуляции,
	|	ВидыРабот.ВидРабот                     КАК ВидРабот,
	|	ВидыРабот.ГруппаПродукции              КАК ГруппаПродукции,
	|	ВидыРабот.Работник                     КАК Сотрудник,
	|	ВидыРабот.КоличествоКОплате            КАК Количество,
	|	ВидыРабот.Сумма * &КоэффициентПересчетаВВалютуУПР КАК НормативнаяСтоимость,
	|	0                                      КАК Стоимость,
	|	0                                      КАК СтоимостьРегл,
	|	&ИдентификаторНеиспользуемойФинЗаписи  КАК ИдентификаторФинЗаписи,
	|	НЕОПРЕДЕЛЕНО                           КАК НастройкаХозяйственнойОперации
	|ИЗ
	|	Документ.ВыработкаСотрудников.ВидыРабот КАК ВидыРабот
	//++ Устарело_Производство21


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


	//-- Устарело_Производство21
	|	ВидыРабот.СтатьяКалькуляции            КАК СтатьяКалькуляции,
	|	ВидыРабот.ВидРабот                     КАК ВидРабот,
	|	ВидыРабот.ГруппаПродукции              КАК ГруппаПродукции,
	|	ВидыРабот.Работник                     КАК Сотрудник,
	|	ВидыРабот.Количество                   КАК Количество,
	|	ВидыРабот.НормативнаяСтоимость * &КоэффициентПересчетаВВалютуУПР КАК НормативнаяСтоимость,
	|	0                                      КАК Стоимость,
	|	0                                      КАК СтоимостьРегл,
	|	&ИдентификаторНеиспользуемойФинЗаписи  КАК ИдентификаторФинЗаписи,
	|	НЕОПРЕДЕЛЕНО                           КАК НастройкаХозяйственнойОперации
	|ИЗ
	|	ВтТаблицаВидыРаботСотрудников КАК ВидыРабот
	|
	|ГДЕ
	|	НЕ ВидыРабот.Количество = 0
	|	И НЕ ВидыРабот.НормативнаяСтоимость * &КоэффициентПересчетаВВалютуУПР = 0
	|";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

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

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

#КонецОбласти

#Область Печать

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Если ПравоДоступа("Чтение", Метаданные.Документы.ВыработкаСотрудников) Тогда
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "ВыработкаСотрудников";
		КомандаПечати.Представление = НСтр("ru = 'Выработка сотрудников'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	КонецЕсли;
	
КонецПроцедуры

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ВыработкаСотрудников") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ВыработкаСотрудников",
			Нстр("ru = 'Выработка сотрудников'"),
			ПечатьВыработкиСотрудников(МассивОбъектов, ОбъектыПечати));
	КонецЕсли;
	
КонецПроцедуры

Функция ПечатьВыработкиСотрудников(МассивОбъектов, ОбъектыПечати)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВыработкаСотрудников";
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ВыработкаСотрудников.Ссылка КАК Ссылка,
	|	ВЫБОР
	|		КОГДА ВыработкаСотрудников.ВидНаряда В (ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйБезЗаказа21),
	|												ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.ПрочиеРаботы))
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ПоРаспоряжениям,
	|	ВыработкаСотрудников.Дата КАК ДатаДокумента,
	|	ВыработкаСотрудников.Номер КАК НомерДокумента,
	|	ВыработкаСотрудников.Ответственный.ФизическоеЛицо КАК Менеджер,
	|	ВыработкаСотрудников.Подразделение КАК Подразделение,
	|	ВыработкаСотрудников.Бригада КАК Бригада,
	|	ВыработкаСотрудников.Валюта КАК Валюта,
	|	ВыработкаСотрудников.Месяц КАК Месяц,
	|	""Авто"" КАК СуффиксОбласти
	|ИЗ
	|	Документ.ВыработкаСотрудников КАК ВыработкаСотрудников
	|ГДЕ
	|	ВыработкаСотрудников.Ссылка В(&МассивОбъектов)
	|	И (ВыработкаСотрудников.Автораспределение ИЛИ ВыработкаСотрудников.ВидНаряда = ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Бригадный))
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ВыработкаСотрудников.Ссылка КАК Ссылка,
	|	ВЫБОР
	|		КОГДА ВыработкаСотрудников.ВидНаряда В (ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйБезЗаказа21),
	|												ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.ПрочиеРаботы))
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ПоРаспоряжениям,
	|	ВыработкаСотрудников.Дата КАК ДатаДокумента,
	|	ВыработкаСотрудников.Номер КАК НомерДокумента,
	|	ВыработкаСотрудников.Ответственный.ФизическоеЛицо КАК Менеджер,
	|	ВыработкаСотрудников.Подразделение КАК Подразделение,
	|	ВыработкаСотрудников.Бригада КАК Бригада,
	|	ВыработкаСотрудников.Валюта КАК Валюта,
	|	ВыработкаСотрудников.Месяц КАК Месяц,
	|	""НеАвто"" КАК СуффиксОбласти
	|ИЗ
	|	Документ.ВыработкаСотрудников КАК ВыработкаСотрудников
	|ГДЕ
	|	ВыработкаСотрудников.Ссылка В(&МассивОбъектов)
	|	И (НЕ ВыработкаСотрудников.Автораспределение И ВыработкаСотрудников.ВидНаряда В (
	|											ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйПоЗаказу21),
	|											ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйБезЗаказа21),
	|											ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.ПрочиеРаботы),
	|											ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Ремонт))
	|		ИЛИ ВыработкаСотрудников.ВидНаряда = ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Персональный))
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВыработкаСотрудников.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВыработкаСотрудниковВидыРабот.Ссылка КАК Ссылка,
	|	МИНИМУМ(ВыработкаСотрудниковВидыРабот.НомерСтроки) КАК НомерСтроки,
	|	ВыработкаСотрудниковВидыРабот.ВидРабот КАК ВидРабот,
	|	ВыработкаСотрудниковВидыРабот.СтатьяКалькуляции КАК СтатьяКалькуляции,
	|	СУММА(ВыработкаСотрудниковВидыРабот.КоличествоКОплате) КАК КоличествоКОплате,
	|	СУММА(ВыработкаСотрудниковВидыРабот.КоличествоКОформлению) КАК КоличествоКОформлению,
	|	ВыработкаСотрудниковВидыРабот.Расценка КАК Расценка,
	|	СУММА(ВыработкаСотрудниковВидыРабот.Сумма) КАК Сумма,
	|	ВыработкаСотрудниковВидыРабот.Распоряжение.Номер КАК РаспоряжениеНомер,
	|	ВыработкаСотрудниковВидыРабот.Распоряжение.Дата КАК РаспоряжениеДата,
	|	ВыработкаСотрудниковВидыРабот.ВидРабот.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	|	ВЫБОР
	|		КОГДА ИСТИНА
	|			ТОГДА """"
	|	КОНЕЦ КАК ТипРаспоряжения
	|ИЗ
	|	Документ.ВыработкаСотрудников.ВидыРабот КАК ВыработкаСотрудниковВидыРабот
	|ГДЕ
	|	ВыработкаСотрудниковВидыРабот.Ссылка В(&МассивОбъектов)
	|
	|СГРУППИРОВАТЬ ПО
	|	ВыработкаСотрудниковВидыРабот.Ссылка,
	|	ВыработкаСотрудниковВидыРабот.ВидРабот,
	|	ВыработкаСотрудниковВидыРабот.СтатьяКалькуляции,
	|	ВыработкаСотрудниковВидыРабот.Расценка,
	|	ВыработкаСотрудниковВидыРабот.Распоряжение.Номер,
	|	ВыработкаСотрудниковВидыРабот.Распоряжение.Дата,
	|	ВыработкаСотрудниковВидыРабот.ВидРабот.ЕдиницаИзмерения,
	|	ВЫБОР
	|		КОГДА ИСТИНА
	|			ТОГДА """"
	|	КОНЕЦ 
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	НомерСтроки,
	|	ВидРабот
	|ИТОГИ
	|	СУММА(Сумма)
	|ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВыработкаСотрудниковСотрудники.Работник.Код КАК СотрудникКод,
	|	ВыработкаСотрудниковСотрудники.Работник.Наименование КАК СотрудникФИО,
	|	НЕОПРЕДЕЛЕНО КАК ВидРабот,
	|	СУММА(ВыработкаСотрудниковСотрудники.КТУ) КАК КТУ,
	|	СУММА(ВыработкаСотрудниковСотрудники.ТарифнаяСтавка) КАК Ставка,
	|	СУММА(ВыработкаСотрудниковСотрудники.ОтработаноЧасов) КАК Время,
	|	СУММА(ВыработкаСотрудниковСотрудники.Сумма) КАК Сумма,
	|	ВыработкаСотрудниковСотрудники.Ссылка КАК Ссылка,
	|	НЕОПРЕДЕЛЕНО КАК РаспоряжениеНомер,
	|	НЕОПРЕДЕЛЕНО КАК РаспоряжениеДата,
	|	НЕОПРЕДЕЛЕНО КАК ТипРаспоряжения,
	|	ВыработкаСотрудниковСотрудники.НомерСтроки КАК НомерСтроки
	|ИЗ
	|	Документ.ВыработкаСотрудников.Работники КАК ВыработкаСотрудниковСотрудники
	|ГДЕ
	|	ВыработкаСотрудниковСотрудники.Ссылка В(&МассивОбъектов)
	|
	|СГРУППИРОВАТЬ ПО
	|	ВыработкаСотрудниковСотрудники.Работник.Код,
	|	ВыработкаСотрудниковСотрудники.Работник.Наименование,
	|	ВыработкаСотрудниковСотрудники.Ссылка,
	|	ВыработкаСотрудниковСотрудники.НомерСтроки
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДД.Работник.Код КАК СотрудникКод,
	|	ДД.Работник.Наименование КАК СотрудникФИО,
	|	ДД.ВидРабот КАК ВидРабот,
	|	0 КАК КТУ,
	|	0 КАК ТарифнаяСтавка,
	|	0 КАК ОтработаноЧасов,
	|	СУММА(ДД.Сумма) КАК Сумма,
	|	ДД.Ссылка КАК Ссылка,
	|	ДД.Распоряжение.Номер КАК РаспоряжениеНомер,
	|	ДД.Распоряжение.Дата КАК РаспоряжениеДата,
	|	ВЫБОР
	|		КОГДА ДД.Распоряжение ССЫЛКА Документ.ПроизводствоБезЗаказа
	|			ТОГДА &СинонимПроизводстваБезЗаказа
	|		КОГДА ИСТИНА
	|			ТОГДА """"
	|	КОНЕЦ КАК ТипРаспоряжения,
	|	ДД.НомерСтроки КАК НомерСтроки
	|ИЗ
	|	Документ.ВыработкаСотрудников.ВидыРабот КАК ДД
	|ГДЕ
	|	ДД.Ссылка В(&МассивОбъектов)
	|	И (НЕ ДД.Ссылка.Автораспределение И ДД.Ссылка.ВидНаряда В (ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйПоЗаказу21),
	|												ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.БригадныйБезЗаказа21),
	|												ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.ПрочиеРаботы),
	|												ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Ремонт))
	|		ИЛИ ДД.Ссылка.ВидНаряда = ЗНАЧЕНИЕ(Перечисление.ВидыБригадныхНарядов.Персональный))
	|
	|СГРУППИРОВАТЬ ПО
	|	ДД.Работник.Код,
	|	ДД.Работник.Наименование,
	|	ДД.ВидРабот,
	|	ДД.Ссылка,
	|	ДД.Распоряжение.Номер,
	|	ДД.Распоряжение.Дата,
	|	ВЫБОР
	|		КОГДА ДД.Распоряжение ССЫЛКА Документ.ПроизводствоБезЗаказа
	|			ТОГДА &СинонимПроизводстваБезЗаказа
	|		КОГДА ИСТИНА
	|			ТОГДА """"
	|	КОНЕЦ,
	|	ДД.НомерСтроки
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки,
	|	Ссылка,
	|	СотрудникФИО
	|ИТОГИ
	|	МАКСИМУМ(СотрудникФИО),
	|	МИНИМУМ(НомерСтроки),
	|	СУММА(Сумма)
	|ПО
	|	Ссылка,
	|	СотрудникКод";
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	Запрос.УстановитьПараметр("СинонимПроизводстваБезЗаказа", НСтр("ru='Производство без заказа'", ОбщегоНазначения.КодОсновногоЯзыка()));
	
	Результат = Запрос.ВыполнитьПакет();
	
	ВыборкаПоДокументам = Результат[0].Выбрать();
	ВыборкаПоВидамРабот = Результат[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	ВыборкаПоСотрудникам = Результат[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ВыработкаСотрудников.ПФ_MXL_ВыработкаСотрудников");
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьШапкаБригады = Макет.ПолучитьОбласть("ШапкаБригады");
	
	ОбластьИмяТаблицыВидовРабот = Макет.ПолучитьОбласть("ИмяТаб_ВыполненныеРаботы");
	
	ОбластьЗаголовокТаблицыВидовРабот = Макет.ПолучитьОбласть("ЗаголовокТаб_ВыполненныеРаботы");
	ОбластьСтрокаТаблицыВидовРабот = Макет.ПолучитьОбласть("Строка_ВыполненныеРаботы");
	
	ОбластьЗаголовокТаблицыВидовРаботБезЗаказа = Макет.ПолучитьОбласть("ЗаголовокТаб_ВыполненныеРаботы_БезЗаказа");
	ОбластьСтрокаТаблицыВидовРаботБезЗаказа = Макет.ПолучитьОбласть("Строка_ВыполненныеРаботы_БезЗаказа");
	
	ОбластьИтогТаблицыВидовРабот = Макет.ПолучитьОбласть("Итог_ВыполненныеРаботы");
	
	ОбластьИмяТаблицыСотрудники = Макет.ПолучитьОбласть("ИмяТаб_Сотрудники");
	
	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	
	Пока ВыборкаПоДокументам.Следующий() Цикл
		
		// Таблица Выполненные работы.
		Если Не ВыборкаПоВидамРабот.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
			Продолжить;
		КонецЕсли;
		
		ВыборкаПоСтрокамТЧ = ВыборкаПоВидамРабот.Выбрать();
		
		Если Не ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ОбластьШапка.Параметры.Заполнить(ВыборкаПоДокументам);
		
		ПараметрыОбласти = Новый Структура;
		ПараметрыОбласти.Вставить(
			"НомерДокумента",
			ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
				ВыборкаПоДокументам.НомерДокумента,
				Ложь,
				Истина));
		ОбластьШапка.Параметры.Заполнить(ПараметрыОбласти);
		
		ТабличныйДокумент.Вывести(ОбластьШапка);
		
		Если ЗначениеЗаполнено(ВыборкаПоДокументам.Бригада) Тогда
			ОбластьШапкаБригады.Параметры.Заполнить(ВыборкаПоДокументам);
			ТабличныйДокумент.Вывести(ОбластьШапкаБригады);
		КонецЕсли;
		
		ФорматнаяСтрока = СтрШаблон("ДФ='MMMM yyyy'; L =%1", ОбщегоНазначения.КодОсновногоЯзыка());
	
		ПараметрыОбласти = Новый Структура;
		ПараметрыОбласти.Вставить("Месяц", Формат(ВыборкаПоДокументам.Месяц, ФорматнаяСтрока));
		
		ОбластьИмяТаблицыВидовРабот.Параметры.Заполнить(ПараметрыОбласти);
		
		ТабличныйДокумент.Вывести(ОбластьИмяТаблицыВидовРабот);
		
		Если ВыборкаПоДокументам.ПоРаспоряжениям Тогда
			ОбластьЗаголовокТаблицыВидовРабот.Параметры.Заполнить(ВыборкаПоДокументам);
			ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицыВидовРабот);
		Иначе
			ОбластьЗаголовокТаблицыВидовРаботБезЗаказа.Параметры.Заполнить(ВыборкаПоДокументам);
			ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицыВидовРаботБезЗаказа);
		КонецЕсли;
		
		Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
			
			Если ВыборкаПоДокументам.ПоРаспоряжениям Тогда
				
				ОбластьСтрокаТаблицыВидовРабот.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
				
				ПараметрыОбласти = Новый Структура;
				ПараметрыОбласти.Вставить(
					"РаспоряжениеНомер",
					ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
						ВыборкаПоСтрокамТЧ.РаспоряжениеНомер,
						Ложь,
						Истина));
				ПараметрыОбласти.Вставить("РаспоряжениеДата", Формат(ВыборкаПоСтрокамТЧ.РаспоряжениеДата, "ДЛФ=D"));
				ОбластьСтрокаТаблицыВидовРабот.Параметры.Заполнить(ПараметрыОбласти);
				
				ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыВидовРабот);
				
			Иначе
				ОбластьСтрокаТаблицыВидовРаботБезЗаказа.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
				ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыВидовРаботБезЗаказа);
			КонецЕсли;
			
		КонецЦикла;
		
		ОбластьИтогТаблицыВидовРабот.Параметры.Заполнить(ВыборкаПоВидамРабот);
		ТабличныйДокумент.Вывести(ОбластьИтогТаблицыВидовРабот);
		
		// Таблица Сотрудники.
		Если Не ВыборкаПоСотрудникам.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
			Продолжить;
		КонецЕсли;
		
		Если ВыборкаПоДокументам.СуффиксОбласти = "Авто" Тогда
			ИмяОбластиЗаголовок = "ЗаголовокТаб_Сотрудники_Авто";
			ИмяОбластиСтрока    = "Строка_Сотрудники_Авто";
			ИмяОбластиИтог      = "Итог_Сотрудники_Авто";
		Иначе
			ИмяОбластиЗаголовок = "ЗаголовокТаб_Сотрудники_НеАвто";
			ИмяОбластиСтрока    = "Строка_Сотрудники_НеАвто";
			ИмяОбластиИтог      = "Итог_Сотрудники_НеАвто";
		КонецЕсли;
		
		ОбластьЗаголовокТаблицыСотрудники = Макет.ПолучитьОбласть(ИмяОбластиЗаголовок);
		ОбластьСтрокаТаблицыСотрудники    = Макет.ПолучитьОбласть(ИмяОбластиСтрока);
		ОбластьИтогТаблицыСотрудники      = Макет.ПолучитьОбласть(ИмяОбластиИтог);
		
		ВыборкаПоСтрокамТЧ = ВыборкаПоСотрудникам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		ТабличныйДокумент.Вывести(ОбластьИмяТаблицыСотрудники);
		
		ОбластьЗаголовокТаблицыСотрудники.Параметры.Заполнить(ВыборкаПоДокументам);
		ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицыСотрудники);
		
		НомерСтроки = 1;
		Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
			
			Выборка = ВыборкаПоСтрокамТЧ.Выбрать();
			ВывестиОбластьИтогТаблицыСотрудник = Ложь;
			
			Если ВыборкаПоДокументам.СуффиксОбласти = "НеАвто" Тогда
				
				ОбластьИтогТаблицыСотрудник = Макет.ПолучитьОбласть("Итог_Сотрудник_НеАвто");
				ОбластьИтогТаблицыСотрудник.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
				
				ПараметрыОбласти = Новый Структура;
				ПараметрыОбласти.Вставить("НомерСтроки", НомерСтроки);
				ОбластьИтогТаблицыСотрудник.Параметры.Заполнить(ПараметрыОбласти);
				
				НомерСтроки = НомерСтроки + 1;
				ВывестиОбластьИтогТаблицыСотрудник = Истина;
			КонецЕсли;
			
			Пока Выборка.Следующий() Цикл
				
				Если ВывестиОбластьИтогТаблицыСотрудник Тогда
					
					ОбластьИтогТаблицыСотрудник.Параметры.Заполнить(Выборка);
					
					Если ВыборкаПоДокументам.СуффиксОбласти = "НеАвто" Тогда
						
						ПараметрыОбласти = Новый Структура;
						ПараметрыОбласти.Вставить(
							"РаспоряжениеНомер",
							ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
								Выборка.РаспоряжениеНомер,
								Ложь,
								Истина));
						ПараметрыОбласти.Вставить("РаспоряжениеДата", Формат(Выборка.РаспоряжениеДата, "ДЛФ=D"));
						ОбластьИтогТаблицыСотрудник.Параметры.Заполнить(ПараметрыОбласти);
						
					КонецЕсли;
					
					ТабличныйДокумент.Вывести(ОбластьИтогТаблицыСотрудник);
					
					ВывестиОбластьИтогТаблицыСотрудник = Ложь;
					
				Иначе
					
					ОбластьСтрокаТаблицыСотрудники.Параметры.Заполнить(Выборка);
					
					Если ВыборкаПоДокументам.СуффиксОбласти = "НеАвто" Тогда
						
						ПараметрыОбласти = Новый Структура;
						ПараметрыОбласти.Вставить(
							"РаспоряжениеНомер",
							ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
								Выборка.РаспоряжениеНомер,
								Ложь,
								Истина));
						ПараметрыОбласти.Вставить("РаспоряжениеДата", Формат(Выборка.РаспоряжениеДата, "ДЛФ=D"));
						ОбластьСтрокаТаблицыСотрудники.Параметры.Заполнить(ПараметрыОбласти);
						
					КонецЕсли;
					
					ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыСотрудники);
					
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
		ОбластьИтогТаблицыСотрудники.Параметры.Заполнить(ВыборкаПоСотрудникам);
		ТабличныйДокумент.Вывести(ОбластьИтогТаблицыСотрудники);
		
		ПараметрыОбласти = Новый Структура;
		ПараметрыОбласти.Вставить(
			"Менеджер",
			ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(
				ВыборкаПоДокументам.Менеджер,
				ВыборкаПоДокументам.ДатаДокумента));
		ОбластьПодвал.Параметры.Заполнить(ПараметрыОбласти);
		
		ТабличныйДокумент.Вывести(ОбластьПодвал);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
		
	КонецЦикла;
	
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

#КонецОбласти

#Область ТекущиеДела

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

#КонецОбласти

#Область ФормированиеГиперссылкиВЖурналеПроизводства

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

#КонецОбласти

#Область Прочее

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

Процедура ДобавитьОшибкуАвтоматическогоСоздания(Документ, СписокОшибок, ТипОшибки, ОписаниеОшибки = "")
	
	Если ТипОшибки = "Заполнение" Тогда
		Если Документ.ВидНаряда = Перечисления.ВидыБригадныхНарядов.Персональный Тогда
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка заполнения персонального наряда за период с %1 по %2 по организации ""%3"" и подразделению ""%4"".'", ОбщегоНазначения.КодОсновногоЯзыка()),
				Формат(НачалоМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Формат(КонецМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Документ.Организация,
				Документ.Подразделение);
		Иначе
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка заполнения бригадного наряда за период с %1 по %2 по организации ""%3"", бригаде ""%4"" и подразделению ""%5"".'", ОбщегоНазначения.КодОсновногоЯзыка()),
				Формат(НачалоМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Формат(КонецМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Документ.Организация,
				Документ.Бригада,
				Документ.Подразделение);
		КонецЕсли;
	ИначеЕсли ТипОшибки = "Проведение" Тогда
		Если Документ.ВидНаряда = Перечисления.ВидыБригадныхНарядов.Персональный Тогда
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка проведения персонального наряда за период с %1 по %2 по организации ""%3"" и подразделению ""%4"": %5.'", ОбщегоНазначения.КодОсновногоЯзыка()),
				Формат(НачалоМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Формат(КонецМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Документ.Организация,
				Документ.Подразделение,
				ОписаниеОшибки);
		Иначе
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка проведения бригадного наряда за период с %1 по %2 по организации ""%3"", бригаде ""%4"" и подразделению ""%5"": %6.'", ОбщегоНазначения.КодОсновногоЯзыка()),
				Формат(НачалоМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Формат(КонецМесяца(Документ.Месяц),"ДЛФ=dd.MM.yyyy"),
				Документ.Организация,
				Документ.Бригада,
				Документ.Подразделение,
				ОписаниеОшибки);
		КонецЕсли;
	ИначеЕсли ТипОшибки = "УдалениеДокумента" Тогда
		ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не удалось удалить документ %1 по причине: %2.'", ОбщегоНазначения.КодОсновногоЯзыка()),
			Документ.Ссылка,
			ОписаниеОшибки);
	КонецЕсли;
	
	СтруктураОшибки = Новый Структура();
	СтруктураОшибки.Вставить("Организация", Документ.Организация);
	СтруктураОшибки.Вставить("Документ", Документ.Ссылка);
	СтруктураОшибки.Вставить("ТекстОшибки", ТекстОшибки);
	СтруктураОшибки.Вставить("ТипОшибки", ТипОшибки);
	
	СписокОшибок.Добавить(СтруктураОшибки);
	
КонецПроцедуры

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

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

#КонецОбласти

#КонецОбласти

#КонецЕсли

Связанные материалы