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