Имя: Пароль:
1C
 
Свернуть таблицу
0 upec
 
12.10.09
15:33
Имеется Таблица примерно такого вида:

Товар1  Ссылка1
Товар1  Ссылка2
Товар2  Ссылка3
Товар2  Ссылка4

Нужно ее привезти к виду:

Товар1  СписокЗначений(Ссылка1,Ссылка2)
Товар2  СписокЗначений(Ссылка3,Ссылка4)
1 Ёпрст
 
гуру
12.10.09
15:37
(0)
ТЗ.Сортировать("Товар");
Товар = "";
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
  Если Товар<>ТЗ.Товар Тогда
     ТЗ.СЗ = СоздатьОбъект("СписокЗначений");
     Товар = ТЗ.Товар;
  КонецЕсли;
  ТЗ.СЗ.ДобавитьЗначение(ТЗ.Ссылка);
КонецЦикла
2 Serginio1
 
12.10.09
15:38
3 Mikeware
 
12.10.09
15:38
Или ИндексированнаяТаблица, метод Группировать :-)
4 GreyK
 
12.10.09
15:51
(1) Нее, такое не взлетит.
   Таблица.Сортировать("Товар");
   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Таблица.Выгрузить(ТЗ);
   ТЗ.Свернуть("Товар,,"всё кроме колонки "Ссылка",",,,,");
   ТЗ.НоваяКолонка("СЗ",,,,,,,);
   Товар="";
   ТЗ.ВыбратьСтроки();
   Таблица.ВыбратьСтроки();
   Пока Таблица.ПолучитьСтроку()=1 Цикл
       Если Не(Таблица.Товар=ТЗ.Товар) Тогда
           ТЗ.ПолучитьСтроку();
           ТЗ.СЗ=СоздатьОбъект("СписокЗначений");
       КонецЕсли;
       ТЗ.СЗ.ДобавитьЗначение(Таблица.Ссылка);
   КонецЦикла;
5 Ёпрст
 
гуру
12.10.09
15:51
(4) Чего курим?
6 Ёпрст
 
гуру
12.10.09
15:54
+5 а ну да...свернуть забыл еще..
7 Serginio1
 
12.10.09
16:16
(6) Зачем сворачивать?
А сортировать лучше по внутреннему значению с *, т.к. Дубли представлений могут перемешивать
(0) +2 смотри (61) Правда там не списокЗначений, а  ТЗ
8 upec
 
12.10.09
16:29
Вот в последнее я вообще не вкурил, сделал как в (1) + потом свернул.
9 Serginio1
 
12.10.09
16:38
(8) В разработке по данному адресу
http://1c.proclub.ru/modules/mydownloads/viewcat_personal.php?uid=5702

В отчете C1InDelphi\ErtОбщегоНазначения\ТестЕрт.ert

есть примеры функция группирования значений как по одному полю, так и по нескольким полям.
Для глСгруппироватьПоПолямСТЗБыстр создаются поля ресурсы в которых записанны итоги по полям (полю)

Посмотри Там есть примеры, в том числе и сравнение тз.

Для функций
глСгруппироватьПоПолюСТЗБыстр(Тз,Поле)
глСгруппироватьПоПолямСТЗБыстр(Тз,Поля,Ресурсы)
Начальная сортировка учитывает типы Справочник и документ для сортировки по значению, после группирования данных тз содержащая группы сортируется по представлению.
Для последней функции параметру Ресурсы можно указать пустую строку, что бы итоги не считались
10 Эльниньо
 
12.10.09
17:12
(1) Изящно!
11 Mikeware
 
12.10.09
17:25
(9) Я так понимаю, что автор - ты. Что ж, "всяк кулик..."
Но ИТЗ, ИМХО, гораздо более проработанная. Плюс более привычный синтаксис. Не лучше ль юзать 1с++ (если учесть, что там много прочих вкусностей?)
12 Serginio1
 
12.10.09
17:33
(11) Но не всегда ВК нужна, многие просто против ее применения напрочь, кроме того составом является ТаблицаЗначений которую легко закинуть в стандартную обработку.
Я ей пользуюсь достаточно часто, аналог "Итог" 8 ки. Заодно и с иерархией.
Против ИТЗ во многом она действительно лучше, просто хотел поделиться тем, чем сам часто пользуюсь, а таких вопросов очень много.
Насчет синтаксиса, можно его под себя изменить, кстати я часто использую и для поиска по двум полям.
13 Ёпрст
 
гуру
12.10.09
17:34
(10) Там неправильно, нужно так было делать:


   Товар="";
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       Если Товар<>ТЗ.Товар Тогда
           СЗ = СоздатьОбъект("СписокЗначений");
           Товар = ТЗ.Товар;
       КонецЕсли;
       СЗ.ДобавитьЗначение(ТЗ.Ссылка);
       ТЗ.СЗ = СЗ;
   КонецЦикла;
   ТЗ.Свернуть("Товар,СЗ","");
14 Serginio1
 
12.10.09
17:34
(12) Против ИТЗ читать-Итз во многом лучше, но не во всем.
15 GreyK
 
12.10.09
17:41
+(4) Пропустил смену товара. Так логичней и правильней.
   Таблица.Сортировать("Товар");
   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Таблица.Выгрузить(ТЗ);
   ТЗ.Свернуть("Товар,,"всё кроме колонки "Ссылка",",,,,");
   ТЗ.НоваяКолонка("СЗ",,,,,,,);
   Товар="";
   ТЗ.ВыбратьСтроки();
   Таблица.ВыбратьСтроки();
   Пока Таблица.ПолучитьСтроку()=1 Цикл
       Если Не(Таблица.Товар=ТЗ.Товар) Тогда
           ТЗ.ПолучитьСтроку();
           ТЗ.СЗ=СоздатьОбъект("СписокЗначений");
           Товар=Таблица.Товар;
       КонецЕсли;
       ТЗ.СЗ.ДобавитьЗначение(Таблица.Ссылка);
   КонецЦикла;
16 Ёпрст
 
гуру
12.10.09
17:42
(15) у меня попроще будет .. и быстрее, не надо иметь 2 тз.. всё делается в одной.
17 Serginio1
 
12.10.09
17:54
(16) Ещё быстрее будет если использовать
Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)
Вместо ДобавитьЗначение
18 Ёпрст
 
гуру
12.10.09
18:04
(17) Смотри код, там не удасться ничего выгрузить
19 GreyK
 
12.10.09
18:05
(16) Помоему вот это у тебя неправильно: "ТЗ.СЗ = СЗ;". В конечном итоге ты меняешь, значение колонки "СЗ" для всех строк ТЗ.
20 Ёпрст
 
гуру
12.10.09
18:06
(19) проверено, мин нет.. в (15) 100% рабочий код..
21 Ёпрст
 
гуру
12.10.09
18:07
+20
>>>В конечном итоге ты меняешь, значение колонки "СЗ" для всех строк ТЗ.
не для всех,а только у тех, у которых товар одинаковый.
22 GreyK
 
12.10.09
18:13
(21) СЗ объявлена явно, ты присваиваешь значению колонки "СЗ" значение списка СЗ. Обнули в конце цикла СЗ, и все ТЗ.СЗ обнулятся.
23 Delorn
 
12.10.09
18:21
(22) не все только для последнего товара.
24 GreyK
 
12.10.09
18:23
(23) Попробовал?
25 Serginio1
 
12.10.09
18:28
(18) Удастся.
Фиксируешь НомерСтроки первого появления товара и последнюю строку-1 появления нового. И выгружаешь в  список выгрузкой.
А проще

//*******************************************
//  Функции для группирования Данных ======================================================================
//==========Клонирование и группировка ТЗ =======================
Функция    глКлонироватьСтруктуруТЗ(Тз)  экспорт
       перем Тип,Длина,Точность;
       Резулт=СоздатьОбъект("ТаблицаЗначений");
       Для сч=1 по Тз.КоличествоКолонок() Цикл
            поле=Тз.ПолучитьПараметрыКолонки(сч,тип,Длина,Точность);
            Резулт.НоваяКолонка(поле,тип,длина,Точность);
       КонецЦикла;
    возврат резулт
КонецФункции

Процедура глКлонироватьЗапись(ТзИсточник,НомСтрИсточник,Тз) Экспорт
   Тз.НоваяСтрока();
   ТекСтр=Тз.КоличествоСтрок();
       Для Сч=1 По Тз.КоличествоКолонок() Цикл
       Колонка=ТзИсточник.ПолучитьПараметрыКолонки(сч);    
           Тз.УстановитьЗначение(ТекСтр,Колонка,ТзИсточник.ПолучитьЗначение(НомСтрИсточник,сч));
           
       КонецЦикла;
   КонецПроцедуры

     
   Функция ИзСтрокиСРазделителями(Сз,Стр,Разделитель)  Экспорт
   Сз.УдалитьВсе();
   ТемпСтр=СокрЛП(Стр);
   поз=Найти(ТемпСтр,Разделитель);
   Пока Поз>0 Цикл
       Сз.ДобавитьЗначение(СокрЛП(Лев(ТемпСтр,Поз-1)));
       ТемпСтр=Сред(ТемпСтр,Поз+1);
       поз=Найти(ТемпСтр,Разделитель);
   КонецЦикла;
       Если ПустаяСтрока(ТемпСтр)=0 Тогда
          Сз.ДобавитьЗначение(СокрЛП(ТемпСтр));
   КонецЕсли;
   Возврат Сз
КонецФункции  

Функция ИзСтрокиСПробелами(Стр) Экспорт
   Сз=СоздатьОбъект("СписокЗначений");
   Если ПустаяСтрока(стр)=1 Тогда
       возврат Сз
   КонецЕсли;
   
   Разделитель=" ";
   ТемпСтр=СокрЛП(Стр);
   поз=Найти(ТемпСтр,Разделитель);
   Пока Поз>0 Цикл
       Сз.ДобавитьЗначение(СокрЛП(Лев(ТемпСтр,Поз-1)));
       ТемпСтр=СокрЛ(Сред(ТемпСтр,Поз+1));
       поз=Найти(ТемпСтр,Разделитель);
   КонецЦикла;
       Если ПустаяСтрока(ТемпСтр)=0 Тогда
          Сз.ДобавитьЗначение(СокрЛП(ТемпСтр));
   КонецЕсли;
   Возврат Сз
КонецФункции

Функция СравнитьСписки(Сп1,сп2)
   Для сч=1 по Сп1.РазмерСписка() Цикл
              Если Сп1.ПолучитьЗначение(сч)<>Сп2.ПолучитьЗначение(сч) Тогда
                    Возврат 0
              КонецЕсли;
   КонецЦикла;  
       возврат 1
КонецФункции
   
//==================================================================
Функция ПолучитьСтрокуСортПоля(Колонка,Тз,ЕстьСпр,ЕстьДок)
   перем Тип,Длина,Точность;
   поле=Тз.ПолучитьПараметрыКолонки(Колонка,тип,Длина,Точность);
   
   Тип=Врег(Тип);
   
   Если Найти(Тип,"СПРАВОЧНИК")=1 Тогда
       ЕстьСпр=1;
       Резулт=Колонка+"*"
   ИначеЕсли    Найти(Тип,"ДОКУМЕНТ")=1 Тогда
       ЕстьДок=1;
       Резулт=Колонка+"*"
   Иначе
       Резулт=Колонка;
   КонецЕсли;
   
   Возврат Резулт    
КонецФункции // ПолучитьСтрокуСортПоля
Функция ПолучитьСтрокуСортировки(Спз,Тз,ЕстьСпр,ЕстьДок)
   
   Резулт="";
   Для сч=1 по Спз.РазмерСписка() Цикл
       Колонка=Спз.ПолучитьЗначение(сч);
       Колонка=ПолучитьСтрокуСортПоля(Колонка,Тз,ЕстьСпр,ЕстьДок);
   
       Если СЧ=1 Тогда
           Резулт=Колонка
       иначе
           резулт=резулт+","+Колонка
       КонецЕсли;        
   КонецЦикла;
   возврат Резулт
КонецФункции

Функция глСгруппироватьПоПолюСТЗБыстр(Тз,Поле) Экспорт
   перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок;
   ЕстьСпр=0; ЕстьДок=0;
   Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность);
   // Для того что бы правильно сртировались элементы с одинаковыми представление
   // Сначала отсортируем по внутреннему значению
   //а после группирования по представлению по возрастанию
   Тз.Сортировать(ПолучитьСтрокуСортПоля(Поле,Тз,ЕстьСпр,ЕстьДок));
   ТзФ=СоздатьОбъект("ТаблицаЗначений");
   ТзФ.НоваяКолонка(поле,тип,длина,Точность);
   ТзФ.НоваяКолонка("ТзПоГруппе","ТаблицаЗначений");
   ТекСтр=0;
   Заявка=0;  
   НачСтр=0;
   Если Тз.КоличествоСтрок()>0 Тогда
       
       Для сч=1 По Тз.КоличествоСтрок() Цикл
           ТекЗаявка=Тз.ПолучитьЗначение(сч,Поле);
           
           Если (Сч=1) или ( Заявка<>ТекЗаявка) Тогда
               Если НачСтр>0 Тогда
                   ТекТз=СоздатьОбъект("ТаблицаЗначений");
                   Тз.Выгрузить(ТекТз,НачСтр,сч-1);
                   Тзф.ТзПоГруппе=ТекТз;      
               КонецЕсли;
               
               ТзФ.НоваяСтрока();
               ТекСтр=Тзф.КоличествоСтрок();
               Заявка=ТекЗаявка;
               Тзф.УстановитьЗначение(ТекСтр,Поле,ТекЗаявка);
               НачСтр=сч;
           КонецЕсли;    
           // глКлонироватьЗапись(Тз,сч,ТекТз)
       КонецЦикла;
       
       Если НачСтр>0 Тогда
           ТекТз=СоздатьОбъект("ТаблицаЗначений");
           Тз.Выгрузить(ТекТз,НачСтр);
           Тзф.ТзПоГруппе=ТекТз;      
       КонецЕсли;
   КонецЕсли;
   //    ТзФ.ВыбратьСтроку();
   Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда
       Если ЕстьДок=1 Тогда
           ТзФ.Сортировать(Поле,1);
       Иначе
           ТзФ.Сортировать(Поле);
       КонецЕсли;
   КонецЕсли;
   Возврат ТзФ;
КонецФункции        



   
   Функция глСгруппироватьПоПолямСТЗБыстр(Тз,Поля,Ресурсы) Экспорт
   перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок;
   ЕстьСпр=0; ЕстьДок=0;
   
   Сз=СоздатьОбъект("СписокЗначений");
   СписокИзмерений= ИзСтрокиСРазделителями(Сз,Поля,",");
   // Для того что бы правильно сртировались элементы с одинаковыми представление
   // Сначала отсортируем по внутреннему значению
   //а после группирования по представлению по возрастанию
   // Но при сортировке обратно по нескольким полям одинаковые элементы могут
   // располаться не последовательно, т.к. дубли сортируются не по порядку
   //Стоит добавить уникальное поле (ЗначениеВстрокуВнутр) что бы группировки
   //С одинаковыми значениями шли друг за другом.
   СтрокаСортировки=ПолучитьСтрокуСортировки(СписокИзмерений,Тз,ЕстьСпр,ЕстьДок);
   Тз.Сортировать(СтрокаСортировки);

   ТзФ=СоздатьОбъект("ТаблицаЗначений");
   
   
   
   Для сч=1 по СписокИзмерений.РазмерСписка() Цикл            
       Поле=СписокИзмерений.ПолучитьЗначение(сч);
       Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность);    
       ТзФ.НоваяКолонка(поле,тип,длина,Точность);
   КонецЦикла;
   Сз=СоздатьОбъект("СписокЗначений");
   
   Если ПустаяСтрока(Ресурсы)=1 Тогда
       СписокРесурсов=СоздатьОбъект("СписокЗначений");
   иначе
   СписокРесурсов=ИзСтрокиСРазделителями(Сз,Ресурсы,",");    
   КонецЕсли;
   
   Для сч=1 по СписокРесурсов.РазмерСписка() Цикл            
       Поле=СписокРесурсов.ПолучитьЗначение(сч);
       Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность);    
       ТзФ.НоваяКолонка(поле,тип,длина,Точность);
   КонецЦикла;
   
   
   ТзФ.НоваяКолонка("ТзПоГруппе","ТаблицаЗначений");
   ТекСтр=0;
   
   Измерения=СоздатьОбъект("СписокЗначений");
   ТекИзмерения=СоздатьОбъект("СписокЗначений");
   Для сч=1 по СписокИзмерений.РазмерСписка() Цикл
       Измерения.ДобавитьЗначение("");
       ТекИзмерения.ДобавитьЗначение("");
   КонецЦикла;
     
   НачСтр=0;
   Если Тз.КоличествоСтрок()>0 Тогда
       
       Для сч=1 По Тз.КоличествоСтрок() Цикл
           Для счИзм=1 по СписокИзмерений.РазмерСписка() Цикл
               Поле=СписокИзмерений.ПолучитьЗначение(счизм);    
               ТекИзмерения.УстановитьЗначение(счИзм,Тз.ПолучитьЗначение(сч,Поле));
           КонецЦикла;
           
           
           Если (Сч=1) или ( СравнитьСписки(Измерения,ТекИзмерения)=0) Тогда
               Если НачСтр>0 Тогда
                   ТекТз=СоздатьОбъект("ТаблицаЗначений");
                   Тз.Выгрузить(ТекТз,НачСтр,сч-1);
                   Тзф.ТзПоГруппе=ТекТз;  
                   Для СчРес=1 по СписокРесурсов.РазмерСписка() Цикл            
                       Поле=СписокРесурсов.ПолучитьЗначение(СчРес);
                       Значение=ТекТз.Итог(Поле);
                       Тзф.УстановитьЗначение(ТекСтр,Поле,Значение);
                   КонецЦикла;
           КонецЕсли;
           
               ТзФ.НоваяСтрока();
               ТекСтр=Тзф.КоличествоСтрок();        
               Измерения.УдалитьВсе();
               ТекИзмерения.Выгрузить(Измерения);
               Для счизм=1 по СписокИзмерений.РазмерСписка() Цикл            
                   Поле=СписокИзмерений.ПолучитьЗначение(счизм);
                   Значение=Тз.ПолучитьЗначение(сч,Поле);
                   Тзф.УстановитьЗначение(ТекСтр,Поле,Значение);
               КонецЦикла;
               
               ТекТз=глКлонироватьСтруктуруТЗ(Тз);
               Тзф.ТзПоГруппе=ТекТз;
               НачСтр=Сч;
           КонецЕсли;    
           
       
       КонецЦикла;  
       
               Если НачСтр>0 Тогда
                   ТекТз=СоздатьОбъект("ТаблицаЗначений");
                   Тз.Выгрузить(ТекТз,НачСтр);
                   Тзф.ТзПоГруппе=ТекТз;  
                   Для СчРес=1 по СписокРесурсов.РазмерСписка() Цикл            
                       Поле=СписокРесурсов.ПолучитьЗначение(СчРес);
                       Значение=ТекТз.Итог(Поле);
                       Тзф.УстановитьЗначение(ТекСтр,Поле,Значение);
                   КонецЦикла;
           КонецЕсли;
   КонецЕсли;
       
   Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда
       Если (ЕстьДок=1) Тогда
           ТзФ.Сортировать(Поля,1);
       Иначе
           ТзФ.Сортировать(Поля);
       КонецЕсли;
   КонецЕсли;
   
   Возврат ТзФ;
КонецФункции
26 Delorn
 
12.10.09
18:36
(24) Пробовал... :) А если написать СЗ=""; то ваще ни чего не произойдет
27 GreyK
 
12.10.09
18:39
(26) Ну показывай работающий код.
28 Delorn
 
12.10.09
18:41
ТЗ=СоздатьОбъект("ТаблицаЗначений");
 ТЗ.НоваяКолонка("Товар");
 ТЗ.НоваяКолонка("Ссылка");
 ТЗ.НоваяКолонка("СЗ");
 Тз.НоваяСтрока();
 Тз.Товар = "Товар 1";
 Тз.Ссылка = 2;
 Тз.НоваяСтрока();
 Тз.Товар = "Товар 1";
 Тз.Ссылка = 3;
 Тз.НоваяСтрока();
 Тз.Товар = "Товар 2";
 Тз.Ссылка = 1;
 Тз.НоваяСтрока();
 Тз.Товар = "Товар 2";
 Тз.Ссылка = 2;
 Тз.НоваяСтрока();
 Тз.Товар = "Товар 2";
 Тз.Ссылка = 3;
 
 
 
 //Кусок ЕПРСТ
 ТЗ.Сортировать("Товар");
 Товар = "";
 ТЗ.ВыбратьСтроки();
 Пока ТЗ.ПолучитьСтроку()=1 Цикл
   Если Товар<>ТЗ.Товар Тогда
     СЗ = СоздатьОбъект("СписокЗначений");
     Товар = ТЗ.Товар;
  КонецЕсли;
  СЗ.ДобавитьЗначение(ТЗ.Ссылка);
  ТЗ.СЗ=СЗ;
КонецЦикла;
ТЗ.Свернуть("Товар,СЗ","");  //Кусок ЕПРСТ

Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//3
Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2

//СЗ.УдалитьВсе();
//Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//0
//Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2
СЗ="";
Сообщить(ТЗ.ПолучитьЗначение(2,2).РазмерСписка());//3
Сообщить(ТЗ.ПолучитьЗначение(1,2).РазмерСписка());//2
29 GreyK
 
12.10.09
19:00
(28) Да, в (16) код нормально отрабатывает. Немогу понять как работает ссылка в ТЗ.
30 Mikeware
 
12.10.09
19:01
Процедура Сформировать()
   ТЗ=СоздатьОбъект("ИНдексированнаяТаблица");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ссылка");
   Тз.НоваяСтрока();
   Тз.Товар = "Товар 1";
   Тз.Ссылка = 2;
   Тз.НоваяСтрока();
   Тз.Товар = "Товар 1";
   Тз.Ссылка = 3;
   Тз.НоваяСтрока();
   Тз.Товар = "Товар 2";
   Тз.Ссылка = 1;
   Тз.НоваяСтрока();
   Тз.Товар = "Товар 2";
   Тз.Ссылка = 2;
   Тз.НоваяСтрока();
   Тз.Товар = "Товар 2";
   Тз.Ссылка = 3;
   ТЗ.ВыбратьСтроку(); // Смотрим
   
   ТЗ.Группировать("Товар:Товар","Ссылка",1); //Собснно, группировка
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       ПромТЗ=ТЗ.тзПотомки;
       ПромТЗ.ВыбратьСтроку(,""+ТЗ.Товар); //Смотрим
       СЗ=СоздатьОбъект("СписокЗначений");
       ПромТЗ.Выгрузить(СЗ,,"Ссылка");
       ТЗ.Ссылка=СЗ;
   КонецЦикла;
//Ну и опять смотрим    
   ккк="";
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       СЗ=ТЗ.Ссылка;
       СЗ.ВыбратьЗначение(ккк,""+ТЗ.Товар,,,0);
   КонецЦикла;
КонецПроцедуры
31 Mikeware
 
12.10.09
19:02
Если сам код свертки, то

   ТЗ.Группировать("Товар:Товар","Ссылка",1); //Собснно, группировка
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       ПромТЗ=ТЗ.тзПотомки;
       СЗ=СоздатьОбъект("СписокЗначений");
       ПромТЗ.Выгрузить(СЗ,,"Ссылка");
       ТЗ.Ссылка=СЗ;
   КонецЦикла;
32 Serginio1
 
12.10.09
19:09
(31) Продолжая тему кулика
Ну по аналогии мой вариант
Тз=глСгруппироватьПоПолюСТЗБыстр(Тз,"Товар");
   Тз.ВыбратьСтроки();
   Пока Тз.ПолучитьСтроку()=1 Цикл
       ПромТЗ=Тз.ТзПоГруппе;
       ........................
               
   КонецЦикла;

Кстати мне больше нравится Состав, вместо тзПотомки или ТзПоГруппе
33 Mikeware
 
12.10.09
19:19
(32) Я не тестировал под нагрузкой твой вариант. Есть 1с++, этого хватает :-)
ИМХО,
ТЗ.Группировать("Товар:Товар","Ссылка",1);
несколько привычнее и правильнее, нежели
Тз=глСгруппироватьПоПолюСТЗБыстр(Тз,"Товар");

Но на вкус и цвет все фломастеры...
34 Serginio1
 
12.10.09
19:22
(33) Кстати очень работает быстро. Опять же я двумя руками за ИТЗ, но там где этого нельзя можно и мой вариант.
35 fifaru
 
12.10.09
19:42
проще
36 Mikeware
 
12.10.09
19:48
(35) кртсть-сстр. тлнта
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn