|
v7: Сортировка Таблицы значений | ☑ | ||
---|---|---|---|---|
0
bonyakr
31.05.12
✎
19:13
|
Добрый день.
Подскажите пожалуйста такой нюанс. Есть таблица значение с колонками "Необоротный Актив","Место хранения" в этой таблице два Необоротных актива называются ОС1 и ОС1 хранятся они на разных местах хранения. При сортировке ТЗ по возростанию выводится: ОС1 ОС2 Место1 Место2 Если сортирую по внутреннему идентификатору то получается: ОС2 Место2 ОС1 Место1 А надо: ОС1 Место1 ОС2 Место2 |
|||
1
Karambol
31.05.12
✎
19:15
|
ТЗ.Сортировать("Колонка1,Колонка2"), как-то так, думаю
|
|||
2
miki
31.05.12
✎
19:15
|
если всего 4-ре строки проще руками переставить
|
|||
3
bonyakr
31.05.12
✎
19:34
|
строк 5 тисяч
так вроде сказал что "Если сортирую...." |
|||
4
catena
31.05.12
✎
19:40
|
(0)"При сортировке ТЗ по возростанию выводится:
ОС1 ОС2 Место1 Место2" Они в одной колонке чтоли??? |
|||
5
bonyakr
31.05.12
✎
19:47
|
Нет в разных
должно иметь вид такой НА МестоХранения Цена Автомобиль 2000 Автомобиль Петров 2000 Машина 1000 Машина Иванов 1000 Машина 3000 Машина Сидоров 3000 После сортировки ("НА,МестоХрения") получается Автомобиль 2000 Автомобиль Петров 2000 Машина 1000 Машина 3000 Машина Иванов 1000 Машина Сидоров 3000 А после сорировки по внутренему идентификатору Машина 1000 Машина Иванов 1000 Автомобиль 2000 Автомобиль Петров 2000 Машина 3000 Машина Сидоров 3000 |
|||
6
Мимохожий Однако
31.05.12
✎
19:48
|
Сортируй по полному коду
|
|||
7
bonyakr
31.05.12
✎
19:49
|
Это как??
|
|||
8
catena
31.05.12
✎
19:51
|
(5)У тебя либо в колонке НА текст, либо одна и та же Машина. Судя по тому, что у них по две итоговых строки, все-таки там текст.
|
|||
9
bonyakr
31.05.12
✎
19:53
|
В ТЗ Передаю НА.ТекущийЭлемент()
|
|||
10
catena
31.05.12
✎
19:56
|
(9)Ну значит одна и та же машина. Включай тогда в сортировку и цену уж. Что за пустые строки-то?
|
|||
11
bonyakr
31.05.12
✎
19:59
|
Я перед сортировкой сворачиваю ТЗ ПО (НА,МестоХранения) а потом (НА)
Машины разные |
|||
12
catena
31.05.12
✎
20:03
|
(11)Вот так:
Машина 1000 Машина 3000 Машина Иванов 1000 Машина Сидоров 3000 Не могло бы получится, если бы машины были бы разные. Сперва бралась бы первая машина и по порядку все ее места хранения, потом вторая. Так что, либо там текст, либо одна и та же машина. |
|||
13
bonyakr
31.05.12
✎
20:12
|
Запрос у меня строится
БИ.ВыртьСубконто(МестоХраения) БИ.ПолучитьСубконто(МестоХраения) БИ.ВыртьСубконто(НеоборотныйАктив) БИ.ПолучитьСубконто(НеоборотныйАктив) Просто Отчет у меня выводится Как захочет клиент Хочет (Местохранения,НА) а захочет (На,местохранения) в первом случае Иванов 1500 Иванов Машина 1000 Иванов станок 500 и т.д. а вот во втором не очень вот и думаю |
|||
14
catena
31.05.12
✎
20:27
|
Потому что либо там текст, либо одна и та же машина.
|
|||
15
welwel
31.05.12
✎
21:18
|
(13) для этой цели логичнее задать нужные условия перед выполнением запроса (порядок следования группировок) и обойтись вообще без ТЗ
|
|||
16
КонецЦикла
31.05.12
✎
21:55
|
Можно загрузить в индексированную таблицу значений и группировать (1cpp.ru)
Для сортировки нужна служебная колонка либо другая подготовка данных (чтобы получить уже готовое) |
|||
17
bonyakr
01.06.12
✎
11:25
|
Процедура Сформировать()
тбОтчет = СоздатьОбъект("ТаблицаЗначений"); тбОтчет.НоваяКолонка("НА","Справочник.НеоборотныеАктивы"); тбОтчет.НоваяКолонка("Мол"); тбОтчет.НоваяКолонка("Стоим"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ВключатьСубсчета(-1); Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения); Ит.ИспользоватьСубконто(ВидыСубконто.НеоборотныеАктивы); Ит.ВыполнитьЗапрос(Дата1,Дата2,"10"); Ит.ВыбратьСубконто(); Пока Ит.ПолучитьСубконто()=1 Цикл ФлВыводИзнос =1; Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = Ит.Субконто(2).ТекущийЭлемент(); тбОтчет.МОЛ = Ит.Субконто(1); тбОтчет.Стоим = Ит.СНД(); КонецЦикла; КонецЦикла; тбОтчет.Свернуть("НА,Мол","Сотим"); тбНА = Создатьобъект("ТаблицаЗначений"); тбОтчет.Выгрузить(тбНА); тбНА.Свернуть("На","Стоим"); тбНА.ВыбратьСтроки(); Пока тбНа.ПолучитьСтроку() =1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = тбНа.На; тбОтчет.Мол = ""; тбОтчетюСтоим = Ит.СНД(); КонецЦикла; тбОтчет.Сортировать("НА,МОЛ"); тбОтчет.ВыбратьСтроку(); КонецПроцедуры вот вам кусок кода где я здесь в колонку НА передаю строку |
|||
18
1Сергей
01.06.12
✎
11:37
|
(17) не проще ли было поменять выборку субконто местами и не париться с ещё одной таблицей?
|
|||
19
1Сергей
01.06.12
✎
11:39
|
(18)+ у тебя во втором цикле строка
тбОтчетюСтоим = Ит.СНД(); будет на каждый НА ставить стоимость всех НА |
|||
20
del123
01.06.12
✎
11:45
|
А если задать сортировку так
тбОтчет.Сортировать("НА, Стоим, МОЛ") |
|||
21
bonyakr
01.06.12
✎
11:47
|
тбОтчетюСтоим = Ит.СНД();
тут я ошибся должно быть так : тбОтчет.Стоим = тбНА.Стоим; просто спешил написал выборку субконто менять не могу |
|||
22
1Сергей
01.06.12
✎
11:50
|
(21) почему?
|
|||
23
bonyakr
01.06.12
✎
11:55
|
Просто этот код написан для примера
Демонстрирует случай в котором возникает ошибка при сортировке если у меня есть два НА с одинаковым названием. В самом отчете я не могу да и не хочу менять выборку субконто |
|||
24
bonyakr
01.06.12
✎
12:45
|
Ясно проблема пока решена методом добавления колонки "Код"
Процедура Сформировать() тбОтчет = СоздатьОбъект("ТаблицаЗначений"); тбОтчет.НоваяКолонка("НА"); тбОтчет.НоваяКолонка("Мол"); тбОтчет.НоваяКолонка("Стоим"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ВключатьСубсчета(-1); Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения); Ит.ИспользоватьСубконто(ВидыСубконто.НеоборотныеАктивы); Ит.ВыполнитьЗапрос(Дата1,Дата2,"10"); Ит.ВыбратьСубконто(); Пока Ит.ПолучитьСубконто()=1 Цикл ФлВыводИзнос =1; Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = Ит.Субконто(2); тбОтчет.МОЛ = Ит.Субконто(1); тбОтчет.Стоим = Ит.СНД(); КонецЦикла; КонецЦикла; тбОтчет.Свернуть("НА,Мол","Стоим"); тбНА = Создатьобъект("ТаблицаЗначений"); тбОтчет.Выгрузить(тбНА); тбНА.Свернуть("На","Стоим"); тбНА.ВыбратьСтроки(); Пока тбНа.ПолучитьСтроку() =1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = тбНа.На; тбОтчет.Мол = ""; тбОтчет.Стоим = тбНА.Стоим; КонецЦикла; тбОтчет.НоваяКолонка("Код"); тбОтчет.ВыбратьСтроки(); Пока тбОтчет.ПолучитьСтроку() =1 Цикл тбОтчет.Код = тбОтчет.На.Код; КонецЦикла; тбОтчет.Сортировать("НА,Код,МОЛ"); тбОтчет.ВыбратьСтроку(); КонецПроцедуры |
|||
25
1Сергей
01.06.12
✎
13:48
|
(24) код можно было ещё в обходе запроса заполнить
|
|||
26
catena
01.06.12
✎
19:52
|
Хехе.
Дико извиняюсь, отвыкла от семерки. Читаем СП:
Процедура Сформировать() тбОтчет = СоздатьОбъект("ТаблицаЗначений"); тбОтчет.НоваяКолонка("НА","Справочник.НеоборотныеАктивы"); тбОтчет.НоваяКолонка("Мол"); тбОтчет.НоваяКолонка("Стоим"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ВключатьСубсчета(-1); Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения); Ит.ИспользоватьСубконто(ВидыСубконто.НеоборотныеАктивы); Ит.ВыполнитьЗапрос(Дата1,Дата2,"10"); Ит.ВыбратьСубконто(); Пока Ит.ПолучитьСубконто()=1 Цикл ФлВыводИзнос =1; Ит.ВыбратьСубконто(2); Пока Ит.ПолучитьСубконто(2)=1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = Ит.Субконто(2).ТекущийЭлемент(); тбОтчет.МОЛ = Ит.Субконто(1); тбОтчет.Стоим = Ит.СНД(); КонецЦикла; КонецЦикла; тбОтчет.Свернуть("НА,Мол","Сотим"); тбНА = Создатьобъект("ТаблицаЗначений"); тбОтчет.Выгрузить(тбНА); тбНА.Свернуть("На","Стоим"); тбНА.ВыбратьСтроки(); Пока тбНа.ПолучитьСтроку() =1 Цикл тбОтчет.НоваяСтрока(); тбОтчет.НА = тбНа.На; тбОтчет.Мол = ""; тбОтчетюСтоим = Ит.СНД(); КонецЦикла; тбОтчет.Сортировать("НА*,МОЛ"); тбОтчет.ВыбратьСтроку(); КонецПроцедуры//******************************************* И фсё как надо. |
|||
27
AlexNew
01.06.12
✎
20:34
|
(26) Что это было? Откуда у (0) таблица значений? Бросьте комп, если бухать начали.
|
|||
28
catena
01.06.12
✎
21:06
|
(27)Код из (26) полностью авторский, отличие лишь в одном символе.
|
|||
29
AlexNew
01.06.12
✎
21:12
|
(28) Слава богу, я думал уже в 7 в типовых...
|
|||
30
bonyakr
05.06.12
✎
11:17
|
(26) Ну прочитайте первый пост
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |