Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хронологическая последовательность документов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
u_prog
Здравствуйте.
Помогите решить проблему.
Необходимо написать обработку для выполнения перепроведения документов за определенный период - аналог встроенной в системе функции перепроведения. Не буду объяснять зачем это нужно, есть определенные моменты в работе стандартной функции. Так вот для перепроведения необходимо выстроить все документы в хронологическом порядке. Насколько я понимаю специально для определения документа на оси времени есть метод МоментВремени. Но при сортировке по этому полю наблюдается не совсем хронологический порядок документов - некоторые документы в конце списка имеют более раннюю дату, чем документы средины списка.
Привожу код обработки. Подскажите что не так.

ТЗДокументы = Новый ТаблицаЗначений;
    ТЗДокументы.Колонки.Добавить("ДокСсылка");
    ТЗДокументы.Колонки.Добавить("Момент");
    Состояние("Создание списка документов...");
    Для Каждого Док из Метаданные.Документы Цикл
        Если Док.Имя = "УстановкаСоответствияСчетовБУиНУ" или Док.Имя = "УстановкаСоответствияСчетовБУиМСФО" Тогда
            Продолжить;
        КонецЕсли;
        Запрос = Новый Запрос;
        Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "","", "ОБЪЕДИНИТЬ ВСЕ") + "
        |
        |ВЫБРАТЬ
        |    Документ" + Док.Имя + ".Ссылка,
        |    Документ" + Док.Имя + ".МоментВремени
        |ИЗ
        |    Документ." + Док.Имя + " КАК " + "Документ" + Док.Имя + "
        |ГДЕ Документ" + Док.Имя + ".Дата >= &ДатаС И Документ" + Док.Имя + ".Дата <= &ДатаПо
        | И Документ" + Док.Имя + ".Проведен
        |";
        Запрос.УстановитьПараметр("ДатаС", ДатаС);
        Запрос.УстановитьПараметр("ДатаПо", ДатаПо);
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            СтрТЗДокументы = ТЗДокументы.Добавить();
            СтрТЗДокументы.ДокСсылка = Выборка.Ссылка;
            СтрТЗДокументы.Момент = Выборка.МоментВремени;
        КонецЦикла;
    КонецЦикла;
    Состояние("Сортировка списка документов...");
    ТЗДокументы.Сортировать("Момент");
    Для Каждого Стр Из ТЗДокументы Цикл
        ДокОбъект = Стр.ДокСсылка.ПолучитьОбъект();
        Состояние("Перепроведение " + Стр.ДокСсылка);
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Исключение
                Сообщить(ОписаниеОшибки());
            Продолжить;
        КонецПопытки;
    КонецЦикла;


Заранее спасибо


 i 

Выделяйте код
 
sava1
Из описания МоментВремени - документы проведенные в одну и ту же секунду располагаются в произвольном порядке, а не в порядке их физического создания (как было в 7.7).
Vofka
sava1, если не секрет, а где такое описание вы взяли? smile.gif
sava1
необходимо зарегистрироваться для просмотра ссылки
Zaval
Попробуйте в Сортировать() указать второй параметр - сейчас у Вас моменты сраввниваются по строковому представлению.
u_prog
Цитата(Zaval @ 18.09.13, 10:03) необходимо зарегистрироваться для просмотра ссылки
Попробуйте в Сортировать() указать второй параметр - сейчас у Вас моменты сраввниваются по строковому представлению.



Я так понимаю достаточно написать во так
ТЗДокументы.Сортировать("Момент"), Новый СравнениеЗначений);

По крайней мере так все документы отсортированы правильно. Работает!
Спасибо!!!

Цитата(Zaval @ 18.09.13, 10:03) необходимо зарегистрироваться для просмотра ссылки
Попробуйте в Сортировать() указать второй параметр - сейчас у Вас моменты сраввниваются по строковому представлению.


Извините, скобка там лишняя, конечно же. Во так
ТЗДокументы.Сортировать("Момент", Новый СравнениеЗначений);
Vofka
sava1, а официального источника нету?
sava1
не искал и не проверял

необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.