Имя: Пароль:
1C
 
КД.Произвольный алгоритм не получается выгрузить ТЧ
0 Gray776
 
25.05.15
10:44
Не пойму что не так то делаю. Смотрю файл обмена там только данные шапки есть.

|УПОРЯДОЧИТЬ ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ТЗ = РезультатЗапроса.Выгрузить();
ТЧ = ТЗ.СкопироватьКолонки();
ТЗРез = ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");

ПозТЗ = 0;

Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл
    
    ТекущийКонтрагент = Выборка.Контрагент;
    КолСтр = ТЗ.Количество()-1;
    
    Пока ТЗ[ПозТЗ].Контрагент = ТекущийКонтрагент Цикл
        
        ЗаполнитьЗначенияСвойств(ТЧ.Добавить(), ТЗ[ПозТЗ]);
        
        Если ПозТЗ < КолСтр Тогда
            ПозТЗ = ПозТЗ+1;
        Иначе
            Сообщить ("ПозТЗ = "+ПозТЗ);
            Прервать;
        КонецЕсли;
        
    КонецЦикла;
    
    НоваяСтрока = ТЗРез.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[ПозТЗ]);
    НоваяСтрока.Товары = ТЧ;
    
    ТЧ.Очистить();
    ПозТЗРез = ПозТЗРез+1;
    
КонецЦикла;

ВыборкаДанных= ТЗРез;
1 Гёдза
 
25.05.15
10:46
а где тут заполнение тч?
2 Gray776
 
25.05.15
10:47
(1)     НоваяСтрока.Товары = ТЧ;
3 Gray776
 
25.05.15
10:47
(1) (2) Не?
4 Gray776
 
25.05.15
10:49
(1) (2) Ну а сама ТЧ в цикле заполняется
5 Gray776
 
25.05.15
10:56
Эммм там пару строчек мусора, проверял кое что...
Вот так будет без лишних строк:

|УПОРЯДОЧИТЬ ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ТЗ = РезультатЗапроса.Выгрузить();
ТЧ = ТЗ.СкопироватьКолонки();
ТЗРез = ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");

ПозТЗ = 0;

Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл
    
    ТекущийКонтрагент = Выборка.Контрагент;
    КолСтр = ТЗ.Количество()-1;
    
    Пока ТЗ[ПозТЗ].Контрагент = ТекущийКонтрагент Цикл
        
        ЗаполнитьЗначенияСвойств(ТЧ.Добавить(), ТЗ[ПозТЗ]);
        
        Если ПозТЗ < КолСтр Тогда
            ПозТЗ = ПозТЗ+1;
        Иначе
            Прервать;
        КонецЕсли;
        
    КонецЦикла;
    
    НоваяСтрока = ТЗРез.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[ПозТЗ]);
    НоваяСтрока.Товары = ТЧ;
    
    ТЧ.Очистить();
    
КонецЦикла;

ВыборкаДанных= ТЗРез;
6 cw014
 
25.05.15
11:41
НоваяСтрока.Товары = ТЧ;
    
    ТЧ.Очистить();
    

Вот тут твоя ошибка
7 cw014
 
25.05.15
11:42
Либо делать так:
    НоваяСтрока.Товары = ТЧ.Скопировать();
    
    ТЧ.Очистить();


либо так:

    НоваяСтрока.Товары = ТЧ;
    
    ТЧ = Новый ТаблицаЗначений;
8 Gray776
 
25.05.15
12:24
(7) Спасибо заработало.
Вот так сделал:

    НоваяСтрока.Товары = ТЧ.Скопировать();
    
    ТЧ.Очистить();

Заработало, второй вариант не проверял ))))
9 Gray776
 
25.05.15
12:47
(8) Кстати чтот я смотрю на код и думаю занафика я нагородил с "ТекущийКонтрагент" Можно было ведь

Пока Выборка.Следующий() Цикл ....
10 Gray776
 
25.05.15
12:52
(9) (5) Типа вот:

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ТЗ = РезультатЗапроса.Выгрузить();
ТЧ = ТЗ.СкопироватьКолонки();
ТЗРез = ТЗ.СкопироватьКолонки();
ТЗРез.Колонки.Добавить("Товары");

ПозТЗ = 0;

Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл
    
    НоваяСтрока = ТЗРез.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ТЗ[ПозТЗ]);
    
    Пока Выборка.Следующий() Цикл
        
        ЗаполнитьЗначенияСвойств(ТЧ.Добавить(), ТЗ[ПозТЗ]);
        
        ПозТЗ = ПозТЗ+1;
        
    КонецЦикла;
    
    НоваяСтрока.Товары = ТЧ.Скопировать();
    
    ТЧ.Очистить();
    
КонецЦикла;

ВыборкаДанных= ТЗРез;


все тоже самое делает и даже, лучше...