Имя: Пароль:
1C
 
Интересно можно както оптимизировать этот код
0 Gray776
 
05.05.17
11:08
Ну всё работает так как и должно. Всё устраивает. Но я писал от фонаря особо не озадачиваясь. Вот и чисто интересно... Из истории кода:
Написано для конвертации данных из отраслевой + доработанной УПП 1,3 в БП 2,0.


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
//|    РеализацияТоваровУслугТовары.Ссылка.Грузополучатель,
|    РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента,
|    РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
|    РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|    МАКСИМУМ(1) КАК КратностьВзаиморасчетов,
|    МАКСИМУМ(1) КАК КурсВзаиморасчетов,
|    РеализацияТоваровУслугТовары.Ссылка.Организация,
|    РеализацияТоваровУслугТовары.Ссылка.Склад,
|    РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|    РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
|    РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
|    РеализацияТоваровУслугТовары.Номенклатура,
|    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
|    МАКСИМУМ(1) КАК КоличествоМест,
|    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
|    МАКСИМУМ(1) КАК Коэффициент,
|    РеализацияТоваровУслугТовары.Цена,
|    СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
|    РеализацияТоваровУслугТовары.СтавкаНДС,
|    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|    И РеализацияТоваровУслугТовары.Ссылка.Проведен
|
|СГРУППИРОВАТЬ ПО
//|    РеализацияТоваровУслугТовары.Ссылка.Грузополучатель,
|    РеализацияТоваровУслугТовары.СтавкаНДС,
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|    РеализацияТоваровУслугТовары.Ссылка.ВидОперации,
|    РеализацияТоваровУслугТовары.Ссылка.Организация,
|    РеализацияТоваровУслугТовары.Ссылка.УчитыватьНДС,
|    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
|    РеализацияТоваровУслугТовары.Ссылка.СуммаВключаетНДС,
|    РеализацияТоваровУслугТовары.Ссылка.Склад,
|    РеализацияТоваровУслугТовары.Ссылка.ДоговорКонтрагента,
|    РеализацияТоваровУслугТовары.Номенклатура,
|    РеализацияТоваровУслугТовары.Ссылка.ТипЦен,
|    РеализацияТоваровУслугТовары.Цена,
|    РеализацияТоваровУслугТовары.Ссылка.ВалютаДокумента
|
|УПОРЯДОЧИТЬ ПО
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|    РеализацияТоваровУслугТовары.Ссылка.Склад";

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

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

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

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

ЗЫ: ОШИБКА: Сработал фильтр анти-мат (слово в о б щ е м (навтыкал пробелов ото опять ругаться начало на это самое слово)). Попробуйте выразиться более прилично.
Эммм... Евгений Ваганович подрабатывает админством на мисте?
1 Gray776
 
05.05.17
11:17
+ А  да забыл надо было при выгрузке сворачивать по контрагентам реализации ну и если реализация одному клонтрагенту с разных складов чтоб так же по складам разбивалось свернутое. Ну про склады в процессе как бы выяснилось бухи просили просто сворачивать по контрагенту...
2 бомболюк
 
05.05.17
11:18
а замеры производительности где нить показывают откровенно слабые места?
3 Fish
 
05.05.17
11:18
(0) Работает - не трожь! (с)
4 Fish
 
05.05.17
11:20
(0) И да. Учитесь писать грамотно. Матофильтр как бы намекает.
5 zvial
 
05.05.17
11:21
С итогами в запросе как-то прозрачней бы выглядело
6 zvial
 
05.05.17
11:21
А так да, не трожь ) (3)
7 Gray776
 
05.05.17
11:21
(3) да сча тож самое для поступления ваять ... это трогать не буду но мож как -то улучшить код дя поступлений...
8 Gray776
 
05.05.17
11:23
(5) хммм ок подумаем над итогами :) спасиб
9 Gray776
 
05.05.17
11:24
(2) кстати довольно шустро работает я даж не ожидал... Если стандартно на автомате делать то блин медленне процесс выгрузки загрузки ...
10 catena
 
05.05.17
11:42
<Сработал фильтр анти-мат (слово в о б щ е м>

Потому что нет такого слова. Можно писать "в общем" и "вообще".
Независимо от того, куда вы едете — это в гору и против ветра!