Имя: Пароль:
1C
1С v8
СКД. Как задать сортировку в функциях Массив или Соединить строки
,
0 ГдеСобака Зарыта
 
28.08.15
09:42
1. Где вообще почитать описание этих функций СКД-ных можно?
2.Надо вывести поле с типом строка(дата через формат()) списком значений по группировке и упорядочить по другому полю. В запросе сделал нужное мне упорядочивание. Но при использовании функции Массив() и СоединитьСтроки() они упорядочивание делают видимо свое. Условно имею:
"25.04.2015"
"16.05.2015"
Надо получить "25.04.2015, 16.05.2015", но в результате применения Массив() или СоединитьСтроки() получаю "16.05.2015, 25.04.2015".
Как получить нужный мне результат?
1 Nuobu
 
28.08.15
09:44
(0) Найди колонку "Выражение упорядочивания" для этого поля.
2 ГдеСобака Зарыта
 
28.08.15
10:05
(1) Пробовал, не работает
3 Живой Ископаемый
 
28.08.15
10:14
У меня есть предложение, но оно тебе не понравится, но если не найдешь чего лучше, в крайнем случае прибегнешь.

Суть в том, чтобы в СКД использовать вычисляемое поле, которое будет возвращать тебе строку  "25.04.2015, 16.05.2015" для нужной группировки. Формула вычисляемого поля будет такая:
МойМодуль.ФункцияВозвращающаяСтрокуДляГруппировкиСКД(ЗначениеГруппировки)

Теперь про саму функцию.
во-первых нужно будет СКД строить программно, то есть должна быть форма, с твоей кнопкой "СформироватьОтчет", по нажатию на которую прежде чем выполнить сформировать отчет выполнит практически тот же запрос, но только с целью сформировать вот эти склеенные строки.
Выполнишь запрос, и результат его поместишь в соотвествие - это будет твой кэш, к которому и будет обращаться
ФункцияВозвращающаяСтрокуДляГруппировкиСКД

КэшСклееныхСтрокДляГруппировки.Вставить(ЗначениеГруппировки, СклееннаяСтрокаДат).

В процедуре -
КэшСклееныхСтрокДляКруппировки.Получить(ЗначениеГруппировки)

Сам знаю что отвратительно.
4 patria0muerte
 
28.08.15
10:17
(0) 1. В конфигураторе Справка - Содержание - Система компоновки данных - Язык системы компоновки данных - функции языка системы компоновки данных
5 patria0muerte
 
28.08.15
10:19
В твоем случае должно сработать -
Упорядочить (Order)
Предназначена для упорядочивания элементов массива и таблицы значений.

Синтаксис:

Упорядочить(Выражение, НомераКолонок)

Параметры:

Выражение - Массив или ТаблицаЗначений, из которой нужно получить колонки;
НомераКолонок - (если выражение имеет тип ТаблицаЗначений) номера или имена (через запятую) колонок таблицы значений, по которым нужно упорядочить. Может содержать направление упорядочивания и необходимость автоупорядочивания: Убыв/Возр + Автоупорядочивание.
Возвращаемое значение: Массив или ТаблицаЗначений, с упорядоченными элементами.

Пример:

Упорядочить(ТаблицаЗначений(НомерТелефона, Адрес, ДатаЗвонка),"ДатаЗвонка Убыв");
6 Живой Ископаемый
 
28.08.15
10:22
круто... а 8.2 приходится извращаться.
7 Nuobu
 
28.08.15
10:22
(0) Только что проверил упорядочивание запросом. Всё получилось. Сортирует ровно так, как сказано сортировать в запросе, не смотрит в сторону СКД.
Может у тебя в настройках СКД оно сбивается?
Что в полях вычисления ресурсов пишешь?
8 patria0muerte
 
28.08.15
10:23
(6) Так это 8.2 и есть
9 patria0muerte
 
28.08.15
10:25
(0) Судя по тексту 2. ты сначала делаешь строку из даты, а потом упорядочиваешь. Может наоборот попробовать? )
10 Живой Ископаемый
 
28.08.15
10:26
в 8.2 нет функций ТаблицаЗначений и Массив
11 patria0muerte
 
28.08.15
10:26
(10) А где искал? Это ж не встроеного языка, это СКДшные функции.
12 Живой Ископаемый
 
28.08.15
10:28
В Ф1:
Функции языка выражений системы компоновки данных
Вычислить
ВычислитьВыражение
ВычислитьВыражениеСГруппировкойМассив
ВычислитьВыражениеСГруппировкойТаблицаЗначений
Уровень
НомерПоПорядку
НомерПоПорядкуВГруппировке
Формат
НачалоПериода
КонецПериода
ДобавитьКДате
РазностьДат
Подстрока
ДлинаСтроки
Год
Квартал
Месяц
ДеньГода
День
Неделя
ДеньНедели
Час
Минута
Секунда
Выразить
ЕстьNull
Функции общих модулей
Представление
Строка
ЗначениеЗаполнено
УровеньВГруппировке
13 Живой Ископаемый
 
28.08.15
10:29
а, правда есть "Строка" и в нее можно ТЗ или Массив передавать
14 ГдеСобака Зарыта
 
28.08.15
10:29
(7) а попробуй теперь сортировать в обратном порядке. Что будет?
15 patria0muerte
 
28.08.15
10:30
(12) Агрегатные функции смотри там рядом в справке
16 Живой Ископаемый
 
28.08.15
10:30
блин... вот это я лох.
17 ГдеСобака Зарыта
 
28.08.15
10:31
(5) у меня элементы массива поле дата, а сортировать нужно полю НомерСтроки
18 Nuobu
 
28.08.15
10:35
(14) Будет сортировка в том порядке, который установлен в запросе.
19 Nuobu
 
28.08.15
10:35
(18) Пробовал.
20 ГдеСобака Зарыта
 
28.08.15
10:36
(12) Кстати, ни функции массив(), ни соединитьСтроки() там нет
21 patria0muerte
 
28.08.15
10:37
(20) - (15)
22 Живой Ископаемый
 
28.08.15
10:37
2(20)Они в агрегатных

Агрегатные функции
Сумма
Количество
Количество различных
Максимум
Минимум
Среднее
Массив
ТаблицаЗначений
Свернуть
ПолучитьЧасть
Упорядочить
СоединитьСтроки
ГрупповаяОбработка

Агрегатные функции осуществляют некоторое действие над набором данных.
23 patria0muerte
 
28.08.15
10:39
В теории можно попробовать использовать функцию Упорядочить(ТаблицаЗначений(Дата, НомерСтроки), "НомерСтроки УБЫВ")

Но как тогда потом от номера строки избавиться - я не знаю
24 ГдеСобака Зарыта
 
28.08.15
10:48
(18),(19) на простой схеме с простой выборкой и правда работает. Но в моей замороченной пока никак не хочет. Спасибо буду копать дальше
25 Nuobu
 
28.08.15
10:50
(24) Тоже пробовал на простой схеме с двумя полями сортировки.
26 ГдеСобака Зарыта
 
28.08.15
12:15
Оказалось если получать поля в итоговом запросе через две точки, то сортировка глючит. Через одну все заработало
Всем спасибо
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.