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

1. user1194102 28.01.20 10:18 Сейчас в теме
Мне нужно изменить порядок номенклатуры в Счете на оплату, порядок д.б. в соответствии с порядком номенклатуры в Заказе покупателя (ЗП). Табличная часть счета перед печатью помещается (в обработке печати) в структуру. Алгоритм действий не сложный, добавить в данную структуру еще два поля например НомерСтрокиЗП и СтарыйНомерСтрокиСчета. Имея ссылку на ЗП, заполнить два новых поля и соответственно изменить поле Текущий номер строки Счета на номер строки ЗП (можно и не менять, не суть, тогда придется внести изменение в вывод параметров при печати). Вопрос каким образом упорядочить структуру по Новым номерам строк (по новому порядку строк номенклатуры)? Или другими словами имеется ли возможность упорядочивания структуры по выбранному значению поля, на подобии Таблицы значений?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. starik-2005 3172 28.01.20 12:37 Сейчас в теме
(1)
Табличная часть счета перед печатью помещается (в обработке печати) в структуру.
Она помещается в виде значения в ключ типа "Таблица". Значение - табличная значений, по всей видимости. Или как?

В структуру можно поместить одну строку табличной части, а как Вы помещаете туда несколько строк?

Если нужно именно при печати счета выводить строки в соответствии с заказом покупателя, то лучше в запросе, который возвращает таблицу для печати, произвести сортировку по номеру строки заказа, предварительно соединившись с заказом левым соединением:
Выбрать
  Что-то 
ИЗ Документ.Счет.Товары ТоварыСчета
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.Заказ.Товары ТоварыЗаказа
  ПО ТоварыСчета.Номенклатура = ТоварыЗаказа.Номенклатура И СцылкиСчетаИЗаказа
УПОРЯДОЧИТЬ ПО ТоварыЗаказа.НомерСтроки
Ну и - ежу понятно - фильтр в ГДЕ по счету.
user1194102; +1 Ответить
7. user1194102 28.01.20 13:06 Сейчас в теме
(6)
В структуру можно поместить одну строку табличной части, а как Вы помещаете туда несколько строк?
вы правы в структуре одна строка.

Если нужно именно при печати счета выводить строки в соответствии с заказом покупателя, то лучше в запросе, который возвращает таблицу для печати, произвести сортировку по номеру строки заказа
сортировки в запросе я умею делать, спасибо, мне казалось при выводе текущего документа на печать запрос "к самому себе" не нужен, достаточно просто обойти ТЧ текущего документа, но верю вам и посмотрю имеется ли в коде запрос.
2. user774630 28.01.20 10:22 Сейчас в теме
имеется ли возможность упорядочивания структуры по выбранному значению поля

Нет.

Особенности использования итераторов "Для каждого ..."
В 1С:Предприятии 8 существует универсальный способ обхода коллекций – итератор "Для каждого ...". Он может применяться для обхода большинства коллекций. Итератор позволяет получать в переменной с указанным именем поочередно все элементы коллекции.

К элементам некоторым коллекций в 1С:Предприятии 8 можно обращаться с помощью числового индекса. Для таких коллекций перебор элементов может осуществляться и итератором, и с помощью индекса. Примером такой коллекции является Массив.

Однако для некоторых коллекций обращение по индексу недоступно, так как коллекция не имеет определенной последовательности. В этих случаях итератор "Для каждого..." позволяет обойти коллекцию. Однако это не значит, что порядок выдачи элементов при обходе коллекции будет являться порядком элементов в коллекции. Если коллекция неупорядочена, то порядок обхода итератором "Для каждого..." в общем виде не определен, то есть может быть любым. Соответственно, для таких коллекций нельзя опираться на этот порядок в алгоритмах использующих коллекцию. Примером такой коллекции является Соответствие.

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

https://its.1c.ru/db/metod8dev/content/2605/hdoc
3. MuxaH 28.01.20 10:24 Сейчас в теме
Сама структура не сортируется, это просто пары ключ и значение. Но в значении структуры вполне может быть и таблица значений (или временное хранилище с таблицей значений если надо между клиентом и сервером передавать), а её уже сортируй как душе угодно.
user1194102; +1 Ответить
4. user1194102 28.01.20 11:06 Сейчас в теме
Спасибо, у меня ОФ, значит из вашего ответа можно сдалать два вывода:
1. Коллекция может находиться в массиве, а массив можно проиндексировать - да это следует проверить, хорошая идея (я об этом не подумал);
2. Коллекцию можно обойти и записать в ТаблицуЗначений, которую уже можно сортировать.
5. user1194102 28.01.20 12:29 Сейчас в теме
Оказалось, что массивы в 1С не индексируются по произвольному полю, видимо я 1С спутал с каким-то другим языком программирования или си или php.
8. user1194102 28.01.20 15:20 Сейчас в теме
Вопрос решился следующим образом. После запроса из документа к самому себе, создается Таблица значений, которая построчно записывается в Структуру и создается Массив.
Добавил колонку в таблицу значений, через функцию с запросом по ссылке к ЗП из текущей номенклатуры (предложение по изменению запроса было бы более трудоемким для тестирования, так как изменение порядка номенклатуры нужна для отдельных контрагентов, и группировка по номенклатуре в различных вариантах - номенклатура, наборы и т.д). Затем отсортировал по заданному полю (Номер строки ЗП) и все.
Поэтому спасибо всем за помощь и идеи по решению задачи.

Остался только риторический вопрос к разработчикам, зачем городить такой огород в алгоритме отчета, последовательно меняя 4 разных структуры с табличными значениями одного и того же документа?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот