///ТаблицаСостава имеет колонки
//НоменклатураСостава
//ХарактеристикаСостава
//Резерв
//Количество
//ЗаказПокупателя
//Склад
///ТаблицаСостава имеет колонки
//НоменклатураСостава
//ХарактеристикаСостава
//Резерв
//ЗаказПокупателя
//Склад
//распределено
как пройти все строки тч чтоб заполнить резерв в ТаблицаСостава (в таблице состав строки могут повторяться например
1 строка опора1 5 штук
2 строка опора1 10 штук
резерва всего 15 штук
сделал так но почему то кажется неправильно
ТаблицаСостава = ПроизводствоСервер.СоставСпецификаций(Продукция.Выгрузить(), Истина, , , Ложь);
#Вставка
ТаблицаСостава.Колонки.Добавить("Резерв", Новый ОписаниеТипов("Число"));
//ТзМатериалыСостав = ТаблицаСостава.Скопировать(,"НоменклатураСостава,ХарактеристикаСостава");
//ТзМатериалыСостав.Свернуть("НоменклатураСостава,ХарактеристикаСостава");
//
//ТзМатериалыПоЗаказам = ТаблицаСостава.Скопировать(,"НоменклатураСостава,ХарактеристикаСостава,ЗаказПокупателя");
//ТзМатериалыПоЗаказам.Свернуть("НоменклатураСостава,ХарактеристикаСостава,ЗаказПокупателя");
ТЗСвободныеОстаткиПоСкладам = ПолучитьСвободныеОстаткиПоСкладам(ТзМатериалыСостав, ЭтотОбъект, Истина);
ТЗРезервыПоЗааказам = ПолучитьРезервыПоЗааказам(ТзМатериалыПоЗаказам, ЭтотОбъект, Истина);
Для каждого СтрокаМатериала из ТаблицаСостава Цикл
Если Не ЗначениеЗаполнено(СтрокаМатериала.ЗаказПокупателя) Тогда
Продолжить;
КонецЕсли;
СтруктураПоиска = Новый Структура("НоменклатураСостава, ХарактеристикаСостава,ЗаказПокупателя");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаМатериала);
МассивСтрок = ТЗРезервыПоЗааказам.НайтиСтроки(СтруктураПоиска);
Если МассивСтрок.Количество() > 0 Тогда
СтрокаОстаткаРезерва = МассивСтрок[0];
ОстатокРезерваМатериала = СтрокаОстаткаРезерва.КоличествоРезервы - СтрокаОстаткаРезерва.Распределено;
Если ОстатокРезерваМатериала > 0 Тогда
СтрокаМатериала.Резерв = Мин(ОстатокРезерваМатериала, СтрокаМатериала.КоличествоСостава);
СтрокаОстаткаРезерва.Распределено = СтрокаОстаткаРезерва.Распределено + ОстатокРезерваМатериала;
КонецЕсли;
КонецЕсли;
КонецЦикла;
(3) Ну тогда покажите исходные данные, потом чего вы ожидали, и потом что получилось. Или нам в уме представлять ваши данные?
// Можете для начала сразу проверить - какой набор колонок вам возвращает ПроизводствоСервер.СоставСпецификаций() и какой набор колонок вы пытаетесь искать в Структура("НоменклатураСостава, ХарактеристикаСостава,ЗаказПокупателя")
первое почему неправильно это потому что я сделал отбор резерва остатка по одной строке это неправильно а как сделать чтоб по каждой распределял??
Если МассивСтрок.Количество() > 0 Тогда
СтрокаОстаткаРезерва = МассивСтрок[0];
ОстатокРезерваМатериала = СтрокаОстаткаРезерва.КоличествоРезервы - СтрокаОстаткаРезерва.Распределено;
Если ОстатокРезерваМатериала > 0 Тогда
в таблице состава
структруная единица не заполнена это правильно потому что в таблице состава просто получил я товар но еще его не распределил
что я сейчас и делаю распределяю сначала резервы
потом хочу распределить свободные остатки
и потом уже посмотреть чего не хватает и добавить аналогами
я сделал отбор резерва остатка по одной строке это неправильно а как сделать чтоб по каждой распределял??
Наверное надо просто перебирать эти строки и смотреть - можно по этой строке что-то еще просчитать, или уже переходить к следующей?
Т.е. не СтрокаОстаткаРезерва = МассивСтрок[0], а Для Каждого СтрокаОстаткаРезерва Из МассивСтрок...
(11)в любом случаи надо развиваться....и в итоге все равно будет результат)))
форум для меня место где могу получить какую либо подсказку, объяснение(кроме как тут спросить не у кого )
Не до конца понимаю задачу, поэтому есть несколько вопросов:
1) В ТаблицаСостава получится сгруппировать повторяющуюся номенклатуру или такое количество строк и должно остаться на выходе?
2) Если группировать нельзя, то заполнение должно быть пропорциональное или "сверху вниз" или одно значение для всей одинаковой номенклатуры?
(14) Если я все правильно понял, и в таблице ТаблицаСостава необходимо заполнять сразу всю одинаковую номенклатуру и в дальнейшем ее не трогать, то в таком случае можно создать, например, массив "ОбработаннаяНоменклатура", и при последующей итерации сверяться с ним. Например:
ОбработаннаяНоменклатура= Новый Массив;
Если ОбработаннаяНоменклатура.Найти(СтрокаМатериала.НоменклатураСостава) = Неопределено Тогда
//Код заполнения для всех дублей номенклатуры в таблице ТаблицаСостава
ОбработаннаяНоменклатура.Добавить(СтрокаМатериала.НоменклатураСостава);
КонецЕсли;
В таком случае номенклатура, которая уже была обработана ранее, не будет участвовать в обработке.