![]() |
![]() |
![]() |
|
Подскажите, совсем запуталась с Сортировать() Ø |
☑ | ||
---|---|---|---|---|
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
А ты формат строки задай и сортировка пойдет уже иначе! Например: формат(ПД,"#ДГГГГММДД"); Я удивляюсь! Что совсем не пользуешся форматированием? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |