Повторное проведение документа

1. sample_text 23.04.20 21:10 Сейчас в теме
Документ РасходнаяНакладная списывает товары по принципу ФИФО. Если проводить документ после его первого проведения, т.е. на складе было 15 товаров, при первом проведении списывается 10. Если не отменять проведение и провести его еще раз, выдает, что товара на складе не хватает, так как осталось 5 штук из 10 необходимых. Вроде как надо что-то исправить в запросе, связанное с датой проведения, но я не знаю как это сделать. Выгрузку прилагаю, заранее спасибо.



Процедура ОбработкаПроведения(Отказ, Режим)
	Движения.ОстаткиМатериалов.Записывать = Истина;
	Запрос = Новый Запрос("ВЫБРАТЬ
	|    ВЫБОР
	|  	       КОГДА МетодСписанияТоваров.МетодСписания = ЗНАЧЕНИЕ(Перечисление.ВидУчета.ФИФО)
	|            ТОГДА ""ВОЗР""
	|    КОНЕЦ КАК МетодСписания
	|ИЗ
	|    РегистрСведений.МетодСписанияТоваров.СрезПоследних(&Период, ) КАК МетодСписанияТоваров");
	Запрос.УстановитьПараметр("Период",   Дата);
	
	Результат   = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Отказ   = Истина;
		Сообщить("Не указан метод списания в учетной политике!!!");
		
		Возврат;
	КонецЕсли;
	
	Выборка  = Результат.Выбрать();
	Выборка.Следующий();
	МетодСписания   = Выборка.МетодСписания;
	
	МенеджерВТ = Новый МенеджерВременныхТаблиц;
	ЗапросВТ = Новый Запрос;
	ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВТ;
	ЗапросВТ.Текст = "ВЫБРАТЬ
	|	РасходнаяНакладнаяМатериалы.Ссылка.Дата КАК Период,
	|	РасходнаяНакладнаяМатериалы.Материал КАК Материал,
	|	СУММА(РасходнаяНакладнаяМатериалы.Количество) КАК Количество
	|ПОМЕСТИТЬ Товары
	|ИЗ
	|	Документ.РасходнаяНакладная.Материалы КАК РасходнаяНакладнаяМатериалы
	|ГДЕ
	|	РасходнаяНакладнаяМатериалы.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	РасходнаяНакладнаяМатериалы.Ссылка.Дата,
	|	РасходнаяНакладнаяМатериалы.Материал";
	ЗапросВТ.УстановитьПараметр("Ссылка", Ссылка);
	РезультатЗапроса = ЗапросВТ.Выполнить(); 
	Запрос2 = Новый Запрос;
	Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
	Запрос2.Текст = "ВЫБРАТЬ
	|	Товары.Материал КАК Материал,
	|	Товары.Количество КАК Количество,
	|	Товары.Период КАК Период,
	|	ОстаткиМатериаловОстатки.Партия КАК Партия,
	|	ОстаткиМатериаловОстатки.КоличествоОстаток КАК Остаток,
	|	ОстаткиМатериаловОстатки.СтоимостьОстаток КАК Стоимость,
	|	ОстаткиМатериаловОстатки.Партия.Дата КАК ДатаПартии
	|ИЗ
	|	Товары КАК Товары
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
	|				,
	|				Материал В
	|					(ВЫБРАТЬ
	|						ВТ.Материал
	|					ИЗ
	|						Товары КАК ВТ)) КАК ОстаткиМатериаловОстатки
	|		ПО Товары.Материал = ОстаткиМатериаловОстатки.Материал
	|ИТОГИ
	|	МАКСИМУМ(Количество),
	|	СУММА(Остаток)
	|ПО
	|	Материал";
	Движения.ОстаткиМатериалов.Записывать = Истина;
	
	Выборка = Запрос2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Выборка.Следующий() Цикл
		Если Выборка.Количество > Выборка.Остаток Тогда
			Отказ   = Истина;
			Сообщить("Остатка для товара """ + Выборка.Материал + """ не хватает." +
			" Требуется: " + Выборка.Количество +
			" Остаток: " + Выборка.Остаток);
			Продолжить;
		КонецЕсли;
		
		КРаспределениюПоПартиям = Выборка.Количество;
		
		Обход = Выборка.Выбрать();
		
		Пока Обход.Следующий() И НЕ КРаспределениюПоПартиям = 0 Цикл
			Запись  = Движения.ОстаткиМатериалов.Добавить();
			
			ЗаполнитьЗначенияСвойств(Запись, Обход);
			Запись.ВидДвижения  = ВидДвиженияНакопления.Расход;
			
			Если КРаспределениюПоПартиям >= Обход.Остаток Тогда
				Запись.Количество = Обход.Остаток;
				Запись.Стоимость  = Обход.Стоимость;
				
				КРаспределениюПоПартиям = КРаспределениюПоПартиям - Обход.Остаток;
			Иначе
				Запись.Количество = КРаспределениюПоПартиям;
				Запись.Стоимость  = Обход.Стоимость / Обход.Остаток * КРаспределениюПоПартиям;
				
				КРаспределениюПоПартиям = 0;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
Задание2.0.dt
По теме из базы знаний
Найденные решения
3. soft_wind 23.04.20 22:10 Сейчас в теме
(1) автоматическое удаление движений документа включите!
Конфигуратор --- конструктор документа ---- Закладка: Движения --- Удаление движений: Удалять автоматически
Drivingblind; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. soft_wind 23.04.20 22:10 Сейчас в теме
(1) автоматическое удаление движений документа включите!
Конфигуратор --- конструктор документа ---- Закладка: Движения --- Удаление движений: Удалять автоматически
Drivingblind; +1 Ответить
4. sample_text 23.04.20 23:17 Сейчас в теме
(3) Спасибо, все заработало.
2. nissti 6 23.04.20 21:25 Сейчас в теме
У вас в регистре накопления остатки нету отбора до момента имеющегося документа, у вас все там. Ясное дело, попадут и движения уже проведенного документа туда
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот