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