Помощник исправления остатков товаров организаций / Модуль менеджера

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

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

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

	Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
	Запрос.УстановитьПараметр("ПериодИсправления",  КонецМесяца(МесяцИсправления));

	Возврат Запрос;

КонецФункции

// Сформировать ВТКонтролируемые виды запасов.
// 
// Параметры:
//  МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - Менеджер временных таблиц
//
Процедура СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ВидыЗапасов.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ ВТКонтролируемыеВидыЗапасов
	|ИЗ
	|	Справочник.ВидыЗапасов КАК ВидыЗапасов
	|ГДЕ
	|	ВидыЗапасов.ТипЗапасов В (&КонтролируемыеТипыЗапасов)";
	Запрос.Параметры.Вставить("КонтролируемыеТипыЗапасов", Перечисления.ТипыЗапасов.КонтролируемыеТипыЗапасов());
	Запрос.Выполнить();
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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