# Форум 1С > Общие вопросы по 1С - Предприятие >  Сортировка строк в печатной форме документа по выбору пользователя

## 10vital08

Добрый день! 
Ситуация такая: 
я хочу организовать сортировку строк в печатной форме документа по выбору пользователя, а именно по: наименованию номенклатуры, длине наименования номенклатуры. 
Подскажите пожалуйста, что для этого нужно сделать? 

Вот исходный модуль печати: 
Процедура Печать(ТабДок, Ссылка) Экспорт
  //{{_КОНСТРУКТОР_ПЕЧАТИ(Печат  )

   Макет = Документы.Реализация_товар  ов.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   Реализация_товаров.Дата,
   |   Реализация_товаров.Контраг  ент,
   |   Реализация_товаров.Номер,
   |   Реализация_товаров.Товары.(
   |      НомерСтроки,
   |      Номенклатура,
   |      Количество,
   |      Цена,
   |      Сумма
   |   )
   |ИЗ
   |   Документ.Реализация_товаро  в КАК Реализация_товаров
   |ГДЕ
   |   Реализация_товаров.Ссылка В (&Ссылка)";
   Запрос.Параметры.Вставить("  Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать()  ;

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заг  ловок");
   Шапка = Макет.ПолучитьОбласть("Шап  а");
   ОбластьТоварыШапка = Макет.ПолучитьОбласть("Тов  рыШапка");
   ОбластьТовары = Макет.ПолучитьОбласть("Тов  ры");
   ТабДок.Очистить();

   ВставлятьРазделительСтран  иц = Ложь;
   Пока Выборка.Следующий() Цикл
      Если ВставлятьРазделительСтран  иц Тогда
         ТабДок.ВывестиГоризонталь  ыйРазделительСтраниц();
      КонецЕсли;

      ТабДок.Вывести(ОбластьЗаго  ловок);

      Шапка.Параметры.Заполнить(  ыборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьТова  рыШапка);
      ВыборкаТовары = Выборка.Товары.Выбрать();
      Пока ВыборкаТовары.Следующий() Цикл
         ОбластьТовары.Параметры.За  полнить(ВыборкаТовары);
         ТабДок.Вывести(ОбластьТова  ры, ВыборкаТовары.Уровень());
      КонецЦикла;

      ВставлятьРазделительСтран  иц = Истина;
   КонецЦикла;
  //}}

КонецПроцедуры

----------


## avm3110

> Добрый день! 
> Ситуация такая: 
> я хочу организовать сортировку строк в печатной форме документа по выбору пользователя, а именно по: наименованию номенклатуры, длине наименования номенклатуры.


(задумчиво) а по "длине наименования номенклатуры" - это что за изврат? Никогда не встречал такого :confused:

Ну а так - переходи на СКД и там для пользователя будет уйму плюшек и бантиков, которые тот сам сможет прикручивать без привлечения программистов.


А тут, для "нормальных сортировок", хорошо бы вначале сделать нормальный запрос. Затем в зависимости от "хотелок пользователя" (установленных опций) просто модифицируется программно текст запроса (вставляется секция "Сортировать ПО" с указанием по каким полям сортировать.

----------

10vital08 (17.02.2017)

----------


## 10vital08

> (задумчиво) а по "длине наименования номенклатуры" - это что за изврат? Никогда не встречал такого :confused:.


у меня задание такое, нужно сделать такую сортировку

----------


## alexandr_ll

> у меня задание такое, нужно сделать такую сортировку


ВыборкаТовары - есть таблица значений, сортируй ее как хочешь. При желании добавить колонки, например длина.

----------


## 10vital08

> ВыборкаТовары - есть таблица значений, сортируй ее как хочешь. При желании добавить колонки, например длина.


Что то типа такого?

НовыйЗапрос = Новый Запрос;
		НовыйЗапрос.Текст = 
		"ВЫБРАТЬ
	|	Реализация_товаров.Дата,
	|	Реализация_товаров.Контраг  ент,
	|	Реализация_товаров.Номер,
	|	Реализация_товаров.Товары.(
	|		НомерСтроки,
	|		Номенклатура КАК Номенклатура,
	|		Количество,
	|		Цена,
	|		Сумма
	|	)
	|ИЗ
	|	Документ.Реализация_товаро  в КАК Реализация_товаров";
		ТЗ = НовыйЗапрос.Выполнить().Выг  рузить();

		ТЗ = Новый ТаблицаЗначений;
		ТЗ.Колонки.Добавить("Количе  ствоСимволов");
		ТЗ.Колонки.Добавить("Номенк  латура");
		ВыборкаТовары = Справочники.Номенклатура.В  ыбрать();
		ОбластьТовары = Документы.Реализация_товар  ов.Выбрать();

		Пока ВыборкаТовары.Следующий() Цикл
			НоваяСтрока = ТЗ.Добавить();
			ЗаполнитьЗначенияСвойств(  оваяСтрока,ВыборкаТовары);
			КолСимволов = СтрДлина(ВыборкаТовары.Наи  менование);
			НоваяСтрока.КоличествоСим  олов = КолСимволов;
			КонецЦикла;
	    ТЗ.Сортировать("Количество  имволов Возр");
		для каждого СтрокаТаб из ТЗ Цикл      

		КонецЦикла;

----------


## avm3110

> Что то типа такого?


(задумчиво) а смысл в изврате до такой степени? вначале делать запрос "без сортировки", затем результат запроса перегонять в цикле в ТЗ и затем сортировать ТЗИИ

----------


## 10vital08

Я пока не особо шарю в этом(новичок). Подскажите, как правильно, пожалуйста

----------


## avm3110

Правильно - перейти на СКД (систему компоновки данных), но не похоже, чтобы вы это смогли сделать сами. А отдать эту задачу более-менее нормальному 1С-нику - нельзя?

Тут нужно менять как макет, так и модуль печатной формы документа. В двух словах не опишешь

----------


## 10vital08

Мне дали это задание на ваканаксию стажера

----------


## 10vital08

Вакансию

----------


## avm3110

Ясно, но либо у конторы завышенные ожидания к стажеру, либо у тебя явный ноль пока в 1ске.


организовать сортировку строк в печатной форме документа по выбору пользователя, а именно по: наименованию номенклатуры, длине наименования номенклатуры. 
----------------------------------------------
1.Нужно организовать диалог с пользователем, чтобы он указал тип сортировки
2. нужно переработать запрос, чтобы его можно было бы менять по данным пользователя

Собственно говоря - все, если в теме, работы на 10 минут с перекуром в конфигураторе (через форум много траха и не полная информация).

----------

