#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "АдресВХранилище, Организация, Подразделение, Ссылка, Назначение");
ЗаполнитьТаблицуТоваров();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗаполнитьТаблицуТоваров();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПеренестиВДокументВыполнить()
ПоместитьТоварыВХранилище();
ОповеститьОВыборе(АдресВХранилище);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьСтрокиВыполнить()
ОтметитьСтроки(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьСтрокиВыполнить()
ОтметитьСтроки(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьВыделенныеСтроки(Команда)
МассивСтрок = Элементы.ТаблицаТоваров.ВыделенныеСтроки;
ОтметитьСтроки(Истина, МассивСтрок);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьВыделенныеСтроки(Команда)
МассивСтрок = Элементы.ТаблицаТоваров.ВыделенныеСтроки;
ОтметитьСтроки(Ложь, МассивСтрок);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаТоваровПодразделение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаТоваров.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТоваров.ПрисутствуетВДокументе");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);
КонецПроцедуры
&НаСервере
Процедура ПоместитьТоварыВХранилище()
Товары = ТаблицаТоваров.Выгрузить(Новый Структура("Выбран", Истина), "Выбран, Номенклатура, Характеристика, Серия, Назначение, Подразделение, Количество, КоличествоУпаковок");
АдресВХранилище = ПоместитьВоВременноеХранилище(Товары);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТаблицуТоваров()
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СтруктураПараметров = Новый Структура("Организация, Подразделение, ДокументВозврата, Назначение");
ЗаполнитьЗначенияСвойств(СтруктураПараметров, ЭтаФорма, "Организация, Подразделение, Назначение");
СтруктураПараметров.ДокументВозврата = Ссылка;
УстановитьПривилегированныйРежим(Истина);
ЗапасыСервер.ТаблицаОстатковМатериаловВПодразделении(МенеджерВременныхТаблиц, СтруктураПараметров);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.Назначение КАК Назначение,
| Товары.Подразделение КАК Подразделение,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| ТаблицаОстатков.Номенклатура КАК Номенклатура,
| ТаблицаОстатков.Характеристика КАК Характеристика,
| ТаблицаОстатков.Серия КАК Серия,
| ТаблицаОстатков.Количество КАК Количество,
| ТаблицаОстатков.Назначение КАК Назначение,
| ТаблицаОстатков.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА Товары.Количество ЕСТЬ NULL
| ИЛИ Товары.Количество = 0
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПрисутствуетВДокументе,
| ТаблицаОстатков.Количество КАК КоличествоУпаковок
|ИЗ
| ТаблицаОстатков КАК ТаблицаОстатков
| ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары
| ПО ТаблицаОстатков.Номенклатура = Товары.Номенклатура
| И ТаблицаОстатков.Характеристика = Товары.Характеристика
| И ТаблицаОстатков.Серия = Товары.Серия
| И ТаблицаОстатков.Назначение = Товары.Назначение
| И ТаблицаОстатков.Подразделение = Товары.Подразделение
|ГДЕ
| ТаблицаОстатков.Количество > 0
| И ТаблицаОстатков.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))";
Товары = ПолучитьИзВременногоХранилища(АдресВХранилище);
Товары.Свернуть("Номенклатура, Характеристика, Серия, Назначение, Подразделение", "Количество");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Товары", Товары);
ТаблицаТоваров.Загрузить(Запрос.Выполнить().Выгрузить());
ТаблицаТоваров.Сортировать("Номенклатура");
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьСтроки(Значение, МассивСтрок = Неопределено)
Если МассивСтрок = Неопределено Тогда
Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
СтрокаТаблицы.Выбран = Значение;
КонецЦикла;
Иначе
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТаблицы = ТаблицаТоваров.НайтиПоИдентификатору(НомерСтроки);
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы.Выбран = Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти