![]() |
![]() |
![]() |
|
Возможно ли ТаблицуЗначений по одной колонке свернуть, а по остальным сложить? | ☑ | ||
---|---|---|---|---|
0
evorle145
30.05.12
✎
11:21
|
Возможно ли ТаблицуЗначений Например:
Яблоко МестоХранение1 Арбуз МестоХранение2 Арбуз МестоХранение3 Превратить в таблицу: Яблоко МестоХранение1 Арбуз МестоХранение2 + МестоХранение3, Я делаю так: Для каждого стр из ТаблицаЗначений Цикл //Собираю новую таблицу, в которой превращаю в строку вторую колонку //и складываю в случае равенства значения первой колонки. КонецЦикла; Может есть другой способ? Подскажите, пожалуйста |
|||
1
asady
30.05.12
✎
11:22
|
(0)как правило это делают уже при выводе по группировке фрукт -
|
|||
2
shuhard
30.05.12
✎
11:22
|
(0) вообще то у свернуть два аргумента - что свернуть и что сложить
|
|||
3
EasyRider
30.05.12
✎
11:24
|
(2)строка не будет учитываться
|
|||
4
EasyRider
30.05.12
✎
11:24
|
выведет 0
|
|||
5
evorle145
30.05.12
✎
11:26
|
(2), дело в том, что во второй колонке не число
|
|||
6
evorle145
31.05.12
✎
12:44
|
может как-то в запросе это можно сделать? задача же часто встречается такая.
|
|||
7
shuhard
31.05.12
✎
12:48
|
(5) и решается циклом - неожиданно ?
|
|||
8
Serginio1
31.05.12
✎
16:33
|
Функция ПолучитьМассивСтрок(Тз,нач,кон)
Массив= новый Массив(Кон-Нач+1); инд=0; Для сч=Нач по Кон Цикл Массив[инд]=Тз[сч]; инд=инд+1; КонецЦикла; возврат Массив КонецФункции Функция глСгруппироватьТзПоПолю(Тз,Поле,ПоляСортировкиТзПоГруппе="") Экспорт перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок; ЕстьСпр=0; ЕстьДок=0; //Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность); Колонка=Тз.Колонки.Найти(Поле); // Для того что бы правильно сртировались элементы с одинаковыми представление // Сначала отсортируем по внутреннему значению //а после группирования по представлению по возрастанию Сравнение=Новый СравнениеЗначений; // Тз.Сортировать(ПолучитьСтрокуСортПоля(Поле,Тз,ЕстьСпр,ЕстьДок)); ПоляСортировки=Поле; Если не пустаяСтрока(ПоляСортировкиТзПоГруппе) Тогда ПоляСортировки=ПоляСортировки+","+ПоляСортировкиТзПоГруппе КонецЕсли; Тз.Сортировать(ПоляСортировки,Сравнение); ТзФ=новый ТаблицаЗначений; ТзФ.Колонки.Добавить(Колонка.Имя,Колонка.типЗначения); ТзФ.Колонки.Добавить("ТзПоГруппе",Новый ОписаниеТипов("ТаблицаЗначений")); ТекСтр=0; Заявка=0; НачСтр=-1; СтрТзф=""; Если Тз.Количество()>0 Тогда Для сч=0 По Тз.Количество()-1 Цикл строка=тз[сч]; ТекЗаявка=Строка[Поле]; Если (Сч=0) или ( Заявка<>ТекЗаявка) Тогда Если НачСтр>-1 Тогда //ТекТз=СоздатьОбъект("ТаблицаЗначений"); //Тз.Выгрузить(ТекТз,НачСтр,сч-1); ТекТз=Тз.Скопировать(ПолучитьМассивСтрок(Тз,НачСтр,сч-1)); СтрТзф.ТзПоГруппе=ТекТз; КонецЕсли; СтрТзф= ТзФ.Добавить(); Заявка=ТекЗаявка; СтрТзф[Поле]=ТекЗаявка; НачСтр=сч; КонецЕсли; // глКлонироватьЗапись(Тз,сч,ТекТз) КонецЦикла; Если НачСтр>-1 Тогда ТекТз=Тз.Скопировать(ПолучитьМассивСтрок(Тз,НачСтр,Тз.Количество()-1)); СтрТзф.ТзПоГруппе=ТекТз; КонецЕсли; КонецЕсли; // ТзФ.ВыбратьСтроку(); //Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда // Если ЕстьДок=1 Тогда // ТзФ.Сортировать(Поле,1); // Иначе // ТзФ.Сортировать(Поле); // КонецЕсли; //КонецЕсли; Возврат ТзФ; КонецФункции Функция СравнитьПоля(Структ,Строка) Для каждого стр из Структ Цикл Если Стр.Значение<>Строка[Стр.Ключ] Тогда возврат ложь КонецЕсли; КонецЦикла; возврат истина КонецФункции Процедура ДобавитьПоля(Тз,ТзОриг,Поля) Экспорт если ПустаяСтрока(Поля) Тогда возврат КонецЕсли; МассивПолей=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Поля,","); Для каждого Поле из МассивПолей Цикл Колонка=ТзОриг.Колонки.Найти(Поле); Тз.Колонки.Добавить(Колонка.Имя,Колонка.типЗначения); КонецЦикла; КонецПроцедуры Процедура ПроссумироватьПоля(Тз,ТзСтрок,МассивСуммируемыхПолей) Для Каждого Стр из МассивСуммируемыхПолей Цикл Тз[стр] = ТзСтрок.Итог(Стр); КонецЦикла; КонецПроцедуры Функция глСгруппироватьТзПоПолям(Тз,Поля,СуммируемыеПоля,ПоляСортировкиТзПоГруппе="") Экспорт перем Тип,Длина,Точность,ЕстьСпр,ЕстьДок; ЕстьСпр=0; ЕстьДок=0; //Тз.ПолучитьПараметрыКолонки(поле,тип,Длина,Точность); если ПустаяСтрока(СуммируемыеПоля) Тогда МассивСуммируемыхПолей=Новый массив; Иначе МассивСуммируемыхПолей=ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СуммируемыеПоля,","); КонецЕсли; Структ=Новый Структура(Поля); // Для того что бы правильно сртировались элементы с одинаковыми представление // Сначала отсортируем по внутреннему значению //а после группирования по представлению по возрастанию Сравнение=Новый СравнениеЗначений; // Тз.Сортировать(ПолучитьСтрокуСортПоля(Поле,Тз,ЕстьСпр,ЕстьДок)); ПоляСортировки=Поля; Если не пустаяСтрока(ПоляСортировкиТзПоГруппе) Тогда ПоляСортировки=ПоляСортировки+","+ПоляСортировкиТзПоГруппе КонецЕсли; Тз.Сортировать(ПоляСортировки,Сравнение); ТзФ=новый ТаблицаЗначений; ДобавитьПоля(ТзФ,Тз,Поля); ДобавитьПоля(ТзФ,Тз,СуммируемыеПоля); ТзФ.Колонки.Добавить("ТзПоГруппе",Новый ОписаниеТипов("ТаблицаЗначений")); ТекСтр=0; Заявка=0; НачСтр=-1; СтрТзф=""; Если Тз.Количество()>0 Тогда Для сч=0 По Тз.Количество()-1 Цикл строка=тз[сч]; Если (Сч=0) или не СравнитьПоля(Структ,Строка) Тогда Если НачСтр>-1 Тогда ТекТз=Тз.Скопировать(ПолучитьМассивСтрок(Тз,НачСтр,сч-1)); СтрТзф.ТзПоГруппе=ТекТз; ПроссумироватьПоля(СтрТзф,ТекТз,МассивСуммируемыхПолей); КонецЕсли; СтрТзф= ТзФ.Добавить(); Для каждого стр из Структ Цикл Поле=Стр.Ключ; Значение=Строка[поле]; Структ[Поле]=Значение; СтрТзф[Поле]=Значение; КонецЦикла; НачСтр=сч; КонецЕсли; // глКлонироватьЗапись(Тз,сч,ТекТз) КонецЦикла; Если НачСтр>-1 Тогда ТекТз=Тз.Скопировать(ПолучитьМассивСтрок(Тз,НачСтр,Тз.Количество()-1)); СтрТзф.ТзПоГруппе=ТекТз; ПроссумироватьПоля(СтрТзф,ТекТз,МассивСуммируемыхПолей); КонецЕсли; КонецЕсли; // ТзФ.ВыбратьСтроку(); //Если (ЕстьСпр=1) или (ЕстьДок=1) Тогда // Если ЕстьДок=1 Тогда // ТзФ.Сортировать(Поле,1); // Иначе // ТзФ.Сортировать(Поле); // КонецЕсли; //КонецЕсли; Возврат ТзФ; КонецФункции |
|||
9
Ненавижу 1С
гуру
31.05.12
✎
16:39
|
ссылки складывать нельзя
|
|||
10
evorle145
31.05.12
✎
17:00
|
(8), Спасибо, буду разбираться
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |