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