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