Имя: Пароль:
1C
 
Подскажите, совсем запуталась с Сортировать()
Ø
0
 
14.02.01
15:14
конфа переписанная комплекс 7,7.
суть проблемы: реестр полученных с-ф.
формируется по дате поступления(ДатаПрихода) с-ф(от поставщика), но на печать выводится дата выписки(ДатаСчетаФактуры) с-ф(у поставщика) необходимо всего навсего отсортировать именно по дате выписки.
если использовать Сортировать(0,1) тогда сортировка идет по дате формирования реестра то есть по дате поступлени с-ф.
как сортирнуть по дате выписки?
1 Пудель
 
14.02.01
15:19
К какому объекту применяется метод Сортировать?
2 Аля
 
14.02.01
15:24
по обьекту СписокЗначений
3 Пудель
 
14.02.01
15:27
Аля, значит, нужно заносить в этот СписокЗначений именно дату выписки. Но ещё лучше добавить ещё один СписокЗначений, который будет заполняться параллельно с первым - и в форме диалога выбирать, по какой из дат упорядочивать.
Вообще, ещё можно таблицу значений сочинить. Или запрос. В общем, море вариантов.
4 Аля
 
14.02.01
15:39
спасибо за советы но скорее всего ТЗ отпадает
можно ли поконкретний про второй СписокЗначений?
5 Ал
 
14.02.01
15:43
А может "таблицу значений" использовать?
6 Пудель
 
14.02.01
15:46
Ищешь все строчки, в которых ДобавляетсяЗначение в первый список. Копируешь каждую из них, заменяешь:
 в параметрах этого метода одну дату на другую
 идентификатор одного объекта СписокЗначений на идентификатор другого.
Потом ищешь строчки, в которых первый список используется для вывода на печать. И заменяешь там его идентификатор на идентификатор другого.
Вот, как-то так.
7 1cNick
 
14.02.01
16:04
А по-моему всетаки проще запросом ...
Процедура Сформировать()
Перем Запрос, ТекстЗапроса;
Запрос = СоздатьОбъект("Запрос");
//разумеется нужно задать Дата1 и Дата2, причем в этот интервал
        //документы попадают только по реквизиту ДатаДок
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата1 по Дата2;
|ОбрабатыватьДокументы все;
|Обрабатывать НеПомеченныеНаУдаление;
|_ТекущийДокумент = Документ.СчетФактура.ТекущийДокумент;
|_ДатаСчетаФактуры = Документ.КомплектЧеков.Первый;
|_ДатаПрихода = Документ.СчетФактура.ДатаПрихода;
|Группировка _ДатаСчетаФактуры;
|Группировка Документ;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка("_ДатаСчетаФактуры") = 1 Цикл
Пока Запрос.Группировка("Документ") = 1 Цикл
//а уже здесь можно получить доступ к любому реквизиту
                //документа и выводить на печать
//например :
                //Запрос._ТекущийДокумент.ЛюбойРеквизитДокумента
КонецЦикла;
        КонецЦикла;
 
КонецПроцедуры
8 1cNick
 
14.02.01
16:07
Sorry,
вместо строчки
|_ДатаСчетаФактуры = Документ.КомплектЧеков.Первый;
я имел ввиду
|_ДатаСчетаФактуры = Документ.СчетФактура.ДатаСчетаФактуры;
9 Vladimir Kozlov
 
14.02.01
16:12
Это, никаких ТаблицЗначений и второго СпискаЗначений не нужно - просто при заполнении своего списка пишешь первым параметром документ, а вторым (который "представление") то, по чему требуется сортировать, например дату. После формирования списка выполняешь Список.СортироватьПоПредставлению(0) и имеешь требуемый результат ... я этим успешно пользуюсь еще со времен 7.5 ...
10 Пудель
 
14.02.01
16:31
Владимир, это при условии, что представление списка ещё никак не используется. А вдруг уже?
11 Аля
 
15.02.01
10:16
подняла ветку толко что бы сказать отдельное спасибо Владимиру Козлову, поскольку сделав по его совету получила то что нужно.
2 Пудель- Вашу совет учту на будущее, когда представление списка будет использоватся не единажды..спасибо.
12 1cNick
 
15.02.01
10:47
А как насчет того, что СортироватьПоПредставлению() - сортирует
как строки, а ни как значения ?
Например,
Сорт = СоздатьОбъект("СписокЗначений");
Для Номер = 1 по 20 Цикл
Сорт.ДобавитьЗначение(Номер,Номер);
        КонецЦикла;
Сорт.СортироватьПоПредставлению();
Для Номер = 1 По Сорт.РазмерСписка() Цикл
Сообщить(Сорт.ПолучитьЗначение(Номер));
        КонецЦикла;
 отсортирует 1,10,11, ... ,19,2,20
тоже самое только с датами
Сорт = СоздатьОбъект("СписокЗначений");
Дата1 = '31.12.1999';
Дата2 = '02.01.2000';

        ПД = Дата1;
Пока ПД <= Дата2 Цикл
Сорт.ДобавитьЗначение(ПД,Строка(ПД));
         ПД = ПД + 1;
        КонецЦикла;
Сорт.СортироватьПоПредставлению();

Для Номер = 1 По Сорт.РазмерСписка() Цикл
Сообщить(Сорт.ПолучитьЗначение(Номер));
        КонецЦикла;
отсортирует 01.01.00, 02.01.00, 31.12.99
И что странно (очень) если вместо
     Сорт.ДобавитьЗначение(ПД,Строка(ПД)); поставить
     Сорт.ДобавитьЗначение(ПД,ПД);
то уже вроде отсортирует правильно 31.12.99, 01.01.00, 02.01.00
Почему же в первом случае, где Сорт.ДобавитьЗначение(Номер,Номер);
сортирует не как значение, а как строку. А в случае с датами как значение
все-таки формирует ... Непонятненько
13 Пудель
 
15.02.01
20:14
1cNick: Кажется, 1c как-то по разному хранит и обрабатывает строки обыкновенные типа "..." и строки даты типа '...' . Я подробностей не знаю, может, кто расскажет?
14 Alexander
 
15.02.01
22:44
to 1CNick
А ты формат строки задай и сортировка пойдет уже иначе!
Например: формат(ПД,"#ДГГГГММДД");
Я удивляюсь! Что совсем не пользуешся форматированием?