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