|
Сортировка табличной части внешней обработкой | ☑ | ||
---|---|---|---|---|
0
егаис
08.11.19
✎
13:50
|
Запутался в 3 соснах
Обработка табличной части, нужно отсортировать ТЧ по Номенклатура.Код &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт СортироватьНаСервере(ВладелецФормы.Объект); КонецПроцедуры &НаСервере Процедура СортироватьНаСервере(ВладелецФормыОбъект) ОбъектФормы = ДанныеФормыВЗначение(ВладелецФормыОбъект, Тип("ДокументОбъект.ИнвентаризацияТоваровНаСкладе")); ТЗ = ОбъектФормы.Товары.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.НомерСтроки КАК НомерСтроки, | ТЗ.Номенклатура КАК Номенклатура, | ТЗ.СчетУчета КАК СчетУчета, | ТЗ.Количество КАК Количество, | ТЗ.КоличествоУчет КАК КоличествоУчет, | ТЗ.Цена КАК Цена, | ТЗ.ЦенаВРознице КАК ЦенаВРознице, | ТЗ.Сумма КАК Сумма, | ТЗ.СуммаУчет КАК СуммаУчет, | ТЗ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ТЗ.ФизЛицо КАК ФизЛицо |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.НомерСтроки КАК НомерСтроки, | ВТ.Номенклатура КАК Номенклатура, | ВТ.СчетУчета КАК СчетУчета, | ВТ.Количество КАК Количество, | ВТ.КоличествоУчет КАК КоличествоУчет, | ВТ.Цена КАК Цена, | ВТ.ЦенаВРознице КАК ЦенаВРознице, | ВТ.Сумма КАК Сумма, | ВТ.СуммаУчет КАК СуммаУчет, | ВТ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ВТ.ФизЛицо КАК ФизЛицо |ИЗ | ВТ КАК ВТ | |УПОРЯДОЧИТЬ ПО | ВТ.Номенклатура.Код"; Запрос.УстановитьПараметр("ТЗ", ТЗ); ОбъектФормы.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); ЗначениеВДанныеФормы(ОбъектФормы, ВладелецФормыОбъект); КонецПроцедуры |
|||
1
palsergeich
08.11.19
✎
13:51
|
(0) Зачем? У тч из коробки есть метод сортировать
Табличная часть.Сортировать (Tabular section.Sort) Сортировать (Sort) Синтаксис: Сортировать(<Колонки>, <ОбъектСравнения>) Параметры: <Колонки> (обязательный) Тип: Строка. Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее. <ОбъектСравнения> (необязательный) Тип: СравнениеЗначений. |
|||
2
palsergeich
08.11.19
✎
13:53
|
(1) Понял, код у тебя не реквизит ТЧ.
ТАк то должно работать на первый взляд, в чем проблема? |
|||
3
ale-sarin
08.11.19
✎
13:58
|
НомерСтроки может мешает?
|
|||
4
егаис
08.11.19
✎
13:58
|
{ВнешняяОбработка.СортировкаПоКоду.Форма.Форма.Форма(5)}: Ошибка при установке значения атрибута контекста (Объект)
СортироватьНаСервере(ВладелецФормы.Объект); по причине: Нельзя изменять поле, содержащее объект данных формы |
|||
5
palpetrovich
08.11.19
✎
13:59
|
(4) дык, ссылку получи
|
|||
6
егаис
08.11.19
✎
14:01
|
(5) имеешь в виду?
СортироватьНаСервере(ВладелецФормы.Объект.Ссылка); |
|||
7
palpetrovich
08.11.19
✎
14:04
|
(6) сорьки, не дочитал что это обработка
|
|||
8
егаис
08.11.19
✎
14:06
|
(7) вот и я сижу втыкаю на простой, казалось бы, задаче
|
|||
9
ale-sarin
08.11.19
✎
14:13
|
Процедура СортироватьНаСервере(Знач ВладелецФормыОбъект)
Не? |
|||
10
palpetrovich
08.11.19
✎
14:15
|
вот это работает, может поможет...
обработка с ТЧ "ТабличнаяЧасть1" с одним реквизитом Реквизит1 &НаСервере Процедура выгрузитьНаСервере() ТЗ = Объект.ТабличнаяЧасть1.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ * |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; |ВЫБРАТЬ | ВТ.* |ИЗ | ВТ КАК ВТ |УПОРЯДОЧИТЬ ПО ВТ.Реквизит1 |"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Объект.ТабличнаяЧасть1.Загрузить(Запрос.Выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура выгрузить(Команда) выгрузитьНаСервере(); КонецПроцедуры |
|||
11
prostoya
08.11.19
✎
16:16
|
Можно добавить реквизит формы обработки типа таблица значений повторяющая колонки табличной части владельца формы. Передать СортироватьНаСервере(ВладелецФормы.Объект.Ссылка). В этой процедуре на сервере отсортировать запросом и загрузить в реквизит формы обработки (таблица значений). после на клиенте очистить табличную часть владельца и записать циклом данные из реквизита формы обраьотки (таблица значений)…
я так делала. |
|||
12
егаис
08.11.19
✎
16:23
|
(10) я извиняюсь, что такое объект? Это для формы, а не внешней обработки?
это повторяет изначальный код &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт СортироватьНаСервере(ВладелецФормы.Объект); КонецПроцедуры &НаСервереБезКонтекста Процедура СортироватьНаСервере(ВладелецФормыОбъект) //ОбъектФормы = ДанныеФормыВЗначение(ВладелецФормыОбъект, Тип("ДокументОбъект.ИнвентаризацияТоваровНаСкладе")); //ТЗ = ОбъектФормы.Товары.Выгрузить(); ТЗ = ВладелецФормыОбъект.Товары.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.НомерСтроки КАК НомерСтроки, | ТЗ.Номенклатура КАК Номенклатура, | ТЗ.СчетУчета КАК СчетУчета, | ТЗ.Количество КАК Количество, | ТЗ.КоличествоУчет КАК КоличествоУчет, | ТЗ.Цена КАК Цена, | ТЗ.ЦенаВРознице КАК ЦенаВРознице, | ТЗ.Сумма КАК Сумма, | ТЗ.СуммаУчет КАК СуммаУчет, | ТЗ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ТЗ.ФизЛицо КАК ФизЛицо |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.НомерСтроки КАК НомерСтроки, | ВТ.Номенклатура КАК Номенклатура, | ВТ.СчетУчета КАК СчетУчета, | ВТ.Количество КАК Количество, | ВТ.КоличествоУчет КАК КоличествоУчет, | ВТ.Цена КАК Цена, | ВТ.ЦенаВРознице КАК ЦенаВРознице, | ВТ.Сумма КАК Сумма, | ВТ.СуммаУчет КАК СуммаУчет, | ВТ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ВТ.ФизЛицо КАК ФизЛицо |ИЗ | ВТ КАК ВТ | |УПОРЯДОЧИТЬ ПО | ВТ.Номенклатура.Код"; Запрос.УстановитьПараметр("ТЗ", ТЗ); //ОбъектФормы.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); ВладелецФормыОбъект.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); //ЗначениеВДанныеФормы(ОбъектФормы, ВладелецФормыОбъект); КонецПроцедуры |
|||
13
егаис
08.11.19
✎
16:29
|
(11) с ТЗ не интересно
|
|||
14
FIXXXL
08.11.19
✎
16:32
|
(0) так не выйдет...
передавай ТЗ и загружай результат изменять платформа не даёт вне контекста :( |
|||
15
FIXXXL
08.11.19
✎
16:40
|
(14) вернее так: передавать клиент-сервер и обратно не даст вне контекста
|
|||
16
егаис
08.11.19
✎
16:41
|
(14) ну ок
тогда так, для будущих поколений, рабочий вариант &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ЗаполнитьТаблицуИзДокумента(ВладелецФормы.Объект.Ссылка); ВладелецФормы.Объект.Товары.Очистить(); Для Каждого СтрТовары Из Объект.Товары Цикл НоваяЗапись = ВладелецФормы.Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрТовары); КонецЦикла; ВладелецФормы.Модифицированность = Истина; КонецПроцедуры &НаСервере Процедура ЗаполнитьТаблицуИзДокумента(Документ) Экспорт Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.СчетУчета КАК СчетУчета, | Товары.Количество КАК Количество, | Товары.КоличествоУчет КАК КоличествоУчет, | Товары.Цена КАК Цена, | Товары.ЦенаВРознице КАК ЦенаВРознице, | Товары.Сумма КАК Сумма, | Товары.СуммаУчет КАК СуммаУчет, | Товары.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | Товары.ФизЛицо КАК ФизЛицо |ИЗ | Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |УПОРЯДОЧИТЬ ПО | Товары.Номенклатура.Код" ; Запрос.УстановитьПараметр("Ссылка", Документ); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяЗапись = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка); КонецЦикла; КонецПроцедуры В обработку добавить ТЧ со структурой как в документе. Всем спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |