Как пройти цикл чтоб распределить весь резерв по всем колонкам

1. Raideres 8 17.08.21 21:34 Сейчас в теме
///ТаблицаСостава имеет колонки
//НоменклатураСостава
//ХарактеристикаСостава
//Резерв
//Количество
//ЗаказПокупателя
//Склад


///ТаблицаСостава имеет колонки
//НоменклатураСостава
//ХарактеристикаСостава
//Резерв
//ЗаказПокупателя
//Склад
//распределено



как пройти все строки тч чтоб заполнить резерв в ТаблицаСостава (в таблице состав строки могут повторяться например
1 строка опора1 5 штук
2 строка опора1 10 штук
резерва всего 15 штук

сделал так но почему то кажется неправильно
ТаблицаСостава = ПроизводствоСервер.СоставСпецификаций(Продукция.Выгрузить(), Истина, , , Ложь);

	
	#Вставка 
	ТаблицаСостава.Колонки.Добавить("Резерв", Новый ОписаниеТипов("Число"));	
	
	
	//ТзМатериалыСостав = ТаблицаСостава.Скопировать(,"НоменклатураСостава,ХарактеристикаСостава");
	//ТзМатериалыСостав.Свернуть("НоменклатураСостава,ХарактеристикаСостава"); 
	//
	//ТзМатериалыПоЗаказам = ТаблицаСостава.Скопировать(,"НоменклатураСостава,ХарактеристикаСостава,ЗаказПокупателя");
	//ТзМатериалыПоЗаказам.Свернуть("НоменклатураСостава,ХарактеристикаСостава,ЗаказПокупателя");
	
    ТЗСвободныеОстаткиПоСкладам =  ПолучитьСвободныеОстаткиПоСкладам(ТзМатериалыСостав, ЭтотОбъект, Истина);
	ТЗРезервыПоЗааказам	        =  ПолучитьРезервыПоЗааказам(ТзМатериалыПоЗаказам, ЭтотОбъект, Истина);  
	
	
	
	
	Для каждого СтрокаМатериала из ТаблицаСостава Цикл
		
		Если Не ЗначениеЗаполнено(СтрокаМатериала.ЗаказПокупателя) Тогда
			Продолжить;
		КонецЕсли; 
		
		СтруктураПоиска = Новый Структура("НоменклатураСостава, ХарактеристикаСостава,ЗаказПокупателя");
		ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаМатериала);	
		МассивСтрок = ТЗРезервыПоЗааказам.НайтиСтроки(СтруктураПоиска);
		
		Если МассивСтрок.Количество() > 0 Тогда
			СтрокаОстаткаРезерва = МассивСтрок[0];
			ОстатокРезерваМатериала = СтрокаОстаткаРезерва.КоличествоРезервы - СтрокаОстаткаРезерва.Распределено;
			Если ОстатокРезерваМатериала > 0 Тогда
				
				СтрокаМатериала.Резерв = Мин(ОстатокРезерваМатериала, СтрокаМатериала.КоличествоСостава);	
				СтрокаОстаткаРезерва.Распределено = СтрокаОстаткаРезерва.Распределено + ОстатокРезерваМатериала;	
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 17.08.21 21:40 Сейчас в теме
(1)
сделал так но почему то кажется неправильно
Давайте определимся - "кажется, что неправильно", или "неправильно"?
3. Raideres 8 17.08.21 21:48 Сейчас в теме
4. FatPanzer 17.08.21 21:53 Сейчас в теме
(3) Ну тогда покажите исходные данные, потом чего вы ожидали, и потом что получилось. Или нам в уме представлять ваши данные?

// Можете для начала сразу проверить - какой набор колонок вам возвращает ПроизводствоСервер.СоставСпецификаций() и какой набор колонок вы пытаетесь искать в Структура("НоменклатураСостава, ХарактеристикаСостава,ЗаказПокупателя")
5. Raideres 8 17.08.21 22:12 Сейчас в теме
первое почему неправильно это потому что я сделал отбор резерва остатка по одной строке это неправильно а как сделать чтоб по каждой распределял??

Если МассивСтрок.Количество() > 0 Тогда
СтрокаОстаткаРезерва = МассивСтрок[0];
ОстатокРезерваМатериала = СтрокаОстаткаРезерва.КоличествоРезервы - СтрокаОстаткаРезерва.Распределено;
Если ОстатокРезерваМатериала > 0 Тогда

СтрокаМатериала.Резерв = Мин(ОстатокРезерваМатериала, СтрокаМатериала.КоличествоСостава);
СтрокаОстаткаРезерва.Распределено = СтрокаОстаткаРезерва.Распределено + ОстатокРезерваМатериала;
КонецЕсли;
КонецЕсли;


в таблице состава
структруная единица не заполнена это правильно потому что в таблице состава просто получил я товар но еще его не распределил
что я сейчас и делаю распределяю сначала резервы
потом хочу распределить свободные остатки
и потом уже посмотреть чего не хватает и добавить аналогами
Прикрепленные файлы:
6. FatPanzer 17.08.21 22:15 Сейчас в теме
(5)
я сделал отбор резерва остатка по одной строке это неправильно а как сделать чтоб по каждой распределял??

Наверное надо просто перебирать эти строки и смотреть - можно по этой строке что-то еще просчитать, или уже переходить к следующей?
Т.е. не СтрокаОстаткаРезерва = МассивСтрок[0], а Для Каждого СтрокаОстаткаРезерва Из МассивСтрок...
10. Raideres 8 18.08.21 09:13 Сейчас в теме
(6)
Т.е. не СтрокаОстаткаРезерва = МассивСтрок[0], а Для Каждого СтрокаОстаткаРезерва Из МассивСтрок...


ну это я понимаю а как сделать что все по этой позиции больше не проходить если подобрал а так получается он у меня все строки пройдет
11. user856012 14 18.08.21 09:18 Сейчас в теме
(5)
я сейчас и делаю распределяю сначала резервы
потом хочу распределить свободные остатки
и потом уже посмотреть чего не хватает и добавить аналогами
"Сложность программы растет до тех пор, пока не превысит способности программиста" - тот самый случай.
12. Raideres 8 18.08.21 09:45 Сейчас в теме
(11)в любом случаи надо развиваться....и в итоге все равно будет результат)))
форум для меня место где могу получить какую либо подсказку, объяснение(кроме как тут спросить не у кого )
7. Raideres 8 17.08.21 22:15 Сейчас в теме
таблица состава полностью
Прикрепленные файлы:
8. FatPanzer 17.08.21 22:39 Сейчас в теме
(7) Мне особенно нравится колонка со значениями "Заказ покупа...", которая в вашем случае является ключом отбора.
9. Raideres 8 17.08.21 23:24 Сейчас в теме
(8)извените не заметил что скрыта, там в данном примере один заказ как и в тз резервы
13. hillia 18.08.21 11:34 Сейчас в теме
Не до конца понимаю задачу, поэтому есть несколько вопросов:
1) В ТаблицаСостава получится сгруппировать повторяющуюся номенклатуру или такое количество строк и должно остаться на выходе?
2) Если группировать нельзя, то заполнение должно быть пропорциональное или "сверху вниз" или одно значение для всей одинаковой номенклатуры?
14. Raideres 8 18.08.21 13:23 Сейчас в теме
(13)
сгруппировать повторяющуюся номенклатуру или такое количество строк и должно остаться на выходе?


свернуть нельзя т.к там связь идет с продукцией
увеличить путем копирования строки и уменьшения количества можно


заполнение сверху вниз


пытаюсь изобрести в унф замену материала из спецификации на аналоги
сейчас вот я пытаюсь добавить резервы по материалу(не по аналогу)

тип
https://www.youtube.com/watch?v=tSHoW44Lwgk автозамена
15. hillia 18.08.21 14:34 Сейчас в теме
(14) Если я все правильно понял, и в таблице ТаблицаСостава необходимо заполнять сразу всю одинаковую номенклатуру и в дальнейшем ее не трогать, то в таком случае можно создать, например, массив "ОбработаннаяНоменклатура", и при последующей итерации сверяться с ним. Например:
ОбработаннаяНоменклатура= Новый Массив;
Если ОбработаннаяНоменклатура.Найти(СтрокаМатериала.НоменклатураСостава) = Неопределено Тогда
  //Код заполнения для всех дублей номенклатуры в таблице ТаблицаСостава

  ОбработаннаяНоменклатура.Добавить(СтрокаМатериала.НоменклатураСостава);
КонецЕсли;


В таком случае номенклатура, которая уже была обработана ранее, не будет участвовать в обработке.
Оставьте свое сообщение

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