Имя: Пароль:
1C
1С v8
СКД Рассчитываемое поле по условию Группировка одних полей - Сумма другого поля
0 fantomrik
 
06.10.14
16:24
http://fastpic.ru/view/68/2014/1006/9232ffa6692d4fceb7771677fcc50ca5.jpeg.html

Наверно не совсем верно описал...
Есть номенклатура, она может лежать на разных локациях в пределах склада. При текущей компоновке пользователь раскрывает группировку "Номенклатура" и видит локации с количеством на каждой. Но ему не нужна детализация, о просто на уровне номенклатуры видеть еще 1 колонку в которой через любой разделитель отмечены все локации...
В запросе не сгруппировать строки с суммированием определенного поля (строкового), вот и подумал, мб в СКД так можно сделать через рассчитываемое поле?
1 fantomrik
 
06.10.14
16:41
Вижу тут как вариант собирать таблицу программно и передавать  внешним набором данных, но хотелось бы изящнее, если скд так позволяет.
2 Timon1405
 
06.10.14
16:53
похоже на ваше? http://forum.infostart.ru/forum26/topic43280/
3 fantomrik
 
06.10.14
20:11
(2) Спасибо, похоже, но пока решил через программную компановку, внешним набором данных.
4 fantomrik
 
06.10.14
20:38
Собственно в продолжение темы.... Результат запроса обхожу руками. До 10000 строк довольно резво обрабатывает, но далее скорость падает в геометрической прогрессии. Можно ли как оптимизировать код, или функции работы со строками сами по себе не очень быстрые и ни чего сделать не получится?
[code]
    Для каждого СтрокаТЗ  Из Результат Цикл
        Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ИтогЛокаций) Тогда //Перед началом цикла данная колонка добавляется, т.е. она пустая,
                                                              //но ниже, обходя найденные строки она может стать заполнена    
            Отбор = Новый Структура();
            Если ЗначениеЗаполнено(СтрокаТЗ.Артикул) Тогда
                Отбор.Вставить("Артикул",СтрокаТЗ.Артикул);
                Локации = Результат.НайтиСтроки(Отбор);    
            Иначе
                Отбор.Вставить("Номенклатура",СтрокаТЗ.Номенклатура);
                Локации = Результат.НайтиСтроки(Отбор);    
            КонецЕсли;
            
            МассивЛокацийТекст = "";
            Для каждого ЭлементаМассива Из Локации Цикл
                МассивЛокацийТекст = МассивЛокацийТекст + СокрЛП(ЭлементаМассива.Локация) + " ";
            КонецЦикла;
            
            //Без локаций будем писать последним, просто для эстетики
            Если Найти(МассивЛокацийТекст, "Без локации") > 0 Тогда
                МассивЛокацийТекст = СтрЗаменить(МассивЛокацийТекст,"Без локации ","");
                МассивЛокацийТекст = МассивЛокацийТекст + " Без локации"
            КонецЕсли;
            
            Для каждого Элемента Из Локации Цикл
                Элемента.ИтогЛокаций = МассивЛокацийТекст;
            КонецЦикла;
            
        КонецЕсли;    
    КонецЦикла;

[/code]
5 vicof
 
06.10.14
20:47
а выводить в отдельный набор или расшифровку по отчету не предлагать?
6 vicof
 
06.10.14
20:51
Сделать настройку в виде таблицы, где в столбцах будут указаны локации
7 fantomrik
 
06.10.14
20:56
локаций много, получится туева хуча столбцов постоянных и на пересечении будет осток только в тех строках/столбцах, где он есть. как вам строка, к которой добавилось 90 столбцов и только в 85 ом столбце есть цифра?)
8 fantomrik
 
07.10.14
10:37
Ап