Заказ на внутреннее потребление / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Устанавливает статус для объекта документа
//
// Параметры:
//	НовыйСтатус - Строка - Имя статуса, который будет установлен у заказов
//	ДополнительныеПараметры - Структура - Структура дополнительных параметров установки статуса.
//										Конструктор структуры: ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа().
//
// Возвращаемое значение:
//	Булево - Истина, в случае успешной установки нового статуса.
//
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт
	
	ЗначениеНовогоСтатуса = Перечисления.СтатусыВнутреннихЗаказов[НовыйСтатус];
	
	Если ЗначениеНовогоСтатуса = Перечисления.СтатусыВнутреннихЗаказов.НаСогласовании Тогда
		
		Если Согласован Тогда
			Согласован = Ложь;
		КонецЕсли;
		
	КонецЕсли;
	
	Если ДополнительныеПараметры <> Неопределено Тогда
		
		ЗаказыСервер.СкорректироватьСтрокиЗаказа(ЭтотОбъект, ДополнительныеПараметры);
		
	КонецЕсли;
	
	Статус = ЗначениеНовогоСтатуса;
	
	ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЗаказНаВнутреннееПотребление);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
	
	Возврат ПроверитьЗаполнение();
	
КонецФункции

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

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

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

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

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

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

	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
	
КонецПроцедуры

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

Процедура ПриЗаписи(Отказ)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	ШаблонНазначения = Документы.ЗаказНаВнутреннееПотребление.ШаблонНазначения(ЭтотОбъект);
	Справочники.Назначения.ПриЗаписиДокумента(Назначение, ШаблонНазначения, ЭтотОбъект, Подразделение, ПотреблениеДляДеятельности);
	
	ЗаказНаВнутреннееПотреблениеЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	ВыполнитьКонтрольЗаказаПослеПроведения(Отказ);
	
	ЗаказНаВнутреннееПотреблениеЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
	ЗаказНаВнутреннееПотреблениеЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

#Область ИнициализацияИЗаполнение

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)

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

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

	КонецЕсли;
		
	ОбеспечениеВДокументахСервер.ЗаполнитьВариантОбеспеченияПоУмолчанию(Товары);
	Приоритет = ЗначениеНастроекПовтИсп.ПолучитьПриоритетПоУмолчанию(Приоритет);
	ПараметрыЗаполнения = Документы.ЗаказНаВнутреннееПотребление.ПараметрыЗаполненияВидаДеятельностиНДС(ЭтотОбъект);
	УчетНДСУП.ЗаполнитьВидДеятельностиНДС(ПотреблениеДляДеятельности, ПараметрыЗаполнения);
	
КонецПроцедуры

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

#Область Прочее

// Проверяет возможность проведения документа в статусе "Закрыт".
//
// Параметры:
//  Отказ	 - Булево - параметр "Отказ" обработки проведения.
//
Процедура ВыполнитьКонтрольЗаказаПослеПроведения(Отказ)

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

КонецПроцедуры

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

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

#КонецЕсли

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