Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Сортировать выделенные документы в форме списка по возрастанию даты?

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

СписокДок = Новый ТаблицаЗначений;
    //ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100));

    СписокДок.Колонки.Добавить("МоментВремени");
    СписокДок.Колонки.Добавить("Документ");
    СписокДок.Колонки.Добавить("ДокументТип");
    Для Каждого ТекСтр Из ЭтаФорма.ПодчиненныеЭлементы.Список.ВыделенныеСтроки Цикл
        СтрТЗ = СписокДок.Добавить();
        СтрТЗ.Документ = ТекСтр.Регистратор.Ссылка;
        СтрТЗ.МоментВремени = СтрТЗ.Документ.МоментВремени();
        СтрТЗ.ДокументТип = ТипЗнч(СтрТЗ.Документ);
    КонецЦикла;
    СписокДок.Свернуть("МоментВремени,Документ,ДокументТип",);
    МассивТипов = Новый Массив;
    Для каждого СтрТЗ Из СписокДок Цикл
        Если МассивТипов.Найти(СтрТЗ.ДокументТип) = Неопределено Тогда
            МассивТипов.Добавить(СтрТЗ.ДокументТип);
        КонецЕсли; 
    КонецЦикла; 
    СписокДок.Колонки.Добавить("Ссылка",Новый ОписаниеТипов(МассивТипов));
    Для каждого СтрТЗ Из СписокДок Цикл
        СтрТЗ.Ссылка = СтрТЗ.Документ;
    КонецЦикла; 
    //СписокДок.Сортировать("МоментВремени Убыв");

    ЗапросДок = Новый Запрос(
    
    "ВЫБРАТЬ
    |    ТЗ.Ссылка КАК Ссылка
    |ПОМЕСТИТЬ Таблица
    |ИЗ
    |    &ТабДок КАК ТЗ
    |;
    |
    ///////////////////////////////////////////////

    |ВЫБРАТЬ
    |   Таблица.Ссылка
    |ИЗ
    |   Таблица КАК Таблица
    |
    |СГРУППИРОВАТЬ ПО
    |   Таблица.Ссылка
    |УПОРЯДОЧИТЬ ПО
    |    Таблица.Ссылка"
    );
    ЗапросДок.УстановитьПараметр("ТабДок",СписокДок);
    
    РезультатЗапрос = ЗапросДок.Выполнить().Выгрузить();

В результате все та же сортировка по Типу (сортирует по имени метаданных) + Внутренний идентификатор (не дата+время).
   mistеr
 
17 - 25.03.19 - 12:44
(16) АВТОУПОРЯДОЧИВАНИЕ
   pvase
 
18 - 25.03.19 - 12:57
(17) Спасибо, то что надо.
   Cyberhawk
 
19 - 25.03.19 - 13:32
Которое конечно же не гарантирует, что два документа, имеющие одну и ту же дату, будут упорядочены как надо автору. Иначе бы и порядок по дате подошел.
   pvase
 
20 - 25.03.19 - 14:37
(19) Вполне достаточно, ведь 1С при групповом перепроведении скорее так же получит список документов.
   Cyberhawk
 
21 - 25.03.19 - 14:40
(20) Конечно же нет, т.к. сортировка с автоупорядочиванием - это просто / доступно для нубов, но не для хайлоада. В общем случае даже вендор не рекомендует использовать это.
   pvase
 
22 - 26.03.19 - 09:52
(21) Допустим, но чтобы картина была полной желательно предложить правильное решение. Буду очень признателен за такое решение.
   Cyberhawk
 
23 - 26.03.19 - 10:04
(22) Достаточно знать / помнить один постулат: документы, созданные в одну и ту же секунду, располагаются на временной оси в произвольном порядке. Даже одного и того же типа. Т.е. взглянув в БД на пару документов, имеющих одинаковую дату-время, ты никак не можешь _всегда_ установить, в какой последовательности их ввели. Да, зачастую в пределах одного сеанса и одного вида документов их УИДы будут возрастать, но это частный случай, не покрывающий и поэтому не дающий гарантию 100% узнать последовательность ввода.
Из этого постулата следует, что упорядочивание по моменту времени тоже не имеет смысла там, где нужно достоверное управление порядком.
Из этого следует, что достаточно упорядочивания по дате-времени, плюс ручное управление порядком по типу документа.
   mistеr
 
24 - 26.03.19 - 16:14
(23) Упорядочивание по моменту имеет смысл, т.к. будет совпадать с порядком в разных стандартных процедурах перепроведения, а также с визуальным порядком в журналах.

А вот введение ручного управления там, где оно не требуется, по-моему смысла не имеет. Если оно все же потребуется пользователю, он легко сдвинет док на +/- секунду.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует