Как вывести на Печать документ с выбранной сортировкой?
Уважаемые программисты. Я только пытаюсь стать программистом. У меня такой вопрос.
В форме документа сделала сортировку по упорядочиванию товаров по Наименованию и Цене.
Однако при печати выбранная сортировка не срабатывает.
Как сделать, чтобы в печатной форме товар выводился согласно сортировке?
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Еще раз здравствуйте
Задание звучит следующим образом:
----------------------------------------------------------------------------------
Сделать печатную форму накладной. Строки в печатной форме по выбору пользователя могут быть упорядочены (по возрастанию):
- по длине наименования товара
- по наименованию товара
- по цене
Для решения данного пункта нельзя:
- использовать в запросе конструкцию ДлинаСтроки()
- добавлять реквизит ДлинаНаименования в справочник Товары
----------------------------------------------------------------------------------
Так вот....
По цене и наименованию я сделала.
Не могу сделать по Длине строке
Помогите, пожалуйста
lusamir, и сложить это с вычислением длины наименования в запросе, либо делать постобработкой данных, после запроса, где будете вычислять длину и потом таблицу по ней сортировать.
Sgr_A, постобработка не нужна - достаточно расчета в запросе с помощью строковой функции:
Функция ДлинаСтроки (StringLength) ДлинаСтроки(<Строка>)
Данная функция получает длину строки. Строка - Строка. Строка, длину, которой нужно получить. Возвращаемое значение: Число (длина - 12).
lusamir, вы же в курсе, что нарушаете правила данного ресурса? Если бы вы задали вопрос в другом, менее дружественном, разделе, то ваш вопрос давно был бы удален, а вас могли бы забанить. https://qna.habr.com/help/rules#5.12
Задавайте обезличенные технические вопросы. Например: какие есть варианты отсортировать по длине строки результаты запроса.
И вам тут уже дали ответ: 1) добавляете колонку для длинны, 2) делайте цикл по выгрузке из запроса с расчетом длинны и помещением в нужную колонку, 3) сортируйте по новой колонке
lusamir, что именно из моего комментария вы не поняли? Что вы нарушитель и тут запрещено просить помощи для прохождения собеседований или детальное описание реализации задачи с учетом ограничений от вашего потенциального работодателя?
lusamir, главное задавайте вопрос не в лоб с описанием задачи, а сфокусируйтесь на проблеме.
Как тут - вам нельзя делать сортировку в запросе, но в печатную форму нужно вывести отсортированным - следовательно сортировка должна быть между этими событиями. И самым быстрым вариантом является выгрузка в таблицу и добавление новой колонки (альтернативы есть - создание копии таблицы и перегонка туда записей, или явные переносы записей на указанный номер строки - но по скорости будет дольше за счет ограничения в выборе алгоритмов сортировки и код будет засорен служебными действиями).
Давно просим у 1С сортировку по произвольному выражению вместо колонки и приводим им подобные примеры (не с длинной названия, а по результату взаимосвязанных полей, например со сложными скидками и налогами), но они упорно отказывают ((
// Этот код пишу в самой процедуре печати
Таб.Колонки.Добавить("ДлинаТовара");
Для каждого Стр из Таб Цикл
Стр=Таб.Добавить();
Стр.Длина=СтрДлина(Стр.Товар);
Конецикла
\\Запрос где реализуется сортировка по колонке ДлинаТовара
Таб = Запрос.Выполнить().Выгрузить();
Таб.Колонки.Добавить("ДлинаТовара");
Для каждого Стр из Таб Цикл
Стр.Длина=СтрДлина(Стр.Товар);
Конецикла;
Таб.Сортировать("ДлинаТовара");
По описанию вашей задачи (из комментария) Вам, предполагаю, надо:
1. Сделать взаимодействие с пользователем при печати. Чтобы задать ему вопрос, какой метод сортировки нужен, и в зависимости от выбора использовать эти данные дальше; Пример запроса в поисковике
2. Решить задачу с вычислением длинны наименования в запросе;