Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с Деревом в обработке: группирует данные, а не нужно
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Constantus
Приветствую, форумчане!

1с 8.3, полностью самописная, уф.

Досталось в наследство: имеется обработка, в ней дерево. Одним из реквизитов является булево, если он отмечен, то обработка обходит всё дерево, далее отмеченные строки формирует нечто и создает документ с этими данными.

Всё работает, но, если в дереве имеются отмеченные строки с абсолютно одинаковыми реквизитами, то код типа их группирует и в создаваемый документ шлет одну строку.
Например:

1. Что-то 23/4 "дада" 5 шт
2. Что-то 23/4 "дада" 5 шт

В документ кидает "Что-то 23/4 "дада" 5 шт", а нужно все 2-е штуки позиций.

Никак не могу разобраться в коде, где этот код группирует одинаковые по реквизитам данные...

необходимо зарегистрироваться для просмотра ссылки
    массНоменклатур = Новый Массив;
    ссылкаПрЗадание = Неопределено;
    ПрЗадание = Неопределено;
    
    Для шаг = 0 по 1 Цикл
        Для каждого тСтрокаЗаказа из ДеревоПроизводственныхЛистов.ПолучитьЭлементы() Цикл
            Если НЕ ЗначениеЗаполнено( тСтрокаЗаказа.ЗаказНоменклатура ) Тогда
                Продолжить;
                
            КонецЕсли;    
            
            массНоменклатур.Очистить();
            
            Для каждого тСтрокаНоменклатуры из тСтрокаЗаказа.ПолучитьЭлементы() Цикл
                Если тСтрокаНоменклатуры.Произвести И
                    НЕ ЗначениеЗаполнено( тСтрокаНоменклатуры.ПроизводственноеЗадание )
                    И ЗначениеЗаполнено( тСтрокаНоменклатуры.ЗаказНоменклатура )
                    И ТипЗнч( тСтрокаНоменклатуры.ЗаказНоменклатура ) = Тип("СправочникСсылка.Номенклатура") Тогда
                    
                    Если шаг = 0 И массНоменклатур.Найти( тСтрокаНоменклатуры.ЗаказНоменклатура ) = Неопределено Тогда
                        массНоменклатур.Добавить( тСтрокаНоменклатуры.ЗаказНоменклатура );
                        
                        Если ПрЗадание = Неопределено Тогда
                            ПрЗадание = Документы.ПроизводственноеЗадание.СоздатьДокумент();
                            ПрЗадание.Дата = ТекущаяДата();
                            
                        КонецЕсли;
                    
                        НовСтр = ПрЗадание.ОсновнаяКомплектация.Добавить();
                        ЗаполнитьЗначенияСвойств( НовСтр, тСтрокаНоменклатуры );
                            
                        НовСтр.Заказ         = тСтрокаЗаказа.ЗаказНоменклатура;
                        НовСтр.Номенклатура = тСтрокаНоменклатуры.ЗаказНоменклатура;
                        
                        НовСтр.ПроизводственныйЛист = тСтрокаЗаказа.ПроизводственныйЛистМодель;
                        НовСтр.Модель         = тСтрокаНоменклатуры.ПроизводственныйЛистМодель;
                            
                    ИначеЕсли шаг = 1 Тогда
                        тСтрокаНоменклатуры.ПроизводственноеЗадание = ссылкаПрЗадание;
                        
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            
        КонецЦикла;
        
        Если НЕ ПрЗадание = Неопределено Тогда
            ПрЗадание.Записать();
            ссылкаПрЗадание = ПрЗадание.Ссылка;
            
        КонецЕсли;
    КонецЦикла;


ЗаполнитьЗначенияСвойств( НовСтр, тСтрокаНоменклатуры ) - грешу на это, точнее на "тСтрокаНоменклатуры"

тСтрокаНоменклатуры из тСтрокаЗаказа.ПолучитьЭлементы() - такое ощущение, что ПолучитьЭлементы группирует сразу.

Помогите разобраться с этой группировкой!


 ! 

необходимо зарегистрироваться для просмотра ссылки: 9
 
Bernet
Constantus @ Сегодня, 13:11 необходимо зарегистрироваться для просмотра ссылки ,
скорее всего в этих строчках проблема, судя по всему на основании этого массива дальше товары добаляются, а тут проверка если товар уже есть в массиве - то его не добавляем
Если шаг = 0 И массНоменклатур.Найти( тСтрокаНоменклатуры.ЗаказНоменклатура ) = Неопределено Тогда
массНоменклатур.Добавить( тСтрокаНоменклатуры.ЗаказНоменклатура );
volodya1122
Constantus @ Сегодня, 13:11 необходимо зарегистрироваться для просмотра ссылки ,

Вот тут Вы проверяете есть ли в массиве уже такая номенклатура
Если шаг = 0 И массНоменклатур.Найти( тСтрокаНоменклатуры.ЗаказНоменклатура ) = Неопределено Тогда

попробуйте проверять по ссылке
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.