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