Списание затрат на выпуск / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Серии

// Имена реквизитов, от значений которых зависят параметры указания серий
//
//	Возвращаемое значение:
//		Строка - имена реквизитов, перечисленные через запятую.
//
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
	
	ИменаРеквизитов = "Подразделение,Дата";
	
	Возврат ИменаРеквизитов;
	
КонецФункции

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

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

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

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

// Имена реквизитов, от значений которых зависят параметры выбора спецификаций
//
//	Возвращаемое значение:
//		Строка - имена реквизитов, перечисленные через запятую.
//
Функция ИменаРеквизитовДляЗаполненияПараметровВыбораСпецификаций() Экспорт
	
	ИменаРеквизитов = "";
	Возврат ИменаРеквизитов;
	
КонецФункции

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

#КонецЕсли

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	Если ПолучитьФункциональнуюОпцию("КомплекснаяАвтоматизация") Тогда
		СтандартнаяОбработка = Ложь;
		
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Списание затрат на выпуск %1 от %2'"),
			Данные.Номер,
			Данные.Дата);
	
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных; 

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

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

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

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

Функция РаспределитьМатериалыНаВыходныеИзделия(МатериалыИУслуги, ВыходныеИзделия, Спецификация)
	
	ТаблицаПроизводственныеЗатраты = МатериалыИУслуги.СкопироватьКолонки(); // ТаблицаЗначений
	Если ЗначениеЗаполнено(Спецификация) И ВыходныеИзделия.Итог("ДоляСтоимости") <> 0 Тогда
		ДолиСтоимости = ВыходныеИзделия.ВыгрузитьКолонку("ДоляСтоимости");
	Иначе
		ДолиСтоимости = ВыходныеИзделия.ВыгрузитьКолонку("Количество");
	КонецЕсли;
	
	Для Каждого СтрокаМатериала Из МатериалыИУслуги Цикл
		
		Результат = ОбщегоНазначения.РаспределитьСуммуПропорциональноКоэффициентам(СтрокаМатериала.Количество, ДолиСтоимости, 3);
		Индекс = 0;
		Для Каждого СтрокаПродукции Из ВыходныеИзделия Цикл
			Если Результат[Индекс] <> 0 Тогда
				НоваяСтрока = ТаблицаПроизводственныеЗатраты.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМатериала);
				НоваяСтрока.ЗаказНаПроизводство = СтрокаПродукции.ЗаказНаПроизводство;
				НоваяСтрока.КодСтрокиПродукция = СтрокаПродукции.КодСтрокиПродукция;
				НоваяСтрока.Количество = Результат[Индекс];
			КонецЕсли;
			Индекс = Индекс + 1;
		КонецЦикла;
	КонецЦикла;
	
	Возврат ТаблицаПроизводственныеЗатраты;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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