#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область СтандартныеПодсистемы
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
НеРедактируемыеРеквизиты = Новый Массив;
НеРедактируемыеРеквизиты.Добавить("ВыходныеИзделия.Этап");
НеРедактируемыеРеквизиты.Добавить("ВозвратныеОтходы.Этап");
НеРедактируемыеРеквизиты.Добавить("МатериалыИУслуги.Этап");
НеРедактируемыеРеквизиты.Добавить("Трудозатраты.Этап");
Возврат НеРедактируемыеРеквизиты;
КонецФункции
Процедура ПроверитьИспользованиеОбъекта(Параметры, АдресХранилища) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьСсылки
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК ТаблицаПоиска
|ГДЕ
| ТаблицаПоиска.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.РесурсныеСпецификации
| И ТаблицаПоиска.ИсточникПолученияПолуфабриката = &Объект
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
|ИЗ
| Документ.ВыпускПродукции.Товары КАК ВыпускПродукцииТовары
|ГДЕ
| ВыпускПродукцииТовары.Спецификация = &Объект
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
|ИЗ
| Документ.СписаниеЗатратНаВыпуск КАК СписаниеЗатратНаВыпуск
|ГДЕ
| СписаниеЗатратНаВыпуск.Спецификация = &Объект
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
|ИЗ
| РегистрНакопления.ПланыПроизводства КАК ТаблицаПоиска
|ГДЕ
| ТаблицаПоиска.Спецификация = &Объект
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
|ИЗ
| Документ.ПроизводствоБезЗаказа.ВыходныеИзделия КАК ТаблицаПоиска
|ГДЕ
| ТаблицаПоиска.Спецификация = &Объект
|";
Запрос.УстановитьПараметр("Объект", Параметры.Объект);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ЕстьСсылки = НЕ Результат.Пустой();
ПоместитьВоВременноеХранилище(ЕстьСсылки, АдресХранилища);
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании, Параметры) Экспорт
ВидимостьВФормах = "ФормаЭлемента,ФормаСписка,ФормаВыбора";
Команда = БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
Если Команда <> Неопределено Тогда
Команда.ВидимостьВФормах = ВидимостьВФормах;
КонецЕсли;
КонецПроцедуры
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
#КонецОбласти
#Область Заполнение
Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаИзФайлаВТЧ
Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт
ТипДанныхКолонки = Параметры.ТипДанныхКолонки;
ИмяТЧ = Параметры.ДополнительныеПараметры.ИмяТЧ;
ТипДанныхКолонки.Вставить("НомерЭтапа", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(5, 0)));
ТипДанныхКолонки.Вставить("НомерОперации", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(5, 0)));
ТипДанныхКолонки.Вставить("СтатьяКалькуляции", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
ТипДанныхКолонки.Вставить("Этап", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
ТипДанныхКолонки.Вставить("Операция", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
Если ИмяТЧ = "Трудозатраты" Тогда
ТипДанныхКолонки.Вставить("КодВидаРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(9)));
ТипДанныхКолонки.Вставить("ВидРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
ТипДанныхКолонки.Вставить("НазначениеРабот", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
ТипДанныхКолонки.Вставить("Количество", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)));
Иначе
ТипДанныхКолонки.Вставить("Штрихкод", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(200)));
ТипДанныхКолонки.Вставить("Артикул", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)));
ТипДанныхКолонки.Вставить("КодНоменклатуры", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
ТипДанныхКолонки.Вставить("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
ТипДанныхКолонки.Вставить("Характеристика", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
ТипДанныхКолонки.Вставить("КодУпаковки", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(4)));
ТипДанныхКолонки.Вставить("Упаковка", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)));
ТипДанныхКолонки.Вставить(?(ИмяТЧ = "МатериалыИУслуги", "ПрименениеМатериала", "ОписаниеИзделия"),
Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(0)));
ТипДанныхКолонки.Вставить("КоличествоУпаковок", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)));
КонецЕсли;
КонецПроцедуры
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры.ИмяТЧ = "Трудозатраты" Тогда
СопоставитьЗагружаемыеДанныеТрудозатраты(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ДополнительныеПараметры);
Иначе
СопоставитьЗагружаемыеДанныеНоменклатура(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры.ИмяТЧ = "Трудозатраты" Тогда
ЗаполнитьСписокНеоднозначностейТрудозатраты(СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры);
Иначе
ЗаполнитьСписокНеоднозначностейНоменклатура(СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область Конструкторы
Функция ДанныеПоНоменклатуре() Экспорт
ДанныеПоНоменклатуре = Новый Структура;
ДанныеПоНоменклатуре.Вставить("Номенклатура");
ДанныеПоНоменклатуре.Вставить("Характеристика");
ДанныеПоНоменклатуре.Вставить("Спецификация");
ДанныеПоНоменклатуре.Вставить("Количество");
Возврат ДанныеПоНоменклатуре;
КонецФункции
Функция ДанныеПоНоменклатуреРасширенный() Экспорт
ДанныеПоНоменклатуре = Новый Структура;
ДанныеПоНоменклатуре.Вставить("Номенклатура");
ДанныеПоНоменклатуре.Вставить("Характеристика");
ДанныеПоНоменклатуре.Вставить("Спецификация");
ДанныеПоНоменклатуре.Вставить("Количество");
ДанныеПоНоменклатуре.Вставить("Распоряжение");
ДанныеПоНоменклатуре.Вставить("ПодразделениеДиспетчер");
ДанныеПоНоменклатуре.Вставить("НаправлениеДеятельности");
ДанныеПоНоменклатуре.Вставить("НачалоПроизводства");
ДанныеПоНоменклатуре.Вставить("ДнейОтПотребности");
Возврат ДанныеПоНоменклатуре;
КонецФункции
Функция СписокНоменклатуры() Экспорт
СписокНоменклатуры = Новый ТаблицаЗначений;
СписокНоменклатуры.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
СписокНоменклатуры.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
СписокНоменклатуры.Колонки.Добавить("Спецификация", Новый ОписаниеТипов("СправочникСсылка.РесурсныеСпецификации"));
СписокНоменклатуры.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
СписокНоменклатуры.Колонки.Добавить("ПодразделениеДиспетчер", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
СписокНоменклатуры.Колонки.Добавить("ПодразделениеИсполнитель", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
СписокНоменклатуры.Колонки.Добавить("НаправлениеДеятельности", Новый ОписаниеТипов("СправочникСсылка.НаправленияДеятельности"));
СписокНоменклатуры.Колонки.Добавить("НачалоПроизводства", Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты));
СписокНоменклатуры.Колонки.Добавить("ДнейОтПотребности", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10)));
Возврат СписокНоменклатуры;
КонецФункции
Функция ПараметрыВыборкиДанных(ПереченьДанных = Неопределено, МенеджерВременныхТаблиц = Неопределено, ВариантЗаполненияОбеспечения = Неопределено) Экспорт
ПараметрыВыборки = Новый Структура;
Если ТипЗнч(ПереченьДанных) = Тип("Строка") Тогда
ПараметрыВыборки.Вставить("ПереченьДанных", СтрРазделить(СтрЗаменить(ПереченьДанных, " ", ""), ",", Ложь));
ИначеЕсли ТипЗнч(ПереченьДанных) = Тип("Массив") Тогда
ПараметрыВыборки.Вставить("ПереченьДанных", ПереченьДанных);
Иначе
ПараметрыВыборки.Вставить("ПереченьДанных", ПереченьДанныхСпецификации());
КонецЕсли;
ПараметрыВыборки.Вставить("ПолучитьПредставления", Ложь);
ПараметрыВыборки.Вставить("ПолучитьСведенияАвтовыбора", Истина);
ПараметрыВыборки.Вставить("ОбъединитьМатериалыИВходящиеИзделия", Ложь);
ПараметрыВыборки.Вставить("МенеджерВременныхТаблиц", МенеджерВременныхТаблиц);
Если ВариантЗаполненияОбеспечения = Неопределено Тогда
ПараметрыВыборки.Вставить("ВариантЗаполненияОбеспечения", Перечисления.ВариантыЗаполненияОбеспеченияПроизводства.ПоСхемамОбеспечения);
Иначе
ПараметрыВыборки.Вставить("ВариантЗаполненияОбеспечения", ВариантЗаполненияОбеспечения);
КонецЕсли;
ПараметрыВыборки.Вставить("ДоступныРаботы", Истина);
ПараметрыВыборки.Вставить("УчитыватьВероятностьБрака", Истина);
ПараметрыВыборки.Вставить("СпособРасчетаМатериалов", Перечисления.СпособыРасчетаМатериалов.МинимальноеПотребление);
ПараметрыВыборки.Вставить("ПереопределениеНастройкиПартииВыпуска", Новый Структура("Использовать,ВыпускПроизвольнымиПорциями",Ложь,Ложь));
ПараметрыВыборки.Вставить("РассчитыватьДолиСтоимостиВыходныхИзделий", Ложь);
ПараметрыВыборки.Вставить("РассчитыватьПризнакЗапланироватьПроизводство", Истина);
ПараметрыВыборки.Вставить("ОкруглятьКоличествоШтучныхТоваров", Истина);
ПараметрыВыборки.Вставить("ПолучитьДанныеНаборов", Истина);
Возврат ПараметрыВыборки;
КонецФункции
#КонецОбласти
#Область ДанныеСпецификации
Функция ДанныеСпецификацииПоНоменклатуре(ДанныеПоНоменклатуре, ПараметрыВыборки, Отбор = Неопределено) Экспорт
ДанныеСпецификации = ДанныеСпецификации(ДанныеПоНоменклатуре, ПараметрыВыборки)[0];
ПартияВыпуска = РассчитатьПартиюВыпускаПоНоменклатуре(ДанныеПоНоменклатуре, ДанныеСпецификации, ПараметрыВыборки);
РассчитатьКоличествоНаПартиюВыпуска(ПартияВыпуска, ДанныеСпецификации, ДанныеПоНоменклатуре);
ПрименитьОтборПоДаннымСпецификации(ДанныеСпецификации, Отбор, ПараметрыВыборки);
Возврат ДанныеСпецификации;
КонецФункции
Функция ДанныеСпецификацииПоСпискуНоменклатуры(СписокНоменклатуры, ПараметрыВыборки, ГруппироватьДанные = Ложь, ПоляГруппировки = "") Экспорт
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(СписокНоменклатуры, "Идентификатор");
ДанныеСпецификаций = ДанныеСпецификации(СписокНоменклатуры, ПараметрыВыборки);
#Область ГруппировкаДанных
СтруктураПоиска = Неопределено;
ДополнительныйИндекс = Неопределено;
ПоляГруппировкиМассив = Новый Массив;
Если ГруппироватьДанные Тогда
ПоляПоиска = ПоляГруппировки;
Если СтрНайти(ПоляПоиска, "Спецификация") = 0 Тогда
ПоляПоиска = ПоляПоиска + ?(ПустаяСтрока(ПоляПоиска), "", ",") + "Спецификация";
КонецЕсли;
СтруктураПоиска = Новый Структура(ПоляПоиска);
ДополнительныйИндекс = СписокНоменклатуры.Индексы.Добавить(ПоляПоиска);
Если НЕ ПустаяСтрока(ПоляГруппировки) Тогда
Для каждого Элемент Из СтрРазделить(ПоляГруппировки, ",", Ложь) Цикл
ПоляГруппировкиМассив.Добавить(СокрЛП(Элемент));
КонецЦикла;
КонецЕсли;
КонецЕсли;
#КонецОбласти
Результат = Новый Массив;
Для Индекс = 0 По СписокНоменклатуры.Количество()-1 Цикл
Строка = СписокНоменклатуры[Индекс];
Если Строка.Спецификация.Пустая() Тогда
Результат.Добавить(Неопределено);
Продолжить;
ИначеЕсли Строка.Идентификатор = -1 Тогда
Продолжить;
КонецЕсли;
ДанныеСпецификации = ДанныеСпецификаций[Строка.Идентификатор];
ДанныеПоНоменклатуре = ДанныеПоНоменклатуреРасширенный();
ЗаполнитьЗначенияСвойств(ДанныеПоНоменклатуре, Строка);
Если ГруппироватьДанные Тогда
ПартияВыпуска = ПартияВыпуска(0,1);
#Область ГруппировкаДанных
Если ДанныеСпецификации.ОсновноеИзделие.ЭтоОсновноеИзделие Тогда
Номенклатура = Строка.Номенклатура;
Характеристика = Строка.Характеристика;
Иначе
Номенклатура = Неопределено;
Характеристика = Неопределено;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Строка);
НайденныеСтроки = СписокНоменклатуры.НайтиСтроки(СтруктураПоиска);
Для Сч1 = 0 По НайденныеСтроки.ВГраница() Цикл
Если НайденныеСтроки[Сч1].Идентификатор = -1 Тогда
Продолжить;
КонецЕсли;
ДанныеСпецификацииНов = ДанныеСпецификаций[НайденныеСтроки[Сч1].Идентификатор];
Если ДанныеСпецификации.ЕстьУточняемоеОсновноеИзделие
И ДанныеСпецификацииНов.ОсновноеИзделие.ЭтоОсновноеИзделие Тогда
Если Номенклатура = Неопределено Тогда
Номенклатура = НайденныеСтроки[Сч1].Номенклатура;
Характеристика = НайденныеСтроки[Сч1].Характеристика;
ДанныеСпецификации = ДанныеСпецификацииНов;
ИначеЕсли Номенклатура <> НайденныеСтроки[Сч1].Номенклатура
ИЛИ Характеристика <> НайденныеСтроки[Сч1].Характеристика Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ДанныеПоНоменклатуреНов = ДанныеПоНоменклатуреРасширенный();
ЗаполнитьЗначенияСвойств(ДанныеПоНоменклатуреНов, НайденныеСтроки[Сч1]);
Для Сч2 = Сч1+1 По НайденныеСтроки.ВГраница() Цикл
Если НайденныеСтроки[Сч2].Идентификатор <> -1
И НайденныеСтроки[Сч1].Номенклатура = НайденныеСтроки[Сч2].Номенклатура
И НайденныеСтроки[Сч1].Характеристика = НайденныеСтроки[Сч2].Характеристика Тогда
ДанныеПоНоменклатуреНов.Количество = ДанныеПоНоменклатуреНов.Количество + НайденныеСтроки[Сч2].Количество;
НайденныеСтроки[Сч2].Идентификатор = -1;
КонецЕсли;
КонецЦикла;
НайденныеСтроки[Сч1].Идентификатор = -1;
ПартияВыпускаНов = РассчитатьПартиюВыпускаПоНоменклатуре(
ДанныеПоНоменклатуреНов, ДанныеСпецификацииНов, ПараметрыВыборки);
Если СравнитьПартииВыпуска(ПартияВыпускаНов, ПартияВыпуска) > 0 Тогда
ПартияВыпуска = ПартияВыпускаНов;
ДанныеПоНоменклатуре = ДанныеПоНоменклатуреНов;
КонецЕсли;
КонецЦикла;
Для каждого Поле Из ПоляГруппировкиМассив Цикл
ДанныеСпецификации.Вставить(Поле, Строка[Поле]);
КонецЦикла;
#КонецОбласти
Иначе
ПартияВыпуска = РассчитатьПартиюВыпускаПоНоменклатуре(
ДанныеПоНоменклатуре, ДанныеСпецификации, ПараметрыВыборки);
КонецЕсли;
РассчитатьКоличествоНаПартиюВыпуска(ПартияВыпуска, ДанныеСпецификации, ДанныеПоНоменклатуре);
Результат.Добавить(ДанныеСпецификации);
КонецЦикла;
СписокНоменклатуры.Колонки.Удалить("Идентификатор");
Если ГруппироватьДанные Тогда
СписокНоменклатуры.Индексы.Удалить(ДополнительныйИндекс);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ДанныеСпецификацииСПолуфабрикатами(ДанныеПоНоменклатуре, ИсключитьПолуфабрикаты, ПараметрыВыборки) Экспорт
ДанныеСпецификации = ДанныеСпецификацииПоНоменклатуре(ДанныеПоНоменклатуре, ПараметрыВыборки);
Если ДанныеСпецификации = Неопределено Тогда
Если ДанныеПоНоменклатуре.Свойство("Спецификация") И ЗначениеЗаполнено(ДанныеПоНоменклатуре.Спецификация) Тогда
ТекстИсключения = НСтр("ru = 'Ошибка при чтении данных ресурсной спецификации: %Спецификация%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%Спецификация%", ДанныеПоНоменклатуре.Спецификация);
Иначе
ТекстИсключения = НСтр("ru = 'Ошибка при чтении данных ресурсной спецификации: не передана спецификация.'");
КонецЕсли;
ВызватьИсключение ТекстИсключения;
КонецЕсли;
РазузлованныеСпецификации = Новый Соответствие;
РазузлованныеСпецификации.Вставить(ДанныеСпецификации.Спецификация);
СписокНоменклатуры = СписокНоменклатуры();
Для Каждого Строка Из ДанныеСпецификации.МатериалыИУслуги Цикл
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации
И РазузлованныеСпецификации.Получить(Строка.ИсточникПолученияПолуфабриката) = Неопределено Тогда
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, "Номенклатура, Характеристика, Количество, ДнейОтПотребности");
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеПоНоменклатуре, "НачалоПроизводства, ПодразделениеДиспетчер, НаправлениеДеятельности");
НоваяСтрока.Спецификация = Строка.ИсточникПолученияПолуфабриката;
КонецЕсли;
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе
И ЗначениеЗаполнено(Строка.СпецификацияРемонта)
И РазузлованныеСпецификации.Получить(Строка.СпецификацияРемонта) = Неопределено Тогда
НоваяСтрока = СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, "Номенклатура, Характеристика, Количество, ДнейОтПотребности");
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеПоНоменклатуре, "НачалоПроизводства, ПодразделениеДиспетчер, НаправлениеДеятельности");
НоваяСтрока.Спецификация = Строка.СпецификацияРемонта;
КонецЕсли;
КонецЦикла;
ПараметрыВыборкиКопия = ОбщегоНазначения.СкопироватьРекурсивно(ПараметрыВыборки);
ПараметрыВыборкиКопия.ОбъединитьМатериалыИВходящиеИзделия = Ложь;
Пока СписокНоменклатуры.Количество() > 0 Цикл
СписокНоменклатуры = ДобавитьДанныеПолуфабрикатов(ДанныеСпецификации, СписокНоменклатуры, ПараметрыВыборкиКопия, РазузлованныеСпецификации);
КонецЦикла;
Если ИсключитьПолуфабрикаты Тогда
СтруктураОтбора = Новый Структура("ПроизводитсяВПроцессе", Истина);
НайденныеСтроки = ДанныеСпецификации.МатериалыИУслуги.НайтиСтроки(СтруктураОтбора);
Для Каждого Строка Из НайденныеСтроки Цикл
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе
И ДанныеСпецификации.Свойство("ВозвратныеОтходы") Тогда
СтруктураОтбораОтходов = Новый Структура("Номенклатура, Характеристика, Этап");
ЗаполнитьЗначенияСвойств(СтруктураОтбораОтходов, Строка);
СтруктураОтбораОтходов.Этап = Строка.ИсточникПолученияПолуфабриката;
НайденныеСтрокиОтходов = ДанныеСпецификации.ВозвратныеОтходы.НайтиСтроки(СтруктураОтбораОтходов);
Для Каждого СтрокаОтхода Из НайденныеСтрокиОтходов Цикл
ДанныеСпецификации.ВозвратныеОтходы.Удалить(СтрокаОтхода);
КонецЦикла;
КонецЕсли;
ДанныеСпецификации.МатериалыИУслуги.Удалить(Строка);
КонецЦикла;
КонецЕсли;
Возврат ДанныеСпецификации;
КонецФункции
Функция ОтветственноеПодразделение(Спецификация) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РесурсныеСпецификации.ОтветственноеПодразделение
|ИЗ
| Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации
|ГДЕ
| РесурсныеСпецификации.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Спецификация);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Результат = Выборка.ОтветственноеПодразделение;
Иначе
Результат = Справочники.СтруктураПредприятия.ПустаяСсылка();
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ОписаниеПроизводственногоПроцесса
Функция ОписаниеПартииВыпуска(Спецификация) Экспорт
ОписаниеПартииВыпуска = УправлениеДаннымиОбИзделияхКлиентСервер.СтруктураОписаниеПартииВыпуска();
СписокРеквизитовСпецификации = "ТипПроизводственногоПроцесса,ВариантНазначения,ВыпускПроизвольнымиПорциями";
Если ТипЗнч(Спецификация) = Тип("СправочникСсылка.РесурсныеСпецификации") Тогда
РеквизитыСпецификации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Спецификация, СписокРеквизитовСпецификации);
ДанныеОсновногоИзделия = ДанныеОсновногоИзделияСпецификации(Спецификация);
ЗаполнитьЗначенияСвойств(ОписаниеПартииВыпуска, ДанныеОсновногоИзделия);
Иначе
РеквизитыСпецификации = Новый Структура(СписокРеквизитовСпецификации);
ЗаполнитьЗначенияСвойств(РеквизитыСпецификации, Спецификация);
ДанныеОсновногоИзделия = УправлениеДаннымиОбИзделияхКлиентСервер.ДанныеОсновногоИзделияСпецификации(Спецификация);
ЗаполнитьЗначенияСвойств(ОписаниеПартииВыпуска, ДанныеОсновногоИзделия);
КонецЕсли;
Если (РеквизитыСпецификации.ТипПроизводственногоПроцесса = Перечисления.ТипыПроизводственныхПроцессов.Сборка
И РеквизитыСпецификации.ВариантНазначения = Перечисления.ВариантыНазначенияСпецификации.СписокНоменклатуры
) Тогда
ОписаниеПартииВыпуска.МножественныйВыпуск = Истина;
Иначе
ОписаниеПартииВыпуска.МножественныйВыпуск = Ложь;
КонецЕсли;
Если РеквизитыСпецификации.ВыпускПроизвольнымиПорциями = Истина Тогда
ОписаниеПартииВыпуска.ВыпускПроизвольнымиПорциями = Истина;
Иначе
ОписаниеПартииВыпуска.ВыпускПроизвольнымиПорциями = Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеПартииВыпуска.Номенклатура) Тогда
БазоваяЕдиницаИзмерения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОписаниеПартииВыпуска.Номенклатура, "ЕдиницаИзмерения");
Иначе
БазоваяЕдиницаИзмерения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеОсновногоИзделия.Упаковка, "Владелец.ЕдиницаИзмерения");
КонецЕсли;
Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) И ОписаниеПартииВыпуска.Упаковка.Пустая() Тогда
ОписаниеПартииВыпуска.ЕдиницаИзмеренияИзделия = БазоваяЕдиницаИзмерения;
Иначе
ОписаниеПартииВыпуска.ЕдиницаИзмеренияИзделия = ОписаниеПартииВыпуска.Упаковка;
КонецЕсли;
Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) И РеквизитыСпецификации.ВыпускПроизвольнымиПорциями Тогда
ОписаниеПартииВыпуска.ЕдиницаИзмеренияПартииВыпуска = БазоваяЕдиницаИзмерения;
ИначеЕсли ОписаниеПартииВыпуска.МножественныйВыпуск ИЛИ ОписаниеПартииВыпуска.КоличествоУпаковок <> 1 Тогда
ОписаниеПартииВыпуска.ЕдиницаИзмеренияПартииВыпуска = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
Иначе
ОписаниеПартииВыпуска.ЕдиницаИзмеренияПартииВыпуска = ОписаниеПартииВыпуска.ЕдиницаИзмеренияИзделия;
КонецЕсли;
Возврат Новый ФиксированнаяСтруктура(ОписаниеПартииВыпуска);
КонецФункции
Функция ОписаниеПроизводственногоПроцесса(Ссылка) Экспорт
Результат = Новый Структура("НесколькоПервыхЭтапов,НесколькоПоследнихЭтапов");
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(ВЫБОР
| КОГДА НомерСледующегоЭтапа = 0
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ),0) > 1 КАК НесколькоПоследнихЭтапов,
| ЕСТЬNULL(СУММА(ВЫБОР
| КОГДА НомерЭтапа = 1
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ),0) > 1 КАК НесколькоПервыхЭтапов
|ИЗ
| Справочник.ЭтапыПроизводства КАК ЭтапыПроизводства
|ГДЕ
| Владелец = &Ссылка И НЕ ПометкаУдаления");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(Результат, Выборка);
Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции
Функция ДанныеОсновногоИзделияСпецификации(Спецификация, Номенклатура = Неопределено, Характеристика = Неопределено) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| 0 КАК Идентификатор,
| &Спецификация КАК Спецификация,
| &Номенклатура КАК Номенклатура,
| &Характеристика КАК Характеристика
|ПОМЕСТИТЬ ВтДанныеПоНоменклатуре
|;
|
|"
+ ТекстЗапросаДанныеОсновногоИзделияСпецификации();
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Спецификация", Спецификация);
Если Номенклатура = Неопределено Тогда
Запрос.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.ПустаяСсылка());
Иначе
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
КонецЕсли;
Если Характеристика = Неопределено Тогда
Запрос.УстановитьПараметр("Характеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
Иначе
Запрос.УстановитьПараметр("Характеристика", Характеристика);
КонецЕсли;
Запрос.УстановитьПараметр("УчитыватьВероятностьБрака", Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Результат = РезультатыЗапроса[РезультатыЗапроса.Количество()-1];
ДанныеПоНоменклатуре = СтруктураДанныхОсновногоИзделияСпецификации();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ДанныеПоНоменклатуре, Выборка);
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВСтрокеНабораДанных(
ДанныеПоНоменклатуре,
РезультатыЗапроса[РезультатыЗапроса.Количество()-2].Выгрузить());
ДанныеПоНоменклатуре.Количество = ОписаниеТипаКоличественногоРеквизита().ПривестиЗначение(
ДанныеПоНоменклатуре.КоличествоУпаковок
* ДанныеПоНоменклатуре.ДанныеУпаковки.Числитель / ДанныеПоНоменклатуре.ДанныеУпаковки.Знаменатель);
КонецЕсли;
Возврат ДанныеПоНоменклатуре;
КонецФункции
#КонецОбласти
#Область Прочее
Функция ПараметрыВыбораСпецификаций(Объект) Экспорт
ПараметрыВыбораСпецификаций = Новый Структура;
#Область Сборка
ПараметрыВыбораСпецификацийТЧ = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыВыбораСпецификаций();
ПараметрыВыбораСпецификацийТЧ.ДоступныеТипы.Добавить(Перечисления.ТипыПроизводственныхПроцессов.Сборка);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.ВРазработке);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.Действует);
ПараметрыВыбораСпецификаций.Вставить("Сборка", ПараметрыВыбораСпецификацийТЧ);
#КонецОбласти
#Область Ремонт
ПараметрыВыбораСпецификацийТЧ = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыВыбораСпецификаций();
ПараметрыВыбораСпецификацийТЧ.ДоступныеТипы.Добавить(Перечисления.ТипыПроизводственныхПроцессов.Ремонт);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.ВРазработке);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.Действует);
ПараметрыВыбораСпецификаций.Вставить("Ремонт", ПараметрыВыбораСпецификацийТЧ);
#КонецОбласти
#Область Разборка
ПараметрыВыбораСпецификацийТЧ = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыВыбораСпецификаций();
ПараметрыВыбораСпецификацийТЧ.ДоступныеТипы.Добавить(Перечисления.ТипыПроизводственныхПроцессов.Разборка);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.ВРазработке);
ПараметрыВыбораСпецификацийТЧ.ДоступныеСтатусы.Добавить(Перечисления.СтатусыСпецификаций.Действует);
ПараметрыВыбораСпецификаций.Вставить("Разборка", ПараметрыВыбораСпецификацийТЧ);
#КонецОбласти
Возврат ПараметрыВыбораСпецификаций;
КонецФункции
Функция ИменаРеквизитовДляЗаполненияПараметровВыбораСпецификаций() Экспорт
ИменаРеквизитов = "";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыРаспределенияЗатрат(Объект) Экспорт
ПараметрыРаспределенияЗатрат = ПроизводствоКлиентСервер.ПараметрыРаспределенияЗатратНаВыходныеИзделия("ВыходныеИзделия", Объект.СпособРаспределенияЗатратНаВыходныеИзделия);
Если Объект.ТипПроизводственногоПроцесса = Перечисления.ТипыПроизводственныхПроцессов.Сборка Тогда
ПараметрыРаспределенияЗатрат.АвтоРасчетЛюбойХарактеристики = Истина;
КонецЕсли;
ПараметрыРаспределенияЗатрат.ЕстьПараметризацияРесурснойСпецификации = Истина;
ПараметрыРаспределенияЗатрат.РассчитыватьПолеДоляСтоимостиПроцент = Истина;
ПараметрыРаспределенияЗатрат.РассчитыватьПризнакЕстьОшибкиЗаполнения = Истина;
ПараметрыРаспределенияЗатрат.РассчитыватьПризнакДоляСтоимостиОбязательна = Истина;
ПараметрыРаспределенияЗатрат.ПараметрыЗаполненияДолейСтоимости.Дата =
?(ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "Дата"),
Объект.Дата,
Дата("00010101"));
ПараметрыРаспределенияЗатрат.ПараметрыЗаполненияДолейСтоимости.Валюта =
?(ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "Валюта"),
Объект.Валюта,
Справочники.Валюты.ПустаяСсылка());
ПараметрыРаспределенияЗатрат.ПоляСвязи = "Номенклатура,Характеристика,ЭтапРедактирование";
ПараметрыРаспределенияЗатрат.ТолькоПросмотр = Истина;
Возврат ПараметрыРаспределенияЗатрат;
КонецФункции
Функция ЗависимыеСпецификации(Спецификация) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| (
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| Справочник.РесурсныеСпецификации.ВыходныеИзделия КАК Таблица
|ГДЕ
| Таблица.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСпецификаций.Действует)
| И Таблица.ОбработатьПоСпецификации
| И Таблица.Спецификация = &Спецификация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| Справочник.РесурсныеСпецификации.ВозвратныеОтходы КАК Таблица
|ГДЕ
| Таблица.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСпецификаций.Действует)
| И Таблица.ОбработатьПоСпецификации
| И Таблица.Спецификация = &Спецификация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК Таблица
|ГДЕ
| Таблица.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСпецификаций.Действует)
| И Таблица.ПроизводитсяВПроцессе
| И Таблица.ИсточникПолученияПолуфабриката = &Спецификация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК Таблица
|ГДЕ
| Таблица.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСпецификаций.Действует)
| И Таблица.ПроизводитсяВПроцессе
| И Таблица.СпецификацияРемонта = &Спецификация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| РегистрСведений.СпецификацииИзделий КАК СпецификацииИзделий
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК Таблица
| ПО СпецификацииИзделий.ВидНоменклатуры = Таблица.Номенклатура.ВидНоменклатуры
| И СпецификацииИзделий.Номенклатура В (Таблица.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
| И СпецификацииИзделий.Характеристика В (ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка), Таблица.Характеристика)
| И Таблица.ПроизводитсяВПроцессе
| И Таблица.СпособПолученияМатериала = ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации)
| И Таблица.ИсточникПолученияПолуфабриката = ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка)
| И Таблица.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСпецификаций.Действует)
|
|ГДЕ
| СпецификацииИзделий.Спецификация = &Спецификация
| И СпецификацииИзделий.ТипПроизводственногоПроцесса = ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Сборка)
| И СпецификацииИзделий.ПобочныйВыход = ЛОЖЬ
|
|) КАК Таблица");
Запрос.УстановитьПараметр("Спецификация", Спецификация);
УстановитьПривилегированныйРежим(Истина);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
КонецФункции
Функция ПолучитьЭтапОдногоЭтапногоПроцесса(Спецификация) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ ПЕРВЫЕ 1
| Этапы.Ссылка
|ИЗ
| Справочник.ЭтапыПроизводства КАК Этапы
|ГДЕ
| НЕ Этапы.ПометкаУдаления
| И Этапы.Владелец = &Владелец
|
|УПОРЯДОЧИТЬ ПО
| НомерЭтапа,
| Ссылка");
Запрос.УстановитьПараметр("Владелец", Спецификация);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Ссылка;
КонецФункции
Процедура ПроверитьРазмерПартии(ДанныеСпецификации, Количество, Отказ, СообщенияОтказ) Экспорт
Если ДанныеСпецификации.ВыпускПроизвольнымиПорциями Тогда
Коэффициент = ДанныеСпецификации.ОсновноеИзделие.КоэффициентПересчетаВОсновноеИзделие;
Иначе
ДанныеУпаковки = ДанныеСпецификации.ОсновноеИзделие.ДанныеУпаковки;
Коэффициент = ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска
* ДанныеУпаковки.Числитель / ДанныеУпаковки.Знаменатель;
КонецЕсли;
МинимальныйВыпуск = Окр(ДанныеСпецификации.МинимальнаяПартияВыпуска * Коэффициент, 3);
ОптимальныйВыпуск = Окр(ДанныеСпецификации.ОптимальнаяПартияВыпуска * Коэффициент, 3);
ДопустимоеПревышение = Окр(ДанныеСпецификации.ДопустимоеПревышениеОптимальнойПартииВыпуска * Коэффициент, 3);
Если МинимальныйВыпуск <> 0
И Количество < МинимальныйВыпуск Тогда
Отказ = Истина;
СообщенияОтказ.Добавить(
СтрШаблон(
НСтр("ru = 'Размер партии меньше минимально допустимого значения по спецификации (%1 %2).'"),
Формат(МинимальныйВыпуск, "ЧГ="),
ДанныеСпецификации.ОсновноеИзделие.ЕдиницаИзмерения));
ИначеЕсли ОптимальныйВыпуск <> 0
И Количество > (ОптимальныйВыпуск + ДопустимоеПревышение) Тогда
Отказ = Истина;
СообщенияОтказ.Добавить(
СтрШаблон(
НСтр("ru = 'Размер партии больше оптимального значения по спецификации (%1 %2).'"),
Формат(ОптимальныйВыпуск + ДопустимоеПревышение, "ЧГ="),
ДанныеСпецификации.ОсновноеИзделие.ЕдиницаИзмерения));
КонецЕсли;
Если НЕ ДанныеСпецификации.ВыпускПроизвольнымиПорциями
И НЕ Отказ Тогда
КоличествоНаЕдиницуПартииВыпуска = ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска
* ДанныеУпаковки.Числитель / ДанныеУпаковки.Знаменатель;
Если Количество % КоличествоНаЕдиницуПартииВыпуска <> 0 Тогда
Отказ = Истина;
СообщенияОтказ.Добавить(
СтрШаблон(
НСтр("ru = 'Размер партии не кратен нормативному значению по спецификации (%1 %2).'"),
Формат(КоличествоНаЕдиницуПартииВыпуска, "ЧГ="),
ДанныеСпецификации.ОсновноеИзделие.ЕдиницаИзмерения));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ТипСтрокиМатериал() Экспорт
Возврат "Материал";
КонецФункции
Функция ТипСтрокиПолуфабрикат() Экспорт
Возврат "Полуфабрикат";
КонецФункции
Функция ТипСтрокиПромежуточныйПолуфабрикат() Экспорт
Возврат "ПромежуточныйПолуфабрикат";
КонецФункции
Функция ТипСтрокиВходящееИзделие() Экспорт
Возврат "ВходящееИзделие";
КонецФункции
Функция ТипСтрокиПобочныйВыход() Экспорт
Возврат "ПобочныйВыход";
КонецФункции
Функция ИменаТабличныхЧастей() Экспорт
Результат = Новый Массив;
Результат.Добавить("ВыходныеИзделия");
Результат.Добавить("ВозвратныеОтходы");
Результат.Добавить("МатериалыИУслуги");
Результат.Добавить("Трудозатраты");
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
УправлениеДаннымиОбИзделияхВызовСервера.РесурсныеСпецификацииОбработкаПолученияДанныхВыбора(
ДанныеВыбора,
Параметры,
СтандартнаяОбработка);
КонецПроцедуры
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
УправлениеДаннымиОбИзделияхВызовСервера.РесурсныеСпецификацииОбработкаПолученияФормы(
ВидФормы,
Параметры,
ВыбраннаяФорма,
СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область ПроверкаЗаполнения
#КонецОбласти
#Область ДанныеСпецификаций
#Область Основное
Функция ДанныеСпецификацииКонструктор() Экспорт
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Спецификация");
СтруктураДанных.Вставить("СпецификацияПредставление", "");
СтруктураДанных.Вставить("Код", "");
СтруктураДанных.Вставить("ИдентификаторВерсииДанных", "");
СтруктураДанных.Вставить("СпособРаспределенияЗатратНаВыходныеИзделия");
СтруктураДанных.Вставить("ТипПроизводственногоПроцесса");
СтруктураДанных.Вставить("ВариантНазначения");
СтруктураДанных.Вставить("МногоэтапныйПроизводственныйПроцесс", Ложь);
СтруктураДанных.Вставить("ВыпускПроизвольнымиПорциями", Ложь);
СтруктураДанных.Вставить("ОптимальнаяПартияВыпуска", 0);
СтруктураДанных.Вставить("ДопустимоеПревышениеОптимальнойПартииВыпуска", 0);
СтруктураДанных.Вставить("МинимальнаяПартияВыпуска", 0);
СтруктураДанных.Вставить("ОсновноеИзделие", СтруктураДанныхОсновногоИзделияСпецификации());
СтруктураДанных.Вставить("ОграниченСрокПролеживания", Ложь);
СтруктураДанных.Вставить("МаксимальныйСрокПролеживанияВДнях", 0);
СтруктураДанных.Вставить("ОптимальноеКоличествоПередачиМеждуЭтапами", 0);
СтруктураДанных.Вставить("ЕстьУточняемоеОсновноеИзделие", Ложь);
СтруктураДанных.Вставить("ЕстьПараметризацияРесурсов", Ложь);
СтруктураДанных.Вставить("ЕстьВложенныеСпецификации", Ложь);
СтруктураДанных.Вставить("ЕстьРасчетВероятности", Ложь);
СтруктураДанных.Вставить("ЕстьНекратныеНормативыВРЦ", Ложь);
СтруктураДанных.Вставить("ОтветственноеПодразделение");
СтруктураДанных.Вставить("СостояниеДанныхНаборов", "Отсутствуют");
Возврат СтруктураДанных;
КонецФункции
Функция ДанныеСпецификации(СписокСтруктураДанных, ПараметрыВыборки) Экспорт
ПереченьДанных = Неопределено;
Если НЕ ПараметрыВыборки.Свойство("ПереченьДанных", ПереченьДанных) ИЛИ НЕ ЗначениеЗаполнено(ПереченьДанных) Тогда
ПереченьДанных = ПереченьДанныхСпецификации();
КонецЕсли;
ИсточникиПараметризацииРесурсов = ОбщегоНазначенияКлиентСервер.РазностьМассивов(
СтрРазделить("ВыходныеИзделия,МатериалыИУслуги",","), ПереченьДанных);
Если ИсточникиПараметризацииРесурсов.ВГраница() <> -1 Тогда
ПереченьДанных = ОбщегоНазначения.СкопироватьРекурсивно(ПереченьДанных, Ложь);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПереченьДанных, ИсточникиПараметризацииРесурсов);
КонецЕсли;
МенеджерВременныхТаблиц = Неопределено;
Если НЕ ПараметрыВыборки.Свойство("МенеджерВременныхТаблиц", МенеджерВременныхТаблиц)
ИЛИ МенеджерВременныхТаблиц = Неопределено
Тогда
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ПустойКлючСвязи", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
СписокТаблицДляУдаления = Новый Массив;
РазделительЗапросовВПакете = ОбщегоНазначения.РазделительПакетаЗапросов();
ТекстыЗапроса = Новый СписокЗначений;
#Область ВтДанныеПоНоменклатуре
ТекстЗапроса = "
|ВЫБРАТЬ
| Т.Идентификатор КАК Идентификатор,
| Т.Спецификация КАК Спецификация,
| Т.Номенклатура КАК Номенклатура,
| Т.Характеристика КАК Характеристика,
| Т.Количество КАК Количество,
| Т.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| Т.ПодразделениеИсполнитель КАК ПодразделениеИсполнитель,
| Т.НаправлениеДеятельности КАК НаправлениеДеятельности,
| Т.Распоряжение КАК Распоряжение,
| Т.Назначение КАК Назначение,
| Т.НачалоПроизводства КАК НачалоПроизводства
|
|ПОМЕСТИТЬ ВтДанныеПоНоменклатуре
|ИЗ
| &НаборДанныхПоНоменклатуре КАК Т
|
|ИНДЕКСИРОВАТЬ ПО
| Спецификация, Идентификатор
|
|";
Если ТипЗнч(СписокСтруктураДанных) = Тип("ТаблицаЗначений") Тогда
НаборДанныхПоНоменклатуре = СписокСтруктураДанных;
Иначе
НаборДанныхПоНоменклатуре = СписокНоменклатуры();
ЗаполнитьЗначенияСвойств(НаборДанныхПоНоменклатуре.Добавить(), СписокСтруктураДанных);
КонецЕсли;
Если НаборДанныхПоНоменклатуре.Количество() = 1 Тогда
ОписаниеЗамера = ОценкаПроизводительности.НачатьЗамерДлительнойОперации("Справочник.РесурсныеСпецификации.МодульМенеджера.ДанныеСпецификации_1");
ВесЗамера = 1;
Иначе
ОписаниеЗамера = ОценкаПроизводительности.НачатьЗамерДлительнойОперации("Справочник.РесурсныеСпецификации.МодульМенеджера.ДанныеСпецификации");
ВесЗамера = НаборДанныхПоНоменклатуре.Количество() / 10;
КонецЕсли;
Запрос.УстановитьПараметр("НаборДанныхПоНоменклатуре", НаборДанныхПоНоменклатуре);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Идентификатор", 0);
ДополнительныеПараметры.Вставить("ПодразделениеДиспетчер", Справочники.СтруктураПредприятия.ПустаяСсылка());
ДополнительныеПараметры.Вставить("ПодразделениеИсполнитель", Справочники.СтруктураПредприятия.ПустаяСсылка());
ДополнительныеПараметры.Вставить("НаправлениеДеятельности", Справочники.НаправленияДеятельности.ПустаяСсылка());
ДополнительныеПараметры.Вставить("Распоряжение", Справочники.РесурсныеСпецификации.ПустаяСсылка());
ДополнительныеПараметры.Вставить("Назначение", Справочники.Назначения.ПустаяСсылка());
ДополнительныеПараметры.Вставить("НачалоПроизводства", Дата(1,1,1));
Для каждого КлючИЗначение Из ДополнительныеПараметры Цикл
ИмяПараметра = КлючИЗначение.Ключ;
Если НаборДанныхПоНоменклатуре.Колонки.Найти(ИмяПараметра) = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Т."+ИмяПараметра, "&"+ИмяПараметра);
Запрос.УстановитьПараметр(ИмяПараметра, КлючИЗначение.Значение);
КонецЕсли;
КонецЦикла;
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете);
СписокТаблицДляУдаления.Добавить("ВтДанныеПоНоменклатуре");
#КонецОбласти
#Область ВтИзделия
ТекстЗапроса = "
|ВЫБРАТЬ
| 0 КАК ВидИзделия,
| ВтДанныеПоНоменклатуре.Идентификатор КАК Идентификатор,
| ВтДанныеПоНоменклатуре.Спецификация КАК Спецификация,
| ВтДанныеПоНоменклатуре.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| ВтДанныеПоНоменклатуре.ПодразделениеИсполнитель КАК ПодразделениеИсполнитель,
| ВтДанныеПоНоменклатуре.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВтДанныеПоНоменклатуре.Распоряжение КАК Распоряжение,
| ВтДанныеПоНоменклатуре.Назначение КАК Назначение,
| ВтДанныеПоНоменклатуре.НачалоПроизводства КАК НачалоПроизводства,
|
| ВыходныеИзделия.НомерСтроки КАК НомерСтроки,
|
| ВыходныеИзделия.ВидНоменклатуры КАК ВидНоменклатуры,
| &ВыходныеИзделияИсточникНоменклатуры КАК Номенклатура,
| &ВыходныеИзделияИсточникХарактеристики КАК Характеристика,
|
| &ВыходныеИзделияИсточникХарактеристикиЦО КАК ХарактеристикаЦО,
| &ВыходныеИзделияИсточникСерииЦО КАК СерияЦО,
| &ВыходныеИзделияИсточникУпаковкиЦО КАК УпаковкаЦО,
|
| ВыходныеИзделия.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ЛюбаяХарактеристика,
| ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.Обеспечивать) КАК СпособПолученияМатериала,
| ЛОЖЬ КАК Обособленно,
|
| ВыходныеИзделия.Этап КАК Этап,
| ВыходныеИзделия.Операция КАК Операция,
|
| ВЫРАЗИТЬ(ВыходныеИзделия.КоличествоУпаковок * ЕСТЬNULL(&ВыходныеИзделияКоэффициентУпаковки, 1) КАК ЧИСЛО(15,3)) КАК Количество,
| ВыходныеИзделия.КоличествоУпаковок КАК КоличествоУпаковок,
|
| ВыходныеИзделия.Упаковка КАК Упаковка,
| ЕСТЬNULL(&ВыходныеИзделияКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
|
| ВыходныеИзделия.ПроцентБрака КАК ПроцентБрака,
|
| ВыходныеИзделия.ДоляСтоимости КАК ДоляСтоимости,
| НЕОПРЕДЕЛЕНО КАК СтатьяКалькуляции,
| ВыходныеИзделия.Ссылка.ТипПроизводственногоПроцесса КАК ТипПроизводственногоПроцесса,
| ВыходныеИзделия.ОбработатьПоСпецификации КАК ОбработатьПоСпецификации,
| ВыходныеИзделия.Спецификация КАК ОбработатьПоСпецификацииСпецификация,
| ВыходныеИзделия.СпособАвтовыбораНоменклатуры КАК СпособАвтовыбораНоменклатуры,
| ВыходныеИзделия.СпособАвтовыбораХарактеристики КАК СпособАвтовыбораХарактеристики,
| ВыходныеИзделия.СвойствоСодержащееНоменклатуру КАК СвойствоСодержащееНоменклатуру,
| ВыходныеИзделия.АлгоритмАвтовыбораХарактеристики КАК АлгоритмАвтовыбораХарактеристики,
| ВыходныеИзделия.АлгоритмРасчетаКоличества КАК АлгоритмРасчетаКоличества,
| ВыходныеИзделия.ОписаниеИзделия КАК ОписаниеИзделия,
| ВыходныеИзделия.КлючСвязи КАК КлючСвязи,
|
| ВЫБОР КОГДА ВыходныеИзделия.Ссылка.ТипПроизводственногоПроцесса В (
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Сборка),
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Ремонт))
| И (ВыходныеИзделия.НомерСтроки = 1)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоОсновноеИзделие,
|
| ВЫБОР КОГДА ВыходныеИзделия.Ссылка.ТипПроизводственногоПроцесса В (
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Сборка),
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Ремонт))
| И (ВыходныеИзделия.Номенклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ИЛИ ВтДанныеПоНоменклатуре.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВыходныеИзделия.НомерСтроки = 1
| ИЛИ ВыходныеИзделия.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВыходныеИзделия.ВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры
| И ВыходныеИзделия.НомерСтроки = 1)
| И (ВтДанныеПоНоменклатуре.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| И ВыходныеИзделия.НомерСтроки = 1
| ИЛИ ВыходныеИзделия.Характеристика = ВтДанныеПоНоменклатуре.Характеристика
| ИЛИ ВыходныеИзделия.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СоответствуетДаннымПоНоменклатуре,
|
| ВыходныеИзделия.Ссылка.ВариантПромежуточногоВыпуска КАК ВариантПромежуточногоВыпуска
|
|ПОМЕСТИТЬ ВтИзделия
|ИЗ
| Справочник.РесурсныеСпецификации.ВыходныеИзделия КАК ВыходныеИзделия
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО ВыходныеИзделия.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 1 КАК ВидИзделия,
| ВтДанныеПоНоменклатуре.Идентификатор КАК Идентификатор,
| ВтДанныеПоНоменклатуре.Спецификация КАК Спецификация,
| ВтДанныеПоНоменклатуре.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| ВтДанныеПоНоменклатуре.ПодразделениеИсполнитель КАК ПодразделениеИсполнитель,
| ВтДанныеПоНоменклатуре.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВтДанныеПоНоменклатуре.Распоряжение КАК Распоряжение,
| ВтДанныеПоНоменклатуре.Назначение КАК Назначение,
| ВтДанныеПоНоменклатуре.НачалоПроизводства КАК НачалоПроизводства,
|
| 0 КАК НомерСтроки,
|
| ВходныеИзделия.ОсновноеИзделиеВидНоменклатуры КАК ВидНоменклатуры,
| &ВходныеИзделияИсточникНоменклатуры КАК Номенклатура,
| &ВходныеИзделияИсточникХарактеристики КАК Характеристика,
|
| НЕОПРЕДЕЛЕНО КАК ХарактеристикаЦО,
| НЕОПРЕДЕЛЕНО КАК СерияЦО,
| НЕОПРЕДЕЛЕНО КАК УпаковкаЦО,
|
| ВходныеИзделия.ОсновноеИзделиеХарактеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ЛюбаяХарактеристика,
| ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.Обеспечивать) КАК СпособПолученияМатериала,
| ЛОЖЬ КАК Обособленно,
|
| ВходныеИзделия.ОсновноеИзделиеЭтап КАК Этап,
| НЕОПРЕДЕЛЕНО КАК Операция,
|
| ВЫРАЗИТЬ(ВходныеИзделия.ОсновноеИзделиеКоличествоУпаковок * ЕСТЬNULL(&ВходныеИзделияКоэффициентУпаковки, 1) КАК ЧИСЛО(15,3)) КАК Количество,
| ВходныеИзделия.ОсновноеИзделиеКоличествоУпаковок КАК КоличествоУпаковок,
|
| ВходныеИзделия.ОсновноеИзделиеУпаковка КАК Упаковка,
| ЕСТЬNULL(&ВходныеИзделияКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
|
| 0 КАК ПроцентБрака,
|
| 1 КАК ДоляСтоимости,
| НЕОПРЕДЕЛЕНО КАК СтатьяКалькуляции,
| ВходныеИзделия.ТипПроизводственногоПроцесса КАК ТипПроизводственногоПроцесса,
| ЛОЖЬ КАК ОбработатьПоСпецификации,
| НЕОПРЕДЕЛЕНО КАК ОбработатьПоСпецификацииСпецификация,
| НЕОПРЕДЕЛЕНО КАК СпособАвтовыбораНоменклатуры,
| НЕОПРЕДЕЛЕНО КАК СпособАвтовыбораХарактеристики,
| НЕОПРЕДЕЛЕНО КАК СвойствоСодержащееНоменклатуру,
| """" КАК АлгоритмАвтовыбораХарактеристики,
| """" КАК АлгоритмРасчетаКоличества,
| """" КАК ОписаниеИзделия,
| &ПустойКлючСвязи КАК КлючСвязи,
|
| ВходныеИзделия.ТипПроизводственногоПроцесса = ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка) КАК ЭтоОсновноеИзделие,
|
| ВЫБОР КОГДА ВходныеИзделия.ТипПроизводственногоПроцесса = ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| И (ВходныеИзделия.ОсновноеИзделиеНоменклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ИЛИ ВтДанныеПоНоменклатуре.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| ИЛИ ВходныеИзделия.ОсновноеИзделиеНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВходныеИзделия.ОсновноеИзделиеВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры)
| И (ВтДанныеПоНоменклатуре.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ИЛИ ВходныеИзделия.ОсновноеИзделиеХарактеристика = ВтДанныеПоНоменклатуре.Характеристика
| ИЛИ ВходныеИзделия.ОсновноеИзделиеХарактеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СоответствуетДаннымПоНоменклатуре,
|
| ВходныеИзделия.ВариантПромежуточногоВыпуска КАК ВариантПромежуточногоВыпуска
|
|ИЗ
| Справочник.РесурсныеСпецификации КАК ВходныеИзделия
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО ВходныеИзделия.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
| И ВходныеИзделия.ТипПроизводственногоПроцесса В (
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Ремонт),
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка))
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2 КАК ВидИзделия,
| ВтДанныеПоНоменклатуре.Идентификатор КАК Идентификатор,
| ВтДанныеПоНоменклатуре.Спецификация КАК Спецификация,
| ВтДанныеПоНоменклатуре.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| ВтДанныеПоНоменклатуре.ПодразделениеИсполнитель КАК ПодразделениеИсполнитель,
| ВтДанныеПоНоменклатуре.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВтДанныеПоНоменклатуре.Распоряжение КАК Распоряжение,
| ВтДанныеПоНоменклатуре.Назначение КАК Назначение,
| ВтДанныеПоНоменклатуре.НачалоПроизводства КАК НачалоПроизводства,
|
| ВозвратныеОтходы.НомерСтроки КАК НомерСтроки,
|
| ЕСТЬNULL(ВозвратныеОтходы.Номенклатура.ВидНоменклатуры, ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)) КАК ВидНоменклатуры,
| ВозвратныеОтходы.Номенклатура КАК Номенклатура,
| ВозвратныеОтходы.Характеристика КАК Характеристика,
|
| НЕОПРЕДЕЛЕНО КАК ХарактеристикаЦО,
| НЕОПРЕДЕЛЕНО КАК СерияЦО,
| НЕОПРЕДЕЛЕНО КАК УпаковкаЦО,
|
| ВозвратныеОтходы.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ЛюбаяХарактеристика,
| ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.Обеспечивать) КАК СпособПолученияМатериала,
| ЛОЖЬ КАК Обособленно,
|
| ВозвратныеОтходы.Этап КАК Этап,
| ВозвратныеОтходы.Операция КАК Операция,
|
| ВЫРАЗИТЬ(ВозвратныеОтходы.КоличествоУпаковок * ЕСТЬNULL(&ВозвратныеОтходыКоэффициентУпаковки, 1) КАК ЧИСЛО(15,3)) КАК Количество,
| ВозвратныеОтходы.КоличествоУпаковок КАК КоличествоУпаковок,
|
| ВозвратныеОтходы.Упаковка КАК Упаковка,
| ЕСТЬNULL(&ВозвратныеОтходыКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
|
| 0 КАК ПроцентБрака,
|
| 1 КАК ДоляСтоимости,
| ВозвратныеОтходы.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ВозвратныеОтходы.Ссылка.ТипПроизводственногоПроцесса КАК ТипПроизводственногоПроцесса,
| ВозвратныеОтходы.ОбработатьПоСпецификации КАК ОбработатьПоСпецификации,
| ВозвратныеОтходы.Спецификация КАК ОбработатьПоСпецификацииСпецификация,
| ВозвратныеОтходы.СпособАвтовыбораНоменклатуры КАК СпособАвтовыбораНоменклатуры,
| ВозвратныеОтходы.СпособАвтовыбораХарактеристики КАК СпособАвтовыбораХарактеристики,
| ВозвратныеОтходы.СвойствоСодержащееНоменклатуру КАК СвойствоСодержащееНоменклатуру,
| ВозвратныеОтходы.АлгоритмАвтовыбораХарактеристики КАК АлгоритмАвтовыбораХарактеристики,
| ВозвратныеОтходы.АлгоритмРасчетаКоличества КАК АлгоритмРасчетаКоличества,
| ВозвратныеОтходы.ОписаниеИзделия КАК ОписаниеИзделия,
| ВозвратныеОтходы.КлючСвязи КАК КлючСвязи,
|
| ЛОЖЬ КАК ЭтоОсновноеИзделие,
|
| ВЫБОР КОГДА ВозвратныеОтходы.Номенклатура = ВтДанныеПоНоменклатуре.Номенклатура
| И ВозвратныеОтходы.Характеристика = ВтДанныеПоНоменклатуре.Характеристика
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СоответствуетДаннымПоНоменклатуре,
|
| ВозвратныеОтходы.Ссылка.ВариантПромежуточногоВыпуска КАК ВариантПромежуточногоВыпуска
|
|ИЗ
| Справочник.РесурсныеСпецификации.ВозвратныеОтходы КАК ВозвратныеОтходы
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО ВозвратныеОтходы.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
|
|ИНДЕКСИРОВАТЬ ПО
| Спецификация, ЭтоОсновноеИзделие
|
|";
ТекстЗапросаКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВыходныеИзделия.Упаковка",
"ВЫРАЗИТЬ(&ВыходныеИзделияИсточникНоменклатуры КАК Справочник.Номенклатура)");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ВыходныеИзделияКоэффициентУпаковки",
ТекстЗапросаКоэффициентУпаковки);
ПараметрыПодстановкиВыходныеИзделия = ПараметрыПодстановкиНоменклатураХарактеристикаОсновногоИзделия(
"ВыходныеИзделия",
"ВидНоменклатуры",
"Номенклатура",
"Характеристика");
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25();
Если ИспользуетсяЦенообразование25 Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникХарактеристикиЦО",
ТекстПоляВыражениеХарактеристикаЦООсновногоИзделия("ВыходныеИзделия"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникСерииЦО",
"ЗНАЧЕНИЕ(Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникУпаковкиЦО",
ТекстПоляВыражениеУпаковкаЦООсновногоИзделия("ВыходныеИзделия"));
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникХарактеристикиЦО", "НЕОПРЕДЕЛЕНО");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникСерииЦО", "НЕОПРЕДЕЛЕНО");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникУпаковкиЦО", "НЕОПРЕДЕЛЕНО");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникНоменклатуры", ПараметрыПодстановкиВыходныеИзделия.ИсточникНоменклатура);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникХарактеристики", ПараметрыПодстановкиВыходныеИзделия.ИсточникХарактеристика);
ТекстЗапросаКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВходныеИзделия.ОсновноеИзделиеУпаковка",
"ВЫРАЗИТЬ(&ВходныеИзделияИсточникНоменклатуры КАК Справочник.Номенклатура)");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ВходныеИзделияКоэффициентУпаковки",
ТекстЗапросаКоэффициентУпаковки);
ПараметрыПодстановкиВходныеИзделия = ПараметрыПодстановкиНоменклатураХарактеристикаОсновногоИзделия(
"ВходныеИзделия",
"ОсновноеИзделиеВидНоменклатуры",
"ОсновноеИзделиеНоменклатура",
"ОсновноеИзделиеХарактеристика");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВходныеИзделияИсточникНоменклатуры", ПараметрыПодстановкиВходныеИзделия.ИсточникНоменклатура);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВходныеИзделияИсточникХарактеристики", ПараметрыПодстановкиВходныеИзделия.ИсточникХарактеристика);
ТекстЗапросаКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВозвратныеОтходы.Упаковка",
"ВЫРАЗИТЬ(ВозвратныеОтходы.Номенклатура КАК Справочник.Номенклатура)");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ВозвратныеОтходыКоэффициентУпаковки",
ТекстЗапросаКоэффициентУпаковки);
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете);
СписокТаблицДляУдаления.Добавить("ВтИзделия");
#КонецОбласти
УстановитьПривилегированныйРежим(Истина);
Таблицы = ОбщегоНазначенияУТ.ВыгрузитьРезультатыЗапроса(Запрос, ТекстыЗапроса, , Ложь, Истина);
УстановитьПривилегированныйРежим(Ложь);
ТекстыЗапроса = Новый СписокЗначений;
#Область ВтСпособыПолученияМатериалов
Если МенеджерВременныхТаблиц.Таблицы.Найти("ВтСпособыПолученияМатериалов") = Неопределено Тогда
ТекстыЗапроса.Добавить(ОбеспечениеПроизводства.ТекстЗапросаВТСпособыПолученияМатериаловПустая());
СписокТаблицДляУдаления.Добавить("ВтСпособыПолученияМатериалов");
КонецЕсли;
#КонецОбласти
#Область ВтФорматыСкладов
Если МенеджерВременныхТаблиц.Таблицы.Найти("ВтФорматыСкладов") = Неопределено Тогда
ТекстыЗапроса.Добавить(Справочники.ФорматыМагазинов.ТекстЗапросаВтФорматыСкладов(Ложь));
СписокТаблицДляУдаления.Добавить("ВтФорматыСкладов");
КонецЕсли;
#КонецОбласти
#Область ДанныеПоНоменклатуре
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеПоНоменклатуре.Идентификатор КАК Идентификатор,
| ДанныеПоНоменклатуре.Спецификация КАК Спецификация,
| ДанныеПоНоменклатуре.Номенклатура КАК Номенклатура,
| ДанныеПоНоменклатуре.Характеристика КАК Характеристика,
| ДанныеПоНоменклатуре.Количество КАК Количество,
| ДанныеПоНоменклатуре.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| ДанныеПоНоменклатуре.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ДанныеПоНоменклатуре.Распоряжение КАК Распоряжение,
| ДанныеПоНоменклатуре.Назначение КАК Назначение,
| ДанныеПоНоменклатуре.НачалоПроизводства КАК НачалоПроизводства
|ИЗ
| ВтДанныеПоНоменклатуре КАК ДанныеПоНоменклатуре
|УПОРЯДОЧИТЬ ПО
| Идентификатор";
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "ДанныеПоНоменклатуре");
#КонецОбласти
#Область РеквизитыСпецификации
ТекстЗапроса =
"ВЫБРАТЬ
| ВтДанныеПоНоменклатуре.Идентификатор КАК Идентификатор,
|
| РесурсныеСпецификации.Ссылка КАК Спецификация,
| РесурсныеСпецификации.Представление КАК СпецификацияПредставление,
|
| РесурсныеСпецификации.Код КАК Код,
| РесурсныеСпецификации.ИдентификаторВерсииДанных КАК ИдентификаторВерсииДанных,
|
| РесурсныеСпецификации.СпособРаспределенияЗатратНаВыходныеИзделия КАК СпособРаспределенияЗатратНаВыходныеИзделия,
|
| РесурсныеСпецификации.ТипПроизводственногоПроцесса КАК ТипПроизводственногоПроцесса,
| РесурсныеСпецификации.ВариантНазначения КАК ВариантНазначения,
| РесурсныеСпецификации.МногоэтапныйПроизводственныйПроцесс КАК МногоэтапныйПроизводственныйПроцесс,
|
| ВЫБОР
| КОГДА &ПереопределятьНастройкуПартииВыпуска
| ТОГДА &ВыпускПроизвольнымиПорциями
| ИНАЧЕ ВЫБОР
| КОГДА &ДоступноОписаниеПартииВыпуска
| ТОГДА РесурсныеСпецификации.ВыпускПроизвольнымиПорциями
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ВыпускПроизвольнымиПорциями,
| ВЫБОР
| КОГДА &ПереопределятьНастройкуПартииВыпуска
| ТОГДА 0
| ИНАЧЕ РесурсныеСпецификации.ОптимальнаяПартияВыпуска
| КОНЕЦ КАК ОптимальнаяПартияВыпуска,
| ВЫБОР
| КОГДА &ПереопределятьНастройкуПартииВыпуска
| ТОГДА 0
| ИНАЧЕ РесурсныеСпецификации.ДопустимоеПревышениеОптимальнойПартииВыпуска
| КОНЕЦ КАК ДопустимоеПревышениеОптимальнойПартииВыпуска,
| ВЫБОР
| КОГДА &ПереопределятьНастройкуПартииВыпуска
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА &ДоступноОписаниеПартииВыпуска
| ТОГДА РесурсныеСпецификации.МинимальнаяПартияВыпуска
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ КАК МинимальнаяПартияВыпуска,
|
| РесурсныеСпецификации.ОграниченСрокПролеживанияВыходныхИзделий КАК ОграниченСрокПролеживания,
| РесурсныеСпецификации.МаксимальныйСрокПролеживанияВыходныхИзделий КАК МаксимальныйСрокПролеживанияВДнях,
| РесурсныеСпецификации.ОптимальноеКоличествоПередачиМеждуЭтапами КАК ОптимальноеКоличествоПередачиМеждуЭтапами,
|
| РесурсныеСпецификации.ЕстьУточняемоеОсновноеИзделие КАК ЕстьУточняемоеОсновноеИзделие,
| РесурсныеСпецификации.ЕстьВложенныеСпецификации КАК ЕстьВложенныеСпецификации,
| РесурсныеСпецификации.ЕстьРасчетВероятности КАК ЕстьРасчетВероятности,
| РесурсныеСпецификации.ЕстьНекратныеНормативыВРЦ КАК ЕстьНекратныеНормативыВРЦ,
| РесурсныеСпецификации.ЕстьПараметризацияРесурсов ИЛИ &ЕстьПараметризацияТехпроцессов КАК ЕстьПараметризацияРесурсов,
|
| РесурсныеСпецификации.ОтветственноеПодразделение КАК ОтветственноеПодразделение
|
|ИЗ
| Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО РесурсныеСпецификации.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
|
|УПОРЯДОЧИТЬ ПО
| Идентификатор";
ТекстПоляЕстьПараметризацияТехпроцессов = "ЛОЖЬ";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЕстьПараметризацияТехпроцессов", ТекстПоляЕстьПараметризацияТехпроцессов);
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "РеквизитыСпецификации");
#КонецОбласти
#Область ОсновноеИзделие
ТекстЗапроса = "
|ВЫБРАТЬ
| ВтИзделия.Идентификатор КАК Идентификатор,
|
| ВтИзделия.ВидНоменклатуры КАК ВидНоменклатуры,
| ВтИзделия.Номенклатура КАК Номенклатура,
| ВтИзделия.Характеристика КАК Характеристика,
|
| 0 КАК Количество,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковок,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковокНаЕдиницуПартииВыпуска,
| ВтИзделия.Упаковка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК ДанныеУпаковки,
|
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения,
| ЕСТЬNULL(ВтИзделия.Номенклатура.ТипНоменклатуры, ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.ПустаяСсылка)) КАК ТипНоменклатуры,
|
| ВЫБОР
| КОГДА ВтИзделия.Номенклатура.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
|
| ВтИзделия.ЛюбаяХарактеристика КАК ЛюбаяХарактеристика,
| ВтИзделия.Спецификация КАК Спецификация,
| ВтИзделия.Спецификация.ВариантНазначения КАК ВариантНазначения,
| ВЫБОР
| КОГДА &УчитыватьВероятностьБрака
| ТОГДА ВтИзделия.ПроцентБрака / 100
| ИНАЧЕ 0
| КОНЕЦ КАК КоэффициентБрака,
| ВтИзделия.ЭтоОсновноеИзделие КАК ЭтоОсновноеИзделие,
|
| ЕСТЬNULL(ВтИзделияОсновноеИзделие.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК ОсновноеИзделиеНоменклатура,
| ЕСТЬNULL(ВтИзделияОсновноеИзделие.Упаковка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ОсновноеИзделиеУпаковка,
| ЕСТЬNULL(ВтИзделияОсновноеИзделие.КоличествоУпаковок, 0) КАК ОсновноеИзделиеКоличествоУпаковокНаЕдиницуПартииВыпуска,
|
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК ЕдиницаИзмеренияШтучная,
| ЕСТЬNULL(&ТекстЗапросаТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК УпаковкаШтучная,
| ЕСТЬNULL(ВтИзделия.Номенклатура.ГруппаАналитическогоУчета, ЗНАЧЕНИЕ(Справочник.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка)) КАК ГруппаАналитическогоУчета
|
|ИЗ ВтИзделия КАК ВтИзделия
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтИзделия КАК ВтИзделияОсновноеИзделие
| ПО ВтИзделия.Идентификатор = ВтИзделияОсновноеИзделие.Идентификатор
| И НЕ ВтИзделия.ЭтоОсновноеИзделие
| И ВтИзделияОсновноеИзделие.ЭтоОсновноеИзделие
|
|ГДЕ
| ВтИзделия.СоответствуетДаннымПоНоменклатуре
|
|УПОРЯДОЧИТЬ ПО
| ВтИзделия.Идентификатор,
| ВтИзделия.ВидИзделия
|";
ТекстПоляТипИзмеряемойВеличины = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"ТипИзмеряемойВеличины",
"ВтИзделия.Упаковка",
"ВтИзделия.Номенклатура");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаТипИзмеряемойВеличины",
ТекстПоляТипИзмеряемойВеличины);
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "ОсновноеИзделие");
#КонецОбласти
#Область Этапы
Если ПереченьДанных.Найти("Этапы") <> Неопределено Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| &ЭтапыПроизводства_Представления,
| ОсновноеВыходноеИзделие.Идентификатор КАК Идентификатор,
| ЭтапыПроизводства.Ссылка КАК Этап,
| ЭтапыПроизводства.Владелец КАК Спецификация,
| ЭтапыПроизводства.Представление КАК ЭтапПредставление,
| ЭтапыПроизводства.НомерЭтапа КАК НомерЭтапа,
| ЭтапыПроизводства.НомерСледующегоЭтапа КАК НомерСледующегоЭтапа,
| ЭтапыПроизводства.Подразделение КАК Подразделение,
| 1 КАК Количество,
| 1 КАК КоличествоНаЕдиницуПартииВыпуска,
| ОсновноеВыходноеИзделие.Количество КАК КоличествоИзделие,
|
| ЭтапыПроизводства.ПланироватьРаботуВидовРабочихЦентров КАК ПланироватьРаботуВидовРабочихЦентров,
| ЭтапыПроизводства.Непрерывный КАК Непрерывный,
| ЭтапыПроизводства.ОдновременноПроизводимоеКоличествоЕдиницПартийИзделий КАК ОдновременноПроизводимоеКоличествоЕдиницПартийИзделий,
| ЭтапыПроизводства.ДлительностьЭтапа КАК ДлительностьЭтапа,
| ЭтапыПроизводства.ЕдиницаИзмеренияДлительностиЭтапа КАК ЕдиницаИзмеренияДлительностиЭтапа,
| ЭтапыПроизводства.ПредварительныйБуфер КАК ПредварительныйБуфер,
| ЭтапыПроизводства.ЗавершающийБуфер КАК ЗавершающийБуфер,
| ЭтапыПроизводства.ЕдиницаИзмеренияПредварительногоБуфера КАК ЕдиницаИзмеренияПредварительногоБуфера,
| ЭтапыПроизводства.ЕдиницаИзмеренияЗавершающегоБуфера КАК ЕдиницаИзмеренияЗавершающегоБуфера,
| ЭтапыПроизводства.Описание КАК Описание,
| ЭтапыПроизводства.ПроизводствоНаСтороне КАК ПроизводствоНаСтороне,
| ЭтапыПроизводства.Партнер КАК Партнер,
| ЭтапыПроизводства.ГрафикРаботыПартнера КАК ГрафикРаботыПартнера,
| ЭтапыПроизводства.УслугиПереработчика.(
| НомерСтроки КАК НомерСтроки,
| Номенклатура КАК Номенклатура,
| Характеристика КАК Характеристика,
| Количество КАК Количество,
| Количество КАК КоличествоНаЕдиницуПартииВыпуска,
| СтатьяКалькуляции КАК СтатьяКалькуляции) КАК УслугиПереработчика,
|
| &ТекстПоляМаршрутнойКарты,
|
|
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0) КАК ДлительностьЭтапаВДнях,
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВСекундах, 0) КАК ДлительностьЭтапаВСекундах,
|
| ВЫБОР РесурсныеСпецификации.ТипПроизводственногоПроцесса
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| ТОГДА ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейОтНачала, 0)
| ИНАЧЕ - ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейДоОкончания, 0)
| КОНЕЦ КАК ДнейОтПотребности,
|
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьДоВыпуска, 0) КАК ДлительностьДоВыпуска
|
|ИЗ
| Справочник.ЭтапыПроизводства КАК ЭтапыПроизводства
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтИзделия КАК ОсновноеВыходноеИзделие
| ПО ЭтапыПроизводства.Владелец = ОсновноеВыходноеИзделие.Спецификация
| И ОсновноеВыходноеИзделие.ЭтоОсновноеИзделие
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации
| ПО ЭтапыПроизводства.Владелец = РесурсныеСпецификации.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НормативнаяДлительностьЭтаповПроизводства КАК НормативнаяДлительностьЭтапов
| ПО НормативнаяДлительностьЭтапов.Этап = ЭтапыПроизводства.Ссылка
|
|
|ГДЕ
| НЕ ЭтапыПроизводства.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Идентификатор, НомерЭтапа";
Если ПолучитьФункциональнуюОпцию("ХранитьОперацииВРесурсныхСпецификациях") Тогда
ТекстПоляМаршрутнойКарты = "
| """" КАК МаршрутнаяКарта,";
ТекстПоляМаршрутнойКарты = ТекстПоляМаршрутнойКарты + "
| 0 КАК КоэффициентМаршрутнойКарты,
| 0 КАК КоэффициентМаршрутнойКартыНаЕдиницуПартииВыпуска";
Иначе
ТекстПоляМаршрутнойКарты = "
| ЭтапыПроизводства.МаршрутнаяКарта КАК МаршрутнаяКарта,
| ЭтапыПроизводства.КоэффициентМаршрутнойКарты КАК КоэффициентМаршрутнойКарты,
| ЭтапыПроизводства.КоэффициентМаршрутнойКарты КАК КоэффициентМаршрутнойКартыНаЕдиницуПартииВыпуска";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПоляМаршрутнойКарты", ТекстПоляМаршрутнойКарты);
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "Этапы");
КонецЕсли;
#КонецОбласти
#Область ВыходныеИзделия
Если ПереченьДанных.Найти("ВыходныеИзделия") <> Неопределено Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| &ВыходныеИзделия_Представления,
| ВтИзделия.Идентификатор КАК Идентификатор,
| ВтИзделия.НомерСтроки КАК НомерСтроки,
| ВтИзделия.ВидНоменклатуры КАК ВидНоменклатуры,
| ВтИзделия.Номенклатура КАК Номенклатура,
| ВтИзделия.Характеристика КАК Характеристика,
| ВтИзделия.ЛюбаяХарактеристика КАК ЛюбаяХарактеристика,
|
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК ЕдиницаИзмеренияШтучная,
| ЕСТЬNULL(&ТекстЗапросаТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК УпаковкаШтучная,
|
| 0 КАК Количество,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковок,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковокНаЕдиницуПартииВыпуска,
| ВтИзделия.Упаковка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК ДанныеУпаковки,
|
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения,
| ЕСТЬNULL(ВтИзделия.Номенклатура.ТипНоменклатуры, ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.ПустаяСсылка)) КАК ТипНоменклатуры,
|
| ОсновноеВыходноеИзделие.Количество КАК КоличествоИзделие,
|
| &ДоляСтоимости КАК ДоляСтоимости,
| &ДоляСтоимостиНаЕдиницу КАК ДоляСтоимостиНаЕдиницу,
|
| ВтИзделия.Этап КАК Этап,
| ВтИзделия.Этап.Подразделение КАК ПодразделениеЭтапа,
| ВтИзделия.Операция КАК Операция,
|
| &ТекстПолеСклад КАК Склад,
| ЕСТЬNULL(СпрСклады.ЦеховаяКладовая, ЛОЖЬ) КАК ЭтоЦеховаяКладовая,
| ВЫБОР
| КОГДА ВтИзделия.Номенклатура.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
| ВтИзделия.ОбработатьПоСпецификации КАК ОбработатьПоСпецификации,
| ВтИзделия.ОбработатьПоСпецификацииСпецификация КАК Спецификация,
|
| ВЫБОР
| КОГДА &УчитыватьВероятностьБрака
| ТОГДА ВтИзделия.ПроцентБрака / 100
| ИНАЧЕ 0
| КОНЕЦ КАК КоэффициентБрака,
|
| ВЫБОР
| КОГДА (ВтИзделия.СпособАвтовыбораНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораНоменклатуры.УказываетсяВНСИ)
| ИЛИ ВтИзделия.СпособАвтовыбораХарактеристики <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораХарактеристики.УказываетсяВНСИ))
| И &ИспользоватьПараметризацию
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользуетсяАвтовыбор,
| ПРЕДСТАВЛЕНИЕ("""") КАК СведенияАвтовыбора,
| ВтИзделия.СпособАвтовыбораНоменклатуры КАК СпособАвтовыбораНоменклатуры,
| ВтИзделия.СпособАвтовыбораХарактеристики КАК СпособАвтовыбораХарактеристики,
| ВтИзделия.СвойствоСодержащееНоменклатуру КАК СвойствоСодержащееНоменклатуру,
| ВтИзделия.АлгоритмАвтовыбораХарактеристики КАК АлгоритмАвтовыбораХарактеристики,
| ВтИзделия.ОписаниеИзделия КАК ОписаниеИзделия,
|
| ВЫБОР
| КОГДА &ИспользоватьПараметризацию
| ТОГДА ВтИзделия.АлгоритмРасчетаКоличества
| ИНАЧЕ """"
| КОНЕЦ КАК АлгоритмРасчетаКоличества,
| ПРЕДСТАВЛЕНИЕ("""") КАК Формула,
| ПРЕДСТАВЛЕНИЕ("""") КАК ФормулаОшибкаРасчета,
|
| ЕСТЬNULL(&ОкруглятьКоличествоШтучныхТоваров
| И ВтИзделия.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| И ВтИзделия.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И &ТекстЗапросаТипИзмеряемойВеличины В (
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)), ЛОЖЬ) КАК Округлить,
|
| ВЫБОР ВтИзделия.ТипПроизводственногоПроцесса
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| ТОГДА ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейОтНачала, 0) + ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0)
| ИНАЧЕ - ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейДоОкончания, 0) + ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0)
| КОНЕЦ КАК ДнейОтПотребности,
|
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьДоВыпуска, 0) КАК ДлительностьДоВыпуска,
|
| ВтИзделия.КлючСвязи КАК КлючСвязи
|
|ИЗ
| ВтИзделия КАК ВтИзделия
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтИзделия КАК ОсновноеВыходноеИзделие
| ПО ВтИзделия.Идентификатор = ОсновноеВыходноеИзделие.Идентификатор
| И ОсновноеВыходноеИзделие.ЭтоОсновноеИзделие
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НормативнаяДлительностьЭтаповПроизводства КАК НормативнаяДлительностьЭтапов
| ПО НормативнаяДлительностьЭтапов.Этап = ВтИзделия.Этап
|
| ,ТекстСоединенияНастройкиПередачиМатериалов
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
| ПО &ТекстПолеСклад = СпрСклады.Ссылка
|
| ,СоединениеДоляСтоимости
|
|ГДЕ
| ВтИзделия.ВидИзделия = 0
|
|УПОРЯДОЧИТЬ ПО
| Идентификатор, НомерСтроки";
ИмяТаблицыТовары =
?(ПараметрыВыборки.ВариантЗаполненияОбеспечения = Перечисления.ВариантыЗаполненияОбеспеченияПроизводства.ПоСхемамОбеспечения,
"ВтИзделия",
"ОсновноеВыходноеИзделие");
ТекстЗапросаДляПолученияСклада = ОбеспечениеПроизводства.ТекстЗапросаНастройкиПередачиМатериалов(
ИмяТаблицыТовары,
"Этап.Подразделение",
ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
",ТекстСоединенияНастройкиПередачиМатериалов",
ТекстЗапросаДляПолученияСклада.ТекстСоединения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстПолеСклад",
ТекстЗапросаДляПолученияСклада.ТекстПолеСклад);
ТекстПоляТипИзмеряемойВеличины = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"ТипИзмеряемойВеличины",
"ВтИзделия.Упаковка",
"ВтИзделия.Номенклатура");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаТипИзмеряемойВеличины",
ТекстПоляТипИзмеряемойВеличины);
Если ПараметрыВыборки.РассчитыватьДолиСтоимостиВыходныхИзделий Тогда
Если ИспользуетсяЦенообразование25 Тогда
ПараметрыПодстановки = ПроизводствоСервер.ПараметрыПодстановкиАлгоритмаРасчетаДолейСтоимости(
"ВтИзделия",
"ВтИзделия.Спецификация.СпособРаспределенияЗатратНаВыходныеИзделия",
"(Номенклатура, ХарактеристикаЦО, СерияЦО, УпаковкаЦО) В (
| Выбрать
| Т.Номенклатура,
| Т.ХарактеристикаЦО,
| Т.СерияЦО,
| Т.УпаковкаЦО
| ИЗ
| ВтИзделия КАК Т
| ГДЕ
| Т.ВидИзделия = 0
| И Т.Спецификация.СпособРаспределенияЗатратНаВыходныеИзделия =
| ЗНАЧЕНИЕ(Перечисление.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоПлановойСтоимости))",
ИспользуетсяЦенообразование25);
Иначе
ПараметрыПодстановки = ПроизводствоСервер.ПараметрыПодстановкиАлгоритмаРасчетаДолейСтоимости(
"ВтИзделия",
"ВтИзделия.Спецификация.СпособРаспределенияЗатратНаВыходныеИзделия",
"(Номенклатура, Характеристика) В (
| Выбрать
| Т.Номенклатура,
| Т.Характеристика
| ИЗ
| ВтИзделия КАК Т
| ГДЕ
| Т.ВидИзделия = 0
| И Т.Спецификация.СпособРаспределенияЗатратНаВыходныеИзделия =
| ЗНАЧЕНИЕ(Перечисление.СпособыРаспределенияЗатратНаВыходныеИзделия.ПоПлановойСтоимости))");
КонецЕсли;
ПроизводствоСервер.ВыполнитьПодстановкуАлгоритмаРасчетаДолейСтоимости(ТекстЗапроса, ПараметрыПодстановки, ИспользуетсяЦенообразование25);
Иначе
ПараметрыПодстановки = ПроизводствоСервер.ПараметрыПодстановкиАлгоритмаРасчетаДолейСтоимости("ВтИзделия");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ПараметрыПодстановки.СоединениеДоляСтоимости, "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ПараметрыПодстановки.ДоляСтоимостиНаЕдиницу, "0");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ПараметрыПодстановки.ДоляСтоимости, ПараметрыПодстановки.ИсточникДоляСтоимости);
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "ВыходныеИзделия");
КонецЕсли;
#КонецОбласти
#Область ВозвратныеОтходы
Если ПереченьДанных.Найти("ВозвратныеОтходы") <> Неопределено Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| &ВозвратныеОтходы_Представления,
| ВтИзделия.Идентификатор КАК Идентификатор,
| ВтИзделия.НомерСтроки КАК НомерСтроки,
| ВтИзделия.ВидНоменклатуры КАК ВидНоменклатуры,
| ВтИзделия.Номенклатура КАК Номенклатура,
| ВтИзделия.Характеристика КАК Характеристика,
| ВтИзделия.ЛюбаяХарактеристика КАК ЛюбаяХарактеристика,
|
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК ЕдиницаИзмеренияШтучная,
| ЕСТЬNULL(&ТекстЗапросаТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК УпаковкаШтучная,
|
| 0 КАК Количество,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковок,
| ВтИзделия.КоличествоУпаковок КАК КоличествоУпаковокНаЕдиницуПартииВыпуска,
| ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения,
| ВтИзделия.Упаковка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК ДанныеУпаковки,
|
| ЕСТЬNULL(ОсновноеВыходноеИзделие.Количество, 0) КАК КоличествоИзделие,
|
| ВтИзделия.Этап КАК Этап,
| ВтИзделия.Этап.Подразделение КАК ПодразделениеЭтапа,
| ВтИзделия.Этап.НомерЭтапа КАК НомерЭтапа,
| ВтИзделия.Этап.НомерСледующегоЭтапа КАК НомерСледующегоЭтапа,
| ВтИзделия.Операция КАК Операция,
|
| &ТекстПолеСклад КАК Склад,
| ЕСТЬNULL(СпрСклады.ЦеховаяКладовая, ЛОЖЬ) КАК ЭтоЦеховаяКладовая,
| ЕСТЬNULL(ВтИзделия.Номенклатура.ТипНоменклатуры, ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.ПустаяСсылка)) КАК ТипНоменклатуры,
| ВЫБОР
| КОГДА ВтИзделия.Номенклатура.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
| ВтИзделия.ОбработатьПоСпецификации КАК ОбработатьПоСпецификации,
| ВтИзделия.ОбработатьПоСпецификацииСпецификация КАК Спецификация,
|
| ВтИзделия.СтатьяКалькуляции КАК СтатьяКалькуляции,
|
| ВЫБОР
| КОГДА (ВтИзделия.СпособАвтовыбораНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораНоменклатуры.УказываетсяВНСИ)
| ИЛИ ВтИзделия.СпособАвтовыбораХарактеристики <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораХарактеристики.УказываетсяВНСИ))
| И &ИспользоватьПараметризацию
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользуетсяАвтовыбор,
| ПРЕДСТАВЛЕНИЕ("""") КАК СведенияАвтовыбора,
| ВтИзделия.СпособАвтовыбораНоменклатуры КАК СпособАвтовыбораНоменклатуры,
| ВтИзделия.СпособАвтовыбораХарактеристики КАК СпособАвтовыбораХарактеристики,
| ВтИзделия.СвойствоСодержащееНоменклатуру КАК СвойствоСодержащееНоменклатуру,
| ВтИзделия.АлгоритмАвтовыбораХарактеристики КАК АлгоритмАвтовыбораХарактеристики,
| ВтИзделия.ОписаниеИзделия КАК ОписаниеИзделия,
|
| ВЫБОР
| КОГДА &ИспользоватьПараметризацию
| ТОГДА ВтИзделия.АлгоритмРасчетаКоличества
| ИНАЧЕ """"
| КОНЕЦ КАК АлгоритмРасчетаКоличества,
| ПРЕДСТАВЛЕНИЕ("""") КАК Формула,
| ПРЕДСТАВЛЕНИЕ("""") КАК ФормулаОшибкаРасчета,
|
| ЕСТЬNULL(&ОкруглятьКоличествоШтучныхТоваров
| И ВтИзделия.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| И ВтИзделия.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И &ТекстЗапросаТипИзмеряемойВеличины В (
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)), ЛОЖЬ) КАК Округлить,
|
| ВЫБОР ВтИзделия.ТипПроизводственногоПроцесса
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| ТОГДА ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейОтНачала, 0) + ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0)
| ИНАЧЕ - ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейДоОкончания, 0) + ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0)
| КОНЕЦ КАК ДнейОтПотребности,
|
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьДоВыпуска, 0) КАК ДлительностьДоВыпуска,
|
| &ТипСтрокиПобочныйВыход КАК ТипСтроки,
|
| ВтИзделия.КлючСвязи КАК КлючСвязи
|
|ИЗ
| ВтИзделия КАК ВтИзделия
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтИзделия КАК ОсновноеВыходноеИзделие
| ПО ВтИзделия.Идентификатор = ОсновноеВыходноеИзделие.Идентификатор
| И ОсновноеВыходноеИзделие.ЭтоОсновноеИзделие
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НормативнаяДлительностьЭтаповПроизводства КАК НормативнаяДлительностьЭтапов
| ПО НормативнаяДлительностьЭтапов.Этап = ВтИзделия.Этап
|
| ,ТекстСоединенияНастройкиПередачиМатериалов
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
| ПО &ТекстПолеСклад = СпрСклады.Ссылка
|
|ГДЕ
| ВтИзделия.ВидИзделия = 2
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаТипИзмеряемойВеличины",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"ТипИзмеряемойВеличины",
"ВтИзделия.Упаковка",
"ВтИзделия.Номенклатура"));
ИмяТаблицыТовары =
?(ПараметрыВыборки.ВариантЗаполненияОбеспечения = Перечисления.ВариантыЗаполненияОбеспеченияПроизводства.ПоСхемамОбеспечения,
"ВтИзделия",
"ОсновноеВыходноеИзделие");
ТекстЗапросаДляПолученияСклада = ОбеспечениеПроизводства.ТекстЗапросаНастройкиПередачиМатериалов(
ИмяТаблицыТовары,
"Этап.Подразделение",
ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
",ТекстСоединенияНастройкиПередачиМатериалов",
ТекстЗапросаДляПолученияСклада.ТекстСоединения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстПолеСклад",
ТекстЗапросаДляПолученияСклада.ТекстПолеСклад);
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Идентификатор, НомерСтроки";
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "ВозвратныеОтходы");
КонецЕсли;
#КонецОбласти
#Область МатериалыИУслуги
Если ПереченьДанных.Найти("МатериалыИУслуги") <> Неопределено Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| &МатериалыИУслуги_Представления,
| ОсновноеВыходноеИзделие.Идентификатор КАК Идентификатор,
| ВЫРАЗИТЬ(МатериалыИУслуги.НомерСтроки КАК ЧИСЛО(10,0)) КАК НомерСтроки,
| МатериалыИУслуги.Номенклатура КАК Номенклатура,
| МатериалыИУслуги.Характеристика КАК Характеристика,
| ЕСТЬNULL(МатериалыИУслуги.Номенклатура.ТипНоменклатуры, ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.ПустаяСсылка)) КАК ТипНоменклатуры,
|
| ВЫБОР
| КОГДА МатериалыИУслуги.Номенклатура.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
| ВЫБОР
| КОГДА МатериалыИУслуги.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЛюбаяХарактеристика,
|
| 0 КАК Количество,
| МатериалыИУслуги.КоличествоУпаковок КАК КоличествоУпаковок,
| МатериалыИУслуги.КоличествоУпаковок КАК КоличествоУпаковокНаЕдиницуПартииВыпуска,
| ЕСТЬNULL(МатериалыИУслуги.Номенклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения,
| МатериалыИУслуги.Упаковка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК ДанныеУпаковки,
|
| ЕСТЬNULL(МатериалыИУслуги.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК ЕдиницаИзмеренияШтучная,
| ЕСТЬNULL(&ТекстЗапросаТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК УпаковкаШтучная,
|
| ОсновноеВыходноеИзделие.Количество КАК КоличествоИзделие,
|
| МатериалыИУслуги.Этап КАК Этап,
| МатериалыИУслуги.Операция КАК Операция,
|
| &ТекстПолеСклад КАК Склад,
| &ТекстПолеВариантОбеспечения КАК ВариантОбеспечения,
| &ТекстПолеОбособленно КАК Обособленно,
| МатериалыИУслуги.Этап.Подразделение КАК ПодразделениеЭтапа,
| МатериалыИУслуги.Этап.ПроизводствоНаСтороне КАК ПроизводствоНаСтороне,
| МатериалыИУслуги.Этап.НомерЭтапа КАК НомерЭтапа,
| МатериалыИУслуги.Этап.НомерСледующегоЭтапа КАК НомерСледующегоЭтапа,
| ЕСТЬNULL(СпрСклады.ЦеховаяКладовая, ЛОЖЬ) КАК ЭтоЦеховаяКладовая,
|
| &ТекстПолеЗаказатьНаСклад КАК ЗаказатьНаСклад,
|
| &ТекстПолеЗапланировать КАК Запланировать,
|
| МатериалыИУслуги.СтатьяКалькуляции КАК СтатьяКалькуляции,
|
| ВЫБОР
| КОГДА (МатериалыИУслуги.СпособАвтовыбораНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораНоменклатуры.УказываетсяВНСИ)
| ИЛИ МатериалыИУслуги.СпособАвтовыбораХарактеристики <> ЗНАЧЕНИЕ(Перечисление.СпособыАвтовыбораХарактеристики.УказываетсяВНСИ))
| И &ИспользоватьПараметризацию
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользуетсяАвтовыбор,
| ПРЕДСТАВЛЕНИЕ("""") КАК СведенияАвтовыбора,
| МатериалыИУслуги.СпособАвтовыбораНоменклатуры КАК СпособАвтовыбораНоменклатуры,
| МатериалыИУслуги.СпособАвтовыбораХарактеристики КАК СпособАвтовыбораХарактеристики,
| МатериалыИУслуги.СвойствоСодержащееНоменклатуру КАК СвойствоСодержащееНоменклатуру,
| МатериалыИУслуги.АлгоритмАвтовыбораХарактеристики КАК АлгоритмАвтовыбораХарактеристики,
|
| ВЫБОР
| КОГДА &ИспользоватьПараметризацию
| ТОГДА МатериалыИУслуги.АлгоритмРасчетаКоличества
| ИНАЧЕ """"
| КОНЕЦ КАК АлгоритмРасчетаКоличества,
| ПРЕДСТАВЛЕНИЕ("""") КАК Формула,
| ПРЕДСТАВЛЕНИЕ("""") КАК ФормулаОшибкаРасчета,
|
| ЕСТЬNULL(&ОкруглятьКоличествоШтучныхТоваров
| И МатериалыИУслуги.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| И МатериалыИУслуги.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И &ТекстЗапросаТипИзмеряемойВеличины В (
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)) , ЛОЖЬ) КАК Округлить,
|
| МатериалыИУслуги.ПроизводитсяВПроцессе КАК Производится,
| МатериалыИУслуги.ПроизводитсяВПроцессе КАК ПроизводитсяВПроцессе,
| МатериалыИУслуги.СпособПолученияМатериала КАК СпособПолученияМатериала,
| МатериалыИУслуги.ИсточникПолученияПолуфабриката КАК ИсточникПолученияПолуфабриката,
|
| ВЫБОР
| КОГДА МатериалыИУслуги.ПроизводитсяВПроцессе
| И МатериалыИУслуги.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.РесурсныеСпецификации
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыПолучениеМатериаловЭтапаПроизводства.ПроизвестиПоСпецификации)
| КОГДА МатериалыИУслуги.ПроизводитсяВПроцессе
| И МатериалыИУслуги.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.ЭтапыПроизводства
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыПолучениеМатериаловЭтапаПроизводства.ПроизвестиНаЭтапе)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыПолучениеМатериаловЭтапаПроизводства.ПустаяСсылка)
| КОНЕЦ КАК СпособПолученияПолуфабриката,
|
| ВЫБОР
| КОГДА МатериалыИУслуги.СпецификацияРемонта <> ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка)
| ТОГДА МатериалыИУслуги.СпецификацияРемонта
| ИНАЧЕ ЕСТЬNULL(ВЫРАЗИТЬ(МатериалыИУслуги.ИсточникПолученияПолуфабриката КАК Справочник.РесурсныеСпецификации), ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка))
| КОНЕЦ КАК Спецификация,
|
| МатериалыИУслуги.ПланироватьНеРанее КАК ПланироватьНеРанее,
| МатериалыИУслуги.СпецификацияРемонта КАК СпецификацияРемонта,
|
| ВЫБОР МатериалыИУслуги.Ссылка.ТипПроизводственногоПроцесса
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| ТОГДА ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейОтНачала, 0)
| ИНАЧЕ - ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейДоОкончания, 0)
| КОНЕЦ КАК ДнейОтПотребности,
|
| ЕСТЬNULL(ВЫБОР
| КОГДА НормативнаяДлительностьЭтапов.ДлительностьВСекундах = 0 ТОГДА
| НормативнаяДлительностьЭтапов.ДлительностьДоВыпуска + 0.0001
| ИНАЧЕ
| НормативнаяДлительностьЭтапов.ДлительностьДоВыпуска + НормативнаяДлительностьЭтапов.ДлительностьВСекундах
| КОНЕЦ, 0) КАК ДлительностьДоВыпуска,
|
| МатериалыИУслуги.ПрименениеМатериала КАК ПрименениеМатериала,
| МатериалыИУслуги.Альтернативный КАК Альтернативный,
|
| МатериалыИУслуги.Вероятность КАК Вероятность,
| ВЫБОР
| КОГДА (МатериалыИУслуги.Альтернативный ИЛИ &СпособРасчетаМатериалов = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаМатериалов.ВероятноеПотребление))
| И МатериалыИУслуги.Вероятность > 0
| ТОГДА МатериалыИУслуги.Вероятность / 100
| ИНАЧЕ 1
| КОНЕЦ КАК КоэффициентВероятности,
|
| ЛОЖЬ КАК ВходящееИзделие,
|
| ОсновноеВыходноеИзделие.НачалоПроизводства КАК НачалоПроизводства,
| ОсновноеВыходноеИзделие.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
|
| ЛОЖЬ КАК Вспомогательный,
| ВЫБОР
| КОГДА МатериалыИУслуги.ПроизводитсяВПроцессе
| ТОГДА &ТипСтрокиПолуфабрикат
| ИНАЧЕ &ТипСтрокиМатериал
| КОНЕЦ КАК ТипСтроки,
|
| ЕСТЬNULL(МатериалыИУслуги.Номенклатура.ПрослеживаемыйТовар, ЛОЖЬ) КАК ПрослеживаемыйТовар,
|
| &ПустойКлючСвязи КАК КлючСвязиНабор,
|
| МатериалыИУслуги.КлючСвязи КАК КлючСвязи
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК МатериалыИУслуги
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтИзделия КАК ОсновноеВыходноеИзделие
| ПО МатериалыИУслуги.Ссылка = ОсновноеВыходноеИзделие.Спецификация
| И ОсновноеВыходноеИзделие.ЭтоОсновноеИзделие
|
| ,ТекстСоединенияЗаказатьНаСклад
|
| ,ТекстСоединенияПараметрыОбеспечения
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НормативнаяДлительностьЭтаповПроизводства КАК НормативнаяДлительностьЭтапов
| ПО НормативнаяДлительностьЭтапов.Этап = МатериалыИУслуги.Этап
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
| ПО &ТекстПолеСклад = СпрСклады.Ссылка
|
| ,ТекстСоединенияСпособыОбеспечения
|
|ГДЕ
| (НЕ МатериалыИУслуги.Альтернативный ИЛИ &СпособРасчетаМатериалов В (
| ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаМатериалов.ВероятноеПотребление),
| ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаМатериалов.МаксимальноеПотребление)))
|
|";
ПолеЗаказатьНаСклад = ПараметрыПодстановкиПоляЗаказатьНаСклад("МатериалыИУслуги",, ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолеЗаказатьНаСклад" , ПолеЗаказатьНаСклад.ТекстПоля);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",ТекстСоединенияЗаказатьНаСклад", ПолеЗаказатьНаСклад.ТекстСоединения);
ОбеспечениеПроизводства.ВыполнитьПодстановкуПараметровОбеспеченияМатериалов(ТекстЗапроса,
"МатериалыИУслуги",
"СпособПолученияМатериала",
"&Подразделение",
ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстПоляПодразделение = "
| (ВЫБОР
| КОГДА ОсновноеВыходноеИзделие.ПодразделениеИсполнитель = ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| ТОГДА МатериалыИУслуги.Этап.Подразделение
| ИНАЧЕ ОсновноеВыходноеИзделие.ПодразделениеИсполнитель
| КОНЕЦ)
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Подразделение", ТекстПоляПодразделение);
ТекстПолеЗапланировать = "ЛОЖЬ";
ТекстСоединенияСпособыОбеспечения = "";
Если ПараметрыВыборки.РассчитыватьПризнакЗапланироватьПроизводство Тогда
ТекстПолеЗапланировать = ТекстПодстановкиПоляЗапланировать("ОсновноеВыходноеИзделие.ПодразделениеДиспетчер");
ТекстСоединенияСпособыОбеспечения = РегистрыСведений.СхемыОбеспечения.ПодставитьСоединениеДляПолученияСпособаОбеспечения(
"ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпособыОбеспеченияПотребностей КАК СпрСпособОбеспечения
| ПО &ПодстановкаОсновногоСпособаОбеспечения",
"ПодстановкаОсновногоСпособаОбеспечения",
"МатериалыИУслуги.Номенклатура, МатериалыИУслуги.Характеристика, СпрСклады.Ссылка");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолеЗапланировать" , ТекстПолеЗапланировать);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",ТекстСоединенияСпособыОбеспечения", ТекстСоединенияСпособыОбеспечения);
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Идентификатор,
| НомерСтроки";
ТекстПоляТипИзмеряемойВеличины = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"ТипИзмеряемойВеличины",
"МатериалыИУслуги.Упаковка",
"МатериалыИУслуги.Номенклатура");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаТипИзмеряемойВеличины",
ТекстПоляТипИзмеряемойВеличины);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Распоряжение", "ОсновноеВыходноеИзделие.Распоряжение");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Назначение", "ОсновноеВыходноеИзделие.Назначение");
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "МатериалыИУслуги");
КонецЕсли;
#КонецОбласти
#Область Трудозатраты
Если ПереченьДанных.Найти("Трудозатраты") <> Неопределено Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| ОсновноеВыходноеИзделие.Идентификатор КАК Идентификатор,
| Трудозатраты.НомерСтроки КАК НомерСтроки,
| Трудозатраты.ВидРабот КАК ВидРабот,
| Трудозатраты.ВидРабот.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ОсновноеВыходноеИзделие.Количество КАК КоличествоИзделие,
| Трудозатраты.СтатьяКалькуляции КАК СтатьяКалькуляции,
| Трудозатраты.НазначениеРабот КАК НазначениеРабот,
|
| Трудозатраты.Количество КАК Количество,
| Трудозатраты.Количество КАК КоличествоНаЕдиницуПартииВыпуска,
|
| ВЫБОР Трудозатраты.Ссылка.ТипПроизводственногоПроцесса
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| ТОГДА ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейОтНачала, 0)
| ИНАЧЕ - ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДнейДоОкончания, 0)
| КОНЕЦ КАК ДнейОтПотребности,
|
| Трудозатраты.Этап КАК Этап,
| Трудозатраты.Операция КАК Операция,
|
| ЕСТЬNULL(НормативнаяДлительностьЭтапов.ДлительностьВДнях, 0) КАК ДлительностьЭтапаВДнях,
|
| Трудозатраты.Этап.ДлительностьЭтапа КАК ДлительностьЭтапа,
| Трудозатраты.Этап.Подразделение КАК ПодразделениеЭтапа,
|
| ВЫБОР
| КОГДА &ИспользоватьПараметризацию
| ТОГДА Трудозатраты.АлгоритмРасчетаКоличества
| ИНАЧЕ """"
| КОНЕЦ КАК АлгоритмРасчетаКоличества,
| ПРЕДСТАВЛЕНИЕ("""") КАК Формула,
| ПРЕДСТАВЛЕНИЕ("""") КАК ФормулаОшибкаРасчета,
|
| Трудозатраты.КлючСвязи КАК КлючСвязи,
| ЛОЖЬ КАК Вспомогательный
|
|ИЗ
| Справочник.РесурсныеСпецификации.Трудозатраты КАК Трудозатраты
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтИзделия КАК ОсновноеВыходноеИзделие
| ПО Трудозатраты.Ссылка = ОсновноеВыходноеИзделие.Спецификация
| И ОсновноеВыходноеИзделие.ЭтоОсновноеИзделие
|
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НормативнаяДлительностьЭтаповПроизводства КАК НормативнаяДлительностьЭтапов
| ПО НормативнаяДлительностьЭтапов.Этап = Трудозатраты.Этап
|
|УПОРЯДОЧИТЬ ПО
| Идентификатор,
| НомерСтроки
|";
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "Трудозатраты");
КонецЕсли;
#КонецОбласти
#Область ДанныеУпаковок
ОписаниеТаблиц = Новый Массив;
ОписаниеТаблиц.Добавить("ВтИзделия");
Если ПереченьДанных.Найти("МатериалыИУслуги") <> Неопределено Тогда
ОписаниеТаблицы = УправлениеДаннымиОбИзделиях.ОписаниеТаблицыТекстаЗапросаДанныеУпаковок();
ОписаниеТаблицы.ИмяТаблицы = "Справочник.РесурсныеСпецификации.МатериалыИУслуги";
ОписаниеТаблицы.ТекстСоединения = "
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО Т.Ссылка = ВтДанныеПоНоменклатуре.Спецификация";
ОписаниеТаблиц.Добавить(ОписаниеТаблицы);
КонецЕсли;
ТекстЗапроса = УправлениеДаннымиОбИзделиях.ТекстЗапросаДанныеУпаковок(ОписаниеТаблиц);
ТекстыЗапроса.Добавить(ТекстЗапроса + РазделительЗапросовВПакете, "ДанныеУпаковок");
#КонецОбласти
Для каждого Элемент Из ТекстыЗапроса Цикл
ДобавитьПредставленияВЗапрос(Элемент.Значение, ПараметрыВыборки.ПолучитьПредставления);
Если ПараметрыВыборки.СпособРасчетаМатериалов <> Перечисления.СпособыРасчетаМатериалов.МинимальноеПотребление Тогда
Элемент.Значение = СтрЗаменить(Элемент.Значение,
"НормативнаяДлительностьЭтапов.ДнейОтНачала",
"НормативнаяДлительностьЭтапов.ДнейОтНачалаМакс");
Элемент.Значение = СтрЗаменить(Элемент.Значение,
"НормативнаяДлительностьЭтапов.ДнейДоОкончания",
"НормативнаяДлительностьЭтапов.ДнейДоОкончанияМакс");
КонецЕсли;
КонецЦикла;
Запрос.УстановитьПараметр("УчитыватьВероятностьБрака", ПараметрыВыборки.УчитыватьВероятностьБрака);
Запрос.УстановитьПараметр("СпособРасчетаМатериалов", ПараметрыВыборки.СпособРасчетаМатериалов);
Запрос.УстановитьПараметр("ОкруглятьКоличествоШтучныхТоваров", ПараметрыВыборки.ОкруглятьКоличествоШтучныхТоваров);
Запрос.УстановитьПараметр("СкладПоУмолчанию", Справочники.Склады.СкладПоУмолчанию());
ИспользоватьПараметризацию = ПолучитьФункциональнуюОпцию("ИспользоватьПараметризациюРесурсныхСпецификаций");
ОтключитьРасчетПараметрическихФормул = Ложь;
Если ПараметрыВыборки.Свойство("ОтключитьРасчетПараметрическихФормул", ОтключитьРасчетПараметрическихФормул)
И ОтключитьРасчетПараметрическихФормул Тогда
ИспользоватьПараметризацию = Ложь;
КонецЕсли;
Запрос.УстановитьПараметр("ИспользоватьПараметризацию", ИспользоватьПараметризацию);
Если ПараметрыВыборки.Свойство("ПереопределениеНастройкиПартииВыпуска")
И ПараметрыВыборки.ПереопределениеНастройкиПартииВыпуска.Использовать Тогда
Запрос.УстановитьПараметр("ПереопределятьНастройкуПартииВыпуска", Истина);
Запрос.УстановитьПараметр("ВыпускПроизвольнымиПорциями", ПараметрыВыборки.ПереопределениеНастройкиПартииВыпуска.ВыпускПроизвольнымиПорциями);
Иначе
Запрос.УстановитьПараметр("ПереопределятьНастройкуПартииВыпуска", Ложь);
Запрос.УстановитьПараметр("ВыпускПроизвольнымиПорциями", Ложь);
КонецЕсли;
Запрос.УстановитьПараметр("ДоступноОписаниеПартииВыпуска", УправлениеДаннымиОбИзделиях.ДоступноОписаниеПартииВыпуска());
Запрос.УстановитьПараметр("ВидЦены", ПроизводствоСерверПовтИсп.ВидЦеныПлановойСтоимости());
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Валюта", ПроизводствоСерверПовтИсп.ВалютаПлановойСебестоимостиПродукции());
Запрос.УстановитьПараметр("БазоваяВалюта", ЗначениеНастроекПовтИсп.БазоваяВалютаПоУмолчанию());
Запрос.УстановитьПараметр("ТипСтрокиМатериал", ТипСтрокиМатериал());
Запрос.УстановитьПараметр("ТипСтрокиПолуфабрикат", ТипСтрокиПолуфабрикат());
Запрос.УстановитьПараметр("ТипСтрокиПромежуточныйПолуфабрикат", ТипСтрокиПромежуточныйПолуфабрикат());
Запрос.УстановитьПараметр("ТипСтрокиВходящееИзделие", ТипСтрокиВходящееИзделие());
Запрос.УстановитьПараметр("ТипСтрокиПобочныйВыход", ТипСтрокиПобочныйВыход());
УстановитьПривилегированныйРежим(Истина);
Таблицы = ОбщегоНазначенияУТ.ВыгрузитьРезультатыЗапроса(Запрос, ТекстыЗапроса, , Ложь, Истина);
УстановитьПривилегированныйРежим(Ложь);
Результат = Новый Соответствие;
Для каждого ИмяНабораДанных Из СтрРазделить("ОсновноеИзделие,РеквизитыСпецификации", ",") Цикл
Таблица = Таблицы[ИмяНабораДанных];
Таблица.Индексы.Добавить("Идентификатор");
КонецЦикла;
Для каждого ИмяНабораДанных Из ПереченьДанных Цикл
Таблица = Таблицы[ИмяНабораДанных];
Таблица.Индексы.Добавить("Идентификатор");
КонецЦикла;
ЗаполнитьПараметрыОбеспеченияМатериалов(Запрос, Таблицы, ПараметрыВыборки);
ЗаполнитьПараметрыОбеспеченияВыходныхИзделий(Запрос, Таблицы, ПараметрыВыборки);
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(
Таблицы.ОсновноеИзделие,
Таблицы.ДанныеУпаковок);
ОсновноеИзделиеСпецификации = Новый Структура("Номенклатура,Упаковка,КоличествоУпаковокНаЕдиницуПартииВыпуска,ДанныеУпаковки");
СтруктураОтбораИдентификатор = Новый Структура("Идентификатор");
СтруктураУпаковкиПоУмолчанию = УправлениеДаннымиОбИзделияхПовтИсп.СтруктураДанныхУпаковки();
ТаблицаДанныеПоНоменклатуре = Таблицы.ДанныеПоНоменклатуре;
Для каждого Строка Из ТаблицаДанныеПоНоменклатуре Цикл
Идентификатор = Строка.Идентификатор;
СтруктураОтбораИдентификатор.Идентификатор = Идентификатор;
СтруктураДанных = ДанныеСпецификацииКонструктор();
ДанныеШапки = Таблицы.РеквизитыСпецификации.Найти(Идентификатор, "Идентификатор");
Если ДанныеШапки <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанных, ДанныеШапки);
КонецЕсли;
СтрокаНабораДанных = Таблицы.ОсновноеИзделие.Найти(Идентификатор, "Идентификатор");
Если СтрокаНабораДанных <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанных.ОсновноеИзделие, СтрокаНабораДанных);
Если НЕ СтруктураДанных.ОсновноеИзделие.ЭтоОсновноеИзделие Тогда
ОсновноеИзделиеСпецификации.Номенклатура = СтрокаНабораДанных.ОсновноеИзделиеНоменклатура;
ОсновноеИзделиеСпецификации.Упаковка = СтрокаНабораДанных.ОсновноеИзделиеУпаковка;
ОсновноеИзделиеСпецификации.ДанныеУпаковки = СтруктураУпаковкиПоУмолчанию;
ОсновноеИзделиеСпецификации.КоличествоУпаковокНаЕдиницуПартииВыпуска =
СтрокаНабораДанных.ОсновноеИзделиеКоличествоУпаковокНаЕдиницуПартииВыпуска;
Если ЗначениеЗаполнено(ОсновноеИзделиеСпецификации.Упаковка) Тогда
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВСтрокеНабораДанных(
ОсновноеИзделиеСпецификации, Таблицы.ДанныеУпаковок);
КонецЕсли;
УправлениеДаннымиОбИзделиях.ЗаполнитьКоэффициентПересчетаВОсновноеИзделие(
СтруктураДанных.ОсновноеИзделие, ОсновноеИзделиеСпецификации);
КонецЕсли;
КонецЕсли;
Для каждого ИмяНабораДанных Из ПереченьДанных Цикл
НаборДанных = Таблицы[ИмяНабораДанных].Скопировать(СтруктураОтбораИдентификатор);
Если ИмяНабораДанных = "МатериалыИУслуги" Тогда
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(
НаборДанных,
Таблицы.ДанныеУпаковок);
ПрименитьОтборПоПараметрамВыбораДанных(
НаборДанных,
ПараметрыВыборки);
ЗаполнитьИнформациюПоПрименениюМатериала(
НаборДанных,
ПараметрыВыборки);
ВключитьДанныеНаборовВСтруктуруДанныхСпецификации(
СтруктураДанных,
Таблицы,
ПараметрыВыборки,
СтруктураОтбораИдентификатор);
ИначеЕсли ИмяНабораДанных = "ВходящиеИзделия" Тогда
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(
НаборДанных,
Таблицы.ДанныеУпаковок);
ИначеЕсли ИмяНабораДанных = "ВыходныеИзделия" Тогда
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(
НаборДанных,
Таблицы.ДанныеУпаковок);
ИначеЕсли ИмяНабораДанных = "ВозвратныеОтходы" Тогда
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(
НаборДанных,
Таблицы.ДанныеУпаковок);
КонецЕсли;
СтруктураДанных.Вставить(ИмяНабораДанных, НаборДанных);
КонецЦикла;
Результат.Вставить(Идентификатор, СтруктураДанных);
КонецЦикла;
Если СписокТаблицДляУдаления.Количество() > 0 Тогда
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(МенеджерВременныхТаблиц, СтрСоединить(СписокТаблицДляУдаления,","));
КонецЕсли;
ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ВесЗамера);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПереченьДанных
Функция ПереченьДанныхСпецификации() Экспорт
ПереченьДанных = Новый Массив;
ПереченьДанных.Добавить("Этапы");
ПереченьДанных.Добавить("ВыходныеИзделия");
ПереченьДанных.Добавить("ВозвратныеОтходы");
ПереченьДанных.Добавить("МатериалыИУслуги");
ПереченьДанных.Добавить("Трудозатраты");
Возврат ПереченьДанных;
КонецФункции
#КонецОбласти
#Область РасчетКоличества
Функция РассчитатьПартиюВыпускаПоНоменклатуре(ДанныеПоНоменклатуре, ДанныеСпецификации, ПараметрыВыборки) Экспорт
Количество = ДанныеПоНоменклатуре.Количество;
Если ПараметрыВыборки.ОкруглятьКоличествоШтучныхТоваров
И Цел(Количество) <> Количество
И ДанныеСпецификации.ОсновноеИзделие.ЕдиницаИзмеренияШтучная
И Не ЗначениеЗаполнено(ДанныеСпецификации.ОсновноеИзделие.Упаковка)
И ДанныеСпецификации.ВыпускПроизвольнымиПорциями
И Цел(ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска)
= ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска
И ДанныеСпецификации.ТипПроизводственногоПроцесса = Перечисления.ТипыПроизводственныхПроцессов.Сборка
И ДанныеСпецификации.Свойство("ВыходныеИзделия")
И ДанныеСпецификации.ВыходныеИзделия.Количество() = 1 Тогда
Количество = Цел(Количество) + 1;
КонецЕсли;
МассивПартий = РазбитьНаОптимальныеПартииВыпуска(Количество, ДанныеСпецификации);
Числитель = 0;
Знаменатель = ПроизводствоСервер.НаименьшееОбщееКратноеВКоллекции(МассивПартий, "Знаменатель");
Брак = Неопределено;
Для каждого Партия Из МассивПартий Цикл
Числитель = Числитель + Партия.Числитель * Знаменатель / Партия.Знаменатель;
Если Партия.Брак <> Неопределено Тогда
Если Брак = Неопределено Тогда
Брак = Новый Соответствие;
КонецЕсли;
Для каждого КлючИЗначение Из Партия.Брак Цикл
Если Брак[КлючИЗначение.Ключ] = Неопределено Тогда
Брак.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
Иначе
Брак[КлючИЗначение.Ключ] = Брак[КлючИЗначение.Ключ] + КлючИЗначение.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
НаибольшийОбщийДелитель = ПроизводствоСервер.НаибольшийОбщийДелитель(Числитель, Знаменатель);
Числитель = Числитель / НаибольшийОбщийДелитель;
Знаменатель = Знаменатель / НаибольшийОбщийДелитель;
Результат = ПартияВыпуска(Числитель, Знаменатель, Брак, МассивПартий);
Возврат Результат;
КонецФункции
Функция РазбитьНаОптимальныеПартииВыпуска(Знач Количество, ДанныеСпецификации) Экспорт
Результат = Новый Массив;
ЕстьВыпускПроизвольнымиПорциями = ДанныеСпецификации.ВыпускПроизвольнымиПорциями;
ЕстьНастройкиРазбивкиНаПартии = ДанныеСпецификации.ОптимальнаяПартияВыпуска <> 0;
ЕстьБрак = ДанныеСпецификации.ОсновноеИзделие.КоэффициентБрака <> 0;
ДанныеУпаковки = ДанныеСпецификации.ОсновноеИзделие.ДанныеУпаковки;
Если (ЕстьВыпускПроизвольнымиПорциями И ЕстьНастройкиРазбивкиНаПартии)
ИЛИ ЕстьБрак Тогда
КоличествоПартия = ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска
* ДанныеУпаковки.Числитель / ДанныеУпаковки.Знаменатель;
ДанныеУпаковки = УправлениеДаннымиОбИзделияхПовтИсп.СтруктураДанныхУпаковки();
Иначе
КоличествоПартия = ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковокНаЕдиницуПартииВыпуска;
КонецЕсли;
Если КоличествоПартия = 0 Тогда
Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПартияВыпуска(0, 1));
КонецЕсли;
Остаток = ПроверитьОкруглитьДоЦелыхПартий(
Количество * ДанныеУпаковки.Знаменатель / ДанныеУпаковки.Числитель,
КоличествоПартия,
ДанныеСпецификации);
Если ЕстьВыпускПроизвольнымиПорциями Тогда
КоэффициентПересчетаПартииЗапуска = ДанныеСпецификации.ОсновноеИзделие.КоэффициентПересчетаВОсновноеИзделие;
Иначе
КоэффициентПересчетаПартииЗапуска = КоличествоПартия;
КонецЕсли;
МинимальныйВыпуск = Окр(ДанныеСпецификации.МинимальнаяПартияВыпуска * КоэффициентПересчетаПартииЗапуска, 3);
Если НЕ ЕстьБрак
И НЕ ЕстьНастройкиРазбивкиНаПартии Тогда
Результат.Добавить(ПартияВыпуска(
Макс(Остаток, МинимальныйВыпуск),
КоличествоПартия));
Иначе
ОптимальныйВыпуск = Окр(ДанныеСпецификации.ОптимальнаяПартияВыпуска * КоэффициентПересчетаПартииЗапуска, 3);
ДопустимоеПревышение = Окр(ДанныеСпецификации.ДопустимоеПревышениеОптимальнойПартииВыпуска * КоэффициентПересчетаПартииЗапуска, 3);
Если ОптимальныйВыпуск <> 0 И МинимальныйВыпуск > ОптимальныйВыпуск Тогда
МинимальныйВыпуск = ОптимальныйВыпуск;
КонецЕсли;
ДельтаМинимумОптимум = ОптимальныйВыпуск - МинимальныйВыпуск;
Изделие = ДанныеСпецификации.ОсновноеИзделие;
Если ОптимальныйВыпуск > 0 Тогда
БракСумма = 0;
Если Изделие.КоэффициентБрака = 0 Тогда
ОстатокБрак = 0;
Иначе
ОстатокБрак = ПроверитьОкруглитьДоЦелыхПартий(
Окр(Остаток / (1-Изделие.КоэффициентБрака), ?(Изделие.ЕдиницаИзмеренияШтучная, 0, 3)),
КоличествоПартия,
ДанныеСпецификации);
КонецЕсли;
Пока Остаток >= ОптимальныйВыпуск ИЛИ ОстатокБрак >= ОптимальныйВыпуск Цикл
Результат.Добавить(ОптимальныйВыпуск);
Если Изделие.КоэффициентБрака = 0 Тогда
Остаток = Остаток - ОптимальныйВыпуск;
Иначе
БракСумма = БракСумма + (ОптимальныйВыпуск * Изделие.КоэффициентБрака);
БракЗачет = Окр(БракСумма, ?(Изделие.ЕдиницаИзмеренияШтучная, 0, 3));
Если БракЗачет > 0 Тогда
Остаток = Остаток - (ОптимальныйВыпуск - БракЗачет);
БракСумма = БракСумма - БракЗачет;
Иначе
Остаток = Остаток - ОптимальныйВыпуск;
КонецЕсли;
ОстатокБрак = ПроверитьОкруглитьДоЦелыхПартий(
Окр((Остаток / (1-Изделие.КоэффициентБрака)) + БракСумма, ?(Изделие.ЕдиницаИзмеренияШтучная, 0, 3)),
КоличествоПартия,
ДанныеСпецификации);
КонецЕсли;
КонецЦикла;
Если ОстатокБрак > 0 И ОстатокБрак > Остаток Тогда
Остаток = ОстатокБрак;
КонецЕсли;
Если Остаток > 0 Тогда
Если Остаток <= Результат.Количество() * ДопустимоеПревышение Тогда
Если ДанныеСпецификации.ВыпускПроизвольнымиПорциями Тогда
Для Х = -Результат.ВГраница() По 0 Цикл
Если Остаток <= 0 Тогда
Прервать;
КонецЕсли;
Результат[-Х] = Результат[-Х] + Мин(ДопустимоеПревышение, Остаток);
Остаток = Остаток - Мин(ДопустимоеПревышение, Остаток);
КонецЦикла;
Иначе
ОстатокНаПартию = Цел(Остаток / Результат.Количество());
Если ОстатокНаПартию > 0 Тогда
Для Х = 0 По Результат.ВГраница() Цикл
Результат[Х] = Результат[Х] + ОстатокНаПартию;
КонецЦикла;
КонецЕсли;
Остаток = Остаток % Результат.Количество();
Для Х = -Результат.ВГраница() По 0 Цикл
Если Остаток <= 0 Тогда
Прервать;
КонецЕсли;
Результат[-Х] = Результат[-Х] + Мин(1, Остаток);
Остаток = Остаток - 1;
КонецЦикла;
КонецЕсли;
Иначе
Для Х = -Результат.ВГраница() По 0 Цикл
Если Остаток >= МинимальныйВыпуск Тогда
Прервать;
КонецЕсли;
Результат[-Х] = Результат[-Х] - Мин(ДельтаМинимумОптимум, МинимальныйВыпуск - Остаток);
Остаток = Остаток + Мин(ДельтаМинимумОптимум, МинимальныйВыпуск - Остаток);
КонецЦикла;
Результат.Добавить(Макс(Остаток, МинимальныйВыпуск));
КонецЕсли;
КонецЕсли;
Иначе
Если Изделие.КоэффициентБрака <> 0 Тогда
Остаток = ПроверитьОкруглитьДоЦелыхПартий(
Окр(Количество / (1-Изделие.КоэффициентБрака), ?(Изделие.ЕдиницаИзмеренияШтучная, 0, 3)),
КоличествоПартия,
ДанныеСпецификации);
КонецЕсли;
Результат.Добавить(Макс(Остаток, МинимальныйВыпуск));
КонецЕсли;
СтрокиБрак = Неопределено;
Если ДанныеСпецификации.Свойство("ВыходныеИзделия") Тогда
Для Индекс = 0 По ДанныеСпецификации.ВыходныеИзделия.Количество()-1 Цикл
Если ДанныеСпецификации.ВыходныеИзделия[Индекс].КоэффициентБрака <> 0 Тогда
Если СтрокиБрак = Неопределено Тогда
СтрокиБрак = Новый Соответствие;
КонецЕсли;
СтрокиБрак.Вставить(Индекс, 0);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для Х = 0 По Результат.ВГраница() Цикл
Если СтрокиБрак = Неопределено Тогда
Брак = Неопределено;
Иначе
Брак = Новый Соответствие;
Для каждого КлючИЗначение Из СтрокиБрак Цикл
Изделие = ДанныеСпецификации.ВыходныеИзделия[КлючИЗначение.Ключ];
СтрокиБрак[КлючИЗначение.Ключ] = СтрокиБрак[КлючИЗначение.Ключ]
+ (Изделие.КоличествоУпаковокНаЕдиницуПартииВыпуска * Изделие.ДанныеУпаковки.Числитель
* Результат[Х] / (КоличествоПартия * Изделие.ДанныеУпаковки.Знаменатель)
* Изделие.КоэффициентБрака);
КоличествоБрак = Окр(СтрокиБрак[КлючИЗначение.Ключ], ?(Изделие.ЕдиницаИзмеренияШтучная, 0, 3));
Если КоличествоБрак > 0 Тогда
Брак.Вставить(КлючИЗначение.Ключ, КоличествоБрак);
СтрокиБрак[КлючИЗначение.Ключ] = СтрокиБрак[КлючИЗначение.Ключ] - КоличествоБрак;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат[Х] = ПартияВыпуска(Результат[Х], КоличествоПартия, Брак);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура РассчитатьКоличествоНаПартиюВыпуска(ПартияВыпуска, ДанныеСпецификации, ДанныеПоНоменклатуре) Экспорт
ПереченьДанных = ПереченьДанныхСпецификации();
ОбработатьДанныеНаборов(ПартияВыпуска, ДанныеСпецификации, "ПередРасчетом");
ДанныеДляРасчета = Неопределено;
Если ДанныеСпецификации.Свойство("ОсновноеИзделие") Тогда
РассчитатьКоличествоВСтроке(ПартияВыпуска, ДанныеСпецификации.ОсновноеИзделие, Истина, Ложь, Ложь);
Если ПартияВыпуска.Брак <> Неопределено Тогда
Для каждого КлючИЗначение Из ПартияВыпуска.Брак Цикл
Строка = ДанныеСпецификации.ВыходныеИзделия[КлючИЗначение.Ключ];
Если ДанныеСпецификации.ОсновноеИзделие.Номенклатура <> Строка.Номенклатура
ИЛИ ДанныеСпецификации.ОсновноеИзделие.Характеристика <> Строка.Характеристика Тогда
Продолжить;
КонецЕсли;
ДанныеСпецификации.ОсновноеИзделие.Количество = ДанныеСпецификации.ОсновноеИзделие.Количество - КлючИЗначение.Значение;
Если ДанныеСпецификации.ОсновноеИзделие.ДанныеУпаковки.Числитель <> 0 Тогда
ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковок = ДанныеСпецификации.ОсновноеИзделие.Количество
* ДанныеСпецификации.ОсновноеИзделие.ДанныеУпаковки.Знаменатель
/ ДанныеСпецификации.ОсновноеИзделие.ДанныеУпаковки.Числитель;
Иначе
ДанныеСпецификации.ОсновноеИзделие.Количество = 0;
ДанныеСпецификации.ОсновноеИзделие.КоличествоУпаковок = 0;
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ДанныеСпецификации.Свойство("ВыходныеИзделия")
И ПереченьДанных.Найти("ВыходныеИзделия") <> Неопределено Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеСпецификации.ВыходныеИзделия,
Истина, Ложь, Истина, Истина, Истина, ДанныеДляРасчета);
Если ПартияВыпуска.Брак <> Неопределено Тогда
Для каждого КлючИЗначение Из ПартияВыпуска.Брак Цикл
Строка = ДанныеСпецификации.ВыходныеИзделия[КлючИЗначение.Ключ];
Строка.Количество = Строка.Количество - КлючИЗначение.Значение;
Если Строка.ДанныеУпаковки.Числитель <> 0 Тогда
Строка.КоличествоУпаковок = Строка.Количество * Строка.ДанныеУпаковки.Знаменатель / Строка.ДанныеУпаковки.Числитель;
Иначе
Строка.Количество = 0;
Строка.КоличествоУпаковок = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
РассчитатьДнейОтПотребности(ДанныеПоНоменклатуре, ДанныеСпецификации.ВыходныеИзделия);
ПроизводствоКлиентСервер.РассчитатьДолюСтоимостиВКоллекции(ДанныеСпецификации.ВыходныеИзделия, ДанныеСпецификации.СпособРаспределенияЗатратНаВыходныеИзделия);
КонецЕсли;
Если ДанныеСпецификации.Свойство("МатериалыИУслуги")
И ПереченьДанных.Найти("МатериалыИУслуги") <> Неопределено Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеСпецификации.МатериалыИУслуги,
Истина, Истина, Истина, Ложь, Истина, ДанныеДляРасчета);
РассчитатьДнейОтПотребности(ДанныеПоНоменклатуре, ДанныеСпецификации.МатериалыИУслуги);
КонецЕсли;
Если ДанныеСпецификации.Свойство("ВозвратныеОтходы")
И ПереченьДанных.Найти("ВозвратныеОтходы") <> Неопределено Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеСпецификации.ВозвратныеОтходы,
Истина, Ложь, Истина, Истина, Истина, ДанныеДляРасчета);
РассчитатьДнейОтПотребности(ДанныеПоНоменклатуре, ДанныеСпецификации.ВозвратныеОтходы);
КонецЕсли;
Если ДанныеСпецификации.Свойство("Трудозатраты")
И ПереченьДанных.Найти("Трудозатраты") <> Неопределено Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеСпецификации.Трудозатраты,
Ложь, Ложь, Ложь, Ложь, Истина, ДанныеДляРасчета);
РассчитатьДнейОтПотребности(ДанныеПоНоменклатуре, ДанныеСпецификации.Трудозатраты);
КонецЕсли;
Если ДанныеСпецификации.Свойство("Этапы")
И ПереченьДанных.Найти("Этапы") <> Неопределено Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеСпецификации.Этапы,
Ложь, Ложь, Ложь, Ложь, Ложь);
Для каждого ДанныеЭтапа Из ДанныеСпецификации.Этапы Цикл
Если ДанныеЭтапа.ПроизводствоНаСтороне Тогда
РассчитатьКоличество(ПартияВыпуска, ДанныеЭтапа.УслугиПереработчика,
Ложь, Ложь, Ложь, Ложь, Ложь);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ОбработатьДанныеНаборов(ПартияВыпуска, ДанныеСпецификации, "ПослеРасчета");
КонецПроцедуры
Процедура РассчитатьКоличество(ПартияВыпуска, Коллекция, ЕстьУпаковки, ЕстьВероятность, Округлить, КонтрольОкругленияВверх, РассчитатьФормулы, ДанныеДляРасчета = Неопределено)
Для каждого Строка Из Коллекция Цикл
РассчитатьКоличествоВСтроке(ПартияВыпуска, Строка, ЕстьУпаковки, ЕстьВероятность, РассчитатьФормулы, ДанныеДляРасчета);
Если Округлить Тогда
ОкруглитьКоличествоВСтроке(ПартияВыпуска, Строка, ЕстьУпаковки, КонтрольОкругленияВверх);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РассчитатьКоличествоВСтроке(ПартияВыпуска, Строка, ЕстьУпаковки, ЕстьВероятность, РассчитатьФормулы, ДанныеДляРасчета = Неопределено)
Если ЕстьУпаковки Тогда
Если Строка.ДанныеУпаковки.Знаменатель <> 0 Тогда
Строка.Количество = Строка.КоличествоУпаковокНаЕдиницуПартииВыпуска
* Строка.ДанныеУпаковки.Числитель * ПартияВыпуска.Числитель
/ (Строка.ДанныеУпаковки.Знаменатель * ПартияВыпуска.Знаменатель);
Иначе
Строка.Количество = 0;
КонецЕсли;
Иначе
Строка.Количество = Строка.КоличествоНаЕдиницуПартииВыпуска * ПартияВыпуска.Числитель / ПартияВыпуска.Знаменатель;
КонецЕсли;
Если ЕстьВероятность И Строка.КоэффициентВероятности <> 1 Тогда
Строка.Количество = Строка.Количество * Строка.КоэффициентВероятности;
КонецЕсли;
Если ЕстьУпаковки Тогда
Если Строка.ДанныеУпаковки.Числитель <> 0 Тогда
Строка.КоличествоУпаковок = Строка.Количество * Строка.ДанныеУпаковки.Знаменатель / Строка.ДанныеУпаковки.Числитель;
Строка.Количество = ОписаниеТипаКоличественногоРеквизита().ПривестиЗначение(Строка.Количество);
Иначе
Строка.КоличествоУпаковок = 0;
Строка.Количество = 0;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОкруглитьКоличествоВСтроке(ПартияВыпуска, Строка, ЕстьУпаковки, КонтрольОкругленияВверх)
Если НЕ Строка.Округлить
ИЛИ Строка.Количество = Цел(Строка.Количество) Тогда
Возврат;
КонецЕсли;
Количество = Окр(Строка.Количество);
ДопустимоеОтклонение = ОбщегоНазначенияУТПовтИсп.ДопустимоеОтклонениеПриОкругленииКоличества();
Отклонение = ?(Количество > Строка.Количество,
(Количество - Строка.Количество)/Строка.Количество * 100,
(Строка.Количество - Количество)/Строка.Количество * 100);
Если Строка.ЭтоЦеховаяКладовая Тогда
Если Отклонение <= ДопустимоеОтклонение Тогда
Строка.Количество = Количество;
Если ЕстьУпаковки Тогда
Если Строка.ДанныеУпаковки.Числитель <> 0 Тогда
Строка.КоличествоУпаковок = Строка.Количество * Строка.ДанныеУпаковки.Знаменатель / Строка.ДанныеУпаковки.Числитель;
Иначе
Строка.Количество = 0;
Строка.КоличествоУпаковок = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если Отклонение > ДопустимоеОтклонение Тогда
Если КонтрольОкругленияВверх
И Количество > Строка.Количество Тогда
Количество = Количество - 1;
ИначеЕсли НЕ КонтрольОкругленияВверх
И Количество < Строка.Количество Тогда
Количество = Количество + 1;
КонецЕсли;
КонецЕсли;
Строка.Количество = Количество;
Если ЕстьУпаковки Тогда
Если Строка.ДанныеУпаковки.Числитель <> 0 Тогда
Строка.КоличествоУпаковок = Строка.Количество * Строка.ДанныеУпаковки.Знаменатель / Строка.ДанныеУпаковки.Числитель;
Иначе
Строка.Количество = 0;
Строка.КоличествоУпаковок = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПроверитьОкруглитьДоЦелыхПартий(Количество, КоличествоПартия, ДанныеСпецификации)
Если ДанныеСпецификации.ВыпускПроизвольнымиПорциями Тогда
Возврат Количество;
Иначе
Коэффициент = Количество / КоличествоПартия;
Если Цел(Коэффициент) = Коэффициент Тогда
Возврат Количество;
Иначе
Возврат КоличествоПартия * (Цел(Коэффициент) + 1);
КонецЕсли;
КонецЕсли;
КонецФункции
Функция ОписаниеТипаКоличественногоРеквизита()
Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный));
КонецФункции
Процедура РассчитатьДнейОтПотребности(ДанныеПоНоменклатуре, ИсходнаяТаблица)
Если ДанныеПоНоменклатуре <> Неопределено
И ДанныеПоНоменклатуре.Свойство("ДнейОтПотребности") Тогда
Если ДанныеПоНоменклатуре.ДнейОтПотребности <> Неопределено Тогда
Для каждого СтрокаТаблицы Из ИсходнаяТаблица Цикл
СтрокаТаблицы.ДнейОтПотребности = СтрокаТаблицы.ДнейОтПотребности + ДанныеПоНоменклатуре.ДнейОтПотребности;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПартияВыпуска(Числитель, Знаменатель, Брак = Неопределено, Расшифровка = Неопределено) Экспорт
Результат = Новый Структура;
Результат.Вставить("Числитель", Числитель);
Результат.Вставить("Знаменатель", Знаменатель);
Результат.Вставить("Значение", Числитель / Знаменатель);
Результат.Вставить("Брак", Брак);
Результат.Вставить("Расшифровка", Расшифровка);
Возврат Результат;
КонецФункции
Функция СравнитьПартииВыпуска(Партия1, Партия2) Экспорт
Если Партия1.Значение > Партия2.Значение Тогда
Возврат 1;
ИначеЕсли Партия1.Значение < Партия2.Значение Тогда
Возврат -1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область Наборы
Функция РеквизитыСтрокиСоставаНабора(ТипНабора, ПараметрыВыборки = Неопределено)
Реквизиты = Новый Массив;
Реквизиты.Добавить("Идентификатор");
Реквизиты.Добавить("КлючСвязи");
Реквизиты.Добавить("НомерСтроки");
Реквизиты.Добавить("ТипНоменклатуры");
Реквизиты.Добавить("Номенклатура");
Реквизиты.Добавить("Характеристика");
Реквизиты.Добавить("ХарактеристикиИспользуются");
Реквизиты.Добавить("Спецификация");
Реквизиты.Добавить("Количество");
Реквизиты.Добавить("ЕдиницаИзмерения");
Реквизиты.Добавить("ЕдиницаИзмеренияШтучная");
Реквизиты.Добавить("КоличествоУпаковок");
Реквизиты.Добавить("Упаковка");
Реквизиты.Добавить("ДанныеУпаковки");
Реквизиты.Добавить("УпаковкаШтучная");
Реквизиты.Добавить("Округлить");
Реквизиты.Добавить("Склад");
Реквизиты.Добавить("ВариантОбеспечения");
Реквизиты.Добавить("Обособленно");
Реквизиты.Добавить("Запланировать");
Реквизиты.Добавить("ЗаказатьНаСклад");
Реквизиты.Добавить("СпособПолученияПолуфабриката");
Если ПараметрыВыборки = Неопределено
ИЛИ ПараметрыВыборки.ПолучитьПредставления Тогда
Реквизиты.Добавить("ЕдИзм");
Реквизиты.Добавить("НоменклатураПредставление");
Реквизиты.Добавить("ХарактеристикаПредставление");
КонецЕсли;
Возврат СтрСоединить(Реквизиты,",");
КонецФункции
Процедура ВключитьДанныеНаборовВСтруктуруДанныхСпецификации(ДанныеСпецификации, Таблицы, ПараметрыВыборки, СтруктураОтбора)
Если НЕ ПараметрыВыборки.ПолучитьДанныеНаборов Тогда
Возврат;
КонецЕсли;
ДанныеНаборов = Новый Структура;
ВидыДанныхНаборов = Новый Массив;
ВидыДанныхНаборов.Добавить("ДанныеТорговыхНаборов");
Для каждого ВидДанныхНаборов Из ВидыДанныхНаборов Цикл
СтруктураДанных = Новый Структура("Состояние, Состав, СохраненныеСтроки", "Отсутствуют");
Если Таблицы.Свойство(ВидДанныхНаборов) Тогда
Состав = Таблицы[ВидДанныхНаборов].Скопировать(СтруктураОтбора);
Если Состав.Количество() > 0 Тогда
СтруктураДанных.Состав = Состав;
СтруктураДанных.Состояние = "Свернуты";
КонецЕсли;
КонецЕсли;
ДанныеНаборов.Вставить(ВидДанныхНаборов, СтруктураДанных);
КонецЦикла;
ДанныеСпецификации.Вставить("ДанныеНаборов", ДанныеНаборов);
КонецПроцедуры
Процедура ОбработатьДанныеНаборов(ПартияВыпуска, ДанныеСпецификации, Стадия)
Если НЕ ДанныеСпецификации.Свойство("МатериалыИУслуги")
ИЛИ НЕ ДанныеСпецификации.Свойство("ДанныеНаборов") Тогда
Возврат;
КонецЕсли;
РеквизитыОтбора = "КлючСвязи";
ОтборТипНоменклатуры = Новый Структура("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.Набор);
ОтборСтрок = Новый Структура(РеквизитыОтбора);
ИсточникСоставаНаборовВПроизводстве = УправлениеДаннымиОбИзделияхПовтИсп.ИсточникСоставаНаборовВПроизводстве();
МатериалыИУслуги = ДанныеСпецификации.МатериалыИУслуги;
ВидыДанныхНаборов = Новый Массив;
ВидыДанныхНаборов.Добавить("ДанныеТорговыхНаборов");
#Область Свертка
Если Стадия = "ПередРасчетом" Тогда
Для каждого ВидДанныхНаборов Из ВидыДанныхНаборов Цикл
ДанныеНаборов = ДанныеСпецификации.ДанныеНаборов[ВидДанныхНаборов];
Если ДанныеНаборов.Состояние = "Распакованы" Тогда
Если НЕ ДанныеСпецификации.ДанныеНаборов.Свойство("МатериалыИУслуги") Тогда
ДанныеСпецификации.ДанныеНаборов.Вставить("МатериалыИУслуги", МатериалыИУслуги);
МатериалыИУслуги = МатериалыИУслуги.Скопировать();
КонецЕсли;
Для каждого СтрокаМатериалы Из ДанныеНаборов.СохраненныеСтроки Цикл
ИндексВставки = МатериалыИУслуги.Количество()-1;
Индекс = 0;
Пока Индекс < МатериалыИУслуги.Количество() Цикл
Строка = МатериалыИУслуги[Индекс];
Если ЗначениеЗаполнено(Строка.КлючСвязиНабор)
И СтрокаМатериалы.КлючиСвязиНабор.Найти(Строка.КлючСвязиНабор) <> Неопределено Тогда
ИндексВставки = Мин(ИндексВставки, Индекс);
МатериалыИУслуги.Удалить(Индекс);
Продолжить;
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
НоваяСтрока = МатериалыИУслуги.Вставить(ИндексВставки);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМатериалы);
КонецЦикла;
ДанныеНаборов.Состояние = "Свернуты";
ДанныеНаборов.СохраненныеСтроки.Очистить();
КонецЕсли;
КонецЦикла;
КонецЕсли;
#КонецОбласти
#Область Распаковка
Если Стадия = "ПослеРасчета" Тогда
МатериалыИУслугиНаборы = МатериалыИУслуги.НайтиСтроки(ОтборТипНоменклатуры);
Если МатериалыИУслугиНаборы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
НаборыМатериаловИРабот = УправлениеДаннымиОбИзделиях.НаборыМатериаловИРаботКонструктор();
Для каждого ВидДанныхНаборов Из ВидыДанныхНаборов Цикл
ДанныеНаборов = ДанныеСпецификации.ДанныеНаборов[ВидДанныхНаборов];
Если ДанныеНаборов.Состояние = "Свернуты" Тогда
Если ДанныеНаборов.Состав.Индексы.Количество() = 0 Тогда
ДанныеНаборов.Состав.Индексы.Добавить(РеквизитыОтбора);
КонецЕсли;
СохраненныеСтроки = МатериалыИУслуги.СкопироватьКолонки();
СохраненныеСтроки.Колонки.Добавить("КлючиСвязиНабор");
Если ВидДанныхНаборов = "ДанныеТорговыхНаборов" Тогда
СтрокаНабораСтруктурой = Новый Структура(РеквизитыСтрокиСоставаНабора("Торговый"));
Для каждого СтрокаМатериалы Из МатериалыИУслугиНаборы Цикл
Если СтрокаМатериалы.Номенклатура.Пустая() Тогда
Продолжить;
КонецЕсли;
КлючиСвязиНабор = Новый Массив;
ЗаполнитьЗначенияСвойств(ОтборСтрок, СтрокаМатериалы);
СоставНабора = ДанныеНаборов.Состав.Скопировать(ОтборСтрок);
Если СоставНабора.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
КлючСвязиНабор = Новый УникальныйИдентификатор();
ИндексВставки = МатериалыИУслуги.Индекс(СтрокаМатериалы)+1;
СоставНабора.Сортировать("НомерСтроки");
Для Индекс = 0 По СоставНабора.Количество() - 1 Цикл
СтрокаНабора = СоставНабора[Индекс];
ЗаполнитьЗначенияСвойств(СтрокаНабораСтруктурой, СтрокаНабора);
НоваяСтрока = МатериалыИУслуги.Вставить(ИндексВставки);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМатериалы);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНабораСтруктурой,,"Идентификатор,НомерСтроки");
НоваяСтрока.Количество = СтрокаНабора.Количество * СтрокаМатериалы.Количество;
НоваяСтрока.КоличествоУпаковок = СтрокаНабора.КоличествоУпаковок * СтрокаМатериалы.Количество;
НоваяСтрока.КоличествоУпаковокНаЕдиницуПартииВыпуска = СтрокаНабора.КоличествоУпаковок
* СтрокаМатериалы.КоличествоУпаковокНаЕдиницуПартииВыпуска
* СтрокаМатериалы.ДанныеУпаковки.Числитель / СтрокаМатериалы.ДанныеУпаковки.Знаменатель;
Если НЕ ЗначениеЗаполнено(НоваяСтрока.КлючСвязиНабор) Тогда
НоваяСтрока.КлючСвязиНабор = КлючСвязиНабор;
КонецЕсли;
ИндексВставки = ИндексВставки + 1;
КлючиСвязиНабор.Добавить(НоваяСтрока.КлючСвязиНабор);
КонецЦикла;
НоваяСтрока = НаборыМатериаловИРабот.Добавить();
НоваяСтрока.КлючСвязи = КлючСвязиНабор;
НоваяСтрока.Спецификация = СоставНабора[0].ВариантКомплектации;
НоваяСтрока.СпецификацияРодитель = ДанныеСпецификации.Спецификация;
НоваяСтрока.КлючСвязиСпецификация = СтрокаМатериалы.КлючСвязи;
НоваяСтрока.Этап = СтрокаМатериалы.Этап;
НоваяСтрока.КоличествоСтрок = СоставНабора.Количество();
НоваяСтрока = СохраненныеСтроки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМатериалы);
НоваяСтрока.КлючиСвязиНабор = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(КлючиСвязиНабор);
МатериалыИУслуги.Удалить(СтрокаМатериалы);
КонецЦикла;
КонецЕсли;
ДанныеНаборов.СохраненныеСтроки = СохраненныеСтроки;
ДанныеНаборов.Состояние = "Распакованы";
МатериалыИУслугиНаборы = МатериалыИУслуги.НайтиСтроки(ОтборТипНоменклатуры);
КонецЕсли;
КонецЦикла;
НаборыМатериаловИРабот.Индексы.Добавить("КлючСвязи");
ДанныеСпецификации.Вставить("НаборыМатериаловИРабот", НаборыМатериаловИРабот);
Для каждого СтрокаМатериалы Из МатериалыИУслугиНаборы Цикл
Если СтрокаМатериалы.Номенклатура.Пустая() Тогда
Продолжить;
КонецЕсли;
ПредставлениеНоменклатуры = НоменклатураКлиентСервер.ПредставлениеНоменклатуры(
СтрокаМатериалы.Номенклатура,
СтрокаМатериалы.Характеристика);
СведенияАвтовыбора = СтрШаблон(НСтр("ru = 'Не удалось определить состав набора ""%1"".%2'"),
ПредставлениеНоменклатуры,
" "+СтрокаМатериалы.СведенияАвтовыбора);
СтрокаМатериалы.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
СтрокаМатериалы.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
СтрокаМатериалы.СпособАвтовыбораНоменклатуры = Перечисления.СпособыАвтовыбораНоменклатуры.УточняетсяПриПроизводстве;
СтрокаМатериалы.СпособАвтовыбораХарактеристики = Перечисления.СпособыАвтовыбораХарактеристики.УказываетсяВНСИ;
СтрокаМатериалы.СведенияАвтовыбора = СокрЛП(СведенияАвтовыбора);
СтрокаМатериалы.ИспользуетсяАвтовыбор = Истина;
КонецЦикла;
Если ДанныеСпецификации.ДанныеНаборов.Свойство("МатериалыИУслуги") Тогда
Для Индекс = 0 По МатериалыИУслуги.Количество() - 1 Цикл
ЗаполнитьЗначенияСвойств(ДанныеСпецификации.ДанныеНаборов.МатериалыИУслуги[Индекс], МатериалыИУслуги[Индекс]);
КонецЦикла;
МатериалыИУслуги = ДанныеСпецификации.ДанныеНаборов.МатериалыИУслуги;
ДанныеСпецификации.ДанныеНаборов.Удалить("МатериалыИУслуги");
КонецЕсли;
КонецЕсли;
#КонецОбласти
ДанныеСпецификации.МатериалыИУслуги = МатериалыИУслуги;
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ДобавитьПредставленияВЗапрос(ТекстЗапроса, ПолучитьПредставления)
Если ПолучитьПредставления Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтапыПроизводства_Представления,",
"ЕСТЬNULL(ЭтапыПроизводства.Подразделение.Представление, """") КАК ПодразделениеПредставление,
| ЕСТЬNULL(ЭтапыПроизводства.МаршрутнаяКарта.Представление, """") КАК МаршрутнаяКартаПредставление,");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВидыРабочихЦентров_Представления,",
"ЕСТЬNULL(ТабличнаяЧасть.ВидРабочегоЦентра.Представление, """") КАК ВидРабочегоЦентраПредставление,");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделия_Представления,",
"ЕСТЬNULL(ВтИзделия.Этап.Представление, """") КАК ЭтапПредставление,
| ВЫБОР
| КОГДА ВтИзделия.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(ВтИзделия.Упаковка.Представление, """")
| ИНАЧЕ ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения.Представление, """")
| КОНЕЦ КАК ЕдИзм,
| ЕСТЬNULL(ВтИзделия.ВидНоменклатуры.Представление, """") КАК ВидНоменклатурыПредставление,
| ЕСТЬNULL(ВтИзделия.Номенклатура.Представление, """") КАК НоменклатураПредставление,
| ЕСТЬNULL(ВтИзделия.Характеристика.Представление, """") КАК ХарактеристикаПредставление,");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВозвратныеОтходы_Представления,",
"ЕСТЬNULL(ВтИзделия.Этап.Представление, """") КАК ЭтапПредставление,
| ВЫБОР
| КОГДА ВтИзделия.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(ВтИзделия.Упаковка.Представление, """")
| ИНАЧЕ ЕСТЬNULL(ВтИзделия.Номенклатура.ЕдиницаИзмерения.Представление, """")
| КОНЕЦ КАК ЕдИзм,
| ЕСТЬNULL(ВтИзделия.Номенклатура.Представление, """") КАК НоменклатураПредставление,
| ЕСТЬNULL(ВтИзделия.Характеристика.Представление, """") КАК ХарактеристикаПредставление,");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&МатериалыИУслуги_Представления,",
"ЕСТЬNULL(МатериалыИУслуги.Этап.Представление, """") КАК ЭтапПредставление,
| ВЫБОР
| КОГДА МатериалыИУслуги.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(МатериалыИУслуги.Упаковка.Представление, """")
| ИНАЧЕ ЕСТЬNULL(МатериалыИУслуги.Номенклатура.ЕдиницаИзмерения.Представление, """")
| КОНЕЦ КАК ЕдИзм,
| ЕСТЬNULL(МатериалыИУслуги.Номенклатура.Представление, """") КАК НоменклатураПредставление,
| ЕСТЬNULL(МатериалыИУслуги.Характеристика.Представление, """") КАК ХарактеристикаПредставление,");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтапыПроизводства_Представления,", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВидыРабочихЦентров_Представления,", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделия_Представления,", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВозвратныеОтходы_Представления,", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&МатериалыИУслуги_Представления,", "");
КонецЕсли;
КонецПроцедуры
Процедура ПрименитьОтборПоПараметрамВыбораДанных(МатериалыИУслуги, ПараметрыВыборки)
Если НЕ ПараметрыВыборки.ДоступныРаботы Тогда
Для Х = -МатериалыИУслуги.Количество() + 1 По 0 Цикл
Строка = МатериалыИУслуги[-Х];
Если Строка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
ИЛИ Строка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара
ИЛИ Строка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор
ИЛИ Строка.Номенклатура.Пустая() Тогда
Продолжить;
КонецЕсли;
МатериалыИУслуги.Удалить(-Х);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПараметрыОбеспеченияМатериалов(Запрос, Таблицы, ПараметрыВыборки)
Таблица = Неопределено;
Если НЕ Таблицы.Свойство("МатериалыИУслуги", Таблица) Тогда
Возврат;
КонецЕсли;
Таблица.Колонки.Добавить("ИндексСтроки", Новый ОписаниеТипов("Число"));
ИндексСтроки = 0;
СтрокДляОбработки = 0;
Для каждого Строка Из Таблица Цикл
Строка.ИндексСтроки = ИндексСтроки;
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации
И Строка.Спецификация.Пустая()
ИЛИ Строка.ИспользуетсяАвтовыбор
ИЛИ Строка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор
И ПараметрыВыборки.ПолучитьДанныеНаборов Тогда
СтрокДляОбработки = СтрокДляОбработки + 1;
КонецЕсли;
ИндексСтроки = ИндексСтроки + 1;
КонецЦикла;
Если СтрокДляОбработки > 0 Тогда
ТекстыЗапросов = Новый Массив;
ТекстЗапроса = "
|ВЫБРАТЬ
| ЛОЖЬ КАК ДанныеНаборов,
|
| Т.Идентификатор КАК Идентификатор,
| Т.ИндексСтроки КАК ИндексСтроки,
| 0 КАК НомерСтроки,
| Т.КлючСвязи КАК КлючСвязи,
|
| Т.Номенклатура КАК Номенклатура,
| Т.Характеристика КАК Характеристика,
| Т.ТипНоменклатуры КАК ТипНоменклатуры,
| ЛОЖЬ КАК ХарактеристикиИспользуются,
|
| 0 КАК Количество,
| 0 КАК КоличествоУпаковок,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК ЕдиницаИзмерения,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| 0 КАК ДанныеУпаковки,
|
| ЛОЖЬ КАК ЕдиницаИзмеренияШтучная,
| ЛОЖЬ КАК УпаковкаШтучная,
|
| ЛОЖЬ КАК Округлить,
|
| Т.Этап КАК Этап,
|
| Т.СпособПолученияМатериала КАК СпособПолученияМатериала,
| Т.Обособленно КАК Обособленно,
| Т.ИсточникПолученияПолуфабриката КАК ИсточникПолученияПолуфабриката,
| Т.ПроизводитсяВПроцессе КАК ПроизводитсяВПроцессе,
|
| ЗНАЧЕНИЕ(Справочник.ВариантыКомплектацииНоменклатуры.ПустаяСсылка) КАК ВариантКомплектации,
|
| Т.ИспользуетсяАвтовыбор
| И НЕ Т.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| КАК ПодбиратьОбеспечение,
| Т.Спецификация = ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка)
| И (Т.СпособПолученияМатериала = ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации)
| ИЛИ Т.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| И &ДоступноХранениеСоставаНабораВСпецификациях)
| КАК ПодбиратьСпецификацию
|
|ПОМЕСТИТЬ ВтМатериалыИУслуги
|ИЗ
| &МатериалыИУслуги КАК Т
|
|ГДЕ
| &ОтборСтрок
|";
Если СтрокДляОбработки / Таблица.Количество() <= 0.7 Тогда
ОтборСтрок = "
| (Т.СпособПолученияМатериала = ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации)
| И Т.Спецификация = ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка))
| ИЛИ Т.ИспользуетсяАвтовыбор
| ИЛИ Т.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
|";
Иначе
ОтборСтрок = "ИСТИНА";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборСтрок", ОтборСтрок);
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = "
|ВЫБРАТЬ
| ИСТИНА КАК ДанныеНаборов,
|
| ВтМатериалыИУслуги.Идентификатор КАК Идентификатор,
| ВтМатериалыИУслуги.ИндексСтроки КАК ИндексСтроки,
| Комплектующие.НомерСтроки КАК НомерСтроки,
| ВтМатериалыИУслуги.КлючСвязи КАК КлючСвязи,
|
| Комплектующие.Номенклатура КАК Номенклатура,
| Комплектующие.Характеристика КАК Характеристика,
| Комплектующие.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ВЫБОР
| КОГДА Комплектующие.Номенклатура.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
|
| Комплектующие.Количество КАК Количество,
| Комплектующие.КоличествоУпаковок КАК КоличествоУпаковок,
| Комплектующие.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Комплектующие.Упаковка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК ДанныеУпаковки,
|
| Комплектующие.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук) КАК ЕдиницаИзмеренияШтучная,
| ЕСТЬNULL(&ТекстЗапросаТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК УпаковкаШтучная,
|
| ЕСТЬNULL(&ОкруглятьКоличествоШтучныхТоваров
| И Комплектующие.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| И Комплектующие.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| И &ТекстЗапросаТипИзмеряемойВеличины В (
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем),
| ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)), ЛОЖЬ) КАК Округлить,
|
| ВтМатериалыИУслуги.Этап КАК Этап,
|
| ЗНАЧЕНИЕ(Перечисление.СпособыПолученияМатериаловВСпецификации.Обеспечивать) КАК СпособПолученияМатериала,
| ВтМатериалыИУслуги.Обособленно КАК Обособленно,
| ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка) КАК ИсточникПолученияПолуфабриката,
| ЛОЖЬ КАК ПроизводитсяВПроцессе,
|
| Комплектующие.Ссылка КАК ВариантКомплектации,
|
| ИСТИНА КАК ПодбиратьОбеспечение,
| ЛОЖЬ КАК ПодбиратьСпецификацию
|
|ПОМЕСТИТЬ ВтДанныеНаборов
|ИЗ
| ВтМатериалыИУслуги КАК ВтМатериалыИУслуги
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК Комплектующие
| ПО ВтМатериалыИУслуги.Номенклатура = Комплектующие.Ссылка.Владелец
| И ВтМатериалыИУслуги.Характеристика = Комплектующие.Ссылка.Характеристика
| И (Комплектующие.Ссылка.Основной)
|
|ГДЕ
| ВтМатериалыИУслуги.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| И &ДоступноХранениеСоставаНабораВВариантахКомплектации
| И Комплектующие.Номенклатура.ТипНоменклатуры В
| (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
|";
ТекстПоляТипИзмеряемойВеличины = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"ТипИзмеряемойВеличины",
"Комплектующие.Упаковка",
"Комплектующие.Номенклатура");
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаТипИзмеряемойВеличины",
ТекстПоляТипИзмеряемойВеличины);
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = "
|ВЫБРАТЬ
| Т.*,
| Т.ИндексСтроки КАК ИндексДанных
|ИЗ
|ВтМатериалыИУслуги КАК Т
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Т.*,
| NULL
|ИЗ
|ВтДанныеНаборов КАК Т
|
|";
ТекстЗапроса = СтрЗаменить("
|ВЫБРАТЬ
| Т.*,
| &Представления,
| Т.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
|
| ВтДанныеПоНоменклатуре.Распоряжение КАК Распоряжение,
| ВтДанныеПоНоменклатуре.Назначение КАК Назначение,
| ВтДанныеПоНоменклатуре.НачалоПроизводства КАК НачалоПроизводства,
| ВтДанныеПоНоменклатуре.ПодразделениеДиспетчер КАК ПодразделениеДиспетчер,
| ВтДанныеПоНоменклатуре.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ВтДанныеПоНоменклатуре.Спецификация КАК Спецификация,
| ВЫБОР
| КОГДА ВтДанныеПоНоменклатуре.ПодразделениеИсполнитель = ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| ТОГДА Т.Этап.Подразделение
| ИНАЧЕ ВтДанныеПоНоменклатуре.ПодразделениеИсполнитель
| КОНЕЦ КАК ПодразделениеИсполнитель
|
|ПОМЕСТИТЬ ВтСписокНоменклатуры
|ИЗ &Таблица КАК Т
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО Т.Идентификатор = ВтДанныеПоНоменклатуре.Идентификатор
|", "&Таблица", "("+ТекстЗапроса+")");
ТекстПредставления = "";
Если ПараметрыВыборки.ПолучитьПредставления Тогда
ТекстПредставления = "
| ВЫБОР
| КОГДА Т.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(Т.Упаковка.Представление, """")
| ИНАЧЕ ЕСТЬNULL(Т.Номенклатура.ЕдиницаИзмерения.Представление, """")
| КОНЕЦ КАК ЕдИзм,
| ЕСТЬNULL(Т.Номенклатура.Представление, """") КАК НоменклатураПредставление,
| ЕСТЬNULL(Т.Характеристика.Представление, """") КАК ХарактеристикаПредставление,
|";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Представления,", ТекстПредставления);
ТекстыЗапросов.Добавить(ТекстЗапроса);
ПараметрыВыбораСпецификаций = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыВыбораСпецификацийНаИзготовлениеСборку();
ПараметрыЗапросаСпецификаций = УправлениеДаннымиОбИзделиях.ПараметрыТекстаЗапросаСпецификацийИзделий();
ПараметрыЗапросаСпецификаций.ИмяВыходнойТаблицы = "ВтСпецификации";
ПараметрыЗапросаСпецификаций.ТолькоПриоритетные = Истина;
ПараметрыЗапросаСпецификаций.РазделительИтоговогоПакета = Ложь;
ПараметрыЗапросаСпецификаций.УсловияОтбораВходящихДанных.Добавить("СписокНоменклатуры.ПодбиратьСпецификацию = ИСТИНА");
ТекстыЗапросов.Добавить(УправлениеДаннымиОбИзделиях.ТекстЗапросаСпецификацийИзделий(
ПараметрыЗапросаСпецификаций,
ПараметрыВыбораСпецификаций));
ТекстыЗапросов.Добавить(УправлениеДаннымиОбИзделиях.ТекстЗапросаДанныеУпаковок(
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ВтДанныеНаборов")));
ТекстЗапроса = "
|ВЫБРАТЬ
| Т.ИндексСтроки КАК ИндексСтроки,
| Т.ПодбиратьСпецификацию КАК ПодбиратьСпецификацию,
|
| Т.Распоряжение КАК Распоряжение,
| Т.НаправлениеДеятельности КАК НаправлениеДеятельности,
| Т.ПодразделениеИсполнитель КАК ПодразделениеИсполнитель,
| Т.Спецификация КАК СпецификацияВладелец,
|
| ВТСпецификации.Спецификация КАК Спецификация
|
|ИЗ
| ВтСписокНоменклатуры КАК Т
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСпецификации КАК ВТСпецификации
| ПО Т.ИндексДанных = ВТСпецификации.ИндексДанных
|
|ГДЕ
| Т.ПодбиратьСпецификацию
| И НЕ ВТСпецификации.Спецификация ЕСТЬ NULL
| ИЛИ Т.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| И &ДоступноХранениеСоставаНабораВСпецификациях
|
|УПОРЯДОЧИТЬ ПО
| Т.ИндексСтроки,
| Т.НомерСтроки
|";
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = "
|ВЫБРАТЬ
| Т.*,
| &ТекстПолеЗаказатьНаСклад КАК ЗаказатьНаСклад,
| &ТекстПолеСклад КАК Склад,
| &ТекстПолеВариантОбеспечения КАК ВариантОбеспечения,
| &ТекстПолеОбособленно КАК Обособленно,
| &ТекстПолеЗапланировать КАК Запланировать
|ИЗ
| ВтСписокНоменклатуры КАК Т
|
| ,ТекстСоединенияПараметрыОбеспечения
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады
| ПО &ТекстПолеСклад = СпрСклады.Ссылка
|
| ,ТекстСоединенияСпособыОбеспечения
|
| ,ТекстСоединенияЗаказатьНаСклад
|
|ГДЕ
| Т.ПодбиратьОбеспечение
|
|УПОРЯДОЧИТЬ ПО
| Т.ДанныеНаборов,
| Т.ИндексСтроки,
| Т.НомерСтроки
|";
ТекстПолеЗапланировать = "ЛОЖЬ";
ТекстСоединенияСпособыОбеспечения = "";
Если ПараметрыВыборки.РассчитыватьПризнакЗапланироватьПроизводство Тогда
ТекстПолеЗапланировать = ТекстПодстановкиПоляЗапланировать(
"Т.ПодразделениеДиспетчер",
"Т.Номенклатура",
"ЗНАЧЕНИЕ(Справочник.РесурсныеСпецификации.ПустаяСсылка)");
ТекстСоединенияСпособыОбеспечения = РегистрыСведений.СхемыОбеспечения.ПодставитьСоединениеДляПолученияСпособаОбеспечения(
"ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпособыОбеспеченияПотребностей КАК СпрСпособОбеспечения
| ПО &ПодстановкаОсновногоСпособаОбеспечения",
"ПодстановкаОсновногоСпособаОбеспечения",
"Т.Номенклатура, Т.Характеристика, СпрСклады.Ссылка");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолеЗапланировать" , ТекстПолеЗапланировать);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",ТекстСоединенияСпособыОбеспечения", ТекстСоединенияСпособыОбеспечения);
ПолеЗаказатьНаСклад = ПараметрыПодстановкиПоляЗаказатьНаСклад("Т",, ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолеЗаказатьНаСклад" , ПолеЗаказатьНаСклад.ТекстПоля);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",ТекстСоединенияЗаказатьНаСклад", ПолеЗаказатьНаСклад.ТекстСоединения);
ОбеспечениеПроизводства.ВыполнитьПодстановкуПараметровОбеспеченияМатериалов(ТекстЗапроса,
"Т",,
"ПодразделениеИсполнитель",
ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Распоряжение", "Т.Распоряжение");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Назначение", "Т.Назначение");
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
ДоступноХранениеСоставаНабораВСпецификациях = УправлениеДаннымиОбИзделияхПовтИсп.ДоступноХранениеСоставаНабораВСпецификациях();
Запрос.УстановитьПараметр("ДоступноХранениеСоставаНабораВСпецификациях", ДоступноХранениеСоставаНабораВСпецификациях);
ДоступноХранениеСоставаНабораВВариантахКомплектации = УправлениеДаннымиОбИзделияхПовтИсп.ДоступноХранениеСоставаНабораВВариантахКомплектации();
Запрос.УстановитьПараметр("ДоступноХранениеСоставаНабораВВариантахКомплектации", ДоступноХранениеСоставаНабораВВариантахКомплектации);
Запрос.УстановитьПараметр("МатериалыИУслуги", Таблица);
Запрос.Текст = ТекстЗапроса;
УправлениеДаннымиОбИзделиях.УстановитьПараметрыЗапросаСпецификацийИзделий(
Запрос,
ПараметрыВыбораСпецификаций);
УстановитьПривилегированныйРежим(Истина);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
ДанныеУпаковок = РезультатыЗапроса[РезультатыЗапроса.Количество()-3].Выгрузить();
Спецификации = РезультатыЗапроса[РезультатыЗапроса.Количество()-2].Выгрузить();
ОбеспечениеДанныеНаборов = РезультатыЗапроса[РезультатыЗапроса.Количество()-1].Выгрузить();
ДанныеНаборов = Таблица.СкопироватьКолонки(РеквизитыСтрокиСоставаНабора("Торговый", ПараметрыВыборки));
ДанныеНаборов.Колонки.Добавить("ВариантКомплектации");
Для каждого Строка Из ОбеспечениеДанныеНаборов Цикл
Если Строка.ДанныеНаборов Тогда
НоваяСтрока = ДанныеНаборов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.Спецификация = Справочники.РесурсныеСпецификации.ПустаяСсылка();
НоваяСтрока.СпособПолученияПолуфабриката = Перечисления.СпособыПолучениеМатериаловЭтапаПроизводства.ПустаяСсылка();
Иначе
ЗаполнитьЗначенияСвойств(Таблица[Строка.ИндексСтроки],
Строка,
"Склад,ВариантОбеспечения,Обособленно,Запланировать,ЗаказатьНаСклад");
КонецЕсли;
КонецЦикла;
Если ДанныеНаборов.Количество() > 0 Тогда
ПрименитьОтборПоПараметрамВыбораДанных(ДанныеНаборов, ПараметрыВыборки);
УправлениеДаннымиОбИзделиях.ЗаполнитьДанныеУпаковокВНабореДанных(ДанныеНаборов, ДанныеУпаковок);
ДанныеНаборов.Индексы.Добавить("Идентификатор");
Таблицы.Вставить("ДанныеТорговыхНаборов", ДанныеНаборов);
КонецЕсли;
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц,
"ВтСписокНоменклатуры,ВтСпецификации,ВтМатериалыИУслуги,ВтДанныеНаборов");
КонецЕсли;
Таблица.Колонки.Удалить("ИндексСтроки");
КонецПроцедуры
Процедура ЗаполнитьПараметрыОбеспеченияВыходныхИзделий(Запрос, Таблицы, ПараметрыВыборки)
РазделительЗапросаВПакете = ОбщегоНазначения.РазделительПакетаЗапросов();
ИменаНаборовДанных = Новый Массив;
ТекстыОбъединения = Новый Массив;
ТекстЗапроса = "";
Для каждого ИмяНабораДанных Из СтрРазделить("ВыходныеИзделия,ВозвратныеОтходы",",") Цикл
Таблица = Неопределено;
Если Таблицы.Свойство(ИмяНабораДанных, Таблица) И Таблица.Найти(Истина,"ИспользуетсяАвтовыбор") <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| ""ИмяТаблицы"" КАК ИмяНабораДанных,
| Т.Идентификатор КАК Идентификатор,
| Т.НомерСтроки КАК НомерСтроки,
|
| Т.Номенклатура КАК Номенклатура,
| Т.Характеристика КАК Характеристика,
|
| Т.Этап КАК Этап
|
|ПОМЕСТИТЬ ИмяТаблицы
|ИЗ
| &ИмяТаблицы КАК Т
|
|ГДЕ
| Т.ИспользуетсяАвтовыбор
|" + РазделительЗапросаВПакете;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяТаблицы", ИмяНабораДанных);
Запрос.УстановитьПараметр(ИмяНабораДанных, Таблица);
ТекстыОбъединения.Добавить(СтрЗаменить("ВЫБРАТЬ Т.* ИЗ ИмяНабораДанных КАК Т", "ИмяНабораДанных", ИмяНабораДанных));
ИменаНаборовДанных.Добавить(ИмяНабораДанных);
КонецЕсли;
КонецЦикла;
Если ИменаНаборовДанных.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| Т.*,
| &ТекстПолеСклад КАК Склад
|
|ИЗ &ИмяТаблицы КАК Т
|
| ,ТекстСоединенияНастройкиПередачиМатериалов
|
|УПОРЯДОЧИТЬ ПО
| Т.ИмяНабораДанных,
| Т.Идентификатор,
| Т.НомерСтроки
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "("+СтрСоединить(ТекстыОбъединения," ОБЪЕДИНИТЬ ВСЕ ")+")");
ТекстЗапросаДляПолученияСклада = ОбеспечениеПроизводства.ТекстЗапросаНастройкиПередачиМатериалов(
"Т",
"Этап.Подразделение",
ПараметрыВыборки.ВариантЗаполненияОбеспечения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
",ТекстСоединенияНастройкиПередачиМатериалов",
ТекстЗапросаДляПолученияСклада.ТекстСоединения);
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстПолеСклад",
ТекстЗапросаДляПолученияСклада.ТекстПолеСклад);
Запрос.Текст = ТекстЗапроса;
УстановитьПривилегированныйРежим(Истина);
РезультатОбеспечение = Запрос.Выполнить().Выгрузить();
УстановитьПривилегированныйРежим(Ложь);
РезультатОбеспечение.Индексы.Добавить("ИмяНабораДанных,Идентификатор,НомерСтроки");
Отбор = Новый Структура("ИмяНабораДанных,Идентификатор,НомерСтроки");
Для каждого ИмяНабораДанных Из ИменаНаборовДанных Цикл
Для каждого Строка Из Таблицы[ИмяНабораДанных] Цикл
Если Строка.ИспользуетсяАвтовыбор Тогда
Отбор.ИмяНабораДанных = ИмяНабораДанных;
ЗаполнитьЗначенияСвойств(Отбор, Строка, "Идентификатор,НомерСтроки");
СтрокиРезультата = РезультатОбеспечение.НайтиСтроки(Отбор);
Если СтрокиРезультата <> Неопределено Тогда
Строка.Склад = СтрокиРезультата[0].Склад;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц,
СтрСоединить(ИменаНаборовДанных,","));
КонецПроцедуры
Процедура ЗаполнитьИнформациюПоПрименениюМатериала(МатериалыИУслуги, ПараметрыВыборки)
Если ПараметрыВыборки.ПолучитьПредставления Тогда
МатериалыИУслуги.Колонки.Добавить("ПрименениеМатериалаРедактирование");
Для каждого Строка Из МатериалыИУслуги Цикл
УправлениеДаннымиОбИзделияхКлиентСервер.ЗаполнитьИнформациюПоПрименениюМатериала(Строка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПрименитьОтборПоДаннымСпецификации(ДанныеСпецификации, Отбор, ПараметрыВыборки = Неопределено) Экспорт
Если ТипЗнч(Отбор) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Если ПараметрыВыборки = Неопределено Тогда
ИменаТаблиц = ПереченьДанныхСпецификации();
Иначе
ИменаТаблиц = ОбщегоНазначения.СкопироватьРекурсивно(ПараметрыВыборки.ПереченьДанных);
КонецЕсли;
ИменаТаблиц.Добавить("НаборыМатериаловИРабот");
Для каждого ИмяТаблицы Из ИменаТаблиц Цикл
Таблица = Неопределено;
Если ДанныеСпецификации.Свойство(ИмяТаблицы, Таблица) Тогда
ДанныеСпецификации.Вставить(ИмяТаблицы, Таблица.Скопировать(Отбор));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ИсключитьПроизводимыеНаЭтапеПолуфабрикаты(МатериалыИУслуги, ВозвратныеОтходы) Экспорт
Если ВозвратныеОтходы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("СпособПолученияМатериала",
Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе);
СтруктураПоиска.Вставить("СпецификацияРемонта",
Справочники.РесурсныеСпецификации.ПустаяСсылка());
СтрокиМатериалы = МатериалыИУслуги.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаМатериал Из СтрокиМатериалы Цикл
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура", СтрокаМатериал.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", СтрокаМатериал.Характеристика);
СтруктураПоиска.Вставить("Этап", СтрокаМатериал.ИсточникПолученияПолуфабриката);
СтрокиОтходы = ВозвратныеОтходы.НайтиСтроки(СтруктураПоиска);
Остаток = СтрокаМатериал.Количество;
Пока Остаток > 0 И СтрокиОтходы.Количество() > 0 Цикл
Строка = СтрокиОтходы[0];
Если Остаток >= Строка.Количество Тогда
Остаток = Остаток - Строка.Количество;
ВозвратныеОтходы.Удалить(Строка);
СтрокиОтходы.Удалить(0);
Иначе
Строка.Количество = Строка.Количество - Остаток;
Строка.КоличествоУпаковок = Строка.Количество * Строка.ДанныеУпаковки.Знаменатель / Строка.ДанныеУпаковки.Числитель;
Остаток = 0;
КонецЕсли;
КонецЦикла;
МатериалыИУслуги.Удалить(СтрокаМатериал);
КонецЦикла;
КонецПроцедуры
Функция ДобавитьДанныеПолуфабрикатов(ДанныеСпецификацииСводные, СписокНоменклатуры, ПараметрыВыборки, РазузлованныеСпецификации)
ПереченьДанных = ПараметрыВыборки.ПереченьДанных;
СписокНоменклатурыНовый = СписокНоменклатуры();
ДанныеСпецификаций = ДанныеСпецификацииПоСпискуНоменклатуры(СписокНоменклатуры, ПараметрыВыборки);
Для Индекс = 0 По ДанныеСпецификаций.ВГраница() Цикл
ДанныеСпецификации = ДанныеСпецификаций[Индекс];
Если ДанныеСпецификации = Неопределено Тогда
Продолжить;
КонецЕсли;
РазузлованныеСпецификации.Вставить(ДанныеСпецификации.Спецификация);
Если ПереченьДанных.Найти("АльтернативныеВидыРабочихЦентров") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.АльтернативныеВидыРабочихЦентров, ДанныеСпецификацииСводные.АльтернативныеВидыРабочихЦентров);
КонецЕсли;
Если ПереченьДанных.Найти("ВидыРабочихЦентров") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.ВидыРабочихЦентров, ДанныеСпецификацииСводные.ВидыРабочихЦентров);
КонецЕсли;
Если ПереченьДанных.Найти("ВыходныеИзделия") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.ВыходныеИзделия, ДанныеСпецификацииСводные.ВыходныеИзделия);
КонецЕсли;
Если ПереченьДанных.Найти("ВозвратныеОтходы") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.ВозвратныеОтходы, ДанныеСпецификацииСводные.ВозвратныеОтходы);
КонецЕсли;
Если ПереченьДанных.Найти("МатериалыИУслуги") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.МатериалыИУслуги, ДанныеСпецификацииСводные.МатериалыИУслуги);
Для Каждого Строка Из ДанныеСпецификации.МатериалыИУслуги Цикл
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизвестиПоСпецификации
И РазузлованныеСпецификации.Получить(Строка.ИсточникПолученияПолуфабриката) = Неопределено Тогда
НоваяСтрока = СписокНоменклатурыНовый.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, "Номенклатура, Характеристика, Количество, ДнейОтПотребности");
ЗаполнитьЗначенияСвойств(НоваяСтрока, СписокНоменклатуры[Индекс], "НачалоПроизводства, ПодразделениеДиспетчер, НаправлениеДеятельности");
НоваяСтрока.Спецификация = Строка.ИсточникПолученияПолуфабриката;
КонецЕсли;
Если Строка.СпособПолученияМатериала = Перечисления.СпособыПолученияМатериаловВСпецификации.ПроизводитсяНаЭтапе
И ЗначениеЗаполнено(Строка.СпецификацияРемонта)
И РазузлованныеСпецификации.Получить(Строка.СпецификацияРемонта) = Неопределено Тогда
НоваяСтрока = СписокНоменклатурыНовый.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка, "Номенклатура, Характеристика, Количество, ДнейОтПотребности");
ЗаполнитьЗначенияСвойств(НоваяСтрока, СписокНоменклатуры[Индекс], "НачалоПроизводства, ПодразделениеДиспетчер, НаправлениеДеятельности");
НоваяСтрока.Спецификация = Строка.СпецификацияРемонта;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ПереченьДанных.Найти("Трудозатраты") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.Трудозатраты, ДанныеСпецификацииСводные.Трудозатраты);
КонецЕсли;
Если ПереченьДанных.Найти("Этапы") <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеСпецификации.Этапы, ДанныеСпецификацииСводные.Этапы);
КонецЕсли;
КонецЦикла;
Возврат СписокНоменклатурыНовый;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СписокРесурсныхСпецификаций
Функция ТекстЗапросаДинамическогоСпискаРесурсныхСпецификаций() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СправочникРесурсныеСпецификации.Ссылка КАК Ссылка,
|
| СправочникРесурсныеСпецификации.Код КАК Код,
| СправочникРесурсныеСпецификации.Наименование КАК Наименование,
|
| СправочникРесурсныеСпецификации.Статус КАК Статус,
| СправочникРесурсныеСпецификации.ТипПроизводственногоПроцесса КАК ТипПроизводственногоПроцесса,
|
| СправочникРесурсныеСпецификации.НачалоДействия КАК НачалоДействия,
| СправочникРесурсныеСпецификации.КонецДействия КАК КонецДействия,
|
| СправочникРесурсныеСпецификации.Ответственный КАК Ответственный,
| СправочникРесурсныеСпецификации.Описание КАК Описание,
|
| ВЫБОР
| КОГДА СправочникРесурсныеСпецификации.ВариантНазначения = ЗНАЧЕНИЕ(Перечисление.ВариантыНазначенияСпецификации.ВидНоменклатуры)
| ТОГДА СправочникРесурсныеСпецификации.ОсновноеИзделиеВидНоменклатуры
| ИНАЧЕ СправочникРесурсныеСпецификации.ОсновноеИзделиеНоменклатура
| КОНЕЦ КАК ОсновноеИзделие
|
|ИЗ
| Справочник.РесурсныеСпецификации КАК СправочникРесурсныеСпецификации
|
|";
Возврат ТекстЗапроса;
КонецФункции
Процедура УстановитьУсловноеОформлениеСпискаРесурсныхСпецификаций(УсловноеОформление, ИмяВладельцаПолейОтбора = "") Экспорт
ВладелецПолейОтбора = ?(ИмяВладельцаПолейОтбора = "", "", ИмяВладельцаПолейОтбора + ".");
Элемент = УсловноеОформление.Элементы.Добавить();
Если ИмяВладельцаПолейОтбора <> "" Тогда
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяВладельцаПолейОтбора);
КонецЕсли;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ВладелецПолейОтбора + "Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыСпецификаций.ВРазработке;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
Если ИмяВладельцаПолейОтбора <> "" Тогда
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяВладельцаПолейОтбора);
КонецЕсли;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ВладелецПолейОтбора + "Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыСпецификаций.Закрыта;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
КонецПроцедуры
Функция ТекстЗапросаДинамическогоСпискаДоступныхСпецификаций() Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| РесурсныеСпецификации.Ссылка КАК Спецификация,
|
| РесурсныеСпецификации.НачалоДействия КАК НачалоДействия,
| РесурсныеСпецификации.КонецДействия КАК КонецДействия,
|
| РесурсныеСпецификации.Статус КАК Статус,
|
| ЛОЖЬ КАК Приоритетная
|
|ИЗ
| Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации
|
|ГДЕ
| НЕ РесурсныеСпецификации.ПометкаУдаления
| И РесурсныеСпецификации.Ссылка В (&СписокСпецификаций)
|";
Возврат ТекстЗапроса;
КонецФункции
Процедура УстановитьУсловноеОформлениеСпискаДоступныхСпецификаций(УсловноеОформление) Экспорт
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыСпецификаций.ВРазработке;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыСпецификаций.Закрыта;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаИзФайлаВТЧ
Процедура СопоставитьЗагружаемыеДанныеНоменклатура(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ДополнительныеПараметры)
МатериалыИУслуги = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных);
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить(ТекстЗапросаВтЗагружаемыеДанныеМатериалыИУслуги());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеШтрихкодов());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеНоменклатуры());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеХарактеристик());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеУпаковок());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеСтатейКалькуляции());
Если ДополнительныеПараметры.ИспользуютсяЭтапы Тогда
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеЭтапов());
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапросаЗагружаемыеДанныеМатериаловИУслуг());
Запрос = СоздатьНастроитьЗапрос(ТекстыЗапроса, ЗагружаемыеДанные, ДополнительныеПараметры);
Если ДополнительныеПараметры.ИмяТЧ = "ВозвратныеОтходы" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПрименениеМатериала", "ОписаниеИзделия");
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = МатериалыИУслуги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.КлючСвязи = Новый УникальныйИдентификатор();
Если Выборка.КоличествоНоменклатуры > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "Номенклатура";
КонецЕсли;
Если Выборка.КоличествоХарактеристик > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "Характеристика";
КонецЕсли;
Если Выборка.КоличествоСтатейКалькуляции > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "СтатьяКалькуляции";
КонецЕсли;
Если Выборка.КоличествоУпаковки > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "Упаковка";
КонецЕсли;
Если ДополнительныеПараметры.ИспользуютсяЭтапы И Выборка.КоличествоЭтапов > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "Этап";
КонецЕсли;
КонецЦикла;
ПоместитьВоВременноеХранилище(МатериалыИУслуги, АдресТаблицыСопоставления);
КонецПроцедуры
Процедура СопоставитьЗагружаемыеДанныеТрудозатраты(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ДополнительныеПараметры)
Трудозатраты = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных);
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить(ТекстЗапросаВтЗагружаемыеДанныеТрудозатраты());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеВидовРабот());
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеСтатейКалькуляции());
Если ДополнительныеПараметры.ИспользуютсяЭтапы Тогда
ТекстыЗапроса.Добавить(ТекстЗапросаВтДанныеЭтапов());
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапросаЗагружаемыеДанныеТрудозатраты());
Запрос = СоздатьНастроитьЗапрос(ТекстыЗапроса, ЗагружаемыеДанные, ДополнительныеПараметры);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Трудозатраты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
Если Выборка.КоличествоВидовРабот > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "ВидРабот";
КонецЕсли;
Если Выборка.КоличествоСтатейКалькуляции > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "СтатьяКалькуляции";
КонецЕсли;
Если ДополнительныеПараметры.ИспользуютсяЭтапы И Выборка.КоличествоЭтапов > 1 Тогда
ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
ЗаписьОНеоднозначности.Идентификатор = Выборка.Идентификатор;
ЗаписьОНеоднозначности.Колонка = "Этап";
КонецЕсли;
КонецЦикла;
ПоместитьВоВременноеХранилище(Трудозатраты, АдресТаблицыСопоставления);
КонецПроцедуры
Процедура ЗаполнитьСписокНеоднозначностейНоменклатура(СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры)
Запрос = Новый Запрос;
Если ИмяКолонки = "Номенклатура" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Номенклатура КАК Номенклатура,
| Штрихкоды.Характеристика КАК Характеристика,
| Штрихкоды.Упаковка КАК Упаковка
|ПОМЕСТИТЬ ВтДанныеШтрихкодов
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
|
|ГДЕ
| НЕ &Штрихкод = """"
| И Штрихкоды.Штрихкод = &Штрихкод
|;
|
|
|ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Ссылка
| ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ИСТИНА
|
| ГДЕ
| НЕ &Артикул = """"
| И ДанныеШтрихкодов.Номенклатура ЕСТЬ NULL
| И СпрНоменклатура.Артикул = &Артикул
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Ссылка
| ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ИСТИНА
|
| ГДЕ
| НЕ &КодНоменклатуры = """"
| И ДанныеШтрихкодов.Номенклатура ЕСТЬ NULL
| И СпрНоменклатура.Код = &КодНоменклатуры
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Ссылка
| ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ИСТИНА
|
| ГДЕ
| НЕ &Номенклатура = """"
| И ДанныеШтрихкодов.Номенклатура ЕСТЬ NULL
| И СпрНоменклатура.Наименование = &Номенклатура
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеШтрихкодов.Номенклатура КАК Ссылка
| ИЗ
| ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ) КАК СпрНоменклатура
|
|СГРУППИРОВАТЬ ПО
| СпрНоменклатура.Ссылка
|";
Запрос.УстановитьПараметр("Штрихкод", ЗагружаемыеЗначенияСтрока.Штрихкод);
Запрос.УстановитьПараметр("Артикул", ЗагружаемыеЗначенияСтрока.Артикул);
Запрос.УстановитьПараметр("КодНоменклатуры", ЗагружаемыеЗначенияСтрока.КодНоменклатуры);
Запрос.УстановитьПараметр("Номенклатура", ЗагружаемыеЗначенияСтрока.Номенклатура);
КонецЕсли;
Если ИмяКолонки = "Характеристика" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Характеристики.Ссылка КАК Ссылка
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК Характеристики
|
|ГДЕ
| НЕ &Характеристика = """"
| И Характеристики.Наименование = &Характеристика
|";
Запрос.УстановитьПараметр("Характеристика", ЗагружаемыеЗначенияСтрока.Характеристика);
КонецЕсли;
Если ИмяКолонки = "СтатьяКалькуляции" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| СпрСтатьиКалькуляции.Ссылка КАК Ссылка
|ИЗ
| Справочник.СтатьиКалькуляции КАК СпрСтатьиКалькуляции
|
|ГДЕ
| НЕ &СтатьяКалькуляции = """"
| И СпрСтатьиКалькуляции.Наименование = &СтатьяКалькуляции
|";
Запрос.УстановитьПараметр("СтатьяКалькуляции", ЗагружаемыеЗначенияСтрока.СтатьяКалькуляции);
КонецЕсли;
Если ИмяКолонки = "Упаковка" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Упаковки.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ
| Упаковки.Ссылка КАК Ссылка
| ИЗ
| Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
|
| ГДЕ
| НЕ &КодУпаковки = """"
| И Упаковки.Код = &КодУпаковки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Упаковки.Ссылка КАК Ссылка
| ИЗ
| Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
|
| ГДЕ
| НЕ &Упаковка = """"
| И Упаковки.Наименование = &Упаковка
| ) КАК Упаковки
|
|СГРУППИРОВАТЬ ПО
| Упаковки.Ссылка
|";
Запрос.УстановитьПараметр("КодУпаковки", ЗагружаемыеЗначенияСтрока.КодУпаковки);
Запрос.УстановитьПараметр("Упаковка", ЗагружаемыеЗначенияСтрока.Упаковка);
КонецЕсли;
Если ИмяКолонки = "Этап" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Этапы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЭтапыПроизводства КАК Этапы
|
|ГДЕ
| НЕ &Этап = """"
| И Этапы.Владелец = &РесурснаяСпецификация
| И Этапы.Наименование = &Этап
|";
Запрос.УстановитьПараметр("Этап", ЗагружаемыеЗначенияСтрока.Этап);
Запрос.УстановитьПараметр("РесурснаяСпецификация", ДополнительныеПараметры.РесурснаяСпецификация);
КонецЕсли;
Если ЗначениеЗаполнено(Запрос.Текст) Тогда
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СписокНеоднозначностей.Добавить(Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСписокНеоднозначностейТрудозатраты(СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры)
Запрос = Новый Запрос;
Если ИмяКолонки = "СтатьяКалькуляции" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| СпрСтатьиКалькуляции.Ссылка КАК Ссылка
|ИЗ
| Справочник.СтатьиКалькуляции КАК СпрСтатьиКалькуляции
|
|ГДЕ
| НЕ &СтатьяКалькуляции = """"
| И СпрСтатьиКалькуляции.Наименование = &СтатьяКалькуляции
|";
Запрос.УстановитьПараметр("СтатьяКалькуляции", ЗагружаемыеЗначенияСтрока.СтатьяКалькуляции);
КонецЕсли;
Если ИмяКолонки = "ВидРабот" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ВидыРабот.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ
| ВидыРабот.Ссылка КАК Ссылка
| ИЗ
| Справочник.ВидыРаботСотрудников КАК ВидыРабот
|
| ГДЕ
| НЕ &КодВидаРабот = """"
| И ВидыРабот.Код = &КодВидаРабот
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВидыРабот.Ссылка КАК Ссылка
| ИЗ
| Справочник.ВидыРаботСотрудников КАК ВидыРабот
|
| ГДЕ
| НЕ &ВидРабот = """"
| И ВидыРабот.Наименование = &ВидРабот
| ) КАК ВидыРабот
|
|СГРУППИРОВАТЬ ПО
| ВидыРабот.Ссылка
|";
Запрос.УстановитьПараметр("КодВидаРабот", ЗагружаемыеЗначенияСтрока.КодВидаРабот);
Запрос.УстановитьПараметр("ВидРабот", ЗагружаемыеЗначенияСтрока.ВидРабот);
КонецЕсли;
Если ИмяКолонки = "Этап" Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Этапы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЭтапыПроизводства КАК Этапы
|
|ГДЕ
| НЕ &Этап = """"
| И Этапы.Владелец = &РесурснаяСпецификация
| И Этапы.Наименование = &Этап
|";
Запрос.УстановитьПараметр("Этап", ЗагружаемыеЗначенияСтрока.Этап);
Запрос.УстановитьПараметр("РесурснаяСпецификация", ДополнительныеПараметры.РесурснаяСпецификация);
КонецЕсли;
Если ЗначениеЗаполнено(Запрос.Текст) Тогда
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СписокНеоднозначностей.Добавить(Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#Область ТекстыЗапросовЗагрузкиИзФайлаВТЧ
Функция СоздатьНастроитьЗапрос(ТекстыЗапроса, ЗагружаемыеДанные, ДополнительныеПараметры)
ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЗагружаемыеДанныеЭтап,",
?(ДополнительныеПараметры.ИспользуютсяЭтапы, "ЗагружаемыеДанные.НомерЭтапа КАК НомерЭтапа,
|ЗагружаемыеДанные.Этап КАК Этап,", ""));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Этап,", ?(ДополнительныеПараметры.ИспользуютсяЭтапы, "
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеЭтапов.КоличествоЭтапов, 0) = 1
| ТОГДА ДанныеЭтапов.Этап
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ЭтапыПроизводства.ПустаяСсылка)
| КОНЕЦ КАК Этап,", ""));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КоличествоЭтапов,",
?(ДополнительныеПараметры.ИспользуютсяЭтапы, "ЕСТЬNULL(ДанныеЭтапов.КоличествоЭтапов, 0) КАК КоличествоЭтапов,", ""));
ТекстЗапроса = ТекстЗапроса + ?(ДополнительныеПараметры.ИспользуютсяЭтапы, "
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеЭтапов КАК ДанныеЭтапов
| ПО ДанныеЭтапов.Идентификатор = ЗагружаемыеДанные.Идентификатор", "");
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЗагружаемыеДанные", ЗагружаемыеДанные);
Запрос.УстановитьПараметр("ДоступныеТипыНоменклатуры", ДополнительныеПараметры.ДоступныеТипыНоменклатуры);
Если ДополнительныеПараметры.ИспользуютсяЭтапы
Тогда
ДанныеПроизводственногоПроцесса = Неопределено;
Если ЭтоАдресВременногоХранилища(ДополнительныеПараметры.АдресЭлементовПроизводственногоПроцесса) Тогда
ДанныеПроизводственногоПроцесса = ПолучитьИзВременногоХранилища(ДополнительныеПараметры.АдресЭлементовПроизводственногоПроцесса);
КонецЕсли;
Запрос.УстановитьПараметр("РесурснаяСпецификация", ДополнительныеПараметры.РесурснаяСпецификация);
Запрос.УстановитьПараметр("ДанныеПроизводственногоПроцесса", ДанныеПроизводственногоПроцесса);
КонецЕсли;
Возврат Запрос;
КонецФункции
Функция ТекстЗапросаВтДанныеЭтапов()
ТекстЗапроса ="
|ВЫБРАТЬ
| ДанныеЭтаповКэш.Ссылка КАК Ссылка,
| ДанныеЭтаповКэш.Номер КАК НомерЭтапа,
| ДанныеЭтаповКэш.Наименование КАК Наименование
|ПОМЕСТИТЬ ВтДанныеЭтаповКэш
|ИЗ &ДанныеПроизводственногоПроцесса КАК ДанныеЭтаповКэш
|
|ГДЕ
| ТИПЗНАЧЕНИЯ(ДанныеЭтаповКэш.Ссылка) = ТИП(Справочник.ЭтапыПроизводства)
|
|;
|
|ВЫБРАТЬ
| Этапы.Идентификатор КАК Идентификатор,
| МАКСИМУМ(Этапы.Ссылка) КАК Этап,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Этапы.Ссылка) КАК КоличествоЭтапов
|ПОМЕСТИТЬ ВтДанныеЭтапов
|ИЗ
| (ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЭтапыПроизводства КАК Этапы
| ПО Этапы.НомерЭтапа = ЗагружаемыеДанные.НомерЭтапа
| И Этапы.Наименование = ЗагружаемыеДанные.Этап
|
| ГДЕ
| Этапы.Владелец = &РесурснаяСпецификация
| И НЕ Этапы.ПометкаУдаления
| И НЕ ЗагружаемыеДанные.НомерЭтапа = 0
| И НЕ ЗагружаемыеДанные.Этап = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЭтапыПроизводства КАК Этапы
| ПО Этапы.НомерЭтапа = ЗагружаемыеДанные.НомерЭтапа
|
| ГДЕ
| Этапы.Владелец = &РесурснаяСпецификация
| И НЕ Этапы.ПометкаУдаления
| И НЕ ЗагружаемыеДанные.НомерЭтапа = 0
| И ЗагружаемыеДанные.Этап = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЭтапыПроизводства КАК Этапы
| ПО Этапы.Наименование = ЗагружаемыеДанные.Этап
|
| ГДЕ
| Этапы.Владелец = &РесурснаяСпецификация
| И НЕ Этапы.ПометкаУдаления
| И НЕ ЗагружаемыеДанные.Этап = """"
| И ЗагружаемыеДанные.НомерЭтапа = 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеЭтаповКэш КАК Этапы
| ПО Этапы.НомерЭтапа = ЗагружаемыеДанные.НомерЭтапа
| И Этапы.Наименование = ЗагружаемыеДанные.Этап
|
| ГДЕ
| НЕ ЗагружаемыеДанные.НомерЭтапа = 0
| И НЕ ЗагружаемыеДанные.Этап = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеЭтаповКэш КАК Этапы
| ПО Этапы.НомерЭтапа = ЗагружаемыеДанные.НомерЭтапа
|
| ГДЕ
| НЕ ЗагружаемыеДанные.НомерЭтапа = 0
| И ЗагружаемыеДанные.Этап = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Этапы.Ссылка КАК Ссылка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеЭтаповКэш КАК Этапы
| ПО Этапы.Наименование = ЗагружаемыеДанные.Этап
|
| ГДЕ
| НЕ ЗагружаемыеДанные.Этап = """"
| И ЗагружаемыеДанные.НомерЭтапа = 0
| ) КАК Этапы
|
|СГРУППИРОВАТЬ ПО
| Этапы.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеСтатейКалькуляции()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| МАКСИМУМ(СпрСтатьиКалькуляции.Ссылка) КАК СтатьяКалькуляции,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпрСтатьиКалькуляции.Ссылка) КАК КоличествоСтатейКалькуляции
|ПОМЕСТИТЬ ВтДанныеСтатейКалькуляции
|ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтатьиКалькуляции КАК СпрСтатьиКалькуляции
| ПО СпрСтатьиКалькуляции.Наименование = ЗагружаемыеДанные.СтатьяКалькуляции
|
|ГДЕ
| НЕ ЗагружаемыеДанные.СтатьяКалькуляции = """"
|
|СГРУППИРОВАТЬ ПО
| ЗагружаемыеДанные.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
#Область ТекстыЗапросовЗагрузкиИзФайлаВТЧМатериалыИУслуги
Функция ТекстЗапросаВтЗагружаемыеДанныеМатериалыИУслуги()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ЗагружаемыеДанные.Штрихкод КАК Штрихкод,
| ЗагружаемыеДанные.Артикул КАК Артикул,
| ЗагружаемыеДанные.КодНоменклатуры КАК КодНоменклатуры,
| ЗагружаемыеДанные.Номенклатура КАК Номенклатура,
| ЗагружаемыеДанные.Характеристика КАК Характеристика,
| ЗагружаемыеДанные.КодУпаковки КАК КодУпаковки,
| ЗагружаемыеДанные.Упаковка КАК Упаковка,
| ЗагружаемыеДанные.КоличествоУпаковок КАК КоличествоУпаковок,
| &ЗагружаемыеДанныеЭтап,
| ЗагружаемыеДанные.СтатьяКалькуляции КАК СтатьяКалькуляции,
| ЗагружаемыеДанные.ПрименениеМатериала КАК ПрименениеМатериала
|ПОМЕСТИТЬ ВтЗагружаемыеДанные
|ИЗ
| &ЗагружаемыеДанные КАК ЗагружаемыеДанные
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеШтрихкодов()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Штрихкоды.Номенклатура КАК Номенклатура,
| Штрихкоды.Характеристика КАК Характеристика,
| Штрихкоды.Упаковка КАК Упаковка
|ПОМЕСТИТЬ ВтДанныеШтрихкодов
|ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
| ПО Штрихкоды.Штрихкод = ЗагружаемыеДанные.Штрихкод
|
|ГДЕ
| НЕ ЗагружаемыеДанные.Штрихкод = """"
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеНоменклатуры()
ТекстЗапроса =
"ВЫБРАТЬ
| СпрНоменклатура.Идентификатор КАК Идентификатор,
| МАКСИМУМ(СпрНоменклатура.Номенклатура) КАК Номенклатура,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпрНоменклатура.Номенклатура) КАК КоличествоНоменклатуры
|ПОМЕСТИТЬ ВтДанныеНоменклатуры
|ИЗ
| (ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| СпрНоменклатура.Ссылка КАК Номенклатура
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО СпрНоменклатура.Артикул = ЗагружаемыеДанные.Артикул
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Артикул = """"
| И СпрНоменклатура.ТипНоменклатуры В (&ДоступныеТипыНоменклатуры)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| СпрНоменклатура.Ссылка КАК Номенклатура
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО СпрНоменклатура.Код = ЗагружаемыеДанные.КодНоменклатуры
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.КодНоменклатуры = """"
| И СпрНоменклатура.ТипНоменклатуры В (&ДоступныеТипыНоменклатуры)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| СпрНоменклатура.Ссылка КАК Номенклатура
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО СпрНоменклатура.Наименование = ЗагружаемыеДанные.Номенклатура
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Номенклатура = """"
| И СпрНоменклатура.ТипНоменклатуры В (&ДоступныеТипыНоменклатуры)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеШтрихкодов.Идентификатор КАК Идентификатор,
| ДанныеШтрихкодов.Номенклатура КАК Номенклатура
| ИЗ
| ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ) КАК СпрНоменклатура
|
|СГРУППИРОВАТЬ ПО
| СпрНоменклатура.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор,
| Номенклатура
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеХарактеристик()
ТекстЗапроса =
"ВЫБРАТЬ
| Характеристики.Идентификатор КАК Идентификатор,
| МАКСИМУМ(Характеристики.Характеристика) КАК Характеристика,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Характеристики.Характеристика) КАК КоличествоХарактеристик
|ПОМЕСТИТЬ ВтДанныеХарактеристик
|ИЗ
| (ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Характеристики.Ссылка КАК Характеристика
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК Характеристики
| ПО Характеристики.Владелец = ДанныеНоменклатуры.Номенклатура
| И Характеристики.Наименование = ЗагружаемыеДанные.Характеристика
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Характеристика = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Характеристики.Ссылка КАК Характеристика
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК Характеристики
| ПО Характеристики.Владелец = ДанныеНоменклатуры.Номенклатура.ВидНоменклатуры
| И Характеристики.Наименование = ЗагружаемыеДанные.Характеристика
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Характеристика = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеШтрихкодов.Идентификатор КАК Идентификатор,
| ДанныеШтрихкодов.Характеристика КАК Характеристика
| ИЗ
| ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ) КАК Характеристики
|
|СГРУППИРОВАТЬ ПО
| Характеристики.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеУпаковок()
ТекстЗапроса =
"ВЫБРАТЬ
| Упаковки.Идентификатор КАК Идентификатор,
| МАКСИМУМ(Упаковки.Упаковка) КАК Упаковка,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Упаковки.Упаковка) КАК КоличествоУпаковки
|ПОМЕСТИТЬ ВтДанныеУпаковок
|ИЗ
| (ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Упаковки.Ссылка КАК Упаковка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО Упаковки.Владелец = ДанныеНоменклатуры.Номенклатура
| И Упаковки.Наименование = ЗагружаемыеДанные.Упаковка
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Упаковка = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Упаковки.Ссылка КАК Упаковка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО Упаковки.Владелец = ДанныеНоменклатуры.Номенклатура.НаборУпаковок
| И Упаковки.Наименование = ЗагружаемыеДанные.Упаковка
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.Упаковка = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Упаковки.Ссылка КАК Упаковка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО Упаковки.Владелец = ДанныеНоменклатуры.Номенклатура
| И Упаковки.Код = ЗагружаемыеДанные.КодУпаковки
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.КодУпаковки = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| Упаковки.Ссылка КАК Упаковка
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО Упаковки.Владелец = ДанныеНоменклатуры.Номенклатура.НаборУпаковок
| И Упаковки.Код = ЗагружаемыеДанные.КодУпаковки
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ПО ДанныеШтрихкодов.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ГДЕ
| ДанныеШтрихкодов.Идентификатор ЕСТЬ NULL
| И НЕ ЗагружаемыеДанные.КодУпаковки = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеШтрихкодов.Идентификатор КАК Идентификатор,
| ДанныеШтрихкодов.Упаковка КАК Упаковка
| ИЗ
| ВтДанныеШтрихкодов КАК ДанныеШтрихкодов
| ) КАК Упаковки
|
|СГРУППИРОВАТЬ ПО
| Упаковки.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаЗагружаемыеДанныеМатериаловИУслуг()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеСтатейКалькуляции.КоличествоСтатейКалькуляции, 0) = 1
| ТОГДА ДанныеСтатейКалькуляции.СтатьяКалькуляции
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтатьиКалькуляции.ПустаяСсылка)
| КОНЕЦ КАК СтатьяКалькуляции,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеНоменклатуры.КоличествоНоменклатуры, 0) = 1
| ТОГДА ДанныеНоменклатуры.Номенклатура
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| КОНЕЦ КАК Номенклатура,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеХарактеристик.КоличествоХарактеристик, 0) = 1
| ТОГДА ДанныеХарактеристик.Характеристика
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Характеристика,
| &Этап,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеУпаковок.КоличествоУпаковки, 0) = 1
| ТОГДА ДанныеУпаковок.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ЕСТЬNULL(ДанныеНоменклатуры.КоличествоНоменклатуры, 0) КАК КоличествоНоменклатуры,
| ЕСТЬNULL(ДанныеХарактеристик.КоличествоХарактеристик, 0) КАК КоличествоХарактеристик,
| &КоличествоЭтапов,
| ЕСТЬNULL(ДанныеУпаковок.КоличествоУпаковки, 0) КАК КоличествоУпаковки,
| ЕСТЬNULL(ДанныеСтатейКалькуляции.КоличествоСтатейКалькуляции, 0) КАК КоличествоСтатейКалькуляции,
| ЗагружаемыеДанные.КоличествоУпаковок КАК КоличествоУпаковок,
| ЗагружаемыеДанные.ПрименениеМатериала КАК ПрименениеМатериала
|ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеСтатейКалькуляции КАК ДанныеСтатейКалькуляции
| ПО ДанныеСтатейКалькуляции.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеНоменклатуры КАК ДанныеНоменклатуры
| ПО ДанныеНоменклатуры.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеХарактеристик КАК ДанныеХарактеристик
| ПО ДанныеХарактеристик.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеУпаковок КАК ДанныеУпаковок
| ПО ДанныеУпаковок.Идентификатор = ЗагружаемыеДанные.Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область ТекстыЗапросовЗагрузкиИзФайлаВТЧТрудозатраты
Функция ТекстЗапросаВтЗагружаемыеДанныеТрудозатраты()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ЗагружаемыеДанные.КодВидаРабот КАК КодВидаРабот,
| ЗагружаемыеДанные.ВидРабот КАК ВидРабот,
| ЗагружаемыеДанные.Количество КАК Количество,
| ЗагружаемыеДанные.СтатьяКалькуляции КАК СтатьяКалькуляции,
| &ЗагружаемыеДанныеЭтап,
| ЗагружаемыеДанные.НазначениеРабот КАК НазначениеРабот
|ПОМЕСТИТЬ ВтЗагружаемыеДанные
|ИЗ
| &ЗагружаемыеДанные КАК ЗагружаемыеДанные
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтДанныеВидовРабот()
ТекстЗапроса =
"ВЫБРАТЬ
| ВидыРабот.Идентификатор КАК Идентификатор,
| МАКСИМУМ(ВидыРабот.ВидРабот) КАК ВидРабот,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидыРабот.ВидРабот) КАК КоличествоВидовРабот
|ПОМЕСТИТЬ ВтДанныеВидовРабот
|ИЗ
| (ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ВидыРабот.Ссылка КАК ВидРабот
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыРаботСотрудников КАК ВидыРабот
| ПО ВидыРабот.Код = ЗагружаемыеДанные.КодВидаРабот
|
| ГДЕ
| НЕ ЗагружаемыеДанные.КодВидаРабот = """"
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ВидыРабот.Ссылка КАК ВидРабот
| ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыРаботСотрудников КАК ВидыРабот
| ПО ВидыРабот.Наименование = ЗагружаемыеДанные.ВидРабот
|
| ГДЕ
| НЕ ЗагружаемыеДанные.ВидРабот = """"
| ) КАК ВидыРабот
|
|СГРУППИРОВАТЬ ПО
| ВидыРабот.Идентификатор
|
|ИНДЕКСИРОВАТЬ ПО
| Идентификатор,
| ВидРабот
|";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаЗагружаемыеДанныеТрудозатраты()
ТекстЗапроса =
"ВЫБРАТЬ
| ЗагружаемыеДанные.Идентификатор КАК Идентификатор,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеСтатейКалькуляции.КоличествоСтатейКалькуляции, 0) = 1
| ТОГДА ДанныеСтатейКалькуляции.СтатьяКалькуляции
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтатьиКалькуляции.ПустаяСсылка)
| КОНЕЦ КАК СтатьяКалькуляции,
| ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеВидовРабот.КоличествоВидовРабот, 0) = 1
| ТОГДА ДанныеВидовРабот.ВидРабот
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыРаботСотрудников.ПустаяСсылка)
| КОНЕЦ КАК ВидРабот,
| &Этап,
| ЕСТЬNULL(ДанныеВидовРабот.КоличествоВидовРабот, 0) КАК КоличествоВидовРабот,
| ЕСТЬNULL(ДанныеСтатейКалькуляции.КоличествоСтатейКалькуляции, 0) КАК КоличествоСтатейКалькуляции,
| ЗагружаемыеДанные.Количество КАК Количество,
| &КоличествоЭтапов,
| ЗагружаемыеДанные.НазначениеРабот КАК НазначениеРабот
|ИЗ
| ВтЗагружаемыеДанные КАК ЗагружаемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеСтатейКалькуляции КАК ДанныеСтатейКалькуляции
| ПО ДанныеСтатейКалькуляции.Идентификатор = ЗагружаемыеДанные.Идентификатор
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеВидовРабот КАК ДанныеВидовРабот
| ПО ДанныеВидовРабот.Идентификатор = ЗагружаемыеДанные.Идентификатор
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецОбласти
#Область ТекстыЗапросов
Функция ТекстЗапросаДанныеОсновногоИзделияСпецификации()
ТекстыЗапросов = Новый Массив;
ТекстЗапроса = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| ВыходныеИзделия.Ссылка КАК Спецификация,
| ВыходныеИзделия.Ссылка.ВариантНазначения КАК ВариантНазначения,
|
| ВыходныеИзделия.ВидНоменклатуры КАК ВидНоменклатуры,
| &ВыходныеИзделияИсточникНоменклатуры КАК Номенклатура,
| &ВыходныеИзделияИсточникХарактеристики КАК Характеристика,
|
| ВыходныеИзделия.КоличествоУпаковок КАК КоличествоУпаковок,
|
| ВЫБОР
| КОГДА &УчитыватьВероятностьБрака
| ТОГДА ВыходныеИзделия.ПроцентБрака / 100
| ИНАЧЕ 0
| КОНЕЦ КАК КоэффициентБрака,
|
| ВыходныеИзделия.Упаковка КАК Упаковка,
| ВыходныеИзделия.Этап КАК Этап,
| ВыходныеИзделия.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ЛюбаяХарактеристика,
| ВыходныеИзделия.НомерСтроки = 1 КАК ЭтоОсновноеИзделие
|
|ПОМЕСТИТЬ ВтОсновноеИзделие
|ИЗ
| Справочник.РесурсныеСпецификации.ВыходныеИзделия КАК ВыходныеИзделия
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО ВыходныеИзделия.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
| И ВыходныеИзделия.Ссылка.ТипПроизводственногоПроцесса В (
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Сборка),
| ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Ремонт))
| И (ВыходныеИзделия.Номенклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ИЛИ ВтДанныеПоНоменклатуре.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВыходныеИзделия.НомерСтроки = 1
| ИЛИ ВыходныеИзделия.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВыходныеИзделия.ВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры
| И ВыходныеИзделия.НомерСтроки = 1)
| И (ВтДанныеПоНоменклатуре.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| И ВыходныеИзделия.НомерСтроки = 1
| ИЛИ ВыходныеИзделия.Характеристика = ВтДанныеПоНоменклатуре.Характеристика
| ИЛИ ВыходныеИзделия.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВходныеИзделия.Ссылка,
| ВходныеИзделия.ВариантНазначения,
|
| ВходныеИзделия.ОсновноеИзделиеВидНоменклатуры,
| &ВходныеИзделияИсточникНоменклатуры,
| &ВходныеИзделияИсточникХарактеристики,
|
| ВходныеИзделия.ОсновноеИзделиеКоличествоУпаковок,
|
| 0,
|
| ВходныеИзделия.ОсновноеИзделиеУпаковка,
| ВходныеИзделия.ОсновноеИзделиеЭтап,
| ВходныеИзделия.ОсновноеИзделиеХарактеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
| ИСТИНА
|ИЗ
| Справочник.РесурсныеСпецификации КАК ВходныеИзделия
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеПоНоменклатуре КАК ВтДанныеПоНоменклатуре
| ПО ВходныеИзделия.Ссылка = ВтДанныеПоНоменклатуре.Спецификация
| И ВходныеИзделия.ТипПроизводственногоПроцесса = ЗНАЧЕНИЕ(Перечисление.ТипыПроизводственныхПроцессов.Разборка)
| И (ВходныеИзделия.ОсновноеИзделиеНоменклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ИЛИ ВтДанныеПоНоменклатуре.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| ИЛИ ВходныеИзделия.ОсновноеИзделиеНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВходныеИзделия.ОсновноеИзделиеВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры)
| И (ВтДанныеПоНоменклатуре.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ИЛИ ВходныеИзделия.ОсновноеИзделиеХарактеристика = ВтДанныеПоНоменклатуре.Характеристика
| ИЛИ ВходныеИзделия.ОсновноеИзделиеХарактеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
|";
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстыЗапросов.Добавить(УправлениеДаннымиОбИзделиях.ТекстЗапросаДанныеУпаковок(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ВтОсновноеИзделие")));
ТекстЗапроса = "
|ВЫБРАТЬ
| Т.*,
| Т.КоличествоУпаковок КАК КоличествоУпаковокНаЕдиницуПартииВыпуска,
| Т.ВидНоменклатуры.ТипНоменклатуры КАК ТипНоменклатуры,
| ВЫБОР
| КОГДА Т.ВидНоменклатуры.ИспользованиеХарактеристик В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры),
| ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ХарактеристикиИспользуются,
| ЕСТЬNULL(Т.Номенклатура.ГруппаАналитическогоУчета, ЗНАЧЕНИЕ(Справочник.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка)) КАК ГруппаАналитическогоУчета,
| ЕСТЬNULL(Т.Номенклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК ЕдиницаИзмерения,
| ЕСТЬNULL(Т.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук), ЛОЖЬ) КАК ЕдиницаИзмеренияШтучная
|
|ИЗ
| ВтОсновноеИзделие КАК Т
|";
ТекстыЗапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
ПараметрыПодстановкиВыходныеИзделия = ПараметрыПодстановкиНоменклатураХарактеристикаОсновногоИзделия(
"ВыходныеИзделия",
"ВидНоменклатуры",
"Номенклатура",
"Характеристика");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникНоменклатуры", ПараметрыПодстановкиВыходныеИзделия.ИсточникНоменклатура);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВыходныеИзделияИсточникХарактеристики", ПараметрыПодстановкиВыходныеИзделия.ИсточникХарактеристика);
ПараметрыПодстановкиВходныеИзделия = ПараметрыПодстановкиНоменклатураХарактеристикаОсновногоИзделия(
"ВходныеИзделия",
"ОсновноеИзделиеВидНоменклатуры",
"ОсновноеИзделиеНоменклатура",
"ОсновноеИзделиеХарактеристика");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВходныеИзделияИсточникНоменклатуры", ПараметрыПодстановкиВходныеИзделия.ИсточникНоменклатура);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВходныеИзделияИсточникХарактеристики", ПараметрыПодстановкиВходныеИзделия.ИсточникХарактеристика);
Возврат ТекстЗапроса;
КонецФункции
Функция ПараметрыПодстановкиНоменклатураХарактеристикаОсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры = "ВидНоменклатуры",
ИсточникНоменклатура = "Номенклатура",
ИсточникХарактеристика = "Характеристика")
Результат = Новый Структура;
ТекстПоляНоменклатура = ТекстПоляВыражениеНоменклатураОсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры,
ИсточникНоменклатура);
ТекстПоляХарактеристика = ТекстПоляВыражениеХарактеристикаОсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры,
ИсточникНоменклатура,
ИсточникХарактеристика);
Результат.Вставить("ИсточникНоменклатура", ТекстПоляНоменклатура);
Результат.Вставить("ИсточникХарактеристика", ТекстПоляХарактеристика);
Возврат Результат;
КонецФункции
Функция ТекстПоляВыражениеНоменклатураОсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры = "ВидНоменклатуры",
ИсточникНоменклатура = "Номенклатура")
ТекстПоля = "
|ВЫБОР
| КОГДА ТабличнаяЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ТабличнаяЧасть.ВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры
| ТОГДА ВтДанныеПоНоменклатуре.Номенклатура
| ИНАЧЕ ТабличнаяЧасть.Номенклатура
|КОНЕЦ
|";
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.ВидНоменклатуры", ИмяТаблицы + "." + ИсточникВидНоменклатуры);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Номенклатура", ИмяТаблицы + "." + ИсточникНоменклатура);
Возврат ТекстПоля;
КонецФункции
Функция ТекстПоляВыражениеХарактеристикаОсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры = "ВидНоменклатуры",
ИсточникНоменклатура = "Номенклатура",
ИсточникХарактеристика = "Характеристика")
ТекстПоля = "
|ВЫБОР
| КОГДА ТабличнаяЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ТабличнаяЧасть.ВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры
| ТОГДА ВтДанныеПоНоменклатуре.Характеристика
| КОГДА ТабличнаяЧасть.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ТабличнаяЧасть.Характеристика
| КОГДА ТабличнаяЧасть.Номенклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ТОГДА ВтДанныеПоНоменклатуре.Характеристика
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
|КОНЕЦ";
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.ВидНоменклатуры", ИмяТаблицы + "." + ИсточникВидНоменклатуры);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Номенклатура", ИмяТаблицы + "." + ИсточникНоменклатура);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Характеристика", ИмяТаблицы + "." + ИсточникХарактеристика);
Возврат ТекстПоля;
КонецФункции
Функция ТекстПоляВыражениеХарактеристикаЦООсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры = "ВидНоменклатуры",
ИсточникНоменклатура = "Номенклатура",
ИсточникХарактеристика = "Характеристика")
ТекстПоля = "
|ЕСТЬNULL(ВЫБОР
| КОГДА
| ТабличнаяЧасть.ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка)
| ИНАЧЕ ВЫБОР
| КОГДА ТабличнаяЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ТабличнаяЧасть.ВидНоменклатуры = ВтДанныеПоНоменклатуре.Номенклатура.ВидНоменклатуры
| ТОГДА ВтДанныеПоНоменклатуре.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования
| КОГДА ТабличнаяЧасть.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ТабличнаяЧасть.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования
| КОГДА ТабличнаяЧасть.Номенклатура = ВтДанныеПоНоменклатуре.Номенклатура
| ТОГДА ВтДанныеПоНоменклатуре.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка)
|КОНЕЦ
|КОНЕЦ, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка))";
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.ВидНоменклатуры", ИмяТаблицы + "." + ИсточникВидНоменклатуры);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Номенклатура", ИмяТаблицы + "." + ИсточникНоменклатура);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Характеристика", ИмяТаблицы + "." + ИсточникХарактеристика);
Возврат ТекстПоля;
КонецФункции
Функция ТекстПоляВыражениеУпаковкаЦООсновногоИзделия(
ИмяТаблицы,
ИсточникВидНоменклатуры = "ВидНоменклатуры",
ИсточникНоменклатура = "Номенклатура",
ИсточникУпаковка = "Упаковка")
ТекстПоля = "
|ВЫБОР
| КОГДА ТабличнаяЧасть.ВидНоменклатуры.НастройкиКлючаЦенПоУпаковке = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
| ТОГДА ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИНАЧЕ ТабличнаяЧасть.Упаковка
|КОНЕЦ";
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.ВидНоменклатуры", ИмяТаблицы + "." + ИсточникВидНоменклатуры);
ТекстПоля = СтрЗаменить(ТекстПоля, "ТабличнаяЧасть.Упаковка", ИмяТаблицы + "." + ИсточникУпаковка);
Возврат ТекстПоля;
КонецФункции
Функция ТекстЗапросаМатериалыСпецификацийВключаяСоставНаборов(ИмяТаблицы) Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| РесурсныеСпецификацииМатериалыИУслуги.Номенклатура КАК Номенклатура,
| РесурсныеСпецификацииМатериалыИУслуги.Характеристика КАК Характеристика,
| МАКСИМУМ(ВариантыКомплектацииНоменклатуры.Ссылка) КАК ВариантКомплектацииНоменклатуры
|ПОМЕСТИТЬ ВТОсновныеКомплектацииНоменклатуры
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТаблицаСпецификаций КАК ТаблицаСпецификаций
| ПО (ТаблицаСпецификаций.Спецификация = РесурсныеСпецификацииМатериалыИУслуги.Ссылка)
| И (РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор))
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
| ПО РесурсныеСпецификацииМатериалыИУслуги.Номенклатура = ВариантыКомплектацииНоменклатуры.Владелец
| И РесурсныеСпецификацииМатериалыИУслуги.Характеристика = ВариантыКомплектацииНоменклатуры.Характеристика
| И (НЕ ВариантыКомплектацииНоменклатуры.ПометкаУдаления)
|
|СГРУППИРОВАТЬ ПО
| РесурсныеСпецификацииМатериалыИУслуги.Номенклатура,
| РесурсныеСпецификацииМатериалыИУслуги.Характеристика
|;
|
|
|ВЫБРАТЬ
| ВТОсновныеКомплектацииНоменклатуры.Номенклатура КАК Номенклатура,
| ВТОсновныеКомплектацииНоменклатуры.Характеристика КАК Характеристика,
| ВариантыКомплектацииНоменклатурыТовары.Номенклатура КАК Комплектующая,
| ВариантыКомплектацииНоменклатурыТовары.Характеристика КАК ХарактеристикаКомплектующей,
| ВариантыКомплектацииНоменклатурыТовары.Упаковка КАК Упаковка,
| ВариантыКомплектацииНоменклатурыТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ВариантыКомплектацииНоменклатурыТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТСоставНаборов
|ИЗ
| ВТОсновныеКомплектацииНоменклатуры КАК ВТОсновныеКомплектацииНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК ВариантыКомплектацииНоменклатурыТовары
| ПО ВТОсновныеКомплектацииНоменклатуры.ВариантКомплектацииНоменклатуры = ВариантыКомплектацииНоменклатурыТовары.Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| РесурсныеСпецификацииМатериалыИУслуги.Ссылка КАК Ссылка,
| РесурсныеСпецификацииМатериалыИУслуги.Этап КАК Этап,
| ЕСТЬNULL(ВТСоставНаборов.Комплектующая, РесурсныеСпецификацииМатериалыИУслуги.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(ВТСоставНаборов.Характеристика, РесурсныеСпецификацииМатериалыИУслуги.Характеристика) КАК Характеристика,
| ЕСТЬNULL(ВТСоставНаборов.Упаковка, РесурсныеСпецификацииМатериалыИУслуги.Упаковка) КАК Упаковка,
| РесурсныеСпецификацииМатериалыИУслуги.КоличествоУпаковок
| * ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1)
| * ЕСТЬNULL(ВТСоставНаборов.КоличествоУпаковок, 1) КАК КоличествоУпаковок,
| РесурсныеСпецификацииМатериалыИУслуги.КоличествоУпаковок
| * ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1)
| * ЕСТЬNULL(ВТСоставНаборов.Количество, 1) КАК Количество
|ПОМЕСТИТЬ МатериалыИУслугиСпецификаций
|ИЗ
| Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТаблицаСпецификаций КАК ТаблицаСпецификаций
| ПО (ТаблицаСпецификаций.Спецификация = РесурсныеСпецификацииМатериалыИУслуги.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСоставНаборов КАК ВТСоставНаборов
| ПО РесурсныеСпецификацииМатериалыИУслуги.Номенклатура = ВТСоставНаборов.Номенклатура
| И РесурсныеСпецификацииМатериалыИУслуги.Характеристика = ВТСоставНаборов.Характеристика
| И (РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор))
|;
|
|
|УНИЧТОЖИТЬ ВТОсновныеКомплектацииНоменклатуры
|;
|
|
|УНИЧТОЖИТЬ ВТСоставНаборов";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"РесурсныеСпецификацииМатериалыИУслуги.Упаковка",
"РесурсныеСпецификацииМатериалыИУслуги.Номенклатура"));
Возврат СтрЗаменить(ТекстЗапроса, "&ТаблицаСпецификаций", ИмяТаблицы);
КонецФункции
Функция ПараметрыПодстановкиПоляЗаказатьНаСклад(ИмяТаблицы = "ТабличнаяЧасть", ИсточникНоменклатуры = "", ВариантЗаполненияОбеспечения = Неопределено)
ТекстПоля = "ЛОЖЬ";
ТекстСоединения = "";
Если ВариантЗаполненияОбеспечения = Перечисления.ВариантыЗаполненияОбеспеченияПроизводства.ПоНастройкамПередачиВПроизводство
ИЛИ ВариантЗаполненияОбеспечения = Перечисления.ВариантыЗаполненияОбеспеченияПроизводства.ПоНастройкамПередачиВПроизводствоДляПланов Тогда
ТекстПоля = "
| ВЫБОР
| КОГДА ТабличнаяЧасть.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| ИЛИ ТабличнаяЧасть.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))
| ТОГДА ЛОЖЬ
| КОГДА ТабличнаяЧасть.ПроизводитсяВПроцессе ТОГДА
| ВЫБОР
| КОГДА ТабличнаяЧасть.Этап.Подразделение.СпособПолученияПолуфабрикатов = ЗНАЧЕНИЕ(Перечисление.СпособыПолученияПолуфабрикатовПроизводимыхВПроцессе.Напрямую)
| ТОГДА ЛОЖЬ
| КОГДА ТабличнаяЧасть.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.ЭтапыПроизводства
| И ВЫРАЗИТЬ(ТабличнаяЧасть.ИсточникПолученияПолуфабриката КАК Справочник.ЭтапыПроизводства).Подразделение = ТабличнаяЧасть.Этап.Подразделение
| ТОГДА ЛОЖЬ
| КОГДА ТабличнаяЧасть.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.ЭтапыПроизводства
| И ВЫРАЗИТЬ(ТабличнаяЧасть.ИсточникПолученияПолуфабриката КАК Справочник.ЭтапыПроизводства).Подразделение <> ТабличнаяЧасть.Этап.Подразделение
| ТОГДА ИСТИНА
| КОГДА ТабличнаяЧасть.ИсточникПолученияПолуфабриката ССЫЛКА Справочник.РесурсныеСпецификации
| И ПроизводимоеВПроцессеИзделие.Этап.Подразделение <> ТабличнаяЧасть.Этап.Подразделение
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОГДА &ТекстПолеОснование = ЗНАЧЕНИЕ(Перечисление.ОснованияДляПолученияМатериаловВПроизводстве.ПоЗаказуНаПроизводство)
| ИЛИ ТабличнаяЧасть.Этап.ПроизводствоНаСтороне
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
ТекстСоединения = "
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации.ВыходныеИзделия КАК ПроизводимоеВПроцессеИзделие
| ПО ПроизводимоеВПроцессеИзделие.Ссылка = ТабличнаяЧасть.ИсточникПолученияПолуфабриката
| И ТабличнаяЧасть.ПроизводитсяВПроцессе
| И ПроизводимоеВПроцессеИзделие.Номенклатура = ТабличнаяЧасть.Номенклатура
| И (ПроизводимоеВПроцессеИзделие.Характеристика = ТабличнаяЧасть.Характеристика
| ИЛИ ПроизводимоеВПроцессеИзделие.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))";
Если НЕ ПустаяСтрока(ИсточникНоменклатуры) Тогда
ТекстПоля = СтрЗаменить(ТекстПоля , "ТабличнаяЧасть.Номенклатура" , ИсточникНоменклатуры+".Номенклатура");
ТекстПоля = СтрЗаменить(ТекстПоля , "ТабличнаяЧасть.Характеристика", ИсточникНоменклатуры+".Характеристика");
ТекстСоединения = СтрЗаменить(ТекстСоединения, "ТабличнаяЧасть.Номенклатура" , ИсточникНоменклатуры+".Номенклатура");
ТекстСоединения = СтрЗаменить(ТекстСоединения, "ТабличнаяЧасть.Характеристика", ИсточникНоменклатуры+".Характеристика");
КонецЕсли;
Если ИмяТаблицы <> "ТабличнаяЧасть" Тогда
ТекстПоля = СтрЗаменить(ТекстПоля , "ТабличнаяЧасть.", ИмяТаблицы+".");
ТекстСоединения = СтрЗаменить(ТекстСоединения, "ТабличнаяЧасть.", ИмяТаблицы+".");
КонецЕсли;
КонецЕсли;
Возврат Новый Структура("ТекстПоля, ТекстСоединения", ТекстПоля, ТекстСоединения);
КонецФункции
Функция ТекстПодстановкиПоляЗапланировать(ИсточникПодразделенияДиспетчера = "", ИсточникНоменклатуры = "", ИсточникПолученияПолуфабриката = "") Экспорт
ТекстПоля = "
| ВЫБОР
| КОГДА (&ПодразделениеДиспетчер = ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| ИЛИ ЕСТЬNULL(СпрСпособОбеспечения.ИсточникОбеспеченияПотребностей, ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка))
| В (&ПодразделениеДиспетчер,
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)))
| И ЕСТЬNULL(СпрСпособОбеспечения.ТипОбеспечения, ЗНАЧЕНИЕ(Перечисление.ТипыОбеспечения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ТипыОбеспечения.Производство)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
Если НЕ ПустаяСтрока(ИсточникНоменклатуры) Тогда
ТекстПоля = СтрЗаменить(ТекстПоля, "МатериалыИУслуги.Номенклатура", ИсточникНоменклатуры);
КонецЕсли;
Если НЕ ПустаяСтрока(ИсточникПолученияПолуфабриката) Тогда
ТекстПоля = СтрЗаменить(ТекстПоля, "МатериалыИУслуги.ИсточникПолученияПолуфабриката", ИсточникПолученияПолуфабриката);
КонецЕсли;
Если НЕ ПустаяСтрока(ИсточникПодразделенияДиспетчера) Тогда
ТекстПоля = СтрЗаменить(ТекстПоля, "&ПодразделениеДиспетчер", ИсточникПодразделенияДиспетчера);
КонецЕсли;
Возврат ТекстПоля;
КонецФункции
Функция ТекстЗапросаДоступныеУпаковкиСпецификацииНаВидНоменклатуры(АвтоПодбор = Ложь) Экспорт
ТекстыЗапроса = Новый Массив;
ТекстЗапроса = "
|ВЫБРАТЬ
| УпаковкиЕдиницыИзмерения.Владелец КАК НаборУпаковок,
| УпаковкиЕдиницыИзмерения.Ссылка КАК Ссылка,
| УпаковкиЕдиницыИзмерения.Представление КАК Представление
|ИЗ
| Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
|ГДЕ
| УпаковкиЕдиницыИзмерения.Владелец = ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.БазовыеЕдиницыИзмерения)
| И &ОтборСтрокаПоиска
|
|";
Если НЕ АвтоПодбор Тогда
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Представление
|";
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапроса);
ТекстЗапроса = "
|ВЫБРАТЬ
| УпаковкиЕдиницыИзмерения.Владелец КАК НаборУпаковок,
| УпаковкиЕдиницыИзмерения.Ссылка КАК Ссылка,
| УпаковкиЕдиницыИзмерения.Представление КАК Представление
|ИЗ
| Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
|ГДЕ
| ВЫРАЗИТЬ(УпаковкиЕдиницыИзмерения.Владелец КАК Справочник.НаборыУпаковок).Предопределенный = ЛОЖЬ
| И &ИспользоватьУпаковкиНоменклатуры
| И &ОтборСтрокаПоиска
|
|";
Если НЕ АвтоПодбор Тогда
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| НаборУпаковок,
| Ссылка ИЕРАРХИЯ,
| Представление
|АВТОУПОРЯДОЧИВАНИЕ
|";
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапроса);
Если АвтоПодбор Тогда
ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборСтрокаПоиска", "УпаковкиЕдиницыИзмерения.Наименование ПОДОБНО &СтрокаПоиска");
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Представление
|";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"ВЫБРАТЬ",
"ВЫБРАТЬ ПЕРВЫЕ 10");
Иначе
ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + ";" + Символы.ПС);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборСтрокаПоиска", "ИСТИНА");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстПодстановкиРасчетПризнакаЕстьПараметризацияРесурсов(ИсточникСпецификации = "") Экспорт
ТекстЗапроса = " ЛОЖЬ ";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Прочее
Функция СобытиеЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Получение данных спецификации'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
Функция СтруктураДанныхОсновногоИзделияСпецификации() Экспорт
Результат = Новый Структура;
Результат.Вставить("ВидНоменклатуры", ПредопределенноеЗначение("Справочник.ВидыНоменклатуры.ПустаяСсылка"));
Результат.Вставить("Номенклатура", ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
Результат.Вставить("Характеристика", ПредопределенноеЗначение("Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка"));
Результат.Вставить("Количество", 0);
Результат.Вставить("КоличествоУпаковок", 0);
Результат.Вставить("Упаковка", ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
Результат.Вставить("ДанныеУпаковки", УправлениеДаннымиОбИзделияхПовтИсп.СтруктураДанныхУпаковки());
Результат.Вставить("ЕдиницаИзмерения", ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
Результат.Вставить("ЕдиницаИзмеренияШтучная", Ложь);
Результат.Вставить("УпаковкаШтучная", Ложь);
Результат.Вставить("ТипНоменклатуры", ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"));
Результат.Вставить("ГруппаАналитическогоУчета", ПредопределенноеЗначение("Справочник.ГруппыАналитическогоУчетаНоменклатуры.ПустаяСсылка"));
Результат.Вставить("ХарактеристикиИспользуются", Ложь);
Результат.Вставить("ЛюбаяХарактеристика", Ложь);
Результат.Вставить("Спецификация", ПредопределенноеЗначение("Справочник.РесурсныеСпецификации.ПустаяСсылка"));
Результат.Вставить("ВариантНазначения", ПредопределенноеЗначение("Перечисление.ВариантыНазначенияСпецификации.ПустаяСсылка"));
Результат.Вставить("КоэффициентБрака", 0);
Результат.Вставить("ЭтоОсновноеИзделие", Ложь);
Результат.Вставить("КоличествоУпаковокНаЕдиницуПартииВыпуска", 0);
Результат.Вставить("КоэффициентПересчетаВОсновноеИзделие", 1);
Результат.Вставить("Подразделение", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"));
Результат.Вставить("ПодразделениеДиспетчер", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"));
Результат.Вставить("НаправлениеДеятельности", ПредопределенноеЗначение("Справочник.НаправленияДеятельности.ПустаяСсылка"));
Результат.Вставить("НачалоПроизводства", '00010101');
Результат.Вставить("ДатаПотребности", '00010101');
Результат.Вставить("ДнейОтПотребности", 0);
Возврат Результат;
КонецФункции
Процедура ПолучитьПервыйИПоследнийЭтап(Владелец, ПервыйЭтап, ПоследнийЭтап, СписокРеквизитов = "") Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| ЭтапыПроизводства.Ссылка,
| &СписокРеквизитов,
| ЭтапыПроизводства.НомерЭтапа,
| ЭтапыПроизводства.НомерСледующегоЭтапа
|ИЗ
| Справочник.ЭтапыПроизводства КАК ЭтапыПроизводства
|ГДЕ
| (ЭтапыПроизводства.НомерЭтапа = 1
| ИЛИ ЭтапыПроизводства.НомерСледующегоЭтапа = 0)
| И ЭтапыПроизводства.Владелец = &Владелец
| И (НЕ ЭтапыПроизводства.ПометкаУдаления)
|УПОРЯДОЧИТЬ ПО
| Ссылка";
ТекстРеквизиты = "";
Если ЗначениеЗаполнено(СписокРеквизитов) Тогда
Для каждого ИмяРеквизита Из СтрРазделить(СписокРеквизитов, ",") Цикл
ТекстРеквизиты = ТекстРеквизиты + СтрШаблон("ЭтапыПроизводства.%1,", ИмяРеквизита);
ПервыйЭтап.Вставить(ИмяРеквизита);
ПоследнийЭтап.Вставить(ИмяРеквизита);
КонецЦикла;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&СписокРеквизитов,", ТекстРеквизиты);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Владелец", Владелец);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.НомерЭтапа = 1 Тогда
ЗаполнитьЗначенияСвойств(ПервыйЭтап, Выборка);
КонецЕсли;
Если Выборка.НомерСледующегоЭтапа = 0 Тогда
ЗаполнитьЗначенияСвойств(ПоследнийЭтап, Выборка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли