Документы продажи / К оформлению накладных возвратов / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	// Возврат при получении формы для анализа.
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

	Если ЗначениеЗаполнено(Параметры.ЗаголовокФормы) Тогда
		Заголовок = Параметры.ЗаголовокФормы;
	КонецЕсли;
	
	// Получение ФО
	ИспользоватьНесколькоСкладов = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
	ИспользоватьРасширенныеВозможностиЗаказаКлиента = ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента");
	ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам = ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам");
	ИспользоватьОрдернуюСхемуПриОтгрузке = ПолучитьФункциональнуюОпцию("ИспользоватьОрдернуюСхемуПриОтгрузке");
	
	// Установка отборов.
	СтруктураБыстрогоОтбора = Неопределено;
	Параметры.Свойство("СтруктураБыстрогоОтбора", СтруктураБыстрогоОтбора);
	
	Если СтруктураБыстрогоОтбора <> Неопределено Тогда
		СтруктураБыстрогоОтбора.Свойство("Организация",        Организация);
		СтруктураБыстрогоОтбора.Свойство("Склад",              Склад);
		СтруктураБыстрогоОтбора.Свойство("СостояниеНакладной", СостояниеНакладной);
		СтруктураБыстрогоОтбора.Свойство("СостояниеОрдера",    СостояниеОрдера);
		СтруктураБыстрогоОтбора.Свойство("Ссылка",			   ОтборРаспоряжений);
	КонецЕсли;
	
	Если Не ИспользоватьНесколькоСкладов
		И Не ЗначениеЗаполнено(Склад) Тогда
		Склад = Справочники.Склады.СкладПоУмолчанию();
	КонецЕсли;
	
	Если Не Параметры.Свойство("КлючНазначенияФормы")
		Или ПустаяСтрока(Параметры.КлючНазначенияФормы) Тогда
		КлючНазначенияИспользования = КлючНазначенияФормыПоУмолчанию();
	Иначе
		КлючНазначенияИспользования = Параметры.КлючНазначенияФормы;
	КонецЕсли;
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриСозданииНаСервере(СписокРаспоряженияНаОформление,
		"Склад",
		Склад,
		СтруктураБыстрогоОтбора);
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриСозданииНаСервере(СписокРаспоряженияНаОформление,
		"СостояниеНакладной",
		?(ЗначениеЗаполнено(СостояниеНакладной), Число(СостояниеНакладной), СостояниеНакладной),
		СтруктураБыстрогоОтбора,,,
		ЗначениеЗаполнено(СостояниеНакладной));
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриСозданииНаСервере(СписокРаспоряженияНаОформление,
		"СостояниеОрдера",
		?(ЗначениеЗаполнено(СостояниеОрдера), Число(СостояниеОрдера), СостояниеОрдера),
		СтруктураБыстрогоОтбора,,,
		ЗначениеЗаполнено(СостояниеОрдера));
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриСозданииНаСервере(СписокРаспоряженияНаОформление,
		"Организация",
		Организация,
		СтруктураБыстрогоОтбора);
		
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриСозданииНаСервере(СписокРаспоряженияНаОформление,
		"Ссылка",
		ОтборРаспоряжений,
		СтруктураБыстрогоОтбора);
	
	Элементы.Склад.Видимость = ИспользоватьНесколькоСкладов;
	
	Элементы.СписокРаспоряженияНаОформлениеСостояниеОрдера.Видимость = ИспользоватьОрдернуюСхемуПриОтгрузке;
	Элементы.СписокРаспоряженияНаОформлениеСостояниеНакладной.Видимость = ИспользоватьРасширенныеВозможностиЗаказаКлиента;
	
	Элементы.СостояниеОрдера.Видимость = ИспользоватьОрдернуюСхемуПриОтгрузке;
	Элементы.СостояниеНакладной.Видимость = ИспользоватьРасширенныеВозможностиЗаказаКлиента;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы,
		"СписокРаспоряженияНаОформлениеОрганизация",
		"Видимость",
		ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций"));
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы,
		"СписокРаспоряженияНаОформлениеСклад",
		"Видимость",
		ИспользоватьНесколькоСкладов);
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы,
		"СписокРаспоряженияНаОформлениеВалюта",
		"Видимость",
		ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВалют"));
	
	СписокРаспоряженияНаОформление.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса()));
	
	ЕстьПравоЧтенияОстатков = ПравоДоступа("Чтение", Метаданные.РегистрыНакопления.ТоварыКПоступлению);
	
	ЕстьПравоДобавленияПоступленияОтХранителя = ПравоДоступа("Добавление", Метаданные.Документы.ПоступлениеТоваровОтХранителя);
	
	Элементы.СписокРаспоряженияНаОформление.Видимость = ЕстьПравоЧтенияОстатков;
	
	Элементы.СписокРаспоряженияНаОформлениеОформитьПоЗаказам.Видимость = ЕстьПравоДобавленияПоступленияОтХранителя
																			Или ПравоДоступа("Добавление", Метаданные.Документы.ВозвратТоваровОтКлиента);
	Элементы.СписокРаспоряженияНаОформлениеОформитьПоПриемке.Видимость = ЕстьПравоДобавленияПоступленияОтХранителя
																			Или ПравоДоступа("Добавление", Метаданные.Документы.ВозвратТоваровОтКлиента);
	Элементы.СписокРаспоряженияНаОформлениеСостояниеВыполнения.Видимость = ПравоДоступа("Просмотр", Метаданные.Отчеты.СостояниеВыполненияДокументов);
	
	ЗаполнитьСпискиВыбораПоСостояниямОтгрузки();
	
	Элементы.СписокРаспоряженияНаОформлениеКонтрагент.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровИКонтрагентов");
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_ВозвратТоваровОтКлиента"
		Или ИмяСобытия = "Запись_ПоступлениеТоваровОтХранителя"
		Или ИмяСобытия = "Запись_ЗаявкаНаВозвратТоваровОтКлиента"
		Или ИмяСобытия = "Запись_ПриходныйОрдерНаТовары"
		Или ИмяСобытия = "Принять_ФормаСозданныхДокументов" Тогда
		
		Элементы.СписокРаспоряженияНаОформление.Обновить();
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
	
	Если СтруктураБыстрогоОтбора <> Неопределено Тогда
		СтруктураБыстрогоОтбора.Свойство("Склад", Склад);
		Настройки.Удалить("Склад");
		СтруктураБыстрогоОтбора.Свойство("СостояниеНакладной", СостояниеНакладной);
		Настройки.Удалить("СостояниеНакладной");
		СтруктураБыстрогоОтбора.Свойство("СостояниеОрдера", СостояниеОрдера);
		Настройки.Удалить("СостояниеОрдера");
		СтруктураБыстрогоОтбора.Свойство("Организация", Организация);
		Настройки.Удалить("Организация");
	Иначе
		Склад              = Настройки.Получить("Склад");
		СостояниеНакладной = Настройки.Получить("СостояниеНакладной");
		СостояниеОрдера    = Настройки.Получить("СостояниеОрдера");
		Организация        = Настройки.Получить("Организация");
	КонецЕсли;
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриЗагрузкеИзНастроек(СписокРаспоряженияНаОформление,
		"СостояниеНакладной",
		?(ЗначениеЗаполнено(СостояниеНакладной), Число(СостояниеНакладной), СостояниеНакладной),
		СтруктураБыстрогоОтбора, 
		Настройки,
		ЗначениеЗаполнено(СостояниеНакладной),
		,
		Истина);
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриЗагрузкеИзНастроек(СписокРаспоряженияНаОформление,
		"СостояниеОрдера",
		?(ЗначениеЗаполнено(СостояниеОрдера), Число(СостояниеОрдера), СостояниеОрдера),
		СтруктураБыстрогоОтбора,
		Настройки,
		ЗначениеЗаполнено(СостояниеОрдера),
		,
		Истина);
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриЗагрузкеИзНастроек(СписокРаспоряженияНаОформление,
		"Организация",
		Организация,
		СтруктураБыстрогоОтбора,
		Настройки,
		ЗначениеЗаполнено(Организация));
	
	ОтборыСписковКлиентСервер.ОтборПоЗначениюСпискаПриЗагрузкеИзНастроек(СписокРаспоряженияНаОформление,
		"Склад",
		Склад,
		СтруктураБыстрогоОтбора,
		Настройки,
		ЗначениеЗаполнено(Склад));
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СкладПриИзменении(Элемент)
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		СписокРаспоряженияНаОформление,
		"Склад",
		Склад,
		ВидСравненияКомпоновкиДанных.Равно,
		,
		ЗначениеЗаполнено(Склад));
	
КонецПроцедуры

&НаКлиенте
Процедура СписокРаспоряженияНаОформлениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура СостояниеНакладнойПриИзменении(Элемент)
	
	Состояние = ?(ЗначениеЗаполнено(СостояниеНакладной), Число(СостояниеНакладной), 0);
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(СписокРаспоряженияНаОформление,
		"СостояниеНакладной",
		Состояние,
		ВидСравненияКомпоновкиДанных.Равно,
		,
		ЗначениеЗаполнено(СостояниеНакладной),
		РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
		
КонецПроцедуры

&НаКлиенте
Процедура СостояниеОрдераПриИзменении(Элемент)
	
	Состояние = ?(ЗначениеЗаполнено(СостояниеОрдера), Число(СостояниеОрдера), 0);
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(СписокРаспоряженияНаОформление,
		"СостояниеОрдера",
		Состояние,
		ВидСравненияКомпоновкиДанных.Равно,
		,
		ЗначениеЗаполнено(СостояниеОрдера));
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		СписокРаспоряженияНаОформление,
		"Организация",
		Организация,
		ВидСравненияКомпоновкиДанных.Равно,
		,
		ЗначениеЗаполнено(Организация));
	
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаЖурналПродажиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("КлючНазначенияФормы", "ВозвратТоваровОтКлиента");
	ПараметрыФормы.Вставить("УникальныйИдентификаторФормы", Ложь);

	ИмяОткрываемойФормы = "Обработка.ЖурналДокументовПродажи.Форма.СписокДокументов";
	//++ Локализация
	ИнтеграцияСМаркетплейсамиКлиент.ДополнитьПараметрыФормы(ПараметрыФормы,
		СписокРаспоряженияНаОформление.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, ИмяОткрываемойФормы);
	//-- Локализация
	
	ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы,, ПараметрыФормы.УникальныйИдентификаторФормы);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОформитьПоРаспоряжениям(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Обработка.ЖурналДокументовПродажи.КОформлениюНакладныхВозвратов.Команда.ОформитьПоРаспоряжениям");
	
	ТекущиеДанные = Элементы.СписокРаспоряженияНаОформление.ТекущиеДанные;
	Если Не ОбщегоНазначенияУТКЛиент.ВыбраныДокументыКОформлению(ТекущиеДанные, ПараметрыЖурнала("Накладные")) Тогда
		Возврат;
	КонецЕсли;
	
	ПоОрдерам = Ложь;
	ОформитьНакладные(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьПоПриемке(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Обработка.ЖурналДокументовПродажи.КОформлениюНакладныхВозвратов.Команда.ОформитьПоПриемке");
		
	ТекущиеДанные = Элементы.СписокРаспоряженияНаОформление.ТекущиеДанные;
	Если Не ОбщегоНазначенияУТКЛиент.ВыбраныДокументыКОформлению(ТекущиеДанные,ПараметрыЖурнала("Накладные")) Тогда
		Возврат;
	КонецЕсли;
	
	ПоОрдерам = Истина;
	ОформитьНакладные(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура СостояниеВыполнения(Команда)
	
	ВыделенныеСтроки = Элементы.СписокРаспоряженияНаОформление.ВыделенныеСтроки;
	Если ВыделенныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	СписокДокументов = Новый СписокЗначений;
	МассивТиповДокументов = Новый Массив;
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
		ВыделенныйДокумент = Элементы.СписокРаспоряженияНаОформление.ДанныеСтроки(ВыделеннаяСтрока).Ссылка;
		ТипВыделенногоДокумента = ТипЗнч(ВыделенныйДокумент);
		
		Если	ТипВыделенногоДокумента = Тип("ДокументСсылка.ВозвратТоваровОтКлиента")
				ИЛИ ТипВыделенногоДокумента = Тип("ДокументСсылка.КорректировкаРеализации")
				ИЛИ ТипВыделенногоДокумента = Тип("ДокументСсылка.ПоступлениеТоваровОтХранителя") Тогда
			ПоказатьПредупреждение( , СтрШаблон(НСтр("ru = 'Команда не может быть выполнена для документов %1.'"), ТипВыделенногоДокумента));
			Возврат;
		КонецЕсли;
		
		Если МассивТиповДокументов.Найти(ТипВыделенногоДокумента) = Неопределено Тогда
			МассивТиповДокументов.Добавить(ТипВыделенногоДокумента);
			Если МассивТиповДокументов.Количество() > 1 Тогда
				ПоказатьПредупреждение( , НСтр("ru='Команда не может быть выполнена для документов разного вида.'"));
				Возврат;
			КонецЕсли;
		КонецЕсли;
		
		Если СписокДокументов.НайтиПоЗначению(ВыделенныйДокумент) = Неопределено Тогда
			СписокДокументов.Добавить(ВыделенныйДокумент);
		КонецЕсли;
		
	КонецЦикла;
	
	Если СписокДокументов.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ОткрытьФорму("Отчет.СостояниеВыполненияДокументов.Форма.ФормаОтчета", 
		Новый Структура("ВходящиеДокументы", СписокДокументов), 
		ЭтаФорма,
		Ложь);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	// Условное оформление динамического списка "СписокРаспоряженияНаОформление"
	СписокУсловноеОформление = СписокРаспоряженияНаОформление.КомпоновщикНастроек.Настройки.УсловноеОформление;
	СписокУсловноеОформление.Элементы.Очистить();
	
	СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "СписокРаспоряженияНаОформление.Дата", Элементы.СписокРаспоряженияНаОформлениеДатаДокумента.Имя);
	
КонецПроцедуры

&НаСервере
Функция ЗаполнитьСпискиВыбораПоСостояниямОтгрузки()
	
	СписокВыбора = Элементы.СостояниеНакладной.СписокВыбора;
	СписокВыбора.Очистить();
	СписокВыбора.Добавить("0", НСтр("ru='Все оформлено'"), Ложь, БиблиотекаКартинок.ОформленаНакладная);
	СписокВыбора.Добавить("1", НСтр("ru='Создать накладную'"), Ложь, БиблиотекаКартинок.СоздатьНакладную);
	СписокВыбора.Добавить("2", НСтр("ru='Дооформить накладную'"), Ложь, БиблиотекаКартинок.ДооформитьНакладную);
	
	СписокВыбора = Элементы.СостояниеОрдера.СписокВыбора;
	СписокВыбора.Очистить();
	СписокВыбора.Добавить("0", НСтр("ru='Соответствуют накладным'"), Ложь, БиблиотекаКартинок.ОформленаНакладная);
	СписокВыбора.Добавить("1", НСтр("ru='Не оформлены'"), Ложь, БиблиотекаКартинок.СоздатьНакладную);
	СписокВыбора.Добавить("3", НСтр("ru='Не соответствуют накладным'"), Ложь, БиблиотекаКартинок.НесоответствиеОрдерНакладная);
	СписокВыбора.Добавить("4", НСтр("ru='Не используется ордерная схема'"), Ложь, БиблиотекаКартинок.ПустаяКартинка);
	
КонецФункции

#Область Создание_Документов

&НаКлиенте
Процедура ОформитьНакладные(ПоОрдерам)
	
	ОформитьНакладныеНаКлиенте(ПоОрдерам);
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьНакладныеНаКлиенте(ПоОрдерам)
	
	ОчиститьСообщения();
	
	ВыделенныеСтроки = Элементы.СписокРаспоряженияНаОформление.ВыделенныеСтроки;
	СписокРаспоряжений.Очистить();
	
	Для Каждого Строка Из ВыделенныеСтроки Цикл
		НайденнаяСтрока = Элементы.СписокРаспоряженияНаОформление.ДанныеСтроки(Строка);
		ДобавленнаяСтрока = СписокРаспоряжений.Добавить();
		ЗаполнитьЗначенияСвойств(ДобавленнаяСтрока, НайденнаяСтрока);
	КонецЦикла;
	
	// Выбор варианта действия и возврат результата в виде имени формы, которую необходимо открыть и ее входящих параметров
	ПараметрыСозданныхДокументов = ОформитьНакладнуюНаСервере(ПоОрдерам);
	Если ПараметрыСозданныхДокументов.Свойство("ОформитьРядНакладных") И ПараметрыСозданныхДокументов.ОформитьРядНакладных Тогда
		ДлительнаяОперация = ПараметрыСозданныхДокументов.ДлительнаяОперация;
		
		ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
		ОписаниеОповещения = Новый ОписаниеОповещения("ОформитьНакладныеНаКлиентеЗавершение", ЭтотОбъект, ПараметрыСозданныхДокументов);
		ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
	Иначе
		ОформитьНакладныеНаКлиентеЗавершение(Неопределено, ПараметрыСозданныхДокументов);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьНакладныеНаКлиентеЗавершение(Результат, ДопПараметры) Экспорт
	
	Если НЕ Результат = Неопределено Тогда
		
			Если Результат.Статус = "Ошибка" Тогда
				
				ПараметрыСозданныхДокументов = ДопПараметры;
				
				ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ПараметрыСозданныхДокументов.СписокОшибок, "Объект.СписокРаспоряженияНаОформление",
					Результат.КраткоеПредставлениеОшибки);
				
			Иначе
				
				ПараметрыСозданныхДокументов = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
				
			КонецЕсли;
			
	Иначе
			
		ПараметрыСозданныхДокументов = ДопПараметры;
			
	КонецЕсли;
	
	Если НЕ ПараметрыСозданныхДокументов.СписокОшибок = Неопределено Тогда

		Если ТипЗнч(ПараметрыСозданныхДокументов.СписокОшибок) = Тип("Массив") Тогда
			
			ОшибкиПользователю = Неопределено;
		
			Для Каждого Ошибка Из ПараметрыСозданныхДокументов.СписокОшибок Цикл
				ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиПользователю, Ошибка.Поле, Ошибка.Текст, "");
			КонецЦикла;
		
			ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(ОшибкиПользователю);
			
		Иначе
			ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(ПараметрыСозданныхДокументов.СписокОшибок);
		КонецЕсли;
		
	КонецЕсли;
	
	Если ПараметрыСозданныхДокументов.Свойство("ТекстВопросаПользователю") Тогда
		ПоказатьВопрос(
			Новый ОписаниеОповещения(ПараметрыСозданныхДокументов.ПроцедураОбработкиОтветаПользователя, 
				ЭтотОбъект,
				ПараметрыСозданныхДокументов),
			ПараметрыСозданныхДокументов.ТекстВопросаПользователю,
			РежимДиалогаВопрос.ДаНет);
	ИначеЕсли ПараметрыСозданныхДокументов.Свойство("ИмяФормы") Тогда
		
		Если ПараметрыСозданныхДокументов.Параметры.Свойство("СозданныеДокументы") Тогда
			
			ТекстОповещения = НСтр("ru = 'Создано документов: %1'");
			Если ПараметрыСозданныхДокументов.Параметры.СозданныеДокументы.Количество() > 0 Тогда
				ТекстОповещения = СтрШаблон(ТекстОповещения, ПараметрыСозданныхДокументов.Параметры.СозданныеДокументы.Количество());
				ПоказатьОповещениеПользователя(НСтр("ru = 'Создание документов'"), , ТекстОповещения);
			Иначе
				ТекстОповещения = СтрШаблон(ТекстОповещения, 0);
				ПоказатьОповещениеПользователя(НСтр("ru = 'Создание документов'"), , ТекстОповещения);
				Возврат;
			КонецЕсли;
			
		КонецЕсли;
		ОткрытьФорму(ПараметрыСозданныхДокументов.ИмяФормы, 
			ПараметрыСозданныхДокументов.Параметры,
			ЭтаФорма,,,,,);
	КонецЕсли;
	
	Элементы.СписокРаспоряженияНаОформление.Обновить();
	
КонецПроцедуры

&НаСервере
Функция НастройкиФормыПереоформленияНакладных(ИмяНакладной)
	
	НастройкиФормы= НакладныеСервер.НастройкиФормыПереоформленияНакладных();
	НастройкиФормы.Заголовок = НСтр("ru = 'Переоформление документов по выбранным распоряжениям'");
	НастройкиФормы.ИмяФормыНакладной = "Документ." + ИмяНакладной + ".Форма.ФормаДокумента";
	НастройкиФормы.НакладнаяНаПриемку = Истина;
	НастройкиФормы.НакладнаяНаОтгрузку = Ложь;
	
	Возврат НастройкиФормы;
	
КонецФункции

&НаКлиенте
Функция ПараметрыЖурнала(КлючНазначенияИспользования)
	
	СтруктураБыстрогоОтбора = Новый Структура;
	СтруктураБыстрогоОтбора.Вставить("Организация",Организация);
	СтруктураБыстрогоОтбора.Вставить("Склад",Склад);
	
	ПараметрыЖурнала = Новый Структура;
	ПараметрыЖурнала.Вставить("СтруктураБыстрогоОтбора",СтруктураБыстрогоОтбора);
	ПараметрыЖурнала.Вставить("ИмяРабочегоМеста","ЖурналДокументовПродажи");
	ПараметрыЖурнала.Вставить("КлючНазначенияФормы",КлючНазначенияИспользования);
	ПараметрыЖурнала.Вставить("СинонимЖурнала",НСтр("ru = 'Документы продажи'"));
	
	Возврат ПараметрыЖурнала;
	
КонецФункции

&НаСервере
Функция ОформитьНакладнуюНаСервере(ПоОрдерам)
	
	Перем СписокОшибок;
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("ОформитьРядНакладных", Ложь);
	ПараметрыФормы.Вставить("АдресДокументыПоТипамНакладных", Неопределено);
	ПараметрыФормы.Вставить("ДлительнаяОперация", Неопределено);
	ПараметрыФормы.Вставить("СписокОшибок", СписокОшибок);
	ПараметрыФормы.Вставить("ТекущийНомерПакета");
	
	// Разбивка выделенных документов по группам
	ДокументыПоТипамНакладных = РазделитьЗаказыПоПолнымИменамНакладных(ПоОрдерам, СписокОшибок);
	
	Если ДокументыПоТипамНакладных.Количество() > 0 Тогда
		Если ПоОрдерам Тогда
			
			// Если выделен один документ и есть хотя бы одна накладная - открывается форма перезаполнения накладной
			// Если нет накладных и документы можно сгруппировать в одну накладную - открывается форма новой накладной
			// Если нет накладных и документы нельзя сгруппировать - открывается форма списка созданных накладных
			
			ЕстьНакладная = ЕстьНакладная(ДокументыПоТипамНакладных);
			ЕстьОрдер     = ЕстьОрдер(ДокументыПоТипамНакладных);
			ЕстьЗаказ     = ЕстьЗаказ(ДокументыПоТипамНакладных);
			
			ВсегоТаблиц = ДокументыПоТипамНакладных.Количество();
			Если ВсегоТаблиц > 1 Тогда
				
				Если ЕстьНакладная Тогда
					// Пакетно с исключением накладных и сообщением об исключенных документах
					// Распоряжения-накладные исключаются, т.к. должны быть обработаны индивидульно - нельзя ввести новую накладную 
					// по распоряжению-накладной
					
					ИсключитьЗаказыСНакладными(ДокументыПоТипамНакладных, СписокОшибок);
					ОсталосьТаблиц = ДокументыПоТипамНакладных.Количество();
					Если ОсталосьТаблиц > 0 Тогда
						ПараметрыФормы.ОформитьРядНакладных = Истина;
						АдресХранилища = ПоместитьВоВременноеХранилище(ДокументыПоТипамНакладных);
						ПараметрыФормы.АдресДокументыПоТипамНакладных = АдресХранилища;
						
						ДлительнаяОперация = ОформитьРядНакладныхПоТаблицам(ПараметрыФормы);
						ПараметрыФормы.ДлительнаяОперация = ДлительнаяОперация;
						
					КонецЕсли;
					
					Если ОсталосьТаблиц = 0 Тогда
						ТекстОшибки = НСтр("ru = 'Операция не выполнена.'");
						ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Объект.СписокРаспоряженияНаОформление",ТекстОшибки, Неопределено);
					ИначеЕсли ВсегоТаблиц <> ОсталосьТаблиц Тогда
						ТекстОшибки = НСтр("ru = 'Операция выполнена с ошибками.'");
						ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Объект.СписокРаспоряженияНаОформление",ТекстОшибки, Неопределено);
					КонецЕсли;
					
				Иначе
					// Пакетно если нет накладных
					ПараметрыФормы.ОформитьРядНакладных = Истина;
					АдресХранилища = ПоместитьВоВременноеХранилище(ДокументыПоТипамНакладных);
					ПараметрыФормы.АдресДокументыПоТипамНакладных = АдресХранилища;
					
					ДлительнаяОперация = ОформитьРядНакладныхПоТаблицам(ПараметрыФормы);
					ПараметрыФормы.ДлительнаяОперация = ДлительнаяОперация;
					
				КонецЕсли;
				
			ИначеЕсли ДокументыПоТипамНакладных.Количество() = 1 Тогда
				// Индивидуально
				
				// Проверка наличия накладных
				// Если текущее распоряжение это заказ, и по нему есть накладные, открыть форму перезаполнения
				Если ЕстьНакладная И ЕстьЗаказ Тогда
					// Открытие формы перезаполнения
					ПараметрыФормы = ОформитьЧерезФормуПерезаполнения(ДокументыПоТипамНакладных, ПоОрдерам, СписокОшибок);
				Иначе
					// При попытке заполнить накладную по отсутствующему ордеру выдадим ошибку
					Если ЕстьНакладная И Не ЕстьОрдер Тогда
						ТекстОшибки = НСтр("ru = 'Недоступно оформление по приемке, так как не создано ни одного ордера.'");
						ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Объект.СписокРаспоряженияНаОформление",ТекстОшибки, Неопределено);
					Иначе
						// Если это распоряжение-накладная, или заказ без накладной - открытие формы накладной, существующей или новой
						ПараметрыФормы = ОформитьНакладнуюПоТаблице(ДокументыПоТипамНакладных, ПоОрдерам, СписокОшибок);
					КонецЕсли;
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			// При оформлении по заказам всегда создается новая накладная
			
			// Открывается форма созданной накладной, в случае если совпали ключевые поля выделенных строк, и позволяет функциональная опция
			// В ином случае открывается форма со списком созданных накладных
			
			Если ДокументыПоТипамНакладных.Количество() > 1 Тогда
				// Пакетно
				ПараметрыФормы.ОформитьРядНакладных = Истина;
				АдресХранилища = ПоместитьВоВременноеХранилище(ДокументыПоТипамНакладных);
				ПараметрыФормы.АдресДокументыПоТипамНакладных = АдресХранилища;
				
				ДлительнаяОперация = ОформитьРядНакладныхПоТаблицам(ПараметрыФормы);
				ПараметрыФормы.ДлительнаяОперация = ДлительнаяОперация;
				
			ИначеЕсли ДокументыПоТипамНакладных.Количество() = 1 Тогда
				// Индивидуально
				ПараметрыФормы = ОформитьНакладнуюПоТаблице(ДокументыПоТипамНакладных, ПоОрдерам, СписокОшибок);
			КонецЕсли;
			
		КонецЕсли;
	ИначеЕсли СписокРаспоряжений.Количество() > 1
		Или (ДокументыПоТипамНакладных.Количество() = 0 И Не ЗначениеЗаполнено(СписокОшибок)) Тогда
		
		// При оформлении документов в пакетном режиме произошли ошибки
		
		ТекстОшибки = НСтр("ru = 'Не выбрано ни одного документа, который можно было бы оформить %1'");
		
		Если ПоОрдерам Тогда
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, НСтр("ru = 'по приемке'"));
		Иначе
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, НСтр("ru = 'по заказам'"));
		КонецЕсли;
		
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Объект.СписокРаспоряженияНаОформление",ТекстОшибки, Неопределено);
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ПараметрыФормы) Тогда
		ПараметрыФормы = Новый Структура();
	КонецЕсли;
	
	ПараметрыФормы.Вставить("СписокОшибок", СписокОшибок);
	
	Возврат ПараметрыФормы;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЕстьНакладная(ДокументыПоТипамНакладных)
	
	Для Каждого Таблица Из ДокументыПоТипамНакладных Цикл
		Для Каждого Строка Из Таблица Цикл
			// Состояние "1" - накладная не создана. Остальные состояния подразумевают наличие накладной, либо накладную без заказа
			Если Строка.СостояниеНакладной <> 1 Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЕстьОрдер(ДокументыПоТипамНакладных)
	
	Для Каждого Таблица Из ДокументыПоТипамНакладных Цикл
		Для Каждого Строка Из Таблица Цикл
			// Состояние "1" - ордер не создан. Остальные состояния подразумевают наличие ордера, либо что ордер не требуется (состояние 4)
			Если Строка.СостояниеОрдера <> 1 Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

&НаСервере
Функция ЕстьЗаказ(ДокументыПоТипамНакладных)
	
	Для Каждого Таблица Из ДокументыПоТипамНакладных Цикл
		Для Каждого Строка Из Таблица Цикл
			Если ТипЗнч(Строка.Ссылка)= Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

// Параметры:
// 	ПоОрдерам - Булево
// 	СписокОшибок - СписокЗначений
// Возвращаемое значение:
//	Массив из см. ШаблонРазделеннойТаблицы
&НаСервере
Функция РазделитьЗаказыПоПолнымИменамНакладных(ПоОрдерам, СписокОшибок)
	
	ШаблонРазделеннаяТаблица = ШаблонРазделеннойТаблицы();
	
	РазделеннаяТаблица = Неопределено;
	МассивТаблиц = Новый Массив();
	
	СписокРаспоряжений.Сортировать("Ссылка, Склад, ХозяйственнаяОперация, СостояниеНакладной, СостояниеОрдера");
	
	НачалоДня = НачалоДня(ТекущаяДатаСеанса());
	
	ПакетныйРежим = СписокРаспоряжений.Количество() > 1;
	
	Для Каждого Строка Из СписокРаспоряжений Цикл
	
		ТекстОшибки = "";
		ПрерватьОбработкуСтроки = Ложь;
		
		Если ПоОрдерам Тогда
			
			Если Строка.СостояниеОрдера = 0 Тогда
				
				ТекстОшибки = НСтр("ru = 'Для распоряжения %1 невозможно перезаполнить накладную по приемке, т.к. ордера соответствуют накладным.'");
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка.Ссылка);
				
				ПрерватьОбработкуСтроки = Истина;
				
			ИначеЕсли Строка.СостояниеОрдера = 4 Тогда
				
				ТекстОшибки = НСтр("ru = 'Для распоряжения %1 невозможно оформить накладную по приемке, т.к. склад %2 не использует ордерную схему.'");
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка.Ссылка, Строка.Склад);
				
				ПрерватьОбработкуСтроки = Истина;
				
			КонецЕсли;
			
		Иначе // оформление по заказам
			
			Если ТипЗнч(Строка.Ссылка)= Тип("ДокументСсылка.ВозвратТоваровОтКлиента")
					Или ТипЗнч(Строка.Ссылка)= Тип("ДокументСсылка.ПоступлениеТоваровОтХранителя") Тогда
				
				ТекстОшибки = НСтр("ru = 'Распоряжение %1 явлется накладной. Для накладных оформление по заказам не доступно.'");
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка.Ссылка);
				ПрерватьОбработкуСтроки = Истина;
				
			ИначеЕсли Строка.СостояниеНакладной = 0 Тогда
				
				ТекстОшибки = НСтр("ru = 'Для распоряжения %1 уже создана накладная'");
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка.Ссылка);
				ПрерватьОбработкуСтроки = Истина;
				
			КонецЕсли;
			
		КонецЕсли;
		
		Если Не ПустаяСтрока(ТекстОшибки) Тогда
			ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок,
				"Объект.СписокРаспоряженияНаОформление",
				ТекстОшибки,
				Неопределено);
		КонецЕсли;
		
		Если ПрерватьОбработкуСтроки Тогда
			Продолжить;
		КонецЕсли;
		
		// В данном рабочем месте нет накладных, которые могут быть оформлены по нескольким заказам,
		// поэтому для каждой выделенной строки формируется своя таблица
		
		РазделеннаяТаблица = ШаблонРазделеннаяТаблица.Скопировать();
		МассивТаблиц.Добавить(РазделеннаяТаблица);
		
		НоваяСтрока = РазделеннаяТаблица.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		
	КонецЦикла;
	
	Возврат МассивТаблиц;
	
КонецФункции

&НаСервере
Процедура ИсключитьЗаказыСНакладными(ДокументыПоТипамНакладных, СписокОшибок)
	
	ИзначальноеКоличество = ДокументыПоТипамНакладных.Количество();
	Для Итерация = 1 По ИзначальноеКоличество Цикл
		Индекс = ИзначальноеКоличество - Итерация;
		Таблица = ДокументыПоТипамНакладных[Индекс];
		
		Исключить = Ложь;
		Для Каждого СтрокаТаблицы Из Таблица Цикл
			
			Если СтрокаТаблицы.СостояниеНакладной <> 1 Тогда
				Исключить = Истина;
				Прервать;
			КонецЕсли;
			
		КонецЦикла;
		
		Если Исключить Тогда
			
			Для Каждого Строка Из Таблица Цикл
				ТекстОшибки = НСтр("ru = 'Для распоряжения %1 действие не выполнено, так как по выбранным распоряжениям уже имеются накладные.'");
				ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка.Ссылка);
				ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Объект.СписокРаспоряженияНаОформление",ТекстОшибки, Неопределено);
			КонецЦикла;
			
			ДокументыПоТипамНакладных.Удалить(Индекс);
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция ОформитьРядНакладныхПоТаблицам(СтруктураПараметров)
	
	НаименованиеЗадания = НСтр("ru = 'Оформление документов возврата'");
	ВыполняемыйМетод = "ПродажиСервер.ОформитьНакладные";
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
	
	СтруктураПараметровНовая = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураПараметров);
	СтруктураПараметровНовая.Вставить("ЗапуститьНеВФоне", Ложь);
	
	АдресХранилища = СтруктураПараметров.АдресДокументыПоТипамНакладных;
	ДокументыПоТипамНакладных = ПолучитьИзВременногоХранилища(АдресХранилища);
	УдалитьИзВременногоХранилища(АдресХранилища);
	
	Если ДокументыПоТипамНакладных.Количество() < 10 Тогда
		СтруктураПараметровНовая.ЗапуститьНеВФоне = Истина;
	КонецЕсли;
	СтруктураПараметровНовая.Вставить("ДокументыПоТипамНакладных", ДокументыПоТипамНакладных);
	
	ПараметрыФормирования = ПараметрыФормированияДокументов();
	Если ЗначениеЗаполнено(ДокументыПоТипамНакладных) Тогда
		ТаблицаДокументов = ДокументыПоТипамНакладных[0];
		ВыделеннаяСтрока  = ТаблицаДокументов[0];
		МетаданныеНакладной = МетаданныеНакладнойПоОперации(ВыделеннаяСтрока);
		ПараметрыФормирования.ИмяНовогоДокумента = МетаданныеНакладной.Имя;
		ПараметрыФормирования.СоздатьНовыйДокумент = Истина;
	КонецЕсли;
	СтруктураПараметровНовая.Вставить("ПараметрыФормирования", ПараметрыФормирования);
	
	Результат = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, СтруктураПараметровНовая, ПараметрыВыполнения);
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ОформитьЧерезФормуПерезаполнения(ДокументыПоТипамНакладных, ПоОрдерам, СписокОшибок)
	
	СозданныеДокументы = Новый СписокЗначений();
	
	ТаблицаДокументов = ДокументыПоТипамНакладных[0];
	ВыделеннаяСтрока  = ТаблицаДокументов[0];
	
	МетаданныеНакладной = МетаданныеНакладнойПоОперации(ВыделеннаяСтрока);
	
	Если ПравоДоступа("Добавление", МетаданныеНакладной)
		Или ПравоДоступа("Изменение", МетаданныеНакладной) Тогда
		
		МассивСсылок = ТаблицаДокументов.ВыгрузитьКолонку("Ссылка");
		
		НастройкиФормы = НастройкиФормыПереоформленияНакладных(МетаданныеНакладной.Имя);
		
		РеквизитыШапки = Новый Структура();
		
		СтруктураПоиска = ПродажиСервер.СтруктураЗначащихРеквизитов();
		ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыделеннаяСтрока);

		РеквизитыРаспоряжения = ПродажиСервер.ПолучитьРеквизитыРаспоряжений(МассивСсылок);
		ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(РеквизитыШапки, СтруктураПоиска, Истина);
		ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(РеквизитыШапки, РеквизитыРаспоряжения, Истина);

		ПараметрыФормы = Новый Структура();
		ПараметрыФормы.Вставить("Заказы", МассивСсылок);
		ПараметрыФормы.Вставить("Склад", РеквизитыШапки.Склад);
		ПараметрыФормы.Вставить("РеквизитыШапки", РеквизитыШапки);
		ПараметрыФормы.Вставить("НастройкиФормы", НастройкиФормы);
		
		ПараметрыИИмяФормы = Новый Структура("ЕстьОшибки, ИмяФормы, Параметры", Ложь);
		
		ПараметрыИИмяФормы.ИмяФормы = "ОбщаяФорма.ПереоформлениеНакладныхПоРаспоряжениям";
		ПараметрыИИмяФормы.Параметры = ПараметрыФормы;
		
		Возврат ПараметрыИИмяФормы;
	Иначе
		ОшибкаДоступа = НСтр("ru = 'Нет прав на добавление/изменение накладной'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок,
			"Объект.СписокРаспоряженияНаОформление",
			ОшибкаДоступа,
			Неопределено);
		
		Возврат Новый Структура(); // Нет прав
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция МетаданныеНакладнойПоОперации(ПараметрыОперации)
	
	ОперацияРаспоряжения = ПараметрыОперации.ХозяйственнаяОперация;
	
	МетаданныеНакладной = Метаданные.Документы.ВозвратТоваровОтКлиента;
	
	Если	ОперацияРаспоряжения = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности
			ИЛИ ОперацияРаспоряжения = Перечисления.ХозяйственныеОперации.РеализацияКлиенту Тогда
		МетаданныеНакладной = Метаданные.Документы.ПоступлениеТоваровОтКлиента;
	КонецЕсли;
	
	Если ОперацияРаспоряжения = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя Тогда
		МетаданныеНакладной = Метаданные.Документы.ПоступлениеТоваровОтХранителя;
	КонецЕсли;
	
	Если ОперацияРаспоряжения = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера
		И ЗначениеЗаполнено(ПараметрыОперации.Договор)
		И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПараметрыОперации.Договор, "КомиссионныеПродажи25") Тогда
		МетаданныеНакладной = Метаданные.Документы.ПоступлениеТоваровОтХранителя;
	КонецЕсли;
	
	Возврат МетаданныеНакладной;
	
КонецФункции

&НаСервере
Функция ОформитьНакладнуюПоТаблице(ДокументыПоТипамНакладных, ПоОрдерам, СписокОшибок)
	
	СозданныеДокументы = Новый СписокЗначений();
	
	ТаблицаДокументов = ДокументыПоТипамНакладных[0];
	ВыделеннаяСтрока  = ТаблицаДокументов[0];
	
	МетаданныеНакладной = МетаданныеНакладнойПоОперации(ВыделеннаяСтрока);
	ИмяНакладной        = МетаданныеНакладной.Имя;
	
	НастройкиФормы = Новый Структура();
	ПараметрыФормы = Новый Структура();
	
	Заказы = ТаблицаДокументов.ВыгрузитьКолонку("Ссылка");
	СтруктураПоиска = ПродажиСервер.СтруктураЗначащихРеквизитов();
	
	РаспоряженияНакладные = Новый Массив();
	Для Каждого Распоряжение Из Заказы Цикл
		
		Если ТипЗнч(Распоряжение)= Тип("ДокументСсылка.ВозвратТоваровОтКлиента")
			Или ТипЗнч(Распоряжение)= Тип("ДокументСсылка.ПоступлениеТоваровОтХранителя") Тогда
			
			РаспоряженияНакладные.Добавить(Распоряжение);
			
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Отказ = Ложь;
	Если ПоОрдерам И РаспоряженияНакладные.Количество() > 0 Тогда
		// Для существующих распоряжений-накладных не перезаполняется шапка документа
		ПерезаполняемаяНакладная = РаспоряженияНакладные[0];
		ЗначенияЗаполнения = Новый Структура("ЗаполнятьПоОрдеру, МассивЗаказов", Истина, Заказы);
		
		ПараметрыФормы.Вставить("ЗаполнятьПоОрдеру", ПоОрдерам);
		ПараметрыФормы.Вставить("МассивЗаказов", Заказы);
		НастройкиФормы.Вставить("ИмяФормы", "Документ." + ИмяНакладной + ".Форма.ФормаДокумента");
		
		// Для вывода сообщения о количестве созданных документов
		СозданныеДокументы.Добавить(ПредопределенноеЗначение("Документ." + МетаданныеНакладной.Имя + ".ПустаяСсылка"));
	Иначе
		
		ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыделеннаяСтрока);
		
		РеквизитыРаспоряжения = ПродажиСервер.ПолучитьРеквизитыРаспоряжений(Заказы);
		РеквизитыШапки = Новый Структура();
		ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(РеквизитыШапки, СтруктураПоиска, Истина);
		ОбщегоНазначенияУТКлиентСервер.ДополнитьСтруктуру(РеквизитыШапки, РеквизитыРаспоряжения, Истина);
		
		ПараметрыФормы.Вставить("ЗаполнятьПоОрдеру", ПоОрдерам);
		ПараметрыФормы.Вставить("РеквизитыШапки",    РеквизитыШапки);
		ПараметрыФормы.Вставить("ДокументОснование", Заказы);
		ПараметрыФормы.Вставить("МассивЗаказов",     Заказы);
		
		НастройкиФормы.Вставить("ИмяФормы", "Документ." + ИмяНакладной + ".Форма.ФормаДокумента");
		
		// Для вывода сообщения о количестве созданных документов
		СозданныеДокументы.Добавить(ПредопределенноеЗначение("Документ." + МетаданныеНакладной.Имя + ".ПустаяСсылка"));
		
	КонецЕсли;
	
	ПараметрыФормы.Вставить("СозданныеДокументы", СозданныеДокументы);
	ПараметрыСОснованием = Новый Структура("Основание", ПараметрыФормы);
	
	Если ЗначениеЗаполнено(ПерезаполняемаяНакладная) Тогда
		ПараметрыСОснованием.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
		ПараметрыСОснованием.Вставить("Ключ", ПерезаполняемаяНакладная);
	КонецЕсли;
	
	НастройкиФормы.Вставить("Параметры", ПараметрыСОснованием);
	
	Если Отказ Тогда
		Возврат Неопределено;
	Иначе
		Возврат НастройкиФормы;
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ПараметрыФормированияДокументов()
	
	ПараметрыФормирования = Новый Структура();
	ПараметрыФормирования.Вставить("ПечататьРеализациюТоваровУслуг", Ложь);
	ПараметрыФормирования.Вставить("ПечататьПередачуТоваровХранителю", Ложь);
	ПараметрыФормирования.Вставить("ПечататьАктВыполненныхРабот", Ложь);
	ПараметрыФормирования.Вставить("СоздаватьПриходныйКассовыйОрдер", Ложь);
	//++ Локализация
	ПараметрыФормирования.Вставить("СоздаватьСчетФактуру", Ложь);
	//-- Локализация
	ПараметрыФормирования.Вставить("СоздаватьДокументПродажи", Истина);
	ПараметрыФормирования.Вставить("Склад", Склад);
	ПараметрыФормирования.Вставить("НеОткрыватьФормуСозданногоДокумента", Ложь);
	ПараметрыФормирования.Вставить("ПоОрдерам", ПоОрдерам);
	
	ПараметрыФормирования.Вставить(
		"ИспользоватьРеализациюПоНесколькимЗаказам",
		ПолучитьФункциональнуюОпцию("ИспользоватьРеализациюПоНесколькимЗаказам"));
	
	ПараметрыФормирования.Вставить(
		"ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам",
		ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам"));
	
	ПараметрыФормирования.Вставить(
		"ИмяФормыСозданныеДокументы",
		"Обработка.ЖурналДокументовПродажи.Форма.ФормаСозданныеДокументы");
	ПараметрыФормирования.Вставить("ОформитьОтгрузку", Ложь);
	ПараметрыФормирования.Вставить("СоздатьНовыйДокумент", Ложь);
	ПараметрыФормирования.Вставить("ИмяКомандыОтгрузки", "");
	ПараметрыФормирования.Вставить("ИмяНовогоДокумента", "");
	
	Возврат ПараметрыФормирования;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция КлючНазначенияФормыПоУмолчанию()
	
	Возврат "КОформлениюНакладныхВозвратов";
	
КонецФункции

// Возвращаемое значение:
// 	ТаблицаЗначений:
// * Ссылка - ДокументСсылка
// * Партнер - СправочникСсылка.Партнеры
// * Контрагент - СправочникСсылка.Контрагенты
// * Договор - СправочникСсылка.ДоговорыКонтрагентов
// * Соглашение - СправочникСсылка.СоглашенияСКлиентами
// * Организация - СправочникСсылка.Организации
// * Склад - СправочникСсылка.Склады
// * Подразделение - СправочникСсылка.СтруктураПредприятия
// * ХозяйственнаяОперация - ПеречислениеСсылка.ХозяйственныеОперации
// * Валюта - СправочникСсылка.Валюты
// * СостояниеНакладной - Число
// * СостояниеОрдера - Число
&НаСервереБезКонтекста
Функция ШаблонРазделеннойТаблицы()
	
	ШаблонРазделеннаяТаблица = Новый ТаблицаЗначений();
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Ссылка", Документы.ТипВсеСсылки());
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Партнер", Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Договор", Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Соглашение", Новый ОписаниеТипов("СправочникСсылка.СоглашенияСКлиентами"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("ХозяйственнаяОперация", Новый ОписаниеТипов("ПеречислениеСсылка.ХозяйственныеОперации"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("ОплатаВВалюте", Новый ОписаниеТипов("Булево"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("СостояниеНакладной", Новый ОписаниеТипов("Число"));
	ШаблонРазделеннаяТаблица.Колонки.Добавить("СостояниеОрдера", Новый ОписаниеТипов("Число"));
	
	Возврат ШаблонРазделеннаяТаблица;
	
КонецФункции

#КонецОбласти

#КонецОбласти

Связанные материалы