Корректировка минусов в регистре партии товаров на складах для УТ 10.3

Опубликовал dik2011 Г (dik2011) в раздел Обработки - Обработка документов

Вычетает из положительных партий регистра партии товаров на складах отрицательные партии. Минуса смотрятся только по количеству, сумму на отрицательность не проверяет.

Понадобилось убить отрицательные партионные остатки в УТ. Была написана данная обработка.
Обработка формирует запрос по партионным остаткам, смотрит минусовые партии и вычетает эти минуса из нормальных партий по регистру партии товаров на складах. Итоговый документ - корректировка регистров. Не меняет стоимость и количество номенклатуры по партиям. У номенклатуры не учитываются серии и характеристики - надо дописать.
Просьба не ругать по поводу кода - в 8 еще не ас, делал чтоб только работало.
Если много партий с минусовыми остатками - придется запускать обработку несколько раз, т.к. за один проход накопленные отрицательные партии вычетаются только из одной положительной партии. У себя делал 30 проходов.
Если есть партии без количества с отрицательной суммой - ее оставляет как есть.
Наверное не все понятно, но кому надо истребить минусовые партии, чтоб себестоимость и количественный остаток не пострадали, тот разберется.
Вроде все.

Скачать файлы

Наименование Файл Версия Размер
Обработка
.epf 7,35Kb
26.01.14
39
.epf 0 7,35Kb 39 Скачать

См. также

Комментарии
1. Антон Собейко (sobeyko2008) 6 01.02.14 08:58 Сейчас в теме
Заполняю дату, нажимаю выполнить... ни чего не происходит
2. Андрей Николаев (Andruykha) 145 06.02.17 19:34 Сейчас в теме
По коду вижу, обработка подойдет для базы с одним складом. Придется переделать:
1 .Добавляем в запрос сортировку по складу и характеристике:
Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
	                      |	ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
	                      |	ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК ДокументОприходования,
	                      |	ПартииТоваровНаСкладахОстатки.СтатусПартии КАК СтатусПартии,
	                      |	ПартииТоваровНаСкладахОстатки.Качество КАК Качество,
	                      |	ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
	                      |	ПартииТоваровНаСкладахОстатки.СтоимостьОстаток
	                      |ИЗ
	                      |	РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	Склад,
	                      |	Номенклатура,
	                      |	ХарактеристикаНоменклатуры,
	                      |	СтатусПартии,
	                      |	Качество,
	                      |	ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
	                      |	ДокументОприходования");
...Показать Скрыть

2. И переделаем немного код:
Пока Выборка.Следующий() Цикл
		Если Выборка.КоличествоОстаток <0 Тогда    // вот минусовая партия
			КолМинус = КолМинус-Выборка.КоличествоОстаток;
			СуммМинус = СуммМинус-Выборка.СтоимостьОстаток;
			Движение = Дв.Добавить();
			Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
			Движение.Период = Док.Дата;
			Движение.Номенклатура = Выборка.Номенклатура;
			Движение.Склад = Выборка.Склад     ;
			Движение.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры      ;
		//	Движение.СерияНоменклатуры = Выборка.СерияНоменклатуры    ;
			Движение.ДокументОприходования = Выборка.ДокументОприходования   ;
			Движение.СтатусПартии = Выборка.СтатусПартии  ;
		//	Движение.Заказ = Выборка.Заказ  ;
			Движение.Качество = Выборка.Качество ;
			Движение.Количество = -Выборка.КоличествоОстаток;
			Движение.Стоимость = -Выборка.СтоимостьОстаток;
			//КолМинус = 0;
			//СуммМинус = 0;
			ТекНом =  Выборка.Номенклатура ;
			ТекСклад =  Выборка.Склад ;
			ТекХарак =  Выборка.ХарактеристикаНоменклатуры ;

		Иначе
			Если ТекНом = Выборка.Номенклатура и ТекСклад =  Выборка.Склад и ТекХарак =  Выборка.ХарактеристикаНоменклатуры  Тогда
				//Поменялась номенклатура, сохраним старую последнюю с накопленными минусами
				//если не получилось ети минуса убрать
				Если КолМинус >= Выборка.КоличествоОстаток Тогда
					Движение = Дв.Добавить();
					Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
					Движение.Период = Док.Дата;
					Движение.Номенклатура = Выборка.Номенклатура;
					Движение.Склад = Выборка.Склад     ;
					Движение.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры      ;
					//	Движение.СерияНоменклатуры = Выборка.СерияНоменклатуры    ;
					Движение.ДокументОприходования = Выборка.ДокументОприходования   ;
					Движение.СтатусПартии = Выборка.СтатусПартии  ;
					//	Движение.Заказ = Выборка.Заказ  ;
					Движение.Качество = Выборка.Качество ;
					
					Движение.Количество = Выборка.КоличествоОстаток;
					Движение.Стоимость = Выборка.СтоимостьОстаток;
					КолМинус=КолМинус- Выборка.КоличествоОстаток;
					СуммМинус=СуммМинус- Выборка.СтоимостьОстаток;
				Иначе
					Движение = Дв.Добавить();
					Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
					Движение.Период = Док.Дата;
					Движение.Номенклатура = Выборка.Номенклатура;
					Движение.Склад = Выборка.Склад     ;
					Движение.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры      ;
					//	Движение.СерияНоменклатуры = Выборка.СерияНоменклатуры    ;
					Движение.ДокументОприходования = Выборка.ДокументОприходования   ;
					Движение.СтатусПартии = Выборка.СтатусПартии  ;
					//	Движение.Заказ = Выборка.Заказ  ;
					Движение.Качество = Выборка.Качество ;
					
					Движение.Количество = КолМинус;
					Движение.Стоимость = СуммМинус;
					КолМинус=0;
					СуммМинус = 0;
				КонецЕсли;
			Иначе
				ТекНом =  Выборка.Номенклатура ;
				ТекСклад =  Выборка.Склад ;
				ТекХарак =  Выборка.ХарактеристикаНоменклатуры ;

				Если КолМинус<>0 Тогда
					Сообщить("Остался минус по: "+Строка(Выборка.Номенклатура));
				КонецЕсли;
				КолМинус = 0;
				СуммМинус = 0;
			КонецЕсли;	
		КонецЕсли;	 	
	КонецЦикла;
...Показать Скрыть