Имя: Пароль:
1C
1С v8
Структура изделия
0 renowka
 
15.07.11
15:46
Привет
Из внешней базы данных нужно получить структуру изделия и построить дерево в 1с.
Есть запрос, который умеет возвращать состав изделия. Использовав его в рекурсивной функции можно пройтись по структуре изделия.
А как теперь эту структуру вывести в деревозначений?

Пока делаю вот так. но если полуфабрикат входит в несколько других полуфабрикатов, то его состав будет задваиваться, так как используется Поиск уже записанного элемента.

Процедура ВыполнитьЗапрос(Номенклатура) Экспорт
         
   Состояние("Выполнение запроса на SQL сервере");
   
//Выборка - результат выполнения запроса во внешней бд
   
   Выборка.MoveFirst();    
   
   Пока Выборка.EOF() <> True Цикл
       
       Гп = Выборка.Fields("Izd").Value;        
       Ном = Выборка.Fields("Mat").Value;
               
       Если СтруктураИзделия.Строки.Найти(Гп,"Изделие", Истина) = Неопределено Тогда //Этот элемент добавили когда добавляли родителя
           
           НовСтр = СтруктураИзделия.Строки.Добавить();            
           НовСтр.Изделие = Гп;
           
       Иначе  
           СтрокаКуда = СтруктураИзделия.Строки.Найти(Гп, "Изделие", истина);
           Если СтрокаКуда <> Неопределено Тогда
               НовСтр = СтрокаКуда.Строки.Добавить();
               НовСтр.Изделие = Ном;
           КонецЕсли;
       КонецЕсли;
       
       Если Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Ном).ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000005") Тогда
           ВыполнитьЗапрос(Ном);
       КонецЕсли;    
           
           СтрокаКуда = СтруктураИзделия.Строки.Найти(Гп, "Изделие", истина);
       
       Выборка.MoveNext();
       
   КонецЦикла;
   
КонецПроцедуры
1 renowka
 
18.07.11
09:59
т.е у одноко полуфабрика состав будет задвоенный, а у второго такого-же - пустой
2 renowka
 
18.07.11
13:33
кто-нибудь работал с деревьями?
3 renowka
 
18.07.11
16:49
Готовая продукция
-материал1
-материал2
-Полуфабрикат1
---Полуфабрикат3
------материал3
-Полуфабрикат2
----Полуфабрикат3
------материал3

Если при обходе дерева пользоваться функцией строк Найти, то материал3 запишется дважды в Полуфабрикате3. Как этого можно избежать?
4 palpetrovich
 
18.07.11
17:05
выгрузи в ТЗ, ТЗ - в запрос, запрос - в дерево
зы: сегодня почти такая-же ветка была
5 palpetrovich
 
18.07.11
17:06
6 renowka
 
18.07.11
23:10
Даже если заполнить таблицу значений, материалы будут задваиваться
7 renowka
 
19.07.11
10:24
up
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший