#Область ОписаниеПеременных
&НаКлиенте
Перем КэшируемыеЗначения;
&НаКлиенте
Перем ДатаПоставкиДоИзменения;
&НаКлиенте
Перем СтрокаДоИзменения;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекстНеЗаполнено = НСтр("ru = '<не заполнено>'");
ИспользоватьЗаказыПоставщикам = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам");
ИспользоватьСоглашенияСПоставщиками = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСПоставщиками");
ОптимизироватьЗапасыРаспределительногоЦентра = ПолучитьФункциональнуюОпцию("ОптимизироватьЗапасыРаспределительногоЦентра");
ИспользоватьОбособленноеОбеспечениеЗаказов = ПолучитьФункциональнуюОпцию("ИспользоватьОбособленноеОбеспечениеЗаказов");
ИспользоватьНесколькоСкладов = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
Элементы.ПредварительныйПросмотрСоглашение.Видимость = ИспользоватьСоглашенияСПоставщиками;
Элементы.НадписьОсобенностиРаспределительнойСети.Видимость = ОптимизироватьЗапасыРаспределительногоЦентра;
Элементы.РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах.Видимость = ИспользоватьОбособленноеОбеспечениеЗаказов
И ИспользоватьНесколькоСкладов;
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
КурсВалютыУпрУчета = РаботаСКурсамиВалютУТ.ПолучитьКурсВалюты(Константы.ВалютаУправленческогоУчета.Получить(), НачалоДня(ТекущаяДатаСеанса()));
Если КурсВалютыУпрУчета.КурсЗнаменатель = 0 Тогда
ТекстИсключения = НСтр("ru = 'Не задан курс валюты управленческого учета. Формирование заказов невозможно.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
УстановитьДоступностьКомандПоФункциональнымОпциям();
НастроитьЭлементыФормыКлиентскогоПриложенияТакси();
ЕдиницаИзмеренияВеса = Константы.ЕдиницаИзмеренияВеса.Получить();
Элементы.ЕдиницаИзмеренияВеса.Заголовок = Строка(ЕдиницаИзмеренияВеса);
Элементы.ЕдиницаИзмеренияВесаШаг5.Заголовок = Строка(ЕдиницаИзмеренияВеса);
ВалютаУправленческогоУчета = Константы.ВалютаУправленческогоУчета.Получить();
Элементы.ВалютаУпрУчета.Заголовок = Строка(ВалютаУправленческогоУчета);
Элементы.ВалютаУпрУчетаШаг5.Заголовок = Строка(ВалютаУправленческогоУчета);
ИспользоватьУпаковки = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
Элементы.ПредварительныйПросмотрУпаковкаЗаказа.Видимость = ИспользоватьУпаковки;
ЕстьДоступКИзменениюУпаковки = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ТоварныеОграничения);
ТипыЗаказов.ЗагрузитьЗначения(Метаданные.Справочники.Назначения.Реквизиты.Заказ.Тип.Типы());
ЕстьШагЗапасы = Не Параметры.Свойство("ЕстьШагЗапасы") Или Параметры.ЕстьШагЗапасы;
ПараметрОтборПоТипуОбеспечения = Неопределено;
Параметры.Свойство("ОтборПоТипуОбеспечения", ПараметрОтборПоТипуОбеспечения);
ОбработатьДоступностьТиповОбеспечения(ПараметрОтборПоТипуОбеспечения);
Если Элементы.ОтборПоТипуОбеспечения.Вид = ВидПоляФормы.ПолеНадписи Тогда
ДоступныеТипыОбеспечения = Новый Массив();
ДоступныеТипыОбеспечения.Добавить(ОтборПоТипуОбеспечения);
Иначе
ДоступныеТипыОбеспечения = Элементы.ОтборПоТипуОбеспечения.СписокВыбора.ВыгрузитьЗначения();
КонецЕсли;
ИнициализироватьКомпоновщикНастроекДляОтборов(ДоступныеТипыОбеспечения);
ВосстановитьНастройки();
Элементы.НадписьОсобенностиРаспределительнойСети.Заголовок
= ПриИзмененииРасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах(
РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах);
Если Параметры.Свойство("ОтборПоТипуОбеспечения") Или Элементы.ОтборПоТипуОбеспечения.Вид = ВидПоляФормы.ПолеНадписи Тогда
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов, "ТипОбеспечения", ОтборПоТипуОбеспечения, Ложь);
КонецЕсли;
Если Параметры.Свойство("ОтборПоПодразделению") Тогда
ОтборПоПодразделению = Параметры.ОтборПоПодразделению;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов, "Подразделение", ОтборПоПодразделению, Ложь);
КонецЕсли;
Если Параметры.Свойство("ОтборПоИсточникуОбеспечения") Тогда
ОтборПоИсточникуОбеспечения = Параметры.ОтборПоИсточникуОбеспечения;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов, "ИсточникОбеспечения", ОтборПоИсточникуОбеспечения,
ЭтоОтборПоГруппеНаСервере(ОтборПоИсточникуОбеспечения));
КонецЕсли;
Если Параметры.Свойство("ОтборПоЦеховымКладовым") И Параметры.ОтборПоЦеховымКладовым Тогда
ОтборПоЦеховымКладовым = Истина;
МассивПараметровВыбора = Новый Массив;
МассивПараметровВыбора.Добавить(Новый ПараметрВыбора("Отбор.ЦеховаяКладовая", Истина));
Элементы.ОтборПоСкладу.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметровВыбора);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов, "Склад.ЦеховаяКладовая", Истина, Ложь);
Иначе
Элементы.ОтборПоЦеховымКладовым.Видимость = Ложь;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов, "Склад.ЦеховаяКладовая", Неопределено, Ложь);
КонецЕсли;
УстановитьСтраницыПомощника("ШагОтборПотребностей");
Элементы.ПанельРекомендаций.Видимость = Элементы.РекомендацииЗапасы.Пометка;
ЗаполнитьСписокВыбораФильтраУровняЗапаса();
УстановитьПодсказки();
УстановитьДоступностьЭлементовФормыПоПравам();
КэшированныеЗначения = Новый Структура("НизшийПриоритет, ВысшийПриоритет",
Справочники.Приоритеты.ПолучитьНизшийПриоритет(),
Справочники.Приоритеты.ПолучитьВысшийПриоритет());
Элементы.СкладЗапасы.Видимость = ИспользоватьНесколькоСкладов;
Элементы.ПредварительныйПросмотрСклад.Видимость = ИспользоватьНесколькоСкладов;
ЗаполнитьСкладВидимость = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыНаПеремещение");
ЗаполнитьПоставщикаВидимость = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам");
ЗаполнитьПоставщикаВидимость = ЗаполнитьПоставщикаВидимость
Или ПолучитьФункциональнуюОпцию("ИспользоватьПроизводствоНаСтороне")
Или ПолучитьФункциональнуюОпцию("ИспользоватьПроизводствоНаСтороне2_5");
ЗаполнитьПодразделениеВидимость = Ложь;
Элементы.ЗаполнитьПоставщикаНаШагеЗаказы.Видимость = ЗаполнитьПоставщикаВидимость;
Элементы.ЗаполнитьСкладНаШагеЗаказы.Видимость = ЗаполнитьСкладВидимость;
Элементы.ЗаполнитьПодразделениеНаШагеЗаказы.Видимость = ЗаполнитьПодразделениеВидимость;
Элементы.ЗаполнитьПоставщикаНаШагеЗапасы.Видимость = ЗаполнитьПоставщикаВидимость;
Элементы.ЗаполнитьСкладНаШагеЗапасы.Видимость = ЗаполнитьСкладВидимость;
Элементы.ЗаполнитьПодразделениеНаШагеЗапасы.Видимость = ЗаполнитьПодразделениеВидимость;
УпорядочиваниеПоДатеДокумента = Константы.ВариантУпорядочиванияПотребностейПоЗаказамДляОбеспечения.Получить()
= Перечисления.ВариантыУпорядочиванияПотребностейПоЗаказамДляОбеспечения.ПриоритетИДатаДокумента;
Если УпорядочиваниеПоДатеДокумента Тогда
Элементы.НадписьДатаОтгрузкиДатаЗаказаНаступила.Видимость = Ложь;
Элементы.ФильтрКЗаказуНеПозднееЗаказы.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ОтразитьОтборКомпоновкиВПростыхОтборах() Тогда
Элементы.СтраницыОтборов.ТекущаяСтраница = Элементы.СтраницаПростыеОтборы;
Иначе
Элементы.СтраницыОтборов.ТекущаяСтраница = Элементы.СтраницаПроизвольныеОтборы;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Элементы.Помощник.ТекущаяСтраница = Элементы.ШагОтборПотребностей И СохранитьНастройки Тогда
Если ЗавершениеРаботы Тогда
Отказ = Истина;
ТекстПредупреждения = НСтр("ru = 'Отбор потребностей был изменен. Все изменения будут потеряны.'");
Иначе
СохранитьНастройки();
КонецЕсли;
Возврат;
КонецЕсли;
ИмеютсяНеотработанныеПозицииСпискаПотребностей = Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности
И КорзинаЗаказовИтогПолеСтрокВсего > 0;
Если ЗавершениеРаботы
И ИмеютсяНеотработанныеПозицииСпискаПотребностей
И Не ОчисткаТаблицыПотребностейОтветПолучен Тогда
Отказ = Истина;
ТекстПредупреждения = НСтр("ru = 'В списке потребностей имеются отмеченные позиции, заказы по которым не сформированы.'");
Возврат;
КонецЕсли;
Если ИмеютсяНеотработанныеПозицииСпискаПотребностей Тогда
Если Не ОчисткаТаблицыПотребностейОтветПолучен Тогда
СтандартнаяОбработка = Ложь;
Отказ = Истина;
ОчисткаТаблицыПотребностейВопрос("Закрытие");
Иначе
ОчисткаТаблицыПотребностейОтветПолучен = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
ИмяТаблицы = ?(Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы,
"Запасы", "ЗаказыКОбеспечению");
Если ИсточникВыбора.ИмяФормы = "Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораУпаковкиЕдиницы" Тогда
Поставка = Элементы[ИмяТаблицы].ТекущиеДанные;
ЗаполнитьЗаписатьУпаковкуПоДеревуИндексов(Поставка.ИДИндекса, ВыбранноеЗначение);
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, ИмяТаблицы = "Запасы");
ОтобразитьРасчитанноеОкругление(Поставка, ИмяТаблицы = "Запасы");
РассчитатьИтоги();
Иначе
Если Не ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
Возврат;
КонецЕсли;
Если Элементы.Помощник.ТекущаяСтраница = Элементы.ШагРедактированиеЗаказов Тогда
ПредварительныйПросмотрПараметрыПоставкиОптимальныеОбработкаВыбораНаСервере(ВыбранноеЗначение.ПараметрыПоставкиОптимальные);
Строки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Строки);
Возврат;
КонецЕсли;
Если ВыбранноеЗначение.Свойство("ПараметрыПоставкиОптимальные") Тогда
ТипИсточника = ТипЗнч(ВыбранноеЗначение.ПараметрыПоставкиОптимальные.ИсточникОбеспечения);
Для каждого Идентификатор Из Элементы[ИмяТаблицы].ВыделенныеСтроки Цикл
Поставка = Объект[ИмяТаблицы].НайтиПоИдентификатору(Идентификатор);
Если ТипИсточника = Тип("СправочникСсылка.Партнеры")
И Поставка.ТипОбеспечения <> ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Покупка")
И Поставка.ТипОбеспечения <> ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.ПроизводствоНаСтороне")
Или ТипИсточника = Тип("СправочникСсылка.Склады")
И Поставка.ТипОбеспечения <> ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Перемещение")
Или ТипИсточника = Тип("СправочникСсылка.СтруктураПредприятия")
И Поставка.ТипОбеспечения <> ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Производство")
Или Поставка.ИсточникОбеспеченияТолькоПросмотр Тогда
Продолжить;
КонецЕсли;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
УпаковкаДоИзменения = Поставка.УпаковкаЗаказа;
ЗаполнитьЗначенияСвойств(Поставка, ВыбранноеЗначение.ПараметрыПоставкиОптимальные);
Если Не ЗначениеЗаполнено(Поставка.УпаковкаЗаказа) Тогда
Поставка.УпаковкаЗаказа = УпаковкаДоИзменения;
КонецЕсли;
ЗаполнитьЗаписатьУпаковкуПоДеревуИндексов(Поставка.ИДИндекса, ВыбранноеЗначение.ПараметрыПоставкиОптимальные.УпаковкаЗаказа, Истина);
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, ИмяТаблицы = "Запасы");
ОтобразитьРасчитанноеОкругление(Поставка, ИмяТаблицы = "Запасы");
РассчитатьИтоги();
КонецЦикла;
ИначеЕсли ВыбранноеЗначение.Свойство("КодУровняЗапаса") Тогда
ФильтрУровеньЗапаса = УровеньЗапасаПоКоду(ВыбранноеЗначение.КодУровняЗапаса);
ОтборЗапасыНаСервере();
ИначеЕсли ВыбранноеЗначение.Свойство("СпособОбеспечения") Тогда
Если Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы Тогда
Если Не ЗначениеЗаполнено(ВыбранноеЗначение.СпособОбеспечения) Тогда
РассчитатьСтрокуТаблицыЗапасыНаКлиенте(Элементы.Запасы.ТекущиеДанные.СпособОбеспечения);
Иначе
РассчитатьСтрокуТаблицыЗапасыНаКлиенте(ВыбранноеЗначение.СпособОбеспечения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ВключенаОбработкаОповещенийЗаписиДокументов
И ( ИмяСобытия = "Запись_ЗаказНаПеремещение"
Или ИмяСобытия = "Запись_ЗаказНаСборку"
Или ИмяСобытия = "Запись_ЗаказМатериаловВПроизводство"
Или ИмяСобытия = "Запись_ЗаказПереработчику"
Или ИмяСобытия = "Запись_ЗаказПереработчику2_5"
Или ИмяСобытия = "Запись_ЗаказПоставщику") Тогда
Ссылка = Источник;
ОбновитьРеквизитыТаблицыДокументов(Ссылка);
КонецЕсли;
Если ИмяСобытия = "Запись_СпособОбеспеченияПотребностей" Тогда
СпособыОбеспеченияПриИзмененииСпособаОбеспечения();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
#Область СерверныеОтборы
&НаКлиенте
Процедура ОтборПоСкладуПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Склад", ОтборПоСкладу, ЭтоОтборПоГруппе(ОтборПоСкладу));
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоПодразделениюПолучателюПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"ПодразделениеПолучатель", ОтборПоПодразделениюПолучателю, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоНазначениюПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Назначение", ОтборПоНазначению, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоНаправлениюДеятельностиПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"НаправлениеДеятельности", ОтборПоНаправлениюДеятельности, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоСегментуПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"СегментНоменклатуры", ОтборПоСегменту, ЭтоОтборПоГруппе(ОтборПоСегменту));
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоНоменклатуреПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Номенклатура", ОтборПоНоменклатуре, ЭтоОтборПоГруппе(ОтборПоНоменклатуре));
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоМаркеПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Номенклатура.Марка", ОтборПоМарке, ЭтоОтборПоГруппе(ОтборПоМарке));
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоТоварнойКатегорииПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Номенклатура.ТоварнаяКатегория", ОтборПоТоварнойКатегории, ЭтоОтборПоГруппе(ОтборПоТоварнойКатегории));
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоПодразделениюПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"Подразделение", ОтборПоПодразделению, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоТипуОбеспеченияПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"ТипОбеспечения", ОтборПоТипуОбеспечения, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоИсточникуОбеспеченияПриИзменении(Элемент)
СохранитьНастройки = Истина;
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроекДляОтборов,
"ИсточникОбеспечения", ОтборПоИсточникуОбеспечения, ЭтоОтборПоГруппе(ОтборПоИсточникуОбеспечения));
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПроизвольныеОтборыНажатие(Элемент)
Элементы.СтраницыОтборов.ТекущаяСтраница = Элементы.СтраницаПроизвольныеОтборы;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПростыеОтборыНажатие(Элемент)
Если ОтразитьОтборКомпоновкиВПростыхОтборах() Тогда
Элементы.СтраницыОтборов.ТекущаяСтраница = Элементы.СтраницаПростыеОтборы;
Иначе
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Установленные отборы невозможно преобразовать к виду простых отборов.'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КлиентскиеФильтры
&НаКлиенте
Процедура РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладахПриИзменении(Элемент)
СохранитьНастройки = Истина;
Элементы.НадписьОсобенностиРаспределительнойСети.Заголовок
= ПриИзмененииРасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах(
РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрОтметкаЗапасыПриИзменении(Элемент)
ОтборЗапасыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрУровеньЗапасаПриИзменении(Элемент)
ОтборЗапасыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрУровеньЗапасаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура("КодУровняЗапаса", КодУровняЗапаса(ФильтрУровеньЗапаса));
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораУровняЗапаса",
ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрУровеньЗапасаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКЗаказуНеПозднееЗапасыПриИзменении(Элемент)
ОтборЗапасыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКЗаказуНеПозднееЗаказыПриИзменении(Элемент)
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрОтметкаЗаказыПриИзменении(Элемент)
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрПриоритетПриИзменении(Элемент)
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеРанееПриИзменении(Элемент)
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеПозднееПриИзменении(Элемент)
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеРанееОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеРанее(СтрокаВДату(Текст), СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеПозднееОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеПозднее(СтрокаВДату(Текст), СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеПозднееОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеПозднее(ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрКОтгрузкеНеРанееОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеРанее(ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ФильтрНеобеспеченныеПриИзменении(Элемент)
ФильтрНеобеспеченныеПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ПанельРекомендаций
&НаКлиенте
Процедура МинимальныйЗапас1Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура МаксимальныйЗаказ1Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура МинимальныйЗапас2Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура МаксимальныйЗаказ2Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СрокПоставки3Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСпособОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура ОбеспечиваемыйПериод3Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСпособОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СреднедневноеПотребление3Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СтраховойЗапас3Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СрокПоставки43Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСпособОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура ОбеспечиваемыйПериод43Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСпособОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СреднедневноеПотребление4Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
&НаКлиенте
Процедура СтраховойЗапас4Нажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПроизвольныеОтборыЭлементы
&НаКлиенте
Процедура ПроизвольныеОтборыЭлементыПриИзменении(Элемент)
СохранитьНастройки = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСпособыОбеспечения
&НаКлиенте
Процедура СпособыОбеспеченияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элементы.СпособыОбеспечения.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Поле = Элементы.СпособыОбеспеченияСпособОбеспечения Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.СпособОбеспечения) Тогда
СтандартнаяОбработка = Ложь;
ИмяФормыОткрываемойФормы = "Справочник.СпособыОбеспеченияПотребностей.ФормаОбъекта";
ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.СпособОбеспечения);
ОткрытьФорму(ИмяФормыОткрываемойФормы,
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор,
,
,
,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпособыОбеспеченияКЗаказуТоварыПриИзменении(Элемент)
СтрокаТаблицы = Элементы.СпособыОбеспечения.ТекущиеДанные;
СтрокаТаблицы.СтрокаИзменена = Истина;
ОбеспечениеВДокументахКлиент.ЗаполнитьДатыНаВторомШагеОбеспечениеПотребностей(СтрокаТаблицы);
КонецПроцедуры
&НаКлиенте
Процедура СпособыОбеспеченияДатаПоставкиПриИзменении(Элемент)
СтрокаТаблицы = Элементы.СпособыОбеспечения.ТекущиеДанные;
СтрокаТаблицы.СтрокаИзменена = Истина;
КонецПроцедуры
&НаКлиенте
Процедура СпособыОбеспеченияГраницаПериодаОбеспеченияПриИзменении(Элемент)
СтрокаТаблицы = Элементы.СпособыОбеспечения.ТекущиеДанные;
СтрокаТаблицы.СтрокаИзменена = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗапасы
&НаКлиенте
Процедура ЗапасыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Форма.Элемент.Запасы.Выбор");
Если Элемент.ТекущийЭлемент = Элементы.МетодОбеспечения Тогда
СтандартнаяОбработка = Ложь;
ОткрытьМетодОбеспечения("Запасы");
ИначеЕсли Поле = Элементы.НоменклатураЗапасы Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.Номенклатура);
ИначеЕсли Поле = Элементы.СкладЗапасы Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.Склад);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапасыПриАктивизацииСтроки(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.Запасы.ПриАктивизацииСтроки");
Если Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы Тогда
ПодключитьОбработчикОжидания("ЗапасыПриАктивизацииСтрокиОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапасыПриАктивизацииЯчейки(Элемент)
СтрокаЗапасы = Элементы.Запасы.ТекущиеДанные;
Если Элемент.ТекущийЭлемент = Элементы.СпособОбеспеченияЗапасы И СтрокаЗапасы <> Неопределено Тогда
Если СтрокаЗапасы.ПеремещениеРазрешено Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияСПеремещением;
Иначе
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияБезПеремещения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтметкаЗапасыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.ОтметкаЗапасы.ПриИзменении");
Поставка = Элементы.Запасы.ТекущиеДанные;
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Истина);
ОтобразитьРасчитанноеОкругление(Поставка, Истина);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура КЗаказуЗапасыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.КЗаказуЗапасы.ПриИзменении");
Поставка = Элементы.Запасы.ТекущиеДанные;
Поставка.Отметка = Поставка.КЗаказу > 0;
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Истина);
ОтобразитьРасчитанноеОкругление(Поставка, Истина);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗапасыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.СпособОбеспеченияЗапасы.ПриИзменении");
Поставка = Элементы.Запасы.ТекущиеДанные;
РассчитатьСтрокуТаблицыЗапасыНаКлиенте(Поставка.СпособОбеспечения);
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Истина);
ОтобразитьРасчитанноеОкругление(Поставка, Истина);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗапасыОчистка(Элемент, СтандартнаяОбработка)
Поставка = Элементы.Запасы.ТекущиеДанные;
СпособОбеспеченияОчистка(Поставка, Ложь);
СпособОбеспеченияЗапасыПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗапасыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Поставка = Элементы.Запасы.ТекущиеДанные;
Поставка.Отметка = Ложь;
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗапасыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Текст = "" Тогда
Поставка = Элементы.Запасы.ТекущиеДанные;
СпособОбеспеченияОчистка(Поставка, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗапасыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Форма.Элемент.ИсточникОбеспеченияЗапасы.НачалоВыбора");
Поставка = Элементы.Запасы.ТекущиеДанные;
ПараметрыФормы = Новый Структура("Склад, Номенклатура, Характеристика, ЭтоРабота, ТипОбеспечения");
ЗаполнитьЗначенияСвойств(ПараметрыФормы, Поставка);
ПараметрыФормы.ЭтоРабота = Ложь;
СтандартнаяОбработка = Ложь;
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораИсточникаОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗапасыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ИсточникОбеспечения = ТекстНеЗаполнено;
ОчиститьУсловияЗакупок(Поставка);
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗапасыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
ОчиститьУсловияЗакупок(Поставка);
Поставка.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(ВыбранноеЗначение, ТекстНеЗаполнено);
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗапасыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если Текст = "" Тогда
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
ОчиститьУсловияЗакупок(Поставка);
Поставка.ИсточникОбеспечения = ТекстНеЗаполнено;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗапасыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ДатаПоставки = '00010101';
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗапасыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ДатаПоставки = ВыбранноеЗначение;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗапасыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДатаПоставкиДоИзменения = Элементы.Запасы.ТекущиеДанные.ДатаПоставки;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗапасыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.ДатаПоставкиЗапасы.ПриИзменении");
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
НоваяДатаПоставки = Поставка.ДатаПоставки;
Поставка.ДатаПоставки = ДатаПоставкиДоИзменения;
РассчитатьИтоги();
Поставка.ДатаПоставки = НоваяДатаПоставки;
КонецЕсли;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗаказыКОбеспечению
&НаКлиенте
Процедура ЗаказыКОбеспечениюПриАктивизацииЯчейки(Элемент)
СтрокаЗаказы = Элементы.ЗаказыКобеспечению.ТекущиеДанные;
Если Элемент.ТекущийЭлемент = Элементы.СпособОбеспеченияЗаказы И СтрокаЗаказы <> Неопределено Тогда
Если СтрокаЗаказы.ЭтоРабота Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияРабот;
ИначеЕсли СтрокаЗаказы.ПеремещениеРазрешено Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияСПеремещением;
Иначе
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияБезПеремещения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаказыКОбеспечениюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле = Элементы.Заказ Тогда
Если Элемент.ТекущиеДанные.Заказ = Неопределено Тогда
Возврат;
КонецЕсли;
ПоказатьЗначение(,Элемент.ТекущиеДанные.Заказ);
ИначеЕсли Поле = Элементы.НоменклатураЗаказы Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.Номенклатура);
ИначеЕсли Поле = Элементы.Получатель И ЗначениеЗаполнено(Элемент.ТекущиеДанные.Получатель) Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.Получатель);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаказыКОбеспечениюПриАктивизацииСтроки(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.ЗаказыКОбеспечению.ПриАктивизацииСтроки");
Если Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗаказы Тогда
ПодключитьОбработчикОжидания("ЗаказыПриАктивизацииСтрокиОбработчикОжидания", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтметкаЗаказыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.ОтметкаЗаказы.ПриИзменении");
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Ложь);
ОтобразитьРасчитанноеОкругление(Поставка, Ложь);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура КЗаказуЗаказыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.КЗаказуЗаказы.ПриИзменении");
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Поставка.Отметка = Поставка.КЗаказу > 0;
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Ложь);
ОтобразитьРасчитанноеОкругление(Поставка, Ложь);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗаказыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.СпособОбеспеченияЗаказы.ПриИзменении");
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
РассчитатьСтрокуТаблицыЗаказыКОбеспечениюНаКлиенте(Поставка.СпособОбеспечения);
СоответствиеСтрок = ПересчитатьОкруглениеКлиент(Поставка, Ложь);
ОтобразитьРасчитанноеОкругление(Поставка, Ложь);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗаказыОчистка(Элемент, СтандартнаяОбработка)
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
СпособОбеспеченияОчистка(Поставка, Истина);
СпособОбеспеченияЗаказыПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗаказыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Поставка.Отметка = Ложь;
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияЗаказыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
Если Текст = "" Тогда
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
СпособОбеспеченияОчистка(Поставка, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗаказыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Форма.Элемент.ИсточникОбеспеченияЗаказы.НачалоВыбора");
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
ПараметрыФормы = Новый Структура("Склад, Номенклатура, Характеристика, ЭтоРабота, ТипОбеспечения");
ЗаполнитьЗначенияСвойств(ПараметрыФормы, Поставка);
СтандартнаяОбработка = Ложь;
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораИсточникаОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗаказыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ИсточникОбеспечения = ТекстНеЗаполнено;
ОчиститьУсловияЗакупок(Поставка);
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗаказыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
ОчиститьУсловияЗакупок(Поставка);
Поставка.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(ВыбранноеЗначение, ТекстНеЗаполнено);
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОбеспеченияЗаказыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если Текст = "" Тогда
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
ОчиститьУсловияЗакупок(Поставка);
Поставка.ИсточникОбеспечения = ТекстНеЗаполнено;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗаказыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ДатаПоставки = '00010101';
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗаказыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ДатаПоставки = ВыбранноеЗначение;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗаказыОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДатаПоставкиДоИзменения = Элементы.ЗаказыКОбеспечению.ТекущиеДанные.ДатаПоставки;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПоставкиЗаказыПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Элемент.ДатаПоставкиЗаказы.ПриИзменении");
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
НоваяДатаПоставки = Поставка.ДатаПоставки;
Поставка.ДатаПоставки = ДатаПоставкиДоИзменения;
РассчитатьИтоги();
Поставка.ДатаПоставки = НоваяДатаПоставки;
КонецЕсли;
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСформированныеЗаказы
&НаКлиенте
Процедура ДокументыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтрокаДокумента = Элементы.СформированныеЗаказы.ТекущиеДанные;
ДокументСсылка = СтрокаДокумента.Документ;
ПоказатьЗначение(Неопределено, ДокументСсылка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПредварительныйПросмотр
&НаКлиенте
Процедура ПредварительныйПросмотрСкладОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПредварительныйПросмотрСкладОбработкаВыбораНаСервере(ВыбранноеЗначение);
Строки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Строки);
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрСоглашениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПредварительныйПросмотрСоглашениеОбработкаВыбораНаСервере(ВыбранноеЗначение);
Строки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Строки);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьМинимальнуюСуммуЗаказа(СпособОбеспечения)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СпособОбеспечения, "МинимальнаяСуммаЗаказа");
КонецФункции
&НаКлиенте
Процедура ПредварительныйПросмотрСпособОбеспеченияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтрокаЗаказа = Элемент.Родитель.ТекущиеДанные;
ПредварительныйПросмотрСпособОбеспеченияОбработкаВыбораНаСервере(ВыбранноеЗначение);
Строки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Строки);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьИсточникИСоглашение(СпособОбеспечения)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СпособОбеспечения, "ИсточникОбеспеченияПотребностей, Соглашение, ТипОбеспечения");
КонецФункции
&НаКлиенте
Процедура ПредварительныйПросмотрИсточникОбеспеченияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Поставка = Элементы.ПредварительныйПросмотр.ТекущиеДанные;
ПараметрыФормы = Новый Структура("Склад, Номенклатура, Характеристика, ЭтоРабота, ТипОбеспечения");
ЗаполнитьЗначенияСвойств(ПараметрыФормы, Поставка);
ПараметрыФормы.ЭтоРабота = Ложь;
СтандартнаяОбработка = Ложь;
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораИсточникаОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрПриАктивизацииСтроки(Элемент)
СформироватьНадписьПредупреждения(Элемент);
СтрокаПредварительныйПросмотр = Элементы.ПредварительныйПросмотр.ТекущиеДанные;
Если СтрокаПредварительныйПросмотр <> Неопределено Тогда
Если СтрокаПредварительныйПросмотр.ПеремещениеРазрешено Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияСПеремещением;
Иначе
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияБезПеремещения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрПриАктивизацииЯчейки(Элемент)
СтрокаПредварительныйПросмотр= Элементы.ПредварительныйПросмотр.ТекущиеДанные;
Если Элемент.ТекущийЭлемент = Элементы.ПредварительныйПросмотрСпособОбеспечения И СтрокаПредварительныйПросмотр <> Неопределено Тогда
Если СтрокаПредварительныйПросмотр.ЭтоРабота Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияРабот;
ИначеЕсли СтрокаПредварительныйПросмотр.ПеремещениеРазрешено Тогда
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияСПеремещением;
Иначе
ДоступныеТипыОбеспеченияДляВыбора = ДоступныеТипыОбеспеченияБезПеремещения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ПредварительныйПросмотрКЗаказу"
ИЛИ Поле.Имя = "ПредварительныйПросмотрУпаковкаЗаказа" Тогда
СтандартнаяОбработка = Ложь;
Если Элемент.ТекущиеДанные.УровеньВДереве = 0 Тогда
Элементы.ПредварительныйПросмотр.Развернуть(ВыбраннаяСтрока);
Возврат;
КонецЕсли;
Ключ = "СпособОбеспечения,ИсточникОбеспечения,Соглашение,Склад,Номенклатура,Характеристика";
ПараметрыПоиска = Новый Структура(Ключ);
ЗаполнитьЗначенияСвойств(ПараметрыПоиска, Элемент.ТекущиеДанные);
НайденныеЗапасы = Объект.Запасы.НайтиСтроки(ПараметрыПоиска);
НайденныеЗаказы = Объект.ЗаказыКОбеспечению.НайтиСтроки(ПараметрыПоиска);
Строки = Новый Массив;
Для Каждого Эл Из НайденныеЗапасы Цикл
Если НЕ Эл.Отметка Тогда
Продолжить;
КонецЕсли;
Структура = ПодготовитьСтруктуруСтроки();
ЗаполнитьЗначенияСвойств(Структура, Эл);
Структура.Вставить("Потребность", Эл.МаксимальныйЗапас);
Структура.Вставить("ЭтоЗапас", Истина);
Строки.Добавить(Структура);
КонецЦикла;
Для Каждого Эл Из НайденныеЗаказы Цикл
Если НЕ Эл.Отметка Тогда
Продолжить;
КонецЕсли;
Структура = ПодготовитьСтруктуруСтроки();
ЗаполнитьЗначенияСвойств(Структура, Эл);
Структура.Вставить("Потребность", Эл.Требуется);
Структура.Вставить("ЭтоЗапас", Ложь);
Строки.Добавить(Структура);
КонецЦикла;
ПараметрыДляФормыРедактирования = Новый Структура;
ПараметрыДляФормыРедактирования.Вставить("Строки", Строки);
ПараметрыДляФормыРедактирования.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ПараметрыДляФормыРедактирования.Вставить("Количество", Элемент.ТекущиеДанные.КЗаказу);
ПараметрыДляФормыРедактирования.Вставить("ТипОбеспечения", Элемент.ТекущиеДанные.ТипОбеспечения);
ПараметрыДляФормыРедактирования.Вставить("МинимальнаяПартияПоставки", Элемент.ТекущиеДанные.МинимальнаяПартияПоставки);
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьРедактированиеКоличества", ЭтотОбъект);
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаРедактированияКоличества", ПараметрыДляФормыРедактирования,,,,,ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ИначеЕсли Поле.Имя = "ПредварительныйПросмотрПредупреждение" Тогда
Если Элемент.ТекущиеДанные.Предупреждение Тогда
ПоказатьСкрытьПредупреждение();
КонецЕсли;
ИначеЕсли Поле = Элементы.ПредварительныйПросмотрНоменклатура Тогда
ПоказатьЗначение(,Элемент.ТекущиеДанные.Номенклатура);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Назад(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Команда.Назад");
ОчиститьСообщения();
Если Элементы.Помощник.ТекущаяСтраница = Элементы.ШагСформированныеЗаказы Тогда
Если ТаблицаДокументы.Количество() > 0 Тогда
Кнопки = Новый СписокЗначений();
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Пометить на удаление сформированные заказы'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ТекстВопроса = НСтр("ru = 'При переходе назад сформированные заказы будут помечены на удаление.'");
ПоказатьВопрос(Новый ОписаниеОповещения("НазадЗавершение", ЭтотОбъект), ТекстВопроса, Кнопки);
Возврат;
КонецЕсли;
НазадФрагмент();
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагРедактированиеЗаказов Тогда
Если Объект.ЗаказыКОбеспечению.Количество() > 0 Тогда
УстановитьСтраницыПомощника("ШагЗаказы");
Иначе
УстановитьСтраницыПомощника("ШагЗапасы");
КонецЕсли;
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности И
Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗаказы Тогда
ПолучитьПодтверждениеОчисткиТаблицыЗаказыКОбеспечению(Новый ОписаниеОповещения("НазадПослеПодтверждения", ЭтотОбъект));
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности Тогда
Если КорзинаЗаказовИтогПолеСтрокВсего > 0 Тогда
ОчисткаТаблицыПотребностейВопрос("ШагНазад");
Иначе
ОчиститьСообщения();
УстановитьСтраницыПомощника("ШагНастройкаСпособовОбеспечения");
КонецЕсли;
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагНастройкаСпособовОбеспечения Тогда
ОчиститьСообщения();
УстановитьСтраницыПомощника("ШагОтборПотребностей");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазадПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ИзменитьОтметкуНаВсеСтроки("ЗаказыКОбеспечению", Ложь);
Объект.ЗаказыКОбеспечению.Очистить();
Для Каждого Строка Из Объект.Запасы Цикл
Если Строка.Отметка Тогда
СоответствиеСтрок = Новый Соответствие();
СоответствиеСтрок.Вставить(Строка, Истина);
ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки);
КонецЕсли;
КонецЦикла;
Если Объект.Запасы.Количество() = 0 Тогда
УстановитьСтраницыПомощника("ШагНастройкаСпособовОбеспечения");
ОчиститьДеревоИндексов(Истина);
Иначе
УстановитьСтраницыПомощника("ШагЗапасы");
ОчиститьДеревоИндексов(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазадЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
НазадФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура НазадФрагмент()
ОчиститьСообщения();
ДлительнаяОперация = УдалениеЗаказовВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("УдалениеЗаказовВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура Далее(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Команда.Далее");
ОчиститьСообщения();
Если Элементы.Помощник.ТекущаяСтраница = Элементы.ШагОтборПотребностей Тогда
ДлительнаяОперация = ПолучениеТаблицыСпособовОбеспеченияВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПолучениеТаблицыСпособовОбеспеченияВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагНастройкаСпособовОбеспечения И ЕстьШагЗапасы Тогда
Если ТаблицаСпособовЗаполненаВерно() Тогда
ДлительнаяОперация = ПолучениеТаблицыЗапасовВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПолучениеТаблицыЗапасовВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецЕсли;
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагНастройкаСпособовОбеспечения И Не ЕстьШагЗапасы Тогда
Если ТаблицаСпособовЗаполненаВерно() Тогда
ДлительнаяОперация = ПолучениеТаблицыЗаказовКОбеспечениюВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПолучениеТаблицыЗаказовКОбеспечениюВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецЕсли;
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности
И Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы Тогда
ДлительнаяОперация = ПолучениеТаблицыЗаказовКОбеспечениюВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПолучениеТаблицыЗаказовКОбеспечениюВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности
И Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗаказы Тогда
ПредварительныйПросмотр.ПолучитьЭлементы().Очистить();
ДлительнаяОперация = ФормированиеДереваЗаказовВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПереходКРедактированиюЗаказовЗавершение", ЭтаФорма),
ПараметрыОжидания);
ИначеЕсли Элементы.Помощник.ТекущаяСтраница = Элементы.ШагРедактированиеЗаказов Тогда
КШагуДокументыНаКлиенте();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьСДругимиОтборами(Команда)
ОчиститьСообщения();
ПродолжитьСДругимиОтборамиНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НастроитьПоддержаниеЗапаса(Команда)
ПараметрыФормыОтбор = Новый Структура("Склад", ОтборПоСкладу);
ПараметрыФормы = Новый Структура("Отбор, Источник", ПараметрыФормыОтбор, "ОбеспечениеПотребностей");
ОткрытьФорму("Обработка.НастройкаПоддержанияЗапасов.Форма.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьРасчетСтатистикиПотребления(Команда)
ОткрытьФорму("Обработка.НастройкаПоддержанияЗапасов.Форма.НастройкаПараметровРасчетаСреднедневногоПотребления",, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьФлажкиВТаблицеСпособовОбеспечения(Команда)
ИзменитьФлажкиВТаблицеСпособовОбеспечения(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьФлажкиВТаблицеСпособовОбеспечения(Команда)
ИзменитьФлажкиВТаблицеСпособовОбеспечения(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьКЗаказуТоварыДостигшиеТочкиЗаказаДляВыделенныхСтрок(Команда)
ЗаполнитьКЗаказуТовары(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьПанельРекомендаций(Команда)
Элементы.РекомендацииЗапасы.Пометка = Не Элементы.РекомендацииЗапасы.Пометка;
Элементы.РекомендацииЗаказы.Пометка = Не Элементы.РекомендацииЗаказы.Пометка;
Элементы.ПанельРекомендаций.Видимость = Элементы.РекомендацииЗапасы.Пометка;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьКЗаказуТоварыВсеДляВыделенныхСтрок(Команда)
ЗаполнитьКЗаказуТовары(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьКЗаказуЗапасы(Команда)
ИзменитьОтметку("Запасы", Истина);
ТекущаяСтрока = Элементы.Запасы.ТекущиеДанные;
ОтобразитьРасчитанноеОкругление(ТекущаяСтрока, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкуЗапасы(Команда)
ИзменитьОтметку("Запасы", Ложь);
ТекущаяСтрока = Элементы.Запасы.ТекущиеДанные;
ОтобразитьРасчитанноеОкругление(ТекущаяСтрока, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьКЗаказуЗаказы(Команда)
ИзменитьОтметку("ЗаказыКОбеспечению", Истина);
ТекущаяСтрока = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
ОтобразитьРасчитанноеОкругление(ТекущаяСтрока, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкуЗаказы(Команда)
ИзменитьОтметку("ЗаказыКОбеспечению", Ложь);
ТекущаяСтрока = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
ОтобразитьРасчитанноеОкругление(ТекущаяСтрока, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоставщика(Команда)
МассивТипов = Новый Массив();
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Покупка"));
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.ПроизводствоНаСтороне"));
ЗаполнитьИсточникОбеспечения(МассивТипов);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСклад(Команда)
МассивТипов = Новый Массив();
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Перемещение"));
ЗаполнитьИсточникОбеспечения(МассивТипов);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПодразделение(Команда)
МассивТипов = Новый Массив();
МассивТипов.Добавить(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Производство"));
ЗаполнитьИсточникОбеспечения(МассивТипов);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДатуПоставки(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Форма.Команда.ЗаполнитьДатуПоставки");
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьДатуПоставкиПослеВводаЗначения", ЭтотОбъект);
ДатаПоставки = ОбщегоНазначенияКлиент.ДатаСеанса();
ПоказатьВводДаты(ОписаниеОповещения, ДатаПоставки, НСтр("ru = 'Введите дату поставки'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДатуПоставкиПослеВводаЗначения(Дата, ДополнительныеПараметры) Экспорт
Если Дата = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяТаблица = ?(Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы,
"Запасы", "ЗаказыКОбеспечению");
Для каждого Идентификатор Из Элементы[ТекущаяТаблица].ВыделенныеСтроки Цикл
Поставка = Объект[ТекущаяТаблица].НайтиПоИдентификатору(Идентификатор);
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Поставка.ДатаПоставки = Дата;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ИнформационнаяСтрокаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
Если НавигационнаяСсылка = "ОткрытьФормуВыбораУпаковки" Тогда
СтандартнаяОбработка = Ложь;
Если Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы Тогда
ВыбратьУпаковкуКлиент("Запасы");
Иначе
ВыбратьУпаковкуКлиент("ЗаказыКОбеспечению");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСформированныеЗаказы(Команда)
ОбновитьЗначенияРеквизитовТаблицыДокументов();
КонецПроцедуры
&НаКлиенте
Процедура ЗаказПоставщикуПодтвержден(Команда)
ОчиститьСообщения();
МассивСсылок = Новый Массив();
Для Каждого Идентификатор Из Элементы.СформированныеЗаказы.ВыделенныеСтроки Цикл
СтрокаСписка = ТаблицаДокументы.НайтиПоИдентификатору(Идентификатор);
Если ТипЗнч(СтрокаСписка.Документ) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
МассивСсылок.Добавить(Новый Структура("Ссылка, ИдентификаторСтроки", СтрокаСписка.Документ, Идентификатор));
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(МассивСсылок) Тогда
УстановитьСтатусНаСервере(МассивСсылок, "Подтвержден");
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Невозможно установить статус. Не выбраны заказы поставщику'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаказПереработчикуКИсполнению(Команда)
ОчиститьСообщения();
МассивСсылок = Новый Массив();
Для Каждого Идентификатор Из Элементы.СформированныеЗаказы.ВыделенныеСтроки Цикл
СтрокаСписка = ТаблицаДокументы.НайтиПоИдентификатору(Идентификатор);
Если ТипЗнч(СтрокаСписка.Документ) = Тип("ДокументСсылка.ЗаказПереработчику2_5")
Или ТипЗнч(СтрокаСписка.Документ) = Тип("ДокументСсылка.ЗаказПереработчику")
Или Ложь Тогда
МассивСсылок.Добавить(Новый Структура("Ссылка, ИдентификаторСтроки", СтрокаСписка.Документ, Идентификатор));
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(МассивСсылок) Тогда
УстановитьСтатусНаСервере(МассивСсылок, "КИсполнению");
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru='Невозможно установить статус. Не выбраны заказы переработчику'"));
КонецЕсли;
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЗаказНаПроизводствоКПроизводству(Команда)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьСтроки(Команда)
КоллекцияЭлементовДерева=ПредварительныйПросмотр.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ПредварительныйПросмотр.Развернуть(ИдентификаторСтроки);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СвернутьСтроки(Команда)
КоллекцияЭлементовДерева=ПредварительныйПросмотр.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ПредварительныйПросмотр.Свернуть(ИдентификаторСтроки);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьПредупрежденияНажатие(Элемент)
ПоказатьСкрытьПредупреждение();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьСклад(Команда)
ОткрытьФорму(
"Справочник.Склады.Форма.ФормаВыбора",
Новый Структура("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы),
ЭтотОбъект,
,
,
,
Новый ОписаниеОповещения("ВыборСкладаЗавершение", ЭтотОбъект),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьСпособОбеспечения(Команда)
ОткрытьФорму(
"Справочник.СпособыОбеспеченияПотребностей.Форма.ФормаВыбора",,
ЭтотОбъект,,,, Новый ОписаниеОповещения("ВыборСпособаОбеспеченияЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ШагНастройкаСпособовОбеспечения
&НаСервере
Функция ПолучениеТаблицыСпособовОбеспеченияВФоне()
Если СохранитьНастройки Тогда
СохранитьНастройки();
КонецЕсли;
ПараметрыПроцедуры = Новый Структура();
ПараметрыПроцедуры.Вставить("Настройки", КомпоновщикНастроекДляОтборов.ПолучитьНастройки());
ПараметрыПроцедуры.Вставить("ТоварыПоддерживаемогоЗапаса", ЕстьШагЗапасы);
ПараметрыПроцедуры.Вставить("СпособОбеспечения", Неопределено);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов: получение таблицы способов обеспечения'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.ТаблицаСпособовОбеспечения",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ПолучениеТаблицыСпособовОбеспеченияВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
ИначеЕсли Не ДалееКШагуНастройкаСпособовОбеспеченияНаСервере(Результат) Тогда
СообщитьОбОтсутствииПотребностей();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучениеТаблицыЗапасовВФоне()
ТаблицаСпособыОбеспечения = Объект.СпособыОбеспечения.Выгрузить(Новый Структура("Отметка", Истина));
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ТипОтбора", "ОтборыКомпоновки");
ПараметрыПроцедуры.Вставить("Отбор", КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки);
ПараметрыПроцедуры.Вставить("ТаблицаСпособовОбеспечения", ТаблицаСпособыОбеспечения);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов: получение таблицы запасов'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.ТаблицаЗапасы",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ПолучениеТаблицыЗапасовВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
ИначеЕсли Не ДалееКШагуЗапасы(Результат) Тогда
ДлительнаяОперация = ПолучениеТаблицыЗаказовКОбеспечениюВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПолучениеТаблицыЗаказовКОбеспечениюВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучениеТаблицыЗаказовКОбеспечениюВФоне()
Отбор = Новый Структура("Отметка", Истина);
ТаблицаЗапасы = Объект.Запасы.Выгрузить(Отбор, "Номенклатура,Характеристика,Склад,КЗаказу,Отметка,ИДИндекса");
ТаблицаСпособыОбеспечения = Объект.СпособыОбеспечения.Выгрузить(Отбор);
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ТипОтбора", "ОтборыКомпоновки");
ПараметрыПроцедуры.Вставить("Отбор", КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки);
ПараметрыПроцедуры.Вставить("ТаблицаСпособовОбеспечения", ТаблицаСпособыОбеспечения);
ПараметрыПроцедуры.Вставить("ТаблицаЗапасы", ТаблицаЗапасы);
ПараметрыПроцедуры.Вставить("РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах",
РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов: получение таблицы заказов к обеспечению'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.ТаблицаПотребностейПоЗаказамИОстатков",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ПолучениеТаблицыЗаказовКОбеспечениюВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
ИначеЕсли Не ДалееКШагуЗаказы(Результат) Тогда
ПереходКРедактированиюЗаказовЗавершение(Результат, ДополнительныеПараметры);
ПредварительныйПросмотр.ПолучитьЭлементы().Очистить();
ДлительнаяОперация = ФормированиеДереваЗаказовВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПереходКРедактированиюЗаказовЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ФормированиеДереваЗаказовВФоне()
ДеревоЗаказов = РеквизитФормыВЗначение("ПредварительныйПросмотр");
ПараметрыПроцедуры = Новый Структура();
ПараметрыПроцедуры.Вставить("ДеревоЗаказов", ДеревоЗаказов);
ПараметрыПроцедуры.Вставить("Запасы", Объект.Запасы.Выгрузить(,"ИсточникОбеспечения, Склад, СпособОбеспечения,
|МаксимальныйЗапас, МинимальнаяПартияПоставки, ПеремещениеРазрешено,
|Соглашение, Номенклатура, Характеристика, УпаковкаЗаказа, КЗаказу,
|ЦенаВВалютеСоглашения, СуммаВалютаСоглашения, ИсточникОбеспеченияТолькоПросмотр,
|Отметка, Округлено, ЕдиницаИзмерения, ВалютаСоглашения, Вес,
|МинимальнаяСуммаЗаказа, ТипОбеспечения, ВидЦены, ТипЕдиницыИзмерения, КЗаказуРекомендуется"));
ПараметрыПроцедуры.Вставить("ЗаказыКОбеспечению", Объект.ЗаказыКОбеспечению.Выгрузить(,"ИсточникОбеспечения, Склад,
|СпособОбеспечения, Требуется, МинимальнаяПартияПоставки, ПеремещениеРазрешено,
|Соглашение, Номенклатура, Характеристика, УпаковкаЗаказа, КЗаказу, ЭтоРабота,
|ЦенаВВалютеСоглашения, СуммаВалютаСоглашения, ИсточникОбеспеченияТолькоПросмотр,
|Отметка, Округлено, ЕдиницаИзмерения, ВалютаСоглашения, Вес,
|МинимальнаяСуммаЗаказа, ТипОбеспечения, ВидЦены, ТипЕдиницыИзмерения, КЗаказуРекомендуется"));
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.СформироватьДеревоЗаказов",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ПереходКРедактированиюЗаказовЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
Иначе
ДалееКШагуРедактированиеЗаказов(Результат);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ФормированиеЗаказовВФоне()
СекцииДляВыгрузки = "СвойстваПотребности, РеквизитыОбеспечивающегоЗаказа, РеквизитыЗаказаКОбеспечению";
Поля = Обработки.ОбеспечениеПотребностей.ПоляТаблицыЗаказы(СекцииДляВыгрузки);
Поля.Вставить("ЧислительУпаковки", Новый ОписаниеТипов("Число"));
Поля.Вставить("ЗнаменательУпаковки", Новый ОписаниеТипов("Число"));
Поля.Вставить("ТипЕдиницыИзмерения", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыИзмеряемыхВеличин"));
Поля.Вставить("Отметка", Новый ОписаниеТипов("Булево"));
Поля.Вставить("УпаковкаЗаказа", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Поля.Вставить("МинимальнаяПартияПоставки", Новый ОписаниеТипов("Число"));
Поля.Вставить("НеОкруглятьПередСозданиемЗаказа", Новый ОписаниеТипов("Булево"));
ТаблицаПотребностей = Новый ТаблицаЗначений();
Для Каждого Поле Из Поля Цикл
ТаблицаПотребностей.Колонки.Добавить(Поле.Ключ, Поле.Значение);
КонецЦикла;
ВыгрузитьОтмеченныеКЗаказу(ТаблицаПотребностей, "ЗаказыКОбеспечению");
ВыгрузитьОтмеченныеКЗаказу(ТаблицаПотребностей, "Запасы");
ТаблицаДокументов = ТаблицаДокументы.Выгрузить(Новый Массив);
АдресРезультатаФормированияЗаказов = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ТаблицаПотребностей", ТаблицаПотребностей);
ПараметрыПроцедуры.Вставить("ИспользоватьУпаковки", ИспользоватьУпаковки);
ПараметрыПроцедуры.Вставить("АдресРезультатаФормированияЗаказов", АдресРезультатаФормированияЗаказов);
ПараметрыПроцедуры.Вставить("ТаблицаДокументов", ТаблицаДокументов);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов: создание документов'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.СформироватьЗаказы",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура ФормированиеЗаказовВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещения = ДалееКШагуСформированныеЗаказы(Результат);
Если ЗначениеЗаполнено(Оповещения) Тогда
Для Каждого Оповещение Из Оповещения Цикл
Оповестить(Оповещение.ИмяСобытия, Оповещение.ПараметрыОповещения, Оповещение.Источник);
КонецЦикла;
ВключенаОбработкаОповещенийЗаписиДокументов = Истина;
КонецЕсли;
Если Результат <> Неопределено И Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УдалениеЗаказовВФоне()
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("СсылкиНаУдаление", СформированныеЗаказы.ВыгрузитьЗначения());
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Формирование заказов: удаление документов'");
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.ОбеспечениеПотребностей.УдалитьЗаказы",
ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции
&НаКлиенте
Процедура УдалениеЗаказовВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат.Статус = "Ошибка" Тогда
ПоказатьПредупреждение(, Результат.КраткоеПредставлениеОшибки);
Иначе
НазадКШагамОтбораПотребностейНаКлиенте(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьФлажкиВТаблицеСпособовОбеспечения(Устанавливать)
Для каждого СтрокаТаблицы Из Объект.СпособыОбеспечения Цикл
СтрокаТаблицы.Отметка = Устанавливать;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьКЗаказуТовары(ЭтоПлановыйЗаказ)
ИдентификаторыСтрок = Элементы.СпособыОбеспечения.ВыделенныеСтроки;
Для Каждого Идентификатор Из ИдентификаторыСтрок Цикл
СтрокаТаблицы = Объект.СпособыОбеспечения.НайтиПоИдентификатору(Идентификатор);
СтрокаТаблицы.КЗаказуТовары = ЭтоПлановыйЗаказ;
ОбеспечениеВДокументахКлиент.ЗаполнитьДатыНаВторомШагеОбеспечениеПотребностей(СтрокаТаблицы);
СтрокаТаблицы.СтрокаИзменена = Истина;
КонецЦикла;
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Установлено новое значение в колонке: ""К заказу товары"". Всего обработано строк: %1'"),
ИдентификаторыСтрок.Количество());
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка строк'"), , ТекстСообщения);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовФормыПоПравам()
ПраваДоступа = ОбеспечениеСервер.ПраваДоступаНаЗаписьСпособаИлиМетода();
Если Не ПраваДоступа.ВариантыОбеспечения Тогда
Элементы.СпособОбеспеченияЗапасы.Доступность = Ложь;
Элементы.СпособОбеспеченияЗапасы.КартинкаШапки = Новый Картинка();
Элементы.СпособОбеспеченияЗаказы.Доступность = Ложь;
Элементы.СпособОбеспеченияЗаказы.КартинкаШапки = Новый Картинка();
Элементы.СпособыОбеспеченияСпособОбеспечения.Доступность = Ложь;
КонецЕсли;
Если Не ПраваДоступа.ТоварныеОграничения Тогда
Элементы.НастроитьПоддержаниеЗапаса.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпособыОбеспеченияПриИзмененииСпособаОбеспечения()
СтрокаТаблицы = Элементы.СпособыОбеспечения.ТекущиеДанные;
Если СтрокаТаблицы = Неопределено
Или Элементы.Помощник.ТекущаяСтраница <> Элементы.ШагНастройкаСпособовОбеспечения Тогда
Возврат;
КонецЕсли;
Реквизиты = ДанныеЗаполненияСтрокиТаблицыСпособовОбеспечения(СтрокаТаблицы.СпособОбеспечения);
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Реквизиты);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДанныеЗаполненияСтрокиТаблицыСпособовОбеспечения(Ссылка)
ПараметрыПроцедуры = Новый Структура();
ПараметрыПроцедуры.Вставить("Настройки", Неопределено);
ПараметрыПроцедуры.Вставить("ТоварыПоддерживаемогоЗапаса", Неопределено);
ПараметрыПроцедуры.Вставить("СпособОбеспечения", Ссылка);
Адрес = ПоместитьВоВременноеХранилище(Неопределено);
Обработки.ОбеспечениеПотребностей.ТаблицаСпособовОбеспечения(ПараметрыПроцедуры, Адрес);
Таблица = ПолучитьИзВременногоХранилища(Адрес);
Результат = Новый Структура();
Для Каждого Колонка Из Таблица.Колонки Цикл
Результат.Вставить(Колонка.Имя);
КонецЦикла;
ЗаполнитьЗначенияСвойств(Результат, Таблица[0]);
УдалитьИзВременногоХранилища(Адрес);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ШагЗапасы
&НаКлиенте
Процедура ЗапасыПриАктивизацииСтрокиОбработчикОжидания()
Строка = Элементы.Запасы.ТекущиеДанные;
Если Строка = Неопределено Тогда
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаНеВыделенаСтрока;
Иначе
СтрокаФормата = "ЧДЦ=3; ЧН=0.000";
ЕдиницаИЗмерения = Строка.ЕдиницаИзмерения;
Остаток = НадписьВФормате(Строка.Остаток, ЕдиницаИзмерения, СтрокаФормата);
ЗаказыКПоступлению = НадписьВФормате(Строка.ЗаказыКПоступлению, ЕдиницаИзмерения, СтрокаФормата);
МинимальныйЗапас = НадписьВФормате(Строка.МинимальныйЗапас, ЕдиницаИзмерения, СтрокаФормата);
МаксимальныйЗапас = НадписьВФормате(Строка.МаксимальныйЗапас, ЕдиницаИзмерения, СтрокаФормата);
СтраховойЗапас = НадписьВФормате(Строка.СтраховойЗапас, ЕдиницаИзмерения, СтрокаФормата);
ДоТочкиЗаказа = НадписьВФормате(Строка.ДоТочкиЗаказа, ЕдиницаИзмерения, СтрокаФормата);
КоличествоКЗаказуНадпись = НадписьВФормате(Строка.КЗаказуРекомендуется, ЕдиницаИзмерения, СтрокаФормата);
СреднедневноеПотребление = НадписьВФормате(Строка.СреднедневноеПотребление, ЕдиницаИзмерения, СтрокаФормата);
СрокПоставки = СтрШаблон(НСтр("ru = '%1 дн'"), Строка.СрокПоставки);
ОбеспечиваемыйПериод = СтрШаблон(НСтр("ru = '%1 дн'"), Строка.ОбеспечиваемыйПериод);
СтрокаФормата = "ДЛФ=D";
МетодМинМакс = Строка.МетодОбеспечения
= ПредопределенноеЗначение("Перечисление.МетодыОбеспеченияПотребностей.ПоддержаниеЗапасаМинМакс");
Если Строка.КЗаказуТовары = 0 Тогда
Если Строка.ДоТочкиЗаказа > 0 Тогда
ТекстРекомендации = НСтр("ru = 'Не заказывать товар. Ожидать наступления точки заказа.'");
ЭтоТочкаЗаказа = Ложь;
ЭтоДатаЗаказа = Ложь;
Заказать = Ложь;
Иначе
Если Строка.ЗаказыКПоступлению = 0 Тогда
Если МетодМинМакс Или Строка.СтраховойЗапас = 0 Тогда
ТекстРекомендации = НСтр("ru = 'Заказать количество, равное максимальному запасу.'");
Иначе
ТекстРекомендации = НСтр("ru = 'Заказать количество, равное максимальному запасу за вычетом страхового запаса, пополнить страховой запас (при необходимости).'");
КонецЕсли;
ЭтоТочкаЗаказа = Истина;
ЭтоДатаЗаказа = Ложь;
Заказать = Истина;
ИначеЕсли Строка.ЗаказыКПоступлению < Строка.МаксимальныйЗапас Тогда
Если МетодМинМакс Или Строка.СтраховойЗапас = 0 Тогда
ТекстРекомендации = НСтр("ru = 'Заказать количество, равное максимальному запасу за вычетом заказанного ранее.'");
Иначе
ТекстРекомендации = НСтр("ru = 'Заказать количество, равное максимальному запасу, за вычетом страхового запаса и за вычетом заказанного ранее, пополнить страховой запас (при необходимости).'");
КонецЕсли;
ЭтоТочкаЗаказа = Истина;
ЭтоДатаЗаказа = Ложь;
Заказать = Истина;
Иначе
ТекстРекомендации = НСтр("ru = 'Не заказывать товар. Необходимые заказы сформированы ранее.'");
ЭтоТочкаЗаказа = Истина;
ЭтоДатаЗаказа = Ложь;
Заказать = Ложь;
КонецЕсли;
КонецЕсли;
ИначеЕсли Строка.КЗаказуТовары = 1 Тогда
Если Строка.ДоТочкиЗаказа <= 0 И Строка.СтраховойЗапас > 0 Тогда
ТекстРекомендации = НСтр("ru = 'Заказать количество для пополнения до максимального запаса, пополнить страховой запас (при необходимости).'");
Иначе
ТекстРекомендации = НСтр("ru = 'Заказать количество для пополнения до максимального запаса.'");
КонецЕсли;
ЭтоТочкаЗаказа = Строка.ДоТочкиЗаказа <= 0;
ЭтоДатаЗаказа = Истина;
Заказать = Истина;
Иначе
ТекстРекомендации = НСтр("ru = 'Не заказывать товар. Ожидать наступления даты заказа по графику.'");
ЭтоТочкаЗаказа = Строка.ДоТочкиЗаказа <= 0;
ЭтоДатаЗаказа = Ложь;
Заказать = Ложь;
КонецЕсли;
ПереключитьСтраницыПанелиРекомендацийЗапасы(Строка.МетодОбеспечения,
Строка.КЗаказуТовары, ЭтоТочкаЗаказа, ЭтоДатаЗаказа, Заказать);
КонецЕсли;
ОтобразитьРасчитанноеОкругление(Строка, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьСтраницыПанелиРекомендацийЗапасы(Метод, КЗаказуТовары, ЭтоТочкаЗаказа, ЭтоДатаЗаказа, Заказать)
МетодМинМакс = ПредопределенноеЗначение("Перечисление.МетодыОбеспеченияПотребностей.ПоддержаниеЗапасаМинМакс");
Если КЗаказуТовары = 0 Тогда
Если Метод = МетодМинМакс Тогда
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаМинМаксПоТочкеЗаказа;
Элементы.СтраницыТочкаЗаказа1.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута1,
Элементы.СтраницаТочкаЗаказаНеДостигнута1);
Элементы.СтраницыРекомендация1.ТекущаяСтраница = ?(Заказать,
Элементы.СтраницаРекомендацияЗаказать1,
Элементы.СтраницаРекомендацияНеЗаказывать1);
Элементы.СтраницыКЗаказуФормула1.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута1,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута1);
Иначе
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаПрогнозПоТочкеЗаказа;
Элементы.СтраницыТочкаЗаказа3.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута3,
Элементы.СтраницаТочкаЗаказаНеДостигнута3);
Элементы.СтраницыРекомендация3.ТекущаяСтраница = ?(Заказать,
Элементы.СтраницаРекомендацияЗаказать3,
Элементы.СтраницаРекомендацияНеЗаказывать3);
Элементы.СтраницыКЗаказуФормула3.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута3,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута3);
КонецЕсли;
ИначеЕсли КЗаказуТовары = 1 Тогда
ДатаЗаказаНаступила = НСтр("ru = 'Плановое формирование заказов'");
Если Метод = МетодМинМакс Тогда
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаМинМаксПоГрафику;
Элементы.СтраницыТочкаЗаказа2.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута2,
Элементы.СтраницаТочкаЗаказаНеДостигнута2);
Элементы.СтраницыРекомендация2.ТекущаяСтраница = Элементы.СтраницаРекомендацияЗаказать2;
Элементы.СтраницыКЗаказуФормула2.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута2,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута2);
Элементы.СтраницыГрафикЗаказов2.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНаступила2;
Иначе
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаПрогнозПоГрафику;
Элементы.СтраницыТочкаЗаказа4.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута4,
Элементы.СтраницаТочкаЗаказаНеДостигнута4);
Элементы.СтраницыДатаЗаказаРекомендация.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНаступила;
Элементы.СтраницыКЗаказуФормула4.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута4,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута4);
Элементы.СтраницыГрафикЗаказов4.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНаступила4;
КонецЕсли;
ИначеЕсли КЗаказуТовары = 2 Тогда
ДоДатыЗаказаДней = НСтр("ru = 'Не заказывать сегодня'");
Если Метод = МетодМинМакс Тогда
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаМинМаксПоГрафику;
Элементы.СтраницыТочкаЗаказа2.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута2,
Элементы.СтраницаТочкаЗаказаНеДостигнута2);
Элементы.СтраницыРекомендация2.ТекущаяСтраница = Элементы.СтраницаРекомендацияНеЗаказывать2;
Элементы.СтраницыКЗаказуФормула2.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута2,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута2);
Элементы.СтраницыГрафикЗаказов2.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНеНаступила2;
Иначе
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаПрогнозПоГрафику;
Элементы.СтраницыТочкаЗаказа4.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаТочкаЗаказаДостигнута4,
Элементы.СтраницаТочкаЗаказаНеДостигнута4);
Элементы.СтраницыДатаЗаказаРекомендация.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНеНаступила;
Элементы.СтраницыКЗаказуФормула4.ТекущаяСтраница = ?(ЭтоТочкаЗаказа,
Элементы.СтраницаКЗаказуТочкаЗаказаДостигнута4,
Элементы.СтраницаКЗаказуТочкаЗаказаНеДостигнута4);
Элементы.СтраницыГрафикЗаказов4.ТекущаяСтраница = Элементы.СтраницаДатаЗаказаНеНаступила4;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСтрокуТаблицыЗапасыНаКлиенте(СпособОбеспечения)
Поставка = Элементы.Запасы.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Отбор = Новый Структура("Номенклатура,Характеристика,Склад,СпособОбеспечения");
ЗаполнитьЗначенияСвойств(Отбор, Поставка);
Отбор.СпособОбеспечения = СпособОбеспечения;
РассчитатьСтрокуТаблицыЗапасы(Элементы.Запасы.ТекущаяСтрока, Отбор);
Если Не ЗначениеЗаполнено(Поставка.ДатаПоставки) Тогда
Способы = Объект.СпособыОбеспечения.НайтиСтроки(Новый Структура("СпособОбеспечения", СпособОбеспечения));
Если Способы.Количество() > 0 Тогда
Поставка.ДатаПоставки = Способы[0].ДатаПоставки;
КонецЕсли;
КонецЕсли;
ПересчитатьОкруглениеКлиент(Поставка, Истина);
ОтобразитьРасчитанноеОкругление(Поставка, Истина);
РассчитатьИтоги();
ЗапасыПриАктивизацииСтроки(Неопределено);
КонецПроцедуры
&НаСервере
Процедура РассчитатьСтрокуТаблицыЗапасы(ИдентификаторСтроки, Отбор)
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
Обработки.ОбеспечениеПотребностей.ТаблицаЗапасы(
Новый Структура("ТипОтбора,Отбор", "ОтборПоЗначениям", Отбор),
АдресХранилища);
Таблица = ПолучитьИзВременногоХранилища(АдресХранилища);
СтрокаЗапасы = Объект.Запасы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Таблица.Количество() > 0 Тогда
Товар = Таблица[0];
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, Товар);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.МинимальныйИМаксимальныйЗапасы(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.КоличествоКЗаказуДляПоддержанияЗапаса(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.УровеньЗапасаИКартинкаСменитьМетод(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
СтрокаЗапасы.КЗаказуРекомендуется = СтрокаЗапасы.КЗаказу;
СтрокаЗапасы.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(СтрокаЗапасы.ИсточникОбеспечения, ТекстНеЗаполнено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСтрокуТаблицыЗаказыКОбеспечениюНаКлиенте(СпособОбеспечения)
Поставка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
Отбор = Новый Структура("Номенклатура, Характеристика, Склад, Назначение, СпособОбеспечения,
|Заказ, ДатаОтгрузки, ПодразделениеПолучатель, ДатаОтгрузкиЗаказа, СкладОтгрузкиЗаказа");
ЗаполнитьЗначенияСвойств(Отбор, Поставка);
Отбор.СпособОбеспечения = СпособОбеспечения;
РассчитатьСтрокуТаблицыЗаказыКОбеспечению(Элементы.ЗаказыКОбеспечению.ТекущаяСтрока, Отбор);
РассчитатьИтоги();
ЗаказыКОбеспечениюПриАктивизацииСтроки(Неопределено);
КонецПроцедуры
&НаСервере
Процедура РассчитатьСтрокуТаблицыЗаказыКОбеспечению(ИдентификаторСтроки, Отбор)
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
Обработки.ОбеспечениеПотребностей.ТаблицаПотребностейПоЗаказамИОстатков(
Новый Структура("ТипОтбора,Отбор", "ОтборПоЗначениям", Отбор),
АдресХранилища);
Таблица = ПолучитьИзВременногоХранилища(АдресХранилища);
СтрокаЗаказы = Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Таблица.Количество() > 0 Тогда
Товар = Таблица[0];
ЗаполнитьЗначенияСвойств(СтрокаЗаказы, Товар,
"ДатаПоставкиРасчетная,
|ДатаПоставки,
|ДатаЗаказаНеПозднее,
|ДатаПоставкиПоСпособуОбеспечения,
|ТипОбеспечения,
|ИсточникОбеспечения,
|Соглашение,
|ВалютаСоглашения,
|ВидЦены,
|ЦенаВВалютеСоглашения,
|ЦенаВВалютеУправленческогоУчета,
|ИсточникОбеспеченияТолькоПросмотр");
РезультатРасчета = Обработки.ОбеспечениеПотребностей.КоличествоКЗаказуДляОбеспеченияЗаказов(СтрокаЗаказы);
ЗаполнитьЗначенияСвойств(СтрокаЗаказы, РезультатРасчета);
ЗаполнитьРасчетныеПоляСтрокиЗаказы(СтрокаЗаказы, КэшированныеЗначения);
СтрокаЗаказы.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(СтрокаЗаказы.ИсточникОбеспечения, ТекстНеЗаполнено);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ШагЗаказы
&НаКлиенте
Процедура ЗаказыПриАктивизацииСтрокиОбработчикОжидания()
Строка = Элементы.ЗаказыКОбеспечению.ТекущиеДанные;
Если Строка = Неопределено Тогда
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаНеВыделенаСтрока;
Иначе
СтрокаФормата = "ЧДЦ=3; ЧН=0.000";
ЕдиницаИЗмерения = Строка.ЕдиницаИзмерения;
Если Не ЗначениеЗаполнено(Строка.ДатаОтгрузки) Тогда
ДатаОтгрузки = НСтр("ru = '-'");
Иначе
ДатаОтгрузки = НадписьВФормате(Строка.ДатаОтгрузки, "", "ДЛФ=D");
КонецЕсли;
НеЗаполненГрафикПоставок = Строка.ДатаПоставкиРасчетная = '00010101'
И Строка.ДатаПоставкиПоСпособуОбеспечения > '00010101';
Если НеЗаполненГрафикПоставок Тогда
ДатаПоставки = НСтр("ru = 'не заполнен график поставок'");
Иначе
ДатаПоставки = НадписьВФормате(Строка.ДатаПоставкиРасчетная, "", "ДЛФ=D");
КонецЕсли;
Требуется = НадписьВФормате(Строка.Требуется, ЕдиницаИзмерения, СтрокаФормата);
Обеспечено = НадписьВФормате(Строка.Обеспечено, ЕдиницаИзмерения, СтрокаФормата);
КоличествоКЗаказуНадпись = НадписьВФормате(Строка.КЗаказуРекомендуется, ЕдиницаИзмерения, СтрокаФормата);
ОтгрузкаВнутриПериода = Строка.ДатаПоставкиРасчетная <= Строка.ДатаПоставкиПоСпособуОбеспечения;
Если Строка.КЗаказуТовары = 2 Тогда
ТекстРекомендации = НСтр("ru = 'Не заказывать товар. Ожидать наступления даты заказа по графику.'");
ИначеЕсли ОтгрузкаВнутриПериода Тогда
Если Строка.Обеспечено = 0 Тогда
ТекстРекомендации = НСтр("ru = 'Заказать количество, требующееся по заказу'");
Иначе
ТекстРекомендации = НСтр("ru = 'Заказать количество, требующееся по заказу, за вычетом обеспеченного ранее'");
КонецЕсли;
Иначе
ТекстРекомендации = НСтр("ru = 'Не заказывать товар. Ожидать приближения даты отгрузки'");
КонецЕсли;
Если ОтгрузкаВнутриПериода Тогда
Если НеЗаполненГрафикПоставок Тогда
НадписьДатаОтгрузки = НСтр("ru = 'Не удалось рассчитать дату поставки на данную дату отгрузки'");
Иначе
НадписьДатаОтгрузки = НСтр("ru = 'Дата отгрузки обеспечивается ближайшей поставкой'");
КонецЕсли;
Иначе
НадписьДатаОтгрузки = НСтр("ru = 'Дата отгрузки обеспечивается одной из следующих поставок'");
КонецЕсли;
Элементы.ПанельРекомендаций.ТекущаяСтраница = Элементы.СтраницаЗаказыПоГрафикуДатаНаступила;
Элементы.СтраницыРекомендация7.ТекущаяСтраница = ?(ОтгрузкаВнутриПериода,
Элементы.СтраницаРекомендацияЗаказать7,
Элементы.СтраницаРекомендацияНеЗаказывать7);
КонецЕсли;
ОтобразитьРасчитанноеОкругление(Строка, Ложь);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьРасчетныеПоляСтрокиЗаказы(Строка, КэшированныеЗначения)
Строка.КартинкаПриоритета = ?(Строка.Приоритет = КэшированныеЗначения.ВысшийПриоритет, 0,
?(Строка.Приоритет = КэшированныеЗначения.НизшийПриоритет, 2, 1));
КонецПроцедуры
#КонецОбласти
#Область ШагиПотребности
&НаКлиенте
Процедура ОткрытьМетодОбеспечения(ИмяТаблицы)
Поставка = Элементы[ИмяТаблицы].ТекущиеДанные;
КлючНоменклатуры = Новый Структура("Номенклатура, Характеристика, Склад, ЭтоРабота");
КлючНоменклатуры.ЭтоРабота = Ложь;
ЗаполнитьЗначенияСвойств(КлючНоменклатуры, Поставка);
РежимОткрытия = "Полный";
ПараметрыФормы = Новый Структура("КлючПотребности, РассчитыватьСтатистику, РежимОткрытия",
КлючНоменклатуры, Истина, РежимОткрытия);
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаРедактированияПараметровОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСпособОбеспечения(ИмяТаблицы)
Строка = Элементы[ИмяТаблицы].ТекущиеДанные;
Если ЗначениеЗаполнено(Строка.СпособОбеспечения) Тогда
ПараметрыФормы = Новый Структура("Ключ", Строка.СпособОбеспечения);
ОткрытьФорму("Справочник.СпособыОбеспеченияПотребностей.Форма.ФормаЭлемента", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьУсловияЗакупок(Поставка)
Поставка.Соглашение = ПредопределенноеЗначение("Справочник.СоглашенияСПоставщиками.ПустаяСсылка");
Поставка.ЦенаВВалютеУправленческогоУчета = 0;
Поставка.ЦенаВВалютеСоглашения = 0;
Поставка.ВалютаСоглашения = ПредопределенноеЗначение("Справочник.Валюты.ПустаяСсылка");
КонецПроцедуры
&НаКлиенте
Процедура СпособОбеспеченияОчистка(Поставка, ВозможныРаботы)
Если Поставка.Отметка Тогда
РассчитатьИтоги();
КонецЕсли;
ОчиститьУсловияЗакупок(Поставка);
Поставка.ИсточникОбеспечения = ТекстНеЗаполнено;
Поставка.СпособОбеспечения = ПредопределенноеЗначение("Справочник.СпособыОбеспеченияПотребностей.ПустаяСсылка");
Поставка.ТипОбеспечения = ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Покупка");
Поставка.ИсточникОбеспеченияТолькоПросмотр = Ложь;
КоличествоКЗаказу = Поставка.Округлено * ?(Поставка.Отметка, 1, 0);
РассчитатьИтоги();
КонецПроцедуры
#КонецОбласти
#Область КорзинаЗаказов
&НаКлиенте
Процедура РассчитатьИтоги()
КорзинаЗаказовИтогПолеСтрокВсего = 0;
КорзинаЗаказовИтогПолеОбщийВес = 0;
КорзинаЗаказовИтогПолеСумма = 0;
Для Каждого Строка Из Объект.Запасы Цикл
Если Строка.Отметка И Строка.КЗаказу > 0 Тогда
Если Строка.НеОкруглятьПередСозданиемЗаказа Тогда
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.КЗаказу;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.КЗаказу * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
Иначе
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.Округлено;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.Округлено * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из Объект.ЗаказыКОбеспечению Цикл
Если Строка.Отметка И Строка.КЗаказу Тогда
Если Строка.НеОкруглятьПередСозданиемЗаказа Тогда
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.КЗаказу;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.КЗаказу * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
Иначе
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.Округлено;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.Округлено * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтогиНаСервере()
КорзинаЗаказовИтогПолеСтрокВсего = 0;
КорзинаЗаказовИтогПолеОбщийВес = 0;
КорзинаЗаказовИтогПолеСумма = 0;
Для Каждого Строка Из Объект.Запасы Цикл
Если Строка.Отметка Тогда
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.Округлено;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.Округлено * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из Объект.ЗаказыКОбеспечению Цикл
Если Строка.Отметка Тогда
КорзинаЗаказовИтогПолеСумма = КорзинаЗаказовИтогПолеСумма + Строка.ЦенаВВалютеУправленческогоУчета * Строка.Округлено;
КорзинаЗаказовИтогПолеОбщийВес = КорзинаЗаказовИтогПолеОбщийВес + Строка.Округлено * Строка.Вес;
КорзинаЗаказовИтогПолеСтрокВсего = КорзинаЗаказовИтогПолеСтрокВсего + 1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ИзменитьОтметку(ИмяТаблицы, Установить)
ВыделенныеСтроки = ?(ИмяТаблицы = "Запасы", Элементы.Запасы.ВыделенныеСтроки,
Элементы.ЗаказыКОбеспечению.ВыделенныеСтроки);
Для каждого Идентификатор Из ВыделенныеСтроки Цикл
Строка = Объект[ИмяТаблицы].НайтиПоИдентификатору(Идентификатор);
Строка.Отметка = Установить;
ПересчитатьОкруглениеСервер(Строка, ИмяТаблицы = "Запасы");
КонецЦикла;
РассчитатьИтогиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ИзменитьОтметкуНаВсеСтроки(ИмяТаблицы, Установить)
Таблица = Объект[ИмяТаблицы];
Для Каждого Строка Из Таблица Цикл
Строка.Отметка = Установить;
КонецЦикла;
РассчитатьИтогиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЦеныНаСервере(СписокТоваров, Соглашение)
СписокТоваровСЦенами = ПолучитьЦены(СписокТоваров, Соглашение);
Для Каждого Товар Из СписокТоваровСЦенами Цикл
СтрокаДерева = ПредварительныйПросмотр.НайтиПоИдентификатору(Товар.ИД);
СтрокаДерева.ЦенаВВалютеСоглашения = Товар.ЦенаВВалютеСоглашения;
СтрокаДерева.СуммаВалютаСоглашения = СтрокаДерева.ЦенаВВалютеСоглашения * СтрокаДерева.КЗаказу;
СтрокаДерева.ЦенаВВалютеУправленческогоУчета = Товар.ЦенаВВалютеУправленческогоУчета;
СтрокаДерева.СуммаУпрУчет = СтрокаДерева.ЦенаВВалютеУправленческогоУчета * СтрокаДерева.КЗаказу;
СтрокаДерева.УпаковкаЗаказа = Товар.УпаковкаЗаказа;
СтрокаДерева.МинимальнаяПартияПоставки = Товар.МинимальнаяПартияПоставки;
СтрокаДерева.ВидЦены = Товар.ВидЦены;
СтрокаДерева.ВалютаСоглашения = Товар.ВалютаСоглашения;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьЦены(СписокТоваров, Соглашение)
ВидЦеныПоставщика = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Соглашение, "ВидЦеныПоставщика");
ТаблицаТовары = Новый ТаблицаЗначений;
ОписаниеЧисла = Новый ОписаниеТипов("Число");
ОписаниеНоменклатура = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
ОписаниеХарактеристикиНоменклатуры = Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры");
ОписаниеСпособыОбеспеченияПотребностей = Новый ОписаниеТипов("СправочникСсылка.СпособыОбеспеченияПотребностей");
ОписаниеСоглашенияСПоставщиками = Новый ОписаниеТипов("СправочникСсылка.СоглашенияСПоставщиками");
ОписаниеВидЦеныПоставщика = Новый ОписаниеТипов("СправочникСсылка.ВидыЦенПоставщиков");
ТаблицаТовары.Колонки.Добавить("Номенклатура", ОписаниеНоменклатура);
ТаблицаТовары.Колонки.Добавить("Характеристика", ОписаниеХарактеристикиНоменклатуры);
ТаблицаТовары.Колонки.Добавить("Соглашение", ОписаниеСоглашенияСПоставщиками);
ТаблицаТовары.Колонки.Добавить("СпособОбеспечения", ОписаниеСпособыОбеспеченияПотребностей);
ТаблицаТовары.Колонки.Добавить("ВидЦеныПоставщика", ОписаниеВидЦеныПоставщика);
ТаблицаТовары.Колонки.Добавить("ИД", ОписаниеЧисла);
Для Каждого Товар Из СписокТоваров Цикл
НоваяСтрока = ТаблицаТовары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Товар);
НоваяСтрока.ВидЦеныПоставщика = ВидЦеныПоставщика;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ДанныеЗаполнения", ТаблицаТовары);
Запрос.УстановитьПараметр("БазоваяВалюта", ЗначениеНастроекПовтИсп.БазоваяВалютаПоУмолчанию());
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("ОсновнаяСтрана", ЗначениеНастроекКлиентСерверПовтИсп.ОсновнаяСтрана());
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеЗаполнения.Номенклатура КАК Номенклатура,
| ДанныеЗаполнения.Характеристика КАК Характеристика,
| ДанныеЗаполнения.Соглашение КАК Соглашение,
| ДанныеЗаполнения.СпособОбеспечения КАК СпособОбеспечения,
| ДанныеЗаполнения.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
| ДанныеЗаполнения.ИД КАК ИД
|ПОМЕСТИТЬ ДанныеЗаполнения
|ИЗ
| &ДанныеЗаполнения КАК ДанныеЗаполнения
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Соглашение,
| СпособОбеспечения
|;
|
|
|ВЫБРАТЬ
| КурсыВалютСрезПоследних.Валюта КАК Валюта,
| ВЫБОР
| КОГДА КурсыВалютСрезПоследних.КурсЗнаменатель = 0
| ТОГДА 0
| ИНАЧЕ КурсыВалютСрезПоследних.КурсЧислитель / КурсыВалютСрезПоследних.КурсЗнаменатель
| КОНЕЦ КАК Коэффициент
|ПОМЕСТИТЬ КурсыВалют
|ИЗ
| РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(, БазоваяВалюта = &БазоваяВалюта) КАК КурсыВалютСрезПоследних
|
|ИНДЕКСИРОВАТЬ ПО
| Валюта
|;
|
|
|ВЫБРАТЬ
| ЦеныПоставщиков.Номенклатура КАК Номенклатура,
| ЦеныПоставщиков.Характеристика КАК Характеристика,
| ЦеныПоставщиков.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
| ЕСТЬNULL(&КоэффициентУпаковки,1) КАК Коэффициент,
| ЦеныПоставщиков.Упаковка КАК Упаковка,
| ЦеныПоставщиков.Валюта КАК Валюта,
| ЦеныПоставщиков.Цена КАК Цена
|ПОМЕСТИТЬ ЦеныПоставщиков
|ИЗ
| РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(
| ,
| (Номенклатура, Характеристика, ВидЦеныПоставщика) В
| (ВЫБРАТЬ
| ДанныеЗаполнения.Номенклатура КАК Номенклатура,
| ДанныеЗаполнения.Характеристика КАК Характеристика,
| ДанныеЗаполнения.ВидЦеныПоставщика КАК ВидЦеныПоставщика
| ИЗ
| ДанныеЗаполнения КАК ДанныеЗаполнения)) КАК ЦеныПоставщиков
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| ВидЦеныПоставщика
|;
|
|ВЫБРАТЬ
| УсловияЗакупок.Номенклатура КАК Номенклатура,
| УсловияЗакупок.Характеристика КАК Характеристика,
| УсловияЗакупок.ВидЦеныПоставщика КАК ВидЦеныПоставщика,
| УсловияЗакупок.УпаковкаЗаказа КАК УпаковкаЗаказа,
| УсловияЗакупок.МинимальнаяПартияПоставки КАК МинимальнаяПартияПоставки
|ПОМЕСТИТЬ УсловияЗакупок
|ИЗ
| РегистрСведений.УсловияЗакупок.СрезПоследних(
| ,
| (Номенклатура, Характеристика, ВидЦеныПоставщика) В
| (ВЫБРАТЬ
| ДанныеЗаполнения.Номенклатура КАК Номенклатура,
| ДанныеЗаполнения.Характеристика КАК Характеристика,
| ДанныеЗаполнения.ВидЦеныПоставщика КАК ВидЦеныПоставщика
| ИЗ
| ДанныеЗаполнения КАК ДанныеЗаполнения)) КАК УсловияЗакупок
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| ВидЦеныПоставщика
|;
|
|
|ВЫБРАТЬ
| ДанныеЗаполнения.Номенклатура КАК Номенклатура,
| ДанныеЗаполнения.Характеристика КАК Характеристика,
| ДанныеЗаполнения.ВидЦеныПоставщика КАК ВидЦены,
| ЦеныПоставщиков.Валюта КАК Валюта,
| ЦеныПоставщиков.Упаковка КАК Упаковка,
| ЦеныПоставщиков.Цена КАК Цена,
| ЕСТЬNULL(ДанныеЗаполнения.Соглашение.Валюта, ДанныеЗаполнения.СпособОбеспечения.Соглашение.Валюта) КАК ВалютаСоглашения,
| ВЫБОР
| КОГДА НЕ ЕСТЬNULL(ДанныеЗаполнения.Соглашение.ЦенаВключаетНДС, ДанныеЗаполнения.СпособОбеспечения.Соглашение.ЦенаВключаетНДС) ТОГДА
| (ВЫБОР
| КОГДА НЕ (ЕСТЬNULL(СтавкиНДСНоменклатурыСтраныРегистрации.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДССтраныРегистрации.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка ЕСТЬ NULL
| ТОГДА (ЕСТЬNULL(СтавкиНДСНоменклатурыСтраныРегистрации.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДССтраныРегистрации.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка
| КОГДА НЕ (ЕСТЬNULL(СтавкиНДСНоменклатуры.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДС.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка ЕСТЬ NULL
| ТОГДА (ЕСТЬNULL(СтавкиНДСНоменклатуры.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДС.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка
| ИНАЧЕ 0
| КОНЕЦ + 100) / 100
| ИНАЧЕ
| 1
| КОНЕЦ
| * ЦеныПоставщиков.Цена * КурсыВалют.Коэффициент / &КоэффициентВалютыУпрУчета / ЦеныПоставщиков.Коэффициент КАК ЦенаВВалютеУправленческогоУчета,
| ВЫБОР
| КОГДА НЕ ЕСТЬNULL(ДанныеЗаполнения.Соглашение.ЦенаВключаетНДС, ДанныеЗаполнения.СпособОбеспечения.Соглашение.ЦенаВключаетНДС) ТОГДА
| (ВЫБОР
| КОГДА НЕ (ЕСТЬNULL(СтавкиНДСНоменклатурыСтраныРегистрации.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДССтраныРегистрации.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка ЕСТЬ NULL
| ТОГДА (ЕСТЬNULL(СтавкиНДСНоменклатурыСтраныРегистрации.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДССтраныРегистрации.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка
| КОГДА НЕ (ЕСТЬNULL(СтавкиНДСНоменклатуры.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДС.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка ЕСТЬ NULL
| ТОГДА (ЕСТЬNULL(СтавкиНДСНоменклатуры.СтавкаНДС, ЕСТЬNULL(ОсновныеСтавкиНДС.СтавкаНДС, ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)))).Ставка
| ИНАЧЕ 0
| КОНЕЦ + 100) / 100
| ИНАЧЕ
| 1
| КОНЕЦ
| * ЦеныПоставщиков.Цена * КурсыВалют.Коэффициент / КурсыВалютСоглашения.Коэффициент / ЦеныПоставщиков.Коэффициент КАК ЦенаВВалютеСоглашения,
| УсловияЗакупок.УпаковкаЗаказа КАК УпаковкаЗаказа,
| УсловияЗакупок.МинимальнаяПартияПоставки КАК МинимальнаяПартияПоставки,
| ДанныеЗаполнения.ИД КАК ИД
|ИЗ
| ДанныеЗаполнения КАК ДанныеЗаполнения
| ЛЕВОЕ СОЕДИНЕНИЕ ЦеныПоставщиков КАК ЦеныПоставщиков
| ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалют
| ПО ЦеныПоставщиков.Валюта = КурсыВалют.Валюта
| ПО ДанныеЗаполнения.Номенклатура = ЦеныПоставщиков.Номенклатура
| И ДанныеЗаполнения.Характеристика = ЦеныПоставщиков.Характеристика
| И ДанныеЗаполнения.ВидЦеныПоставщика = ЦеныПоставщиков.ВидЦеныПоставщика
| ЛЕВОЕ СОЕДИНЕНИЕ УсловияЗакупок КАК УсловияЗакупок
| ПО ДанныеЗаполнения.Номенклатура = УсловияЗакупок.Номенклатура
| И ДанныеЗаполнения.Характеристика = УсловияЗакупок.Характеристика
| И ДанныеЗаполнения.ВидЦеныПоставщика = УсловияЗакупок.ВидЦеныПоставщика
| ЛЕВОЕ СОЕДИНЕНИЕ КурсыВалют КАК КурсыВалютСоглашения
| ПО ЕСТЬNULL(ДанныеЗаполнения.Соглашение.Валюта, ДанныеЗаполнения.СпособОбеспечения.Соглашение.Валюта) = КурсыВалютСоглашения.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтавкиНДСНоменклатуры.СрезПоследних(&Дата) КАК СтавкиНДСНоменклатурыСтраныРегистрации
| ПО ДанныеЗаполнения.Номенклатура = СтавкиНДСНоменклатурыСтраныРегистрации.Номенклатура
| И ДанныеЗаполнения.СпособОбеспечения.Организация.СтранаРегистрации = СтавкиНДСНоменклатурыСтраныРегистрации.Страна
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСтавкиНДС.СрезПоследних(&Дата) КАК ОсновныеСтавкиНДССтраныРегистрации
| ПО ДанныеЗаполнения.СпособОбеспечения.Организация.СтранаРегистрации = ОсновныеСтавкиНДССтраныРегистрации.Страна
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтавкиНДСНоменклатуры.СрезПоследних(&Дата, Страна = &ОсновнаяСтрана ИЛИ Страна = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)) КАК СтавкиНДСНоменклатуры
| ПО ДанныеЗаполнения.Номенклатура = СтавкиНДСНоменклатуры.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСтавкиНДС.СрезПоследних(&Дата, Страна = &ОсновнаяСтрана) КАК ОсновныеСтавкиНДС
| ПО (ИСТИНА)
|";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&КоэффициентУпаковки", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныПоставщиков.Упаковка",
"ЦеныПоставщиков.Номенклатура"));
КурсВалютыУпрУчета = РаботаСКурсамиВалютУТ.ПолучитьКурсВалюты(Константы.ВалютаУправленческогоУчета.Получить(), НачалоДня(ТекущаяДатаСеанса()));
КоэффициентВалютыУпрУчета = КурсВалютыУпрУчета.КурсЧислитель / КурсВалютыУпрУчета.КурсЗнаменатель;
Запрос.УстановитьПараметр("КоэффициентВалютыУпрУчета", КоэффициентВалютыУпрУчета);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СписокТоваровСЦенами = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура;
Структура.Вставить("Номенклатура", ВыборкаДетальныеЗаписи.Номенклатура);
Структура.Вставить("Характеристика", ВыборкаДетальныеЗаписи.Характеристика);
Структура.Вставить("ИД", ВыборкаДетальныеЗаписи.ИД);
Структура.Вставить("ЦенаВВалютеСоглашения", ВыборкаДетальныеЗаписи.ЦенаВВалютеСоглашения);
Структура.Вставить("ЦенаВВалютеУправленческогоУчета", ВыборкаДетальныеЗаписи.ЦенаВВалютеУправленческогоУчета);
Структура.Вставить("ВидЦены", ВыборкаДетальныеЗаписи.ВидЦены);
Структура.Вставить("ВалютаСоглашения", ВыборкаДетальныеЗаписи.ВалютаСоглашения);
Структура.Вставить("УпаковкаЗаказа", ВыборкаДетальныеЗаписи.УпаковкаЗаказа);
Структура.Вставить("МинимальнаяПартияПоставки", ВыборкаДетальныеЗаписи.МинимальнаяПартияПоставки);
СписокТоваровСЦенами.Добавить(Структура);
КонецЦикла;
Возврат СписокТоваровСЦенами;
КонецФункции
#КонецОбласти
#Область ШагРедактированиеЗаказов
&НаСервере
Процедура ПредварительныйПросмотрСоглашениеОбработкаВыбораНаСервере(ВыбранноеЗначение)
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
НовыеЗначения = Новый Структура();
НовыеЗначения.Вставить("Соглашение", ВыбранноеЗначение);
НовыеЗначения.Вставить("МинимальнаяСуммаЗаказа", ПолучитьМинимальнуюСуммуЗаказа(ВыбранноеЗначение));
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
ОбрабатываемыеСтроки = ВыбраннаяСтрока.ПолучитьЭлементы();
Иначе
ОбрабатываемыеСтроки = Новый Массив();
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
СписокТоваров = Новый Массив();
Для Каждого СтрокаДерева Из ОбрабатываемыеСтроки Цикл
Товар = Новый Структура();
Товар.Вставить("Номенклатура", СтрокаДерева.Номенклатура);
Товар.Вставить("Характеристика", СтрокаДерева.Характеристика);
Товар.Вставить("Соглашение", НовыеЗначения.Соглашение);
Товар.Вставить("СпособОбеспечения", СтрокаДерева.СпособОбеспечения);
Товар.Вставить("ИД", СтрокаДерева.ПолучитьИдентификатор());
СписокТоваров.Добавить(Товар);
КонецЦикла;
ЗаполнитьЦеныНаСервере(СписокТоваров, ВыбранноеЗначение);
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаСервере
Процедура ПредварительныйПросмотрПараметрыПоставкиОптимальныеОбработкаВыбораНаСервере(ВыбранноеЗначение)
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
НовыеЗначения = Новый Структура();
НовыеЗначения.Вставить("Соглашение", ВыбранноеЗначение.Соглашение);
НовыеЗначения.Вставить("ИсточникОбеспечения", ВыбранноеЗначение.ИсточникОбеспечения);
НовыеЗначения.Вставить("МинимальнаяСуммаЗаказа",
ПолучитьМинимальнуюСуммуЗаказа(ВыбранноеЗначение.Соглашение));
НовыеЗначения.ИсточникОбеспечения = ?(НовыеЗначения.ИсточникОбеспечения = Неопределено, ТекстНеЗаполнено, НовыеЗначения.ИсточникОбеспечения);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
ОбрабатываемыеСтроки = ВыбраннаяСтрока.ПолучитьЭлементы();
Иначе
ОбрабатываемыеСтроки = Новый Массив();
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
Если ВыбраннаяСтрока.ТипОбеспечения = Перечисления.ТипыОбеспечения.Покупка Тогда
СписокТоваров = Новый Массив();
Для Каждого СтрокаДерева Из ОбрабатываемыеСтроки Цикл
Товар = Новый Структура();
Товар.Вставить("Номенклатура", СтрокаДерева.Номенклатура);
Товар.Вставить("Характеристика", СтрокаДерева.Характеристика);
Товар.Вставить("Соглашение", НовыеЗначения.Соглашение);
Товар.Вставить("СпособОбеспечения", СтрокаДерева.СпособОбеспечения);
Товар.Вставить("ИД", СтрокаДерева.ПолучитьИдентификатор());
СписокТоваров.Добавить(Товар);
КонецЦикла;
ЗаполнитьЦеныНаСервере(СписокТоваров, ВыбранноеЗначение.Соглашение);
КонецЕсли;
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаСервере
Процедура ПредварительныйПросмотрСпособОбеспеченияОбработкаВыбораНаСервере(ВыбранноеЗначение)
СвойстваЗаказа = ПолучитьИсточникИСоглашение(ВыбранноеЗначение);
НовыеЗначения = Новый Структура;
НовыеЗначения.Вставить("СпособОбеспечения", ВыбранноеЗначение);
НовыеЗначения.Вставить("Соглашение", СвойстваЗаказа.Соглашение);
НовыеЗначения.Вставить("ИсточникОбеспечения", СвойстваЗаказа.ИсточникОбеспеченияПотребностей);
НовыеЗначения.Вставить("ТипОбеспечения", СвойстваЗаказа.ТипОбеспечения);
НовыеЗначения.Вставить("МинимальнаяСуммаЗаказа", ПолучитьМинимальнуюСуммуЗаказа(СвойстваЗаказа.Соглашение));
НовыеЗначения.Вставить("ИсточникОбеспеченияТолькоПросмотр", ?(НовыеЗначения.ИсточникОбеспечения = Неопределено, Ложь, Истина));
НовыеЗначения.ИсточникОбеспечения = ?(НовыеЗначения.ИсточникОбеспечения = Неопределено, ТекстНеЗаполнено, НовыеЗначения.ИсточникОбеспечения);
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
ОбрабатываемыеСтроки = ВыбраннаяСтрока.ПолучитьЭлементы();
Иначе
ОбрабатываемыеСтроки = Новый Массив();
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
СписокТоваров = Новый Массив();
Для Каждого СтрокаДерева Из ОбрабатываемыеСтроки Цикл
Товар = Новый Структура();
Товар.Вставить("Номенклатура", СтрокаДерева.Номенклатура);
Товар.Вставить("Характеристика", СтрокаДерева.Характеристика);
Товар.Вставить("Соглашение", НовыеЗначения.Соглашение);
Товар.Вставить("СпособОбеспечения", НовыеЗначения.СпособОбеспечения);
Товар.Вставить("ИД", СтрокаДерева.ПолучитьИдентификатор());
СписокТоваров.Добавить(Товар);
КонецЦикла;
ЗаполнитьЦеныНаСервере(СписокТоваров, СвойстваЗаказа.Соглашение);
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаСервере
Процедура ПредварительныйПросмотрСкладОбработкаВыбораНаСервере(ВыбранноеЗначение)
НовыеЗначения = Новый Структура();
НовыеЗначения.Вставить("Склад", ВыбранноеЗначение);
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Элементы.ПредварительныйПросмотр.ТекущаяСтрока);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
ОбрабатываемыеСтроки = ВыбраннаяСтрока.ПолучитьЭлементы();
Иначе
ОбрабатываемыеСтроки = Новый Массив();
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаСервере
Процедура ВыборСкладаЗавершениеНаСервере(Склад)
НовыеЗначения = Новый Структура();
НовыеЗначения.Вставить("Склад", Склад);
Заказы = Новый Соответствие();
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого Идентификатор Из Элементы.ПредварительныйПросмотр.ВыделенныеСтроки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
Заказы.Вставить(ВыбраннаяСтрока, Ложь);
Строки = ВыбраннаяСтрока.ПолучитьЭлементы();
Для Каждого Строка Из Строки Цикл
ОбрабатываемыеСтроки.Добавить(Строка);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого Идентификатор Из Элементы.ПредварительныйПросмотр.ВыделенныеСтроки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве <> 0 Тогда
РодительСтроки = ВыбраннаяСтрока.ПолучитьРодителя();
Если Заказы.Получить(РодительСтроки) = Неопределено Тогда
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаСервере
Процедура ВыборСпособаОбеспеченияЗавершениеНаСервере(Способ)
СвойстваЗаказа = ПолучитьИсточникИСоглашение(Способ);
НовыеЗначения = Новый Структура();
НовыеЗначения.Вставить("СпособОбеспечения", Способ);
НовыеЗначения.Вставить("Соглашение", СвойстваЗаказа.Соглашение);
НовыеЗначения.Вставить("ИсточникОбеспечения", СвойстваЗаказа.ИсточникОбеспеченияПотребностей);
НовыеЗначения.Вставить("ТипОбеспечения", СвойстваЗаказа.ТипОбеспечения);
НовыеЗначения.Вставить("МинимальнаяСуммаЗаказа", ПолучитьМинимальнуюСуммуЗаказа(СвойстваЗаказа.Соглашение));
НовыеЗначения.Вставить("ИсточникОбеспеченияТолькоПросмотр", ?(НовыеЗначения.ИсточникОбеспечения = Неопределено, Ложь, Истина));
НовыеЗначения.ИсточникОбеспечения = ?(НовыеЗначения.ИсточникОбеспечения = Неопределено, ТекстНеЗаполнено, НовыеЗначения.ИсточникОбеспечения);
Заказы = Новый Соответствие();
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого Идентификатор Из Элементы.ПредварительныйПросмотр.ВыделенныеСтроки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
Заказы.Вставить(ВыбраннаяСтрока, Ложь);
Строки = ВыбраннаяСтрока.ПолучитьЭлементы();
Для Каждого Строка Из Строки Цикл
ОбрабатываемыеСтроки.Добавить(Строка);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого Идентификатор Из Элементы.ПредварительныйПросмотр.ВыделенныеСтроки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве <> 0 Тогда
РодительСтроки = ВыбраннаяСтрока.ПолучитьРодителя();
Если Заказы.Получить(РодительСтроки) = Неопределено Тогда
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СписокТоваров = Новый Массив();
Для Каждого СтрокаДерева Из ОбрабатываемыеСтроки Цикл
Товар = Новый Структура();
Товар.Вставить("Номенклатура", СтрокаДерева.Номенклатура);
Товар.Вставить("Характеристика", СтрокаДерева.Характеристика);
Товар.Вставить("Соглашение", НовыеЗначения.Соглашение);
Товар.Вставить("СпособОбеспечения", НовыеЗначения.СпособОбеспечения);
Товар.Вставить("ИД", СтрокаДерева.ПолучитьИдентификатор());
СписокТоваров.Добавить(Товар);
КонецЦикла;
ЗаполнитьЦеныНаСервере(СписокТоваров, НовыеЗначения.Соглашение);
ИзменитьСтрокиВТабличныхЧастяхНаСервере(ОбрабатываемыеСтроки, НовыеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтогиПоЗаказу(СтрокаЗаказа)
СтрокаЗаказа.Потребность = 0;
СтрокаЗаказа.КЗаказу = 0;
СтрокаЗаказа.СуммаВалютаСоглашения = 0;
СтрокаЗаказа.СтрокВЗаказе = 0;
СтрокаЗаказа.Вес = 0;
Для Каждого СтрокаТовар Из СтрокаЗаказа.ПолучитьЭлементы() Цикл
СтрокаТовар.СуммаВалютаСоглашения = СтрокаТовар.КЗаказу * СтрокаТовар.ЦенаВВалютеСоглашения;
СтрокаЗаказа.Потребность = СтрокаЗаказа.Потребность + СтрокаТовар.Потребность;
СтрокаЗаказа.КЗаказу = СтрокаЗаказа.КЗаказу + СтрокаТовар.КЗаказу;
СтрокаЗаказа.СуммаВалютаСоглашения = СтрокаЗаказа.СуммаВалютаСоглашения + СтрокаТовар.СуммаВалютаСоглашения;
СтрокаЗаказа.СтрокВЗаказе = СтрокаЗаказа.СтрокВЗаказе + СтрокаТовар.СтрокВЗаказе;
СтрокаЗаказа.Вес = СтрокаЗаказа.Вес + СтрокаТовар.Вес;
КонецЦикла;
Если СтрокаЗаказа.МинимальнаяСуммаЗаказа > 0 И СтрокаЗаказа.МинимальнаяСуммаЗаказа > СтрокаЗаказа.СуммаВалютаСоглашения Тогда
СтрокаЗаказа.Предупреждение = Истина;
Иначе
СтрокаЗаказа.Предупреждение = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьНадписьПредупреждения(Элемент)
Если Элемент.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Элемент.ТекущиеДанные.УровеньВДереве = 0 Тогда
СтрокаЗаказа = Элемент.ТекущиеДанные;
Иначе
СтрокаЗаказа = Элемент.ТекущиеДанные.ПолучитьРодителя();
КонецЕсли;
СуммаЗаказа = Формат(СтрокаЗаказа.СуммаВалютаСоглашения, "ЧДЦ=2; ЧН=0,00");
СуммаСоглашения = Формат(СтрокаЗаказа.МинимальнаяСуммаЗаказа, "ЧДЦ=2; ЧН=0,00");
СуммаКДозаказу = Формат(СтрокаЗаказа.МинимальнаяСуммаЗаказа - СтрокаЗаказа.СуммаВалютаСоглашения, "ЧДЦ=2; ЧН=0,00");
ВалютаСоглашения = Строка(СтрокаЗаказа.ВалютаСоглашения);
Если СтрокаЗаказа.Предупреждение Тогда
ТекстПредупреждения = НСтр("ru='Минимальная сумма заказа по соглашению %1, текущая сумма %2'");
ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + НСтр("ru='Рекомендуется увеличить сумму заказа на %3'");
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", СуммаСоглашения + " " + ВалютаСоглашения);
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%2", СуммаЗаказа + " " + ВалютаСоглашения);
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%3", СуммаКДозаказу + " " + ВалютаСоглашения);
Иначе
ТекстПредупреждения = "";
КонецЕсли;
Элементы.СтрокаПредупреждение.Заголовок = ТекстПредупреждения;
КонецПроцедуры
&НаСервере
Процедура ИзменитьСтрокиВТабличныхЧастяхНаСервере(СтрокиДерева, НовыеЗначения)
ЗаполняемыеПоля =
"ВалютаСоглашения,
|ВидЦены,
|ИсточникОбеспечения,
|ИсточникОбеспеченияТолькоПросмотр,
|МинимальнаяСуммаЗаказа,
|МинимальнаяПартияПоставки,
|ПеремещениеРазрешено,
|Склад,
|Соглашение,
|СпособОбеспечения,
|ТипОбеспечения,
|ЦенаВВалютеСоглашения,
|ЦенаВВалютеУправленческогоУчета";
Ключ = "СпособОбеспечения,ИсточникОбеспечения,Соглашение,Склад,Номенклатура,Характеристика";
ТаблицаЗапасы = Объект.Запасы.Выгрузить(, Ключ);
ТаблицаЗаказыКОбеспечению = Объект.ЗаказыКОбеспечению.Выгрузить(, Ключ);
ТаблицаЗапасы.Индексы.Добавить(Ключ);
ТаблицаЗаказыКОбеспечению.Индексы.Добавить(Ключ);
ПараметрыОтбора = Новый Структура(Ключ);
Для Каждого СтрокаДерева Из СтрокиДерева Цикл
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаДерева);
Если ПараметрыОтбора.ИсточникОбеспечения = Неопределено Тогда
ПараметрыОтбора.ИсточникОбеспечения = ТекстНеЗаполнено;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДерева, НовыеЗначения);
КЗаказу = 0;
НайденныеСтроки = ТаблицаЗапасы.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Строка = Объект.Запасы[ТаблицаЗапасы.Индекс(НайденнаяСтрока)];
ЗаполнитьЗначенияСвойств(Строка, СтрокаДерева, ЗаполняемыеПоля);
ПересчитатьОкруглениеСервер(Строка, Истина);
КЗаказу = КЗаказу + Строка.Округлено;
КонецЦикла;
НайденныеСтроки = ТаблицаЗаказыКОбеспечению.НайтиСтроки(ПараметрыОтбора);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Строка = Объект.ЗаказыКОбеспечению[ТаблицаЗаказыКОбеспечению.Индекс(НайденнаяСтрока)];
ЗаполнитьЗначенияСвойств(Строка, СтрокаДерева, ЗаполняемыеПоля);
ПересчитатьОкруглениеСервер(Строка, Ложь);
КЗаказу = КЗаказу + Строка.Округлено;
КонецЦикла;
СтрокаДерева.КЗаказу = КЗаказу;
СтрокаДерева.СуммаВалютаСоглашения = СтрокаДерева.КЗаказу * СтрокаДерева.ЦенаВВалютеСоглашения;
СтрокаДерева.СуммаУпрУчет = СтрокаДерева.КЗаказу * СтрокаДерева.ЦенаВВалютеУправленческогоУчета;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ИзмемнитьПоложениеСтрокИГруппировокВДереве(Строки)
Заказы = Новый Соответствие();
Для Каждого Идентификатор Из Строки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве = 0 Тогда
Заказы.Вставить(ВыбраннаяСтрока, Ложь);
КонецЕсли;
КонецЦикла;
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого Идентификатор Из Строки Цикл
ВыбраннаяСтрока = ПредварительныйПросмотр.НайтиПоИдентификатору(Идентификатор);
Если ВыбраннаяСтрока.УровеньВДереве <> 0 Тогда
РодительСтроки = ВыбраннаяСтрока.ПолучитьРодителя();
Если Заказы.Получить(РодительСтроки) = Неопределено Тогда
ОбрабатываемыеСтроки.Добавить(ВыбраннаяСтрока);
КонецЕсли;
Иначе
ПодчиненныеСтроки = ВыбраннаяСтрока.ПолучитьЭлементы();
Для Каждого ПодчиненнаяСтрока Из ПодчиненныеСтроки Цикл
ОбрабатываемыеСтроки.Добавить(ПодчиненнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого РедактируемаяСтрока Из ОбрабатываемыеСтроки Цикл
НайденЗаказ = Ложь;
СтарыйЗаказ = РедактируемаяСтрока.ПолучитьРодителя();
Заказы.Вставить(СтарыйЗаказ, Ложь);
Если СтарыйЗаказ.ИсточникОбеспечения = РедактируемаяСтрока.ИсточникОбеспечения
И СтарыйЗаказ.Склад = РедактируемаяСтрока.Склад
И СтарыйЗаказ.Соглашение = РедактируемаяСтрока.Соглашение Тогда
Продолжить;
КонецЕсли;
ВсеЗаказы = ПредварительныйПросмотр.ПолучитьЭлементы();
Для Каждого Заказ Из ВсеЗаказы Цикл
Если Заказ.ИсточникОбеспечения = РедактируемаяСтрока.ИсточникОбеспечения
И Заказ.Склад = РедактируемаяСтрока.Склад
И Заказ.Соглашение = РедактируемаяСтрока.Соглашение Тогда
Заказы.Вставить(Заказ, Ложь);
НоваяСтрока = Неопределено;
СтрокиЗаказа = Заказ.ПолучитьЭлементы();
Для Каждого ТекЭлемент Из СтрокиЗаказа Цикл
Если ТекЭлемент.СпособОбеспечения = РедактируемаяСтрока.СпособОбеспечения
И ТекЭлемент.Номенклатура = РедактируемаяСтрока.Номенклатура
И ТекЭлемент.Характеристика = РедактируемаяСтрока.Характеристика Тогда
НоваяСтрока = ТекЭлемент;
НоваяСтрока.КЗаказу = НоваяСтрока.КЗаказу + РедактируемаяСтрока.КЗаказу;
НоваяСтрока.Потребность = НоваяСтрока.Потребность + РедактируемаяСтрока.Потребность;
НоваяСтрока.Вес = НоваяСтрока.Вес + РедактируемаяСтрока.Вес;
НоваяСтрока.СуммаВалютаСоглашения = НоваяСтрока.СуммаВалютаСоглашения + РедактируемаяСтрока.СуммаВалютаСоглашения;
Если Элементы.ПредварительныйПросмотр.ТекущаяСтрока = РедактируемаяСтрока.ПолучитьИдентификатор() Тогда
Элементы.ПредварительныйПросмотр.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если НоваяСтрока = Неопределено Тогда
НоваяСтрока = СтрокиЗаказа.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, РедактируемаяСтрока);
Конецесли;
ДанныеСтарогоЗаказа = СтарыйЗаказ.ПолучитьЭлементы();
ДанныеСтарогоЗаказа.Удалить(РедактируемаяСтрока);
НайденЗаказ = Истина;
КонецЕсли;
КонецЦикла;
Если Не НайденЗаказ Тогда
НовыйЗаказ = ВсеЗаказы.Добавить();
ЗаполнитьЗначенияСвойств(НовыйЗаказ, РедактируемаяСтрока, "Соглашение, ИсточникОбеспечения, СпособОбеспечения,
|ТипОбеспечения, ВалютаСоглашения, Склад, МинимальнаяСуммаЗаказа, ИсточникОбеспеченияТолькоПросмотр,ПеремещениеРазрешено");
НовыйЗаказ.УровеньВДереве = 0;
Заказы.Вставить(НовыйЗаказ, Ложь);
НоваяСтрока = НовыйЗаказ.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, РедактируемаяСтрока);
Если Элементы.ПредварительныйПросмотр.ТекущаяСтрока = РедактируемаяСтрока.ПолучитьИдентификатор() Тогда
Элементы.ПредварительныйПросмотр.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
КонецЕсли;
СтарыйЗаказ.ПолучитьЭлементы().Удалить(РедактируемаяСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из Заказы Цикл
Заказ = Элемент.Ключ;
СтрокиЗаказа = Заказ.ПолучитьЭлементы();
Если СтрокиЗаказа.Количество() = 0 Тогда
ПредварительныйПросмотр.ПолучитьЭлементы().Удалить(Заказ);
Иначе
Заказ.МинимальнаяСуммаЗаказа = СтрокиЗаказа[0].МинимальнаяСуммаЗаказа;
ПересчитатьИтогиПоЗаказу(Заказ);
КонецЕсли;
КонецЦикла;
РассчитатьИтоги();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСвойстваСворачиваемойГруппы(ЭлементГруппа, КартинкаГруппы, ГруппаСвернута)
ЭлементГруппа.Видимость = ГруппаСвернута;
Если ГруппаСвернута Тогда
КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВниз;
Иначе
КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВправо;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьПредупреждение()
СвернутаГруппаПредупреждение = НЕ Элементы.ГруппаПредупреждение.Видимость;
УстановитьСвойстваСворачиваемойГруппы(
Элементы.ГруппаПредупреждение,
Элементы.ПоказатьСкрытьПредупреждения,
СвернутаГруппаПредупреждение);
КонецПроцедуры
&НаКлиенте
Функция ПодготовитьСтруктуруСтроки()
СтруктураСтроки = Новый Структура("СпособОбеспечения, ИсточникОбеспечения, Соглашение, Склад, Номенклатура,
|Характеристика, КЗаказу, УпаковкаЗаказа, ЕдиницаИзмерения, ЧислительУпаковки, ЗнаменательУпаковки,
|НомерСтроки, Отметка, Назначение, ЦенаВВалютеСоглашения, ВалютаСоглашения, Потребность");
Возврат СтруктураСтроки;
КонецФункции
&НаКлиенте
Процедура ЗавершитьРедактированиеКоличества(Ответ, ДополнительныеПараметры) Экспорт
Вес = 0;
Если Ответ = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого Строка Из Ответ.Строки Цикл
ПараметрыПоиска = Новый Структура("НомерСтроки");
ЗаполнитьЗначенияСвойств(ПараметрыПоиска, Строка);
Если Строка.ЭтоЗапас Тогда
НайденныеСтроки = Объект.Запасы.НайтиСтроки(ПараметрыПоиска);
Иначе
НайденныеСтроки = Объект.ЗаказыКОбеспечению.НайтиСтроки(ПараметрыПоиска);
КонецЕсли;
Для Каждого Эл Из НайденныеСтроки Цикл
Эл.КЗаказу = Строка.КЗаказу;
Эл.Округлено = 0;
Эл.УпаковкаЗаказа = Строка.УпаковкаЗаказа;
Эл.МинимальнаяПартияПоставки = 0;
Эл.Отметка = Истина;
Эл.НеОкруглятьПередСозданиемЗаказа = Ответ.ЕстьИзменения;
Вес = Эл.Вес;
КонецЦикла;
Если НайденныеСтроки.Количество() = 0 Тогда
НовСтр = Объект.ЗаказыКОбеспечению.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, Эл);
НовСтр.Назначение = Неопределено;
НовСтр.Заказ = Неопределено;
НовСтр.Требуется = 0;
НовСтр.КЗаказу = Строка.КЗаказу;
НовСтр.НеОкруглятьПередСозданиемЗаказа = Ответ.ЕстьИзменения;
ЗаполнитьДеревоИндексов(Ложь);
КонецЕсли;
КонецЦикла;
СтрокаДерева = ПредварительныйПросмотр.НайтиПоИдентификатору(Ответ.НомерСтрокиДерева);
СтрокаДерева.КЗаказу = Ответ.Итого;
СтрокаДерева.УпаковкаЗаказа = Строка.УпаковкаЗаказа;
СтрокаДерева.Вес = СтрокаДерева.КЗаказу * Вес;
ПересчитатьИтогиПоЗаказу(СтрокаДерева.ПолучитьРодителя());
РассчитатьИтоги();
СформироватьНадписьПредупреждения(Элементы.ПредварительныйПросмотр);
КонецПроцедуры
&НаКлиенте
Процедура ВыборСкладаЗавершение(Склад, ДополнительныеПараметры) Экспорт
Если Склад = Неопределено Тогда
Возврат;
КонецЕсли;
ВыборСкладаЗавершениеНаСервере(Склад);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Элементы.ПредварительныйПросмотр.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ВыборСпособаОбеспеченияЗавершение(Способ, ДополнительныеПараметры) Экспорт
Если Способ = Неопределено Тогда
Возврат;
КонецЕсли;
ВыборСпособаОбеспеченияЗавершениеНаСервере(Способ);
ИзмемнитьПоложениеСтрокИГруппировокВДереве(Элементы.ПредварительныйПросмотр.ВыделенныеСтроки);
КонецПроцедуры
#КонецОбласти
#Область ШагСформированныеЗаказы
&НаСервере
Процедура УстановитьСтатусНаСервере(МассивСсылок, Статус)
ШаблонОшибкиЗаблокировать = НСтр("ru='Не удалось заблокировать %1. %2'");
ШаблонОшибкиЗаписать = НСтр("ru='Не удалось записать %1. %2'");
Для Каждого Элемент Из МассивСсылок Цикл
Попытка
ЗаблокироватьДанныеДляРедактирования(Элемент.Ссылка);
Исключение
ТекстОшибки = СтрШаблон(ШаблонОшибкиЗаблокировать, Элемент.Ссылка, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Элемент.Ссылка);
Продолжить;
КонецПопытки;
ДокументОбъект = Элемент.Ссылка.ПолучитьОбъект();
Если Не ДокументОбъект.УстановитьСтатус(Статус, Неопределено) Тогда
Продолжить;
КонецЕсли;
Попытка
ДокументОбъект.Записать(?(ДокументОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
СтрокаТаблицы = ТаблицаДокументы.НайтиПоИдентификатору(Элемент.ИдентификаторСтроки);
СтрокаТаблицы.Статус = ДокументОбъект.Статус;
Исключение
ТекстОшибки = СтрШаблон(ШаблонОшибкиЗаписать, Элемент.Ссылка, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Элемент.Ссылка);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
#Область СлужебныеПроцедурыСозданияЗаказов
&НаСервере
Процедура ВыгрузитьОтмеченныеКЗаказу(Таблица, ИмяТаблицы)
Для Каждого Строка Из Объект[ИмяТаблицы] Цикл
Если Строка.Отметка И Строка.КЗаказу > 0 Тогда
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ПродолжитьСДругимиОтборамиНаСервере()
Объект.Запасы.Очистить();
Объект.ЗаказыКобеспечению.Очистить();
Объект.СпособыОбеспечения.Очистить();
ТаблицаДокументы.Очистить();
СформированныеЗаказы.Очистить();
УстановитьСтраницыПомощника("ШагОтборПотребностей");
КонецПроцедуры
&НаСервере
Процедура ОбновитьРеквизитыТаблицыДокументов(Ссылка)
ПараметрыОтбора = Новый Структура("Документ", Ссылка);
МассивНайденныхСтрок = ТаблицаДокументы.НайтиСтроки(ПараметрыОтбора);
Если МассивНайденныхСтрок.Количество() > 0 Тогда
НовыеЗначенияРеквизитов = ПолучитьЗначенияРеквизитовДокументаИзСсылки(Ссылка);
ЗаполнитьЗначенияСвойств(МассивНайденныхСтрок[0], НовыеЗначенияРеквизитов);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ТекстЗапросаПоТипуДокумента(ТипДокумента)
Если ТипДокумента = Тип("ДокументСсылка.ЗаказНаСборку") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.Склад) КАК ИсточникОбеспечения,
| 0 КАК Сумма,
| 0 КАК Валюта,
| МАКСИМУМ(Т.ОкончаниеСборкиРазборки) КАК ДатаПоставки,
| МИНИМУМ(Т.ОкончаниеСборкиРазборки) КАК ДатаПоставкиМинимум
|ИЗ
| Документ.ЗаказНаСборку КАК Т
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|СГРУППИРОВАТЬ ПО
| Т.Ссылка";
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказНаПеремещение") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.СкладОтправитель) КАК ИсточникОбеспечения,
| 0 КАК Сумма,
| 0 КАК Валюта,
| МАКСИМУМ(ЗаказТовары.ОкончаниеПоступления) КАК ДатаПоставки,
| МИНИМУМ(ЗаказТовары.ОкончаниеПоступления) КАК ДатаПоставкиМинимум
|ИЗ
| Документ.ЗаказНаПеремещение КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПеремещение.Товары КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = Т.Ссылка
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|СГРУППИРОВАТЬ ПО
| Т.Ссылка";
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.Партнер) КАК ИсточникОбеспечения,
| МАКСИМУМ(Т.СуммаДокумента) КАК Сумма,
| МАКСИМУМ(Т.Валюта) КАК Валюта,
| МАКСИМУМ(ЗаказТовары.ДатаПоступления) КАК ДатаПоставки,
| МИНИМУМ(ЗаказТовары.ДатаПоступления) КАК ДатаПоставкиМинимум
|ИЗ
| Документ.ЗаказПоставщику КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = Т.Ссылка
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|СГРУППИРОВАТЬ ПО
| Т.Ссылка";
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказМатериаловВПроизводство") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.Склад) КАК ИсточникОбеспечения,
| 0 КАК Сумма,
| 0 КАК Валюта,
| МАКСИМУМ(ЗаказТовары.ОкончаниеПоступления) КАК ДатаПоставки,
| МИНИМУМ(ЗаказТовары.ОкончаниеПоступления) КАК ДатаПоставкиМинимум
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство.Товары КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = Т.Ссылка
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|СГРУППИРОВАТЬ ПО
| Т.Ссылка";
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказПереработчику") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.Партнер) КАК ИсточникОбеспечения,
| МАКСИМУМ(Т.СуммаДокумента) КАК Сумма,
| МАКСИМУМ(Т.Валюта) КАК Валюта,
| МАКСИМУМ(
| ЗаказТовары.ДатаПоступления
| ) КАК ДатаПоставки,
| МИНИМУМ(
| ЗаказТовары.ДатаПоступления
| ) КАК ДатаПоставкиМинимум
|ИЗ
| Документ.ЗаказПереработчику КАК Т
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПереработчику.Продукция КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = Т.Ссылка
|
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|СГРУППИРОВАТЬ ПО
| Т.Ссылка";
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ЗаказПереработчику2_5") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Т.Ссылка КАК Документ,
| МАКСИМУМ(Т.Статус) КАК Статус,
| МАКСИМУМ(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 0
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК СтандартнаяКартинка,
| МАКСИМУМ(Т.Организация) КАК Организация,
| МАКСИМУМ(Т.Партнер) КАК ИсточникОбеспечения,
| МАКСИМУМ(Т.СуммаДокумента) КАК Сумма,
| МАКСИМУМ(Т.Валюта) КАК Валюта,
| МАКСИМУМ(
| ЗаказТовары.ДатаПоступления
| ) КАК ДатаПоставки,
| МИНИМУМ(
| ЗаказТовары.ДатаПоступления
| ) КАК ДатаПоставкиМинимум,
| МАКСИМУМ(ВЫБОР КОГДА Т.Проведен И Т.Статус В(
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.КОбеспечению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.КИсполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПереработчикам.Закрыт)) ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ) КАК НеПоставленВГрафик,
| 0 КАК НеПоставленВГрафикПроизводства
|ИЗ
| Документ.ЗаказПереработчику2_5 КАК Т
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПереработчику2_5.ВыходныеИзделия КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = Т.Ссылка
|ГДЕ
| Т.Ссылка В (&СсылкиНаДокументы)
|
|СГРУППИРОВАТЬ ПО
| Т.Ссылка
|";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьЗначенияРеквизитовДокументаИзСсылки(ДокументСсылка)
Запрос = Новый Запрос(ТекстЗапросаПоТипуДокумента(ТипЗнч(ДокументСсылка)));
Запрос.УстановитьПараметр("СсылкиНаДокументы", ДокументСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ЗначенияРеквизитов = Новый Структура("
|Документ,
|Статус,
|СтандартнаяКартинка,
|Организация,
|ИсточникОбеспечения,
|ДатаПоставки,
|Сумма,
|Валюта");
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитов, Выборка);
Если ЗначенияРеквизитов.ДатаПоставки <> Выборка.ДатаПоставкиМинимум Тогда
ЗначенияРеквизитов.ДатаПоставки = '00010101';
КонецЕсли;
Возврат ЗначенияРеквизитов;
КонецФункции
&НаСервере
Процедура ОбновитьЗначенияРеквизитовТаблицыДокументов()
ИспользуемыеТипы = Новый Массив;
СсылкиНаДокументы = Новый Массив;
МассивЗапросов = Новый Массив;
Для каждого СтрокаТаблицы Из ТаблицаДокументы Цикл
ТипДокумента = ТипЗнч(СтрокаТаблицы.Документ);
СсылкиНаДокументы.Добавить(СтрокаТаблицы.Документ);
Если ИспользуемыеТипы.Найти(ТипДокумента) = Неопределено Тогда
ИспользуемыеТипы.Добавить(ТипДокумента);
МассивЗапросов.Добавить(ТекстЗапросаПоТипуДокумента(ТипДокумента));
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос(СтрСоединить(МассивЗапросов, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении()));
Запрос.УстановитьПараметр("СсылкиНаДокументы", СсылкиНаДокументы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивНайденныхСтрок = ТаблицаДокументы.НайтиСтроки(Новый Структура("Документ", Выборка.Документ));
Если МассивНайденныхСтрок.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(МассивНайденныхСтрок[0], Выборка);
Если МассивНайденныхСтрок[0].ДатаПоставки <> Выборка.ДатаПоставкиМинимум Тогда
МассивНайденныхСтрок[0].ДатаПоставки = '00010101';
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ЛогикаРаботыФормы
&НаСервере
Функция ДалееКШагуНастройкаСпособовОбеспеченияНаСервере(Результат)
ТаблицаСпособов = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ЗначениеЗаполнено(ТаблицаСпособов) Тогда
Объект.СпособыОбеспечения.Загрузить(ТаблицаСпособов);
УстановитьСтраницыПомощника("ШагНастройкаСпособовОбеспечения");
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция ДалееКШагуЗапасы(Результат)
ОчиститьОтборыЗапасы();
Объект.Запасы.Очистить();
Таблица = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если Не ЗначениеЗаполнено(Таблица) Тогда
Возврат Ложь;
КонецЕсли;
ЭтоПервоеСообщениеМинЗапас = Истина;
ЭтоПервоеСообщениеМаксЗапас = Истина;
ЭтоПервоеСообщениеИнтервал = Истина;
Для Каждого Товар Из Таблица Цикл
СтрокаЗапасы = Объект.Запасы.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, Товар);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.МинимальныйИМаксимальныйЗапасы(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.КоличествоКЗаказуДляПоддержанияЗапаса(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
РезультатРасчета = Обработки.ОбеспечениеПотребностей.УровеньЗапасаИКартинкаСменитьМетод(СтрокаЗапасы);
ЗаполнитьЗначенияСвойств(СтрокаЗапасы, РезультатРасчета);
СтрокаЗапасы.КЗаказуРекомендуется = СтрокаЗапасы.КЗаказу;
СтрокаЗапасы.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(СтрокаЗапасы.ИсточникОбеспечения, ТекстНеЗаполнено);
Если Товар.ОшибкаРасчетаИнтервалаДоДатыПоставки
И Не Товар.ОшибкаУстановкиИнтервалаДоДатыПоставки И ЭтоПервоеСообщениеМинЗапас Тогда
ТекстСообщения = НСтр("ru = 'Не заполнен график работы склада до даты поставки. Для расчета минимального запаса все дни до даты поставки посчитаны рабочими.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
ЭтоПервоеСообщениеМинЗапас = Ложь;
КонецЕсли;
Если Товар.ОшибкаРасчетаИнтервалаМеждуПоставками
И Не Товар.ОшибкаУстановкиИнтервалаМеждуПоставками И ЭтоПервоеСообщениеМаксЗапас Тогда
ТекстСообщения = НСтр("ru = 'Не заполнен график работы склада до границы обеспечиваемого периода. Для расчета максимального запаса все дни от даты поставки до границы обеспечиваемого периода посчитаны рабочими.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
ЭтоПервоеСообщениеМаксЗапас = Ложь;
КонецЕсли;
Если Товар.ОшибкаУстановкиИнтервалаМеждуПоставками И ЭтоПервоеСообщениеИнтервал Тогда
ТекстСообщения = НСтр("ru = 'Не заполнены даты поставки и/или граница обеспечиваемого периода. Максимальный запас в таких строках не рассчитан'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
ЭтоПервоеСообщениеИнтервал = Ложь;
КонецЕсли;
КонецЦикла;
ЗаполнитьДеревоИндексов(Истина);
Для Каждого Строка Из Объект.Запасы Цикл
Если Строка.Отметка Тогда
СоответствиеСтрок = Новый Соответствие();
СоответствиеСтрок.Вставить(Строка, Истина);
ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки);
КонецЕсли;
КонецЦикла;
РассчитатьИтогиНаСервере();
УстановитьСтраницыПомощника("ШагЗапасы");
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКШагуЗаказы(Результат)
Таблица = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если Не ЗначениеЗаполнено(Таблица) Тогда
Возврат Ложь;
КонецЕсли;
Если Не ИспользоватьЗаказыПоставщикам Тогда
ЕстьОшибки = Ложь;
ПустыеСпособы = Объект.Запасы.НайтиСтроки(Новый Структура("СпособОбеспечения", Справочники.СпособыОбеспеченияПотребностей.ПустаяСсылка()));
Для Каждого Строка Из ПустыеСпособы Цикл
Если Строка.КЗаказу > 0 И Строка.Отметка Тогда
ЕстьОшибки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьОшибки Тогда
СообщитьОбОшибкеНезаполненногоСпособаОбеспечения(ПустыеСпособы);
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Объект.ЗаказыКОбеспечению.Загрузить(Таблица);
ЕстьРаботы = Ложь;
ЕстьТовары = Ложь;
Для Каждого СтрокаЗаказы Из Объект.ЗаказыКОбеспечению Цикл
РезультатРасчета = Обработки.ОбеспечениеПотребностей.КоличествоКЗаказуДляОбеспеченияЗаказов(СтрокаЗаказы);
ЗаполнитьЗначенияСвойств(СтрокаЗаказы, РезультатРасчета);
СтрокаЗаказы.КЗаказуРекомендуется = СтрокаЗаказы.КЗаказу;
СтрокаЗаказы.Обеспечено = СтрокаЗаказы.КРезервированию;
СтрокаЗаказы.Получатель = ?(СтрокаЗаказы.ЭтоРабота, СтрокаЗаказы.ПодразделениеПолучатель, СтрокаЗаказы.Склад);
ЗаполнитьРасчетныеПоляСтрокиЗаказы(СтрокаЗаказы, КэшированныеЗначения);
СтрокаЗаказы.ИсточникОбеспечения = ОбработатьПустойИсточникОбеспечения(СтрокаЗаказы.ИсточникОбеспечения, ТекстНеЗаполнено);
ЕстьРаботы = ЕстьРаботы Или СтрокаЗаказы.ЭтоРабота;
ЕстьТовары = ЕстьТовары Или Не СтрокаЗаказы.ЭтоРабота;
КонецЦикла;
ОчиститьОтборыЗаказы();
Элементы.Получатель.Заголовок = ?(ЕстьРаботы И ЕстьТовары, НСтр("ru = 'Получатель'"),
?(ЕстьРаботы, НСтр("ru = 'Подразделение-получатель'"), НСтр("ru = 'Склад'")));
Элементы.Получатель.Видимость = ИспользоватьНесколькоСкладов Или ЕстьРаботы;
ЗаполнитьДеревоИндексов(Ложь);
СоответствиеСтрок = Новый Соответствие();
Коллекция = ИндексыПоиска.ПолучитьЭлементы();
Для Каждого Корень Из Коллекция Цикл
СоответствиеСтрок.Очистить();
Строки = Корень.ПолучитьЭлементы();
Для Каждого СтрокаДерева Из Строки Цикл
ТаблицаФормы = ?(СтрокаДерева.ТаблицаЗапасы, Объект.Запасы, Объект.ЗаказыКОбеспечению);
СтрокаТаблицы = ТаблицаФормы.НайтиПоИдентификатору(СтрокаДерева.ИДСтроки);
Если СтрокаТаблицы.Отметка Тогда
СоответствиеСтрок.Вставить(СтрокаТаблицы, СтрокаДерева.ТаблицаЗапасы);
КонецЕсли;
КонецЦикла;
ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки);
КонецЦикла;
РассчитатьИтогиНаСервере();
УстановитьСтраницыПомощника("ШагЗаказы");
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКШагуРедактированиеЗаказов(Результат)
ДеревоЗаказов = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если Не ЗначениеЗаполнено(ДеревоЗаказов) Тогда
Возврат Ложь;
КонецЕсли;
Если Не ИспользоватьЗаказыПоставщикам Тогда
ЕстьОшибки = Ложь;
ПустыеСпособы = Объект.ЗаказыКОбеспечению.НайтиСтроки(Новый Структура("СпособОбеспечения", Справочники.СпособыОбеспеченияПотребностей.ПустаяСсылка()));
Для Каждого Строка Из ПустыеСпособы Цикл
Если Строка.КЗаказу > 0 И Строка.Отметка Тогда
ЕстьОшибки = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьОшибки Тогда
СообщитьОбОшибкеНезаполненногоСпособаОбеспечения(ПустыеСпособы);
Возврат Ложь;
КонецЕсли;
КонецЕсли;
УстановитьСтраницыПомощника("ШагРедактированиеЗаказов");
ЗначениеВРеквизитФормы(ДеревоЗаказов, "ПредварительныйПросмотр");
Возврат Истина;
КонецФункции
&НаСервере
Функция ДалееКШагуСформированныеЗаказы(Результат)
РезультатаФормированияЗаказов = ПолучитьИзВременногоХранилища(АдресРезультатаФормированияЗаказов);
Если ЗначениеЗаполнено(РезультатаФормированияЗаказов) Тогда
ТаблицаДокументы.Загрузить(РезультатаФормированияЗаказов.ТаблицаДокументов);
СформированныеЗаказы.ЗагрузитьЗначения(РезультатаФормированияЗаказов.ТаблицаДокументов.ВыгрузитьКолонку("Документ"));
Элементы.Статус.Видимость = ТаблицаДокументы.Итог("ИспользованиеСтатусов");
УстановитьСтраницыПомощника("ШагСформированныеЗаказы");
Для Каждого Сообщение Из РезультатаФормированияЗаказов.СписокСообщений Цикл
Сообщение.Сообщить();
КонецЦикла;
Если Результат = Неопределено Или Результат.Статус <> "Выполнено" Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = НСтр("ru = 'Заказы были сформированы не полностью'");
Сообщение.Сообщить();
КонецЕсли;
Возврат ОповещенияОЗаписи();
Иначе
Возврат Новый Массив();
КонецЕсли;
КонецФункции
&НаСервере
Процедура НазадКШагамОтбораПотребностейНаКлиенте(Результат)
СписокОшибок = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(СписокОшибок);
ТаблицаДокументы.Очистить();
СформированныеЗаказы.Очистить();
УстановитьСтраницыПомощника("ШагРедактированиеЗаказов");
КонецПроцедуры
&НаСервере
Функция ОповещенияОЗаписи()
Оповещения = Новый Массив();
Для Каждого Строка Из ТаблицаДокументы Цикл
ИмяСобытия = СтрШаблон("Запись_%1", Строка.Документ.Метаданные().Имя);
РежимЗаписи = ?(Строка.СтандартнаяКартинка = 0, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись);
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("РежимЗаписи", РежимЗаписи);
ПараметрыОповещения.Вставить("ЕстьРаспоряжение", Истина);
Оповещения.Добавить(
Новый Структура("ИмяСобытия, ПараметрыОповещения, Источник",
ИмяСобытия, ПараметрыОповещения, Строка.Документ));
КонецЦикла;
Возврат Оповещения;
КонецФункции
&НаСервере
Процедура УстановитьСтраницыПомощника(ИмяШага)
Если ИмяШага = "ШагОтборПотребностей" Тогда
Элементы.Далее.КнопкаПоУмолчанию = Истина;
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагОтборПотребностей;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 1 из 6. Отбор потребностей'");
ИначеЕсли ИмяШага = "ШагНастройкаСпособовОбеспечения" Тогда
Элементы.ДалееНастройка.КнопкаПоУмолчанию = Истина;
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагНастройкаСпособовОбеспечения;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 2 из 6. Настройка способов обеспечения'");
ИначеЕсли ИмяШага = "ШагЗапасы" Тогда
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности;
Элементы.СтраницыКомандыИФильтрыПотребностей.ТекущаяСтраница = Элементы.СтраницаКомандыИФильтрыЗапасы;
Элементы.СтраницаКомандыИФильтрыЗаказы.Видимость = Ложь;
Элементы.СтраницаКомандыИФильтрыЗапасы.Видимость = Истина;
Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы;
Элементы.ДалееСоставЗаказа.КнопкаПоУмолчанию = Истина;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 3 из 6. Поддержание запасов'");
ИначеЕсли ИмяШага = "ШагЗаказы" Тогда
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагиПотребности;
Элементы.СтраницыКомандыИФильтрыПотребностей.ТекущаяСтраница = Элементы.СтраницаКомандыИФильтрыЗаказы;
Элементы.СтраницаКомандыИФильтрыЗаказы.Видимость = Истина;
Элементы.СтраницаКомандыИФильтрыЗапасы.Видимость = Ложь;
Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗаказы;
Элементы.ДалееСоставЗаказа.КнопкаПоУмолчанию = Истина;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 4 из 6. Обеспечение заказов к отгрузке'");
ИначеЕсли ИмяШага = "ШагРедактированиеЗаказов" Тогда
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагРедактированиеЗаказов;
Элементы.СформироватьЗаказы.КнопкаПоУмолчанию = Истина;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 5 из 6. Предварительный просмотр и редактирование заказов'");
ИначеЕсли ИмяШага = "ШагСформированныеЗаказы" Тогда
Элементы.Помощник.ТекущаяСтраница = Элементы.ШагСформированныеЗаказы;
Элементы.ПродолжитьСДругимиОтборами.КнопкаПоУмолчанию = Истина;
Элементы.НадписьШаг.Заголовок = НСтр("ru = 'Шаг 6 из 6. Уточнение сформированных заказов'");
КонецЕсли;
ВключенаОбработкаОповещенийЗаписиДокументов = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура КШагуДокументыНаКлиенте()
Если КорзинаЗаказовИтогПолеСтрокВсего = 0 Тогда
ТекстОшибки = НСтр("ru = 'Нет заказов к оформлению. Отметьте флажком количество в колонке
|""К заказу"" для номенклатурной позиции которую необходимо заказать.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки);
Иначе
ДлительнаяОперация = ФормированиеЗаказовВФоне();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтаФорма);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ФормированиеЗаказовВФонеЗавершение", ЭтаФорма),
ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОтборыСКД
&НаСервере
Процедура ИнициализироватьКомпоновщикНастроекДляОтборов(ДоступныеТипыОбеспечения)
Обработка = РеквизитФормыВЗначение("Объект");
СхемаКомпоновкиДанных = Обработка.ПолучитьМакет("МакетКомпоновкиДляСерверныхОтборов");
УстановитьДоступныеТипыИсточникиОбеспеченияВСКД(СхемаКомпоновкиДанных, ДоступныеТипыОбеспечения);
УстановитьПараметрыВыбораКладовыхВСКД(СхемаКомпоновкиДанных);
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);
КомпоновщикНастроекДляОтборов.Инициализировать(ИсточникНастроек);
КомпоновщикНастроекДляОтборов.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КомпоновщикНастроекДляОтборов.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступныеТипыИсточникиОбеспеченияВСКД(СхемаКомпоновкиДанных, ДоступныеТипыОбеспечения)
ПолеТипОбеспечения = СхемаКомпоновкиДанных.НаборыДанных[0].Поля.Найти(Новый ПолеКомпоновкиДанных("ТипОбеспечения"));
Список = Новый СписокЗначений();
Список.ЗагрузитьЗначения(ДоступныеТипыОбеспечения);
ПолеТипОбеспечения.УстановитьДоступныеЗначения(Список);
ПолеИсточникОбеспечения = СхемаКомпоновкиДанных.НаборыДанных[0].Поля.Найти(Новый ПолеКомпоновкиДанных("ИсточникОбеспечения"));
ПолеИсточникОбеспечения.ТипЗначения = ДоступныеТипыИсточникаОбеспечения(ДоступныеТипыОбеспечения);
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыВыбораКладовыхВСКД(СхемаКомпоновкиДанных)
Если Параметры.Свойство("ОтборПоЦеховымКладовым") И Параметры.ОтборПоЦеховымКладовым Тогда
ПолеСклад = СхемаКомпоновкиДанных.НаборыДанных[0].Поля.Найти(Новый ПолеКомпоновкиДанных("Склад"));
ОбщегоНазначенияУТКлиентСервер.ДобавитьПараметрВыбора(ПолеСклад, "ЦеховаяКладовая", Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройки()
Настройки = Новый Структура("ФильтрНеобеспеченные,РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах");
ЗаполнитьЗначенияСвойств(Настройки, ЭтотОбъект);
Настройки.Вставить("ПользовательскиеНастройки", КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ОбработкаОбеспечениеПотребностей", "Основная", Настройки);
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки()
ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ОбработкаОбеспечениеПотребностей", "Основная");
Если ТипЗнч(ЗначениеНастроек) = Тип("Структура") Тогда
КомпоновщикНастроекДляОтборов.ЗагрузитьПользовательскиеНастройки(ЗначениеНастроек.ПользовательскиеНастройки);
КомпоновщикНастроекДляОтборов.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначениеНастроек);
Если Не ЗначениеНастроек.Свойство("ФильтрНеобеспеченные") Тогда
ФильтрНеобеспеченные = Истина;
КонецЕсли;
Если Не ЗначениеНастроек.Свойство("РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах") Тогда
РасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах = 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьДоступностьТиповОбеспечения(ПараметрОтбор)
СписокВыбора = Элементы.ОтборПоТипуОбеспечения.СписокВыбора;
ДоступныеТипы = Обработки.ОбеспечениеПотребностей.ДоступныеТипыОбеспечения();
Если ДоступныеТипы <> Неопределено Тогда
СписокВыбора.Очистить();
Для каждого ТипОбеспечения Из ДоступныеТипы Цикл
СписокВыбора.Добавить(ТипОбеспечения);
КонецЦикла;
КонецЕсли;
ДоступныеТипыИсточника = ДоступныеТипыИсточникаОбеспечения(ДоступныеТипы);
Если ЗначениеЗаполнено(ДоступныеТипыИсточника) Тогда
Элементы.ОтборПоИсточникуОбеспечения.ОграничениеТипа = ДоступныеТипыИсточника;
Иначе
Элементы.ОтборПоИсточникуОбеспечения.Видимость = Ложь;
КонецЕсли;
ДоступныеТипы = СписокВыбора.ВыгрузитьЗначения();
ДоступныеТипыОбеспеченияСПеремещением = Новый ФиксированныйМассив(ДоступныеТипы);
ИндексПеремещения = ДоступныеТипы.Найти(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.Перемещение"));
Если ИндексПеремещения <> Неопределено Тогда
ДоступныеТипы.Удалить(ИндексПеремещения);
КонецЕсли;
ДоступныеТипыОбеспеченияБезПеремещения = Новый ФиксированныйМассив(ДоступныеТипы);
ИндексСборки = ДоступныеТипы.Найти(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.СборкаРазборка"));
Если ИндексСборки <> Неопределено Тогда
ДоступныеТипы.Удалить(ИндексСборки);
КонецЕсли;
ИндексПереработки = ДоступныеТипы.Найти(ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.ПроизводствоНаСтороне"));
Если ИндексПереработки <> Неопределено Тогда
ДоступныеТипы.Удалить(ИндексПереработки);
КонецЕсли;
ДоступныеТипыОбеспеченияРабот = Новый ФиксированныйМассив(ДоступныеТипы);
Если ЗначениеЗаполнено(ПараметрОтбор) Тогда
Если СписокВыбора.НайтиПоЗначению(ПараметрОтбор) = Неопределено Тогда
СписокВыбора.Очистить();
ОтборПоТипуОбеспечения = Перечисления.ТипыОбеспечения.ПустаяСсылка();
Иначе
СписокВыбора.Очистить();
СписокВыбора.Добавить(ПараметрОтбор);
ОтборПоТипуОбеспечения = ПараметрОтбор;
КонецЕсли;
КонецЕсли;
Если СписокВыбора.Количество() = 1 Тогда
ОтборПоТипуОбеспечения = Элементы.ОтборПоТипуОбеспечения.СписокВыбора[0].Значение;
КонецЕсли;
Если СписокВыбора.Количество() = 1 Тогда
Элементы.ОтборПоТипуОбеспечения.Вид = ВидПоляФормы.ПолеНадписи;
Элементы.ОтборПоТипуОбеспечения.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Элементы.ОтборПоТипуОбеспечения.Шрифт = Новый Шрифт(Элементы.ОтборПоТипуОбеспечения.Шрифт,,,Истина);
ИначеЕсли СписокВыбора.Количество() = 0 Тогда
Элементы.НетДоступныхТиповОбеспечения.Заголовок =
НСтр("ru = 'Текущая настройка не позволяет формировать обеспечивающие заказы.
|Для создания заказов необходимо настроить использование заказов в разделе ""Администрирование""'");
Элементы.НетДоступныхТиповОбеспечения.Видимость = Истина;
Элементы.Помощник.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДоступныеТипыИсточникаОбеспечения(ДоступныеТипыОбеспечения)
Если Не ЗначениеЗаполнено(ДоступныеТипыОбеспечения) Тогда
Возврат Метаданные.Справочники.СпособыОбеспеченияПотребностей.Реквизиты.ИсточникОбеспеченияПотребностей.Тип;
КонецЕсли;
Типы = Новый Массив;
Для каждого ТипОбеспечения Из ДоступныеТипыОбеспечения Цикл
Если ТипОбеспечения = Перечисления.ТипыОбеспечения.Покупка
Или ТипОбеспечения = Перечисления.ТипыОбеспечения.ПроизводствоНаСтороне Тогда
Типы.Добавить(Тип("СправочникСсылка.Партнеры"));
ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.Перемещение Тогда
Типы.Добавить(Тип("СправочникСсылка.Склады"));
ИначеЕсли ТипОбеспечения = Перечисления.ТипыОбеспечения.Производство Тогда
Типы.Добавить(Тип("СправочникСсылка.СтруктураПредприятия"));
КонецЕсли;
КонецЦикла;
Возврат Новый ОписаниеТипов(Типы);
КонецФункции
&НаКлиенте
Процедура ЗаполнитьПростойОтбор(РеквизитФормы, ИмяПоля, ЗначениеПоУмолчанию, ЭлементОтбора, ЭлементПользовательскойНастройки)
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ИмяПоля);
Если ПолеКомпоновки = ЭлементОтбора.ЛевоеЗначение Тогда
РеквизитФормы = ?(ЭлементПользовательскойНастройки.Использование,
ЭлементПользовательскойНастройки.ПравоеЗначение, ЗначениеПоУмолчанию);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, ИмяПоля, Значение, ЭтоОтборПоГруппе)
ЗначениеПоиска = Новый ПолеКомпоновкиДанных(ИмяПоля);
ЭлементНайден = Ложь;
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = ЗначениеПоиска Тогда
ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если Не ЭлементПользовательскойНастройки = Неопределено Тогда
ЭлементПользовательскойНастройки.Использование = (Значение <> Неопределено) И ЗначениеЗаполнено(Значение);
Если ЭлементПользовательскойНастройки.Использование Тогда
Если ЭтоОтборПоГруппе Тогда
ВариантВидаСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
Иначе
ВариантВидаСравнения = ВидСравненияКомпоновкиДанных.Равно;
КонецЕсли;
ЭлементПользовательскойНастройки.ВидСравнения = ВариантВидаСравнения;
ЭлементПользовательскойНастройки.ПравоеЗначение = Значение;
КонецЕсли;
ЭлементНайден = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЭлементНайден Тогда
ИдентификаторОтбора = КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки;
Отбор = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОтбора);
ЭлементОтбора = Неопределено;
Для каждого СуществующийЭлементОтбора Из Отбор.Элементы Цикл
Если Строка(СуществующийЭлементОтбора.ЛевоеЗначение) = ИмяПоля Тогда
ЭлементОтбора = СуществующийЭлементОтбора;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
КонецЕсли;
ЭлементОтбора.Использование = ЗначениеЗаполнено(Значение);
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
ЭлементОтбора.ПравоеЗначение = Значение;
ЭлементОтбора.ВидСравнения = ?(ЭтоОтборПоГруппе, ВидСравненияКомпоновкиДанных.ВИерархии, ВидСравненияКомпоновкиДанных.Равно);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ОтразитьОтборКомпоновкиВПростыхОтборах()
ИдентификаторОтбора = КомпоновщикНастроекДляОтборов.Настройки.Отбор.ИдентификаторПользовательскойНастройки;
Отбор = КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОтбора);
Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если ЭлементОтбора.Использование Тогда
Если ТипЗнч(ЭлементОтбора) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Возврат Ложь;
КонецЕсли;
ОтборПоГруппеДоступен = Не ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.Партнеры")
И Не ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.СтруктураПредприятия");
СтрокаЛевоеЗначение = Строка(ЭлементОтбора.ЛевоеЗначение);
ОтражениеДопустимо = (СтрокаЛевоеЗначение = "Номенклатура.ТоварнаяКатегория"
Или СтрокаЛевоеЗначение = "Номенклатура.Марка")
И (ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии И ОтборПоГруппеДоступен)
И ЗначениеЗаполнено(ЭлементОтбора.ПравоеЗначение)
И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных")
И СтрокаЛевоеЗначение <> "Характеристика"
И СтрокаЛевоеЗначение <> "СпособОбеспечения";
Если Не ОтражениеДопустимо Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементОтбора Из КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.Использование Тогда
ОтборПоГруппеДоступен = Не ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.Партнеры")
И Не ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.СтруктураПредприятия");
ОтражениеДопустимо = (ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии И ОтборПоГруппеДоступен)
И ЗначениеЗаполнено(ЭлементОтбора.ПравоеЗначение)
И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных")
И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("СправочникСсылка.ХарактеристикиНоменклатуры")
И ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("СправочникСсылка.СпособыОбеспеченияПотребностей")
И ТипыЗаказов.НайтиПоЗначению(ТипЗнч(ЭлементОтбора.ПравоеЗначение)) = Неопределено;
Если Не ОтражениеДопустимо Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОтборПоТоварнойКатегории = ПредопределенноеЗначение("Справочник.ТоварныеКатегории.ПустаяСсылка");
ОтборПоМарке = ПредопределенноеЗначение("Справочник.Марки.ПустаяСсылка");
Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
Если Не ЭлементОтбора.Использование Тогда
Продолжить;
КонецЕсли;
СтрокаЛевоеЗначение = Строка(ЭлементОтбора.ЛевоеЗначение);
Если СтрокаЛевоеЗначение = "Номенклатура.ТоварнаяКатегория" Тогда
ОтборПоТоварнойКатегории = ЭлементОтбора.ПравоеЗначение;
ИначеЕсли СтрокаЛевоеЗначение = "Номенклатура.Марка" Тогда
ОтборПоМарке = ЭлементОтбора.ПравоеЗначение;
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементОтбора Из КомпоновщикНастроекДляОтборов.Настройки.Отбор.Элементы Цикл
ЭлементПользовательскойНастройки = КомпоновщикНастроекДляОтборов.ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если Не ЭлементПользовательскойНастройки = Неопределено Тогда
ЗаполнитьПростойОтбор(ОтборПоСкладу,
"Склад", ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоПодразделениюПолучателю,
"ПодразделениеПолучатель", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоНоменклатуре,
"Номенклатура", ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоТипуОбеспечения,
"ТипОбеспечения", ПредопределенноеЗначение("Перечисление.ТипыОбеспечения.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоСегменту,
"СегментНоменклатуры", ПредопределенноеЗначение("Справочник.СегментыНоменклатуры.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоИсточникуОбеспечения,
"ИсточникОбеспечения", ТекстНеЗаполнено,
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоПодразделению,
"Подразделение", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоНазначению,
"Назначение", ПредопределенноеЗначение("Справочник.Назначения.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(ОтборПоНаправлениюДеятельности,
"НаправлениеДеятельности", ПредопределенноеЗначение("Справочник.НаправленияДеятельности.ПустаяСсылка"),
ЭлементОтбора, ЭлементПользовательскойНастройки);
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоОтборПоГруппеНаСервере(ЗначениеОтбора)
Если Не ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Возврат Ложь;
КонецЕсли;
ОбъектМетаданнных = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеОтбора));
Если НЕ ОбъектМетаданнных.Иерархический
ИЛИ ОбъектМетаданнных.ВидИерархии <> Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаСправочника.ЭтоГруппа КАК ЭтоГруппа
|ИЗ
| &ТаблицаСправочника КАК ТаблицаСправочника
|ГДЕ
| ТаблицаСправочника.Ссылка = &Ссылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаСправочника",
"Справочник." + ОбъектМетаданнных.Имя);
Запрос.УстановитьПараметр("Ссылка", ЗначениеОтбора);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.ЭтоГруппа;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиенте
Функция ЭтоОтборПоГруппе(Ключ)
Если КэшируемыеЗначения = Неопределено Тогда
КэшируемыеЗначения = Новый Структура("ОтборПоГруппе");
КэшируемыеЗначения.ОтборПоГруппе = Новый Соответствие();
КонецЕсли;
ПризнакОтбораПоГруппе = КэшируемыеЗначения.ОтборПоГруппе.Получить(Ключ);
Если ПризнакОтбораПоГруппе = Неопределено Тогда
ПризнакОтбораПоГруппе = ЭтоОтборПоГруппеНаСервере(Ключ);
КэшируемыеЗначения.ОтборПоГруппе.Вставить(Ключ, ПризнакОтбораПоГруппе);
КонецЕсли;
Возврат ПризнакОтбораПоГруппе;
КонецФункции
#КонецОбласти
#Область ФильтрыТаблицПотребностей
&НаКлиентеНаСервереБезКонтекста
Функция ТекстЛюбой()
Возврат НСтр("ru = '<любой>'");
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КодУровняЗапаса(Уровень)
Код = 0;
Пока Код < 7 Цикл
Если Уровень = УровеньЗапасаПоКоду(Код) Тогда
Возврат Код;
КонецЕсли;
Код = Код + 1;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция УровеньЗапасаПоКоду(Код)
Возврат
?(Код = 0, ТекстЛюбой(),
?(Код = 1, НСтр("ru = 'Критический'"),
?(Код = 2, НСтр("ru = 'Близкий к критическому'"),
?(Код = 3, НСтр("ru = 'К отмене заказа'"),
?(Код = 4, НСтр("ru = 'Меньше половины'"),
?(Код = 5, НСтр("ru = 'Больше половины'"),
?(Код = 6, НСтр("ru = 'Избыток'"), Неопределено)))))));
КонецФункции
&НаСервере
Процедура ОтборЗапасыНаСервере()
СтруктураОтбора = Новый Структура();
Если ФильтрОтметкаЗапасы Тогда
СтруктураОтбора.Вставить("Отметка", Истина);
КонецЕсли;
Если ФильтрУровеньЗапаса <> ТекстЛюбой() Тогда
Если КодУровняЗапаса(ФильтрУровеньЗапаса) = 3 Тогда
СтруктураОтбора.Вставить("КОтменеЗаказаКартинка", Истина);
ИначеЕсли КодУровняЗапаса(ФильтрУровеньЗапаса) = 1
Или КодУровняЗапаса(ФильтрУровеньЗапаса) = 2
Или КодУровняЗапаса(ФильтрУровеньЗапаса) = 4 Тогда
СтруктураОтбора.Вставить("УровеньЗапаса", КодУровняЗапаса(ФильтрУровеньЗапаса));
ИначеЕсли КодУровняЗапаса(ФильтрУровеньЗапаса) = 5 Или КодУровняЗапаса(ФильтрУровеньЗапаса) = 6 Тогда
СтруктураОтбора.Вставить("УровеньЗапасаМаксимум", КодУровняЗапаса(ФильтрУровеньЗапаса));
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрКЗаказуНеПозднееЗапасы) Тогда
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
ОбновитьФильтрКЗаказуНеПозднееЗапасы();
КонецЕсли;
Если ЗначениеЗаполнено(СтруктураОтбора) Тогда
Элементы.Запасы.ОтборСтрок = Новый ФиксированнаяСтруктура(СтруктураОтбора);
Иначе
Элементы.Запасы.ОтборСтрок = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтборЗаказыНаСервере()
СтруктураОтбора = Новый Структура();
Если ФильтрОтметкаЗаказы Тогда
СтруктураОтбора.Вставить("Отметка", Истина);
КонецЕсли;
Если ФильтрНеОбеспеченные Тогда
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрПриоритет) Тогда
СтруктураОтбора.Вставить("Приоритет", ФильтрПриоритет);
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрКОтгрузкеНеРанее) Тогда
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрКОтгрузкеНеПозднее) Тогда
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрКЗаказуНеПозднееЗаказы) Тогда
СтруктураОтбора.Вставить("УдовлетворяетОтбору", Истина);
КонецЕсли;
Если СтруктураОтбора.Свойство("УдовлетворяетОтбору") Тогда
ОбновитьФильтрКЗаказуКОтгрузке();
КонецЕсли;
Если ЗначениеЗаполнено(СтруктураОтбора) Тогда
Элементы.ЗаказыКОбеспечению.ОтборСтрок = Новый ФиксированнаяСтруктура(СтруктураОтбора);
Иначе
Элементы.ЗаказыКОбеспечению.ОтборСтрок = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьФильтрКЗаказуНеПозднееЗапасы()
ДоТочкиЗаказаДней = (ФильтрКЗаказуНеПозднееЗапасы - НачалоДня(ТекущаяДатаСеанса())) / 86400;
Для каждого Строка Из Объект.Запасы Цикл
НаступитТочкаЗаказа = ?(Строка.МетодОбеспечения = Перечисления.МетодыОбеспеченияПотребностей.ПоддержаниеЗапасаМинМакс,
Строка.ТочкаЗаказаКартинка,
Строка.СреднедневноеПотребление > 0 И Строка.ДоТочкиЗаказа / Строка.СреднедневноеПотребление <= ДоТочкиЗаказаДней);
ЕстьКоличествоКЗаказу = Строка.Остаток + Строка.ЗаказыКПоступлению - Строка.МинимальныйЗапас < Строка.МаксимальныйЗапас;
Строка.УдовлетворяетОтбору = НаступитТочкаЗаказа И ЕстьКоличествоКЗаказу;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьФильтрКЗаказуКОтгрузке()
Для каждого Строка Из Объект.ЗаказыКОбеспечению Цикл
Строка.УдовлетворяетОтбору =
Строка.ДатаОтгрузки >= ФильтрКОтгрузкеНеРанее
И (Строка.ДатаОтгрузки <= ФильтрКОтгрузкеНеПозднее Или Не ЗначениеЗаполнено(ФильтрКОтгрузкеНеПозднее))
И (Строка.Требуется > Строка.Обеспечено Или Не ФильтрНеобеспеченные)
И (Строка.ДатаЗаказаНеПозднее <= ФильтрКЗаказуНеПозднееЗаказы
Или Не ЗначениеЗаполнено(ФильтрКЗаказуНеПозднееЗаказы))
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьОтборыЗапасы()
ФильтрКЗаказуНеПозднееЗапасы = '00010101';
ФильтрУровеньЗапаса = ТекстЛюбой();
ФильтрОтметкаЗапасы = Ложь;
ОтборЗапасыНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОчиститьОтборыЗаказы()
ФильтрКЗаказуНеПозднееЗаказы = '00010101';
ФильтрКОтгрузкеНеРанее = '00010101';
ФильтрКОтгрузкеНеПозднее = '00010101';
ФильтрОтметкаЗаказы = Ложь;
ФильтрПриоритет = Справочники.Приоритеты.ПустаяСсылка();
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораФильтраУровняЗапаса()
СписокВыбора = Элементы.ФильтрУровеньЗапаса.СписокВыбора;
СписокВыбора.Очистить();
Для Счетчик = 0 По 6 Цикл
СписокВыбора.Добавить(УровеньЗапасаПоКоду(Счетчик));
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ПроверкиВозможностиВыполненияДействий
&НаКлиенте
Функция ТаблицаСпособовЗаполненаВерно()
НетОшибок = Истина;
ЕстьОтмеченные = Ложь;
НачалоЭтогоДня = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса());
Для Каждого СтрокаТаблицы Из Объект.СпособыОбеспечения Цикл
Если Не СтрокаТаблицы.Отметка Тогда
Продолжить;
Иначе
Если СтрокаТаблицы.ДатаПоставки < НачалоЭтогоДня
И ЗначениеЗаполнено(СтрокаТаблицы.ДатаПоставки) Тогда
ТекстОшибки = НСтр("ru = 'В строке %1 в поле ""Дата поставки"" установлена прошедшая дата.'");
ТекстОшибки = СтрШаблон(ТекстОшибки, СтрокаТаблицы.НомерСтроки);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
,
СтрШаблон("СпособыОбеспечения[%1].ДатаПоставки", СтрокаТаблицы.НомерСтроки - 1),
"Объект");
НетОшибок = Ложь;
КонецЕсли;
Если СтрокаТаблицы.ГраницаПериодаОбеспечения < НачалоЭтогоДня
И ЗначениеЗаполнено(СтрокаТаблицы.ГраницаПериодаОбеспечения) Тогда
ТекстОшибки = НСтр("ru = 'В строке %1 в поле ""Обеспечить потребности до даты"" установлена прошедшая дата.'");
ТекстОшибки = СтрШаблон(ТекстОшибки, СтрокаТаблицы.НомерСтроки);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
,
СтрШаблон("СпособыОбеспечения[%1].ГраницаПериодаОбеспечения", СтрокаТаблицы.НомерСтроки - 1),
"Объект");
НетОшибок = Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.ГраницаПериодаОбеспечения)
И СтрокаТаблицы.ГраницаПериодаОбеспечения <= СтрокаТаблицы.ДатаПоставки Тогда
ТекстОшибки = НСтр("ru = 'В строке %1 в поле ""Обеспечить потребности до даты"" установлена дата меньше или равная дате поставки.'");
ТекстОшибки = СтрШаблон(ТекстОшибки, СтрокаТаблицы.НомерСтроки);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
,
СтрШаблон("СпособыОбеспечения[%1]." + "ГраницаПериодаОбеспечения",
СтрокаТаблицы.НомерСтроки - 1),
"Объект");
НетОшибок = Ложь;
КонецЕсли;
ЕстьОтмеченные = Истина;
КонецЕсли;
КонецЦикла;
Если Не ЕстьОтмеченные Тогда
ТекстОшибки = НСтр("ru = 'Для перехода к следующему шагу необходимо отметить хотя бы один способ обеспечения из списка'");
ПоказатьПредупреждение(, ТекстОшибки);
НетОшибок = Ложь;
КонецЕсли;
Возврат НетОшибок;
КонецФункции
&НаКлиенте
Процедура СообщитьОбОтсутствииПотребностей()
ТекстПредупреждения = НСтр("ru = 'Для товаров не установлены параметры поддержания запаса
|и нет заказов клиентов, заказов на перемещение и т.п. к обеспечению.
|Установите параметры обеспечения потребностей, либо измените условия отбора потребностей.
|Важно: полностью отгруженные заказы %1не учитываются.'");
ИспользуютсяСтатусы = ИспользуютсяСтатусы();
ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", ?(ИспользуютсяСтатусы,
НСтр("ru = 'и заказы в статусе ниже чем ""К обеспечению""'") + " ", ""));
ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИспользуютсяСтатусы()
ИспользуютсяСтатусы = ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовНаВнутреннееПотребление")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовНаПеремещение")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовНаСборку");
ИспользуютсяСтатусы =
ИспользуютсяСтатусы
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПереработчикам")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПереработчикам2_5");
Возврат ИспользуютсяСтатусы;
КонецФункции
&НаКлиенте
Процедура ОчисткаТаблицыПотребностейВопросОповещение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = Истина;
Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
Результат = Ложь;
КонецЕсли;
Если Результат Тогда
Если ДополнительныеПараметры.Операция = "Закрытие" Тогда
ОчисткаТаблицыПотребностейОтветПолучен = Истина;
Закрыть();
ИначеЕсли ДополнительныеПараметры.Операция = "ШагНазад" Тогда
Объект.Запасы.Очистить();
Объект.ЗаказыКОбеспечению.Очистить();
ОчиститьДеревоИндексов(Истина);
ОчиститьСообщения();
УстановитьСтраницыПомощника("ШагНастройкаСпособовОбеспечения");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчисткаТаблицыПотребностейВопрос(Операция)
Кнопки = Новый СписокЗначений();
Текст = НСтр("ru = 'Очистить список потребностей'");
Кнопки.Добавить(КодВозвратаДиалога.Да, Текст);
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ТекстВопроса = НСтр("ru = 'В списке потребностей имеются отмеченные позиции, заказы по которым не сформированы. Список потребностей будет очищен.'");
ДополнительныеПараметры = Новый Структура("Операция", Операция);
ОписаниеОповещения = Новый ОписаниеОповещения("ОчисткаТаблицыПотребностейВопросОповещение",
ЭтаФорма, ДополнительныеПараметры);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьПодтверждениеОчисткиТаблицыЗаказыКОбеспечению(Знач Оповещение)
Если Объект.ЗаказыКОбеспечению.Количество() = 0 Тогда
ВыполнитьОбработкуОповещения(Оповещение, Истина);
Возврат;
КонецЕсли;
Режим = Новый СписокЗначений();
Текст = НСтр("ru = 'Очистить список потребностей'");
Режим.Добавить(КодВозвратаДиалога.Да, Текст);
Режим.Добавить(КодВозвратаДиалога.Отмена);
ТекстВопроса = НСтр("ru = 'В списке потребностей имеются отмеченные позиции, заказы по которым не сформированы. Список потребностей будет очищен.'");
ПоказатьВопрос(Новый ОписаниеОповещения("ПолучитьПодтверждениеОчисткиТаблицыЗаказыКОбеспечениюЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), ТекстВопроса, Режим, 0);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьПодтверждениеОчисткиТаблицыЗаказыКОбеспечениюЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, РезультатВопроса = КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеРанее(Дата, СтандартнаяОбработка)
Если Дата > ФильтрКОтгрузкеНеПозднее И ЗначениеЗаполнено(ФильтрКОтгрузкеНеПозднее) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьПредупреждение(, НСтр("ru = 'Дата начала периода не может быть больше даты окончания'"), , );
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПрочиеПроцедурыИФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПриИзмененииРасчетОбособленныхПотребностейСУчетомОстатковНаВсехСкладах(РасчетСУчетомОстатковНаВсехСкладах)
Если РасчетСУчетомОстатковНаВсехСкладах = 0 Тогда
Текст = НСтр("ru = 'Для центра распределительной сети настройка игнорируется - учитываются остатки всех складов сети'");
Иначе
Текст = НСтр("ru = 'Для удаленного склада распределительной сети настройка игнорируется - учитываются остатки только удаленного склада'");
КонецЕсли;
Возврат Текст;
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКомандПоФункциональнымОпциям()
ВидимостьКоманды = Ложь;
ВидимостьКоманды =
ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПереработчикам2_5")
Или ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПереработчикам")
Или Ложь;
Элементы.ФормаЗаказПереработчикуКИсполнению.Видимость = ВидимостьКоманды;
ВидимостьКоманды = Ложь;
Элементы.ФормаЗаказНаПроизводствоКПроизводству.Видимость = ВидимостьКоманды;
ВидимостьКоманды = ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПоставщикам");
Элементы.ФормаЗаказПоставщикуПодтвержден.Видимость = ВидимостьКоманды;
КонецПроцедуры
&НаСервере
Процедура ФильтрНеобеспеченныеПриИзмененииНаСервере()
СохранитьНастройки();
ОтборЗаказыНаСервере();
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыФормыКлиентскогоПриложенияТакси()
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Такси Тогда
Элементы.ОтметитьКЗаказуЗаказы.Отображение = ОтображениеКнопки.Картинка;
Элементы.ОтметитьКЗаказуЗапасы.Отображение = ОтображениеКнопки.Картинка;
Элементы.СнятьОтметкуЗаказы.Отображение = ОтображениеКнопки.Картинка;
Элементы.СнятьОтметкуЗапасы.Отображение = ОтображениеКнопки.Картинка;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция НадписьВФормате(Параметр, ЕдиницаИзмерения, ФорматнаяСтрока)
Возврат СтрШаблон("%1 %2", Формат(Параметр, ФорматнаяСтрока), ЕдиницаИзмерения);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СтрокаВДату(ДатаСтрокой)
Год = Прав(ДатаСтрокой,4);
Месяц = Сред(ДатаСтрокой,4,2);
День = Лев(ДатаСтрокой,2);
Если Не ЗначениеЗаполнено(Год + Месяц + День) Тогда
Возврат Дата(1,1,1);
Иначе
Возврат Дата(Год, Месяц, День);
КонецЕсли;
КонецФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПредварительныйПросмотр.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПредварительныйПросмотр.УровеньВДереве");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПредварительныйПросмотрСоглашение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПредварительныйПросмотр.ТипОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыОбеспечения.Покупка;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПредварительныйПросмотрСклад.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПредварительныйПросмотр.ЭтоРабота");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПредварительныйПросмотрИсточникОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПредварительныйПросмотр.ИсточникОбеспеченияТолькоПросмотр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Представление = НСтр("ru = 'Нет доступа к заказу'");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Заказ.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Заказ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<нет доступа к данным заказа>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Представление = НСтр("ru = '<Ручное редактирование>'");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Заказ.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Заказ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Неопределено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Ручное редактирование>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Представление = НСтр("ru = 'Гиперссылка метод обеспечения'");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.МетодОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.МетодОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Представление = НСтр("ru = 'Документ имеет высокий приоритет'");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаказыКОбеспечению.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Приоритет");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.Приоритеты.ПолучитьВысшийПриоритет();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ВысокийПриоритетДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
Элемент.Представление = НСтр("ru = 'Документ имеет низкий приоритет'");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗаказыКОбеспечению.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Приоритет");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Справочники.Приоритеты.ПолучитьНизшийПриоритет();
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.НизкийПриоритетДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияСпособОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.СпособОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<обеспечение без указания способа>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияДнейДоЗаказаПоГрафикуПредставление.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ДнейДоПлановогоЗаказа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ОтборЭлемента.ПравоеЗначение = 0;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ПлановаяДатаЗаказа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Для Счетчик = 0 По 2 Цикл
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияКЗаказуТовары.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.КЗаказуТовары");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Счетчик;
Текст = Элементы.СпособыОбеспеченияКЗаказуТовары.СписокВыбора[Счетчик].Представление;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Текст);
КонецЦикла;
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияДатаПоставки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ДатаПоставки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.СтрокаИзменена");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не заполнен график работы предприятия>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияГраницаПериодаОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ГраницаПериодаОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<без ограничений периода>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияГраницаПериодаОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ГраницаПериодаОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ВариантОбеспечиваемогоПериода");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОбеспечиваемогоПериода.НеОграничен;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.КЗаказуТовары");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 2;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.СтрокаИзменена");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не заполнен график работы предприятия>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособыОбеспеченияГраницаПериодаОбеспечения.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ГраницаПериодаОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.КЗаказуТовары");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ФормироватьЗаказыПоРасписанию");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СпособыОбеспечения.ВариантОбеспечиваемогоПериода");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОбеспечиваемогоПериода.ДоДатыСледующейПоставкиПоРасписанию;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не заполнен график работы предприятия>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Статус.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДокументы.СтандартнаяКартинка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.SpecialTextColor);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не проведен>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Остаток.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.Остаток");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗаказы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.ТипОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыОбеспечения.СборкаРазборка;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<сборка>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗапасы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.ТипОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыОбеспечения.СборкаРазборка;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<сборка>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗапасы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.ИсточникОбеспеченияТолькоПросмотр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗаказы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.ИсточникОбеспеченияТолькоПросмотр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СкладОтгрузкиЗаказа.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.ЭтоРабота");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Статус.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДокументы.ИспользованиеСтатусов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатаОтгрузки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.ДатаОтгрузки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.ДатаПоставки");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Если Не ИспользоватьЗаказыПоставщикам Тогда
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособОбеспеченияЗапасы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.СпособОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.Отметка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СпособОбеспеченияЗаказы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.СпособОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Отметка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗапасы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.СпособОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Запасы.Отметка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсточникОбеспеченияЗаказы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.СпособОбеспечения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказыКОбеспечению.Отметка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПодсказки()
Подсказки = Новый Структура();
Подсказки.Вставить("СпособыОбеспеченияКЗаказуТовары",
НСтр("ru = 'Определяет состав товаров,
|автоматически включаемых в
|формируемый заказ следующих шагах работы'"));
Подсказки.Вставить("СпособыОбеспеченияДатаПоставки",
НСтр("ru = 'Дата ожидаемого поступления, которая
|будет указана в формируемом заказе'"));
Подсказки.Вставить("СпособыОбеспеченияГраницаПериодаОбеспечения",
НСтр("ru = 'Граница периода, обеспечиваемого поставкой'"));
Подсказки.Вставить("СпособыОбеспеченияДнейДоЗаказаПоГрафикуПредставление",
НСтр("ru = 'Число дней до даты формирования
|заказа на ближайшую поставку по графику'"));
Подсказки.Вставить("ГруппаКЗаказуЗапасы",
НСтр("ru = 'Количество, которое будет указано
|в формируемом заказе, заказываемое
|для поддержания запаса'"));
Подсказки.Вставить("ЗаказыКПоступлению",
НСтр("ru = 'Количество, заказаное ранее и ожидаемое к
|поступлению'"));
Подсказки.Вставить("МетодОбеспечения",
НСтр("ru = 'Действующий метод обеспечения потребностей.
|Поддержание запаса с установкой минимального
|и максимального запасов вручную, либо расчетным
|путем по норме или по статистике потребления'"));
Подсказки.Вставить("МинимальныйЗапас",
НСтр("ru = 'Минимальное количество запаса,
|указанное в товарном ограничении,
|или рассчитанное по статистике'"));
Подсказки.Вставить("МаксимальныйЗапас",
НСтр("ru = 'Максимальное количество запаса,
|указанное в товарном ограничении,
|или рассчитанное по статистике'"));
Подсказки.Вставить("Остаток", НСтр("ru = 'Текущий остаток товара на складе'"));
Для Каждого Подсказка Из Подсказки Цикл
Элементы[Подсказка.Ключ].Подсказка = Подсказка.Значение;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКорректностьЗаполненияФильтраКОтгрузкеНеПозднее(Дата, СтандартнаяОбработка)
Если Дата < ФильтрКОтгрузкеНеРанее И ЗначениеЗаполнено(ФильтрКОтгрузкеНеРанее) Тогда
СтандартнаяОбработка = Ложь;
ПоказатьПредупреждение(, НСтр("ru = 'Дата окончания периода не может быть меньше даты начала'"), , );
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ОбработатьПустойИсточникОбеспечения(ИсточникОбеспечения, ТекстНеЗаполнено)
Если Не ЗначениеЗаполнено(ИсточникОбеспечения) Тогда
ИсточникОбеспечения = ТекстНеЗаполнено;
КонецЕсли;
Возврат ИсточникОбеспечения;
КонецФункции
&НаСервере
Процедура СообщитьОбОшибкеНезаполненногоСпособаОбеспечения(Таблица)
ШаблонТекста = Неопределено;
Если Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы Тогда
ИмяТаблицы = "Запасы";
ШаблонТекста = НСтр("ru='Не заполнена колонка ""Способ обеспечения"" в строке %НомерСтроки% списка ""Поддержание запасов""'");
ИначеЕсли Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗаказы Тогда
ИмяТаблицы = "ЗаказыКОбеспечению";
ШаблонТекста = НСтр("ru='Не заполнена колонка ""Способ обеспечения"" в строке %НомерСтроки% списка ""Обеспечение заказов""'");
КонецЕсли;
Таблица = Объект[ИмяТаблицы];
Для Каждого Строка Из Таблица Цикл
Если Строка.Отметка И Не ЗначениеЗаполнено(Строка.СпособОбеспечения) Тогда
ТекстОшибки = СтрЗаменить(ШаблонТекста, "%НомерСтроки%", Таблица.Индекс(Строка) + 1);
ПутьКТабЧасти = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(ИмяТаблицы,
Таблица.Индекс(Строка) + 1, "СпособОбеспечения");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Неопределено, "Объект." + ПутьКТабЧасти);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИсточникОбеспечения(МассивТиповОбеспечения)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ОбеспечениеПотребностей.Форма.Форма.Команда.ЗаполнитьИсточникОбеспечения");
ТекущаяТаблица = ?(Элементы.СтраницыТаблицаПотребностей.ТекущаяСтраница = Элементы.СтраницаТаблицаЗапасы,
"Запасы", "ЗаказыКОбеспечению");
ПараметрыФормы = Новый Структура("ТипОбеспечения, ГрупповоеЗаполнение", Неопределено, Истина);
Для каждого Идентификатор Из Элементы[ТекущаяТаблица].ВыделенныеСтроки Цикл
СтрокаПотребности = Объект[ТекущаяТаблица].НайтиПоИдентификатору(Идентификатор);
Если Не СтрокаПотребности.ИсточникОбеспеченияТолькоПросмотр
И МассивТиповОбеспечения.Найти(СтрокаПотребности.ТипОбеспечения) <> Неопределено Тогда
ПараметрыФормы.ТипОбеспечения = СтрокаПотребности.ТипОбеспечения;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПараметрыФормы.ТипОбеспечения <> Неопределено Тогда
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораИсточникаОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одной строки с доступным для изменения источником обеспечения. Выполнение команды невозможно.'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОкруглениеКоличества
&НаКлиенте
Функция ПересчитатьОкруглениеКлиент(Строка, Запасы = Ложь)
Если Строка = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИДИндекса = Строка.ИДИндекса;
СоответствиеСтрок = ПодготовитьСоответствиеСтрокДляОкругленияКлиент(ИДИндекса);
Структура = ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки);
Возврат СоответствиеСтрок;
КонецФункции
&НаСервере
Функция ПересчитатьОкруглениеСервер(Строка, Запасы = Ложь)
Если Строка = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИДИндекса = Строка.ИДИндекса;
СоответствиеСтрок = ПодготовитьСоответствиеСтрокДляОкругленияСервер(ИДИндекса);
Структура = ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки);
Возврат СоответствиеСтрок;
КонецФункции
&НаКлиенте
Функция ПодготовитьСоответствиеСтрокДляОкругленияКлиент(ИДИндекса)
Корень = ИндексыПоиска.НайтиПоИдентификатору(ИДИндекса);
ВетвиКорня = Корень.ПолучитьЭлементы();
ИндексыПоискаТаблицаСортировки.Очистить();
Для Каждого Ветвь Из ВетвиКорня Цикл
Строка = ?(Ветвь.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(Ветвь.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(Ветвь.ИДСтроки));
СтрокаСортировки = ИндексыПоискаТаблицаСортировки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСортировки, Ветвь);
СтрокаСортировки.ДатаПоставки = Строка.ДатаПоставки;
КонецЦикла;
ИндексыПоискаТаблицаСортировки.Сортировать("ДатаПоставки");
Соответствие = Новый Соответствие();
Для Каждого СтрокаСортировки Из ИндексыПоискаТаблицаСортировки Цикл
Строка = ?(СтрокаСортировки.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(СтрокаСортировки.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(СтрокаСортировки.ИДСтроки));
Соответствие.Вставить(Строка, СтрокаСортировки.ТаблицаЗапасы);
КонецЦикла;
Возврат Соответствие;
КонецФункции
&НаСервере
Функция ПодготовитьСоответствиеСтрокДляОкругленияСервер(ИДИндекса)
Корень = ИндексыПоиска.НайтиПоИдентификатору(ИДИндекса);
ВетвиКорня = Корень.ПолучитьЭлементы();
ИндексыПоискаТаблицаСортировки.Очистить();
Для Каждого Ветвь Из ВетвиКорня Цикл
Строка = ?(Ветвь.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(Ветвь.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(Ветвь.ИДСтроки));
СтрокаСортировки = ИндексыПоискаТаблицаСортировки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСортировки, Ветвь);
СтрокаСортировки.ДатаПоставки = Строка.ДатаПоставки;
КонецЦикла;
ИндексыПоискаТаблицаСортировки.Сортировать("ДатаПоставки");
Соответствие = Новый Соответствие();
Для Каждого СтрокаСортировки Из ИндексыПоискаТаблицаСортировки Цикл
Строка = ?(СтрокаСортировки.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(СтрокаСортировки.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(СтрокаСортировки.ИДСтроки));
Соответствие.Вставить(Строка, СтрокаСортировки.ТаблицаЗапасы);
КонецЦикла;
Возврат Соответствие;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОкруглитьСоответствиеСтрок(СоответствиеСтрок, ИспользоватьУпаковки)
ОстатокОкругления = 0;
ОкругленоИтог = 0;
КЗаказуИтог = 0;
КЗаказуИтогЗапасы = 0;
КЗаказуИтогЗаказы = 0;
ОкругленоДоМинимальнойПартии = Ложь;
Для Каждого КлючЗначение Из СоответствиеСтрок Цикл
Строка = КлючЗначение.Ключ;
Строка.НеОкруглятьПередСозданиемЗаказа = Ложь;
Округлено = 0;
Если Строка <> Неопределено Тогда
Если Строка.Отметка Тогда
Если ИспользоватьУпаковки Тогда
Если ОстатокОкругления >= Строка.КЗаказу Тогда
ОстатокОкругления = ОстатокОкругления - Строка.КЗаказу;
Округлено = 0;
Иначе
КЗаказу = Строка.КЗаказу - ОстатокОкругления;
Округлено = Округлить(КЗаказу, ?(Строка.ЧислительУпаковки = 0 Или Строка.ЗнаменательУпаковки = 0, 1, Строка.ЧислительУпаковки / Строка.ЗнаменательУпаковки),
Строка.ТипЕдиницыИзмерения);
Если НЕ ОкругленоДоМинимальнойПартии Тогда
Кратность = ?(Строка.ЧислительУпаковки = 0 Или Строка.ЗнаменательУпаковки = 0, 1, Строка.ЧислительУпаковки / Строка.ЗнаменательУпаковки);
МинимальнаяПартияПоставки = Строка.МинимальнаяПартияПоставки * Кратность;
Округлено = Макс(МинимальнаяПартияПоставки, Округлено);
ОкругленоДоМинимальнойПартии = Истина;
КонецЕсли;
ОстатокОкругления = Округлено - КЗаказу;
КонецЕсли;
Иначе
Округлено = Строка.КЗаказу;
КонецЕсли;
Строка.Округлено = Округлено;
ОкругленоИтог = ОкругленоИтог + Округлено;
КЗаказуИтог = КЗаказуИтог + Строка.КЗаказу;
Если КлючЗначение.Значение Тогда
КЗаказуИтогЗапасы = КЗаказуИтогЗапасы + Строка.КЗаказу;
Иначе
КЗаказуИтогЗаказы = КЗаказуИтогЗаказы + Строка.КЗаказу;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Структура = Новый Структура();
Структура.Вставить("ОкругленоИтог", ОкругленоИтог);
Структура.Вставить("КЗаказуИтог", КЗаказуИтог);
Структура.Вставить("КЗаказуИтогЗапасы", КЗаказуИтогЗапасы);
Структура.Вставить("КЗаказуИтогЗаказы", КЗаказуИтогЗаказы);
Возврат Структура;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция Округлить(Количество, Кратность, ТипЕдиницыИзмерения)
Если Кратность <> 1
Или ТипЕдиницыИзмерения = ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук") Тогда
Если Количество % Кратность <> 0 Тогда
Остаток = Цел(Количество / Кратность) + 1;
Возврат Остаток * Кратность;
Иначе
Возврат Количество;
КонецЕсли;
Иначе
Возврат Количество;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОтобразитьРасчитанноеОкругление(Строка, Запасы)
Если Строка = Неопределено Тогда
Итоги = ПараметрыИнформационнойСтроки();
СформироватьИнформационнуюСтроку(Неопределено, Итоги, Запасы);
Возврат;
КонецЕсли;
ИДИндекса = Строка.ИДИндекса;
Корень = ИндексыПоиска.НайтиПоИдентификатору(ИДИндекса);
ВетвиКорня = Корень.ПолучитьЭлементы();
ОкругленоИтог = 0;
КЗаказуИтог = 0;
КЗаказуИтогЗапасы = 0;
КЗаказуИтогЗаказы = 0;
СуммаИтог = 0;
ЕстьСтрокаСПустойЦеной = Ложь;
Для Каждого Ветвь Из ВетвиКорня Цикл
Округлено = 0;
СтрокаПоДереву = ?(Ветвь.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(Ветвь.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(Ветвь.ИДСтроки));
Если СтрокаПоДереву <> Неопределено Тогда
Если СтрокаПоДереву.Отметка Тогда
Округлено = СтрокаПоДереву.Округлено;
ОкругленоИтог = ОкругленоИтог + Округлено;
КЗаказуИтог = КЗаказуИтог + СтрокаПоДереву.КЗаказу;
СуммаИтог = СуммаИтог + (Округлено * СтрокаПоДереву.ЦенаВВалютеУправленческогоУчета);
Если СтрокаПоДереву.ЦенаВВалютеУправленческогоУчета = 0 Тогда
ЕстьСтрокаСПустойЦеной = Истина;
КонецЕсли;
Если Ветвь.ТаблицаЗапасы Тогда
КЗаказуИтогЗапасы = КЗаказуИтогЗапасы + СтрокаПоДереву.КЗаказу;
Иначе
КЗаказуИтогЗаказы = КЗаказуИтогЗаказы + СтрокаПоДереву.КЗаказу;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Итоги = ПараметрыИнформационнойСтроки();
Итоги.ОкругленоИтог = ОкругленоИтог;
Итоги.КЗаказуИтог = КЗаказуИтог;
Итоги.КЗаказуИтогЗапасы = КЗаказуИтогЗапасы;
Итоги.КЗаказуИтогЗаказы = КЗаказуИтогЗаказы;
Итоги.СуммаИтог = СуммаИтог;
Итоги.ЕстьСтрокаСПустойЦеной = ЕстьСтрокаСПустойЦеной;
СформироватьИнформационнуюСтроку(Строка, Итоги, Запасы);
КонецПроцедуры
&НаКлиенте
Процедура СформироватьИнформационнуюСтроку(Строка, Итоги, Запасы)
ОкругленоИтог = Итоги.ОкругленоИтог;
КЗаказуИтог = Итоги.КЗаказуИтог;
КЗаказуИтогЗапасы = Итоги.КЗаказуИтогЗапасы;
КЗаказуИтогЗаказы = Итоги.КЗаказуИтогЗаказы;
СуммаИтог = Итоги.СуммаИтог;
ЕстьСтрокаСПустойЦеной = Итоги.ЕстьСтрокаСПустойЦеной;
Шрифт = Элементы.ИнформационнаяСтрока.Шрифт;
ШрифтЖирный = Новый Шрифт(Шрифт, , , Истина);
ШрифтКурсив = Новый Шрифт(Шрифт, , , , Истина);
ИнформационнаяСтрокаМассив = Новый Массив();
Если Строка = Неопределено Тогда
ИнформационнаяСтрокаМассив.Добавить(НСтр("ru = 'Строка не выбрана'"));
Иначе
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.Номенклатура), , , ,
ПолучитьНавигационнуюСсылку(Строка.Номенклатура)));
Если НЕ Строка.Характеристика.Пустая() Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(", "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.Характеристика), , , ,
ПолучитьНавигационнуюСсылку(Строка.Характеристика)));
КонецЕсли;
Если Не Строка.Склад.Пустая()
И ИспользоватьНесколькоСкладов Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(", "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.Склад), , , ,
ПолучитьНавигационнуюСсылку(Строка.Склад)));
КонецЕсли;
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(": "));
Если Запасы Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'К заказу по запасам:'")));
Иначе
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Всего к заказу:'")));
КонецЕсли;
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(КЗаказуИтог) + " ", ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.ЕдиницаИзмерения), ШрифтЖирный));
Если НЕ Запасы И ОкругленоИтог > 0 Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = '(по запасам:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(КЗаказуИтогЗапасы), ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(", "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'по заказам:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(КЗаказуИтогЗаказы), ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока("), "));
Иначе
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(", "));
КонецЕсли;
Если ОкругленоИтог > 0 И ИспользоватьУпаковки Тогда
СсылкаУпаковка = "ОткрытьФормуВыбораУпаковки";
Если Строка.УпаковкаЗаказа.Пустая() Тогда
Если Строка.ИспользоватьУпаковки
И ЕстьДоступКИзменениюУпаковки Тогда
Упаковка = НСтр("ru = '<задать упаковку для округления>'");
Если ОкругленоИтог <> КЗаказуИтог Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Округлено до:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(ОкругленоИтог) + " ", ШрифтЖирный));
КонецЕсли;
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Упаковка + " ", ШрифтКурсив, , , СсылкаУпаковка));
КонецЕсли;
ИначеЕсли ОкругленоИтог > 0 И Строка.УпаковкаЗаказа.Пустая() Тогда
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Округлено до:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(ОкругленоИтог) + " ", ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.ЕдиницаИзмерения) + ", ", ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
Иначе
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Округлено до:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(ОкругленоИтог) + " ", ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(Строка.ЕдиницаИзмерения) + ", ", ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = '(Упаковка:'"), ШрифтКурсив));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
Упаковка = Строка(Строка.УпаковкаЗаказа);
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Упаковка, ШрифтКурсив, , , СсылкаУпаковка));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока("), ", ШрифтКурсив));
КонецЕсли;
КонецЕсли;
ЗнакПримерноРавно = ?(ЕстьСтрокаСПустойЦеной, "~", "");
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'На сумму:'")));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" "));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(ЗнакПримерноРавно, ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(Строка(СуммаИтог), ШрифтЖирный));
ИнформационнаяСтрокаМассив.Добавить(Новый ФорматированнаяСтрока(" " + ВалютаУправленческогоУчета, ШрифтЖирный));
КонецЕсли;
ИнформационнаяСтрока = Новый ФорматированнаяСтрока(ИнформационнаяСтрокаМассив);
КонецПроцедуры
&НаКлиенте
Функция ПараметрыИнформационнойСтроки()
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ОкругленоИтог", 0);
СтруктураВозврата.Вставить("КЗаказуИтог", 0);
СтруктураВозврата.Вставить("КЗаказуИтогЗапасы", 0);
СтруктураВозврата.Вставить("КЗаказуИтогЗаказы", 0);
СтруктураВозврата.Вставить("СуммаИтог", 0);
СтруктураВозврата.Вставить("ЕстьСтрокаСПустойЦеной", Ложь);
Возврат СтруктураВозврата;
КонецФункции
&НаСервере
Процедура ЗаполнитьДеревоИндексов(Запасы)
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ТаблицаЗапасы", ВыгрузитьНоменклатуруСИдентификаторамиСтрок(Объект.Запасы));
Запрос.УстановитьПараметр("ТаблицаЗаказы", ВыгрузитьНоменклатуруСИдентификаторамиСтрок(Объект.ЗаказыКОбеспечению));
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.ДатаПоставки КАК ДатаПоставки,
| Таблица.Индекс КАК Индекс
|ПОМЕСТИТЬ ВтТаблицаЗапасы
|ИЗ
| &ТаблицаЗапасы КАК Таблица
|;
|
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.ДатаПоставки КАК ДатаПоставки,
| Таблица.Индекс КАК Индекс
|ПОМЕСТИТЬ ВтТаблицаЗаказы
|ИЗ
| &ТаблицаЗаказы КАК Таблица
|;
|
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Индекс КАК Индекс,
| Таблица.ДатаПоставки КАК ДатаПоставки,
| ИСТИНА КАК ЭтоЗапасы
|ИЗ
| ВтТаблицаЗапасы КАК Таблица
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Индекс КАК Индекс,
| Таблица.ДатаПоставки КАК ДатаПоставки,
| ЛОЖЬ КАК ЭтоЗапасы
|ИЗ
| ВтТаблицаЗаказы КАК Таблица
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура, Характеристика, Склад, ДатаПоставки";
Выборка = Запрос.Выполнить().Выбрать();
Коллекция = ИндексыПоиска.ПолучитьЭлементы();
Коллекция.Очистить();
Ключ = Новый Структура("Номенклатура, Характеристика, Склад");
Пока Выборка.Следующий() Цикл
Если Ключ.Номенклатура <> Выборка.Номенклатура Или Ключ.Характеристика <> Выборка.Характеристика Или Ключ.Склад <> Выборка.Склад Тогда
ЗаполнитьЗначенияСвойств(Ключ, Выборка);
Корень = Коллекция.Добавить();
Строки = Корень.ПолучитьЭлементы();
КонецЕсли;
ТаблицаФормы = ?(Выборка.ЭтоЗапасы, Объект.Запасы, Объект.ЗаказыКОбеспечению);
НоваяСтрока = Строки.Добавить();
НоваяСтрока.ИДСтроки = ТаблицаФормы[Выборка.Индекс].ПолучитьИдентификатор();
НоваяСтрока.ТаблицаЗапасы = Выборка.ЭтоЗапасы;
ТаблицаФормы[Выборка.Индекс].ИДИндекса = Корень.ПолучитьИдентификатор();
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ВыгрузитьНоменклатуруСИдентификаторамиСтрок(ТаблицаФормы)
ТаблицаВыгрузки = Новый ТаблицаЗначений();
ТаблицаВыгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблицаВыгрузки.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ТаблицаВыгрузки.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТаблицаВыгрузки.Колонки.Добавить("ДатаПоставки", Новый ОписаниеТипов("Дата"));
ТаблицаВыгрузки.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число"));
ВсегоСтрок = ТаблицаФормы.Количество() - 1;
Для Индекс = 0 По ВсегоСтрок Цикл
СтрокаТаблицы = ТаблицаФормы[Индекс];
ВыгруженнаяСтрока = ТаблицаВыгрузки.Добавить();
ЗаполнитьЗначенияСвойств(ВыгруженнаяСтрока, СтрокаТаблицы);
ВыгруженнаяСтрока.Индекс = Индекс;
КонецЦикла;
Возврат ТаблицаВыгрузки;
КонецФункции
&НаКлиенте
Процедура ВыбратьУпаковкуКлиент(ИмяТаблицы)
Поставка = Элементы[ИмяТаблицы].ТекущиеДанные;
ЕдиницыИзмерения = Новый Массив();
ЕдиницыИзмерения.Добавить(Поставка.ЕдиницаИзмерения);
ПараметрыФормыОтбор = Новый Структура("Владелец", Поставка.Номенклатура);
ПараметрыФормы = Новый Структура("Отбор", ПараметрыФормыОтбор);
ПараметрыФормы.Вставить("ЕдиницыИзмерения", ЕдиницыИзмерения);
ОткрытьФорму("Обработка.ОбеспечениеПотребностей.Форма.ФормаВыбораУпаковкиЕдиницы", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗаписатьУпаковкуПоДеревуИндексов(ИДИндекса, Упаковка, ЭтоУпаковкаПоставщика = Ложь)
Если Упаковка = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЭтоУпаковкаПоставщика И Не ЗначениеЗаполнено(Упаковка) Тогда
Возврат;
КонецЕсли;
ЧислительИЗнаменательУпаковки = Новый Структура("Числитель, Знаменатель", 1, 1);
Если Упаковка.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Упаковка Тогда
ЧислительИЗнаменательУпаковки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Упаковка, "Числитель, Знаменатель");
Иначе
Упаковка = ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка");
КонецЕсли;
Корень = ИндексыПоиска.НайтиПоИдентификатору(ИДИндекса);
Коллекция = Корень.ПолучитьЭлементы();
Строка = Неопределено;
Если Коллекция.Количество() > 0 Тогда
Строка = ?(Коллекция[0].ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(Коллекция[0].ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(Коллекция[0].ИДСтроки));
КонецЕсли;
Если Строка <> Неопределено Тогда
Если Не ЭтоУпаковкаПоставщика Тогда
РегистрыСведений.ТоварныеОграничения.ЗадатьУпаковкуТовара(Строка.Номенклатура, Строка.Характеристика,
Строка.Склад, Упаковка);
КонецЕсли;
Для Каждого Ветвь Из Коллекция Цикл
Строка = ?(Ветвь.ТаблицаЗапасы, Объект.Запасы.НайтиПоИдентификатору(Ветвь.ИДСтроки),
Объект.ЗаказыКОбеспечению.НайтиПоИдентификатору(Ветвь.ИДСтроки));
Строка.УпаковкаЗаказа = Упаковка;
Строка.ЧислительУпаковки = ЧислительИЗнаменательУпаковки.Числитель;
Строка.ЗнаменательУпаковки = ЧислительИЗнаменательУпаковки.Знаменатель;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьДеревоИндексов(Запасы)
Корни = ИндексыПоиска.ПолучитьЭлементы();
Если Запасы Тогда
Корни.Очистить();
КонецЕсли;
Количество = Корни.Количество() - 1;
Для н = 0 По Количество Цикл
ИндексКорня = Количество - н;
Корень = Корни[ИндексКорня];
Ветви = Корень.ПолучитьЭлементы();
КоличествоВетвей = Ветви.Количество() - 1;
Для м = 0 По КоличествоВетвей Цикл
ИндексВетви = КоличествоВетвей - м;
Ветвь = Ветви[ИндексВетви];
Если Ветвь.ТаблицаЗапасы = Ложь Тогда
Ветви.Удалить(ИндексВетви);
КонецЕсли;
КонецЦикла;
Если Корень.ПолучитьЭлементы().Количество() = 0 Тогда
Корни.Удалить(ИндексКорня);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти