|
Сортировать выделенные документы в форме списка по возрастанию даты? | ☑ | ||
---|---|---|---|---|
0
pvase
22.03.19
✎
17:44
|
Есть одна проблема. В Управляемой форме списка документов человек выделяет некоторый список документов. Как этот список отсортировать по дате для последовательного проведения?
Пробую так: СписокДок = Новый ТаблицаЗначений; //ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)); СписокДок.Колонки.Добавить("МоментВремени"); СписокДок.Колонки.Добавить("Документ"); Для Каждого ТекСтр Из ЭтаФорма.ПодчиненныеЭлементы.Список.ВыделенныеСтроки Цикл СтрТЗ = СписокДок.Добавить(); СтрТЗ.Документ = ТекСтр.Регистратор.Ссылка; СтрТЗ.МоментВремени = Новый МоментВремени(СтрТЗ.Документ.Дата,СтрТЗ.Документ); КонецЦикла; СписокДок.Свернуть("МоментВремени,Документ",); СписокДок.Сортировать("МоментВремени Убыв"); Но чего то не сортирует по дата+Время. Подскажите, в чем может быть проблема? Спасибо. |
|||
1
Cyberhawk
22.03.19
✎
17:48
|
Как понимаешь, что не сортирует?
|
|||
2
pvase
22.03.19
✎
17:59
|
(1) Хочу чтобы сортировало документы в порядке Дата+Время + Момент времени. В общем в том порядке, в котором они идут в журнале при сортировке по колонке Период.
|
|||
3
Cyberhawk
22.03.19
✎
18:24
|
Ты точно отвечаешь на мой вопрос?
|
|||
4
pvase
22.03.19
✎
18:39
|
(3) Смотрю в отладчике СписокДок и вижу что не отсортировало.
|
|||
5
pvase
22.03.19
✎
18:39
|
+так как надо.
|
|||
6
mistеr
22.03.19
✎
18:40
|
(2) При сортировке по колонке Период (надеюсь это Дата документов?) момент времени не учитывается. При отсутствии сортировки будет по моменту.
|
|||
7
mistеr
22.03.19
✎
18:42
|
(0) Предлагаю сортировать запросом, с условием "ГДЕ Ссылка В (&МассивСсылок)".
|
|||
8
pvase
22.03.19
✎
18:42
|
(6) Не проходит, Для Каждого ТекСтр Из ЭтаФорма.ПодчиненныеЭлементы.Список.ВыделенныеСтроки Цикл в порядке выбора пользователем.
|
|||
9
pvase
22.03.19
✎
18:42
|
(7) Спасибо, уже так и делаю.
|
|||
10
pvase
22.03.19
✎
18:44
|
(9) Только проблема в том, что типов документов может бвть не 1, и даже не 10.
|
|||
11
pvase
22.03.19
✎
18:45
|
Предполагаю, что Сортировка в таблице значений не может сортировать по МоментВремени, а по "Документ" сортирует как по строке, сначала имя документа, а потом его дата.
|
|||
12
mistеr
22.03.19
✎
18:50
|
(8) Это я не про твой список, а про то, как сортируется в форме.
|
|||
13
pvase
25.03.19
✎
10:54
|
Может в 1С 8 можно как то получить ДатуВремя документа с миллисекундами? Думаю, что это может решить вопрос.
|
|||
14
SleepyHead
гуру
25.03.19
✎
10:56
|
Момент времени же содержит ссылку, оттого твоя сортировка и слетает.
|
|||
15
mistеr
25.03.19
✎
11:10
|
(13) Что, (7) не получается?
|
|||
16
pvase
25.03.19
✎
12:36
|
(15) Не получается отсортировать. Делаю так:
СписокДок = Новый ТаблицаЗначений; //ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)); СписокДок.Колонки.Добавить("МоментВремени"); СписокДок.Колонки.Добавить("Документ"); СписокДок.Колонки.Добавить("ДокументТип"); Для Каждого ТекСтр Из ЭтаФорма.ПодчиненныеЭлементы.Список.ВыделенныеСтроки Цикл СтрТЗ = СписокДок.Добавить(); СтрТЗ.Документ = ТекСтр.Регистратор.Ссылка; СтрТЗ.МоментВремени = СтрТЗ.Документ.МоментВремени(); СтрТЗ.ДокументТип = ТипЗнч(СтрТЗ.Документ); КонецЦикла; СписокДок.Свернуть("МоментВремени,Документ,ДокументТип",); МассивТипов = Новый Массив; Для каждого СтрТЗ Из СписокДок Цикл Если МассивТипов.Найти(СтрТЗ.ДокументТип) = Неопределено Тогда МассивТипов.Добавить(СтрТЗ.ДокументТип); КонецЕсли; КонецЦикла; СписокДок.Колонки.Добавить("Ссылка",Новый ОписаниеТипов(МассивТипов)); Для каждого СтрТЗ Из СписокДок Цикл СтрТЗ.Ссылка = СтрТЗ.Документ; КонецЦикла; //СписокДок.Сортировать("МоментВремени Убыв"); ЗапросДок = Новый Запрос( "ВЫБРАТЬ | ТЗ.Ссылка КАК Ссылка |ПОМЕСТИТЬ Таблица |ИЗ | &ТабДок КАК ТЗ |; | |/////////////////////////////////////////////// |ВЫБРАТЬ | Таблица.Ссылка |ИЗ | Таблица КАК Таблица | |СГРУППИРОВАТЬ ПО | Таблица.Ссылка |УПОРЯДОЧИТЬ ПО | Таблица.Ссылка" ); ЗапросДок.УстановитьПараметр("ТабДок",СписокДок); РезультатЗапрос = ЗапросДок.Выполнить().Выгрузить(); В результате все та же сортировка по Типу (сортирует по имени метаданных) + Внутренний идентификатор (не дата+время). |
|||
17
mistеr
25.03.19
✎
12:44
|
(16) АВТОУПОРЯДОЧИВАНИЕ
|
|||
18
pvase
25.03.19
✎
12:57
|
(17) Спасибо, то что надо.
|
|||
19
Cyberhawk
25.03.19
✎
13:32
|
Которое конечно же не гарантирует, что два документа, имеющие одну и ту же дату, будут упорядочены как надо автору. Иначе бы и порядок по дате подошел.
|
|||
20
pvase
25.03.19
✎
14:37
|
(19) Вполне достаточно, ведь 1С при групповом перепроведении скорее так же получит список документов.
|
|||
21
Cyberhawk
25.03.19
✎
14:40
|
(20) Конечно же нет, т.к. сортировка с автоупорядочиванием - это просто / доступно для нубов, но не для хайлоада. В общем случае даже вендор не рекомендует использовать это.
|
|||
22
pvase
26.03.19
✎
09:52
|
(21) Допустим, но чтобы картина была полной желательно предложить правильное решение. Буду очень признателен за такое решение.
|
|||
23
Cyberhawk
26.03.19
✎
10:04
|
(22) Достаточно знать / помнить один постулат: документы, созданные в одну и ту же секунду, располагаются на временной оси в произвольном порядке. Даже одного и того же типа. Т.е. взглянув в БД на пару документов, имеющих одинаковую дату-время, ты никак не можешь _всегда_ установить, в какой последовательности их ввели. Да, зачастую в пределах одного сеанса и одного вида документов их УИДы будут возрастать, но это частный случай, не покрывающий и поэтому не дающий гарантию 100% узнать последовательность ввода.
Из этого постулата следует, что упорядочивание по моменту времени тоже не имеет смысла там, где нужно достоверное управление порядком. Из этого следует, что достаточно упорядочивания по дате-времени, плюс ручное управление порядком по типу документа. |
|||
24
mistеr
26.03.19
✎
16:14
|
(23) Упорядочивание по моменту имеет смысл, т.к. будет совпадать с порядком в разных стандартных процедурах перепроведения, а также с визуальным порядком в журналах.
А вот введение ручного управления там, где оно не требуется, по-моему смысла не имеет. Если оно все же потребуется пользователю, он легко сдвинет док на +/- секунду. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |