Документы передачи в переработку / Модуль менеджера

файл

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

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

#Область ДляВызоваИзДругихПодсистем

// Заполняет список команд отчетов.
// 
// Параметры:
// 	КомандыОтчетов - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
// 	Параметры - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт

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

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

#Область РасчетСостояний

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

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

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

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

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

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

#КонецЕсли

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