Имя: Пароль:
1C
1C 7.7
v7: Помогите с обработкой аналогов (ТиС 7.7)
0 Divanoff
 
24.08.11
11:27
День добрый. Подскажите пожалуйста самый лучший вариант обработки. Измененная конфигурация ТиС 7.7.
Есть справочник номенклатура, также есть подчиненный к нему справочник аналогов (в нем есть реквизит - номенклатура, тип его "Справочник номенклатура").
Каждой позиции справочника номенклатура может соответствовать несколько аналогов. Соответственно у каждого аналога могут быть свои аналоги.
Некий отчет выводит номенклатуру списком (тип списка-таблица значений). Необходимо эту номенклатуру разбить на группы аналогов, т.е
номенклатура1   Группа аналогов1
номенклатура2   Группа аналогов2
Номенклатура3   группа аналогов1
Номенклатура4   группа аналогов1
Номенклатура5   группа аналогов2

Как быстрее всего это можно обработать?
1 Divanoff
 
24.08.11
11:35
Никто не знает?
2 KUBIK
 
24.08.11
11:40
А что есть "группа аналогов"? Родитель?
3 Divanoff
 
24.08.11
11:42
Группа аналогов - это некое название, по сути просто признак той номенклатуры, которая аналогична. Это не объект конфигурации, а просто текстовое поле. Данное текстовое поле в коде я буду просто по циклу называть, т.е группа аналогов 1, группа аналогов 2, ...., группа аналогов N
4 KUBIK
 
24.08.11
11:46
"Соответственно у каждого аналога могут быть свои аналоги"= а вот это зачем?
5 KUBIK
 
24.08.11
11:54
+(4) Если Номенклатура В яавляется аналогом Номенклатуры А, то тады получается, что в аналоги Номенклатуры В надо вписать Номенклатуру А и т.д. = бредятина полная
6 Divanoff
 
24.08.11
11:56
Это не бред, это жизнь
7 Divanoff
 
24.08.11
12:02
Если абстрагироваться от теории, то как можно быстрее всего обработать эти данные?
8 Ёпрст
 
гуру
24.08.11
12:03
(7) да как угодно.. выборкой/запросом/прямым запросом
9 fedoss
 
24.08.11
12:09
Перем СписокОбработанных;

//_____________________________________________________________________________
Процедура ПолучитьАналоги(СпрНоменклатура, СписокАналогов, Глубина)
   Если Глубина > 100 Тогда
       Сообщить("Че-то мы глубоко залезли" );
       Возврат;
   КонецЕсли;
   СписокОбработанных.ДобавитьЗначение(СпрНоменклатура);
   СпрАналоги = СоздатьОбъект("Справочник.Аналоги");
   СпрАналоги.ИспользоватьВладельца(СпрНоменклатура);
   СпрАналоги.ВыбратьЭлементы();
   Пока СпрАналоги.ПолучитьЭлемент() = 1 Цикл
       Если СписокАналогов.Принадлежит(СпрАналоги.Номенклатура) = 1 Тогда
           Продолжить;
       КонецЕсли;
       СписокАналогов.ДобавитьЗначение(СпрАналоги.Номенклатура);
       ПолучитьАналоги(СпрАналоги.Номенклатура, СписокАналогов, Глубина+1);
   КонецЦикла;
КонецПроцедуры

//_____________________________________________________________________________
Процедура Сформировать()
   СписокОбработанных = СоздатьОбъект("СписокЗначений");
   СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
   СпрНоменклатура.ВыбратьЭлементы();
   Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
       Если СписокОбработанных.Принадлежит(СпрНоменклатура) = 1 Тогда
           Продолжить;
       КонецЕсли;
       ТекГруппа = СоздатьОбъект("СписокЗначений");
       ПолучитьАналоги(СпрНоменклатура.ТекущийЭлемент(), ТекГруппа, 0);
   КонецЦикла;
КонецПроцедуры
10 Divanoff
 
24.08.11
12:24
Код не нужен, нужен принцип быстрой обработки этих данных.