Убавить количество в строке тч и добавить строку

1. Raideres 8 08.07.21 19:30 Сейчас в теме
Добрый вечер делаю небольшую доработку в тч документ СборкаЗапасов
А точнее добавляю замену аналогами материалов
вроде бы все данные получил

получил сколько нужно списать основного материала
сколько есть в свободном остатке
сколько есть в резерве

Получил сколько есть аналогов и остатков по ним

а вот теперь как убавить я чет тормознул
например
нужно списать 10 штук из них уже 2 в резерве и 1 в свободном остатке
Аналога 1 есть 3 штуки свободного
Аналога 2 есть 4 штуки свободного

нужно чтоб основной в тч убавился
1.строка основной 3 шт резерв 2
2.строка аналог 1 3 шт резерв 0
2.строка аналог 2 4 шт резерв 0

задача вроде простая но что то у меня не то выходит




&НаСервере

	Организация = Константы.УчетПоКомпании.Компания(Объект.Организация);
	
	Для каждого СтрокаТабличнойЧасти Из Объект.Запасы Цикл
			
		////1. Проверить хватает или нет + не забыть резерв если хватает продолжить и добавить резерв
		  СтруктураОстатков = СвободныйОстатокПоСтруктурнойЕдинице(СтрокаТабличнойЧасти.СтруктурнаяЕдиница, СтрокаТабличнойЧасти.Номенклатура
										, СтрокаТабличнойЧасти.Характеристика, СтрокаТабличнойЧасти.Партия, СтрокаТабличнойЧасти.ЕдиницаИзмерения);
		
								
		ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
		ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
		
		//СтрокаТабличнойЧасти.Резерв
		//СтруктураОстатков.КоличествоРезерв
		//СтруктураОстатков.КоличествоСвободно
		 Если ТребуетсяСписать> ОстатокПоФакту Тогда

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

//ТЕПЕРЬ ВОТ ТУТ Я ПОТЕРЯЛСЯ МНЕ НУЖНО УБАВИТЬ ОСТАТКИ ПО ОСНОВНОМУ МАТЕРИАЛУ И ЕСЛИ ЕСТЬ РЕЗЕРВ ДОБАВИТЬ
////ОСТАТКИ ПО ОСНОВНОМУ МАТЕРИАЛУ		
////СтруктураОстатков.КоличествоРезерв +////СтруктураОстатков.КоличествоСвободно
               
 //РЕЗЕР ОСНОВНОГО В СтрокаТабличнойЧасти.Резерв=СтруктураОстатков.КоличествоРезерв;
//И ПОТОМ ДОБАВИТЬ ОСТАТКИ ПО АНАЛОГАМ


			//ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
			//ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
			//
			////СтрокаТабличнойЧасти.Резерв
			////СтруктураОстатков.КоличествоРезерв
			//СтруктураОстатков.КоличествоСвободно

			
						НоваяСтрока=Объект.Запасы.Вставить(СтрокаТабличнойЧасти.индекс);
			
			 ////3. Добавить аналоги  и уменьшить количество в документе но перед этим проверим сколько есть для списания основного материала
		КонецЦикла;
				
		
		 	
		Иначе  //количества хватает но надо заполнить резерв
		 СтрокаТабличнойЧасти.Резерв=СтруктураОстатков.КоличествоРезерв;
		КонецЕсли; 
		
	КонецЦикла;
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Raideres 8 08.07.21 19:50 Сейчас в теме
Как то так что ли
	////3. Добавить аналоги  и уменьшить количество в документе но перед этим проверим сколько есть для списания основного материала
		Нехватает = ТребуетсяСписать-(СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв);
		СтрокаТабличнойЧасти.Количество = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
		СтрокаТабличнойЧасти.Резерв     = СтруктураОстатков.КоличествоРезерв;
		Пока Выборка.Следующий()и  Нехватает >0 Цикл
			
			Списываем = Мин(Выборка.Количество, Нехватает);
			НоваяСтрока=Объект.Запасы.Вставить(СтрокаТабличнойЧасти.НомерСтроки);
			ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка);
			НоваяСтрока.Количество = Списываем;
			
			Нехватает = Нехватает - Списываем;
			 
			 
			//ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
			//ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
			//
			////СтрокаТабличнойЧасти.Резерв
			////СтруктураОстатков.КоличествоРезерв
			//СтруктураОстатков.КоличествоСвободно

			
									
			 
		КонецЦикла
Показать
Оставьте свое сообщение

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