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