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