Вход | Регистрация

Форумы на Кубань.Ру


1С:Предприятие ::

Метки: 

Подскажите, совсем запуталась с Сортировать()

Ø
Я
  
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
Ищешь все строчки, в которых ДобавляетсяЗначение в первый список. Копируешь каждую из них, заменяешь:
 в параметрах этого метода одну дату на другую
 идентификатор одного объекта СписокЗначений на идентификатор другого.
Потом ищешь строчки, в которых первый список используется для вывода на печать. И заменяешь там его идентификатор на идентификатор другого.
Вот, как-то так.
   1cNick
7 - 14.02.01 - 16:04
А по-моему всетаки проще запросом ...
Процедура Сформировать()
	Перем Запрос, ТекстЗапроса;
	Запрос = СоздатьОбъект("Запрос");
//разумеется нужно задать Дата1 и Дата2, причем в этот интервал
        //документы попадают только по реквизиту ДатаДок
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с Дата1 по Дата2;
	|ОбрабатыватьДокументы все;
	|Обрабатывать НеПомеченныеНаУдаление;
	|_ТекущийДокумент = Документ.СчетФактура.ТекущийДокумент;
	|_ДатаСчетаФактуры = Документ.КомплектЧеков.Первый;
	|_ДатаПрихода = Документ.СчетФактура.ДатаПрихода;
	|Группировка _ДатаСчетаФактуры;
	|Группировка Документ;
	|//}}ЗАПРОС
	;
// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;
	Пока Запрос.Группировка("_ДатаСчетаФактуры") = 1 Цикл
	 Пока Запрос.Группировка("Документ") = 1 Цикл
	 //а уже здесь можно получить доступ к любому реквизиту
                //документа и выводить на печать
	 //например :
                //Запрос._ТекущийДокумент.ЛюбойРеквизитДокумента
	 КонецЦикла;
        КонецЦикла;
 
КонецПроцедуры
   1cNick
8 - 14.02.01 - 16:07
Sorry,
вместо строчки
|_ДатаСчетаФактуры = Документ.КомплектЧеков.Первый;
я имел ввиду
|_ДатаСчетаФактуры = Документ.СчетФактура.ДатаСчетаФактуры;
   Vladimir Kozlov
9 - 14.02.01 - 16:12
Это, никаких ТаблицЗначений и второго СпискаЗначений не нужно - просто при заполнении своего списка пишешь первым параметром документ, а вторым (который "представление") то, по чему требуется сортировать, например дату. После формирования списка выполняешь Список.СортироватьПоПредставлению(0) и имеешь требуемый результат ... я этим успешно пользуюсь еще со времен 7.5 ...
   Пудель
10 - 14.02.01 - 16:31
Владимир, это при условии, что представление списка ещё никак не используется. А вдруг уже?
 
  Рекламное место пустует
   Аля
11 - 15.02.01 - 10:16
подняла ветку толко что бы сказать отдельное спасибо Владимиру Козлову, поскольку сделав по его совету получила то что нужно.
2 Пудель- Вашу совет учту на будущее, когда представление списка будет использоватся не единажды..спасибо.
   1cNick
12 - 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 как-то по разному хранит и обрабатывает строки обыкновенные типа "..." и строки даты типа '...' . Я подробностей не знаю, может, кто расскажет?
   Alexander
14 - 15.02.01 - 22:44
to 1CNick
А ты формат строки задай и сортировка пойдет уже иначе!
Например: формат(ПД,"#ДГГГГММДД");
Я удивляюсь! Что совсем не пользуешся форматированием?



Список тем форума

Форум Территория 1С

Рекламное место пустует   Рекламное место пустует
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует