#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Обработка = РеквизитФормыВЗначение("Объект");
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ОтображатьЗаказыКОформлению = Истина;
ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки = ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки");
РазбиватьЗаказыПоСкладам = НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки");
ИспользоватьЗаказыПоставщикам = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам");
ИспользоватьОбособленноеОбеспечениеЗаказов = ПолучитьФункциональнуюОпцию("ИспользоватьОбособленноеОбеспечениеЗаказов");
ВосстановитьНастройки();
ДанныеСценария = ЗначенияРеквизитовСценария(Объект.Сценарий);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеСценария);
РежимРасчетаПотребностейПоПлануПриИзмененииНаСервере();
УстановитьВидимостьЭлементовФормы();
НастройкиВидимостиПриИзмененииСценария(ЭтаФорма);
НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(ЭтаФорма);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
Справочники.Назначения.ФормаДокументаПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
Если ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки") Тогда
РазбиватьЗаказыПоСкладам = Настройки.Получить("РазбиватьЗаказыПоСкладам");
Иначе
РазбиватьЗаказыПоСкладам = Ложь;
Настройки.Вставить("РазбиватьЗаказыПоСкладам", Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если НЕ ИспользоватьЗаказыПоставщикам Тогда
ПоказатьПредупреждение(, НСтр("ru='Для формирования заказов необходимо включить настройку ""Заказы поставщикам"" в ""Администрирование -> Закупки""'"));
Отказ = Истина;
Возврат;
КонецЕсли;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
Если ОтразитьОтборКомпоновкиВПростыхОтборах() Тогда
Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПростыеОтборы;
ОтборПодразделения = ЗначениеЗаполнено(Объект.Подразделение);
Иначе
Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПроизвольныеОтборы;
КонецЕсли;
УстановитьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("ПараметрыПоставщика") Тогда
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
ВидЦеныБылУказан = ЗначениеЗаполнено(ТекущаяСтрока.ВидЦеныПоставщика);
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, ВыбранноеЗначение.ПараметрыПоставщика);
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
Если ВыбранноеЗначение.ПараметрыПоставщика.Свойство("ЦенаВВалютеСоглашения") И ВыбранноеЗначение.ПараметрыПоставщика.ЦенаВВалютеСоглашения > 0 Тогда
ТекущаяСтрока.Цена = ВыбранноеЗначение.ПараметрыПоставщика.ЦенаВВалютеСоглашения;
ИначеЕсли ВидЦеныБылУказан Тогда
СтруктураДействий.Вставить("ЗаполнитьЦенуЗакупки", НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(ТекущаяСтрока, ТекущаяДатаСеанса));
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ТекущаяСтрока.ОтметитьКЗаказу Тогда
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
И (ВыбранноеЗначение.Свойство("РазбиватьЗаказыПоДатамЗаказа")
Или ВыбранноеЗначение.Свойство("РазбиватьЗаказыПоДатамПоставки")
Или ВыбранноеЗначение.Свойство("РазбиватьЗаказыПоНазначениям")
Или ВыбранноеЗначение.Свойство("РазбиватьЗаказыПоСкладам")
Или ВыбранноеЗначение.Свойство("РазбиватьЗаказыПоСтрокамПланов")) Тогда
ЗаполнитьЗначенияСвойств(ЭтаФорма, ВыбранноеЗначение);
УстановитьВидимостьЭлементовФормы();
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_ЗаказПоставщику" И Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
СписокДокументовДляОбновления.Добавить(Источник);
ОбновитьДанныеКогдаФормаСтанетАктивной();
ИначеЕсли ИмяСобытия = "УстановленОтбор_ФормированиеЗаказовПоставщикуПоПлану" Тогда
ЗаполнитьНаКлиенте();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ЗаполнитьНаКлиенте();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ЭтоПростыеОтборы = Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПростыеОтборы;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СценарийПриИзменении(Элемент)
ДанныеСценария = ЗначенияРеквизитовСценария(Объект.Сценарий);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеСценария);
ПривестиДатыКПериодичностиСценария(ЭтотОбъект, Объект.ПериодНачало, Объект.ПериодОкончание);
Если Не ПланированиеПоНазначениям Тогда
Назначение = Неопределено
КонецЕсли;
НастройкиВидимостиПриИзмененииСценария(ЭтаФорма);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Сценарий", Объект.Сценарий);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПланированиеПоНазначениям", ПланированиеПоНазначениям);
УстановитьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура РежимРасчетаПотребностейПоПлануПриИзменении(Элемент)
РежимРасчетаПотребностейПоПлануПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура РежимРасчетаПотребностейПоПлануПриИзмененииНаСервере()
ИнициализироватьКомпоновщикНастроек();
Если Объект.РежимРасчетаПотребностейПоПлану < 2 Тогда
Элементы.ПериодОкончание.Доступность = Истина;
Элементы.УстановитьИнтервалПериода.Доступность = Истина;
Иначе
Элементы.ПериодОкончание.Доступность = Ложь;
Элементы.УстановитьИнтервалПериода.Доступность = Ложь;
Объект.ПериодОкончание = ПланированиеКлиентСерверПовтИсп.РассчитатьДатуОкончанияПериода(ТекущаяДатаСеанса, Периодичность);
КонецЕсли;
Если Объект.РежимРасчетаПотребностейПоПлану = 0
Или Объект.РежимРасчетаПотребностейПоПлану = 2 Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаНачалаЗаказа", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаОкончанияЗаказа", Объект.ПериодОкончание);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НачалоПериода", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОкончаниеПериода", Дата("00010101"));
Иначе
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаНачалаЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаОкончанияЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НачалоПериода", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОкончаниеПериода", Объект.ПериодОкончание);
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПериодНачало", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПериодОкончание", Объект.ПериодОкончание);
КонецПроцедуры
&НаКлиенте
Процедура ПериодНачалоПриИзменении(Элемент)
ПериодНачалоПериодОкончаниеПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПериодОкончаниеПриИзменении(Элемент)
ПериодНачалоПериодОкончаниеПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПериодНачалоПериодОкончаниеПриИзменении()
ПривестиДатыКПериодичностиСценария(ЭтотОбъект, Объект.ПериодНачало, Объект.ПериодОкончание);
Если Объект.РежимРасчетаПотребностейПоПлану = 0
Или Объект.РежимРасчетаПотребностейПоПлану = 2 Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаНачалаЗаказа", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаОкончанияЗаказа", Объект.ПериодОкончание);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НачалоПериода", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОкончаниеПериода", Дата("00010101"));
Иначе
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаНачалаЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаОкончанияЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НачалоПериода", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОкончаниеПериода", Объект.ПериодОкончание);
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПериодНачало", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПериодОкончание", Объект.ПериодОкончание);
КонецПроцедуры
&НаКлиенте
Процедура ОтборПодразделенияПриИзменении(Элемент)
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОтборПодразделения", ОтборПодразделения);
НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Подразделение", Объект.Подразделение);
НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.Склад, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Склад", Объект.Склад, ЭтоОтборПоГруппе);
КонецПроцедуры
&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.Партнер, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Поставщик", Объект.Партнер, ЭтоОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Соглашение", Объект.Соглашение, Ложь);
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
Элементы.Соглашение.Доступность = Истина;
Иначе
Элементы.Соглашение.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоглашениеПриИзменении(Элемент)
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Соглашение", Объект.Соглашение, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.Номенклатура, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Номенклатура", Объект.Номенклатура, ЭтоОтборПоГруппе);
КонецПроцедуры
&НаКлиенте
Процедура СегментНоменклатурыПриИзменении(Элемент)
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.СегментНоменклатуры, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "СегментНоменклатуры", Объект.СегментНоменклатуры, ЭтоОтборПоГруппе);
КонецПроцедуры
&НаКлиенте
Процедура НазначениеПриИзменении(Элемент)
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Назначение", Объект.Назначение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОтборПоНазначению", ЗначениеЗаполнено(Объект.Назначение));
КонецПроцедуры
&НаКлиенте
Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент)
НастройкаПериодНачало = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.ПользовательскиеНастройки, "ПериодНачало");
НастройкаПериодОкончание = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.ПользовательскиеНастройки, "ПериодОкончание");
Если НастройкаПериодНачало <> Неопределено Тогда
Если ТипЗнч(НастройкаПериодНачало.Значение) = Тип("СтандартнаяДатаНачала") Тогда
Объект.ПериодНачало = НастройкаПериодНачало.Значение.Дата;
Иначе
Объект.ПериодНачало = НастройкаПериодНачало.Значение;
КонецЕсли;
КонецЕсли;
Если НастройкаПериодОкончание <> Неопределено Тогда
Если ТипЗнч(НастройкаПериодОкончание.Значение) = Тип("СтандартнаяДатаНачала") Тогда
Объект.ПериодОкончание = НастройкаПериодОкончание.Значение.Дата;
Иначе
Объект.ПериодОкончание = НастройкаПериодОкончание.Значение;
КонецЕсли;
КонецЕсли;
ПериодНачалоПериодОкончаниеПриИзменении();
НастройкаПериодНачало.Значение = Объект.ПериодНачало;
НастройкаПериодОкончание.Значение = Объект.ПериодОкончание;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПроизвольныеОтборыНажатие(Элемент)
Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПроизвольныеОтборы;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПростыеОтборыНажатие(Элемент)
Если ОтразитьОтборКомпоновкиВПростыхОтборах() Тогда
Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПростыеОтборы;
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
Элементы.Соглашение.Доступность = Истина;
Иначе
Элементы.Соглашение.Доступность = Ложь;
КонецЕсли;
ОтборПодразделения = ЗначениеЗаполнено(Объект.Подразделение);
Элементы.Подразделение.Доступность = ОтборПодразделения = 1;
Иначе
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Установлены сложные отборы, вариант использования простых отборов недоступен.'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыФормированиеЗаказов
&НаКлиенте
Процедура ФормированиеЗаказовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ТекущаяСтрока <> Неопределено Тогда
ТекущаяСтрока.ОбщийВес = ТекущаяСтрока.Количество * ТекущаяСтрока.Вес;
КонецЕсли;
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
СтруктураДействий.Удалить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
Если ТекущаяСтрока.Количество > 0 Тогда
СтруктураДействий.Вставить("ПересчитатьЦенуЗаУпаковку", ТекущаяСтрока.Количество);
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуЗакупки", НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(ТекущаяСтрока, ТекущаяДатаСеанса));
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВЗаказахНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВЗаказахОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВПланахНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВПланахОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВПланахОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
КлючСтроки = Новый Структура();
КлючСтроки.Вставить("Номенклатура", ТекСтрока.Номенклатура);
КлючСтроки.Вставить("Характеристика", ТекСтрока.Характеристика);
КлючСтроки.Вставить("НачалоПериода", ТекСтрока.ДатаПоступления);
КлючСтроки.Вставить("ОкончаниеПериода", КонецДня(ТекСтрока.ОкончаниеПериодаПоступления));
КлючСтроки.Вставить("Назначение", ТекСтрока.Назначение);
Если ТекСтрока.РедактироватьПодразделение Тогда
КлючСтроки.Вставить("Подразделение", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Подразделение", ТекСтрока.Подразделение);
КонецЕсли;
Если ТекСтрока.РедактироватьПартнер Тогда
КлючСтроки.Вставить("Партнер", ПредопределенноеЗначение("Справочник.Партнеры.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Партнер", ТекСтрока.Партнер);
КонецЕсли;
Если ТекСтрока.РедактироватьСоглашение Тогда
КлючСтроки.Вставить("Соглашение", ПредопределенноеЗначение("Справочник.СоглашенияСПоставщиками.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Соглашение", ТекСтрока.Соглашение);
КонецЕсли;
Если ТекСтрока.РедактироватьСклад Тогда
КлючСтроки.Вставить("Склад", ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Склад", ТекСтрока.Склад);
КонецЕсли;
КлючСтроки.Вставить("Сценарий", Объект.Сценарий);
Если Объект.РежимРасчетаПотребностейПоПлану > 1 Тогда
СписокДокументов = СписокПлановНарастающимИтогомПоСтроке(КлючСтроки);
Иначе
СписокДокументов = СписокПлановПоСтроке(КлючСтроки);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборДокументаПланаИзСписка", ЭтотОбъект);
СписокДокументов.ПоказатьВыборЭлемента(ОписаниеОповещения, НСтр("ru='Выберите документ'"));
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВЗаказахОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
КлючСтроки = Новый Структура();
КлючСтроки.Вставить("Номенклатура", ТекСтрока.Номенклатура);
КлючСтроки.Вставить("Характеристика", ТекСтрока.Характеристика);
КлючСтроки.Вставить("Назначение", ТекСтрока.Назначение);
КлючСтроки.Вставить("ДатаПоступления", ТекСтрока.ДатаПоступления);
КлючСтроки.Вставить("ОкончаниеПериодаПоступления", ТекСтрока.ОкончаниеПериодаПоступления);
КлючСтроки.Вставить("КонецДняОкончаниеПериодаПоступления", КонецДня(ТекСтрока.ОкончаниеПериодаПоступления));
КлючСтроки.Вставить("Назначение", ТекСтрока.Назначение);
Если ТекСтрока.РедактироватьПодразделение Тогда
КлючСтроки.Вставить("Подразделение", ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Подразделение", ТекСтрока.Подразделение);
КонецЕсли;
Если ТекСтрока.РедактироватьПартнер Тогда
КлючСтроки.Вставить("Партнер", ПредопределенноеЗначение("Справочник.Партнеры.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Партнер", ТекСтрока.Партнер);
КонецЕсли;
Если ТекСтрока.РедактироватьСоглашение Тогда
КлючСтроки.Вставить("Соглашение", ПредопределенноеЗначение("Справочник.СоглашенияСПоставщиками.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Соглашение", ТекСтрока.Соглашение);
КонецЕсли;
Если ТекСтрока.РедактироватьСклад Тогда
КлючСтроки.Вставить("Склад", ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"));
Иначе
КлючСтроки.Вставить("Склад", ТекСтрока.Склад);
КонецЕсли;
Если Объект.РежимРасчетаПотребностейПоПлану > 1 Тогда
СписокДокументов = СписокЗаказовНарастающимИтогомПоСтроке(КлючСтроки);
Иначе
СписокДокументов = СписокЗаказовПоСтроке(КлючСтроки);
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборДокументаЗаказаИзСписка", ЭтотОбъект);
СписокДокументов.ПоказатьВыборЭлемента(ОписаниеОповещения, НСтр("ru='Выберите документ'"));
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовОтметитьКЗаказуПриИзменении(Элемент)
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПодразделениеПриИзменении(Элемент)
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПодразделениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);
КлючСтроки = Новый Структура;
КлючСтроки.Вставить("Номенклатура", СтрокаТаблицы.Номенклатура);
КлючСтроки.Вставить("Характеристика", СтрокаТаблицы.Характеристика);
КлючСтроки.Вставить("ДатаПоступления", СтрокаТаблицы.ДатаПоступления);
КлючСтроки.Вставить("ОкончаниеПериодаПоступления", СтрокаТаблицы.ОкончаниеПериодаПоступления);
КлючСтроки.Вставить("РедактироватьПодразделение", Ложь);
СсылкаНеВСписке = Новый Массив;
Строки = ТаблицаФормированиеЗаказов.НайтиСтроки(КлючСтроки);
Для Каждого Строка Из Строки Цикл
СсылкаНеВСписке.Добавить(Строка.Подразделение);
КонецЦикла;
Отбор = Новый Структура("Подразделение", Истина);
Оповещение = Новый ОписаниеОповещения("ЗаполнитьПодразделениеЗавершение",
ЭтотОбъект,
Новый Структура("ВыделенныеСтроки", Элементы.ФормированиеЗаказов.ВыделенныеСтроки));
ОткрытьФорму("Справочник.СтруктураПредприятия.ФормаВыбора",
Новый Структура("Ключ, Отбор, СсылкаНеВСписке", СтрокаТаблицы.Подразделение, Отбор, СсылкаНеВСписке),
,
,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПодразделениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);
КлючСтроки = Новый Структура;
КлючСтроки.Вставить("Номенклатура", СтрокаТаблицы.Номенклатура);
КлючСтроки.Вставить("Характеристика", СтрокаТаблицы.Характеристика);
КлючСтроки.Вставить("ДатаПоступления", СтрокаТаблицы.ДатаПоступления);
КлючСтроки.Вставить("ОкончаниеПериодаПоступления", СтрокаТаблицы.ОкончаниеПериодаПоступления);
КлючСтроки.Вставить("РедактироватьПодразделение", Ложь);
СсылкаНеВСписке = Новый Массив;
Строки = ТаблицаФормированиеЗаказов.НайтиСтроки(КлючСтроки);
Для Каждого Строка Из Строки Цикл
Если ВыбранноеЗначение = Строка.Подразделение Тогда
СтандартнаяОбработка = Ложь;
ПоказатьПредупреждение(, НСтр("ru = 'По выбранному подразделению есть планы.'"));
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПартнерПриИзменении(Элемент)
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовПартнерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ФормированиеЗаказов.ТекущиеДанные;
ПараметрыФормы = Новый Структура("Номенклатура, Характеристика, Склад",
ТекущиеДанные.Номенклатура,
ТекущиеДанные.Характеристика,
ТекущиеДанные.Склад);
ОткрытьФорму("Обработка.ФормированиеЗаказовПоставщикуПоПлану.Форма.ФормаВыбораПоставщика",
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор,
,
,
,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовСоглашениеПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
РеквизитыСоглашения = ОбщегоНазначенияУТВызовСервера.ЗначенияРеквизитовОбъекта(ТекущаяСтрока.Соглашение, "Валюта, ВидЦеныПоставщика");
ТекущаяСтрока.Валюта = РеквизитыСоглашения.Валюта;
Если ЗначениеЗаполнено(РеквизитыСоглашения.ВидЦеныПоставщика) Тогда
ТекущаяСтрока.ВидЦеныПоставщика = РеквизитыСоглашения.ВидЦеныПоставщика;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяСтрока.ВидЦеныПоставщика) Тогда
СтруктураДействий.Вставить("ЗаполнитьЦенуЗакупки", НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(ТекущаяСтрока, ТекущаяДатаСеанса));
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовВидЦеныПоставщикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ВидЦеныПоставщика) Тогда
Возврат;
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
СтруктураДействий.Вставить("ЗаполнитьЦенуЗакупки", НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(ТекущаяСтрока, ТекущаяДатаСеанса));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовСкладПриИзменении(Элемент)
Если РазбиватьЗаказыПоСкладам И ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовДатаЗаказаПриИзменении(Элемент)
Если РазбиватьЗаказыПоДатамЗаказа И ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФормированиеЗаказовДатаПоступленияПриИзменении(Элемент)
Если Элементы.ФормированиеЗаказов.ТекущиеДанные.ОтметитьКЗаказу И ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыКорзинаЗаказов
&НаКлиенте
Процедура КорзинаЗаказовПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
Если Строка <> Неопределено И (Поле.Имя = "КорзинаЗаказовПартнер"
Или Поле.Имя = "КорзинаЗаказовСоглашение"
Или Поле.Имя = "КорзинаЗаказовДатаПоставки"
Или Поле.Имя = "КорзинаЗаказовСклад"
Или Поле.Имя = "КорзинаЗаказовПодразделение") Тогда
СтрокаКорзины = КорзинаЗаказов.НайтиПоИдентификатору(Строка);
Если Поле.Имя = "КорзинаЗаказовПартнер" Тогда
ИменаПолей = "Партнер";
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Назначить для выделенного товара поставщика: %1?'"), СтрокаКорзины.Партнер);
ИначеЕсли Поле.Имя = "КорзинаЗаказовПодразделение" Тогда
ИменаПолей = "Подразделение";
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Назначить для выделенного товара подразделение: %1?'"), СтрокаКорзины.Подразделение);
ИначеЕсли Поле.Имя = "КорзинаЗаказовСоглашение" Тогда
ИменаПолей = "Соглашение, Партнер, Валюта";
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Назначить для выделенного товара поставщика: %1
|и соглашение: %2?'"),СтрокаКорзины.Партнер, СтрокаКорзины.Соглашение);
ИначеЕсли Поле.Имя = "КорзинаЗаказовДатаПоставки" ИЛИ Поле.Имя = "КорзинаЗаказовСклад" Тогда
ИменаПолей = "Склад";
ТекстВопроса =СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Назначить для выделенного товара склад: %1?'"),СтрокаКорзины.Склад);
Иначе
ИменаПолей= "";
ТекстВопроса = "";
КонецЕсли;
Если НЕ ПустаяСтрока(ИменаПолей) Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Назначить'"));
Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru='Не назначать'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыПеретаскивания", ПараметрыПеретаскивания);
ДополнительныеПараметры.Вставить("ИменаПолей", ИменаПолей);
ДополнительныеПараметры.Вставить("СтрокаКорзины", СтрокаКорзины);
ПоказатьВопрос(
Новый ОписаниеОповещения("КорзинаЗаказовПеретаскиваниеЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса, Кнопки,,КодВозвратаДиалога.Да);
Возврат;
КонецЕсли;
КонецЕсли;
Для каждого СтрокаТЧ Из ПараметрыПеретаскивания.Значение Цикл
СтрокаТЧ.ОтметитьКЗаказу = Истина;
КонецЦикла;
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КорзинаЗаказовПеретаскиваниеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
ПараметрыПеретаскивания = ДополнительныеПараметры.ПараметрыПеретаскивания;
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ИменаПолей = ДополнительныеПараметры.ИменаПолей;
СтрокаКорзины = ДополнительныеПараметры.СтрокаКорзины;
ПартнерИзменен = Ложь;
СоглашениеИзменено = Ложь;
СоглашенияПустые = Ложь;
Для каждого СтрокаТЧ Из ПараметрыПеретаскивания.Значение Цикл
СтароеСоглашение = СтрокаТЧ.Соглашение;
СтароеСтарый = СтрокаТЧ.Партнер;
Если (Не СтрокаТЧ.РедактироватьПодразделение И ИменаПолей = "Подразделение")
Или (Не СтрокаТЧ.РедактироватьПартнер И ИменаПолей = "Партнер")
Или (Не СтрокаТЧ.РедактироватьСоглашение И ИменаПолей = "Соглашение")
Или (Не СтрокаТЧ.РедактироватьСклад И ИменаПолей = "Склад") Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаКорзины, ИменаПолей);
Если СтрокаТЧ.Партнер <> СтароеСтарый Тогда
ПартнерИзменен = Истина;
КонецЕсли;
Если СтрокаТЧ.Соглашение <> СтароеСоглашение Тогда
СоглашениеИзменено = Истина;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Соглашение) Тогда
СоглашенияПустые = Истина;
КонецЕсли;
КонецЦикла;
Если ПартнерИзменен ИЛИ СоглашениеИзменено ИЛИ СоглашенияПустые Тогда
ЗаказОбъект = Новый Структура("Партнер, Соглашение, Валюта, Склад, ДатаПоступления, ДатаЗаказа, ВидЦеныПоставщика");
ЗаполнитьЗначенияСвойств(ЗаказОбъект, Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]));
ЗаказОбъект.Вставить("Дата", ТекущаяДатаСеанса);
ЗаказОбъект.Вставить("ЦенаВключаетНДС", Истина);
ЦеныРассчитаны = ПриИзменененииСоглашенияНаСервере(ЗаказОбъект, ПартнерИзменен ИЛИ СоглашенияПустые);
ЗакупкиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
КонецЕсли;
КонецЕсли;
Для каждого СтрокаТЧ Из ПараметрыПеретаскивания.Значение Цикл
СтрокаТЧ.ОтметитьКЗаказу = Истина;
КонецЦикла;
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КорзинаЗаказовПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
Если ПараметрыПеретаскивания.Значение.Количество() =0 Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Попытка
ОтметитьКЗаказу = ПараметрыПеретаскивания.Значение[0].ОтметитьКЗаказу;
Исключение
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
КонецПопытки;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКоммндФормы
&НаКлиенте
Процедура УстановитьИнтервалПериода(Команда)
Оповещение = Новый ОписаниеОповещения(
"УстановитьИнтервалПериодаЗавершение",
ЭтотОбъект);
ОбщегоНазначенияУТКлиент.РедактироватьПериод(
Объект,
Новый Структура("ДатаНачала, ДатаОкончания", "ПериодНачало", "ПериодОкончание"),
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда)
Если Объект.ФормированиеЗаказов.Количество() > 0 Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
Оповещение = Новый ОписаниеОповещения("ЗаполнитьЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение,
НСтр("ru='В таблице имеются строки. При обновлении данных из планов строки будут очищены. Продолжить?'"),
Кнопки, 0);
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСписокЗаказов(Команда)
ОткрытьФорму("Документ.ЗаказПоставщику.Форма.ФормаСпискаДокументов");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#Область КомандыТаблицыФормыФормированиеЗаказов
&НаКлиенте
Процедура ОтображатьЗаказыКОформлению(Команда)
ОтображатьЗаказыКОформлениюНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПараметрыСозданияЗаказа(Команда)
ПараметрыСозданияЗаказа = Новый Структура();
ПараметрыСозданияЗаказа.Вставить("РазбиватьЗаказыПоДатамЗаказа", РазбиватьЗаказыПоДатамЗаказа);
ПараметрыСозданияЗаказа.Вставить("РазбиватьЗаказыПоДатамПоставки", РазбиватьЗаказыПоДатамПоставки);
ПараметрыСозданияЗаказа.Вставить("РазбиватьЗаказыПоНазначениям", РазбиватьЗаказыПоНазначениям);
ПараметрыСозданияЗаказа.Вставить("РазбиватьЗаказыПоСкладам", РазбиватьЗаказыПоСкладам);
ПараметрыСозданияЗаказа.Вставить("РазбиватьЗаказыПоСтрокамПланов", РазбиватьЗаказыПоСтрокамПланов);
ПараметрыСозданияЗаказа.Вставить("ВидимостьНазначения", ПланированиеПоНазначениям И ИспользоватьОбособленноеОбеспечениеЗаказов);
ОткрытьФорму("Обработка.ФормированиеЗаказовПоставщикуПоПлану.Форма.ПараметрыСозданияЗаказа", ПараметрыСозданияЗаказа, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура СнятьФлажки(Команда)
ПереключитьФлажки(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьФлажки(Команда)
ПереключитьФлажки(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПодразделение(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
Отбор = Новый Структура("Подразделение", Истина);
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);
ВыделенныеСтроки = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
Если Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока).РедактироватьПодразделение Тогда
ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Если ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в которых разрешено редактирование подразделения.'"));
Возврат;
КонецЕсли;
СсылкаНеВСписке = ПолучитьПодразделенияСПланамиПоВыделеннымСтрокам(ВыделенныеСтроки);
Оповещение = Новый ОписаниеОповещения("ЗаполнитьПодразделениеЗавершение",
ЭтотОбъект,
Новый Структура("ВыделенныеСтроки", ВыделенныеСтроки));
ОткрытьФорму("Справочник.СтруктураПредприятия.ФормаВыбора",
Новый Структура("Ключ, Отбор, СсылкаНеВСписке", СтрокаТаблицы.Подразделение, Отбор, СсылкаНеВСписке),
,
,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСклад(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
ВыделенныеСтроки = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
Если Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока).РедактироватьСклад Тогда
ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Если ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в которых разрешено редактирование склада.'"));
Возврат;
КонецЕсли;
СтруктураОтбора = Новый Структура("ЭтоГруппа", Ложь);
СтруктураПараметров = Новый Структура("Отбор, ВыборГруппИЭлементов", СтруктураОтбора, ИспользованиеГруппИЭлементов.Элементы);
ВыбранныйСклад = Неопределено;
ОткрытьФорму("Справочник.Склады.ФормаВыбора", СтруктураПараметров, ЭтаФорма,,,, Новый ОписаниеОповещения("ЗаполнитьСкладЗавершение", ЭтотОбъект, Новый Структура("ВыделенныеСтроки", ВыделенныеСтроки)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоставщика(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
ВыделенныеСтроки = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
Если Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока).РедактироватьПартнер Тогда
ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Если ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в которых разрешено редактирование поставщика.'"));
Возврат;
КонецЕсли;
Отбор = Новый Структура("Поставщик", Истина);
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);
Партнер = Неопределено;
Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоставщикаЗавершение",
ЭтотОбъект,
Новый Структура("СтрокаТаблицы, ВыделенныеСтроки", СтрокаТаблицы, ВыделенныеСтроки));
ОткрытьФорму("Справочник.Партнеры.ФормаВыбора",
Новый Структура("Ключ, Отбор", СтрокаТаблицы.Партнер, Отбор),
,
,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныПоВидуЦеныПоставщика(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
ЗаказОбъект = Новый Структура("Партнер, Соглашение, Валюта, Склад, ДатаПоступления, ДатаЗаказа, ВидЦеныПоставщика");
ЗаполнитьЗначенияСвойств(ЗаказОбъект, Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]));
ЗаказОбъект.Вставить("ВыделенныеСтроки", Элементы.ФормированиеЗаказов.ВыделенныеСтроки);
ЗаказОбъект.Вставить("Дата", ТекущаяДатаСеанса);
Если ЦеныПартнеровЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоВидуЦенПоставщика(ЗаказОбъект, "ВыделенныеСтроки", НСтр("ru = 'выделенных строк'")) Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ЗаказОбъект", ЗаказОбъект);
ЦеныПартнеровЗаполнениеКлиент.ВыбратьВидЦеныПоставщика(
Новый ОписаниеОповещения("ЗаполнитьЦеныПоВидуЦеныПоставщикаВыборВидЦеныПоставщикаЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ЗаказОбъект.Партнер);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСоглашение(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
ВыделенныеСтроки = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
Если Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока).РедактироватьСоглашение Тогда
ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Если ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в которых разрешено редактирование соглашения.'"));
Возврат;
КонецЕсли;
ПерваяСтрока = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделенныеСтроки[0]);
Партнер = ПерваяСтрока.Партнер;
Если Не ЗначениеЗаполнено(Партнер) Тогда
СтруктураОтбора = Новый Структура("Поставщик", Истина);
СтруктураПараметров = Новый Структура("Отбор", СтруктураОтбора);
Оповещение = Новый ОписаниеОповещения(
"ЗаполнитьСоглашениеПослеВыбораПартнера",
ЭтотОбъект,
Новый Структура("ВыделенныеСтроки, ПерваяСтрока, СтруктураПараметров",
ВыделенныеСтроки,
ПерваяСтрока,
СтруктураПараметров));
ОткрытьФорму("Справочник.Партнеры.ФормаВыбора",
СтруктураПараметров,
ЭтаФорма,
,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
ЗаполнитьСоглашениеФрагмент(ВыделенныеСтроки, Партнер, ПерваяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.ФормированиеЗаказов;
ДанныеТаблицы = Объект.ФормированиеЗаказов;
Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекущаяСтрока = Элементы.ФормированиеЗаказов.ТекущиеДанные;
Если НоваяСтрока <> Неопределено Тогда
Действия = Новый Структура;
Действия.Вставить("ПересчитатьКоличествоЕдиниц");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, Действия, КэшированныеЗначения);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, Действия, КэшированныеЗначения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДатуПоступления(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("УстановитьДатуПоступленияЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение,
Элементы.ФормированиеЗаказов.ТекущиеДанные.ДатаПоступления,
НСтр("ru = 'Введите дату поступления'"),
ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиИлиРаспределить(Команда)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Сценарий", Объект.Сценарий);
ПараметрыФормы.Вставить("ДатаПоступления", Элементы.ФормированиеЗаказов.ТекущиеДанные.ДатаПоступления);
ПараметрыФормы.Вставить("ТипПланирования", "ПланированиеЗакупок");
Оповещение = Новый ОписаниеОповещения("ПеренестиИлиРаспределитьЗавершение", ЭтотОбъект);
ОткрытьФорму(
"ОбщаяФорма.ФормированиеЗаказовПоПланамРаспределениеИПеренос",
ПараметрыФормы,
ЭтотОбъект,
УникальныйИдентификатор,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область КомандыПошаговогоМастера
&НаКлиенте
Процедура Далее(Команда)
Если Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг1 Тогда
Если Элементы.СтраницыВариантыОтборов.ТекущаяСтраница = Элементы.СтраницаПроизвольныеОтборы Тогда
ОтразитьОтборКомпоновкиВПростыхОтборах();
КонецЕсли;
Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ПериодОкончание)
И Объект.ПериодНачало > Объект.ПериодОкончание Тогда
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Поле = "Объект.ПериодНачало";
СообщениеПользователю.Текст = НСтр("ru = '""Начало периода"" больше ""Окончания периода"". Отбор невозможен.'");
СообщениеПользователю.Сообщить();
Возврат;
КонецЕсли;
СохранитьНастройки();
ЗаполнитьНаКлиенте();
ИначеЕсли Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
ОбновитьКорзинуЗаказов();
Если КорзинаЗаказов.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru = 'Нет заказов к оформлению. Отметьте флажком количество в колонке
|""К заказу"" для номенклатуры которую необходимо заказать.'");
ПоказатьПредупреждение(,ТекстОшибки);
Возврат;
КонецЕсли;
ОчиститьСообщения();
СоздатьЗаказыНаСервере();
ОбщегоНазначенияУТКлиентСервер.ПолучитьОтборДинамическогоСписка(Список).Элементы.Очистить();
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Ссылка",
СформированныеЗаказы,
ВидСравненияКомпоновкиДанных.ВСписке,
НСтр("ru='Сформированные заказы'"),
Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг3;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Назад(Команда)
Если Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг3 Тогда
Если СформированныеЗаказы.Количество() > 0 Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Пометить документы на удаление'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ПоказатьВопрос
(Новый ОписаниеОповещения("НазадЗавершение", ЭтотОбъект),
НСтр("ru = 'Список созданных заказов не пуст. Сформированные документы будут помечены на удаление. Пометить на удаление заказы и продолжить?'"),
Кнопки);
Возврат;
КонецЕсли;
ОчиститьСообщения();
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2;
ИначеЕсли Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
КорзинаЗаказов.Очистить();
Объект.ФормированиеЗаказов.Очистить();
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг1;
КонецЕсли;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецПроцедуры
&НаКлиенте
Процедура НазадЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если ПометитьДокументыНаУдаление(СформированныеЗаказы.ВыгрузитьЗначения()) Тогда
СформированныеЗаказы.Очистить();
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьФормированиеЗаказов(Команда)
КорзинаЗаказов.Очистить();
ОчиститьСообщения();
Объект.ФормированиеЗаказов.Очистить();
СформированныеЗаказы.Очистить();
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг1;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область НастройкиОтображенияФормы
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовДатаПоступления.Имя);
ОтборГруппа = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ОтборГруппа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ОтборГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.ДатаПоступления");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.Период.ДатаОкончания");
ОтборЭлемента = ОтборГруппа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.ДатаПоступления");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.Период.ДатаНачала");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовПодразделение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.РедактироватьПодразделение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовПартнер.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.РедактироватьПартнер");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовСоглашение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.РедактироватьСоглашение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовСклад.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.РедактироватьСклад");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЗаголовокФормы(Страница)
Если Страница = Элементы.СтраницаШаг1 Тогда
Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 1 из 3. Отбор планов'");
ИначеЕсли Страница = Элементы.СтраницаШаг2 Тогда
Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 2 из 3. Определение состава и объема заказа'");
ИначеЕсли Страница = Элементы.СтраницаШаг3 Тогда
Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 3 из 3. Уточнение сформированных заказов'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовФормы()
Элементы.ФормаОтображатьЗаказыКОформлению.Пометка = ОтображатьЗаказыКОформлению;
Элементы.ГруппаЗаказыКОформлению.Видимость = ОтображатьЗаказыКОформлению;
ВидимостьНазначения = ПланированиеПоНазначениям И ИспользоватьОбособленноеОбеспечениеЗаказов;
Элементы.КорзинаЗаказовНазначение.Видимость = РазбиватьЗаказыПоНазначениям И ВидимостьНазначения;
Элементы.ФормированиеЗаказовПеренестиРаспределить.Видимость = Периодичность <> Перечисления.Периодичность.День;
Элементы.ФормированиеЗаказовКонтекстноеМенюПеренестиРаспределить.Видимость = Периодичность <> Перечисления.Периодичность.День;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВидимостьКнопокКоманднойПанели(ТекущаяСтраница)
Если ТекущаяСтраница = Элементы.СтраницаШаг1 Тогда
Элементы.СтраницыКомандыНиз.ТекущаяСтраница = Элементы.СтраницаКомандыНизШаг1;
Элементы.ДалееШаг1.КнопкаПоУмолчанию = Истина;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
Элементы.СтраницыКомандыНиз.ТекущаяСтраница = Элементы.СтраницаКомандыНизШаг2;
Элементы.ДалееШаг2.КнопкаПоУмолчанию = Истина;
ИначеЕсли ТекущаяСтраница = Элементы.СтраницаШаг3 Тогда
Элементы.СтраницыКомандыНиз.ТекущаяСтраница = Элементы.СтраницаКомандыНизШаг3;
Элементы.ЗавершитьФормированиеЗаказовШаг3.КнопкаПоУмолчанию = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступность()
Элементы.Соглашение.Доступность = ЗначениеЗаполнено(Объект.Партнер);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(Форма)
ВидимостьКолонокПодразделения = Не (Форма.ОтборПодразделения
И ЗначениеЗаполнено(Форма.Объект.Подразделение));
Форма.Элементы.ФормированиеЗаказовПодразделение.Видимость = ВидимостьКолонокПодразделения;
Форма.Элементы.ФормированиеЗаказовЗаполнитьПодразделение.Видимость = ВидимостьКолонокПодразделения;
Форма.Элементы.КорзинаЗаказовПодразделение.Видимость = ВидимостьКолонокПодразделения;
Форма.Элементы.Подразделение.Доступность = Форма.ОтборПодразделения;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастройкиВидимостиПриИзмененииСценария(Форма)
ВидимостьНазначения = Форма.ПланированиеПоНазначениям И Форма.ИспользоватьОбособленноеОбеспечениеЗаказов;
Форма.Элементы.Назначение.Видимость = ВидимостьНазначения;
Форма.Элементы.ФормированиеЗаказовНазначение.Видимость = ВидимостьНазначения;
Форма.Элементы.КорзинаЗаказовНазначение.Видимость = ВидимостьНазначения И Форма.РазбиватьЗаказыПоНазначениям;
КонецПроцедуры
#КонецОбласти
#Область ПроцедурыРаботыСНастройкамиПользователя
&НаСервере
Процедура ИнициализироватьКомпоновщикНастроек()
Если Объект.РежимРасчетаПотребностейПоПлану = 0
Или Объект.РежимРасчетаПотребностейПоПлану = 1 Тогда
СхемаКомпоновкиДанных = Обработки.ФормированиеЗаказовПоставщикуПоПлану.ПолучитьМакет("МакетКомпоновки");
Иначе
СхемаКомпоновкиДанных = Обработки.ФормированиеЗаказовПоставщикуПоПлану.ПолучитьМакет("МакетКомпоновкиНарастающимИтогом");
СхемаКомпоновкиДанныхКоличествоВПланах = Обработки.ФормированиеЗаказовПоставщикуПоПлану.ПолучитьМакет("МакетКомпоновкиКоличествоВПланах");
СхемаКомпоновкиДанныхКоличествоВЗаказах = Обработки.ФормированиеЗаказовПоставщикуПоПлану.ПолучитьМакет("МакетКомпоновкиКоличествоВЗаказах");
АдресСхемыКомпоновкиДанныхКоличествоВПланах = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанныхКоличествоВПланах, Новый УникальныйИдентификатор);
АдресСхемыКомпоновкиДанныхКоличествоВЗаказах = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанныхКоличествоВЗаказах, Новый УникальныйИдентификатор);
КонецЕсли;
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.Планы.Запрос;
ТекстЗапроса = Справочники.ФорматыМагазинов.ТекстЗапросаВтФорматыСкладов(Ложь)
+ РегистрыСведений.СхемыОбеспечения.ПодставитьСоединениеДляПолученияСпособаОбеспечения(
ТекстЗапроса,
"ПодстановкаОсновногоСпособаОбеспечения",
"ПланыЗакупокОбороты.Номенклатура, ПланыЗакупокОбороты.Характеристика, ПланыЗакупокОбороты.Склад");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыПоставщиковСрезПоследних.Упаковка",
"ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаВесНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки(
"СпрНоменклатура.ЕдиницаИзмерения",
"СпрНоменклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаУпаковкаЗаказаКоэффициент",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УсловияЗакупок.Упаковка",
"УсловияЗакупок.Номенклатура"));
СхемаКомпоновкиДанных.НаборыДанных.Планы.Запрос = ТекстЗапроса;
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);
Если ТипЗнч(ЗначениеНастроек) = Тип("Структура")
И ЗначениеНастроек.Свойство("ПользовательскиеНастройки") Тогда
КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ЗначениеНастроек.ПользовательскиеНастройки);
КонецЕсли;
ПланированиеПоНазначениям = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Сценарий, "ПланированиеПоНазначениям");
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Подразделение", Объект.Подразделение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Сценарий", Объект.Сценарий);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПланированиеПоНазначениям", ПланированиеПоНазначениям);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Назначение", Объект.Назначение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ОтборПоНазначению", ЗначениеЗаполнено(Объект.Назначение));
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.Склад, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Склад", Объект.Склад, ЭтоОтборПоГруппе);
ЭтоОтборПоГруппе = ЭтоОтборПоГруппе(Объект.Партнер, ОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Поставщик", Объект.Партнер, ЭтоОтборПоГруппе);
ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, "Соглашение", Объект.Соглашение, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНастройки()
Настройки = Новый Структура();
Настройки.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
Настройки.Вставить("Сценарий", Объект.Сценарий);
Настройки.Вставить("ПериодНачало", Объект.ПериодНачало);
Настройки.Вставить("ПериодОкончание", Объект.ПериодОкончание);
Настройки.Вставить("Подразделение", Объект.Подразделение);
Настройки.Вставить("ОтборПодразделения", ОтборПодразделения);
Настройки.Вставить("Партнер", Объект.Партнер);
Настройки.Вставить("СегментНоменклатуры", Объект.СегментНоменклатуры);
Настройки.Вставить("Соглашение", Объект.Соглашение);
Настройки.Вставить("Склад", Объект.Склад);
Настройки.Вставить("Номенклатура", Объект.Номенклатура);
Настройки.Вставить("РежимРасчетаПотребностейПоПлану", Объект.РежимРасчетаПотребностейПоПлану);
Настройки.Вставить("РазбиватьЗаказыПоНазначениям", РазбиватьЗаказыПоНазначениям);
Настройки.Вставить("Назначение", Объект.Назначение);
СохранитьНастройкиНаСервере(Настройки);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СохранитьНастройкиНаСервере(Настройки)
КлючОбъекта = "Обработка.ФормированиеЗаказовПоставщикуПоПлану";
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, "Настройки", Настройки);
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки()
ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ФормированиеЗаказовПоставщикуПоПлану", "Настройки");
Если ТипЗнч(ЗначениеНастроек) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(Объект, ЗначениеНастроек);
ЗаполнитьЗначенияСвойств(ЭтаФорма, ЗначениеНастроек);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПроцедурыОбработчикиКомандЗавершение
&НаКлиенте
Процедура УстановитьИнтервалПериодаЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПериодНачалоПериодОкончаниеПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
ЗаполнитьНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьНаКлиенте()
Объект.ФормированиеЗаказов.Очистить();
КорзинаЗаказов.Очистить();
НачатьОжидание = ЗаполнитьНаСервере();
Если НачатьОжидание Тогда
ДлительныеОперацииКлиент.ОжидатьЗавершение(
ДлительнаяОперация,
Новый ОписаниеОповещения("ОбновитьВФонеЗавершение", ЭтотОбъект),
ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект));
Иначе
Если Объект.ФормированиеЗаказов.Количество() = 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Нет утвержденного плана для сценария %1, соответствующего установленным отборам. Необходимо изменить отборы.'"),
Объект.Сценарий);
ПоказатьПредупреждение(, ТекстОшибки);
КонецЕсли;
Если Объект.ФормированиеЗаказов.Количество() > 0 Тогда
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2;
КонецЕсли;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьНаСервере()
СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(КомпоновщикНастроек);
Периодичность = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Сценарий, "Периодичность");
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Периодичность", Периодичность);
ПараметрыПроцедуры = Новый Структура("НастройкиКомпоновкиДанных,СхемаКомпоновкиДанных",
КомпоновщикНастроек.ПолучитьНастройки(),
ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанных));
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания =
НСтр("ru = 'Заполнение списка запланированных закупок'");
ДлительнаяОперация = ДлительныеОперации.ВыполнитьВФоне(
"Обработки.ФормированиеЗаказовПоставщикуПоПлану.ОбновитьЗапланированныеЗакупки",
ПараметрыПроцедуры,
ПараметрыВыполнения);
Если ДлительнаяОперация.Статус = "Выполняется" Тогда
НачатьОжидание = Истина;
Иначе
ОбработатьРезультатЗаполнитьВФоне(ДлительнаяОперация);
НачатьОжидание = Ложь;
ДлительнаяОперация = Неопределено;
КонецЕсли;
Возврат НачатьОжидание;
КонецФункции
&НаСервере
Процедура ОбработатьРезультатЗаполнитьВФоне(Результат)
Если Результат.Статус = "Ошибка" Тогда
РезультатСтруктура = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ТипЗнч(РезультатСтруктура) = Тип("Структура") И РезультатСтруктура.Свойство("Сообщения") Тогда
Для каждого Сообщение Из РезультатСтруктура.Сообщения Цикл
Сообщение.ИдентификаторНазначения = УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
КонецЕсли;
ТаблицаРезультата = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
ТаблицаФормированиеЗаказов.Загрузить(ТаблицаРезультата);
Если ОтборПодразделения Тогда
ТаблицаФормированиеЗаказовСОтбором = ТаблицаРезультата.Скопировать(Новый Структура("Подразделение", Объект.Подразделение));
Иначе
ТаблицаФормированиеЗаказовСОтбором = ТаблицаРезультата;
КонецЕсли;
Объект.ФормированиеЗаказов.Загрузить(ТаблицаФормированиеЗаказовСОтбором);
Для Каждого СтрокаЗаказа Из Объект.ФормированиеЗаказов Цикл
СтрокаЗаказа.Период.ДатаНачала = СтрокаЗаказа.ДатаПоступления;
СтрокаЗаказа.Период.ДатаОкончания = СтрокаЗаказа.ОкончаниеПериодаПоступления;
КонецЦикла;
ЗаполнитьВалютуПоУмолчанию();
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
УстановитьВидимостьЭлементовФормы();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьВФонеЗавершение(Результат, ДопПараметры) Экспорт
ДлительнаяОперация = Неопределено;
Если Результат <> Неопределено Тогда
ОбработатьРезультатЗаполнитьВФоне(Результат);
Если Объект.ФормированиеЗаказов.Количество() = 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Нет утвержденного плана для сценария %1, соответствующего установленным отборам. Необходимо изменить отборы.'"),
Объект.Сценарий);
ПоказатьПредупреждение(, ТекстОшибки);
КонецЕсли;
Если Объект.ФормированиеЗаказов.Количество() > 0 Тогда
Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2;
КонецЕсли;
УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПодразделениеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
Подразделение = Результат;
Если НЕ ЗначениеЗаполнено(Подразделение) Тогда
Возврат;
КонецЕсли;
ПодразделениеИзменен = Ложь;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока);
Если СтрокаТаблицы.Подразделение <> Подразделение Тогда
ПодразделениеИзменен = Истина;
СтрокаТаблицы.Подразделение = Подразделение;
КонецЕсли;
КонецЦикла;
Если ПодразделениеИзменен И ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоставщикаЗавершение(Результат, ДополнительныеПараметры) Экспорт
СтрокаТаблицы = ДополнительныеПараметры.СтрокаТаблицы;
Партнер = Результат;
Если НЕ ЗначениеЗаполнено(Партнер) Тогда
Возврат;
КонецЕсли;
Если СтрокаТаблицы.Партнер <> Партнер Тогда
Соглашение = Неопределено;
Иначе
Соглашение = СтрокаТаблицы.Соглашение;
КонецЕсли;
ПартнерИзменен = Ложь;
СоглашениеИзменено = Ложь;
СоглашенияПустые = Ложь;
Для Каждого ВыделеннаяСтрока Из ДополнительныеПараметры.ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока);
СтароеСоглашение = СтрокаТаблицы.Соглашение;
Если СтрокаТаблицы.Партнер <> Партнер Тогда
СтрокаТаблицы.Соглашение = Неопределено;
СтрокаТаблицы.ВидЦеныПоставщика = Неопределено;
ПартнерИзменен = Истина;
КонецЕсли;
СтрокаТаблицы.Партнер = Партнер;
Если ЗначениеЗаполнено(Соглашение) Тогда
СтрокаТаблицы.Соглашение = Соглашение;
КонецЕсли;
Если СтрокаТаблицы.Соглашение <> СтароеСоглашение Тогда
СоглашениеИзменено = Истина;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Соглашение) Тогда
СоглашенияПустые = Истина;
КонецЕсли;
КонецЦикла;
Если ПартнерИзменен ИЛИ СоглашениеИзменено ИЛИ СоглашенияПустые Тогда
ЗаказОбъект = Новый Структура("Партнер, Соглашение, Валюта, Склад, ДатаПоступления, ДатаЗаказа, ВидЦеныПоставщика");
ЗаполнитьЗначенияСвойств(ЗаказОбъект, Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]));
ЗаказОбъект.Вставить("Дата", ТекущаяДатаСеанса);
ЗаказОбъект.Вставить("ЦенаВключаетНДС", Истина);
ЦеныРассчитаны = ПриИзменененииСоглашенияНаСервере(ЗаказОбъект, ПартнерИзменен ИЛИ СоглашенияПустые);
ЗакупкиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
Иначе
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныПоВидуЦеныПоставщикаВыборВидЦеныПоставщикаЗавершение(ВидЦеныПоставщика, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(ВидЦеныПоставщика) Тогда
Для Каждого Строка Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
СтрокаЗаказа = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Строка);
СтрокаЗаказа.Партнер = ДополнительныеПараметры.ЗаказОбъект.Партнер;
СтрокаЗаказа.Соглашение = ДополнительныеПараметры.ЗаказОбъект.Соглашение;
КонецЦикла;
ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоВидуЦеныПоставщикаСервер(ДополнительныеПараметры.ЗаказОбъект, ВидЦеныПоставщика);
ЦеныПартнеровЗаполнениеКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦеныПоставщика(ЦеныРассчитаны, ВидЦеныПоставщика);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоВидуЦеныПоставщикаСервер(ЗаказОбъект, ВидЦеныПоставщика)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Строка));
КонецЦикла;
Если ТипЗнч(ЗаказОбъект) = Тип("Структура") Тогда
ЗаказОбъект.Вставить("ЦенаВключаетНДС", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидЦеныПоставщика, "ЦенаВключаетНДС"));
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, ЗаказОбъект);
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦеныПоставщика");
ПараметрыЗаполнения.Вставить("Дата", ЗаказОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", ЗаказОбъект.Валюта);
ПараметрыЗаполнения.Вставить("ВидЦеныПоставщика", ВидЦеныПоставщика);
ЦеныРассчитаны = ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(
Объект.ФормированиеЗаказов,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
Возврат ЦеныРассчитаны;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьСоглашениеПослеВыбораПартнера(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
ПерваяСтрока = ДополнительныеПараметры.ПерваяСтрока;
СтруктураПараметров = ДополнительныеПараметры.СтруктураПараметров;
Партнер = Результат;
ЗаполнитьСоглашениеФрагмент(ВыделенныеСтроки, Партнер, ПерваяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСкладЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
ВыбранныйСклад = Результат;
Если ЗначениеЗаполнено(ВыбранныйСклад) Тогда
ЗаполненоСтрок = ЗаполнитьСкладВВыделенныхСтрокахНаСервере(ВыделенныеСтроки, ВыбранныйСклад);
СкладыКлиент.ПоказатьОповещениеОЗаполненииСкладаВТабличнойЧасти(ВыбранныйСклад, ЗаполненоСтрок, ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьСкладВВыделенныхСтрокахНаСервере(Знач МассивВыделенныхСтрок, Склад)
ЗаполненоСтрок = СкладыСервер.ЗаполнитьСкладыВВыделенныхСтроках(Объект.ФормированиеЗаказов, МассивВыделенныхСтрок, Склад);
Если ОтображатьЗаказыКОформлению И РазбиватьЗаказыПоСкладам Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
Возврат ЗаполненоСтрок
КонецФункции
&НаКлиенте
Процедура ЗаполнитьСоглашениеФрагмент(Знач ВыделенныеСтроки, Знач Партнер, Знач ПерваяСтрока)
Если НЕ ЗначениеЗаполнено(Партнер) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не выбран поставщик.'"),
,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ФормированиеЗаказов",ПерваяСтрока.НомерСтроки, "Партнер"),
"Объект");
Возврат;
КонецЕсли;
СтруктураОтбора = Новый Структура("Партнер", Партнер);
СтруктураПараметров = Новый Структура("Отбор, ДоступноДляЗакупки", СтруктураОтбора, Истина);
Оповещение = Новый ОписаниеОповещения("ЗаполнитьСоглашениеЗавершение",
ЭтотОбъект,
Новый Структура("ВыделенныеСтроки, Партнер", ВыделенныеСтроки, Партнер));
ОткрытьФорму("Справочник.СоглашенияСПоставщиками.ФормаВыбора",
СтруктураПараметров,
ЭтаФорма,
,
,
,
Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСоглашениеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
Партнер = ДополнительныеПараметры.Партнер;
Соглашение = Результат;
Если ЗначениеЗаполнено(Соглашение) Тогда
ИзмененоСоглашение = Ложь;
Для Каждого ТекСтрока Из ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ТекСтрока);
Если СтрокаТаблицы.Соглашение <> Соглашение Тогда
ИзмененоСоглашение = Истина;
КонецЕсли;
СтрокаТаблицы.Партнер = Партнер;
СтрокаТаблицы.Соглашение = Соглашение;
КонецЦикла;
Если ИзмененоСоглашение Тогда
ЗаказОбъект = Новый Структура("Партнер, Соглашение, Валюта, Склад, ДатаПоступления, ДатаЗаказа, ВидЦеныПоставщика");
ЗаполнитьЗначенияСвойств(ЗаказОбъект, Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]));
ЗаказОбъект.Вставить("Дата", ТекущаяДатаСеанса);
ЗаказОбъект.Вставить("ЦенаВключаетНДС", Истина);
ЦеныРассчитаны = ПриИзменененииСоглашенияНаСервере(ЗаказОбъект, ИзмененоСоглашение);
ЗакупкиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
Иначе
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПриИзменененииСоглашенияНаСервере(ЗаказОбъект, ЗаполнятьСоглашения = Ложь)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Строка));
КонецЦикла;
Если ЗаполнятьСоглашения Тогда
УсловияЗакупокПоУмолчанию = ЗакупкиСервер.ПолучитьУсловияЗакупокПоУмолчанию(ЗаказОбъект.Партнер, Новый Структура("УчитыватьГруппыСкладов, ВыбранноеСоглашение", Истина, ЗаказОбъект.Соглашение));
Если УсловияЗакупокПоУмолчанию <> Неопределено И ЗначениеЗаполнено(УсловияЗакупокПоУмолчанию.Соглашение) Тогда
Для каждого СтрокаТЧ Из МассивСтрок Цикл
СтрокаТЧ.Соглашение = УсловияЗакупокПоУмолчанию.Соглашение;
СтрокаТЧ.Валюта = УсловияЗакупокПоУмолчанию.Валюта;
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Склад) И ЗначениеЗаполнено(УсловияЗакупокПоУмолчанию.Склад) Тогда
СтрокаТЧ.Склад = УсловияЗакупокПоУмолчанию.Склад;
КонецЕсли;
КонецЦикла;
ЗаказОбъект.Соглашение = УсловияЗакупокПоУмолчанию.Соглашение;
ЗаказОбъект.Валюта = УсловияЗакупокПоУмолчанию.Валюта;
Если НЕ ЗначениеЗаполнено(ЗаказОбъект.Склад) И ЗначениеЗаполнено(УсловияЗакупокПоУмолчанию.Склад) Тогда
ЗаказОбъект.Склад = УсловияЗакупокПоУмолчанию.Склад;
КонецЕсли;
ЗаказОбъект.ЦенаВключаетНДС = УсловияЗакупокПоУмолчанию.ЦенаВключаетНДС;
КонецЕсли;
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, ЗаказОбъект);
ПараметрыЗаполнения = ЦеныПартнеровЗаполнениеСервер.НовыйПараметрыЗаполненияЗаполнитьЦены();
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦеныПоставщика");
ПараметрыЗаполнения.Вставить("Дата", ЗаказОбъект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", ЗаказОбъект.Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", ЗаказОбъект.Соглашение);
ПараметрыЗаполнения.Вставить("ВидЦеныПоставщика", ЗаказОбъект.ВидЦеныПоставщика);
ЦеныРассчитаны = ЦеныПартнеровЗаполнениеСервер.ЗаполнитьЦены(
Объект.ФормированиеЗаказов,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
Возврат ЦеныРассчитаны;
КонецФункции
&НаКлиенте
Процедура ПеренестиИлиРаспределитьЗавершение(ПараметрыРаспределения, ДополнительныеПараметры) Экспорт
Если ПараметрыРаспределения = Неопределено Тогда
Возврат;
КонецЕсли;
ПеренестиИлиРаспределитьЗавершениеНаСервере(ПараметрыРаспределения,
Элементы.ФормированиеЗаказов.ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Процедура ПеренестиИлиРаспределитьЗавершениеНаСервере(ПараметрыРаспределения,Знач ВыделенныеСтроки)
Планирование.ПеренестиИлиРаспределитьНаСервере(ПараметрыРаспределения,
ВыделенныеСтроки,
Объект.ФормированиеЗаказов);
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДатуПоступленияЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если Дата = Неопределено Тогда
Возврат;
КонецЕсли;
Для каждого ТекущаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
СтрокаТЧ = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ТекущаяСтрока);
СтрокаТЧ.ДатаПоступления = Дата;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ПроцедурыПолученияПлановИЗаказов
&НаСервереБезКонтекста
Функция СписокПлановПоСтроке(КлючСтроки)
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СУММА(ПланыЗакупок.КЗаказу) КАК Количество,
| ПланыЗакупок.ПланЗакупок КАК Документ,
| ДокПланЗакупок.МоментВремени КАК МоментВремени,
| ДокПланЗакупок.Дата КАК ДатаДокумента,
| ДокПланЗакупок.Номер КАК НомерДокумента,
| ПланыЗакупок.Партнер,
| ПланыЗакупок.Соглашение
|ИЗ
| РегистрНакопления.ПланыЗакупок КАК ПланыЗакупок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПланЗакупок КАК ДокПланЗакупок
| ПО ПланыЗакупок.ПланЗакупок = ДокПланЗакупок.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыПланов КАК ВидыПланов
| ПО ДокПланЗакупок.ВидПлана = ВидыПланов.Ссылка
| И (ВидыПланов.ЗаполнятьПартнера ИЛИ ВидыПланов.ЗаполнятьПартнераВТЧ)
| И (ВидыПланов.ЗаполнятьСоглашение ИЛИ ВидыПланов.ЗаполнятьСоглашениеВТЧ)
|ГДЕ
| ПланыЗакупок.Период = &НачалоПериода
| И ПланыЗакупок.Номенклатура = &Номенклатура
| И ПланыЗакупок.Характеристика = &Характеристика
| И ПланыЗакупок.Склад = &Склад
| И ПланыЗакупок.Назначение = &Назначение
| И ПланыЗакупок.Сценарий = &Сценарий
| И ПланыЗакупок.Подразделение = &Подразделение
| И (ВидыПланов.Ссылка ЕСТЬ NULL ИЛИ ПланыЗакупок.Партнер = &Партнер)
| И (ВидыПланов.Ссылка ЕСТЬ NULL ИЛИ ПланыЗакупок.Соглашение = &Соглашение)
|
|СГРУППИРОВАТЬ ПО
| ПланыЗакупок.ПланЗакупок,
| ПланыЗакупок.ДатаЗаказа,
| ДокПланЗакупок.МоментВремени,
| ДокПланЗакупок.Дата,
| ДокПланЗакупок.Номер,
| ПланыЗакупок.Партнер,
| ПланыЗакупок.Соглашение
|
|УПОРЯДОЧИТЬ ПО
| МоментВремени";
Для Каждого Свойство Из КлючСтроки Цикл
Запрос.УстановитьПараметр(Свойство.Ключ, Свойство.Значение);
КонецЦикла;
Выборка = Запрос.Выполнить().Выбрать();
СписокДокументов = Новый СписокЗначений();
Пока Выборка.Следующий() Цикл
ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (№ %2 от %3) Партнер: %4 %5'"),
Формат(Выборка.Количество, "ЧДЦ=3"), Выборка.НомерДокумента,
Формат(Выборка.ДатаДокумента, "ДЛФ=D"), ?(ЗначениеЗаполнено(Выборка.Партнер),Выборка.Партнер, "<Пустой>"),
Выборка.Соглашение);
СписокДокументов.Добавить(Выборка.Документ, ДокументПредставление);
КонецЦикла;
Возврат СписокДокументов;
КонецФункции
&НаСервере
Функция СписокПлановНарастающимИтогомПоСтроке(КлючСтроки)
КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанныхКоличествоВПланах);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанныхКоличествоВПланах);
КомпоновщикНастроекКоличествоВПланахВзаказах.Инициализировать(ИсточникНастроек);
КомпоновщикНастроекКоличествоВПланахВзаказах.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Сценарий", Объект.Сценарий);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Периодичность", Периодичность);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Подразделение", КлючСтроки.Подразделение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Партнер", КлючСтроки.Партнер);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Склад", КлючСтроки.Склад);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Соглашение", КлючСтроки.Соглашение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Номенклатура", КлючСтроки.Номенклатура);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Характеристика", КлючСтроки.Характеристика);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Назначение", КлючСтроки.Назначение);
Если Объект.РежимРасчетаПотребностейПоПлану = 0
Или Объект.РежимРасчетаПотребностейПоПлану = 2 Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаНачалаЗаказа", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаОкончанияЗаказа", Объект.ПериодОкончание);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "НачалоПериода", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ОкончаниеПериода", Дата("00010101"));
Иначе
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаНачалаЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаОкончанияЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "НачалоПериода", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ОкончаниеПериода", Объект.ПериодОкончание);
КонецЕсли;
МакетКомпоновкиДанных = КомпоновщикМакетаКомпоновкиДанных.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКоличествоВПланахВзаказах.ПолучитьНастройки(), , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений") , Ложь, );
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных,,, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений();
ТаблицаРезультата = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
СписокДокументов = Новый СписокЗначений();
Для Каждого Строка Из ТаблицаРезультата Цикл
ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (№ %2 от %3) Партнер: %4 %5'"),
Формат(Строка.Количество, "ЧДЦ=3"), Строка.НомерДокумента,
Формат(Строка.ДатаДокумента, "ДЛФ=D"), ?(ЗначениеЗаполнено(Строка.Партнер),Строка.Партнер, "<Пустой>"),
Строка.Соглашение);
СписокДокументов.Добавить(Строка.Документ, ДокументПредставление);
КонецЦикла;
Возврат СписокДокументов;
КонецФункции
&НаСервере
Функция СписокЗаказовПоСтроке(КлючСтроки)
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| ЗаказПоставщику.Ссылка КАК Документ,
| ЗаказПоставщику.Дата КАК ДатаДокумента,
| ЗаказПоставщику.Номер КАК НомерДокумента,
| ЗаказПоставщику.Партнер,
| ЗаказПоставщику.Соглашение
|ИЗ
| Документ.ЗаказПоставщику.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
| ПО ТаблицаТовары.Ссылка = ЗаказПоставщику.Ссылка
|ГДЕ
| ВЫБОР
| КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ТаблицаТовары.Склад = &Склад
| КОНЕЦ
| И ВЫБОР
| КОГДА &Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ЗаказПоставщику.Партнер = &Партнер
| КОНЕЦ
| И ВЫБОР
| КОГДА &Соглашение = ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ЗаказПоставщику.Соглашение = &Соглашение
| КОНЕЦ
| И ВЫБОР
| КОГДА &Подразделение = ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| ТОГДА НЕ ЗаказПоставщику.Подразделение В (&ПодразделенияПоКоторымЕстьПланы)
| ИНАЧЕ ЗаказПоставщику.Подразделение = &Подразделение
| КОНЕЦ
| И ТаблицаТовары.Номенклатура = &Номенклатура
| И ТаблицаТовары.Характеристика = &Характеристика
| И ВЫБОР
| КОГДА &ПланированиеПоНазначениям И &Назначение<>ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Назначение = &Назначение
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ТаблицаТовары.Количество <> 0
| И ТаблицаТовары.ДатаПоступления МЕЖДУ &ДатаПоступления И &КонецДняОкончаниеПериодаПоступления
| И ЗаказПоставщику.Проведен
| И НЕ ТаблицаТовары.Отменено
|
|СГРУППИРОВАТЬ ПО
| ЗаказПоставщику.Ссылка,
| ЗаказПоставщику.Дата,
| ЗаказПоставщику.Номер,
| ЗаказПоставщику.Партнер,
| ЗаказПоставщику.Соглашение
|
|УПОРЯДОЧИТЬ ПО
| ЗаказПоставщику.МоментВремени";
Для Каждого Свойство Из КлючСтроки Цикл
Запрос.УстановитьПараметр(Свойство.Ключ, Свойство.Значение);
КонецЦикла;
ПодразделенияПоКоторымЕстьПланы = Новый Массив;
Если Не ЗначениеЗаполнено(КлючСтроки.Подразделение) Тогда
КлючСтроки.Удалить("Подразделение");
КлючСтроки.Удалить("КонецДняОкончаниеПериодаПоступления");
КлючСтроки.Вставить("РедактироватьПодразделение", Ложь);
НайденныеСтроки = ТаблицаФормированиеЗаказов.НайтиСтроки(КлючСтроки);
Для Каждого Строка Из НайденныеСтроки Цикл
ПодразделенияПоКоторымЕстьПланы.Добавить(Строка.Подразделение);
КонецЦикла;
КонецЕсли;
Запрос.УстановитьПараметр("ПодразделенияПоКоторымЕстьПланы", ПодразделенияПоКоторымЕстьПланы);
Запрос.УстановитьПараметр("ПланированиеПоНазначениям", ПланированиеПоНазначениям);
Выборка = Запрос.Выполнить().Выбрать();
СписокДокументов = Новый СписокЗначений();
Пока Выборка.Следующий() Цикл
ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (№ %2 от %3) Партнер: %4 %5'"),
Формат(Выборка.Количество, "ЧДЦ=3"), Выборка.НомерДокумента,
Формат(Выборка.ДатаДокумента, "ДЛФ=D"), ?(ЗначениеЗаполнено(Выборка.Партнер),Выборка.Партнер, "<Пустой>"),
Выборка.Соглашение);
СписокДокументов.Добавить(Выборка.Документ, ДокументПредставление);
КонецЦикла;
Возврат СписокДокументов;
КонецФункции
&НаСервере
Функция СписокЗаказовНарастающимИтогомПоСтроке(КлючСтроки)
КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанныхКоличествоВЗаказах);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанныхКоличествоВЗаказах);
КомпоновщикНастроекКоличествоВПланахВзаказах.Инициализировать(ИсточникНастроек);
КомпоновщикНастроекКоличествоВПланахВзаказах.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Сценарий", Объект.Сценарий);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Периодичность", Периодичность);
Если ЗначениеЗаполнено(КлючСтроки.Подразделение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Подразделение", КлючСтроки.Подразделение);
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Партнер", КлючСтроки.Партнер);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Склад", КлючСтроки.Склад);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Соглашение", КлючСтроки.Соглашение);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Номенклатура", КлючСтроки.Номенклатура);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Характеристика", КлючСтроки.Характеристика);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "Назначение", КлючСтроки.Назначение);
Если Объект.РежимРасчетаПотребностейПоПлану = 0
Или Объект.РежимРасчетаПотребностейПоПлану = 2 Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаНачалаЗаказа", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаОкончанияЗаказа", Объект.ПериодОкончание);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "НачалоПериода", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ОкончаниеПериода", Дата("00010101"));
Иначе
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаНачалаЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ДатаОкончанияЗаказа", Дата("00010101"));
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "НачалоПериода", Объект.ПериодНачало);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекКоличествоВПланахВзаказах, "ОкончаниеПериода", Объект.ПериодОкончание);
КонецЕсли;
МакетКомпоновкиДанных = КомпоновщикМакетаКомпоновкиДанных.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКоличествоВПланахВзаказах.ПолучитьНастройки(), , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений") , Ложь, );
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных,,, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений();
ТаблицаРезультата = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
СписокДокументов = Новый СписокЗначений();
Для Каждого Строка Из ТаблицаРезультата Цикл
Если Не ЗначениеЗаполнено(КлючСтроки.Подразделение)
И ЗначениеЗаполнено(Строка.Подразделение) Тогда
Продолжить;
КонецЕсли;
ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (№ %2 от %3) Партнер: %4 %5'"),
Формат(Строка.Количество, "ЧДЦ=3"), Строка.НомерДокумента,
Формат(Строка.ДатаДокумента, "ДЛФ=D"), ?(ЗначениеЗаполнено(Строка.Партнер),Строка.Партнер, "<Пустой>"),
Строка.Соглашение);
СписокДокументов.Добавить(Строка.Документ, ДокументПредставление);
КонецЦикла;
Возврат СписокДокументов;
КонецФункции
&НаКлиенте
Процедура ВыборДокументаПланаИзСписка(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если Не РезультатВыбора = Неопределено Тогда
Документ = РезультатВыбора.Значение;
ПараметрыФормы = Новый Структура("Ключ", Документ);
ОткрытьФорму("Документ.ПланЗакупок.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборДокументаЗаказаИзСписка(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если Не РезультатВыбора = Неопределено Тогда
Документ = РезультатВыбора.Значение;
ПараметрыФормы = Новый Структура("Ключ", Документ);
ОткрытьФорму("Документ.ЗаказПоставщику.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СозданиеУдалениеЗаказов
&НаСервере
Процедура СоздатьЗаказыНаСервере()
Отбор = Новый Структура("ОтметитьКЗаказу", Истина);
ТаблицаЗаказов = Объект.ФормированиеЗаказов.Выгрузить(Отбор, "
| Номенклатура,
| Характеристика,
| Назначение,
| НаправлениеДеятельности,
| Склад,
| Партнер,
| Соглашение,
| ВидЦеныПоставщика,
| ДатаПоступления,
| Упаковка,
| КоличествоУпаковок,
| Цена,
| ДатаЗаказа,
| Подразделение,
| НомерСтроки");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаЗаказов.Соглашение,
| ТаблицаЗаказов.Подразделение,
| ТаблицаЗаказов.Партнер,
| ТаблицаЗаказов.Номенклатура,
| ТаблицаЗаказов.Характеристика,
| ТаблицаЗаказов.Назначение,
| ТаблицаЗаказов.НаправлениеДеятельности,
| ТаблицаЗаказов.Склад,
| ТаблицаЗаказов.Упаковка,
| ТаблицаЗаказов.КоличествоУпаковок,
| ТаблицаЗаказов.Цена,
| ТаблицаЗаказов.НомерСтроки,
| ТаблицаЗаказов.ДатаПоступления КАК ДатаПоступления,
| ВЫБОР КОГДА ТаблицаЗаказов.ДатаЗаказа>&ТекущаяДатаСеанса ТОГДА ТаблицаЗаказов.ДатаЗаказа ИНАЧЕ &ТекущаяДатаСеанса КОНЕЦ КАК ДатаЗаказа,
| ТаблицаЗаказов.ВидЦеныПоставщика
|ПОМЕСТИТЬ ТаблицаЗаказов
|ИЗ
| &ТаблицаЗаказов КАК ТаблицаЗаказов
|ГДЕ
| ТаблицаЗаказов.КоличествоУпаковок > 0
|;
|
|
|ВЫБРАТЬ
| ТаблицаЗаказов.Соглашение КАК Соглашение,
| ТаблицаЗаказов.Подразделение КАК Подразделение,
| ТаблицаЗаказов.Партнер КАК Партнер,
| ТаблицаЗаказов.Номенклатура,
| ТаблицаЗаказов.Характеристика,
| ТаблицаЗаказов.Назначение,
| ТаблицаЗаказов.НаправлениеДеятельности,
| ТаблицаЗаказов.Склад КАК Склад,
| ЕСТЬNULL(Склады.Ссылка, ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК СкладРодитель,
| ТаблицаЗаказов.Упаковка,
| СУММА(ТаблицаЗаказов.КоличествоУпаковок) КАК КоличествоУпаковок,
| ТаблицаЗаказов.Цена,
| ТаблицаЗаказов.НомерСтроки,
| ВЫБОР
| КОГДА ТаблицаЗаказов.ДатаПоступления>ДОБАВИТЬКДАТЕ(&ТекущаяДатаСеанса, ДЕНЬ, ЕСТЬNULL(ТаблицаЗаказов.Соглашение.СрокПоставки, 0))
| ТОГДА ТаблицаЗаказов.ДатаПоступления
| ИНАЧЕ ДОБАВИТЬКДАТЕ(&ТекущаяДатаСеанса, ДЕНЬ, ЕСТЬNULL(ТаблицаЗаказов.Соглашение.СрокПоставки, 0))
| КОНЕЦ КАК ДатаПоступления,
| ТаблицаЗаказов.ДатаЗаказа КАК ДатаЗаказа,
| ТаблицаЗаказов.ВидЦеныПоставщика
|ИЗ
| ТаблицаЗаказов КАК ТаблицаЗаказов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО (ВЫРАЗИТЬ(ТаблицаЗаказов.Склад КАК Справочник.Склады).Родитель = Склады.Ссылка)
| И (Склады.ЭтоГруппа)
| И (Склады.ВыборГруппы В (ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах), ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных)))
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказов.Соглашение,
| ТаблицаЗаказов.Подразделение,
| ТаблицаЗаказов.ДатаЗаказа,
| ТаблицаЗаказов.Номенклатура,
| ТаблицаЗаказов.ДатаПоступления,
| ТаблицаЗаказов.Склад,
| ТаблицаЗаказов.Партнер,
| ТаблицаЗаказов.ВидЦеныПоставщика,
| ТаблицаЗаказов.Характеристика,
| ТаблицаЗаказов.Назначение,
| ТаблицаЗаказов.НаправлениеДеятельности,
| ТаблицаЗаказов.Упаковка,
| ТаблицаЗаказов.Цена,
| ТаблицаЗаказов.НомерСтроки,
| ЕСТЬNULL(Склады.Ссылка, ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))
|
|УПОРЯДОЧИТЬ ПО
| Подразделение,
| Партнер,
| Соглашение,
| СкладРодитель,
| Склад,
| ДатаПоступления,
| ДатаЗаказа";
Запрос.УстановитьПараметр("ТаблицаЗаказов", ТаблицаЗаказов);
Запрос.УстановитьПараметр("ТекущаяДатаСеанса", ТекущаяДатаСеанса);
Результат = Запрос.Выполнить();
СписокОшибок = Новый СписокЗначений;
ТаблицаЗаказов = Результат.Выгрузить();
Колонки = "Партнер,Соглашение,СкладРодитель, Подразделение";
Если РазбиватьЗаказыПоНазначениям Тогда
Колонки = Колонки + ",Назначение";
КонецЕсли;
ЕстьСкладыБезГруппы = Ложь;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки") Тогда
ЕстьСкладыБезГруппы = ТаблицаЗаказов.НайтиСтроки(Новый Структура("СкладРодитель", Справочники.Склады.ПустаяСсылка())).Количество() > 0;
КонецЕсли;
Если РазбиватьЗаказыПоСкладам
ИЛИ НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки")
ИЛИ ЕстьСкладыБезГруппы Тогда
Колонки = Колонки + ",Склад";
КонецЕсли;
Если РазбиватьЗаказыПоДатамПоставки Тогда
Колонки = Колонки + ",ДатаПоступления";
КонецЕсли;
Если РазбиватьЗаказыПоДатамЗаказа Тогда
Колонки = Колонки + ",ДатаЗаказа";
КонецЕсли;
Если РазбиватьЗаказыПоСтрокамПланов Тогда
Колонки = Колонки + ",НомерСтроки";
КонецЕсли;
ТаблицаДокументов = ТаблицаЗаказов.Скопировать(, Колонки);
ТаблицаДокументов.Свернуть(Колонки,);
Для каждого СтрокаДокумента Из ТаблицаДокументов Цикл
ДанныеЗаполнения = Новый Структура(Колонки);
Если НЕ РазбиватьЗаказыПоСкладам
И ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки")
И ЗначениеЗаполнено(СтрокаДокумента.СкладРодитель) Тогда
ДанныеЗаполнения.Удалить("Склад");
ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, СтрокаДокумента);
НайденныеСтроки = ТаблицаДокументов.НайтиСтроки(ДанныеЗаполнения);
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если НайденнаяСтрока = СтрокаДокумента Тогда
Продолжить;
КонецЕсли;
ТаблицаДокументов.Удалить(НайденнаяСтрока);
КонецЦикла;
Иначе
ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, СтрокаДокумента);
КонецЕсли;
Товары = ТаблицаЗаказов.Скопировать(ДанныеЗаполнения);
ДанныеЗаполнения.Вставить("Товары", Товары);
Если РазбиватьЗаказыПоНазначениям Тогда
ДанныеЗаполнения.Вставить("НаправлениеДеятельности", Товары[0].НаправлениеДеятельности);
Иначе
НаправленияДеятельности = Товары.Скопировать(,"НаправлениеДеятельности");
НаправленияДеятельности.Свернуть("НаправлениеДеятельности");
Если НаправленияДеятельности.Количество() = 1 Тогда
ДанныеЗаполнения.Вставить("НаправлениеДеятельности", НаправленияДеятельности[0].НаправлениеДеятельности);
КонецЕсли
КонецЕсли;
ДанныеЗаполнения.Вставить("ДатаПоступления", Дата("00010101"));
Для каждого СтрокаТЧ Из Товары Цикл
ДанныеЗаполнения.ДатаПоступления = Макс(ДанныеЗаполнения.ДатаПоступления, СтрокаТЧ.ДатаПоступления);
ДанныеЗаполнения.Вставить("Склад", СтрокаТЧ.Склад);
КонецЦикла;
Если НЕ РазбиватьЗаказыПоСкладам
И ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки")
И ЗначениеЗаполнено(СтрокаДокумента.СкладРодитель)
И Товары.НайтиСтроки(Новый Структура("Склад", ДанныеЗаполнения.Склад)).Количество() < Товары.Количество() Тогда
ДанныеЗаполнения.Вставить("Склад", СтрокаДокумента.СкладРодитель);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаДокумента.Подразделение) Тогда
ДанныеЗаполнения.Вставить("Подразделение", СтрокаДокумента.Подразделение);
КонецЕсли;
ДокументОбъект = Документы.ЗаказПоставщику.СоздатьДокумент();
ДокументОбъект.Дата = ?(РазбиватьЗаказыПоДатамЗаказа, ДанныеЗаполнения.ДатаЗаказа, ТекущаяДатаСеанса);
ДокументОбъект.Заполнить(ДанныеЗаполнения);
ЗаписатьЗаказНаСервере(ДокументОбъект, СтрокаДокумента.СкладРодитель, СписокОшибок);
КонецЦикла;
Для каждого ЭлементСписка Из СписокОшибок Цикл
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ЭлементСписка.Представление, ЭлементСписка.Значение);
ЭлементСписка.Значение = Неопределено;
КонецЦикла;
СписокОшибок = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьЗаказНаСервере(ДокументОбъект, СкладРодитель, СписокОшибок)
Если ДокументОбъект = Неопределено Тогда
Возврат;
КонецЕсли;
ДокументОбъект.Комментарий = НСтр("ru = 'Сформирован автоматически обработкой ""Формирование заказов поставщику по плану"".'");
Если ЗначениеЗаполнено(ДокументОбъект.Соглашение) И (НЕ ЗначениеЗаполнено(ДокументОбъект.Организация) ИЛИ НЕ ЗначениеЗаполнено(ДокументОбъект.Партнер) ИЛИ НЕ ЗначениеЗаполнено(ДокументОбъект.Контрагент)) Тогда
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументОбъект.Соглашение, "Организация, Партнер, Контрагент");
ЗаполнитьЗначенияСвойств(ДокументОбъект, Реквизиты);
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПоставщикам") Тогда
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовПоставщикам.Закрыт;
Иначе
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовПоставщикам.Подтвержден;
КонецЕсли;
Если ЗначениеЗаполнено(ДокументОбъект.Склад) Тогда
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовЗакупки(ДокументОбъект.Склад);
СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(ДокументОбъект.Склад, СкладГруппа, ДокументОбъект.Товары, Ложь);
КонецЕсли;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(ДокументОбъект);
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ДокументОбъект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
КэшированныеЗначения = Неопределено;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ДокументОбъект.Товары, СтруктураДействий, КэшированныеЗначения);
Склад = ДокументОбъект.Склад;
Если ЗначениеЗаполнено(Склад) Тогда
ДокументОбъект.Склад = Склад;
КонецЕсли;
ТекстОшибкиЗаписи = НСтр("ru='%1 невозможно записать документ по причине:
|%2'");
ТекстОшибкиЗаполнения = НСтр("ru='%1 невозможно провести по причине некорректного заполнения.'");
Попытка
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
СформированныеЗаказы.Добавить(ДокументОбъект.Ссылка);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
Сообщения = ПолучитьСообщенияПользователю(Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
СформированныеЗаказы.Добавить(ДокументОбъект.Ссылка);
СписокОшибок.Добавить(ДокументОбъект,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибкиЗаполнения, Строка(ДокументОбъект.Ссылка)));
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование заказов поставщику по плану'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ТекстОшибки = ОписаниеОшибки();
СписокОшибок.Добавить(ДокументОбъект,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибкиЗаписи, Строка(ДокументОбъект.Ссылка), ТекстОшибки));
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПометитьДокументыНаУдаление(СсылкиНаПометкуУдаления)
СписокОшибок = ОбщегоНазначенияУТ.УстановитьПометкуУдаленияДокументов(СсылкиНаПометкуУдаления);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИСТИНА КАК Поле1
|ИЗ
| РегистрСведений.РеестрДокументов КАК РеестрДокументов
|ГДЕ
| РеестрДокументов.Ссылка В(&Ссылка)
| И НЕ РеестрДокументов.ПометкаУдаления";
Запрос.УстановитьПараметр("Ссылка", СсылкиНаПометкуУдаления);
Если Запрос.Выполнить().Пустой() Тогда
Возврат Истина;
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(СписокОшибок);
Возврат Ложь;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ПрочиеПроцедурыИФункции
&НаСервереБезКонтекста
Функция ЗначенияРеквизитовСценария(Сценарий)
Если ЗначениеЗаполнено(Сценарий) Тогда
Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сценарий, "Периодичность, ПланированиеПоНазначениям");
Иначе
Результат = Новый Структура;
Результат.Вставить("Периодичность", Неопределено);
Результат.Вставить("ПланированиеПоНазначениям", Ложь);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПривестиДатыКПериодичностиСценария(Форма, ДатаНачала, ДатаОкончания)
НоваяДатаНачала = ПланированиеКлиентСерверПовтИсп.РассчитатьДатуНачалаПериода(
ДатаНачала, Форма.Периодичность);
ДатаНачала = ?(ЗначениеЗаполнено(ДатаНачала), НоваяДатаНачала, ДатаНачала);
НоваяДатаОкончания = ПланированиеКлиентСерверПовтИсп.РассчитатьДатуОкончанияПериода(
ДатаОкончания, Форма.Периодичность);
ДатаОкончания = ?(ЗначениеЗаполнено(ДатаОкончания), НоваяДатаОкончания, ДатаОкончания);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДанныеКогдаФормаСтанетАктивной()
ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной()
Если ВводДоступен() Тогда
Если ПроверитьЕстьДокументыДляОбновления() Тогда
ПоказатьВопрос(
Новый ОписаниеОповещения("ОбработкаОповещенияЗавершение", ЭтотОбъект),
НСтр("ru='Заказы поставщику были изменены. Хотите обновить данные? При обновлении строки будут очищены.'"),
РежимДиалогаВопрос.ДаНет,
,
,
НСтр("ru='Формирование заказов поставщику по плану'"));
КонецЕсли;
Иначе
ОбновитьДанныеКогдаФормаСтанетАктивной();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьЕстьДокументыДляОбновления()
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФормированиеЗаказов.Подразделение КАК Подразделение,
| ТаблицаФормированиеЗаказов.Номенклатура КАК Номенклатура,
| ТаблицаФормированиеЗаказов.Характеристика КАК Характеристика,
| ТаблицаФормированиеЗаказов.ДатаПоступления КАК ДатаПоступления,
| ТаблицаФормированиеЗаказов.ОкончаниеПериодаПоступления КАК ОкончаниеПериодаПоступления,
| ТаблицаФормированиеЗаказов.РедактироватьПодразделение КАК РедактироватьПодразделение
|ПОМЕСТИТЬ ТаблицаФормированиеЗаказов
|ИЗ
| &ТаблицаФормированиеЗаказов КАК ТаблицаФормированиеЗаказов
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаказПоставщику.Ссылка КАК Документ
|ИЗ
| Документ.ЗаказПоставщику.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
| ПО ТаблицаТовары.Ссылка = ЗаказПоставщику.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаФормированиеЗаказов КАК ТаблицаФормированиеЗаказов
| ПО ТаблицаТовары.Номенклатура = ТаблицаФормированиеЗаказов.Номенклатура
| И ТаблицаТовары.Характеристика = ТаблицаФормированиеЗаказов.Характеристика
|ГДЕ
| ВЫБОР
| КОГДА ТаблицаФормированиеЗаказов.РедактироватьПодразделение
| ТОГДА ИСТИНА
| ИНАЧЕ ТаблицаФормированиеЗаказов.Подразделение = ЗаказПоставщику.Подразделение
| КОНЕЦ
| И ТаблицаТовары.ДатаПоступления МЕЖДУ ТаблицаФормированиеЗаказов.ДатаПоступления И ТаблицаФормированиеЗаказов.ОкончаниеПериодаПоступления
| И НЕ ТаблицаТовары.Отменено
| И ЗаказПоставщику.Ссылка.Проведен
| И ЗаказПоставщику.Ссылка В(&СписокДокументовДляОбновления)";
Запрос.УстановитьПараметр("СписокДокументовДляОбновления", СписокДокументовДляОбновления);
Запрос.УстановитьПараметр("ТаблицаФормированиеЗаказов", ТаблицаФормированиеЗаказов.Выгрузить());
ЗаказыНеВходятВПланы = Запрос.Выполнить().Пустой();
СписокДокументовДляОбновления.Очистить();
Возврат Не ЗаказыНеВходятВПланы;
КонецФункции
&НаСервере
Процедура ОтображатьЗаказыКОформлениюНаСервере()
ОтображатьЗаказыКОформлению = Не ОтображатьЗаказыКОформлению;
УстановитьВидимостьЭлементовФормы();
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьКорзинуЗаказов()
Отбор = Новый Структура("ОтметитьКЗаказу", Истина);
Колонки = "Партнер, Соглашение, Подразделение";
Если РазбиватьЗаказыПоСкладам Тогда
Колонки = Колонки + ", Склад";
КонецЕсли;
Если РазбиватьЗаказыПоДатамЗаказа Тогда
Колонки = Колонки + ",ДатаЗаказа";
КонецЕсли;
Если РазбиватьЗаказыПоДатамПоставки Тогда
Колонки = Колонки + ",ДатаПоступления";
КонецЕсли;
Если РазбиватьЗаказыПоНазначениям Тогда
Колонки = Колонки + ",Назначение";
КонецЕсли;
Если РазбиватьЗаказыПоСтрокамПланов Тогда
Колонки = Колонки + ",НомерСтроки";
КонецЕсли;
ТаблицаКорзинаЗаказов = Объект.ФормированиеЗаказов.Выгрузить(Отбор, Колонки + ",Количество, КоличествоУпаковок, Сумма, СуммаСНДС, ОбщийВес");
Для Каждого Строка Из ТаблицаКорзинаЗаказов Цикл
Если Строка.КоличествоУпаковок>0 Тогда
Строка.Количество = 1;
КонецЕсли;
КонецЦикла;
ТаблицаКорзинаЗаказов.Свернуть(Колонки, "Количество, КоличествоУпаковок, Сумма, СуммаСНДС, ОбщийВес");
КорзинаЗаказов.Очистить();
Для Каждого Строка Из ТаблицаКорзинаЗаказов Цикл
Если Строка.КоличествоУпаковок = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = КорзинаЗаказов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.ВсегоСтрок = Строка.Количество;
НоваяСтрока.Количество = Строка.КоличествоУпаковок;
НоваяСтрока.СуммаУпрУчет = Строка.СуммаСНДС;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьФлажки(Устанавливать)
Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
Возврат;
КонецЕсли;
Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока);
Если Устанавливать И НЕ СтрокаТаблицы.ОтметитьКЗаказу И СтрокаТаблицы.КоличествоУпаковок > 0 Тогда
СтрокаТаблицы.ОтметитьКЗаказу = Истина;
ИначеЕсли Не Устанавливать И СтрокаТаблицы.ОтметитьКЗаказу Тогда
СтрокаТаблицы.ОтметитьКЗаказу = Ложь;
КонецЕсли;
КонецЦикла;
Если ОтображатьЗаказыКОформлению Тогда
ОбновитьКорзинуЗаказов();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьПодразделенияСПланамиПоВыделеннымСтрокам(ИдентификаторыСтрок)
Таблица = ТаблицаФормированиеЗаказов.Выгрузить();
ТаблицаВыделенныеСтроки = Таблица.СкопироватьКолонки();
Для Каждого Идентификатор Из ИдентификаторыСтрок Цикл
НоваяСтрока = ТаблицаВыделенныеСтроки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Идентификатор));
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаВыделенныеСтроки.Номенклатура КАК Номенклатура,
| ТаблицаВыделенныеСтроки.Характеристика КАК Характеристика,
| ТаблицаВыделенныеСтроки.ДатаПоступления КАК ДатаПоступления,
| ТаблицаВыделенныеСтроки.ОкончаниеПериодаПоступления КАК ОкончаниеПериодаПоступления
|ПОМЕСТИТЬ ТаблицаВыделенныеСтроки
|ИЗ
| &ТаблицаВыделенныеСтроки КАК ТаблицаВыделенныеСтроки
|;
|
|
|ВЫБРАТЬ
| ТаблицаФормированиеЗаказов.Подразделение КАК Подразделение,
| ТаблицаФормированиеЗаказов.Номенклатура КАК Номенклатура,
| ТаблицаФормированиеЗаказов.Характеристика КАК Характеристика,
| ТаблицаФормированиеЗаказов.ДатаПоступления КАК ДатаПоступления,
| ТаблицаФормированиеЗаказов.ОкончаниеПериодаПоступления КАК ОкончаниеПериодаПоступления,
| ТаблицаФормированиеЗаказов.РедактироватьПодразделение КАК РедактироватьПодразделение
|ПОМЕСТИТЬ ТаблицаФормированиеЗаказов
|ИЗ
| &ТаблицаФормированиеЗаказов КАК ТаблицаФормированиеЗаказов
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаФормированиеЗаказов.Подразделение
|ИЗ
| ТаблицаФормированиеЗаказов КАК ТаблицаФормированиеЗаказов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаВыделенныеСтроки КАК ТаблицаВыделенныеСтроки
| ПО ТаблицаФормированиеЗаказов.Номенклатура = ТаблицаВыделенныеСтроки.Номенклатура
| И ТаблицаФормированиеЗаказов.Характеристика = ТаблицаВыделенныеСтроки.Характеристика
| И ТаблицаФормированиеЗаказов.ДатаПоступления = ТаблицаВыделенныеСтроки.ДатаПоступления
| И (ТаблицаФормированиеЗаказов.РедактироватьПодразделение = ЛОЖЬ)";
Запрос.УстановитьПараметр("ТаблицаФормированиеЗаказов",Таблица);
Запрос.УстановитьПараметр("ТаблицаВыделенныеСтроки",ТаблицаВыделенныеСтроки);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение");
КонецФункции
&НаКлиенте
Функция ОтразитьОтборКомпоновкиВПростыхОтборах()
ОтражениеНедопустимо = Ложь;
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.Использование Тогда
ОтборПоГруппеДоступен =
ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.Склады") ИЛИ
ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.Партнеры") ИЛИ
ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.Номенклатура") ИЛИ
ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.СегментыНоменклатуры") ИЛИ
ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СправочникСсылка.СтруктураПредприятия");
ОтражениеНедопустимо =
НЕ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
И НЕ (ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии И ОтборПоГруппеДоступен)
ИЛИ ЭлементОтбора.ПравоеЗначение = Неопределено
ИЛИ ЭлементОтбора.ПравоеЗначение.Пустая();
Если ОтражениеНедопустимо Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ОтражениеНедопустимо Тогда
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если Не ЭлементПользовательскойНастройки = Неопределено Тогда
ЗаполнитьПараметр(Объект.Подразделение,
"ОтборПодразделения",
Ложь,
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПараметр(Объект.Подразделение,
"Подразделение",
ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПараметр(Объект.Сценарий,
"Сценарий",
ПредопределенноеЗначение("Справочник.СценарииТоварногоПланирования.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПараметр(Объект.ПериодНачало,
Объект.ПериодНачало,
Дата("00010101"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПараметр(Объект.ПериодОкончание,
Объект.ПериодОкончание,
Дата("00010101"),
ЭлементОтбора,
ЭлементПользовательскойНастройки)
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если Не ЭлементПользовательскойНастройки = Неопределено Тогда
ЗаполнитьПростойОтбор(
Объект.Склад,
"Склад",
ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(
Объект.Партнер,
"Поставщик",
ПредопределенноеЗначение("Справочник.Партнеры.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(
Объект.Соглашение,
"Соглашение",
ПредопределенноеЗначение("Справочник.СоглашенияСПоставщиками.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(
Объект.Номенклатура,
"Номенклатура",
ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(Объект.СегментНоменклатуры,
"СегментНоменклатуры",
ПредопределенноеЗначение("Справочник.СегментыНоменклатуры.ПустаяСсылка"),
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(Объект.ПериодНачало,
"ПериодНачало",
Объект.ПериодНачало,
ЭлементОтбора,
ЭлементПользовательскойНастройки);
ЗаполнитьПростойОтбор(Объект.ПериодОкончание,
"ПериодОкончание",
Объект.ПериодОкончание,
ЭлементОтбора,
ЭлементПользовательскойНастройки);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Не ОтражениеНедопустимо;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьПростойОтбор(РеквизитФормы, ИмяПоля, ЗначениеПоУмолчанию, ЭлементОтбора, ЭлементПользовательскойНастройки)
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ИмяПоля);
Если ПолеКомпоновки = ЭлементОтбора.ЛевоеЗначение Тогда
Если ЭлементПользовательскойНастройки.Использование Тогда
РеквизитФормы = ЭлементПользовательскойНастройки.ПравоеЗначение;
Иначе
РеквизитФормы = ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметр(РеквизитФормы, ИмяПараметра, ЗначениеПоУмолчанию, ЭлементПараметра, ЭлементПользовательскойНастройки)
ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
Если ПараметрКомпоновки = ЭлементПараметра.Параметр Тогда
Если ЭлементПользовательскойНастройки.Использование Тогда
РеквизитФормы = ЭлементПользовательскойНастройки.Значение;
Иначе
РеквизитФормы = ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОтразитьПростойОтборВОтборахКомпоновки(КомпоновщикНастроек, ИмяПоля, Значение, ЭтоОтборПоГруппе)
ЗначениеПоиска = Новый ПолеКомпоновкиДанных(ИмяПоля);
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = ЗначениеПоиска Тогда
ЭлементПользовательскойНастройки
= КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если Не ЭлементПользовательскойНастройки = Неопределено Тогда
ЭлементПользовательскойНастройки.Использование = (Значение <> Неопределено) И Не Значение.Пустая();
Если ЭлементПользовательскойНастройки.Использование Тогда
ВариантВидаСравнения = ВидСравненияКомпоновкиДанных.Равно;
Если ЭтоОтборПоГруппе Тогда
ВариантВидаСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
КонецЕсли;
ЭлементПользовательскойНастройки.ВидСравнения = ВариантВидаСравнения;
ЭлементПользовательскойНастройки.ПравоеЗначение = Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОтборПоГруппе(Ключ, ОтборПоГруппе)
ЗначениеОтбора = ОтборПоГруппе.НайтиПоЗначению(Ключ);
Если ЗначениеОтбора = Неопределено Тогда
ПризнакОтбораПоГруппе = ЭтоОтборПоГруппеНаСервере(Ключ);
ОтборПоГруппе.Добавить(Ключ,,ПризнакОтбораПоГруппе);
Иначе
ПризнакОтбораПоГруппе = ЗначениеОтбора.Пометка;
КонецЕсли;
Возврат ПризнакОтбораПоГруппе;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоОтборПоГруппеНаСервере(ЗначениеОтбора)
Если ТипЗнч(ЗначениеОтбора) = Тип("СправочникСсылка.Склады") Тогда
ИмяСправочника = "Склады";
ИначеЕсли ТипЗнч(ЗначениеОтбора) = Тип("СправочникСсылка.Номенклатура") Тогда
ИмяСправочника = "Номенклатура";
ИначеЕсли ТипЗнч(ЗначениеОтбора) = Тип("СправочникСсылка.Партнеры") Тогда
Возврат Истина;
ИначеЕсли ТипЗнч(ЗначениеОтбора) = Тип("СправочникСсылка.СегментыНоменклатуры") Тогда
ИмяСправочника = "СегментыНоменклатуры";
Иначе
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаСправочника.ЭтоГруппа КАК ЭтоГруппа
|ИЗ
| &ТекстЗапросаИмяСправочника КАК ТаблицаСправочника
|ГДЕ
| ТаблицаСправочника.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ЗначениеОтбора);
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"&ТекстЗапросаИмяСправочника",
"Справочник." + ИмяСправочника + "");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.ЭтоГруппа;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(Строка, ТекущаяДатаСеанса)
СтруктураЗаполненияЦены = Новый Структура;
СтруктураЗаполненияЦены.Вставить("Организация", Неопределено);
СтруктураЗаполненияЦены.Вставить("Соглашение", Строка.Соглашение);
СтруктураЗаполненияЦены.Вставить("Партнер", Строка.Партнер);
СтруктураЗаполненияЦены.Вставить("Дата", ТекущаяДатаСеанса);
СтруктураЗаполненияЦены.Вставить("Валюта", Строка.Валюта);
Возврат СтруктураЗаполненияЦены;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект = Неопределено)
Если Объект = Неопределено Тогда
СтруктураПересчетаСуммы = Новый Структура;
СтруктураПересчетаСуммы.Вставить("ЦенаВключаетНДС", Истина);
Иначе
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
КонецЕсли;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВалютуПоУмолчанию()
Если ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСПоставщиками") Тогда
Возврат;
КонецЕсли;
ЗаполнитьВалютуПоУмолчанию = Ложь;
Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют") Тогда
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Сценарий,
"ПланЗакупокПланироватьПоСумме, ПланПродажПланироватьПоСумме");
Если Не Реквизиты.ПланЗакупокПланироватьПоСумме И Не Реквизиты.ПланПродажПланироватьПоСумме Тогда
ЗаполнитьВалютуПоУмолчанию = Истина;
КонецЕсли;
Иначе
ЗаполнитьВалютуПоУмолчанию = Истина;
КонецЕсли;
Если ЗаполнитьВалютуПоУмолчанию Тогда
Валюта = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета();
Для Каждого СтрокаФормированияЗаказа Из Объект.ФормированиеЗаказов Цикл
Если Не ЗначениеЗаполнено(СтрокаФормированияЗаказа.Валюта) Тогда
СтрокаФормированияЗаказа.Валюта = Валюта;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти