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