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