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