Задать вопрос
Tosterer
@Tosterer
Новичок

Как упорядочить строки в печатной форме по выбору пользователя?

Уважаемые опытные 1с-ники, прошу помочь. Я только начала осваивать 1с и язык запросов. Пытаюсь решить следующую задачу: строки в печатной форме документа по выбору пользователя должны упорядочиваться:
а) по длине наименования товара,
б) по наименованию товара,
в) по цене.
Листинг модуля менеджера
Процедура Печать(ТабДок, Ссылка) Экспорт
	//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
	Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	РасходнаяНакладная.Дата,
	|	РасходнаяНакладная.Клиенты,
	|	РасходнаяНакладная.Номер,
	|	РасходнаяНакладная.Номенклатура.(
	|		НомерСтроки,
	|		Товар,
	|		Цена,
	|		Количество,
	|		Сумма
	|	)
	|ИЗ
	|	Документ.РасходнаяНакладная КАК РасходнаяНакладная
	|ГДЕ
	|	РасходнаяНакладная.Ссылка В (&Ссылка)
	|УПОРЯДОЧИТЬ ПО
	|	РасходнаяНакладная.Номенклатура.Количество УБЫВ";
	
	Запрос.Параметры.Вставить("Ссылка", Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();

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

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

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

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

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

		ВставлятьРазделительСтраниц = Истина;
	КонецЦикла;
	//}}
КонецПроцедуры
  • Вопрос задан
  • 4895 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@Dementor
программист, архитектор, аналитик
1) На форме размещаете "Поле переключателя" с вашими вариантами сортировок
2) В вашем тексте запросе вместо "РасходнаяНакладная.Номенклатура.Количество УБЫВ" пишите что-то типа "#РежимСортировки"
3) Чуть ниже делаете, в зависимости от выбранного пользователя режима сортировки, замену в тексте вашей метки на реальное поле с направлением сортировки. Типа:
Если ВариантСортировки = 0 Тогда
  СтрЗаменить(Запрос.Текст, "#РежимСортировки", "РасходнаяНакладная.Номенклатура.Количество УБЫВ");
ИначеЕсли ВариантСортировки = 1 Тогда
  СтрЗаменить(Запрос.Текст, "#РежимСортировки", "РасходнаяНакладная.Номенклатура.Количество ВОЗР");
КонецЕсли;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FreeArcher
Senior 1С; php, JS Starter
Нужно реализовать выбор самого способа сортировки. Это делать команду и перед началом формирования печатной формы показывать диалог с выбором варианта сортировки. Ну или где то на форме расположить реквизит с вариантом сортировки и передавать его в функцию печати. Ну а дальше менять запрос в зависимости от выбранного варианта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы