#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем Процент;
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура ОбновитьДанныеПоОтрицательнымОстаткамИСальдо() Экспорт
КоличествоПозицийОтрицательныйОстаток = 0;
КоличествоПозицийОтрицательныйОстатокПрочее = 0;
КоличествоПозицийРазвернутоеСальдо = 0;
Если ЗначениеЗаполнено(МесяцИсправления) Тогда
Запрос = ЗапросКоличестваПроблемныхПозиций();
РезультатЗапроса = Запрос.ВыполнитьПакет();
ВГраница = РезультатЗапроса.ВГраница();
ВыборкаДетальныеЗаписи = РезультатЗапроса[ВГраница - 2].Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ВсегоПроблемныхПозиций = ВыборкаДетальныеЗаписи.КоличествоПозиций;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса[ВГраница - 1].Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
КоличествоПозицийОтрицательныйОстаток = ВыборкаДетальныеЗаписи.КоличествоПозиций;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса[ВГраница].Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
КоличествоПозицийОтрицательныйОстатокПрочее = ВыборкаДетальныеЗаписи.КоличествоПозиций;
КонецЕсли;
КоличествоПозицийРазвернутоеСальдо = ВсегоПроблемныхПозиций - КоличествоПозицийОтрицательныйОстаток;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьМесяцИсправления() Экспорт
МесяцИсправления = Неопределено;
КоличествоПозицийОтрицательныйОстатокБыло = 0;
КоличествоПозицийРазвернутоеСальдоБыло = 0;
ТекстыЗапросовПериодов = Новый Массив;
ТекстЗапросаШаблонПериода =
"ВЫБРАТЬ
| &ШаблонПериод КАК Период,
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ШаблонГраницаПериода,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &ШаблонПериод КАК Период,
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ШаблонПериод
| И ТоварыОрганизацийВПути.ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &ШаблонПериод КАК Период,
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ШаблонГраницаПериода,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)) КАК РезервыТоваровОрганизацийОстатки";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТоварыОрганизаций.Период КАК Период
|ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
|
|УПОРЯДОЧИТЬ ПО
| Период";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
КонецТекущегоМесяца = КонецМесяца(ТекущаяДатаСеанса());
ТриГодаНазад = КонецМесяца(ДобавитьМесяц(КонецТекущегоМесяца, -36));
РазделыДляПроверки = Новый Массив;
РазделыДляПроверки.Добавить("РегламентныеОперации");
РазделыДляПроверки.Добавить("БухгалтерскийУчет");
ТаблицаДанных = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки();
Для Каждого ТекущийРаздел Из РазделыДляПроверки Цикл
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.Дата = ТриГодаНазад;
НоваяСтрока.Раздел = ТекущийРаздел;
КонецЦикла;
ОписаниеДанных = Новый Структура("НоваяВерсия, Данные", Ложь, "");
ОписаниеОшибки = Новый Структура;
ДатаЗапрета = Дата(1,1,1);
ИзмененияЗапрещены = ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ТаблицаДанных, ОписаниеДанных, ОписаниеОшибки);
Если ИзмененияЗапрещены Тогда
Для Каждого СтрокаЗапрета Из ОписаниеОшибки.Запреты Цикл
ТекущийЗапрет = КонецМесяца(СтрокаЗапрета.ДатаЗапрета) + 1;
Если НЕ ЗначениеЗаполнено(ДатаЗапрета) Тогда
ДатаЗапрета = ТекущийЗапрет;
Иначе
ДатаЗапрета = Макс(ДатаЗапрета, ТекущийЗапрет);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ТриГодаНазад = КонецМесяца(Макс(ТриГодаНазад, Мин(ДатаЗапрета, КонецТекущегоМесяца)));
ТекМесяц = Макс(КонецМесяца(ВыборкаДетальныеЗаписи.Период), ТриГодаНазад);
Пока ТекМесяц <= КонецТекущегоМесяца Цикл
ТекстЗапроса = ТекстЗапросаШаблонПериода;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ШаблонГраницаПериода", "ГраницаПериода" + Формат(ТекМесяц, "ДФ=yyyyMM"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ШаблонПериод", "Период" + Формат(ТекМесяц, "ДФ=yyyyMM"));
ТекстыЗапросовПериодов.Добавить(ТекстЗапроса);
Запрос.УстановитьПараметр("ГраницаПериода" + Формат(ТекМесяц, "ДФ=yyyyMM"), Новый Граница(ТекМесяц, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Период" + Формат(ТекМесяц, "ДФ=yyyyMM"), ТекМесяц);
ТекМесяц = КонецМесяца(ДобавитьМесяц(ТекМесяц, 1));
КонецЦикла;
Запрос.УстановитьПараметр("Период" + Формат(ТекМесяц, "ДФ=yyyyMM"), ТекМесяц);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&Период" + Формат(ТекМесяц, "ДФ=yyyyMM")) +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ВложенныйЗапрос.Период КАК Период,
| ВложенныйЗапрос.Организация КАК Организация,
| ВложенныйЗапрос.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ВложенныйЗапрос.ВидЗапасов КАК ВидЗапасов,
| ВложенныйЗапрос.НомерГТД КАК НомерГТД,
| СУММА(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| ТекстЗапросаПериодов КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Период,
| ВложенныйЗапрос.Организация,
| ВложенныйЗапрос.АналитикаУчетаНоменклатуры,
| ВложенныйЗапрос.ВидЗапасов,
| ВложенныйЗапрос.НомерГТД
|
|ИНДЕКСИРОВАТЬ ПО
| Период,
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиНаКонецПериода.Период КАК Период
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Период,
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|
|УПОРЯДОЧИТЬ ПО
| Период
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода";
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"ТекстЗапросаПериодов",
"(" + СтрСоединить(ТекстыЗапросовПериодов, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении()) + ")");
МесяцИсправления = КонецМесяца(ТекущаяДатаСеанса());
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Период >= ТриГодаНазад Тогда
МесяцИсправления = ВыборкаДетальныеЗаписи.Период;
Прервать;
КонецЕсли;
КонецЦикла;
Запрос = ЗапросКоличестваПроблемныхПозиций();
РезультатЗапроса = Запрос.ВыполнитьПакет();
ВГраница = РезультатЗапроса.ВГраница();
ВыборкаДетальныеЗаписи = РезультатЗапроса[ВГраница - 2].Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ВсегоПроблемныхПозиций = ВыборкаДетальныеЗаписи.КоличествоПозиций;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса[ВГраница - 1].Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
КоличествоПозицийОтрицательныйОстатокБыло = ВыборкаДетальныеЗаписи.КоличествоПозиций;
КонецЕсли;
КоличествоПозицийРазвернутоеСальдоБыло = ВсегоПроблемныхПозиций - КоличествоПозицийОтрицательныйОстатокБыло;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СформироватьНовыеРезервы(ПоНовымНастройкам = Ложь) Экспорт
Если Константы.КонтролироватьОстаткиТоваровОрганизаций.Получить() Тогда
ПараметрыСеанса.ПроводитьБезКонтроляОстатковТоваровОрганизаций = Истина;
КонецЕсли;
ОчиститьРезервы("ОтрицательныеОстатки");
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыОрганизацийОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ГраницаИсправления,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток,
| 0 КАК КоличествоПоРНПТОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
| И ТоварыОрганизацийВПути.ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток,
| РезервыТоваровОрганизацийОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ГраницаИсправления,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &МесяцИсправления КАК Период,
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД КАК НомерГТД,
| ЛОЖЬ КАК Сторно,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&МесяцИсправления, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ СУММА(ОстаткиНаКонецПериода.КоличествоПоРНПТОстаток)
| КОНЕЦ КАК КоличествоПоРНПТ
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода";
Запрос.УстановитьПараметр("МесяцИсправления", МесяцИсправления);
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
РезультатЗапроса = Запрос.Выполнить();
Организации = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Организация");
Организации = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Организации);
БылиОшибки = Ложь;
Для Каждого Организация Из Организации Цикл
ТаблицаТоварыОрганизаций = РезультатЗапроса.Выгрузить();
МаксимальныйИндексТаблицы = ТаблицаТоварыОрганизаций.Количество() - 1;
Для Счетчик = 0 По МаксимальныйИндексТаблицы Цикл
Стр = ТаблицаТоварыОрганизаций[МаксимальныйИндексТаблицы - Счетчик];
Если Стр.Организация <> Организация Тогда
ТаблицаТоварыОрганизаций.Удалить(Стр);
КонецЕсли;
КонецЦикла;
ДокументОбъект = Новый Структура;
ДокументОбъект.Вставить("Ссылка", Неопределено);
ДокументОбъект.Вставить("Дата", МесяцИсправления);
ДокументОбъект.Вставить("Организация", Организация);
ДокументОбъект.Вставить("Движения", Новый Структура);
ДокументОбъект.Движения.Вставить("ТоварыОрганизаций", ТаблицаТоварыОрганизаций);
ДокументОбъект.Движения.Вставить("РезервыТоваровОрганизаций");
ДокументОбъект.Вставить("ДополнительныеСвойства", Новый Структура);
ДокументОбъект.ДополнительныеСвойства.Вставить("НужноКонтролироватьОстаткиТоваровОрганизаций", Истина);
ДокументОбъект.ДополнительныеСвойства.Вставить("НужноФормироватьСторноПоРезервамТоваровОрганизаций", Ложь);
ДокументОбъект.ДополнительныеСвойства.Вставить("НачалоПериодаПомощникаИсправленияОстатков", НачалоМесяца(МесяцИсправления));
ДокументОбъект.ДополнительныеСвойства.Вставить("ОкончаниеПериодаПомощникаИсправленияОстатков", КонецМесяца(МесяцИсправления));
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
ПараметрыЗаполненияВидовЗапасов = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполненияВидовЗапасов.ДокументДелаетИПриходИРасход = Истина;
НачатьТранзакцию();
Попытка
Отказ = Ложь;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапасыСервер.ПодготовитьЗаписьТоваровОрганизаций(ДокументОбъект,
МенеджерВременныхТаблиц,
РежимЗаписиДокумента.Проведение,
ПараметрыЗаполненияВидовЗапасов);
ЗапасыСервер.СформироватьРезервыПоТоварамОрганизаций(ДокументОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполненияВидовЗапасов);
ИмяТаблицыРезервыТоваровОрганизаций = ЗапасыСервер.ИмяТаблицыРезервыТоваровОрганизаций();
Если ДокументОбъект.ДополнительныеСвойства.Свойство(ИмяТаблицыРезервыТоваровОрганизаций)
И ДокументОбъект.ДополнительныеСвойства[ИмяТаблицыРезервыТоваровОрганизаций].Количество() Тогда
УстановитьПривилегированныйРежим(Истина);
ШаблонКомментария = НСтр(
"ru = 'Документ сформирован автоматически из помощника исправления остатков товаров организаций %ТекущаяДатаСеанса%'");
КорректировкаРегистров = Документы.КорректировкаРегистров.СоздатьДокумент();
КорректировкаРегистров.Дата = ТекущаяДатаСеанса();
КорректировкаРегистров.Ответственный = Пользователи.ТекущийПользователь();
КорректировкаРегистров.Комментарий = СтрЗаменить(ШаблонКомментария, "%ТекущаяДатаСеанса%", Формат(ТекущаяДатаСеанса(), "ДЛФ=DDT"));
НоваяСтрока = КорректировкаРегистров.ТаблицаРегистров.Добавить();
НоваяСтрока.Имя = "РезервыТоваровОрганизаций";
КорректировкаРегистров.Записать();
Набор = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
Набор.Загрузить(ДокументОбъект.ДополнительныеСвойства[ИмяТаблицыРезервыТоваровОрганизаций]);
Набор.Отбор.Регистратор.Установить(КорректировкаРегистров.Ссылка);
Набор.Записать();
УстановитьПривилегированныйРежим(Ложь);
Если ПоНовымНастройкам Тогда
КорректировкиРезервовПоНовымНастройкам.Добавить().Документ = КорректировкаРегистров.Ссылка;
Иначе
КорректировкиРезервов.Добавить().Документ = КорректировкаРегистров.Ссылка;
КонецЕсли;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
БылиОшибки = Истина;
ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(ИмяСобытия(),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.ПомощникИсправленияОстатковТоваровОрганизаций,
,
ПодробноеПредставлениеОшибки);
КонецПопытки;
КонецЦикла;
Если БылиОшибки Тогда
ТекстСообщения = НСтр("ru = 'При переформировании резервов товаров организации возникли ошибки. Подбробности в журнале регистрации.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
Процедура СформироватьНовыеРезервыПоНовымНастройкам() Экспорт
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
СформироватьНовыеРезервы(Истина);
КонецПроцедуры
Процедура СформироватьИсправленияРазвернутогоСальдо() Экспорт
Если Константы.КонтролироватьОстаткиТоваровОрганизаций.Получить() Тогда
ПараметрыСеанса.ПроводитьБезКонтроляОстатковТоваровОрганизаций = Истина;
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц,
Истина);
ЗапросИсточникиПокрытияРазвернутогоСальдо = ЗапросИсточникиПокрытияРазвернутогоСальдо(МенеджерВременныхТаблиц);
ТипыЗачетаОстатков = ТипыЗачетаОстатковРазвернутогоСальдо();
ИспользоватьУчетПрослеживаемыхИмпортныхТоваров = УчетПрослеживаемыхТоваровЛокализация.ИспользоватьУчетПрослеживаемыхИмпортныхТоваров(
МесяцИсправления);
УстановитьПривилегированныйРежим(Истина);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросИсточникиПокрытияРазвернутогоСальдо.УстановитьПараметр("Организация",
ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
ЗапросИсточникиПокрытияРазвернутогоСальдо.УстановитьПараметр("ТипЗапасов",
ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов);
НачатьТранзакцию();
Попытка
ДокументОбъект = Неопределено;
РезультатЗапроса = ЗапросИсточникиПокрытияРазвернутогоСальдо.ВыполнитьПакет();
Для Каждого ТипЗачета Из ТипыЗачетаОстатков Цикл
ТаблицаОстатковКРаспределению = РезультатЗапроса[ТипЗачета.НомерПакетаОстаткиКРаспределению].Выгрузить();
ТаблицаОстатковКРаспределению.Индексы.Добавить(ТипЗачета.СтруктураПоиска);
ВыборкаОтрицательныхОстатков = РезультатЗапроса[ТипЗачета.НомерПакетаОтрицательныеОстатки].Выбрать();
Пока ВыборкаОтрицательныхОстатков.Следующий() Цикл
КоличествоТребуетсяРаспределить = -ВыборкаОтрицательныхОстатков.Количество;
СтруктураПоиска = Новый Структура(ТипЗачета.СтруктураПоиска);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаОтрицательныхОстатков, ТипЗачета.СтруктураПоиска);
СтрокиОстатковКРаспределению = ТаблицаОстатковКРаспределению.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаОстатка Из СтрокиОстатковКРаспределению Цикл
Если Не КоличествоТребуетсяРаспределить Тогда
Прервать;
КонецЕсли;
Если СтрокаОстатка.ТребуетсяРезерв
И СтрокаОстатка.НомерГТД = ВыборкаОтрицательныхОстатков.НомерГТД Тогда
Продолжить;
КонецЕсли;
Количество = Мин(СтрокаОстатка.Количество, КоличествоТребуетсяРаспределить);
КоличествоПоРНПТ = ?(ИспользоватьУчетПрослеживаемыхИмпортныхТоваров,
?(СтрокаОстатка.Количество - Количество = 0,
СтрокаОстатка.КоличествоПоРНПТ,
Количество * СтрокаОстатка.КоличествоПоРНПТ / СтрокаОстатка.Количество),
0);
Если ДокументОбъект = Неопределено Тогда
ДокументОбъект = Документы.ИсправлениеРазвернутогоСальдоТоваровОрганизаций.СоздатьДокумент();
ДокументОбъект.Дата = МесяцИсправления;
ДокументОбъект.Организация = ВыборкаОтрицательныхОстатков.Организация;
ДокументОбъект.Ответственный = Пользователи.ТекущийПользователь();
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
ДокументОбъект.ДополнительныеСвойства.Вставить("НачалоПериодаПомощникаИсправленияОстатков",
НачалоМесяца(МесяцИсправления));
ДокументОбъект.ДополнительныеСвойства.Вставить("ОкончаниеПериодаПомощникаИсправленияОстатков",
КонецМесяца(МесяцИсправления));
ШаблонКомментария = НСтр("ru = 'Документ сформирован автоматически из помощника исправления остатков товаров организаций %ТекущаяДатаСеанса%'");
ДокументОбъект.Комментарий = СтрЗаменить(ШаблонКомментария,
"%ТекущаяДатаСеанса%",
Формат(ТекущаяДатаСеанса(), "ДЛФ=DDT"));
КонецЕсли;
СтруктураПоиска = Новый Структура("АналитикаУчетаНоменклатуры, ВидЗапасовОприходования,
|ВидЗапасовСписания, НомерГТДОприходования,
|НомерГТДСписания");
СтруктураПоиска.АналитикаУчетаНоменклатуры = ВыборкаОтрицательныхОстатков.АналитикаУчетаНоменклатуры;
СтруктураПоиска.ВидЗапасовОприходования = ВыборкаОтрицательныхОстатков.ВидЗапасов;
Если СтрокаОстатка.ТребуетсяРезерв Тогда
СтруктураПоиска.ВидЗапасовСписания = ВыборкаОтрицательныхОстатков.ВидЗапасов;
Иначе
СтруктураПоиска.ВидЗапасовСписания = СтрокаОстатка.ВидЗапасов;
КонецЕсли;
СтруктураПоиска.НомерГТДОприходования = ВыборкаОтрицательныхОстатков.НомерГТД;
СтруктураПоиска.НомерГТДСписания = СтрокаОстатка.НомерГТД;
СтрокиИсправления = ДокументОбъект.Исправления.НайтиСтроки(СтруктураПоиска);
Если СтрокиИсправления.Количество() Тогда
СтрокаИсправления = СтрокиИсправления[0];
Иначе
СтрокаИсправления = ДокументОбъект.Исправления.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИсправления, СтруктураПоиска);
КонецЕсли;
СтрокаИсправления.Количество = СтрокаИсправления.Количество + Количество;
СтрокаИсправления.КоличествоПоРНПТ = СтрокаИсправления.КоличествоПоРНПТ + КоличествоПоРНПТ;
СтрокаОстатка.Количество = СтрокаОстатка.Количество - Количество;
СтрокаОстатка.КоличествоПоРНПТ = СтрокаОстатка.КоличествоПоРНПТ - КоличествоПоРНПТ;
КоличествоТребуетсяРаспределить = КоличествоТребуетсяРаспределить - Количество;
Если СтрокаОстатка.Количество = 0 Тогда
ТаблицаОстатковКРаспределению.Удалить(СтрокаОстатка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если ДокументОбъект <> Неопределено Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ИсправленияОстатковТоваровОрганизаций.Добавить().Документ = ДокументОбъект.Ссылка;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(ИмяСобытия(),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.ПомощникИсправленияОстатковТоваровОрганизаций,
,
ПодробноеПредставлениеОшибки);
ТекстСообщения = НСтр("ru = 'Не удалось сформировать исправления развернутого сальдо. Подробности в журнале регистрации.'");
ВызватьИсключение ТекстСообщения;
КонецПопытки;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ПерезаполнитьВидыЗапасов() Экспорт
Если Константы.КонтролироватьОстаткиТоваровОрганизаций.Получить() Тогда
ПараметрыСеанса.ПроводитьБезКонтроляОстатковТоваровОрганизаций = Истина;
КонецЕсли;
Завершение = Ложь;
Итерация = 1;
Пока Не Завершение Цикл
Если Итерация > 50 Тогда
ТекстИсключения = НСтр("ru = 'Превышен лимит итераций перезаполнения видов запасов'", Метаданные.ОсновнойЯзык.КодЯзыка);
ЗаписьЖурналаРегистрации(
ИмяСобытия(),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.ПомощникИсправленияОстатковТоваровОрганизаций,
,
ТекстИсключения);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗаполнитьСписокДокументовКПерезаполнению();
Если ДокументыКПерезаполнению.Количество() = 0 Тогда
Если СледующаяАналитикаРазвернутогоСальдо() Тогда
ОчиститьРезервы("ПоАналитике");
Итерация = 1;
Продолжить;
Иначе
Завершение = Истина;
КонецЕсли;
Иначе
СнятьФлагВидыЗапасовУказаныВручную();
ПерезаполнитьВидыЗапасовИтерация();
Итерация = Итерация + 1;
КонецЕсли;
ДокументыКПерезаполнению.Очистить();
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьНовыеНастройкиПередачи() Экспорт
НовыеНастройкиПередачиМеждуОрганизациями.Очистить();
ОрганизацииДляФормированияПередач.Очистить();
ОтборыДляФормированияПередач.Очистить();
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, Ложь);
ЗапросОрганизацииИсточники = ЗапросОрганизацииИсточники(МенеджерВременныхТаблиц, Истина, Истина, Ложь, Ложь);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросОрганизацииИсточники.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
ЗапросОрганизацииИсточники.УстановитьПараметр("ТипЗапасов", ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов);
РезультатОрганизацииИсточники = ЗапросОрганизацииИсточники.Выполнить();
Если Не РезультатОрганизацииИсточники.Пустой() Тогда
СтрОрганизации = ОрганизацииДляФормированияПередач.Добавить();
СтрОрганизации.Организация = ВыборкаОрганизацииСОтрицательнымОстатком.Организация;
СтрОрганизации.ТипЗапасов = ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов;
КонецЕсли;
ТекущаяОрганизация = Неопределено;
ВыборкаОрганизацииИсточники = РезультатОрганизацииИсточники.Выбрать();
Пока ВыборкаОрганизацииИсточники.Следующий() Цикл
Если ТекущаяОрганизация <> ВыборкаОрганизацииИсточники.Организация Тогда
Настройка = НовыеНастройкиПередачиМеждуОрганизациями.Добавить();
Настройка.Продавец = ВыборкаОрганизацииСОтрицательнымОстатком.Организация;
Настройка.ТипЗапасовВладельца = ВыборкаОрганизацииИсточники.ТипЗапасов;
Настройка.Владелец = ВыборкаОрганизацииИсточники.Организация;
ТекущаяОрганизация = ВыборкаОрганизацииИсточники.Организация
КонецЕсли;
СтрОтборы = ОтборыДляФормированияПередач.Добавить();
СтрОтборы.Номенклатура = ВыборкаОрганизацииИсточники.Номенклатура;
СтрОтборы.Склад = ВыборкаОрганизацииИсточники.Склад;
СтрОтборы.Организация = ВыборкаОрганизацииСОтрицательнымОстатком.Организация;
СтрОтборы.ТипЗапасов = ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьРаспоряженияНаОформлениеОприходований() Экспорт
РаспоряженияНаОформлениеОприходований.Очистить();
ДанныеДляЗаполненияОприходований.Очистить();
Запрос = ЗапросОтборовПроблемныхОстатков();
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ДетальныеОстатки.Организация КАК Организация,
| ДетальныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.Характеристика КАК Характеристика,
| КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия,
| КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК Склад,
| КлючиАналитикиУчетаНоменклатуры.Назначение КАК Назначение,
| ДетальныеОстатки.НомерГТД КАК НомерГТД,
| ДетальныеОстатки.ВидЗапасов КАК ВидЗапасов,
| -ДетальныеОстатки.КоличествоОстаток КАК Количество
|ИЗ
| ДетальныеОстаткиНаКонецМесяцаИсправления КАК ДетальныеОстатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ДетальныеОстатки.ВидЗапасов = ВидыЗапасов.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО ДетальныеОстатки.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
|ГДЕ
| ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар)
| И КлючиАналитикиУчетаНоменклатуры.ТипМестаХранения = ЗНАЧЕНИЕ(Перечисление.ТипыМестХранения.Склад)
| И ДетальныеОстатки.КоличествоОстаток < 0
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| Склад
|";
РезультатЗапроса = Запрос.Выполнить();
ТекущаяОрганизация = Неопределено;
ТекущийСклад = Неопределено;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТекущаяОрганизация <> ВыборкаДетальныеЗаписи.Организация
Или ТекущийСклад <> ВыборкаДетальныеЗаписи.Склад Тогда
СтрРаспоряжение = РаспоряженияНаОформлениеОприходований.Добавить();
СтрРаспоряжение.Организация = ВыборкаДетальныеЗаписи.Организация;
СтрРаспоряжение.Склад = ВыборкаДетальныеЗаписи.Склад;
ТекущаяОрганизация = ВыборкаДетальныеЗаписи.Организация;
ТекущийСклад = ВыборкаДетальныеЗаписи.Склад;
КонецЕсли;
СтрРаспоряжение.КоличествоПозиций = СтрРаспоряжение.КоличествоПозиций + 1;
ЗаполнитьЗначенияСвойств(ДанныеДляЗаполненияОприходований.Добавить(), ВыборкаДетальныеЗаписи);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТребуетсяПереформированиеРезервов() Экспорт
ТребуетсяПереформированиеРезервов = Ложь;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, Истина);
ЗапросОрганизацииИсточники = ЗапросОрганизацииИсточники(МенеджерВременныхТаблиц, Истина, Истина, Истина, Ложь);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросОрганизацииИсточники.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
ЗапросОрганизацииИсточники.УстановитьПараметр("ТипЗапасов", ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов);
РезультатЗапроса = ЗапросОрганизацииИсточники.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
ТребуетсяПереформированиеРезервов = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТребуетсяИсправлениеРазвернутогоСальдо() Экспорт
ТребуетсяИсправлениеРазвернутогоСальдо = Ложь;
ТребуетсяПерезаполнитьВидыЗапасов = Ложь;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, Истина);
ЗапросОрганизацииИсточники = ЗапросОрганизацииИсточники(МенеджерВременныхТаблиц, Истина, Ложь, Истина, Истина);
ЗапросОрганизацииИсточникиБезТиповЗапасов = ЗапросОрганизацииИсточникиБезТиповЗапасов(МенеджерВременныхТаблиц, Истина, Ложь, Истина, Истина);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросОрганизацииИсточники.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
ЗапросОрганизацииИсточники.УстановитьПараметр("ТипЗапасов", ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов);
РезультатЗапроса = ЗапросОрганизацииИсточники.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ТребуетсяИсправлениеРазвернутогоСальдо = Истина;
КонецЕсли;
ЗапросОрганизацииИсточникиБезТиповЗапасов.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
РезультатЗапроса = ЗапросОрганизацииИсточникиБезТиповЗапасов.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ТребуетсяПерезаполнитьВидыЗапасов = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СформироватьИсправительныеСчетаФактуры() Экспорт
ТаблицаИзменнныхДокументов = ИзмененныеДокументы.ВыгрузитьКолонки("Документ, Организация, Дата, Ответственный");
Для Каждого Стр Из ИзмененныеДокументы Цикл
Если Стр.ВыданСчетФактура
И Стр.НомераГТДИзменились
И ИсправительныеСчетаФактуры.Найти(Стр.Документ, "Основание") = Неопределено Тогда
ЗаполнитьЗначенияСвойств(ТаблицаИзменнныхДокументов.Добавить(), Стр);
КонецЕсли;
КонецЦикла;
Если Не ТаблицаИзменнныхДокументов.Количество() Тогда
ВызватьИсключение НСтр("ru = 'Все необходимые счета-фактуры уже сформированы'");
КонецЕсли;
МассивСчетовФактур = УчетНДСУП.СформироватьИсправительныеСчетаФактурыПоИзмененнымДокументам(ТаблицаИзменнныхДокументов);
БылиОшибки = Ложь;
i = 0;
Для Каждого Стр Из ТаблицаИзменнныхДокументов Цикл
СчетФактура = МассивСчетовФактур[i];
Если СчетФактура.Пустая() Тогда
БылиОшибки = Истина;
Иначе
ИсправительныеСчетаФактурыСтрока = ИсправительныеСчетаФактуры.Найти(Стр.Документ, "Основание");
Если ИсправительныеСчетаФактурыСтрока = Неопределено Тогда
ИсправительныеСчетаФактурыСтрока = ИсправительныеСчетаФактуры.Добавить();
ИсправительныеСчетаФактурыСтрока.Основание = Стр.Документ;
КонецЕсли;
ИсправительныеСчетаФактурыСтрока.Документ = СчетФактура;
КонецЕсли;
i = i + 1;
КонецЦикла;
Если БылиОшибки Тогда
ТекстСообщения = НСтр(
"ru = 'Не удалось сформировать исправительные счета-фактуры по всем измененным документов. Подробности в журнале регистрации.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
Процедура СформироватьРезультатКонтроляОформленияДокументовТовародвижения(АдресДопПараметров, СДетализациейПоПозициям) Экспорт
РезультатКонтроляОформления.Очистить();
ОтчетКонтроля = Отчеты.КонтрольОформленияДокументовТовародвижений.Создать();
ОтчетКонтроля.КомпоновщикНастроек.ЗагрузитьНастройки(
ОтчетКонтроля.СхемаКомпоновкиДанных.ВариантыНастроек.РежимПомощникаИсправленияОстатковТоваровОрганизаций.Настройки);
СхемаРезультатаКонтроляОформления = ОтчетКонтроля.СхемаКомпоновкиДанных;
ГруппировкаСклад = ОтчетКонтроля.КомпоновщикНастроек.Настройки.Структура[0];
ГруппировкаВидОперации = ГруппировкаСклад.Структура[1];
ГруппировкаРекомендация = ГруппировкаВидОперации.Структура[0];
ГруппировкаРаспоряжение = ГруппировкаРекомендация.Структура[0];
ГруппировкаДетализацияПоПозициям = ГруппировкаРаспоряжение.Структура[0];
ГруппировкаДетализацияПоПозициям.Использование = СДетализациейПоПозициям;
ЗаполнитьОтборыДляФормированияОтчетаКонтроля();
Если ОбщегоНазначенияУТ.ВерсияПлатформыНеНижеУказанной("8.3.18.1208") Тогда
Если ОтборыДляФормированияОтчетаКонтроля.Количество() > 0 Тогда
АдресТаблицыОтборов = ПоместитьВоВременноеХранилище(ОтборыДляФормированияОтчетаКонтроля.Выгрузить());
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ОтчетКонтроля.КомпоновщикНастроек,
"АдресТаблицыОтборов",
АдресТаблицыОтборов);
КонецЕсли;
Иначе
ДобавитьОтборыКонтроляОформленияДокументов(ОтчетКонтроля.КомпоновщикНастроек);
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ОтчетКонтроля.КомпоновщикНастроек,
"РежимПомощникаИсправленияОстатковТоваровОрганизаций",
Истина);
ПараметрМакетОформления = ОтчетКонтроля.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления");
ПараметрМакетОформления.Значение = "ОформлениеОтчетовБежевый";
ПараметрМакетОформления.Использование = Истина;
ДанныеРасшифровкиРезультатаКонтроляОформления = Неопределено;
ОтчетКонтроля.СкомпоноватьРезультат(РезультатКонтроляОформления, ДанныеРасшифровкиРезультатаКонтроляОформления);
ДопПараметры = Новый Структура("Схема, ДанныеРасшифровки",
СхемаРезультатаКонтроляОформления, ДанныеРасшифровкиРезультатаКонтроляОформления);
ПоместитьВоВременноеХранилище(ДопПараметры, АдресДопПараметров);
КонецПроцедуры
Процедура Инициализировать() Экспорт
МетаданныеОбработки = Метаданные();
Для Каждого Поле Из МетаданныеОбработки.Реквизиты Цикл
ЭтотОбъект[Поле.Имя] = Неопределено;
КонецЦикла;
Для Каждого ТЧ Из МетаданныеОбработки.ТабличныеЧасти Цикл
ЭтотОбъект[ТЧ.Имя].Очистить();
КонецЦикла;
КонецПроцедуры
Функция СтруктураДанных() Экспорт
ОбъектКакСтруктура = Новый Структура;
МетаданныеОбработки = Метаданные();
Для Каждого Поле Из МетаданныеОбработки.Реквизиты Цикл
ОбъектКакСтруктура.Вставить(Поле.Имя, ЭтотОбъект[Поле.Имя]);
КонецЦикла;
Для Каждого ТЧ Из МетаданныеОбработки.ТабличныеЧасти Цикл
ОбъектКакСтруктура.Вставить(ТЧ.Имя, ЭтотОбъект[ТЧ.Имя].Выгрузить());
КонецЦикла;
Возврат ОбъектКакСтруктура;
КонецФункции
Функция ИменаДлительныхОпераций() Экспорт
Массив = Новый Массив;
Массив.Добавить("ЗаполнитьМесяцИсправления");
Массив.Добавить("СформироватьНовыеРезервы");
Массив.Добавить("СформироватьНовыеРезервыПоНовымНастройкам");
Массив.Добавить("СформироватьИсправленияРазвернутогоСальдо");
Массив.Добавить("ПерезаполнитьВидыЗапасов");
Массив.Добавить("ЗаполнитьНовыеНастройкиПередачи");
Массив.Добавить("СформироватьИсправительныеСчетаФактуры");
Массив.Добавить("СформироватьРезультатКонтроляОформленияДокументовТовародвижения");
Возврат Массив;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СледующаяАналитикаРазвернутогоСальдо()
Если ТребуетсяИсправлениеРазвернутогоСальдо Тогда
АналитикаРазвернутогоСальдо = Неопределено;
ОрганизацияРазвернутогоСальдо = Неопределено;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, Истина);
ЗапросОрганизацииИсточники = ЗапросОрганизацииИсточники(МенеджерВременныхТаблиц, Истина, Ложь, Истина, Истина);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросОрганизацииИсточники.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
ЗапросОрганизацииИсточники.УстановитьПараметр("ТипЗапасов", ВыборкаОрганизацииСОтрицательнымОстатком.ТипЗапасов);
РезультатЗапроса = ЗапросОрганизацииИсточники.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
АналитикаРазвернутогоСальдо = ВыборкаДетальныеЗаписи.АналитикаУчетаНоменклатуры;
ОрганизацияРазвернутогоСальдо = ВыборкаОрганизацииСОтрицательнымОстатком.Организация;
Возврат Истина;
КонецЕсли;
КонецЦикла;
ИначеЕсли ТребуетсяПерезаполнитьВидыЗапасов Тогда
АналитикаРазвернутогоСальдо = Неопределено;
ОрганизацияРазвернутогоСальдо = Неопределено;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
ЗапросОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, Истина);
ЗапросОрганизацииИсточникиБезТиповЗапасов = ЗапросОрганизацииИсточникиБезТиповЗапасов(МенеджерВременныхТаблиц, Истина, Ложь, Истина, Истина);
РезультатОрганизацииСОтрицательнымОстатком = ЗапросОрганизацииСОтрицательнымОстатком.Выполнить();
ВыборкаОрганизацииСОтрицательнымОстатком = РезультатОрганизацииСОтрицательнымОстатком.Выбрать();
Пока ВыборкаОрганизацииСОтрицательнымОстатком.Следующий() Цикл
ЗапросОрганизацииИсточникиБезТиповЗапасов.УстановитьПараметр("Организация", ВыборкаОрганизацииСОтрицательнымОстатком.Организация);
РезультатЗапроса = ЗапросОрганизацииИсточникиБезТиповЗапасов.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
АналитикаРазвернутогоСальдо = ВыборкаДетальныеЗаписи.АналитикаУчетаНоменклатуры;
ОрганизацияРазвернутогоСальдо = ВыборкаОрганизацииСОтрицательнымОстатком.Организация;
Возврат Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Ложь;
КонецФункции
Процедура ПерезаполнитьВидыЗапасовИтерация()
Для Каждого Стр Из ДокументыКПерезаполнению Цикл
ОбновитьДанныеПоОтрицательнымОстаткамИСальдо();
СообщитьПрогрессПерезаполненияВидовЗапасов();
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
Запрос = ЗапросОтрицательныйОстатокАналитикиРазвернутогоСальдо(МенеджерВременныхТаблиц);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Прервать;
КонецЕсли;
НачатьТранзакцию();
Попытка
НаборЗаписей = РегистрыНакопления.ТоварыОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Стр.Документ);
НаборЗаписей.Прочитать();
ДвиженияПередПерезаполнением = НаборЗаписей.Выгрузить(
,
"Период, ВидДвижения, АналитикаУчетаНоменклатуры, Организация, ВидЗапасов, НомерГТД, Количество");
ДокументОбъект = Стр.Документ.ПолучитьОбъект();
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ПередачаТоваровМеждуОрганизациями") Тогда
ДокументОбъект.УказыватьНомераГТД = Ложь;
КонецЕсли;
ВерсияДанных = ДокументОбъект.ВерсияДанных;
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
ДокументОбъект.ДополнительныеСвойства.Вставить(
"НачалоПериодаПомощникаИсправленияОстатков",
НачалоМесяца(МесяцИсправления));
ДокументОбъект.ДополнительныеСвойства.Вставить(
"ОкончаниеПериодаПомощникаИсправленияОстатков",
КонецМесяца(МесяцИсправления));
УстановитьПривилегированныйРежим(Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
УстановитьПривилегированныйРежим(Ложь);
Если ДвиженияИзменились(ДвиженияПередПерезаполнением, ДокументОбъект.Ссылка, Ложь) Тогда
НоваяСтрока = ИзмененныеДокументы.Найти(ДокументОбъект.Ссылка, "Документ");
Если НоваяСтрока = Неопределено Тогда
НоваяСтрока = ИзмененныеДокументы.Добавить();
КонецЕсли;
НоваяСтрока.Документ = ДокументОбъект.Ссылка;
ВыданСчетФактура = УчетНДСУП.СчетаФактурыВыданныеПоДокументамОснованиям(ДокументОбъект.Ссылка).Количество();
Если ВыданСчетФактура Тогда
НоваяСтрока.ВыданСчетФактура = Истина;
НоваяСтрока.НомераГТДИзменились = ДвиженияИзменились(ДвиженияПередПерезаполнением, ДокументОбъект.Ссылка, Истина);
НоваяСтрока.Ответственный = ДокументОбъект.Менеджер;
НоваяСтрока.Организация = ДокументОбъект.Организация;
НоваяСтрока.Дата = ДокументОбъект.Дата;
КонецЕсли;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстОшибки = НСтр("ru = 'Возникла ошибка при перезаполнении видов запасов за период %ТекущийМесяц%: %ПричинаОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ПричинаОшибки%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ТекущийМесяц%", Формат(МесяцИсправления, "ДЛФ=DD"));
ВызватьИсключение ТекстОшибки;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Процедура СообщитьПрогрессПерезаполненияВидовЗапасов()
Если Не КоличествоПозицийРазвернутоеСальдоБыло Тогда
Возврат;
КонецЕсли;
ТекстСообщения = НСтр("ru = 'Выполняется перезаполнение видов запасов'");
Если Процент = Неопределено Тогда
Процент = 0;
ДлительныеОперации.СообщитьПрогресс(0, ТекстСообщения);
КонецЕсли;
НовыйПроцент =
100
- (КоличествоПозицийОтрицательныйОстаток + КоличествоПозицийРазвернутоеСальдо)
/ (КоличествоПозицийОтрицательныйОстатокБыло + КоличествоПозицийРазвернутоеСальдоБыло)
* 100;
Если НовыйПроцент - Процент > 1 Тогда
Процент = НовыйПроцент;
ДлительныеОперации.СообщитьПрогресс(Окр(Процент), ТекстСообщения);
КонецЕсли;
КонецПроцедуры
Функция ДвиженияИзменились(ДвиженияПередПерезаполнением, ДокументСсылка, ТолькоПоНомерамГТД)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыОрганизаций.Период КАК Период,
| ТоварыОрганизаций.ВидДвижения КАК ВидДвижения,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.Организация КАК Организация,
| ТоварыОрганизаций.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД,
| ТоварыОрганизаций.Количество КАК Количество
|ПОМЕСТИТЬ ДвиженияПередПерезаполнением
|ИЗ
| &ДвиженияПередПерезаполнением КАК ТоварыОрганизаций
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ВложенныйЗапрос.Период КАК Период,
| ВложенныйЗапрос.ВидДвижения КАК ВидДвижения,
| ВложенныйЗапрос.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ВложенныйЗапрос.Организация КАК Организация,
| &ТекстЗапросаВидЗапасов КАК ВидЗапасов,
| ВложенныйЗапрос.НомерГТД КАК НомерГТД,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество
|ИЗ
| (ВЫБРАТЬ
| ТоварыОрганизаций.Период КАК Период,
| ТоварыОрганизаций.ВидДвижения КАК ВидДвижения,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизаций.Организация КАК Организация,
| ТоварыОрганизаций.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизаций.НомерГТД КАК НомерГТД,
| ТоварыОрганизаций.Количество КАК Количество
| ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
| ГДЕ
| ТоварыОрганизаций.Регистратор = &Регистратор
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДвиженияПередПерезаполнением.Период,
| ДвиженияПередПерезаполнением.ВидДвижения,
| ДвиженияПередПерезаполнением.АналитикаУчетаНоменклатуры,
| ДвиженияПередПерезаполнением.Организация,
| ДвиженияПередПерезаполнением.ВидЗапасов,
| ДвиженияПередПерезаполнением.НомерГТД,
| -ДвиженияПередПерезаполнением.Количество
| ИЗ
| ДвиженияПередПерезаполнением КАК ДвиженияПередПерезаполнением) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.АналитикаУчетаНоменклатуры,
| ВложенныйЗапрос.Период,
| ВложенныйЗапрос.Организация,
| ВложенныйЗапрос.ВидДвижения,
| &ТекстЗапросаВидЗапасов,
| ВложенныйЗапрос.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) <> 0";
Запрос.УстановитьПараметр("ДвиженияПередПерезаполнением", ДвиженияПередПерезаполнением);
Запрос.УстановитьПараметр("Регистратор", ДокументСсылка);
Если ТолькоПоНомерамГТД Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаВидЗапасов", "НЕОПРЕДЕЛЕНО");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаВидЗапасов", "ВидЗапасов");
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
Процедура ЗаполнитьСписокДокументовКПерезаполнению()
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.СформироватьВТКонтролируемыеВидыЗапасов(МенеджерВременныхТаблиц);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ГраницаИсправления,
| Организация = &Организация
| И АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
| И ТоварыОрганизацийВПути.Организация = &Организация
| И ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ТоварыОрганизацийВПути.ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ГраницаИсправления,
| Организация = &Организация
| И АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ОтборРегистраторов
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода
|;
|
|
|ВЫБРАТЬ
| ОтборРегистраторов.Организация КАК Организация,
| ОтборРегистраторов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОтборРегистраторов.ВидЗапасов КАК ВидЗапасов,
| ОтборРегистраторов.НомерГТД КАК НомерГТД
|ИЗ
| ОтборРегистраторов КАК ОтборРегистраторов
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыОрганизаций.Регистратор КАК Документ
|ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
|ГДЕ
| (ТоварыОрганизаций.Организация, ТоварыОрганизаций.АналитикаУчетаНоменклатуры, ТоварыОрганизаций.ВидЗапасов, ТоварыОрганизаций.НомерГТД) В (
| ВЫБРАТЬ
| ОтборРегистраторов.Организация КАК Организация,
| ОтборРегистраторов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОтборРегистраторов.ВидЗапасов КАК ВидЗапасов,
| ОтборРегистраторов.НомерГТД КАК НомерГТД
| ИЗ
| ОтборРегистраторов КАК ОтборРегистраторов)
| И ТоварыОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаКонца
| И (ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыОрганизаций.Количество > 0
| ИЛИ ТоварыОрганизаций.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И ТоварыОрганизаций.Количество < 0)
| И НЕ ТоварыОрганизаций.Регистратор ССЫЛКА Документ.КорректировкаРегистров
| И НЕ ТоварыОрганизаций.Регистратор ССЫЛКА Документ.ИсправлениеРазвернутогоСальдоТоваровОрганизаций
|;
|
|
|УНИЧТОЖИТЬ ОтборРегистраторов";
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(МесяцИсправления));
Запрос.УстановитьПараметр("ДатаКонца", КонецМесяца(МесяцИсправления));
Запрос.УстановитьПараметр("Организация", ОрганизацияРазвернутогоСальдо);
Запрос.УстановитьПараметр("АналитикаУчетаНоменклатуры", АналитикаРазвернутогоСальдо);
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
РезультатЗапроса = Запрос.ВыполнитьПакет();
ВГраница = РезультатЗапроса.ВГраница();
Если РезультатЗапроса[ВГраница - 2].Пустой() <> РезультатЗапроса[ВГраница - 1].Пустой() Тогда
ТекстИсключения =
НСтр("ru = 'По аналитике учета номенклатуры %АналитикаУчетаНоменклатуры% не найдены документы для перезаполнения видов запасов'",
Метаданные.ОсновнойЯзык.КодЯзыка);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%АналитикаУчетаНоменклатуры%", Формат(АналитикаРазвернутогоСальдо));
ЗаписьЖурналаРегистрации(
ИмяСобытия(),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.ПомощникИсправленияОстатковТоваровОрганизаций,
,
ТекстИсключения);
ВызватьИсключение ТекстИсключения;
Иначе
ДокументыКПерезаполнению.Загрузить(РезультатЗапроса[ВГраница - 1].Выгрузить());
КонецЕсли;
КонецПроцедуры
Процедура СнятьФлагВидыЗапасовУказаныВручную()
Для Каждого Стр Из ДокументыКПерезаполнению Цикл
ДокументОбъект = Стр.Документ.ПолучитьОбъект();
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВидыЗапасовУказаныВручную", ДокументОбъект.Метаданные())
И ДокументОбъект.ВидыЗапасовУказаныВручную Тогда
ДокументОбъект.ВидыЗапасовУказаныВручную = Ложь;
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ИмяСобытия()
Возврат НСтр("ru = 'Ошибка при работе помощника исправления остатков товаров организаций'",
ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());
КонецФункции
Процедура ДобавитьОтборыКонтроляОформленияДокументов(КомпоновщикНастроек)
Если ОтборыДляФормированияОтчетаКонтроля.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ГруппаИли = КомпоновкаДанныхКлиентСервер.ДобавитьГруппуОтбора(
КомпоновщикНастроек.Настройки.Отбор.Элементы,
ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
Для Каждого Стр Из ОтборыДляФормированияОтчетаКонтроля Цикл
ГруппаИ = КомпоновкаДанныхКлиентСервер.ДобавитьГруппуОтбора(
ГруппаИли.Элементы,
ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ГруппаИ,
"Номенклатура",
Стр.Номенклатура,
ВидСравненияКомпоновкиДанных.Равно);
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ГруппаИ,
"Характеристика",
Стр.Характеристика,
ВидСравненияКомпоновкиДанных.Равно);
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ГруппаИ,
"Серия",
Стр.Серия,
ВидСравненияКомпоновкиДанных.Равно);
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ГруппаИ,
"Склад",
Стр.Склад,
ВидСравненияКомпоновкиДанных.Равно);
КомпоновкаДанныхКлиентСервер.ДобавитьОтбор(
ГруппаИ,
"Назначение",
Стр.Назначение,
ВидСравненияКомпоновкиДанных.Равно);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьОтборыДляФормированияОтчетаКонтроля()
Запрос = ЗапросОтборовПроблемныхОстатков();
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.Характеристика КАК Характеристика,
| КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия,
| КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК Склад,
| КлючиАналитикиУчетаНоменклатуры.Назначение КАК Назначение
|ИЗ
| ОтборПроблемныеОстатки КАК ОтборПроблемныеОстатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО ОтборПроблемныеОстатки.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка";
РезультатЗапроса = Запрос.Выполнить();
ОтборыДляФормированияОтчетаКонтроля.Загрузить(РезультатЗапроса.Выгрузить());
КонецПроцедуры
Процедура ОчиститьРезервы(ТипОтбора)
Запрос = ЗапросОтборовПроблемныхОстатков();
Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| РезервыТоваровОрганизаций.Регистратор КАК Регистратор,
| РезервыТоваровОрганизаций.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций КАК РезервыТоваровОрганизаций
|ГДЕ
| РезервыТоваровОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&МесяцИсправления, МЕСЯЦ) И КОНЕЦПЕРИОДА(&МесяцИсправления, МЕСЯЦ)
| И (РезервыТоваровОрганизаций.АналитикаУчетаНоменклатуры, РезервыТоваровОрганизаций.Организация) В
| (ВЫБРАТЬ
| ОтборОтрицательныеОстатки.АналитикаУчетаНоменклатуры,
| ОтборОтрицательныеОстатки.Организация
| ИЗ
| ОтборОтрицательныеОстатки)
| И РезервыТоваровОрганизаций.ВидЗапасов В
| (ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)
| И &ТипОтбора = ""ОтрицательныеОстатки""
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизаций.Регистратор,
| РезервыТоваровОрганизаций.НомерСтроки
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций КАК РезервыТоваровОрганизаций
|ГДЕ
| РезервыТоваровОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&МесяцИсправления, МЕСЯЦ) И КОНЕЦПЕРИОДА(&МесяцИсправления, МЕСЯЦ)
| И (РезервыТоваровОрганизаций.АналитикаУчетаНоменклатуры, РезервыТоваровОрганизаций.КорОрганизация) В
| (ВЫБРАТЬ
| ОтборОтрицательныеОстатки.АналитикаУчетаНоменклатуры,
| ОтборОтрицательныеОстатки.Организация
| ИЗ
| ОтборОтрицательныеОстатки)
| И РезервыТоваровОрганизаций.КорВидЗапасов В
| (ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)
| И &ТипОтбора = ""ОтрицательныеОстатки""
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизаций.Регистратор,
| РезервыТоваровОрганизаций.НомерСтроки
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций КАК РезервыТоваровОрганизаций
|ГДЕ
| РезервыТоваровОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&МесяцИсправления, МЕСЯЦ) И КОНЕЦПЕРИОДА(&МесяцИсправления, МЕСЯЦ)
| И РезервыТоваровОрганизаций.АналитикаУчетаНоменклатуры = &АналитикаРазвернутогоСальдо
| И РезервыТоваровОрганизаций.Организация = &ОрганизацияРазвернутогоСальдо
| И РезервыТоваровОрганизаций.ВидЗапасов В
| (ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)
| И &ТипОтбора = ""ПоАналитике""
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизаций.Регистратор,
| РезервыТоваровОрганизаций.НомерСтроки
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций КАК РезервыТоваровОрганизаций
|ГДЕ
| РезервыТоваровОрганизаций.Период МЕЖДУ НАЧАЛОПЕРИОДА(&МесяцИсправления, МЕСЯЦ) И КОНЕЦПЕРИОДА(&МесяцИсправления, МЕСЯЦ)
| И РезервыТоваровОрганизаций.АналитикаУчетаНоменклатуры = &АналитикаРазвернутогоСальдо
| И РезервыТоваровОрганизаций.КорОрганизация = &ОрганизацияРазвернутогоСальдо
| И РезервыТоваровОрганизаций.КорВидЗапасов В
| (ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов)
| И &ТипОтбора = ""ПоАналитике""
|
|УПОРЯДОЧИТЬ ПО
| Регистратор,
| НомерСтроки УБЫВ";
Запрос.УстановитьПараметр("МесяцИсправления", МесяцИсправления);
Запрос.УстановитьПараметр("ТипОтбора", ТипОтбора);
Запрос.УстановитьПараметр("АналитикаРазвернутогоСальдо", АналитикаРазвернутогоСальдо);
Запрос.УстановитьПараметр("ОрганизацияРазвернутогоСальдо", ОрганизацияРазвернутогоСальдо);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Регистратор = Неопределено;
Набор = Неопределено;
УстановитьПривилегированныйРежим(Истина);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если Регистратор <> ВыборкаДетальныеЗаписи.Регистратор Тогда
Если Набор <> Неопределено Тогда
Набор.Записать();
КонецЕсли;
Регистратор = ВыборкаДетальныеЗаписи.Регистратор;
Набор = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Регистратор);
Набор.Прочитать();
Набор.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Набор.Удалить(ВыборкаДетальныеЗаписи.НомерСтроки - 1);
КонецЦикла;
Если Набор <> Неопределено ТОгда
Набор.Записать();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Функция ЗапросОрганизацииИсточники(МенеджерВременныхТаблиц, ГруппироватьОстаткиПоНомерамГТД, ТолькоПоСовпадающимНомерамГТД,
ТолькоПервыйИсточник, ВключаяСобственные)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ТекстЗапросаОтбораОстатков() +
ОбщегоНазначения.РазделительПакетаЗапросов() +
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(&ГраницаИсправления, ) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(&ГраницаИсправления, ) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| &ТекстИмяОтбораНомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ОтборПозиций
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|ГДЕ
| (ОстаткиНаКонецПериода.Организация, ОстаткиНаКонецПериода.ВидЗапасов) В
| (ВЫБРАТЬ
| ОтборЗапасов.Организация,
| ОтборЗапасов.ВидЗапасов
| ИЗ
| ОтборЗапасов)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| &ТекстИмяГруппировкиНомеровГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|ВЫБРАТЬ
| &ТолькоПервыйИсточник,
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| &ТекстИмяОтбораНомерГТД КАК НомерГТД,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК КоличествоОстаток
|ПОМЕСТИТЬ СгруппированныеОстаткиИсточников
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|ГДЕ
| (ОстаткиНаКонецПериода.Организация, ОстаткиНаКонецПериода.ВидЗапасов) В
| (ВЫБРАТЬ
| ОтборЗапасовИсточников.Организация,
| ОтборЗапасовИсточников.ВидЗапасов
| ИЗ
| ОтборЗапасовИсточников)
| И (ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры, &ТекстИмяОтбораНомерГТД) В
| (ВЫБРАТЬ
| ОтборПозиций.АналитикаУчетаНоменклатуры,
| &ТекстЗначениеОтбораНомерГТД
| ИЗ
| ОтборПозиций)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| &ТекстИмяГруппировкиНомеровГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) > 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СгруппированныеОстаткиИсточников.Организация КАК Организация,
| СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК Склад,
| ВидыЗапасовИсточников.ТипЗапасов КАК ТипЗапасов,
| СгруппированныеОстаткиИсточников.НомерГТД КАК НомерГТД
|ИЗ
| СгруппированныеОстаткиИсточников КАК СгруппированныеОстаткиИсточников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасовИсточников
| ПО СгруппированныеОстаткиИсточников.ВидЗапасов = ВидыЗапасовИсточников.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтборПозиций КАК ОтборПозиций
| ПО СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры = ОтборПозиций.АналитикаУчетаНоменклатуры
| И СгруппированныеОстаткиИсточников.НомерГТД = ОтборПозиций.НомерГТД
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ОтборПозиций.ВидЗапасов = ВидыЗапасов.Ссылка
| И ВЫБОР
| КОГДА ВидыЗапасов.ТипЗапасов В (&ТипыЗапасовВнешнийВладелец)
| ТОГДА ВидыЗапасов.ВладелецТовара
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ = ВЫБОР
| КОГДА ВидыЗапасовИсточников.ТипЗапасов В (&ТипыЗапасовВнешнийВладелец)
| ТОГДА ВидыЗапасовИсточников.ВладелецТовара
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| СгруппированныеОстаткиИсточников.Организация,
| ВидыЗапасовИсточников.ТипЗапасов
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасовИсточников
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасов
|;
|
|
|УНИЧТОЖИТЬ ОтборПозиций
|;
|
|
|УНИЧТОЖИТЬ СгруппированныеОстаткиИсточников";
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстИмяОтбораНомерГТД", ?(ТолькоПоСовпадающимНомерамГТД, "ОстаткиНаКонецПериода.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстЗначениеОтбораНомерГТД", ?(ТолькоПоСовпадающимНомерамГТД, "ОтборПозиций.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстИмяГруппировкиНомеровГТД", ?(ГруппироватьОстаткиПоНомерамГТД, "ОстаткиНаКонецПериода.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Если ТолькоПервыйИсточник Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТолькоПервыйИсточник,", "ПЕРВЫЕ 1");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТолькоПервыйИсточник,", "");
КонецЕсли;
Запрос.УстановитьПараметр("ВключаяСобственные", ВключаяСобственные);
Запрос.УстановитьПараметр("ТипыЗапасовВнешнийВладелец", Перечисления.ТипыЗапасов.ТипыЗапасовВнешнийВладелец());
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
Возврат Запрос;
КонецФункции
Функция ЗапросОрганизацииИсточникиБезТиповЗапасов(МенеджерВременныхТаблиц, ГруппироватьОстаткиПоНомерамГТД, ТолькоПоСовпадающимНомерамГТД,
ТолькоПервыйИсточник, ВключаяСобственные)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ТекстЗапросаОтбораОстатковБезТиповЗапасов() +
ОбщегоНазначения.РазделительПакетаЗапросов() +
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(&ГраницаИсправления,) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(&ГраницаИсправления,) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| &ТекстИмяОтбораНомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ОтборПозиций
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|ГДЕ
| (ОстаткиНаКонецПериода.Организация, ОстаткиНаКонецПериода.ВидЗапасов) В
| (ВЫБРАТЬ
| ОтборЗапасов.Организация,
| ОтборЗапасов.ВидЗапасов
| ИЗ
| ОтборЗапасов)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| &ТекстИмяГруппировкиНомеровГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|ВЫБРАТЬ
| &ТолькоПервыйИсточник,
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| &ТекстИмяОтбораНомерГТД КАК НомерГТД,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК КоличествоОстаток
|ПОМЕСТИТЬ СгруппированныеОстаткиИсточников
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|ГДЕ
| (ОстаткиНаКонецПериода.Организация, ОстаткиНаКонецПериода.ВидЗапасов) В
| (ВЫБРАТЬ
| ОтборЗапасовИсточников.Организация,
| ОтборЗапасовИсточников.ВидЗапасов
| ИЗ
| ОтборЗапасовИсточников)
| И (ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры, &ТекстИмяОтбораНомерГТД) В (
| ВЫБРАТЬ
| ОтборПозиций.АналитикаУчетаНоменклатуры,
| &ТекстЗначениеОтбораНомерГТД
| ИЗ
| ОтборПозиций)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| &ТекстИмяГруппировкиНомеровГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) > 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СгруппированныеОстаткиИсточников.Организация КАК Организация,
| СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК Склад,
| ВидыЗапасовИсточников.ТипЗапасов КАК ТипЗапасов,
| СгруппированныеОстаткиИсточников.НомерГТД КАК НомерГТД
|ИЗ
| СгруппированныеОстаткиИсточников КАК СгруппированныеОстаткиИсточников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасовИсточников
| ПО СгруппированныеОстаткиИсточников.ВидЗапасов = ВидыЗапасовИсточников.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтборПозиций КАК ОтборПозиций
| ПО СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры = ОтборПозиций.АналитикаУчетаНоменклатуры
| И СгруппированныеОстаткиИсточников.НомерГТД = ОтборПозиций.НомерГТД
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ОтборПозиций.ВидЗапасов = ВидыЗапасов.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| СгруппированныеОстаткиИсточников.Организация,
| ВидыЗапасовИсточников.ТипЗапасов
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасовИсточников
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасов
|;
|
|
|УНИЧТОЖИТЬ ОтборПозиций
|;
|
|
|УНИЧТОЖИТЬ СгруппированныеОстаткиИсточников";
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстИмяОтбораНомерГТД", ?(ТолькоПоСовпадающимНомерамГТД, "ОстаткиНаКонецПериода.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстЗначениеОтбораНомерГТД", ?(ТолькоПоСовпадающимНомерамГТД, "ОтборПозиций.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Запрос.Текст = СтрЗаменить(
Запрос.Текст, "&ТекстИмяГруппировкиНомеровГТД", ?(ГруппироватьОстаткиПоНомерамГТД, "ОстаткиНаКонецПериода.НомерГТД", "НЕОПРЕДЕЛЕНО"));
Если ТолькоПервыйИсточник Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТолькоПервыйИсточник,", "ПЕРВЫЕ 1");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТолькоПервыйИсточник,", "");
КонецЕсли;
Запрос.УстановитьПараметр("ВключаяСобственные", ВключаяСобственные);
Запрос.УстановитьПараметр("ТипыЗапасовВнешнийВладелец", Перечисления.ТипыЗапасов.ТипыЗапасовВнешнийВладелец());
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
Возврат Запрос;
КонецФункции
Функция ТекстЗапросаОтбораОстатков()
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаОрганизацийИсточников.ОрганизацияИсточник КАК Организация,
| ВидыЗапасовИсточников.Ссылка КАК ВидЗапасов
|ПОМЕСТИТЬ ОтборЗапасовИсточников
|ИЗ
| ТаблицаОрганизацийИсточников КАК ТаблицаОрганизацийИсточников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасовИсточников
| ПО ТаблицаОрганизацийИсточников.ТипЗапасовИсточника = ВидыЗапасовИсточников.ТипЗапасов
| И ТаблицаОрганизацийИсточников.ОрганизацияИсточник = ВидыЗапасовИсточников.Организация
|ГДЕ
| ТаблицаОрганизацийИсточников.ТипЗапасов = &ТипЗапасов
| И ТаблицаОрганизацийИсточников.Организация = &Организация
| И НЕ ВидыЗапасовИсточников.ОблагаетсяАкцизом
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &Организация КАК Организация,
| ВидыЗапасов.Ссылка КАК ВидЗапасов
|ИЗ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.Организация = &Организация
| И ВидыЗапасов.ТипЗапасов = &ТипЗапасов
| И &ВключаяСобственные
| И НЕ ВидыЗапасов.ОблагаетсяАкцизом
|;
|
|
|ВЫБРАТЬ
| &Организация КАК Организация,
| ВидыЗапасов.Ссылка КАК ВидЗапасов
|ПОМЕСТИТЬ ОтборЗапасов
|ИЗ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.Организация = &Организация
| И ВидыЗапасов.ТипЗапасов = &ТипЗапасов";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаОтбораОстатковБезТиповЗапасов()
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаОрганизацийИсточников.ОрганизацияИсточник КАК Организация,
| ВидыЗапасовИсточников.Ссылка КАК ВидЗапасов
|ПОМЕСТИТЬ ОтборЗапасовИсточников
|ИЗ
| ТаблицаОрганизацийИсточников КАК ТаблицаОрганизацийИсточников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасовИсточников
| ПО ТаблицаОрганизацийИсточников.ТипЗапасовИсточника = ВидыЗапасовИсточников.ТипЗапасов
| И ТаблицаОрганизацийИсточников.ОрганизацияИсточник = ВидыЗапасовИсточников.Организация
|ГДЕ
| ТаблицаОрганизацийИсточников.Организация = &Организация
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &Организация КАК Организация,
| ВидыЗапасов.Ссылка КАК ВидЗапасов
|ИЗ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.Организация = &Организация
| И &ВключаяСобственные
|;
|
|
|ВЫБРАТЬ
| &Организация КАК Организация,
| ВидыЗапасов.Ссылка КАК ВидЗапасов
|ПОМЕСТИТЬ ОтборЗапасов
|ИЗ
| Справочник.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.Организация = &Организация";
Возврат ТекстЗапроса;
КонецФункции
Функция ЗапросОрганизацииСОтрицательнымОстатком(МенеджерВременныхТаблиц, ЕстьНастройкаПередачи)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ГраницаИсправления,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
| И ТоварыОрганизацийВПути.ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ГраницаИсправления,
| ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов
|ПОМЕСТИТЬ ЗапасыСОтрицательнымОстатком
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗапасыСОтрицательнымОстатком.Организация КАК Организация,
| ВидыЗапасов.ТипЗапасов КАК ТипЗапасов,
| ВЫБОР
| КОГДА ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыПередачиТоваров.Продажа)
| КОГДА ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыПередачиТоваров.ПередачаНаКомиссию)
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК СпособПередачиТоваров
|ПОМЕСТИТЬ ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов
|ИЗ
| ЗапасыСОтрицательнымОстатком КАК ЗапасыСОтрицательнымОстатком
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ЗапасыСОтрицательнымОстатком.ВидЗапасов = ВидыЗапасов.Ссылка
|;
|
|
|ВЫБРАТЬ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация КАК Организация,
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.ТипЗапасов КАК ТипЗапасов,
| НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец КАК ОрганизацияИсточник,
| НастройкаПередачиТоваровМеждуОрганизациями.ТипЗапасов КАК ТипЗапасовИсточника
|ПОМЕСТИТЬ ТаблицаОрганизацийИсточников
|ИЗ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов КАК ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
| ПО ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация = НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец
| И ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.СпособПередачиТоваров = НастройкаПередачиТоваровМеждуОрганизациями.СпособПередачиТоваров
|ГДЕ
| &ЕстьНастройкаПередачи
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация,
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.ТипЗапасов,
| Организации.Ссылка,
| ТипыЗапасов.Ссылка
|ИЗ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов КАК ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация <> Организации.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Перечисление.ТипыЗапасов КАК ТипыЗапасов
| ПО (ТипыЗапасов.Ссылка В (ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар), ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.ТоварНаХраненииСПравомПродажи)))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
| ПО (НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец = Организации.Ссылка)
| И (НастройкаПередачиТоваровМеждуОрганизациями.ТипЗапасов = ТипыЗапасов.Ссылка)
| И (НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец = ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация)
| И (НастройкаПередачиТоваровМеждуОрганизациями.СпособПередачиТоваров = ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.СпособПередачиТоваров)
|ГДЕ
| НЕ &ЕстьНастройкаПередачи
| И НастройкаПередачиТоваровМеждуОрганизациями.СпособПередачиТоваров ЕСТЬ NULL
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.Организация КАК Организация,
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов.ТипЗапасов КАК ТипЗапасов
|ИЗ
| ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов КАК ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов
|
|УПОРЯДОЧИТЬ ПО
| Организация
|;
|
|
|УНИЧТОЖИТЬ ЗапасыСОтрицательнымОстатком
|;
|
|
|УНИЧТОЖИТЬ ОрганизацииСОтрицательнымОстаткомПоТипамЗапасов";
Запрос.УстановитьПараметр("ЕстьНастройкаПередачи", ЕстьНастройкаПередачи);
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
Возврат Запрос;
КонецФункции
Функция ЗапросКоличестваПроблемныхПозиций()
Запрос = ЗапросОтборовПроблемныхОстатков();
Запрос.Текст =
Запрос.Текст +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| КОЛИЧЕСТВО(ОтборПроблемныеОстатки.АналитикаУчетаНоменклатуры) КАК КоличествоПозиций
|ИЗ
| ОтборПроблемныеОстатки КАК ОтборПроблемныеОстатки
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(ОтборОтрицательныеОстатки.АналитикаУчетаНоменклатуры) КАК КоличествоПозиций
|ИЗ
| ОтборОтрицательныеОстатки КАК ОтборОтрицательныеОстатки
|;
|
|
|ВЫБРАТЬ
| 0 КАК КоличествоПозиций";
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"ВЫБРАТЬ
| 0 КАК КоличествоПозиций",
"ВЫБРАТЬ
| КОЛИЧЕСТВО(ОтборОтрицательныеОстаткиПрочее.АналитикаУчетаНоменклатуры) КАК КоличествоПозиций
|ИЗ
| ОтборОтрицательныеОстаткиПрочее КАК ОтборОтрицательныеОстаткиПрочее");
Возврат Запрос;
КонецФункции
Функция ЗапросОтборовПроблемныхОстатков()
Запрос = Обработки.ПомощникИсправленияОстатковТоваровОрганизаций.ЗапросДетальныеОстаткиНаКонецМесяцаИсправления(МесяцИсправления);
Запрос.Текст =
Запрос.Текст +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДетальныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ДетальныеОстатки.Организация КАК Организация
|ПОМЕСТИТЬ ОтборПроблемныеОстатки
|ИЗ
| ДетальныеОстаткиНаКонецМесяцаИсправления КАК ДетальныеОстатки
|
|СГРУППИРОВАТЬ ПО
| ДетальныеОстатки.АналитикаУчетаНоменклатуры,
| ДетальныеОстатки.Организация,
| ДетальныеОстатки.ВидЗапасов,
| ДетальныеОстатки.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ДетальныеОстатки.КоличествоОстаток) < 0
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| Организация
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДетальныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ЕСТЬNULL(ВидыЗапасов.ОблагаетсяАкцизом, ЛОЖЬ) КАК ОблагаетсяАкцизом,
| ДетальныеОстатки.Организация КАК Организация
|ПОМЕСТИТЬ ОтборОтрицательныеОстатки
|ИЗ
| ДетальныеОстаткиНаКонецМесяцаИсправления КАК ДетальныеОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ДетальныеОстатки.ВидЗапасов = ВидыЗапасов.Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДетальныеОстатки.АналитикаУчетаНоменклатуры,
| ДетальныеОстатки.Организация,
| ЕСТЬNULL(ВидыЗапасов.ОблагаетсяАкцизом, ЛОЖЬ),
| ВЫБОР
| КОГДА ВидыЗапасов.ТипЗапасов В (&ТипыЗапасовВнешнийВладелец)
| ТОГДА ВидыЗапасов.ВладелецТовара
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ
|
|ИМЕЮЩИЕ
| СУММА(ДетальныеОстатки.КоличествоОстаток) < 0
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| ОблагаетсяАкцизом,
| Организация";
Запрос.УстановитьПараметр("ТипыЗапасовВнешнийВладелец", Перечисления.ТипыЗапасов.ТипыЗапасовВнешнийВладелец());
Запрос.Текст =
Запрос.Текст +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДетальныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ДетальныеОстатки.Организация КАК Организация
|ПОМЕСТИТЬ ОтборОтрицательныеОстаткиПрочее
|ИЗ
| ДетальныеОстаткиНаКонецМесяцаИсправления КАК ДетальныеОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО ДетальныеОстатки.ВидЗапасов = ВидыЗапасов.Ссылка
|ГДЕ
| ВидыЗапасов.ТипЗапасов В (&ТипыЗапасовПрочее)
|
|СГРУППИРОВАТЬ ПО
| ДетальныеОстатки.АналитикаУчетаНоменклатуры,
| ДетальныеОстатки.Организация
|
|ИМЕЮЩИЕ
| СУММА(ДетальныеОстатки.КоличествоОстаток) < 0
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| Организация";
ТипыЗапасовПрочее = Новый Массив;
ТипыЗапасовПрочее.Добавить(Перечисления.ТипыЗапасов.ПродукцияПереработчика);
Запрос.УстановитьПараметр("ТипыЗапасовПрочее", ТипыЗапасовПрочее);
Возврат Запрос;
КонецФункции
Функция ЗапросИсточникиПокрытияРазвернутогоСальдо(МенеджерВременныхТаблиц)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ТекстЗапросаОтбораОстатков() +
ОбщегоНазначения.РазделительПакетаЗапросов() +
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыОрганизацийОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ГраницаИсправления,
| (Организация, ВидЗапасов) В (
| ВЫБРАТЬ
| ОтборЗапасов.Организация,
| ОтборЗапасов.ВидЗапасов
| ИЗ
| ОтборЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток,
| 0 КАК КоличествоПоРНПТОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
| И (ТоварыОрганизацийВПути.Организация, ТоварыОрганизацийВПути.ВидЗапасов) В (
| ВЫБРАТЬ
| ОтборЗапасов.Организация,
| ОтборЗапасов.ВидЗапасов
| ИЗ
| ОтборЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток,
| РезервыТоваровОрганизацийОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ГраницаИсправления,
| (Организация, ВидЗапасов) В (
| ВЫБРАТЬ
| ОтборЗапасов.Организация,
| ОтборЗапасов.ВидЗапасов
| ИЗ
| ОтборЗапасов)) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД КАК НомерГТД,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК КоличествоОстаток,
| СУММА(ОстаткиНаКонецПериода.КоличествоПоРНПТОстаток) КАК КоличествоПоРНПТОстаток
|ПОМЕСТИТЬ СгруппированныеОтрицательныеОстатки
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| ВидЗапасов
|;
|
|
|ВЫБРАТЬ
| СгруппированныеОтрицательныеОстатки.Организация КАК Организация,
| СгруппированныеОтрицательныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| СгруппированныеОтрицательныеОстатки.ВидЗапасов КАК ВидЗапасов,
| СгруппированныеОтрицательныеОстатки.НомерГТД КАК НомерГТД,
| СгруппированныеОтрицательныеОстатки.КоличествоОстаток КАК КоличествоОстаток,
| СгруппированныеОтрицательныеОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.Характеристика КАК Характеристика,
| КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия,
| КлючиАналитикиУчетаНоменклатуры.Назначение КАК Назначение,
| ВидыЗапасов.Договор КАК Договор,
| ВидыЗапасов.ВладелецТовара КАК ВладелецТовара
|ПОМЕСТИТЬ ОтрицательныеОстатки
|ИЗ
| СгруппированныеОтрицательныеОстатки КАК СгруппированныеОтрицательныеОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО СгруппированныеОтрицательныеОстатки.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО СгруппированныеОтрицательныеОстатки.ВидЗапасов = ВидыЗапасов.Ссылка
|;
|
|
|ВЫБРАТЬ
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД КАК НомерГТД,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК КоличествоОстаток,
| СУММА(ОстаткиНаКонецПериода.КоличествоПоРНПТОстаток) КАК КоличествоПоРНПТОстаток
|ПОМЕСТИТЬ СгруппированныеОстаткиИсточников
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|ГДЕ
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры В (
| ВЫБРАТЬ
| ОтрицательныеОстатки.АналитикаУчетаНоменклатуры
| ИЗ
| ОтрицательныеОстатки)
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры,
| ВидЗапасов
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода
|;
|
|
|ВЫБРАТЬ
| СгруппированныеОстаткиИсточников.Организация КАК Организация,
| СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| СгруппированныеОстаткиИсточников.ВидЗапасов КАК ВидЗапасов,
| СгруппированныеОстаткиИсточников.НомерГТД КАК НомерГТД,
| КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| КлючиАналитикиУчетаНоменклатуры.Характеристика КАК Характеристика,
| КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия,
| КлючиАналитикиУчетаНоменклатуры.Назначение КАК Назначение,
| ВидыЗапасов.Договор КАК Договор,
| ВидыЗапасов.ВладелецТовара КАК ВладелецТовара,
| ВидыЗапасов.ТипЗапасов КАК ТипЗапасов,
| СгруппированныеОстаткиИсточников.КоличествоОстаток КАК КоличествоОстаток,
| СгруппированныеОстаткиИсточников.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТОстаток
|ПОМЕСТИТЬ ОстаткиИсточников
|ИЗ
| СгруппированныеОстаткиИсточников КАК СгруппированныеОстаткиИсточников
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
| ПО СгруппированныеОстаткиИсточников.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасов
| ПО СгруппированныеОстаткиИсточников.ВидЗапасов = ВидыЗапасов.Ссылка
|;
|
|
|ВЫБРАТЬ
| &Организация КАК Организация,
| ОстаткиИсточников.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ВЫБОР
| КОГДА ОстаткиИсточников.Организация = &Организация
| ТОГДА ОстаткиИсточников.ВидЗапасов
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ВидЗапасов,
| ВЫБОР
| КОГДА ОстаткиИсточников.ТипЗапасов В (&ТипыЗапасовВнешнийВладелец)
| ТОГДА ОстаткиИсточников.ВладелецТовара
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Владелец,
| ОстаткиИсточников.НомерГТД КАК НомерГТД,
| ОстаткиИсточников.КоличествоОстаток КАК Количество,
| ОстаткиИсточников.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТ,
| ОстаткиИсточников.Организация <> &Организация КАК ТребуетсяРезерв
|ИЗ
| ОстаткиИсточников КАК ОстаткиИсточников
|
|УПОРЯДОЧИТЬ ПО
| ОстаткиИсточников.Организация = &Организация УБЫВ
|;
|
|
|ВЫБРАТЬ
| ОтрицательныеОстатки.Организация КАК Организация,
| ОтрицательныеОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОтрицательныеОстатки.ВидЗапасов КАК ВидЗапасов,
| ВЫБОР
| КОГДА &ТипЗапасов В (&ТипыЗапасовВнешнийВладелец)
| ТОГДА ОтрицательныеОстатки.ВладелецТовара
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Владелец,
| ОтрицательныеОстатки.НомерГТД КАК НомерГТД,
| ОтрицательныеОстатки.КоличествоОстаток КАК Количество,
| ОтрицательныеОстатки.КоличествоПоРНПТОстаток КАК КоличествоПоРНПТ
|ИЗ
| ОтрицательныеОстатки КАК ОтрицательныеОстатки
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасовИсточников
|;
|
|
|УНИЧТОЖИТЬ ОтборЗапасов
|;
|
|
|УНИЧТОЖИТЬ СгруппированныеОтрицательныеОстатки
|;
|
|
|УНИЧТОЖИТЬ ОтрицательныеОстатки
|;
|
|
|УНИЧТОЖИТЬ СгруппированныеОстаткиИсточников
|;
|
|
|УНИЧТОЖИТЬ ОстаткиИсточников";
Запрос.УстановитьПараметр("ТипыЗапасовВнешнийВладелец", Перечисления.ТипыЗапасов.ТипыЗапасовВнешнийВладелец());
Запрос.УстановитьПараметр("ВключаяСобственные", Истина);
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
Возврат Запрос;
КонецФункции
Функция ТипыЗачетаОстатковРазвернутогоСальдо()
Перем ТипЗачета, ТипыЗачетаОстатков;
ТипыЗачетаОстатков = Новый ТаблицаЗначений;
ТипыЗачетаОстатков.Колонки.Добавить("ИмяТипаЗачета");
ТипыЗачетаОстатков.Колонки.Добавить("НомерПакетаОстаткиКРаспределению");
ТипыЗачетаОстатков.Колонки.Добавить("НомерПакетаОтрицательныеОстатки");
ТипыЗачетаОстатков.Колонки.Добавить("ИмяРеквизитаКоличествоВТЧ");
ТипыЗачетаОстатков.Колонки.Добавить("СтруктураПоиска");
ТипЗачета = ТипыЗачетаОстатков.Добавить();
ТипЗачета.ИмяТипаЗачета = "ПоТоварамОрганизаций";
ТипЗачета.НомерПакетаОстаткиКРаспределению = 30;
ТипЗачета.НомерПакетаОтрицательныеОстатки = 31;
ТипЗачета.ИмяРеквизитаКоличествоВТЧ = "Количество";
ТипЗачета.СтруктураПоиска = "АналитикаУчетаНоменклатуры, Организация, Владелец";
Возврат ТипыЗачетаОстатков;
КонецФункции
Функция ЗапросОтрицательныйОстатокАналитикиРазвернутогоСальдо(МенеджерВременныхТаблиц)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
ЗапасыСервер.СторнироватьДвиженияТоварыОрганизацийВПути("&ПериодИсправления") +
ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТоварыОрганизацийОстатки.Организация КАК Организация,
| ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОстатки.НомерГТД КАК НомерГТД,
| ТоварыОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиНаКонецПериода
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(
| &ГраницаИсправления,
| Организация = &Организация
| И АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК ТоварыОрганизацийОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыОрганизацийВПути.Организация КАК Организация,
| ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыОрганизацийВПути.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийВПути.НомерГТД КАК НомерГТД,
| -ТоварыОрганизацийВПути.КоличествоСторно КАК КоличествоОстаток
|ИЗ
| ТоварыОрганизацийВПути КАК ТоварыОрганизацийВПути
|ГДЕ
| ТоварыОрганизацийВПути.Период <= &ПериодИсправления
| И ТоварыОрганизацийВПути.Организация = &Организация
| И ТоварыОрганизацийВПути.АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ТоварыОрганизацийВПути.ВидЗапасов В (
| ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РезервыТоваровОрганизацийОстатки.Организация КАК Организация,
| РезервыТоваровОрганизацийОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| РезервыТоваровОрганизацийОстатки.ВидЗапасов КАК ВидЗапасов,
| РезервыТоваровОрганизацийОстатки.НомерГТД КАК НомерГТД,
| РезервыТоваровОрганизацийОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РезервыТоваровОрганизаций.Остатки(
| &ГраницаИсправления,
| Организация = &Организация
| И АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
| И ВидЗапасов В
| (ВЫБРАТЬ
| ВТКонтролируемыеВидыЗапасов.Ссылка
| ИЗ
| ВТКонтролируемыеВидыЗапасов КАК ВТКонтролируемыеВидыЗапасов)) КАК РезервыТоваровОрганизацийОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Организация,
| АналитикаУчетаНоменклатуры,
| ВидЗапасов,
| НомерГТД
|;
|
|
|УНИЧТОЖИТЬ ТоварыОрганизацийВПути
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ОстаткиНаКонецПериода.Организация КАК Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов КАК ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД КАК НомерГТД,
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| ОстаткиНаКонецПериода КАК ОстаткиНаКонецПериода
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНаКонецПериода.Организация,
| ОстаткиНаКонецПериода.АналитикаУчетаНоменклатуры,
| ОстаткиНаКонецПериода.ВидЗапасов,
| ОстаткиНаКонецПериода.НомерГТД
|
|ИМЕЮЩИЕ
| СУММА(ОстаткиНаКонецПериода.КоличествоОстаток) < 0
|;
|
|
|УНИЧТОЖИТЬ ОстаткиНаКонецПериода";
Запрос.УстановитьПараметр("АналитикаУчетаНоменклатуры", АналитикаРазвернутогоСальдо);
Запрос.УстановитьПараметр("Организация", ОрганизацияРазвернутогоСальдо);
Запрос.УстановитьПараметр("ГраницаИсправления", Новый Граница(КонецМесяца(МесяцИсправления), ВидГраницы.Включая));
Запрос.УстановитьПараметр("ПериодИсправления", КонецМесяца(МесяцИсправления));
Возврат Запрос;
КонецФункции
#КонецОбласти
#КонецЕсли