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