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