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