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