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

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


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С

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