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