Имя: Пароль:
1C
1С v8
Сформировать правильный алгоритм расчета
0 IT_PROGRAMMIST
 
08.02.12
11:23
Добрый день. УПП 1.3.14.3, пл.8.2.14.540.
Помогите решить такую задачу:
есть регистр Выпуск продукции(бух учет.), мне нужно провести анализ номенклатуры в этом регистре по следующему алгоритму:
1)Пришла номенклатура1 , ищем для неё спецификацию в регистре выпуск продукции.
2) Нашли спецификацию взяли из неё (исходные комплектующие) номенклатуру с определенным заполненным реквизитом(их может быть 5...).
3)После этого каждую номенклатуру из 2 делаем как в 1, а потом 2.

Цикл продолжается до тех пор, пока  найдём ,что нет номенклатуры в пункте 2, с нашим условием

Т.е получается такое дерово для расчета:

Номенклатура1
   Номенклатура2(из спецификации Номенклатуры1)
            Номенклатура2_1(из спецификации Номенклатуры2)
            Номенклатура2_2(из спецификации Номенклатуры2)
  Номенклатура3(из спецификации)
            Номенклатура3_1(из спецификации Номенклатуры3)
            Номенклатура3_2(из спецификации Номенклатуры3)
  НоменклатураN(из спецификации)
            НоменклатураN(из спецификации НоменклатураN)
            НоменклатураN(из спецификации НоменклатураN)
 ..........
Количество вложений неизвестно
После это нужно рассчитать
(ИтогиПоНоменклатура2/1000+Номенклатура3/1000+НоменклатураN/1000)/1000

Помогите с решением данной задачи. Пробовал рекурсией не получается.
1 shuhard
 
08.02.12
11:24
(0)[Помогите с решением данной задачи]
бюджет ?
2 IT_PROGRAMMIST
 
08.02.12
11:26
(1) ?????
3 IT_PROGRAMMIST
 
08.02.12
11:32
С такой задачей сталкнулся впервые. Рекурсией не получается. Может у кого-нибудь есть какой-нибудь пример, чтобы иметь представление как правильно её решать.
4 Healer
 
08.02.12
11:32
"...Деньги? Какие деньги!?..." Бендер О.
5 IT_PROGRAMMIST
 
08.02.12
11:43
Пример кода:
Функция  РасчитатьКоличествоСвинца(Номенклатура)

   //нашли спецификацию в выпуске    
   СпецификацияНоменклатуры        = НайтиНоменклатуруВВыпуске(Номенклатура);
        //нашои комплектующие это спецификации
       Выборка     = ПолучитьДанныеПоКомплектующим(СпецификацияНоменклатуры);
   Узел = Узел+1;
   Пока Выборка.Следующий() цикл
       
       //проверим, если дальнейших цепочек нет
       КоличествоВозможныхЗвеньев = ПроверитьНаНулевоеЗначение(Выборка.Номенклатура);
       
       Если КоличествоВозможныхЗвеньев = 0 тогда
           
            НоваяСтрока                =    ТаблицаСЗаконченнымиДвижениями.Добавить();
            НоваяСтрока.Номенклатура = Выборка.Номенклатура;
            НоваяСтрока.НомерУзла      = Узел;
            НоваяСтрока.Родитель      = Номенклатура;

          Иначе
           
            НоваяСтрока                =    ТаблицаЭлементыВДвижении.Добавить();
            НоваяСтрока.Номенклатура = Выборка.Номенклатура;
            НоваяСтрока.НомерУзла    = Узел;
                        НоваяСтрока.Родитель      = Номенклатура;

           
       КонецЕсли;    
       
       
   КонецЦикла;    


   Для каждого Элемент из ТаблицаЭлементыВДвижении цикл

              //тут думал рекурсией, но тогда  Элементы в этой таблице перекроются другими
              //РасчитатьКоличествоСвинца(Элемент.Номенклатура);
       
   КонецЦикла;    
   
       
КонецФункции